@@ -1541,6 +1541,32 @@ extension SnapshotTests {
1541
1541
└─────────────────────────────────────────┘
1542
1542
"""#
1543
1543
}
1544
+
1545
+ assertQuery (
1546
+ PragmaForeignKeyList< Reminder>
1547
+ . join( PragmaTableInfo< Reminder> . all) { $0. from. eq ( $1. name) }
1548
+ ) {
1549
+ """
1550
+ SELECT " remindersForeignKeys " . " id " , " remindersForeignKeys " . " seq " , " remindersForeignKeys " . " table " , " remindersForeignKeys " . " from " , " remindersForeignKeys " . " to " , " remindersForeignKeys " . " on_update " , " remindersForeignKeys " . " on_delete " , " remindersForeignKeys " . " match " , " remindersTableInfo " . " cid " , " remindersTableInfo " . " name " , " remindersTableInfo " . " type " , " remindersTableInfo " . " notnull " , " remindersTableInfo " . " dflt_value " , " remindersTableInfo " . " pk "
1551
+ FROM pragma_foreign_key_list('reminders') AS " remindersForeignKeys "
1552
+ JOIN pragma_table_info('reminders') AS " remindersTableInfo " ON ( " remindersForeignKeys " . " from " = " remindersTableInfo " . " name " )
1553
+ """
1554
+ } results: {
1555
+ """
1556
+ ┌────────────────────────────┬────────────────────────────┐
1557
+ │ PragmaForeignKeyList( │ PragmaTableInfo( │
1558
+ │ id: 0, │ columnID: 5, │
1559
+ │ sequence: 0, │ name: " remindersListID " , │
1560
+ │ table: " remindersLists " , │ type: " INTEGER " , │
1561
+ │ from: " remindersListID " , │ isNotNull: true, │
1562
+ │ to: " id " , │ defaultValue: nil, │
1563
+ │ onUpdate: .noAction, │ isPrimaryKey: false │
1564
+ │ onDelete: .cascade, │ ) │
1565
+ │ match: " NONE " │ │
1566
+ │ ) │ │
1567
+ └────────────────────────────┴────────────────────────────┘
1568
+ """
1569
+ }
1544
1570
}
1545
1571
}
1546
1572
}
@@ -1567,3 +1593,28 @@ struct PragmaTableInfo<Base: Table> {
1567
1593
@Column ( " dflt_value " ) let defaultValue : String ?
1568
1594
@Column ( " pk " ) let isPrimaryKey : Bool
1569
1595
}
1596
+
1597
+ @Table
1598
+ struct PragmaForeignKeyList < Base: Table > {
1599
+ static var tableAlias : String ? { " \( Base . tableName) ForeignKeys " }
1600
+ static var tableFragment : QueryFragment {
1601
+ " pragma_foreign_key_list( \( quote: Base . tableName, delimiter: . text) ) "
1602
+ }
1603
+
1604
+ let id : Int
1605
+ @Column ( " seq " ) let sequence : Int
1606
+ let table : String
1607
+ let from : String
1608
+ let to : String
1609
+ @Column ( " on_update " ) let onUpdate : ForeignKeyAction
1610
+ @Column ( " on_delete " ) let onDelete : ForeignKeyAction
1611
+ let match : String
1612
+ }
1613
+
1614
+ enum ForeignKeyAction : String , QueryBindable {
1615
+ case cascade = " CASCADE "
1616
+ case restrict = " RESTRICT "
1617
+ case setDefault = " SET DEFAULT "
1618
+ case setNull = " SET NULL "
1619
+ case noAction = " NO ACTION "
1620
+ }
0 commit comments