@@ -937,15 +937,6 @@ extension StmtTypeChecker {
937937 }
938938
939939 mutating func typeCheck( createTable: CreateTableStmtSyntax ) {
940- if pragmas. contains ( . requireStrictTables)
941- && !createTable. options. kind. contains ( . strict) {
942- diagnostics. add ( . init(
943- " Missing STRICT table option " ,
944- at: createTable. location,
945- suggestion: . append( " STRICT " )
946- ) )
947- }
948-
949940 switch createTable. kind {
950941 case let . select( selectStmt) :
951942 let signature = signature ( for: selectStmt)
@@ -956,7 +947,7 @@ extension StmtTypeChecker {
956947 primaryKey: primaryKey ( of: createTable, columns: columns) ,
957948 kind: . normal
958949 )
959- case let . columns( columnsDefs) :
950+ case let . columns( columnsDefs, constraints , options ) :
960951 var columns : Columns = [ : ]
961952 for (name, def) in columnsDefs {
962953 columns [ name. value] = typeFor (
@@ -966,13 +957,27 @@ extension StmtTypeChecker {
966957 )
967958 }
968959
969- validateTableConstraints ( of: createTable, columns: columns)
960+ validateTableConstraints (
961+ of: createTable,
962+ columns: columns,
963+ constraints: constraints
964+ )
965+
970966 schema [ createTable. name. value] = Table (
971967 name: createTable. name. value,
972968 columns: columns,
973969 primaryKey: primaryKey ( of: createTable, columns: columns) ,
974970 kind: . normal
975971 )
972+
973+ if pragmas. contains ( . requireStrictTables)
974+ && !options. kind. contains ( . strict) {
975+ diagnostics. add ( . init(
976+ " Missing STRICT table option " ,
977+ at: createTable. location,
978+ suggestion: . append( " STRICT " )
979+ ) )
980+ }
976981 }
977982 }
978983
@@ -1138,15 +1143,15 @@ extension StmtTypeChecker {
11381143 columns: Columns
11391144 ) -> [ Substring ] {
11401145 // Any PK define by table constraints
1141- let byTableConstraints : [ ( [ IndexedColumnSyntax ] , TableConstraintSyntax ) ] = stmt. constraints
1146+ let byTableConstraints : [ ( [ IndexedColumnSyntax ] , TableConstraintSyntax ) ] = stmt. constraints?
11421147 . compactMap { constraint -> ( [ IndexedColumnSyntax ] , TableConstraintSyntax ) ? in
11431148 guard case let . primaryKey( columns, _) = constraint. kind else { return nil }
11441149 return ( columns, constraint)
1145- }
1150+ } ?? [ ]
11461151
11471152 // Any PK defined at the column level
11481153 let byColumnConstraints : [ IdentifierSyntax ]
1149- if case let . columns( columns) = stmt. kind {
1154+ if case let . columns( columns, _ , _ ) = stmt. kind {
11501155 byColumnConstraints = columns. values
11511156 . filter { $0. constraints. contains ( where: \. isPkConstraint) }
11521157 . map ( \. name)
@@ -1194,9 +1199,10 @@ extension StmtTypeChecker {
11941199
11951200 private mutating func validateTableConstraints(
11961201 of stmt: CreateTableStmtSyntax ,
1197- columns: Columns
1202+ columns: Columns ,
1203+ constraints: [ TableConstraintSyntax ]
11981204 ) {
1199- for constraint in stmt . constraints {
1205+ for constraint in constraints {
12001206 switch constraint. kind {
12011207 case . check( let expr) :
12021208 inNewEnvironment { typeChecker in
0 commit comments