|
19 | 19 | use CodeIgniter\Database\SQLSRV\Builder as SQLSRVBuilder; |
20 | 20 | use CodeIgniter\Test\CIUnitTestCase; |
21 | 21 | use CodeIgniter\Test\Mock\MockConnection; |
| 22 | +use PHPUnit\Framework\Attributes\DataProvider; |
22 | 23 | use PHPUnit\Framework\Attributes\Group; |
23 | 24 |
|
24 | 25 | /** |
@@ -67,21 +68,62 @@ public function testSelectAcceptsArray(): void |
67 | 68 | $this->assertSame($expected, str_replace("\n", ' ', $builder->getCompiledSelect())); |
68 | 69 | } |
69 | 70 |
|
70 | | - public function testSelectAcceptsArrayWithRawSql(): void |
| 71 | + #[DataProvider('provideSelectAcceptsArrayWithRawSql')] |
| 72 | + public function testSelectAcceptsArrayWithRawSql(array $select, string $expected): void |
71 | 73 | { |
72 | 74 | $builder = new BaseBuilder('employees', $this->db); |
73 | 75 |
|
74 | | - $builder->select([ |
75 | | - new RawSql("IF(salary > 5000, 'High', 'Low') AS salary_level"), |
76 | | - 'employee_id', |
77 | | - ]); |
| 76 | + $builder->select($select); |
78 | 77 |
|
79 | | - $expected = <<<'SQL' |
80 | | - SELECT IF(salary > 5000, 'High', 'Low') AS salary_level, "employee_id" FROM "employees" |
81 | | - SQL; |
82 | 78 | $this->assertSame($expected, str_replace("\n", ' ', $builder->getCompiledSelect())); |
83 | 79 | } |
84 | 80 |
|
| 81 | + /** |
| 82 | + * @return list<list<RawSql|string>|string> |
| 83 | + */ |
| 84 | + public static function provideSelectAcceptsArrayWithRawSql(): iterable |
| 85 | + { |
| 86 | + yield from [ |
| 87 | + [ |
| 88 | + [ |
| 89 | + new RawSql("IF(salary > 5000, 'High', 'Low') AS salary_level"), |
| 90 | + 'employee_id', |
| 91 | + ], |
| 92 | + <<<'SQL' |
| 93 | + SELECT IF(salary > 5000, 'High', 'Low') AS salary_level, "employee_id" FROM "employees" |
| 94 | + SQL, |
| 95 | + ], |
| 96 | + [ |
| 97 | + [ |
| 98 | + 'employee_id', |
| 99 | + new RawSql("IF(salary > 5000, 'High', 'Low') AS salary_level"), |
| 100 | + ], |
| 101 | + <<<'SQL' |
| 102 | + SELECT "employee_id", IF(salary > 5000, 'High', 'Low') AS salary_level FROM "employees" |
| 103 | + SQL, |
| 104 | + ], |
| 105 | + [ |
| 106 | + [ |
| 107 | + new RawSql("CONCAT(first_name, ' ', last_name) AS full_name"), |
| 108 | + new RawSql("IF(salary > 5000, 'High', 'Low') AS salary_level"), |
| 109 | + ], |
| 110 | + <<<'SQL' |
| 111 | + SELECT CONCAT(first_name, ' ', last_name) AS full_name, IF(salary > 5000, 'High', 'Low') AS salary_level FROM "employees" |
| 112 | + SQL, |
| 113 | + ], |
| 114 | + [ |
| 115 | + [ |
| 116 | + new RawSql("CONCAT(first_name, ' ', last_name) AS full_name"), |
| 117 | + 'employee_id', |
| 118 | + new RawSql("IF(salary > 5000, 'High', 'Low') AS salary_level"), |
| 119 | + ], |
| 120 | + <<<'SQL' |
| 121 | + SELECT CONCAT(first_name, ' ', last_name) AS full_name, "employee_id", IF(salary > 5000, 'High', 'Low') AS salary_level FROM "employees" |
| 122 | + SQL, |
| 123 | + ], |
| 124 | + ]; |
| 125 | + } |
| 126 | + |
85 | 127 | public function testSelectAcceptsMultipleColumns(): void |
86 | 128 | { |
87 | 129 | $builder = new BaseBuilder('users', $this->db); |
|
0 commit comments