X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2Fdb%2FDatabaseSQLTest.php;h=68bc964e8c33954885df0031cc1c1f335c018492;hb=24ac34ef9778487c02c58c40ef7cf5b2d7380f91;hp=b13751f3602106378ff2d26b04e13e3bab3816f0;hpb=0c8327466bebd44a9c0f60cd010307446b9ead63;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/includes/db/DatabaseSQLTest.php b/tests/phpunit/includes/db/DatabaseSQLTest.php index b13751f360..68bc964e8c 100644 --- a/tests/phpunit/includes/db/DatabaseSQLTest.php +++ b/tests/phpunit/includes/db/DatabaseSQLTest.php @@ -5,15 +5,12 @@ * This is a non DBMS depending test. */ class DatabaseSQLTest extends MediaWikiTestCase { - - /** - * @var DatabaseTestHelper - */ + /** @var DatabaseTestHelper */ private $database; protected function setUp() { parent::setUp(); - $this->database = new DatabaseTestHelper( __CLASS__ ); + $this->database = new DatabaseTestHelper( __CLASS__, [ 'cliMode' => true ] ); } protected function assertLastSql( $sqlText ) { @@ -23,6 +20,10 @@ class DatabaseSQLTest extends MediaWikiTestCase { ); } + protected function assertLastSqlDb( $sqlText, $db ) { + $this->assertEquals( $db->getLastSqls(), $sqlText ); + } + /** * @dataProvider provideSelect * @covers DatabaseBase::select @@ -31,102 +32,102 @@ class DatabaseSQLTest extends MediaWikiTestCase { $this->database->select( $sql['tables'], $sql['fields'], - isset( $sql['conds'] ) ? $sql['conds'] : array(), + isset( $sql['conds'] ) ? $sql['conds'] : [], __METHOD__, - isset( $sql['options'] ) ? $sql['options'] : array(), - isset( $sql['join_conds'] ) ? $sql['join_conds'] : array() + isset( $sql['options'] ) ? $sql['options'] : [], + isset( $sql['join_conds'] ) ? $sql['join_conds'] : [] ); $this->assertLastSql( $sqlText ); } public static function provideSelect() { - return array( - array( - array( + return [ + [ + [ 'tables' => 'table', - 'fields' => array( 'field', 'alias' => 'field2' ), - 'conds' => array( 'alias' => 'text' ), - ), + 'fields' => [ 'field', 'alias' => 'field2' ], + 'conds' => [ 'alias' => 'text' ], + ], "SELECT field,field2 AS alias " . "FROM table " . "WHERE alias = 'text'" - ), - array( - array( + ], + [ + [ 'tables' => 'table', - 'fields' => array( 'field', 'alias' => 'field2' ), - 'conds' => array( 'alias' => 'text' ), - 'options' => array( 'LIMIT' => 1, 'ORDER BY' => 'field' ), - ), + 'fields' => [ 'field', 'alias' => 'field2' ], + 'conds' => [ 'alias' => 'text' ], + 'options' => [ 'LIMIT' => 1, 'ORDER BY' => 'field' ], + ], "SELECT field,field2 AS alias " . "FROM table " . "WHERE alias = 'text' " . "ORDER BY field " . "LIMIT 1" - ), - array( - array( - 'tables' => array( 'table', 't2' => 'table2' ), - 'fields' => array( 'tid', 'field', 'alias' => 'field2', 't2.id' ), - 'conds' => array( 'alias' => 'text' ), - 'options' => array( 'LIMIT' => 1, 'ORDER BY' => 'field' ), - 'join_conds' => array( 't2' => array( + ], + [ + [ + 'tables' => [ 'table', 't2' => 'table2' ], + 'fields' => [ 'tid', 'field', 'alias' => 'field2', 't2.id' ], + 'conds' => [ 'alias' => 'text' ], + 'options' => [ 'LIMIT' => 1, 'ORDER BY' => 'field' ], + 'join_conds' => [ 't2' => [ 'LEFT JOIN', 'tid = t2.id' - ) ), - ), + ] ], + ], "SELECT tid,field,field2 AS alias,t2.id " . "FROM table LEFT JOIN table2 t2 ON ((tid = t2.id)) " . "WHERE alias = 'text' " . "ORDER BY field " . "LIMIT 1" - ), - array( - array( - 'tables' => array( 'table', 't2' => 'table2' ), - 'fields' => array( 'tid', 'field', 'alias' => 'field2', 't2.id' ), - 'conds' => array( 'alias' => 'text' ), - 'options' => array( 'LIMIT' => 1, 'GROUP BY' => 'field', 'HAVING' => 'COUNT(*) > 1' ), - 'join_conds' => array( 't2' => array( + ], + [ + [ + 'tables' => [ 'table', 't2' => 'table2' ], + 'fields' => [ 'tid', 'field', 'alias' => 'field2', 't2.id' ], + 'conds' => [ 'alias' => 'text' ], + 'options' => [ 'LIMIT' => 1, 'GROUP BY' => 'field', 'HAVING' => 'COUNT(*) > 1' ], + 'join_conds' => [ 't2' => [ 'LEFT JOIN', 'tid = t2.id' - ) ), - ), + ] ], + ], "SELECT tid,field,field2 AS alias,t2.id " . "FROM table LEFT JOIN table2 t2 ON ((tid = t2.id)) " . "WHERE alias = 'text' " . "GROUP BY field HAVING COUNT(*) > 1 " . "LIMIT 1" - ), - array( - array( - 'tables' => array( 'table', 't2' => 'table2' ), - 'fields' => array( 'tid', 'field', 'alias' => 'field2', 't2.id' ), - 'conds' => array( 'alias' => 'text' ), - 'options' => array( + ], + [ + [ + 'tables' => [ 'table', 't2' => 'table2' ], + 'fields' => [ 'tid', 'field', 'alias' => 'field2', 't2.id' ], + 'conds' => [ 'alias' => 'text' ], + 'options' => [ 'LIMIT' => 1, - 'GROUP BY' => array( 'field', 'field2' ), - 'HAVING' => array( 'COUNT(*) > 1', 'field' => 1 ) - ), - 'join_conds' => array( 't2' => array( + 'GROUP BY' => [ 'field', 'field2' ], + 'HAVING' => [ 'COUNT(*) > 1', 'field' => 1 ] + ], + 'join_conds' => [ 't2' => [ 'LEFT JOIN', 'tid = t2.id' - ) ), - ), + ] ], + ], "SELECT tid,field,field2 AS alias,t2.id " . "FROM table LEFT JOIN table2 t2 ON ((tid = t2.id)) " . "WHERE alias = 'text' " . "GROUP BY field,field2 HAVING (COUNT(*) > 1) AND field = '1' " . "LIMIT 1" - ), - array( - array( - 'tables' => array( 'table' ), - 'fields' => array( 'alias' => 'field' ), - 'conds' => array( 'alias' => array( 1, 2, 3, 4 ) ), - ), + ], + [ + [ + 'tables' => [ 'table' ], + 'fields' => [ 'alias' => 'field' ], + 'conds' => [ 'alias' => [ 1, 2, 3, 4 ] ], + ], "SELECT field AS alias " . "FROM table " . "WHERE alias IN ('1','2','3','4')" - ), - ); + ], + ]; } /** @@ -139,46 +140,46 @@ class DatabaseSQLTest extends MediaWikiTestCase { $sql['values'], $sql['conds'], __METHOD__, - isset( $sql['options'] ) ? $sql['options'] : array() + isset( $sql['options'] ) ? $sql['options'] : [] ); $this->assertLastSql( $sqlText ); } public static function provideUpdate() { - return array( - array( - array( + return [ + [ + [ 'table' => 'table', - 'values' => array( 'field' => 'text', 'field2' => 'text2' ), - 'conds' => array( 'alias' => 'text' ), - ), + 'values' => [ 'field' => 'text', 'field2' => 'text2' ], + 'conds' => [ 'alias' => 'text' ], + ], "UPDATE table " . "SET field = 'text'" . ",field2 = 'text2' " . "WHERE alias = 'text'" - ), - array( - array( + ], + [ + [ 'table' => 'table', - 'values' => array( 'field = other', 'field2' => 'text2' ), - 'conds' => array( 'id' => '1' ), - ), + 'values' => [ 'field = other', 'field2' => 'text2' ], + 'conds' => [ 'id' => '1' ], + ], "UPDATE table " . "SET field = other" . ",field2 = 'text2' " . "WHERE id = '1'" - ), - array( - array( + ], + [ + [ 'table' => 'table', - 'values' => array( 'field = other', 'field2' => 'text2' ), + 'values' => [ 'field = other', 'field2' => 'text2' ], 'conds' => '*', - ), + ], "UPDATE table " . "SET field = other" . ",field2 = 'text2'" - ), - ); + ], + ]; } /** @@ -195,23 +196,23 @@ class DatabaseSQLTest extends MediaWikiTestCase { } public static function provideDelete() { - return array( - array( - array( + return [ + [ + [ 'table' => 'table', - 'conds' => array( 'alias' => 'text' ), - ), + 'conds' => [ 'alias' => 'text' ], + ], "DELETE FROM table " . "WHERE alias = 'text'" - ), - array( - array( + ], + [ + [ 'table' => 'table', 'conds' => '*', - ), + ], "DELETE FROM table" - ), - ); + ], + ]; } /** @@ -230,14 +231,14 @@ class DatabaseSQLTest extends MediaWikiTestCase { } public static function provideUpsert() { - return array( - array( - array( + return [ + [ + [ 'table' => 'upsert_table', - 'rows' => array( 'field' => 'text', 'field2' => 'text2' ), - 'uniqueIndexes' => array( 'field' ), - 'set' => array( 'field' => 'set' ), - ), + 'rows' => [ 'field' => 'text', 'field2' => 'text2' ], + 'uniqueIndexes' => [ 'field' ], + 'set' => [ 'field' => 'set' ], + ], "BEGIN; " . "UPDATE upsert_table " . "SET field = 'set' " . @@ -246,8 +247,8 @@ class DatabaseSQLTest extends MediaWikiTestCase { "(field,field2) " . "VALUES ('text','text2'); " . "COMMIT" - ), - ); + ], + ]; } /** @@ -267,34 +268,34 @@ class DatabaseSQLTest extends MediaWikiTestCase { } public static function provideDeleteJoin() { - return array( - array( - array( + return [ + [ + [ 'delTable' => 'table', 'joinTable' => 'table_join', 'delVar' => 'field', 'joinVar' => 'field_join', - 'conds' => array( 'alias' => 'text' ), - ), + 'conds' => [ 'alias' => 'text' ], + ], "DELETE FROM table " . "WHERE field IN (" . "SELECT field_join FROM table_join WHERE alias = 'text'" . ")" - ), - array( - array( + ], + [ + [ 'delTable' => 'table', 'joinTable' => 'table_join', 'delVar' => 'field', 'joinVar' => 'field_join', 'conds' => '*', - ), + ], "DELETE FROM table " . "WHERE field IN (" . "SELECT field_join FROM table_join " . ")" - ), - ); + ], + ]; } /** @@ -306,111 +307,135 @@ class DatabaseSQLTest extends MediaWikiTestCase { $sql['table'], $sql['rows'], __METHOD__, - isset( $sql['options'] ) ? $sql['options'] : array() + isset( $sql['options'] ) ? $sql['options'] : [] ); $this->assertLastSql( $sqlText ); } public static function provideInsert() { - return array( - array( - array( + return [ + [ + [ 'table' => 'table', - 'rows' => array( 'field' => 'text', 'field2' => 2 ), - ), + 'rows' => [ 'field' => 'text', 'field2' => 2 ], + ], "INSERT INTO table " . "(field,field2) " . "VALUES ('text','2')" - ), - array( - array( + ], + [ + [ 'table' => 'table', - 'rows' => array( 'field' => 'text', 'field2' => 2 ), + 'rows' => [ 'field' => 'text', 'field2' => 2 ], 'options' => 'IGNORE', - ), + ], "INSERT IGNORE INTO table " . "(field,field2) " . "VALUES ('text','2')" - ), - array( - array( + ], + [ + [ 'table' => 'table', - 'rows' => array( - array( 'field' => 'text', 'field2' => 2 ), - array( 'field' => 'multi', 'field2' => 3 ), - ), + 'rows' => [ + [ 'field' => 'text', 'field2' => 2 ], + [ 'field' => 'multi', 'field2' => 3 ], + ], 'options' => 'IGNORE', - ), + ], "INSERT IGNORE INTO table " . "(field,field2) " . "VALUES " . "('text','2')," . "('multi','3')" - ), - ); + ], + ]; } /** * @dataProvider provideInsertSelect * @covers DatabaseBase::insertSelect */ - public function testInsertSelect( $sql, $sqlText ) { + public function testInsertSelect( $sql, $sqlTextNative, $sqlSelect, $sqlInsert ) { $this->database->insertSelect( $sql['destTable'], $sql['srcTable'], $sql['varMap'], $sql['conds'], __METHOD__, - isset( $sql['insertOptions'] ) ? $sql['insertOptions'] : array(), - isset( $sql['selectOptions'] ) ? $sql['selectOptions'] : array() + isset( $sql['insertOptions'] ) ? $sql['insertOptions'] : [], + isset( $sql['selectOptions'] ) ? $sql['selectOptions'] : [] ); - $this->assertLastSql( $sqlText ); + $this->assertLastSql( $sqlTextNative ); + + $dbWeb = new DatabaseTestHelper( __CLASS__, [ 'cliMode' => false ] ); + $dbWeb->forceNextResult( [ + array_flip( array_keys( $sql['varMap'] ) ) + ] ); + $dbWeb->insertSelect( + $sql['destTable'], + $sql['srcTable'], + $sql['varMap'], + $sql['conds'], + __METHOD__, + isset( $sql['insertOptions'] ) ? $sql['insertOptions'] : [], + isset( $sql['selectOptions'] ) ? $sql['selectOptions'] : [] + ); + $this->assertLastSqlDb( implode( '; ', [ $sqlSelect, $sqlInsert ] ), $dbWeb ); } public static function provideInsertSelect() { - return array( - array( - array( + return [ + [ + [ 'destTable' => 'insert_table', 'srcTable' => 'select_table', - 'varMap' => array( 'field_insert' => 'field_select', 'field' => 'field2' ), + 'varMap' => [ 'field_insert' => 'field_select', 'field' => 'field2' ], 'conds' => '*', - ), + ], "INSERT INTO insert_table " . "(field_insert,field) " . "SELECT field_select,field2 " . - "FROM select_table" - ), - array( - array( + "FROM select_table", + "SELECT field_select AS field_insert,field2 AS field " . + "FROM select_table WHERE * FOR UPDATE", + "INSERT INTO insert_table (field_insert,field) VALUES ('0','1')" + ], + [ + [ 'destTable' => 'insert_table', 'srcTable' => 'select_table', - 'varMap' => array( 'field_insert' => 'field_select', 'field' => 'field2' ), - 'conds' => array( 'field' => 2 ), - ), + 'varMap' => [ 'field_insert' => 'field_select', 'field' => 'field2' ], + 'conds' => [ 'field' => 2 ], + ], "INSERT INTO insert_table " . "(field_insert,field) " . "SELECT field_select,field2 " . "FROM select_table " . - "WHERE field = '2'" - ), - array( - array( + "WHERE field = '2'", + "SELECT field_select AS field_insert,field2 AS field FROM " . + "select_table WHERE field = '2' FOR UPDATE", + "INSERT INTO insert_table (field_insert,field) VALUES ('0','1')" + ], + [ + [ 'destTable' => 'insert_table', 'srcTable' => 'select_table', - 'varMap' => array( 'field_insert' => 'field_select', 'field' => 'field2' ), - 'conds' => array( 'field' => 2 ), + 'varMap' => [ 'field_insert' => 'field_select', 'field' => 'field2' ], + 'conds' => [ 'field' => 2 ], 'insertOptions' => 'IGNORE', - 'selectOptions' => array( 'ORDER BY' => 'field' ), - ), + 'selectOptions' => [ 'ORDER BY' => 'field' ], + ], "INSERT IGNORE INTO insert_table " . "(field_insert,field) " . "SELECT field_select,field2 " . "FROM select_table " . "WHERE field = '2' " . - "ORDER BY field" - ), - ); + "ORDER BY field", + "SELECT field_select AS field_insert,field2 AS field " . + "FROM select_table WHERE field = '2' ORDER BY field FOR UPDATE", + "INSERT IGNORE INTO insert_table (field_insert,field) VALUES ('0','1')" + ], + ]; } /** @@ -428,51 +453,51 @@ class DatabaseSQLTest extends MediaWikiTestCase { } public static function provideReplace() { - return array( - array( - array( + return [ + [ + [ 'table' => 'replace_table', - 'uniqueIndexes' => array( 'field' ), - 'rows' => array( 'field' => 'text', 'field2' => 'text2' ), - ), + 'uniqueIndexes' => [ 'field' ], + 'rows' => [ 'field' => 'text', 'field2' => 'text2' ], + ], "DELETE FROM replace_table " . "WHERE ( field='text' ); " . "INSERT INTO replace_table " . "(field,field2) " . "VALUES ('text','text2')" - ), - array( - array( + ], + [ + [ 'table' => 'module_deps', - 'uniqueIndexes' => array( array( 'md_module', 'md_skin' ) ), - 'rows' => array( + 'uniqueIndexes' => [ [ 'md_module', 'md_skin' ] ], + 'rows' => [ 'md_module' => 'module', 'md_skin' => 'skin', 'md_deps' => 'deps', - ), - ), + ], + ], "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')" - ), - array( - array( + ], + [ + [ 'table' => 'module_deps', - 'uniqueIndexes' => array( array( 'md_module', 'md_skin' ) ), - 'rows' => array( - array( + 'uniqueIndexes' => [ [ 'md_module', 'md_skin' ] ], + 'rows' => [ + [ 'md_module' => 'module', 'md_skin' => 'skin', 'md_deps' => 'deps', - ), array( + ], [ 'md_module' => 'module2', 'md_skin' => 'skin2', 'md_deps' => 'deps2', - ), - ), - ), + ], + ], + ], "DELETE FROM module_deps " . "WHERE ( md_module='module' AND md_skin='skin' ); " . "INSERT INTO module_deps " . @@ -483,23 +508,23 @@ class DatabaseSQLTest extends MediaWikiTestCase { "INSERT INTO module_deps " . "(md_module,md_skin,md_deps) " . "VALUES ('module2','skin2','deps2')" - ), - array( - array( + ], + [ + [ 'table' => 'module_deps', - 'uniqueIndexes' => array( 'md_module', 'md_skin' ), - 'rows' => array( - array( + 'uniqueIndexes' => [ 'md_module', 'md_skin' ], + 'rows' => [ + [ 'md_module' => 'module', 'md_skin' => 'skin', 'md_deps' => 'deps', - ), array( + ], [ 'md_module' => 'module2', 'md_skin' => 'skin2', 'md_deps' => 'deps2', - ), - ), - ), + ], + ], + ], "DELETE FROM module_deps " . "WHERE ( md_module='module' ) OR ( md_skin='skin' ); " . "INSERT INTO module_deps " . @@ -510,22 +535,22 @@ class DatabaseSQLTest extends MediaWikiTestCase { "INSERT INTO module_deps " . "(md_module,md_skin,md_deps) " . "VALUES ('module2','skin2','deps2')" - ), - array( - array( + ], + [ + [ 'table' => 'module_deps', - 'uniqueIndexes' => array(), - 'rows' => array( + 'uniqueIndexes' => [], + 'rows' => [ 'md_module' => 'module', 'md_skin' => 'skin', 'md_deps' => 'deps', - ), - ), + ], + ], "INSERT INTO module_deps " . "(md_module,md_skin,md_deps) " . "VALUES ('module','skin','deps')" - ), - ); + ], + ]; } /** @@ -542,17 +567,17 @@ class DatabaseSQLTest extends MediaWikiTestCase { } public static function provideNativeReplace() { - return array( - array( - array( + return [ + [ + [ 'table' => 'replace_table', - 'rows' => array( 'field' => 'text', 'field2' => 'text2' ), - ), + 'rows' => [ 'field' => 'text', 'field2' => 'text2' ], + ], "REPLACE INTO replace_table " . "(field,field2) " . "VALUES ('text','text2')" - ), - ); + ], + ]; } /** @@ -568,32 +593,32 @@ class DatabaseSQLTest extends MediaWikiTestCase { } public static function provideConditional() { - return array( - array( - array( - 'conds' => array( 'field' => 'text' ), + return [ + [ + [ + 'conds' => [ 'field' => 'text' ], 'true' => 1, 'false' => 'NULL', - ), + ], "(CASE WHEN field = 'text' THEN 1 ELSE NULL END)" - ), - array( - array( - 'conds' => array( 'field' => 'text', 'field2' => 'anothertext' ), + ], + [ + [ + 'conds' => [ 'field' => 'text', 'field2' => 'anothertext' ], 'true' => 1, 'false' => 'NULL', - ), + ], "(CASE WHEN field = 'text' AND field2 = 'anothertext' THEN 1 ELSE NULL END)" - ), - array( - array( + ], + [ + [ 'conds' => 'field=1', 'true' => 1, 'false' => 'NULL', - ), + ], "(CASE WHEN field=1 THEN 1 ELSE NULL END)" - ), - ); + ], + ]; } /** @@ -607,16 +632,16 @@ class DatabaseSQLTest extends MediaWikiTestCase { } public static function provideBuildConcat() { - return array( - array( - array( 'field', 'field2' ), + return [ + [ + [ 'field', 'field2' ], "CONCAT(field,field2)" - ), - array( - array( "'test'", 'field2' ), + ], + [ + [ "'test'", 'field2' ], "CONCAT('test',field2)" - ), - ); + ], + ]; } /** @@ -630,24 +655,24 @@ class DatabaseSQLTest extends MediaWikiTestCase { } public static function provideBuildLike() { - return array( - array( + return [ + [ 'text', "LIKE 'text'" - ), - array( - array( 'text', new LikeMatch( '%' ) ), + ], + [ + [ 'text', new LikeMatch( '%' ) ], "LIKE 'text%'" - ), - array( - array( 'text', new LikeMatch( '%' ), 'text2' ), + ], + [ + [ 'text', new LikeMatch( '%' ), 'text2' ], "LIKE 'text%text2'" - ), - array( - array( 'text', new LikeMatch( '_' ) ), + ], + [ + [ 'text', new LikeMatch( '_' ) ], "LIKE 'text_'" - ), - ); + ], + ]; } /** @@ -662,29 +687,29 @@ class DatabaseSQLTest extends MediaWikiTestCase { } public static function provideUnionQueries() { - return array( - array( - array( - 'sqls' => array( 'RAW SQL', 'RAW2SQL' ), + return [ + [ + [ + 'sqls' => [ 'RAW SQL', 'RAW2SQL' ], 'all' => true, - ), + ], "(RAW SQL) UNION ALL (RAW2SQL)" - ), - array( - array( - 'sqls' => array( 'RAW SQL', 'RAW2SQL' ), + ], + [ + [ + 'sqls' => [ 'RAW SQL', 'RAW2SQL' ], 'all' => false, - ), + ], "(RAW SQL) UNION (RAW2SQL)" - ), - array( - array( - 'sqls' => array( 'RAW SQL', 'RAW2SQL', 'RAW3SQL' ), + ], + [ + [ + 'sqls' => [ 'RAW SQL', 'RAW2SQL', 'RAW3SQL' ], 'all' => false, - ), + ], "(RAW SQL) UNION (RAW2SQL) UNION (RAW3SQL)" - ), - ); + ], + ]; } /** @@ -709,9 +734,9 @@ class DatabaseSQLTest extends MediaWikiTestCase { * @covers DatabaseBase::dropTable */ public function testDropTable() { - $this->database->setExistingTables( array( 'table' ) ); + $this->database->setExistingTables( [ 'table' ] ); $this->database->dropTable( 'table', __METHOD__ ); - $this->assertLastSql( 'DROP TABLE table' ); + $this->assertLastSql( 'DROP TABLE table CASCADE' ); } /** @@ -734,72 +759,110 @@ class DatabaseSQLTest extends MediaWikiTestCase { } public static function provideMakeList() { - return array( - array( - array( 'value', 'value2' ), + return [ + [ + [ 'value', 'value2' ], LIST_COMMA, "'value','value2'" - ), - array( - array( 'field', 'field2' ), + ], + [ + [ 'field', 'field2' ], LIST_NAMES, "field,field2" - ), - array( - array( 'field' => 'value', 'field2' => 'value2' ), + ], + [ + [ 'field' => 'value', 'field2' => 'value2' ], LIST_AND, "field = 'value' AND field2 = 'value2'" - ), - array( - array( 'field' => null, "field2 != 'value2'" ), + ], + [ + [ 'field' => null, "field2 != 'value2'" ], LIST_AND, "field IS NULL AND (field2 != 'value2')" - ), - array( - array( 'field' => array( 'value', null, 'value2' ), 'field2' => 'value2' ), + ], + [ + [ 'field' => [ 'value', null, 'value2' ], 'field2' => 'value2' ], LIST_AND, "(field IN ('value','value2') OR field IS NULL) AND field2 = 'value2'" - ), - array( - array( 'field' => array( null ), 'field2' => null ), + ], + [ + [ 'field' => [ null ], 'field2' => null ], LIST_AND, "field IS NULL AND field2 IS NULL" - ), - array( - array( 'field' => 'value', 'field2' => 'value2' ), + ], + [ + [ 'field' => 'value', 'field2' => 'value2' ], LIST_OR, "field = 'value' OR field2 = 'value2'" - ), - array( - array( 'field' => 'value', 'field2' => null ), + ], + [ + [ 'field' => 'value', 'field2' => null ], LIST_OR, "field = 'value' OR field2 IS NULL" - ), - array( - array( 'field' => array( 'value', 'value2' ), 'field2' => array( 'value' ) ), + ], + [ + [ 'field' => [ 'value', 'value2' ], 'field2' => [ 'value' ] ], LIST_OR, "field IN ('value','value2') OR field2 = 'value'" - ), - array( - array( 'field' => array( null, 'value', null, 'value2' ), "field2 != 'value2'" ), + ], + [ + [ 'field' => [ null, 'value', null, 'value2' ], "field2 != 'value2'" ], LIST_OR, "(field IN ('value','value2') OR field IS NULL) OR (field2 != 'value2')" - ), - array( - array( 'field' => 'value', 'field2' => 'value2' ), + ], + [ + [ 'field' => 'value', 'field2' => 'value2' ], LIST_SET, "field = 'value',field2 = 'value2'" - ), - array( - array( 'field' => 'value', 'field2' => null ), + ], + [ + [ 'field' => 'value', 'field2' => null ], LIST_SET, "field = 'value',field2 = NULL" - ), - array( - array( 'field' => 'value', "field2 != 'value2'" ), + ], + [ + [ 'field' => 'value', "field2 != 'value2'" ], LIST_SET, "field = 'value',field2 != 'value2'" - ), - ); + ], + ]; + } + + public function testSessionTempTables() { + $temp1 = $this->database->tableName( 'tmp_table_1' ); + $temp2 = $this->database->tableName( 'tmp_table_2' ); + $temp3 = $this->database->tableName( 'tmp_table_3' ); + + $this->database->query( "CREATE TEMPORARY TABLE $temp1 LIKE orig_tbl", __METHOD__ ); + $this->database->query( "CREATE TEMPORARY TABLE $temp2 LIKE orig_tbl", __METHOD__ ); + $this->database->query( "CREATE TEMPORARY TABLE $temp3 LIKE orig_tbl", __METHOD__ ); + + $this->assertTrue( $this->database->tableExists( "tmp_table_1", __METHOD__ ) ); + $this->assertTrue( $this->database->tableExists( "tmp_table_2", __METHOD__ ) ); + $this->assertTrue( $this->database->tableExists( "tmp_table_3", __METHOD__ ) ); + + $this->database->dropTable( 'tmp_table_1', __METHOD__ ); + $this->database->dropTable( 'tmp_table_2', __METHOD__ ); + $this->database->dropTable( 'tmp_table_3', __METHOD__ ); + + $this->assertFalse( $this->database->tableExists( "tmp_table_1", __METHOD__ ) ); + $this->assertFalse( $this->database->tableExists( "tmp_table_2", __METHOD__ ) ); + $this->assertFalse( $this->database->tableExists( "tmp_table_3", __METHOD__ ) ); + + $this->database->query( "CREATE TEMPORARY TABLE tmp_table_1 LIKE orig_tbl", __METHOD__ ); + $this->database->query( "CREATE TEMPORARY TABLE 'tmp_table_2' LIKE orig_tbl", __METHOD__ ); + $this->database->query( "CREATE TEMPORARY TABLE `tmp_table_3` LIKE orig_tbl", __METHOD__ ); + + $this->assertTrue( $this->database->tableExists( "tmp_table_1", __METHOD__ ) ); + $this->assertTrue( $this->database->tableExists( "tmp_table_2", __METHOD__ ) ); + $this->assertTrue( $this->database->tableExists( "tmp_table_3", __METHOD__ ) ); + + $this->database->query( "DROP TEMPORARY TABLE tmp_table_1 LIKE orig_tbl", __METHOD__ ); + $this->database->query( "DROP TEMPORARY TABLE 'tmp_table_2' LIKE orig_tbl", __METHOD__ ); + $this->database->query( "DROP TABLE `tmp_table_3` LIKE orig_tbl", __METHOD__ ); + + $this->assertFalse( $this->database->tableExists( "tmp_table_1", __METHOD__ ) ); + $this->assertFalse( $this->database->tableExists( "tmp_table_2", __METHOD__ ) ); + $this->assertFalse( $this->database->tableExists( "tmp_table_3", __METHOD__ ) ); } }