Merge "Add support for 'hu-formal'"
[lhc/web/wiklou.git] / tests / phpunit / includes / libs / rdbms / database / DatabaseSQLTest.php
index d8ebeff..5c1943b 100644 (file)
@@ -6,7 +6,7 @@ use Wikimedia\Rdbms\LikeMatch;
  * Test the parts of the Database abstract class that deal
  * with creating SQL text.
  */
-class DatabaseSQLTest extends PHPUnit_Framework_TestCase {
+class DatabaseSQLTest extends PHPUnit\Framework\TestCase {
 
        use MediaWikiCoversValidator;
 
@@ -64,6 +64,44 @@ class DatabaseSQLTest extends PHPUnit_Framework_TestCase {
                                        "FROM table " .
                                        "WHERE alias = 'text'"
                        ],
+                       [
+                               [
+                                       'tables' => 'table',
+                                       'fields' => [ 'field', 'alias' => 'field2' ],
+                                       'conds' => 'alias = \'text\'',
+                               ],
+                               "SELECT field,field2 AS alias " .
+                               "FROM table " .
+                               "WHERE alias = 'text'"
+                       ],
+                       [
+                               [
+                                       'tables' => 'table',
+                                       'fields' => [ 'field', 'alias' => 'field2' ],
+                                       'conds' => [],
+                               ],
+                               "SELECT field,field2 AS alias " .
+                               "FROM table"
+                       ],
+                       [
+                               [
+                                       'tables' => 'table',
+                                       'fields' => [ 'field', 'alias' => 'field2' ],
+                                       'conds' => '',
+                               ],
+                               "SELECT field,field2 AS alias " .
+                               "FROM table"
+                       ],
+                       [
+                               [
+                                       'tables' => 'table',
+                                       'fields' => [ 'field', 'alias' => 'field2' ],
+                                       'conds' => '0', // T188314
+                               ],
+                               "SELECT field,field2 AS alias " .
+                               "FROM table " .
+                               "WHERE 0"
+                       ],
                        [
                                [
                                        // 'tables' with space prepended indicates pre-escaped table name
@@ -457,7 +495,7 @@ class DatabaseSQLTest extends PHPUnit_Framework_TestCase {
                        isset( $sql['selectOptions'] ) ? $sql['selectOptions'] : [],
                        isset( $sql['selectJoinConds'] ) ? $sql['selectJoinConds'] : []
                );
-               $this->assertLastSqlDb( implode( '; ', [ $sqlSelect, $sqlInsert ] ), $dbWeb );
+               $this->assertLastSqlDb( implode( '; ', [ $sqlSelect, 'BEGIN', $sqlInsert, 'COMMIT' ] ), $dbWeb );
        }
 
        public static function provideInsertSelect() {
@@ -518,6 +556,7 @@ class DatabaseSQLTest extends PHPUnit_Framework_TestCase {
                                        'srcTable' => [ 'select_table1', 'select_table2' ],
                                        'varMap' => [ 'field_insert' => 'field_select', 'field' => 'field2' ],
                                        'conds' => [ 'field' => 2 ],
+                                       'insertOptions' => [ 'NO_AUTO_COLUMNS' ],
                                        'selectOptions' => [ 'ORDER BY' => 'field', 'FORCE INDEX' => [ 'select_table1' => 'index1' ] ],
                                        'selectJoinConds' => [
                                                'select_table2' => [ 'LEFT JOIN', [ 'select_table1.foo = select_table2.bar' ] ],
@@ -537,6 +576,30 @@ class DatabaseSQLTest extends PHPUnit_Framework_TestCase {
                ];
        }
 
+       public function testInsertSelectBatching() {
+               $dbWeb = new DatabaseTestHelper( __CLASS__, [ 'cliMode' => false ] );
+               $rows = [];
+               for ( $i = 0; $i <= 25000; $i++ ) {
+                       $rows[] = [ 'field' => $i ];
+               }
+               $dbWeb->forceNextResult( $rows );
+               $dbWeb->insertSelect(
+                       'insert_table',
+                       'select_table',
+                       [ 'field' => 'field2' ],
+                       '*',
+                       __METHOD__
+               );
+               $this->assertLastSqlDb( implode( '; ', [
+                       'SELECT field2 AS field FROM select_table WHERE *   FOR UPDATE',
+                       'BEGIN',
+                       "INSERT INTO insert_table (field) VALUES ('" . implode( "'),('", range( 0, 9999 ) ) . "')",
+                       "INSERT INTO insert_table (field) VALUES ('" . implode( "'),('", range( 10000, 19999 ) ) . "')",
+                       "INSERT INTO insert_table (field) VALUES ('" . implode( "'),('", range( 20000, 25000 ) ) . "')",
+                       'COMMIT'
+               ] ), $dbWeb );
+       }
+
        /**
         * @dataProvider provideReplace
         * @covers Wikimedia\Rdbms\Database::replace
@@ -559,11 +622,11 @@ class DatabaseSQLTest extends PHPUnit_Framework_TestCase {
                                        'uniqueIndexes' => [ 'field' ],
                                        'rows' => [ 'field' => 'text', 'field2' => 'text2' ],
                                ],
-                               "DELETE FROM replace_table " .
+                               "BEGIN; DELETE FROM replace_table " .
                                        "WHERE (field = 'text'); " .
                                        "INSERT INTO replace_table " .
                                        "(field,field2) " .
-                                       "VALUES ('text','text2')"
+                                       "VALUES ('text','text2'); COMMIT"
                        ],
                        [
                                [
@@ -575,11 +638,11 @@ class DatabaseSQLTest extends PHPUnit_Framework_TestCase {
                                                'md_deps' => 'deps',
                                        ],
                                ],
-                               "DELETE FROM module_deps " .
+                               "BEGIN; DELETE FROM module_deps " .
                                        "WHERE (md_module = 'module' AND md_skin = 'skin'); " .
                                        "INSERT INTO module_deps " .
                                        "(md_module,md_skin,md_deps) " .
-                                       "VALUES ('module','skin','deps')"
+                                       "VALUES ('module','skin','deps'); COMMIT"
                        ],
                        [
                                [
@@ -597,7 +660,7 @@ class DatabaseSQLTest extends PHPUnit_Framework_TestCase {
                                                ],
                                        ],
                                ],
-                               "DELETE FROM module_deps " .
+                               "BEGIN; DELETE FROM module_deps " .
                                        "WHERE (md_module = 'module' AND md_skin = 'skin'); " .
                                        "INSERT INTO module_deps " .
                                        "(md_module,md_skin,md_deps) " .
@@ -606,7 +669,7 @@ class DatabaseSQLTest extends PHPUnit_Framework_TestCase {
                                        "WHERE (md_module = 'module2' AND md_skin = 'skin2'); " .
                                        "INSERT INTO module_deps " .
                                        "(md_module,md_skin,md_deps) " .
-                                       "VALUES ('module2','skin2','deps2')"
+                                       "VALUES ('module2','skin2','deps2'); COMMIT"
                        ],
                        [
                                [
@@ -624,7 +687,7 @@ class DatabaseSQLTest extends PHPUnit_Framework_TestCase {
                                                ],
                                        ],
                                ],
-                               "DELETE FROM module_deps " .
+                               "BEGIN; DELETE FROM module_deps " .
                                        "WHERE (md_module = 'module') OR (md_skin = 'skin'); " .
                                        "INSERT INTO module_deps " .
                                        "(md_module,md_skin,md_deps) " .
@@ -633,7 +696,7 @@ class DatabaseSQLTest extends PHPUnit_Framework_TestCase {
                                        "WHERE (md_module = 'module2') OR (md_skin = 'skin2'); " .
                                        "INSERT INTO module_deps " .
                                        "(md_module,md_skin,md_deps) " .
-                                       "VALUES ('module2','skin2','deps2')"
+                                       "VALUES ('module2','skin2','deps2'); COMMIT"
                        ],
                        [
                                [
@@ -645,9 +708,9 @@ class DatabaseSQLTest extends PHPUnit_Framework_TestCase {
                                                'md_deps' => 'deps',
                                        ],
                                ],
-                               "INSERT INTO module_deps " .
+                               "BEGIN; INSERT INTO module_deps " .
                                        "(md_module,md_skin,md_deps) " .
-                                       "VALUES ('module','skin','deps')"
+                                       "VALUES ('module','skin','deps'); COMMIT"
                        ],
                ];
        }