2
0

AliasDetectorTest.php 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. namespace Test\PhpDevCommunity\PaperORM\Common;
  3. use PhpDevCommunity\PaperORM\Query\AliasDetector;
  4. use PhpDevCommunity\UniTester\TestCase;
  5. class AliasDetectorTest extends TestCase
  6. {
  7. protected function setUp(): void
  8. {
  9. // TODO: Implement setUp() method.
  10. }
  11. protected function tearDown(): void
  12. {
  13. // TODO: Implement tearDown() method.
  14. }
  15. protected function execute(): void
  16. {
  17. $this->testSimpleQuery();
  18. $this->testComplexQuery();
  19. }
  20. private function testSimpleQuery()
  21. {
  22. $sql = "SELECT t.id, t.name FROM table t, table2 t2 WHERE t.id = t2.id";
  23. $expectedAliases = [
  24. 't' => ['id', 'name'],
  25. 't2' => ['id'],
  26. ];
  27. $result = AliasDetector::detect($sql);
  28. $this->assertEquals($expectedAliases, $result);
  29. }
  30. private function testComplexQuery()
  31. {
  32. $sql = "SELECT u.id, u.name AS user_name, o.amount, p.price, 'test.value' AS fake_column
  33. FROM users u
  34. JOIN orders o ON u.id = o.user_id
  35. LEFT JOIN products p ON o.product_id = p.id
  36. WHERE u.status = 'active' AND o.amount > 100
  37. ORDER BY u.name;";
  38. $expectedAliases = [
  39. 'u' => ['id', 'name', "status"],
  40. 'o' => ['amount', 'user_id', 'product_id'],
  41. 'p' => ['price', 'id'],
  42. ];
  43. $result = AliasDetector::detect($sql);
  44. $this->assertEquals($expectedAliases, $result);
  45. }
  46. }