Follow-up of changeset 29769: Using a real extended insert when dealing with 'native...
authorXavier Perseguers <typo3@perseguers.ch>
Sun, 7 Feb 2010 14:56:18 +0000 (14:56 +0000)
committerXavier Perseguers <typo3@perseguers.ch>
Sun, 7 Feb 2010 14:56:18 +0000 (14:56 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Extensions/dbal/trunk@29771 735d13b6-9817-0410-8766-e36946ffe9aa

typo3/sysext/dbal/class.ux_t3lib_db.php
typo3/sysext/dbal/tests/db_general_testcase.php
typo3/sysext/dbal/tests/db_oracle_testcase.php

index f66ba16..5dc723f 100644 (file)
@@ -896,6 +896,10 @@ class ux_t3lib_DB extends t3lib_DB {
         * @return      array           Full SQL query for INSERT as array of strings (unless $fields_values does not contain any elements in which case it will be FALSE). If BLOB fields will be affected and one is not running the native type, an array will be returned for each row, where 0 => plain SQL, 1 => fieldname/value pairs of BLOB fields.
         */
        public function INSERTmultipleRows($table, array $fields, array $rows, $no_quote_fields = FALSE) {
+               if ((string)$this->handlerCfg[$this->lastHandlerKey]['type'] === 'native') {
+                       return parent::INSERTmultipleRows($table, $fields, $rows, $no_quote_fields);
+               }
+
                $result = array();
 
                foreach ($rows as $row) {
index d6b925a..9fbeac0 100644 (file)
@@ -205,18 +205,14 @@ class db_general_testcase extends BaseTestCase {
                        array('3', '4', 'Title #2', 'Content #2'),
                        array('5', '6', 'Title #3', 'Content #3'),
                );
-               $query = $GLOBALS['TYPO3_DB']->INSERTmultipleRows('tt_content', $fields, $rows);
+               $query = $this->cleanSql($GLOBALS['TYPO3_DB']->INSERTmultipleRows('tt_content', $fields, $rows));
 
-               $expected[0] = "INSERT INTO tt_content ( uid, pid, title, body ) VALUES ( '1', '2', 'Title #1', 'Content #1' )";
-               $expected[1] = "INSERT INTO tt_content ( uid, pid, title, body ) VALUES ( '3', '4', 'Title #2', 'Content #2' )";
-               $expected[2] = "INSERT INTO tt_content ( uid, pid, title, body ) VALUES ( '5', '6', 'Title #3', 'Content #3' )";
+               $expected = 'INSERT INTO tt_content (uid, pid, title, body) VALUES ';
+               $expected .= "('1', '2', 'Title #1', 'Content #1'), ";
+               $expected .= "('3', '4', 'Title #2', 'Content #2'), ";
+               $expected .= "('5', '6', 'Title #3', 'Content #3')";
 
-               $this->assertEquals(count($expected), count($query));
-               for ($i = 0; $i < count($query); $i++) {
-                       $this->assertTrue(is_array($query[$i]), 'Expected array: ' . $query[$i]);
-                       $this->assertEquals(1, count($query[$i]));
-                       $this->assertEquals($expected[$i], $this->cleanSql($query[$i][0]));
-               }
+               $this->assertEquals($expected, $query);
        }
 }
 ?>
\ No newline at end of file
index c49736d..ec82e5f 100644 (file)
@@ -181,6 +181,31 @@ class db_oracle_testcase extends BaseTestCase {
                }
        }
 
+       /**
+        * @test
+        * http://bugs.typo3.org/view.php?id=12858
+        */
+       public function sqlForInsertWithMultipleRowsIsValid() {
+               $fields = array('uid', 'pid', 'title', 'body');
+               $rows = array(
+                       array('1', '2', 'Title #1', 'Content #1'),
+                       array('3', '4', 'Title #2', 'Content #2'),
+                       array('5', '6', 'Title #3', 'Content #3'),
+               );
+               $query = $GLOBALS['TYPO3_DB']->INSERTmultipleRows('tt_content', $fields, $rows);
+
+               $expected[0] = 'INSERT INTO "tt_content" ( "uid", "pid", "title", "body" ) VALUES ( \'1\', \'2\', \'Title #1\', \'Content #1\' )';
+               $expected[1] = 'INSERT INTO "tt_content" ( "uid", "pid", "title", "body" ) VALUES ( \'3\', \'4\', \'Title #2\', \'Content #2\' )';
+               $expected[2] = 'INSERT INTO "tt_content" ( "uid", "pid", "title", "body" ) VALUES ( \'5\', \'6\', \'Title #3\', \'Content #3\' )';
+
+               $this->assertEquals(count($expected), count($query));
+               for ($i = 0; $i < count($query); $i++) {
+                       $this->assertTrue(is_array($query[$i]), 'Expected array: ' . $query[$i]);
+                       $this->assertEquals(1, count($query[$i]));
+                       $this->assertEquals($expected[$i], $this->cleanSql($query[$i][0]));
+               }
+       }
+
        ///////////////////////////////////////
        // Tests concerning quoting
        ///////////////////////////////////////