@@ -248,6 +248,43 @@ func TestForeignKeys(t *testing.T) {
248
248
}
249
249
}
250
250
251
+ func TestDeferredForeignKey (t * testing.T ) {
252
+ fname := TempFilename (t )
253
+ uri := "file:" + fname + "?_foreign_keys=1"
254
+ db , err := sql .Open ("sqlite3" , uri )
255
+ if err != nil {
256
+ os .Remove (fname )
257
+ t .Errorf ("sql.Open(\" sqlite3\" , %q): %v" , uri , err )
258
+ }
259
+ _ , err = db .Exec ("CREATE TABLE bar (id INTEGER PRIMARY KEY)" )
260
+ if err != nil {
261
+ t .Errorf ("failed creating tables: %v" , err )
262
+ }
263
+ _ , err = db .Exec ("CREATE TABLE foo (bar_id INTEGER, FOREIGN KEY(bar_id) REFERENCES bar(id) DEFERRABLE INITIALLY DEFERRED)" )
264
+ if err != nil {
265
+ t .Errorf ("failed creating tables: %v" , err )
266
+ }
267
+ tx , err := db .Begin ()
268
+ if err != nil {
269
+ t .Errorf ("Failed to begin transaction: %v" , err )
270
+ }
271
+ _ , err = tx .Exec ("INSERT INTO foo (bar_id) VALUES (123)" )
272
+ if err != nil {
273
+ t .Errorf ("Failed to insert row: %v" , err )
274
+ }
275
+ err = tx .Commit ()
276
+ if err == nil {
277
+ t .Errorf ("Expected an error: %v" , err )
278
+ }
279
+ _ , err = db .Begin ()
280
+ if err != nil {
281
+ t .Errorf ("Failed to begin transaction: %v" , err )
282
+ }
283
+
284
+ db .Close ()
285
+ os .Remove (fname )
286
+ }
287
+
251
288
func TestRecursiveTriggers (t * testing.T ) {
252
289
cases := map [string ]bool {
253
290
"?_recursive_triggers=1" : true ,
0 commit comments