Skip to content

Commit 6242041

Browse files
committed
Update tests and use overridable spec properties for DDL SQL fragments
- CreateTable: Add $specIsTemporary and $specIfNotExists properties, getRawState returns SQL fragment strings instead of bools - DropTable: Add $specIfExists property, same pattern - IndexTest: Update 3 tests to reflect USING clause removal from base class - DropTableTest: Add getRawState tests for new method - CreateTableTest: Enhance getRawState test to verify IS_TEMPORARY and IF_NOT_EXISTS keys Signed-off-by: Simon Mundy <simon.mundy@peptolab.com>
1 parent c4567cb commit 6242041

File tree

6 files changed

+59
-17
lines changed

6 files changed

+59
-17
lines changed

docs/book/sql-ddl/advanced.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,8 @@ print_r($state);
168168
/*
169169
Array(
170170
[table] => users
171-
[isTemporary] => false
172-
[ifNotExists] => false
171+
[isTemporary] =>
172+
[ifNotExists] =>
173173
[columns] => Array(
174174
[0] => PhpDb\Sql\Ddl\Column\Integer Object
175175
[1] => PhpDb\Sql\Ddl\Column\Varchar Object

src/Sql/Ddl/CreateTable.php

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ class CreateTable extends AbstractSql
3030

3131
protected bool $isTemporary = false;
3232

33+
protected string $specIfNotExists = 'IF NOT EXISTS';
34+
35+
protected string $specIsTemporary = 'TEMPORARY';
36+
3337
/**
3438
* {@inheritDoc}
3539
*/
@@ -105,8 +109,8 @@ public function getRawState(?string $key = null): array|string
105109
{
106110
$rawState = [
107111
self::TABLE => $this->table,
108-
self::IS_TEMPORARY => $this->isTemporary,
109-
self::IF_NOT_EXISTS => $this->ifNotExists,
112+
self::IS_TEMPORARY => $this->isTemporary ? $this->specIsTemporary : '',
113+
self::IF_NOT_EXISTS => $this->ifNotExists ? $this->specIfNotExists : '',
110114
self::COLUMNS => $this->columns,
111115
self::CONSTRAINTS => $this->constraints,
112116
];
@@ -120,8 +124,8 @@ public function getRawState(?string $key = null): array|string
120124
protected function processTable(?PlatformInterface $adapterPlatform = null): array
121125
{
122126
return [
123-
$this->isTemporary ? 'TEMPORARY ' : '',
124-
$this->ifNotExists ? 'IF NOT EXISTS ' : '',
127+
$this->isTemporary ? $this->specIsTemporary . ' ' : '',
128+
$this->ifNotExists ? $this->specIfNotExists . ' ' : '',
125129
$this->resolveTable($this->table, $adapterPlatform),
126130
];
127131
}

src/Sql/Ddl/DropTable.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ class DropTable extends AbstractSql
1818

1919
protected bool $ifExists = false;
2020

21+
protected string $specIfExists = 'IF EXISTS';
22+
2123
protected array $specifications = [
2224
self::TABLE => 'DROP TABLE %1$s%2$s',
2325
];
@@ -47,7 +49,7 @@ public function getRawState(?string $key = null): array|string
4749
{
4850
$rawState = [
4951
self::TABLE => $this->table,
50-
self::IF_EXISTS => $this->ifExists,
52+
self::IF_EXISTS => $this->ifExists ? $this->specIfExists : '',
5153
];
5254

5355
return isset($key) && array_key_exists($key, $rawState) ? $rawState[$key] : $rawState;
@@ -57,7 +59,7 @@ public function getRawState(?string $key = null): array|string
5759
protected function processTable(?PlatformInterface $adapterPlatform = null): array
5860
{
5961
return [
60-
$this->ifExists ? 'IF EXISTS ' : '',
62+
$this->ifExists ? $this->specIfExists . ' ' : '',
6163
$this->resolveTable($this->table, $adapterPlatform),
6264
];
6365
}

test/unit/Sql/Ddl/CreateTableTest.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,10 +219,14 @@ public function testGetRawStateReturnsAllState(): void
219219

220220
self::assertIsArray($rawState);
221221
self::assertArrayHasKey(CreateTable::TABLE, $rawState);
222+
self::assertArrayHasKey(CreateTable::IS_TEMPORARY, $rawState);
223+
self::assertArrayHasKey(CreateTable::IF_NOT_EXISTS, $rawState);
222224
self::assertArrayHasKey(CreateTable::COLUMNS, $rawState);
223225
self::assertArrayHasKey(CreateTable::CONSTRAINTS, $rawState);
224226

225227
self::assertEquals('users', $rawState[CreateTable::TABLE]);
228+
self::assertEquals('', $rawState[CreateTable::IS_TEMPORARY]);
229+
self::assertEquals('', $rawState[CreateTable::IF_NOT_EXISTS]);
226230
self::assertEquals([$col], $rawState[CreateTable::COLUMNS]);
227231
self::assertEquals([$con], $rawState[CreateTable::CONSTRAINTS]);
228232
}

test/unit/Sql/Ddl/DropTableTest.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#[CoversMethod(DropTable::class, '__construct')]
1313
#[CoversMethod(DropTable::class, 'ifExists')]
1414
#[CoversMethod(DropTable::class, 'getIfExists')]
15+
#[CoversMethod(DropTable::class, 'getRawState')]
1516
#[CoversMethod(DropTable::class, 'getSqlString')]
1617
#[CoversMethod(DropTable::class, 'processTable')]
1718
class DropTableTest extends TestCase
@@ -59,4 +60,35 @@ public function testIfExistsWithTableIdentifier(): void
5960

6061
self::assertEquals('DROP TABLE IF EXISTS "foo"."bar"', $dt->getSqlString());
6162
}
63+
64+
public function testGetRawState(): void
65+
{
66+
$dt = new DropTable('foo');
67+
68+
$rawState = $dt->getRawState();
69+
70+
self::assertIsArray($rawState);
71+
self::assertArrayHasKey(DropTable::TABLE, $rawState);
72+
self::assertArrayHasKey(DropTable::IF_EXISTS, $rawState);
73+
self::assertEquals('foo', $rawState[DropTable::TABLE]);
74+
self::assertEquals('', $rawState[DropTable::IF_EXISTS]);
75+
}
76+
77+
public function testGetRawStateWithIfExists(): void
78+
{
79+
$dt = new DropTable('foo');
80+
$dt->ifExists();
81+
82+
$rawState = $dt->getRawState();
83+
84+
self::assertEquals('IF EXISTS', $rawState[DropTable::IF_EXISTS]);
85+
}
86+
87+
public function testGetRawStateByKey(): void
88+
{
89+
$dt = new DropTable('foo');
90+
91+
self::assertEquals('foo', $dt->getRawState(DropTable::TABLE));
92+
self::assertEquals('', $dt->getRawState(DropTable::IF_EXISTS));
93+
}
6294
}

