Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix a problem with ON DELETE SET DEFAULT actions. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
9406995055f53639b0af46985c7b0a24 |
User & Date: | dan 2009-09-22 16:08:58.000 |
Context
2009-09-22
| ||
16:55 | Fix another OOM related problem in fkey.c. (check-in: e2bc51bc61 user: dan tags: trunk) | |
16:08 | Fix a problem with ON DELETE SET DEFAULT actions. (check-in: 9406995055 user: dan tags: trunk) | |
15:53 | Fix an OOM related crash in fkey.c. (check-in: 635d6a775a user: dan tags: trunk) | |
Changes
Changes to src/fkey.c.
︙ | ︙ | |||
679 680 681 682 683 684 685 | Expr *pNew; if( action==OE_Cascade ){ pNew = sqlite3PExpr(pParse, TK_DOT, sqlite3PExpr(pParse, TK_ID, 0, 0, &tNew), sqlite3PExpr(pParse, TK_ID, 0, 0, &tToCol) , 0); }else if( action==OE_SetDflt ){ | | | 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 | Expr *pNew; if( action==OE_Cascade ){ pNew = sqlite3PExpr(pParse, TK_DOT, sqlite3PExpr(pParse, TK_ID, 0, 0, &tNew), sqlite3PExpr(pParse, TK_ID, 0, 0, &tToCol) , 0); }else if( action==OE_SetDflt ){ Expr *pDflt = pFKey->pFrom->aCol[iFromCol].pDflt; if( pDflt ){ pNew = sqlite3ExprDup(db, pDflt, 0); }else{ pNew = sqlite3PExpr(pParse, TK_NULL, 0, 0, 0); } }else{ pNew = sqlite3PExpr(pParse, TK_NULL, 0, 0, 0); |
︙ | ︙ |
Changes to test/fkey2.test.
︙ | ︙ | |||
42 43 44 45 46 47 48 49 50 51 52 53 54 55 | # fkey2-6.*: Test that FK processing is automatically disabled when # running VACUUM. # # fkey2-7.*: Test using an IPK as the key in the child (referencing) table. # # fkey2-8.*: Test that enabling/disabling foreign key support while a # transaction is active is not possible. # # fkey2-genfkey.*: Tests that were used with the shell tool .genfkey # command. Recycled to test the built-in implementation. # proc drop_all_tables {{db db}} { | > > | 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | # fkey2-6.*: Test that FK processing is automatically disabled when # running VACUUM. # # fkey2-7.*: Test using an IPK as the key in the child (referencing) table. # # fkey2-8.*: Test that enabling/disabling foreign key support while a # transaction is active is not possible. # # fkey2-9.*: Test SET DEFAULT actions. # # fkey2-genfkey.*: Tests that were used with the shell tool .genfkey # command. Recycled to test the built-in implementation. # proc drop_all_tables {{db db}} { |
︙ | ︙ | |||
472 473 474 475 476 477 478 479 480 481 482 483 484 485 | fkey2-8-test 10 { PRAGMA foreign_keys = 1 } 1 fkey2-8-test 11 { PRAGMA foreign_keys = off } 0 fkey2-8-test 12 { PRAGMA foreign_keys = on } 1 fkey2-8-test 13 { PRAGMA foreign_keys = no } 0 fkey2-8-test 14 { PRAGMA foreign_keys = yes } 1 fkey2-8-test 15 { PRAGMA foreign_keys = false } 0 fkey2-8-test 16 { PRAGMA foreign_keys = true } 1 #------------------------------------------------------------------------- # The following block of tests, those prefixed with "fkey2-genfkey.", are # the same tests that were used to test the ".genfkey" command provided # by the shell tool. So these tests show that the built-in foreign key # implementation is more or less compatible with the triggers generated # by genfkey. | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 | fkey2-8-test 10 { PRAGMA foreign_keys = 1 } 1 fkey2-8-test 11 { PRAGMA foreign_keys = off } 0 fkey2-8-test 12 { PRAGMA foreign_keys = on } 1 fkey2-8-test 13 { PRAGMA foreign_keys = no } 0 fkey2-8-test 14 { PRAGMA foreign_keys = yes } 1 fkey2-8-test 15 { PRAGMA foreign_keys = false } 0 fkey2-8-test 16 { PRAGMA foreign_keys = true } 1 #------------------------------------------------------------------------- # The following tests, fkey2-9.*, test SET DEFAULT actions. # drop_all_tables do_test fkey2-9.1.1 { execsql { CREATE TABLE t1(a INTEGER PRIMARY KEY, b); CREATE TABLE t2( c INTEGER PRIMARY KEY, d INTEGER DEFAULT 1 REFERENCES t1 ON DELETE SET DEFAULT ); DELETE FROM t1; } } {} do_test fkey2-9.1.2 { execsql { INSERT INTO t1 VALUES(1, 'one'); INSERT INTO t1 VALUES(2, 'two'); INSERT INTO t2 VALUES(1, 2); SELECT * FROM t2; DELETE FROM t1 WHERE a = 2; SELECT * FROM t2; } } {1 2 1 1} do_test fkey2-9.1.3 { execsql { INSERT INTO t1 VALUES(2, 'two'); UPDATE t2 SET d = 2; DELETE FROM t1 WHERE a = 1; SELECT * FROM t2; } } {1 2} do_test fkey2-9.1.4 { execsql { SELECT * FROM t1 } } {2 two} do_test fkey2-9.1.5 { catchsql { DELETE FROM t1 } } {1 {foreign key constraint failed}} #------------------------------------------------------------------------- # The following block of tests, those prefixed with "fkey2-genfkey.", are # the same tests that were used to test the ".genfkey" command provided # by the shell tool. So these tests show that the built-in foreign key # implementation is more or less compatible with the triggers generated # by genfkey. |
︙ | ︙ |