Browse Source

added suport for modifiers in delete queries

Jose Lorenzo Rodriguez 10 years ago
parent
commit
e4ffac7c25

+ 6 - 18
src/Database/QueryCompiler.php

@@ -139,9 +139,9 @@ class QueryCompiler
     protected function _buildSelectPart($parts, $query, $generator)
     {
         $driver = $query->connection()->driver();
-        $select = 'SELECT %s%s%s';
+        $select = 'SELECT%s %s%s';
         if ($this->_orderedUnion && $query->clause('union')) {
-            $select = '(SELECT %s%s%s';
+            $select = '(SELECT%s %s%s';
         }
         $distinct = $query->clause('distinct');
         $modifiers = $this->_buildModifierPart($query->clause('modifier'), $query, $generator);
@@ -159,16 +159,12 @@ class QueryCompiler
             $distinct = 'DISTINCT ';
         }
 
-        if ($modifiers !== null) {
-            $modifiers .= ' ';
-        }
-
         if (is_array($distinct)) {
             $distinct = $this->_stringifyExpressions($distinct, $generator);
             $distinct = sprintf('DISTINCT ON (%s) ', implode(', ', $distinct));
         }
 
-        return sprintf($select, $distinct, $modifiers, implode(', ', $normalized));
+        return sprintf($select, $modifiers, $distinct, implode(', ', $normalized));
     }
 
     /**
@@ -288,11 +284,7 @@ class QueryCompiler
         $columns = $this->_stringifyExpressions($parts[1], $generator);
         $modifiers = $this->_buildModifierPart($query->clause('modifier'), $query, $generator);
 
-        if ($modifiers !== null) {
-            $modifiers .= ' ';
-        }
-
-        return sprintf('INSERT %sINTO %s (%s)', $modifiers, $table, implode(', ', $columns));
+        return sprintf('INSERT%s INTO %s (%s)', $modifiers, $table, implode(', ', $columns));
     }
 
     /**
@@ -321,11 +313,7 @@ class QueryCompiler
         $table = $this->_stringifyExpressions($parts, $generator);
         $modifiers = $this->_buildModifierPart($query->clause('modifier'), $query, $generator);
 
-        if ($modifiers !== null) {
-            $modifiers .= ' ';
-        }
-
-        return sprintf('UPDATE %s%s', $modifiers, implode(',', $table));
+        return sprintf('UPDATE%s %s', $modifiers, implode(',', $table));
     }
 
     /**
@@ -341,7 +329,7 @@ class QueryCompiler
         if ($parts === []) {
             return null;
         }
-        return implode(' ', $this->_stringifyExpressions($parts, $generator, false));
+        return ' ' . implode(' ', $this->_stringifyExpressions($parts, $generator, false));
     }
 
     /**

+ 1 - 1
src/Database/SqlserverCompiler.php

@@ -73,7 +73,7 @@ class SqlserverCompiler extends QueryCompiler
             $modifiers .= ' ';
         }
 
-        return sprintf('INSERT %sINTO %s (%s) OUTPUT INSERTED.*',
+        return sprintf('INSERT%s INTO %s (%s) OUTPUT INSERTED.*',
             $modifiers,
             $table,
             implode(', ', $columns)

+ 32 - 0
tests/TestCase/Database/QueryTest.php

@@ -3713,6 +3713,38 @@ class QueryTest extends TestCase
     }
 
     /**
+     * Test use of modifiers in a DELETE query
+     *
+     * Testing the generated SQL since the modifiers are usually different per driver
+     *
+     * @return void
+     */
+    public function testDeleteModifiers()
+    {
+        $query = new Query($this->connection);
+        $result = $query->delete()
+            ->from('authors')
+            ->where('1 = 1')
+            ->modifier('IGNORE');
+        $this->assertQuotedQuery(
+            'DELETE IGNORE FROM <authors> WHERE 1 = 1',
+            $result->sql(),
+            !$this->autoQuote
+        );
+
+        $query = new Query($this->connection);
+        $result = $query->delete()
+            ->from('authors')
+            ->where('1 = 1')
+            ->modifier(['IGNORE', 'QUICK']);
+        $this->assertQuotedQuery(
+            'DELETE IGNORE QUICK FROM <authors> WHERE 1 = 1',
+            $result->sql(),
+            !$this->autoQuote
+        );
+    }
+
+    /**
      * Assertion for comparing a table's contents with what is in it.
      *
      * @param string $table