Fixed bug #14496: SQL parser does not handle ALTER TABLE with character set operation
[Packages/TYPO3.CMS.git] / typo3 / sysext / dbal / tests / sqlparser_general_testcase.php
index a39393b..ac45bf8 100644 (file)
@@ -337,6 +337,36 @@ class sqlparser_general_testcase extends BaseTestCase {
                $this->assertEquals($expected, $select);
        }
 
+       /**
+        * @test
+        * @see http://bugs.typo3.org/view.php?id=14456
+        */
+       public function canParseAlterEngineStatement() {
+               $parseString = 'ALTER TABLE tx_realurl_pathcache ENGINE=InnoDB';
+               $components = $this->fixture->_callRef('parseALTERTABLE', $parseString);
+
+               $this->assertTrue(is_array($components), $components);
+               $alterTable = $this->cleanSql($this->fixture->_callRef('compileALTERTABLE', $components));
+               $expected = 'ALTER TABLE tx_realurl_pathcache ENGINE = InnoDB';
+               $this->assertTrue(is_array($alterTable), $alterTable);
+               $this->assertEquals($expected, $alterTable[0]);
+       }
+
+       /**
+        * @test
+        * @see http://bugs.typo3.org/view.php?id=14496
+        */
+       public function canParseAlterCharacterSetStatement() {
+               $parseString = 'ALTER TABLE `index_phash` DEFAULT CHARACTER SET utf8';
+               $components = $this->fixture->_callRef('parseALTERTABLE', $parseString);
+
+               $this->assertTrue(is_array($components), $components);
+               $alterTable = $this->cleanSql($this->fixture->_callRef('compileALTERTABLE', $components));
+               $expected = 'ALTER TABLE index_phash DEFAULT CHARACTER SET utf8';
+               $this->assertTrue(is_array($alterTable), $alterTable);
+               $this->assertEquals($expected, $alterTable[0]);
+       }
+
        ///////////////////////////////////////
        // Tests concerning JOINs
        ///////////////////////////////////////
@@ -420,6 +450,30 @@ class sqlparser_general_testcase extends BaseTestCase {
                $this->assertEquals($expected, $actual);
        }
 
+       /**
+        * @test
+        * @see http://bugs.typo3.org/view.php?id=14182
+        */
+       public function canParseMultipleJoinConditions() {
+               $sql = 'SELECT * FROM T1 LEFT OUTER JOIN T2 ON T2.pid = T1.uid AND T2.size = 4 WHERE T1.cr_userid = 1';
+               $expected = 'SELECT * FROM T1 LEFT OUTER JOIN T2 ON T2.pid=T1.uid AND T2.size=4 WHERE T1.cr_userid = 1';
+               $actual = $this->cleanSql($this->fixture->debug_testSQL($sql));
+
+               $this->assertEquals($expected, $actual);
+       }
+
+       /**
+        * @test
+        * @see http://bugs.typo3.org/view.php?id=14182 
+        */
+       public function canParseMultipleJoinConditionsWithLessThanOperator() {
+               $sql = 'SELECT * FROM T1 LEFT OUTER JOIN T2 ON T2.size < 4 OR T2.pid = T1.uid WHERE T1.cr_userid = 1';
+               $expected = 'SELECT * FROM T1 LEFT OUTER JOIN T2 ON T2.size<4 OR T2.pid=T1.uid WHERE T1.cr_userid = 1';
+               $actual = $this->cleanSql($this->fixture->debug_testSQL($sql));
+
+               $this->assertEquals($expected, $actual);
+       }
+
        ///////////////////////////////////////
        // Tests concerning DB management
        ///////////////////////////////////////
@@ -428,7 +482,7 @@ class sqlparser_general_testcase extends BaseTestCase {
         * @test
         * @see http://bugs.typo3.org/view.php?id=4466
         */
-       public function indexMayContainALengthRestriction() {
+       public function indexMayContainALengthRestrictionInCreateTable() {
                $parseString = '
                        CREATE TABLE tx_realurl_uniqalias (
                                uid int(11) NOT NULL auto_increment,
@@ -452,6 +506,31 @@ class sqlparser_general_testcase extends BaseTestCase {
                $this->assertTrue(is_array($createTables), $createTables);
        }
 
+       /**
+        * @test
+        * @see http://bugs.typo3.org/view.php?id=12829
+        */
+       public function indexMayContainALengthRestrictionInAlterTable() {
+               $parseString = 'ALTER TABLE tx_realurl_uniqalias ADD KEY bk_realurl02 (tablename,field_alias,field_id,value_alias(220),expire)';
+               $alterTables = $this->fixture->_callRef('parseALTERTABLE', $parseString);
+               $this->assertTrue(is_array($alterTables), $alterTables);
+       }
+
+       /**
+        * @test
+        * @see http://bugs.typo3.org/view.php?id=2186
+        */
+       public function canParseUniqueIndexCreation() {
+               $sql = 'ALTER TABLE static_territories ADD UNIQUE uid (uid)';
+               $expected = $sql;
+               $alterTables = $this->fixture->_callRef('parseALTERTABLE', $sql);
+               $queries = $this->fixture->compileSQL($alterTables);
+
+               $this->assertTrue(is_array($queries), $queries);
+               $this->assertTrue(count($queries) == 1, $queries);
+               $this->assertEquals($expected, $queries[0]);
+       }
+
        ///////////////////////////////////////
        // Tests concerning subqueries
        ///////////////////////////////////////