Skip to content

Commit 0585ed6

Browse files
committed
- Support simple arrays like [1, 2, 3, 4, 5] as table-names which will result in a UNION-chain-subquery
1 parent 58c4efa commit 0585ed6

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

src/Builder/Traits/TableNameBuilder.php

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,16 @@ protected function buildTableName($alias, $name) {
2424
}
2525
if(is_array($name)) {
2626
$parts = [];
27-
foreach($name as $bucket) {
28-
$values = [];
29-
foreach($bucket as $field => $value) {
30-
$values[] = sprintf('%s AS %s', $this->db()->quote($value), $this->db()->quoteField($field));
27+
foreach($name as $index => $bucket) {
28+
if(ctype_digit((string) $index) && is_scalar($bucket)) {
29+
$parts[] = "SELECT {$this->db()->quote($bucket)}";
30+
} else {
31+
$values = [];
32+
foreach($bucket as $field => $value) {
33+
$values[] = sprintf('%s AS %s', $this->db()->quote($value), $this->db()->quoteField($field));
34+
}
35+
$parts[] = sprintf("SELECT %s", join(', ', $values));
3136
}
32-
$parts[] = sprintf("SELECT %s", join(', ', $values));
3337
}
3438
$name = '(' . join("\n\tUNION\n\t", $parts) . ')';
3539
}

tests/Builder/SelectTest.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,4 +391,13 @@ public function testParametrizedVirtualTables() {
391391

392392
$this->assertEquals("SELECT\n\tt.field1,\n\tt.field2\nFROM\n\ttest t\nINNER JOIN\n\t(SELECT\n\t\ta.field1\n\tFROM\n\t\ttableA a) vt1 ON vt1.field1=t.field1\nINNER JOIN\n\t(SELECT\n\t\ta.field1\n\tFROM\n\t\ttableA a\n\tWHERE\n\t\t(a.active='1')) vt2 ON vt2.field2=t.field2\n", $query);
393393
}
394+
395+
public function testArrayTables() {
396+
$vt1 = TestSelect::create()
397+
->field('a.field1')
398+
->from('a', range(1, 9))
399+
->asString();
400+
401+
$this->assertEquals("SELECT\n\ta.field1\nFROM\n\t(SELECT '1'\n\tUNION\n\tSELECT '2'\n\tUNION\n\tSELECT '3'\n\tUNION\n\tSELECT '4'\n\tUNION\n\tSELECT '5'\n\tUNION\n\tSELECT '6'\n\tUNION\n\tSELECT '7'\n\tUNION\n\tSELECT '8'\n\tUNION\n\tSELECT '9') a\n", $vt1);
402+
}
394403
}

0 commit comments

Comments
 (0)