Skip to content

Commit 916708d

Browse files
committed
Add test for ALTER TABLE with adding a FOREIGN KEY contraint
1 parent ceb1846 commit 916708d

File tree

1 file changed

+123
-0
lines changed

1 file changed

+123
-0
lines changed

tests/WP_SQLite_Driver_Metadata_Tests.php

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1444,4 +1444,127 @@ public function testInformationSchemaForeignKeysWithMultipleColumns(): void {
14441444
$result
14451445
);
14461446
}
1447+
1448+
public function testInformationSchemaAlterTableAddForeignKeys(): void {
1449+
$this->assertQuery( 'CREATE TABLE t1 (id INT PRIMARY KEY, name VARCHAR(255))' );
1450+
$this->assertQuery( 'CREATE TABLE t2 (id INT)' );
1451+
$this->assertQuery( 'ALTER TABLE t2 ADD FOREIGN KEY (id) REFERENCES t1 (id)' );
1452+
$this->assertQuery( 'ALTER TABLE t2 ADD CONSTRAINT fk1 FOREIGN KEY (id) REFERENCES t1 (id) ON DELETE CASCADE' );
1453+
1454+
// INFORMATION_SCHEMA.TABLE_CONSTRAINTS
1455+
$result = $this->assertQuery( "SELECT * FROM information_schema.table_constraints WHERE table_name = 't2'" );
1456+
$this->assertEquals(
1457+
array(
1458+
(object) array(
1459+
'CONSTRAINT_CATALOG' => 'def',
1460+
'CONSTRAINT_SCHEMA' => 'wp',
1461+
'CONSTRAINT_NAME' => 't2_ibfk_1',
1462+
'TABLE_SCHEMA' => 'wp',
1463+
'TABLE_NAME' => 't2',
1464+
'CONSTRAINT_TYPE' => 'FOREIGN KEY',
1465+
'ENFORCED' => 'YES',
1466+
),
1467+
(object) array(
1468+
'CONSTRAINT_CATALOG' => 'def',
1469+
'CONSTRAINT_SCHEMA' => 'wp',
1470+
'CONSTRAINT_NAME' => 'fk1',
1471+
'TABLE_SCHEMA' => 'wp',
1472+
'TABLE_NAME' => 't2',
1473+
'CONSTRAINT_TYPE' => 'FOREIGN KEY',
1474+
'ENFORCED' => 'YES',
1475+
),
1476+
),
1477+
$result
1478+
);
1479+
1480+
// INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
1481+
$result = $this->assertQuery( "SELECT * FROM information_schema.referential_constraints WHERE table_name = 't2'" );
1482+
$this->assertEquals(
1483+
array(
1484+
(object) array(
1485+
'CONSTRAINT_CATALOG' => 'def',
1486+
'CONSTRAINT_SCHEMA' => 'wp',
1487+
'CONSTRAINT_NAME' => 't2_ibfk_1',
1488+
'UNIQUE_CONSTRAINT_CATALOG' => 'def',
1489+
'UNIQUE_CONSTRAINT_SCHEMA' => 'wp',
1490+
'UNIQUE_CONSTRAINT_NAME' => 'PRIMARY',
1491+
'MATCH_OPTION' => 'NONE',
1492+
'UPDATE_RULE' => 'NO ACTION',
1493+
'DELETE_RULE' => 'NO ACTION',
1494+
'TABLE_NAME' => 't2',
1495+
'REFERENCED_TABLE_NAME' => 't1',
1496+
),
1497+
(object) array(
1498+
'CONSTRAINT_CATALOG' => 'def',
1499+
'CONSTRAINT_SCHEMA' => 'wp',
1500+
'CONSTRAINT_NAME' => 'fk1',
1501+
'UNIQUE_CONSTRAINT_CATALOG' => 'def',
1502+
'UNIQUE_CONSTRAINT_SCHEMA' => 'wp',
1503+
'UNIQUE_CONSTRAINT_NAME' => 'PRIMARY',
1504+
'MATCH_OPTION' => 'NONE',
1505+
'UPDATE_RULE' => 'NO ACTION',
1506+
'DELETE_RULE' => 'CASCADE',
1507+
'TABLE_NAME' => 't2',
1508+
'REFERENCED_TABLE_NAME' => 't1',
1509+
),
1510+
),
1511+
$result
1512+
);
1513+
1514+
// INFORMATION_SCHEMA.KEY_COLUMN_USAGE
1515+
$result = $this->assertQuery( "SELECT * FROM information_schema.key_column_usage WHERE table_name = 't2'" );
1516+
$this->assertEquals(
1517+
array(
1518+
(object) array(
1519+
'CONSTRAINT_CATALOG' => 'def',
1520+
'CONSTRAINT_SCHEMA' => 'wp',
1521+
'CONSTRAINT_NAME' => 't2_ibfk_1',
1522+
'TABLE_CATALOG' => 'def',
1523+
'TABLE_SCHEMA' => 'wp',
1524+
'TABLE_NAME' => 't2',
1525+
'COLUMN_NAME' => 'id',
1526+
'ORDINAL_POSITION' => '1',
1527+
'POSITION_IN_UNIQUE_CONSTRAINT' => '1',
1528+
'REFERENCED_TABLE_SCHEMA' => 'wp',
1529+
'REFERENCED_TABLE_NAME' => 't1',
1530+
'REFERENCED_COLUMN_NAME' => 'id',
1531+
),
1532+
(object) array(
1533+
'CONSTRAINT_CATALOG' => 'def',
1534+
'CONSTRAINT_SCHEMA' => 'wp',
1535+
'CONSTRAINT_NAME' => 'fk1',
1536+
'TABLE_CATALOG' => 'def',
1537+
'TABLE_SCHEMA' => 'wp',
1538+
'TABLE_NAME' => 't2',
1539+
'COLUMN_NAME' => 'id',
1540+
'ORDINAL_POSITION' => '1',
1541+
'POSITION_IN_UNIQUE_CONSTRAINT' => '1',
1542+
'REFERENCED_TABLE_SCHEMA' => 'wp',
1543+
'REFERENCED_TABLE_NAME' => 't1',
1544+
'REFERENCED_COLUMN_NAME' => 'id',
1545+
),
1546+
),
1547+
$result
1548+
);
1549+
1550+
// SHOW CREATE TABLE
1551+
$result = $this->assertQuery( 'SHOW CREATE TABLE t2' );
1552+
$this->assertEquals(
1553+
array(
1554+
(object) array(
1555+
'Create Table' => implode(
1556+
"\n",
1557+
array(
1558+
'CREATE TABLE `t2` (',
1559+
' `id` int DEFAULT NULL,',
1560+
' CONSTRAINT `fk1` FOREIGN KEY (`id`) REFERENCES `t1` (`id`) ON DELETE CASCADE,',
1561+
' CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`id`) REFERENCES `t1` (`id`)',
1562+
') ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci',
1563+
)
1564+
),
1565+
),
1566+
),
1567+
$result
1568+
);
1569+
}
14471570
}

0 commit comments

Comments
 (0)