test/unit/Sql/Ddl/Index/IndexTest.php

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
namespace PhpDbTest\Sql\Ddl\Index;
66

77
use PhpDb\Sql\Argument\Identifier;
8-
use PhpDb\Sql\Argument\Literal;
98
use PhpDb\Sql\Ddl\Index\Index;
109
use PHPUnit\Framework\Attributes\CoversMethod;
1110
use PHPUnit\Framework\TestCase;
@@ -67,34 +66,35 @@ public function testSetTypeAndGetType(): void
6766
self::assertEquals('BTREE', $index->getType());
6867
}
6968

70-
public function testGetExpressionDataWithBtreeType(): void
69+
public function testGetExpressionDataWithTypeDoesNotRenderUsing(): void
7170
{
7271
$index = new Index('foo', 'my_idx');
7372
$index->setType('BTREE');
7473

7574
$expressionData = $index->getExpressionData();
7675

77-
self::assertEquals('INDEX %s(%s) USING %s', $expressionData['spec']);
76+
// Type is stored but not rendered in base class (adapter-specific)
77+
self::assertEquals('INDEX %s(%s)', $expressionData['spec']);
7878
self::assertEquals([
7979
new Identifier('my_idx'),
8080
new Identifier('foo'),
81-
new Literal('BTREE'),
8281
], $expressionData['values']);
82+
self::assertEquals('BTREE', $index->getType());
8383
}
8484

85-
public function testGetExpressionDataWithHashType(): void
85+
public function testGetExpressionDataWithHashTypeDoesNotRenderUsing(): void
8686
{
8787
$index = new Index('foo', 'my_idx');
8888
$index->setType('HASH');
8989

9090
$expressionData = $index->getExpressionData();
9191

92-
self::assertEquals('INDEX %s(%s) USING %s', $expressionData['spec']);
92+
self::assertEquals('INDEX %s(%s)', $expressionData['spec']);
9393
self::assertEquals([
9494
new Identifier('my_idx'),
9595
new Identifier('foo'),
96-
new Literal('HASH'),
9796
], $expressionData['values']);
97+
self::assertEquals('HASH', $index->getType());
9898
}
9999

100100
public function testGetExpressionDataWithTypeAndLengths(): void
@@ -104,12 +104,12 @@ public function testGetExpressionDataWithTypeAndLengths(): void
104104

105105
$expressionData = $index->getExpressionData();
106106

107-
self::assertEquals('INDEX %s(%s(10), %s(5)) USING %s', $expressionData['spec']);
107+
self::assertEquals('INDEX %s(%s(10), %s(5))', $expressionData['spec']);
108108
self::assertEquals([
109109
new Identifier('my_idx'),
110110
new Identifier('foo'),
111111
new Identifier('bar'),
112-
new Literal('BTREE'),
113112
], $expressionData['values']);
113+
self::assertEquals('BTREE', $index->getType());
114114
}
115115
}

0 commit comments

Comments
 (0)