Skip to content

Commit 3f43830

Browse files
committed
WIP
1 parent 17d769a commit 3f43830

File tree

6 files changed

+41
-38
lines changed

6 files changed

+41
-38
lines changed

src/Sql/Argument/Identifier.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
final readonly class Identifier implements ArgumentInterface
1212
{
1313
public function __construct(
14-
private string $identifier
14+
public string $identifier
1515
) {
1616
}
1717

src/Sql/Part/Columns.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace PhpDb\Sql\Part;
66

7+
use PhpDb\Sql\Argument\Identifier;
78
use PhpDb\Sql\ArgumentInterface;
89
use PhpDb\Sql\ExpressionInterface;
910
use PhpDb\Sql\Platform\AbstractSqlRenderer;
@@ -57,7 +58,9 @@ public function toSql(AbstractSqlRenderer $renderer, string $paramPrefix = '', i
5758

5859
$column = $ref->column;
5960

60-
if ($column instanceof ArgumentInterface) {
61+
if ($column instanceof Identifier) {
62+
$columnSql = $prefix . $platform->quoteIdentifier($column->identifier);
63+
} elseif ($column instanceof ArgumentInterface) {
6164
$columnSql = $prefix . $column->render($renderer, '', $pi);
6265
} else {
6366
$columnSql = $renderer->render($column, $ref->alias ?? 'column');

src/Sql/Part/GroupBy.php

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace PhpDb\Sql\Part;
66

7+
use PhpDb\Sql\Argument\Identifier;
78
use PhpDb\Sql\ArgumentInterface;
89
use PhpDb\Sql\Platform\AbstractSqlRenderer;
910

@@ -21,13 +22,16 @@ public function toSql(AbstractSqlRenderer $renderer, string $paramPrefix = '', i
2122
return null;
2223
}
2324

24-
$groups = [];
25-
$pi = 0;
25+
$platform = $renderer->platform;
26+
$groups = [];
2627

2728
foreach ($this->group as $ref) {
2829
$column = $ref->column;
2930

30-
if ($column instanceof ArgumentInterface) {
31+
if ($column instanceof Identifier) {
32+
$groups[] = $platform->quoteIdentifier($column->identifier);
33+
} elseif ($column instanceof ArgumentInterface) {
34+
$pi = 0;
3135
$groups[] = $column->render($renderer, '', $pi);
3236
} else {
3337
$groups[] = $renderer->render($column);

src/Sql/Part/OrderBy.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace PhpDb\Sql\Part;
66

7+
use PhpDb\Sql\Argument\Identifier;
78
use PhpDb\Sql\ArgumentInterface;
89
use PhpDb\Sql\ExpressionInterface;
910
use PhpDb\Sql\Platform\AbstractSqlRenderer;
@@ -29,13 +30,17 @@ public function toSql(AbstractSqlRenderer $renderer, string $paramPrefix = '', i
2930
return null;
3031
}
3132

32-
$orders = [];
33-
$pi = 0;
33+
$platform = $renderer->platform;
34+
$orders = [];
3435

3536
foreach ($this->order as $spec) {
3637
$column = $spec->column;
3738

38-
if ($column instanceof ArgumentInterface) {
39+
if ($column instanceof Identifier) {
40+
$orders[] = $platform->quoteIdentifier($column->identifier)
41+
. ' ' . $spec->direction;
42+
} elseif ($column instanceof ArgumentInterface) {
43+
$pi = 0;
3944
$orders[] = $column->render($renderer, '', $pi)
4045
. ' ' . $spec->direction;
4146
} else {

test/unit/Sql/JoinTest.php

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
use PhpDb\Sql\Join;
88
use PhpDb\Sql\Part\JoinSpec;
99
use PhpDb\Sql\Part\Table;
10-
use PhpDb\Sql\Select;
10+
use PhpDb\Sql\TableIdentifier;
1111
use PhpDbTest\DeprecatedAssertionsTrait;
1212
use PHPUnit\Framework\Attributes\CoversMethod;
1313
use PHPUnit\Framework\Attributes\IgnoreDeprecations;
@@ -92,14 +92,12 @@ public function testCurrentReturnsTheCurrentJoinSpecification(): void
9292
$join = new Join();
9393
$join->add(Table::createJoinSpec($name, $on));
9494

95-
$expectedSpecification = [
96-
'name' => $name,
97-
'on' => $on,
98-
'columns' => [Select::SQL_STAR],
99-
'type' => Join::JOIN_INNER,
100-
];
101-
102-
self::assertEquals($expectedSpecification, $join->current());
95+
$current = $join->current();
96+
self::assertInstanceOf(TableIdentifier::class, $current['name']);
97+
self::assertEquals('baz', $current['name']->getTable());
98+
self::assertEquals($on, $current['on']);
99+
self::assertArrayNotHasKey('columns', $current);
100+
self::assertEquals(Join::JOIN_INNER, $current['type']);
103101
}
104102

105103
public function testValidReturnsTrueIfTheIteratorIsAtAValidPositionAndFalseIfNot(): void

test/unit/Sql/SelectTest.php

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -158,34 +158,25 @@ public function testJoin(): void
158158
{
159159
$select = new Select();
160160

161-
// First mutation
162161
$result = $select->join('foo', 'x = y');
163162

164-
// Verify fluent interface
165163
self::assertSame($select, $result);
166164

167-
// Verify the first mutation occurred
168165
$joins = $select->getRawState('joins');
169166
self::assertInstanceOf(Join::class, $joins);
170-
self::assertEquals(
171-
[
172-
[
173-
'name' => 'foo',
174-
'on' => 'x = y',
175-
'columns' => [Select::SQL_STAR],
176-
'type' => Select::JOIN_INNER,
177-
],
178-
],
179-
$joins->getJoins()
180-
);
167+
$joinList = $joins->getJoins();
168+
self::assertCount(1, $joinList);
169+
self::assertInstanceOf(TableIdentifier::class, $joinList[0]['name']);
170+
self::assertEquals('foo', $joinList[0]['name']->getTable());
171+
self::assertEquals('x = y', $joinList[0]['on']);
172+
self::assertEquals(Select::JOIN_INNER, $joinList[0]['type']);
181173

182-
// Second mutation to verify mutability (joins accumulate)
183174
$select->join('bar', 'a = b');
184175

185-
// Verify the instance was actually mutated
186176
$joins2 = $select->getRawState('joins');
187177
self::assertCount(2, $joins2->getJoins());
188-
self::assertEquals('bar', $joins2->getJoins()[1]['name']);
178+
self::assertInstanceOf(TableIdentifier::class, $joins2->getJoins()[1]['name']);
179+
self::assertEquals('bar', $joins2->getJoins()[1]['name']->getTable());
189180
}
190181

191182
#[TestDox('unit test: Test join() exception with bad join')]
@@ -631,10 +622,12 @@ public function testReset(): void
631622
$select->join('foo', 'id = boo');
632623
$joins = $select->getRawState(Select::JOINS);
633624
self::assertInstanceOf(Join::class, $joins);
634-
self::assertEquals(
635-
[['name' => 'foo', 'on' => 'id = boo', 'columns' => ['*'], 'type' => 'INNER']],
636-
$joins->getJoins()
637-
);
625+
$joinList = $joins->getJoins();
626+
self::assertCount(1, $joinList);
627+
self::assertInstanceOf(TableIdentifier::class, $joinList[0]['name']);
628+
self::assertEquals('foo', $joinList[0]['name']->getTable());
629+
self::assertEquals('id = boo', $joinList[0]['on']);
630+
self::assertEquals('INNER', $joinList[0]['type']);
638631
$select->reset(Select::JOINS);
639632
$emptyJoins = $select->getRawState(Select::JOINS);
640633
self::assertInstanceOf(Join::class, $emptyJoins);

0 commit comments

Comments
 (0)