@@ -1444,4 +1444,127 @@ public function testInformationSchemaForeignKeysWithMultipleColumns(): void {
1444
1444
$ result
1445
1445
);
1446
1446
}
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
+ }
1447
1570
}
0 commit comments