@@ -1541,6 +1541,32 @@ extension SnapshotTests {
15411541 └─────────────────────────────────────────┘
15421542 """#
15431543 }
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+ }
15441570 }
15451571 }
15461572}
@@ -1567,3 +1593,28 @@ struct PragmaTableInfo<Base: Table> {
15671593 @Column ( " dflt_value " ) let defaultValue : String ?
15681594 @Column ( " pk " ) let isPrimaryKey : Bool
15691595}
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