diff options
author | William Desportes <williamdes@wdes.fr> | 2019-12-31 16:22:51 +0100 |
---|---|---|
committer | William Desportes <williamdes@wdes.fr> | 2019-12-31 16:33:33 +0100 |
commit | de9009d256336851fa7ef8c7166aeedf26be988b (patch) | |
tree | afc85bdb92ea962ac4689c55d5f313f87af0ca0b /tests/Builder | |
parent | 1f45fbcc794c7a8e10b78b6d024c1dc48a42eaf9 (diff) | |
parent | 8a9b8fcd3357fbf42756519bcea7ef3ca668aaf5 (diff) | |
download | sql-parser-de9009d256336851fa7ef8c7166aeedf26be988b.zip sql-parser-de9009d256336851fa7ef8c7166aeedf26be988b.tar.gz sql-parser-de9009d256336851fa7ef8c7166aeedf26be988b.tar.bz2 |
Merge branch 'QA'
Signed-off-by: William Desportes <williamdes@wdes.fr>
Diffstat (limited to 'tests/Builder')
-rw-r--r-- | tests/Builder/CallStatementTest.php | 19 | ||||
-rw-r--r-- | tests/Builder/SelectStatementTest.php | 136 | ||||
-rw-r--r-- | tests/Builder/TruncateStatementTest.php | 39 |
3 files changed, 194 insertions, 0 deletions
diff --git a/tests/Builder/CallStatementTest.php b/tests/Builder/CallStatementTest.php new file mode 100644 index 0000000..f11686e --- /dev/null +++ b/tests/Builder/CallStatementTest.php @@ -0,0 +1,19 @@ +<?php + +namespace PhpMyAdmin\SqlParser\Tests\Builder; + +use PhpMyAdmin\SqlParser\Parser; +use PhpMyAdmin\SqlParser\Tests\TestCase; + +class CallStatementTest extends TestCase +{ + public function testBuilder() + { + $query = 'CALL foo()'; + + $parser = new Parser($query); + $stmt = $parser->statements[0]; + + $this->assertEquals($query, $stmt->build()); + } +} diff --git a/tests/Builder/SelectStatementTest.php b/tests/Builder/SelectStatementTest.php index 2c7350a..a22cf08 100644 --- a/tests/Builder/SelectStatementTest.php +++ b/tests/Builder/SelectStatementTest.php @@ -53,6 +53,142 @@ class SelectStatementTest extends TestCase ); } + public function testBuilderAliasOrder() + { + $parser = new Parser( + 'SELECT sgu.id, sgu.email_address FROM `sf_guard_user` sgu ' + . 'RIGHT JOIN `student_course_booking` scb ON sgu.id = scb.user_id ' + . 'WHERE `has_found_course` = \'1\' GROUP BY sgu.id ' + . 'ORDER BY scb.id LIMIT 0,300' + ); + $stmt = $parser->statements[0]; + + $this->assertEquals( + 'SELECT sgu.id, sgu.email_address FROM `sf_guard_user` AS `sgu` ' + . 'RIGHT JOIN `student_course_booking` AS `scb` ON sgu.id = scb.user_id ' + . 'WHERE `has_found_course` = \'1\' GROUP BY sgu.id ' + . 'ORDER BY scb.id ASC LIMIT 0, 300', + $stmt->build() + ); + } + + public function testBuilderAliasOrderMultiple() + { + $parser = new Parser( + 'SELECT sgu.id, sgu.email_address FROM `sf_guard_user` sgu ' + . 'RIGHT JOIN `student_course_booking` scb ON sgu.id = scb.user_id ' + . 'WHERE `has_found_course` = \'1\' GROUP BY sgu.id ' + . 'ORDER BY scb.id DESC, scb.order LIMIT 0,300' + ); + $stmt = $parser->statements[0]; + + $this->assertEquals( + 'SELECT sgu.id, sgu.email_address FROM `sf_guard_user` AS `sgu` ' + . 'RIGHT JOIN `student_course_booking` AS `scb` ON sgu.id = scb.user_id ' + . 'WHERE `has_found_course` = \'1\' GROUP BY sgu.id ' + . 'ORDER BY scb.id DESC, scb.order ASC LIMIT 0, 300', + $stmt->build() + ); + } + + public function testBuilderAliasOrderMultipleFunctions() + { + $parser = new Parser( + 'SELECT sgu.id, sgu.email_address FROM `sf_guard_user` sgu ' + . 'RIGHT JOIN `student_course_booking` scb ON sgu.id = scb.user_id ' + . 'WHERE `has_found_course` = \'1\' GROUP BY sgu.id ' + . 'ORDER BY scb.id DESC, YEAR(scb.dob) LIMIT 0,300' + ); + $stmt = $parser->statements[0]; + + $this->assertEquals( + 'SELECT sgu.id, sgu.email_address FROM `sf_guard_user` AS `sgu` ' + . 'RIGHT JOIN `student_course_booking` AS `scb` ON sgu.id = scb.user_id ' + . 'WHERE `has_found_course` = \'1\' GROUP BY sgu.id ' + . 'ORDER BY scb.id DESC, YEAR(scb.dob) ASC LIMIT 0, 300', + $stmt->build() + ); + } + + public function testBuilderAliasGroupByMultipleFunctions() + { + $parser = new Parser( + 'SELECT sgu.id, sgu.email_address FROM `sf_guard_user` sgu ' + . 'RIGHT JOIN `student_course_booking` scb ON sgu.id = scb.user_id ' + . 'WHERE `has_found_course` = \'1\' ' + . 'GROUP BY scb.id, YEAR(scb.dob) LIMIT 0,300' + ); + $stmt = $parser->statements[0]; + + $this->assertEquals( + 'SELECT sgu.id, sgu.email_address FROM `sf_guard_user` AS `sgu` ' + . 'RIGHT JOIN `student_course_booking` AS `scb` ON sgu.id = scb.user_id ' + . 'WHERE `has_found_course` = \'1\' ' + . 'GROUP BY scb.id, YEAR(scb.dob) LIMIT 0, 300', + $stmt->build() + ); + } + + public function testBuilderAliasGroupByMultipleFunctionsOrderRemoved() + { + $parser = new Parser( + 'SELECT sgu.id, sgu.email_address FROM `sf_guard_user` sgu ' + . 'RIGHT JOIN `student_course_booking` scb ON sgu.id = scb.user_id ' + . 'WHERE `has_found_course` = \'1\' ' + . 'GROUP BY scb.id ASC, YEAR(scb.dob) DESC LIMIT 0,300' + ); + $stmt = $parser->statements[0]; + + // The order is not kept, is this an expected behavior ? + // Ref: 4af06d24b041e499fb0e75ab3a98caf9a91700ef + // Issue: #154 + $this->assertEquals( + 'SELECT sgu.id, sgu.email_address FROM `sf_guard_user` AS `sgu` ' + . 'RIGHT JOIN `student_course_booking` AS `scb` ON sgu.id = scb.user_id ' + . 'WHERE `has_found_course` = \'1\' ' + . 'GROUP BY scb.id, YEAR(scb.dob) LIMIT 0, 300', + $stmt->build() + ); + } + + public function testBuilderAliasOrderCase() + { + $parser = new Parser( + 'SELECT * FROM `world_borders` ORDER BY CASE ' + . 'WHEN REGION = 2 THEN 99 ' + . 'WHEN REGION > 3 THEN REGION+1 ' + . 'ELSE 100 END LIMIT 0,300' + ); + $stmt = $parser->statements[0]; + + $this->assertEquals( + 'SELECT * FROM `world_borders` ORDER BY CASE ' + . 'WHEN REGION = 2 THEN 99 ' + . 'WHEN REGION > 3 THEN REGION+1 ' + . 'ELSE 100 END ASC LIMIT 0, 300', + $stmt->build() + ); + } + + public function testBuilderAliasGroupByCase() + { + $parser = new Parser( + 'SELECT * FROM `world_borders` GROUP BY CASE ' + . 'WHEN REGION = 2 THEN 99 ' + . 'WHEN REGION > 3 THEN REGION+1 ' + . 'ELSE 100 END LIMIT 0,300' + ); + $stmt = $parser->statements[0]; + + $this->assertEquals( + 'SELECT * FROM `world_borders` GROUP BY CASE ' + . 'WHEN REGION = 2 THEN 99 ' + . 'WHEN REGION > 3 THEN REGION+1 ' + . 'ELSE 100 END LIMIT 0, 300', + $stmt->build() + ); + } + public function testBuilderEndOptions() { /* Assertion 1 */ diff --git a/tests/Builder/TruncateStatementTest.php b/tests/Builder/TruncateStatementTest.php new file mode 100644 index 0000000..1abee17 --- /dev/null +++ b/tests/Builder/TruncateStatementTest.php @@ -0,0 +1,39 @@ +<?php + +namespace PhpMyAdmin\SqlParser\Tests\Builder; + +use PhpMyAdmin\SqlParser\Parser; +use PhpMyAdmin\SqlParser\Tests\TestCase; + +class TruncateStatementTest extends TestCase +{ + public function testBuilder() + { + $query = 'TRUNCATE TABLE mytable;'; + + $parser = new Parser($query); + $stmt = $parser->statements[0]; + + $this->assertEquals($query, $stmt->build()); + } + + public function testBuilderDbtable() + { + $query = 'TRUNCATE TABLE mydb.mytable;'; + + $parser = new Parser($query); + $stmt = $parser->statements[0]; + + $this->assertEquals($query, $stmt->build()); + } + + public function testBuilderDbtableBackQuotes() + { + $query = 'TRUNCATE TABLE `mydb`.`mytable`;'; + + $parser = new Parser($query); + $stmt = $parser->statements[0]; + + $this->assertEquals($query, $stmt->build()); + } +} |