|
9 | 9 | use PhpDb\Sql\Ddl\Column\ColumnInterface; |
10 | 10 | use PhpDb\Sql\Ddl\Constraint; |
11 | 11 | use PhpDb\Sql\Ddl\Constraint\ConstraintInterface; |
| 12 | +use PhpDb\Sql\Literal; |
12 | 13 | use PhpDb\Sql\TableIdentifier; |
13 | 14 | use PHPUnit\Framework\Attributes\CoversMethod; |
14 | 15 | use PHPUnit\Framework\TestCase; |
|
31 | 32 | #[CoversMethod(AlterTable::class, 'processAddConstraints')] |
32 | 33 | #[CoversMethod(AlterTable::class, 'processDropConstraints')] |
33 | 34 | #[CoversMethod(AlterTable::class, 'processDropIndexes')] |
| 35 | +#[CoversMethod(AlterTable::class, 'setOption')] |
| 36 | +#[CoversMethod(AlterTable::class, 'setOptions')] |
| 37 | +#[CoversMethod(AlterTable::class, 'getOptions')] |
| 38 | +#[CoversMethod(AlterTable::class, 'processTableOptions')] |
34 | 39 | class AlterTableTest extends TestCase |
35 | 40 | { |
36 | 41 | public function testSetTable(): void |
@@ -346,4 +351,99 @@ public function testTableIdentifierInChangeColumn(): void |
346 | 351 | self::assertStringContainsString('"schema"."table"', $sql); |
347 | 352 | self::assertStringContainsString('CHANGE COLUMN "col1" "col1_new"', $sql); |
348 | 353 | } |
| 354 | + |
| 355 | + public function testSetOptionFluentInterface(): void |
| 356 | + { |
| 357 | + $at = new AlterTable('foo'); |
| 358 | + $result = $at->setOption('engine', new Literal('InnoDB')); |
| 359 | + |
| 360 | + self::assertSame($at, $result); |
| 361 | + self::assertEquals(['engine' => new Literal('InnoDB')], $at->getOptions()); |
| 362 | + } |
| 363 | + |
| 364 | + public function testSetOptionsReplacesAll(): void |
| 365 | + { |
| 366 | + $at = new AlterTable('foo'); |
| 367 | + $at->setOption('engine', new Literal('InnoDB')); |
| 368 | + |
| 369 | + $at->setOptions(['charset' => new Literal('utf8mb4')]); |
| 370 | + |
| 371 | + self::assertEquals(['charset' => new Literal('utf8mb4')], $at->getOptions()); |
| 372 | + } |
| 373 | + |
| 374 | + public function testGetOptionsReturnsEmpty(): void |
| 375 | + { |
| 376 | + $at = new AlterTable('foo'); |
| 377 | + self::assertEquals([], $at->getOptions()); |
| 378 | + } |
| 379 | + |
| 380 | + public function testGetRawStateIncludesTableOptions(): void |
| 381 | + { |
| 382 | + $at = new AlterTable('foo'); |
| 383 | + $at->setOption('engine', new Literal('InnoDB')); |
| 384 | + |
| 385 | + $rawState = $at->getRawState(); |
| 386 | + |
| 387 | + self::assertArrayHasKey(AlterTable::TABLE_OPTIONS, $rawState); |
| 388 | + self::assertEquals(['engine' => new Literal('InnoDB')], $rawState[AlterTable::TABLE_OPTIONS]); |
| 389 | + } |
| 390 | + |
| 391 | + public function testGetSqlStringWithEngineOption(): void |
| 392 | + { |
| 393 | + $at = new AlterTable('foo'); |
| 394 | + $at->setOption('engine', new Literal('InnoDB')); |
| 395 | + |
| 396 | + $sql = $at->getSqlString(); |
| 397 | + self::assertStringContainsString('ALTER TABLE "foo"', $sql); |
| 398 | + self::assertStringContainsString('ENGINE = InnoDB', $sql); |
| 399 | + } |
| 400 | + |
| 401 | + public function testGetSqlStringWithColumnAndEngineOption(): void |
| 402 | + { |
| 403 | + $at = new AlterTable('foo'); |
| 404 | + $at->addColumn(new Column\Column('bar')); |
| 405 | + $at->setOption('engine', new Literal('InnoDB')); |
| 406 | + |
| 407 | + $sql = $at->getSqlString(); |
| 408 | + self::assertStringContainsString('ADD COLUMN "bar" INTEGER NOT NULL', $sql); |
| 409 | + self::assertStringContainsString('ENGINE = InnoDB', $sql); |
| 410 | + } |
| 411 | + |
| 412 | + public function testGetSqlStringWithStringOption(): void |
| 413 | + { |
| 414 | + $at = new AlterTable('foo'); |
| 415 | + $at->setOption('comment', 'My table'); |
| 416 | + |
| 417 | + $sql = $at->getSqlString(); |
| 418 | + self::assertStringContainsString('COMMENT = \'My table\'', $sql); |
| 419 | + } |
| 420 | + |
| 421 | + public function testGetSqlStringWithIntOption(): void |
| 422 | + { |
| 423 | + $at = new AlterTable('foo'); |
| 424 | + $at->setOption('auto_increment', 100); |
| 425 | + |
| 426 | + $sql = $at->getSqlString(); |
| 427 | + self::assertStringContainsString('AUTO_INCREMENT = 100', $sql); |
| 428 | + } |
| 429 | + |
| 430 | + public function testGetSqlStringWithBoolOption(): void |
| 431 | + { |
| 432 | + $at = new AlterTable('foo'); |
| 433 | + $at->setOption('pack_keys', true); |
| 434 | + |
| 435 | + $sql = $at->getSqlString(); |
| 436 | + self::assertStringContainsString('PACK_KEYS = 1', $sql); |
| 437 | + } |
| 438 | + |
| 439 | + public function testGetSqlStringWithMultipleOptions(): void |
| 440 | + { |
| 441 | + $at = new AlterTable('foo'); |
| 442 | + $at->setOption('engine', new Literal('InnoDB')); |
| 443 | + $at->setOption('auto_increment', 100); |
| 444 | + |
| 445 | + $sql = $at->getSqlString(); |
| 446 | + self::assertStringContainsString('ENGINE = InnoDB', $sql); |
| 447 | + self::assertStringContainsString('AUTO_INCREMENT = 100', $sql); |
| 448 | + } |
349 | 449 | } |
0 commit comments