OLD | NEW |
1 # 2002 January 29 | 1 # 2002 January 29 |
2 # | 2 # |
3 # The author disclaims copyright to this source code. In place of | 3 # The author disclaims copyright to this source code. In place of |
4 # a legal notice, here is a blessing: | 4 # a legal notice, here is a blessing: |
5 # | 5 # |
6 # May you do good and not evil. | 6 # May you do good and not evil. |
7 # May you find forgiveness for yourself and forgive others. | 7 # May you find forgiveness for yourself and forgive others. |
8 # May you share freely, never taking more than you give. | 8 # May you share freely, never taking more than you give. |
9 # | 9 # |
10 #*********************************************************************** | 10 #*********************************************************************** |
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 8 IGNORE {INSERT OR REPLACE} 0 5 1 | 235 8 IGNORE {INSERT OR REPLACE} 0 5 1 |
236 9 FAIL {INSERT OR IGNORE} 0 {} 1 | 236 9 FAIL {INSERT OR IGNORE} 0 {} 1 |
237 10 ABORT {INSERT OR REPLACE} 0 5 1 | 237 10 ABORT {INSERT OR REPLACE} 0 5 1 |
238 11 ROLLBACK {INSERT OR IGNORE} 0 {} 1 | 238 11 ROLLBACK {INSERT OR IGNORE} 0 {} 1 |
239 12 {} {INSERT OR IGNORE} 0 {} 1 | 239 12 {} {INSERT OR IGNORE} 0 {} 1 |
240 13 {} {INSERT OR REPLACE} 0 5 1 | 240 13 {} {INSERT OR REPLACE} 0 5 1 |
241 14 {} {INSERT OR FAIL} 1 {} 1 | 241 14 {} {INSERT OR FAIL} 1 {} 1 |
242 15 {} {INSERT OR ABORT} 1 {} 1 | 242 15 {} {INSERT OR ABORT} 1 {} 1 |
243 16 {} {INSERT OR ROLLBACK} 1 {} {} | 243 16 {} {INSERT OR ROLLBACK} 1 {} {} |
244 } { | 244 } { |
245 if {$t0} {set t1 {t1.c may not be NULL}} | 245 if {$t0} {set t1 {NOT NULL constraint failed: t1.c}} |
246 do_test conflict-5.$i { | 246 do_test conflict-5.$i { |
247 if {$conf1!=""} {set conf1 "ON CONFLICT $conf1"} | 247 if {$conf1!=""} {set conf1 "ON CONFLICT $conf1"} |
248 set r0 [catch {execsql [subst { | 248 set r0 [catch {execsql [subst { |
249 DROP TABLE t1; | 249 DROP TABLE t1; |
250 CREATE TABLE t1(a,b,c NOT NULL $conf1 DEFAULT 5); | 250 CREATE TABLE t1(a,b,c NOT NULL $conf1 DEFAULT 5); |
251 DELETE FROM t2; | 251 DELETE FROM t2; |
252 BEGIN; | 252 BEGIN; |
253 INSERT INTO t2 VALUES(1); | 253 INSERT INTO t2 VALUES(1); |
254 $cmd INTO t1 VALUES(1,2,NULL); | 254 $cmd INTO t1 VALUES(1,2,NULL); |
255 }]} r1] | 255 }]} r1] |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
299 8 IGNORE {UPDATE OR REPLACE} 0 {7 6 9} 1 0 0 | 299 8 IGNORE {UPDATE OR REPLACE} 0 {7 6 9} 1 0 0 |
300 9 FAIL {UPDATE OR IGNORE} 0 {6 7 3 9} 1 0 0 | 300 9 FAIL {UPDATE OR IGNORE} 0 {6 7 3 9} 1 0 0 |
301 10 ABORT {UPDATE OR REPLACE} 0 {7 6 9} 1 0 0 | 301 10 ABORT {UPDATE OR REPLACE} 0 {7 6 9} 1 0 0 |
302 11 ROLLBACK {UPDATE OR IGNORE} 0 {6 7 3 9} 1 0 0 | 302 11 ROLLBACK {UPDATE OR IGNORE} 0 {6 7 3 9} 1 0 0 |
303 12 {} {UPDATE OR IGNORE} 0 {6 7 3 9} 1 0 0 | 303 12 {} {UPDATE OR IGNORE} 0 {6 7 3 9} 1 0 0 |
304 13 {} {UPDATE OR REPLACE} 0 {7 6 9} 1 0 0 | 304 13 {} {UPDATE OR REPLACE} 0 {7 6 9} 1 0 0 |
305 14 {} {UPDATE OR FAIL} 1 {6 7 3 4} 1 0 0 | 305 14 {} {UPDATE OR FAIL} 1 {6 7 3 4} 1 0 0 |
306 15 {} {UPDATE OR ABORT} 1 {1 2 3 4} 1 0 1 | 306 15 {} {UPDATE OR ABORT} 1 {1 2 3 4} 1 0 1 |
307 16 {} {UPDATE OR ROLLBACK} 1 {1 2 3 4} 0 0 0 | 307 16 {} {UPDATE OR ROLLBACK} 1 {1 2 3 4} 0 0 0 |
308 } { | 308 } { |
309 if {$t0} {set t1 {column a is not unique}} | 309 if {$t0} {set t1 {UNIQUE constraint failed: t1.a}} |
310 if {[info exists TEMP_STORE] && $TEMP_STORE==3} { | 310 if {[info exists TEMP_STORE] && $TEMP_STORE==3} { |
311 set t3 0 | 311 set t3 0 |
312 } else { | 312 } else { |
313 set t3 [expr {$t3+$t4}] | 313 set t3 [expr {$t3+$t4}] |
314 } | 314 } |
315 do_test conflict-6.$i { | 315 do_test conflict-6.$i { |
316 db close | 316 db close |
317 sqlite3 db test.db | 317 sqlite3 db test.db |
318 if {$conf1!=""} {set conf1 "ON CONFLICT $conf1"} | 318 if {$conf1!=""} {set conf1 "ON CONFLICT $conf1"} |
319 execsql {pragma temp_store=file} | 319 execsql {pragma temp_store=file} |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
486 catchsql { | 486 catchsql { |
487 UPDATE t2 SET a=a+1 WHERE a=1; | 487 UPDATE t2 SET a=a+1 WHERE a=1; |
488 SELECT * FROM t2; | 488 SELECT * FROM t2; |
489 } | 489 } |
490 } {0 {1 1 1 1 1 2 2 2 2 2}} | 490 } {0 {1 1 1 1 1 2 2 2 2 2}} |
491 do_test conflict-9.5 { | 491 do_test conflict-9.5 { |
492 catchsql { | 492 catchsql { |
493 INSERT INTO t2 VALUES(3,1,3,3,3); | 493 INSERT INTO t2 VALUES(3,1,3,3,3); |
494 SELECT * FROM t2; | 494 SELECT * FROM t2; |
495 } | 495 } |
496 } {1 {column b is not unique}} | 496 } {1 {UNIQUE constraint failed: t2.b}} |
497 do_test conflict-9.6 { | 497 do_test conflict-9.6 { |
498 catchsql { | 498 catchsql { |
499 UPDATE t2 SET b=b+1 WHERE b=1; | 499 UPDATE t2 SET b=b+1 WHERE b=1; |
500 SELECT * FROM t2; | 500 SELECT * FROM t2; |
501 } | 501 } |
502 } {1 {column b is not unique}} | 502 } {1 {UNIQUE constraint failed: t2.b}} |
503 do_test conflict-9.7 { | 503 do_test conflict-9.7 { |
504 catchsql { | 504 catchsql { |
505 BEGIN; | 505 BEGIN; |
506 UPDATE t3 SET x=x+1; | 506 UPDATE t3 SET x=x+1; |
507 INSERT INTO t2 VALUES(3,1,3,3,3); | 507 INSERT INTO t2 VALUES(3,1,3,3,3); |
508 SELECT * FROM t2; | 508 SELECT * FROM t2; |
509 } | 509 } |
510 } {1 {column b is not unique}} | 510 } {1 {UNIQUE constraint failed: t2.b}} |
511 do_test conflict-9.8 { | 511 do_test conflict-9.8 { |
512 execsql {COMMIT} | 512 execsql {COMMIT} |
513 execsql {SELECT * FROM t3} | 513 execsql {SELECT * FROM t3} |
514 } {2} | 514 } {2} |
515 do_test conflict-9.9 { | 515 do_test conflict-9.9 { |
516 catchsql { | 516 catchsql { |
517 BEGIN; | 517 BEGIN; |
518 UPDATE t3 SET x=x+1; | 518 UPDATE t3 SET x=x+1; |
519 UPDATE t2 SET b=b+1 WHERE b=1; | 519 UPDATE t2 SET b=b+1 WHERE b=1; |
520 SELECT * FROM t2; | 520 SELECT * FROM t2; |
521 } | 521 } |
522 } {1 {column b is not unique}} | 522 } {1 {UNIQUE constraint failed: t2.b}} |
523 do_test conflict-9.10 { | 523 do_test conflict-9.10 { |
524 execsql {COMMIT} | 524 execsql {COMMIT} |
525 execsql {SELECT * FROM t3} | 525 execsql {SELECT * FROM t3} |
526 } {3} | 526 } {3} |
527 do_test conflict-9.11 { | 527 do_test conflict-9.11 { |
528 catchsql { | 528 catchsql { |
529 INSERT INTO t2 VALUES(3,3,3,1,3); | 529 INSERT INTO t2 VALUES(3,3,3,1,3); |
530 SELECT * FROM t2; | 530 SELECT * FROM t2; |
531 } | 531 } |
532 } {1 {column d is not unique}} | 532 } {1 {UNIQUE constraint failed: t2.d}} |
533 do_test conflict-9.12 { | 533 do_test conflict-9.12 { |
534 catchsql { | 534 catchsql { |
535 UPDATE t2 SET d=d+1 WHERE d=1; | 535 UPDATE t2 SET d=d+1 WHERE d=1; |
536 SELECT * FROM t2; | 536 SELECT * FROM t2; |
537 } | 537 } |
538 } {1 {column d is not unique}} | 538 } {1 {UNIQUE constraint failed: t2.d}} |
539 do_test conflict-9.13 { | 539 do_test conflict-9.13 { |
540 catchsql { | 540 catchsql { |
541 BEGIN; | 541 BEGIN; |
542 UPDATE t3 SET x=x+1; | 542 UPDATE t3 SET x=x+1; |
543 INSERT INTO t2 VALUES(3,3,3,1,3); | 543 INSERT INTO t2 VALUES(3,3,3,1,3); |
544 SELECT * FROM t2; | 544 SELECT * FROM t2; |
545 } | 545 } |
546 } {1 {column d is not unique}} | 546 } {1 {UNIQUE constraint failed: t2.d}} |
547 do_test conflict-9.14 { | 547 do_test conflict-9.14 { |
548 execsql {COMMIT} | 548 execsql {COMMIT} |
549 execsql {SELECT * FROM t3} | 549 execsql {SELECT * FROM t3} |
550 } {4} | 550 } {4} |
551 do_test conflict-9.15 { | 551 do_test conflict-9.15 { |
552 catchsql { | 552 catchsql { |
553 BEGIN; | 553 BEGIN; |
554 UPDATE t3 SET x=x+1; | 554 UPDATE t3 SET x=x+1; |
555 UPDATE t2 SET d=d+1 WHERE d=1; | 555 UPDATE t2 SET d=d+1 WHERE d=1; |
556 SELECT * FROM t2; | 556 SELECT * FROM t2; |
557 } | 557 } |
558 } {1 {column d is not unique}} | 558 } {1 {UNIQUE constraint failed: t2.d}} |
559 do_test conflict-9.16 { | 559 do_test conflict-9.16 { |
560 execsql {COMMIT} | 560 execsql {COMMIT} |
561 execsql {SELECT * FROM t3} | 561 execsql {SELECT * FROM t3} |
562 } {5} | 562 } {5} |
563 do_test conflict-9.17 { | 563 do_test conflict-9.17 { |
564 catchsql { | 564 catchsql { |
565 INSERT INTO t2 VALUES(3,3,3,3,1); | 565 INSERT INTO t2 VALUES(3,3,3,3,1); |
566 SELECT * FROM t2; | 566 SELECT * FROM t2; |
567 } | 567 } |
568 } {1 {column e is not unique}} | 568 } {1 {UNIQUE constraint failed: t2.e}} |
569 do_test conflict-9.18 { | 569 do_test conflict-9.18 { |
570 catchsql { | 570 catchsql { |
571 UPDATE t2 SET e=e+1 WHERE e=1; | 571 UPDATE t2 SET e=e+1 WHERE e=1; |
572 SELECT * FROM t2; | 572 SELECT * FROM t2; |
573 } | 573 } |
574 } {1 {column e is not unique}} | 574 } {1 {UNIQUE constraint failed: t2.e}} |
575 do_test conflict-9.19 { | 575 do_test conflict-9.19 { |
576 catchsql { | 576 catchsql { |
577 BEGIN; | 577 BEGIN; |
578 UPDATE t3 SET x=x+1; | 578 UPDATE t3 SET x=x+1; |
579 INSERT INTO t2 VALUES(3,3,3,3,1); | 579 INSERT INTO t2 VALUES(3,3,3,3,1); |
580 SELECT * FROM t2; | 580 SELECT * FROM t2; |
581 } | 581 } |
582 } {1 {column e is not unique}} | 582 } {1 {UNIQUE constraint failed: t2.e}} |
| 583 verify_ex_errcode conflict-9.21b SQLITE_CONSTRAINT_UNIQUE |
583 do_test conflict-9.20 { | 584 do_test conflict-9.20 { |
584 catch {execsql {COMMIT}} | 585 catch {execsql {COMMIT}} |
585 execsql {SELECT * FROM t3} | 586 execsql {SELECT * FROM t3} |
586 } {5} | 587 } {5} |
587 do_test conflict-9.21 { | 588 do_test conflict-9.21 { |
588 catchsql { | 589 catchsql { |
589 BEGIN; | 590 BEGIN; |
590 UPDATE t3 SET x=x+1; | 591 UPDATE t3 SET x=x+1; |
591 UPDATE t2 SET e=e+1 WHERE e=1; | 592 UPDATE t2 SET e=e+1 WHERE e=1; |
592 SELECT * FROM t2; | 593 SELECT * FROM t2; |
593 } | 594 } |
594 } {1 {column e is not unique}} | 595 } {1 {UNIQUE constraint failed: t2.e}} |
| 596 verify_ex_errcode conflict-9.21b SQLITE_CONSTRAINT_UNIQUE |
595 do_test conflict-9.22 { | 597 do_test conflict-9.22 { |
596 catch {execsql {COMMIT}} | 598 catch {execsql {COMMIT}} |
597 execsql {SELECT * FROM t3} | 599 execsql {SELECT * FROM t3} |
598 } {5} | 600 } {5} |
599 do_test conflict-9.23 { | 601 do_test conflict-9.23 { |
600 catchsql { | 602 catchsql { |
601 INSERT INTO t2 VALUES(3,3,1,3,3); | 603 INSERT INTO t2 VALUES(3,3,1,3,3); |
602 SELECT * FROM t2; | 604 SELECT * FROM t2; |
603 } | 605 } |
604 } {0 {2 2 2 2 2 3 3 1 3 3}} | 606 } {0 {2 2 2 2 2 3 3 1 3 3}} |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
773 do_test conflict-12.2 { | 775 do_test conflict-12.2 { |
774 execsql { | 776 execsql { |
775 UPDATE OR IGNORE t5 SET a=a+1 WHERE a=1; | 777 UPDATE OR IGNORE t5 SET a=a+1 WHERE a=1; |
776 SELECT * FROM t5; | 778 SELECT * FROM t5; |
777 } | 779 } |
778 } {1 one 2 two} | 780 } {1 one 2 two} |
779 do_test conflict-12.3 { | 781 do_test conflict-12.3 { |
780 catchsql { | 782 catchsql { |
781 UPDATE t5 SET a=a+1 WHERE a=1; | 783 UPDATE t5 SET a=a+1 WHERE a=1; |
782 } | 784 } |
783 } {1 {PRIMARY KEY must be unique}} | 785 } {1 {UNIQUE constraint failed: t5.a}} |
| 786 verify_ex_errcode conflict-12.3b SQLITE_CONSTRAINT_PRIMARYKEY |
784 do_test conflict-12.4 { | 787 do_test conflict-12.4 { |
785 execsql { | 788 execsql { |
786 UPDATE OR REPLACE t5 SET a=a+1 WHERE a=1; | 789 UPDATE OR REPLACE t5 SET a=a+1 WHERE a=1; |
787 SELECT * FROM t5; | 790 SELECT * FROM t5; |
788 } | 791 } |
789 } {2 one} | 792 } {2 one} |
| 793 do_test conflict-12.5 { |
| 794 catchsql { |
| 795 CREATE TABLE t5b(x); |
| 796 INSERT INTO t5b(rowid, x) VALUES(1,10),(2,11); |
| 797 UPDATE t5b SET rowid=rowid+1 WHERE x=10; |
| 798 } |
| 799 } {1 {UNIQUE constraint failed: t5b.rowid}} |
| 800 verify_ex_errcode conflict-12.5b SQLITE_CONSTRAINT_ROWID |
790 | 801 |
791 | 802 |
792 # Ticket [c38baa3d969eab7946dc50ba9d9b4f0057a19437] | 803 # Ticket [c38baa3d969eab7946dc50ba9d9b4f0057a19437] |
793 # REPLACE works like ABORT on a CHECK constraint. | 804 # REPLACE works like ABORT on a CHECK constraint. |
794 # | 805 # |
795 do_test conflict-13.1 { | 806 do_test conflict-13.1 { |
796 execsql { | 807 execsql { |
797 CREATE TABLE t13(a CHECK(a!=2)); | 808 CREATE TABLE t13(a CHECK(a!=2)); |
798 BEGIN; | 809 BEGIN; |
799 REPLACE INTO t13 VALUES(1); | 810 REPLACE INTO t13 VALUES(1); |
800 } | 811 } |
801 catchsql { | 812 catchsql { |
802 REPLACE INTO t13 VALUES(2); | 813 REPLACE INTO t13 VALUES(2); |
803 } | 814 } |
804 } {1 {constraint failed}} | 815 } {1 {CHECK constraint failed: t13}} |
| 816 verify_ex_errcode conflict-13.1b SQLITE_CONSTRAINT_CHECK |
805 do_test conflict-13.2 { | 817 do_test conflict-13.2 { |
806 execsql { | 818 execsql { |
807 REPLACE INTO t13 VALUES(3); | 819 REPLACE INTO t13 VALUES(3); |
808 COMMIT; | 820 COMMIT; |
809 SELECT * FROM t13; | 821 SELECT * FROM t13; |
810 } | 822 } |
811 } {1 3} | 823 } {1 3} |
812 | 824 |
813 | 825 |
814 finish_test | 826 finish_test |
OLD | NEW |