@@ -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