1
0

tkt-b1d3a2e531.test 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. # 2011 August 22
  2. #
  3. # The author disclaims copyright to this source code. In place of
  4. # a legal notice, here is a blessing:
  5. #
  6. # May you do good and not evil.
  7. # May you find forgiveness for yourself and forgive others.
  8. # May you share freely, never taking more than you give.
  9. #
  10. #***********************************************************************
  11. # This file implements regression tests for SQLite library.
  12. #
  13. # This file implements tests for foreign keys. Specifically, it tests
  14. # that ticket b1d3a2e531 has been fixed.
  15. #
  16. set testdir [file dirname $argv0]
  17. source $testdir/tester.tcl
  18. ifcapable {!foreignkey||!trigger} {
  19. finish_test
  20. return
  21. }
  22. set testprefix tkt-b1d3a2e531
  23. do_execsql_test 1.0 { PRAGMA foreign_keys = ON }
  24. do_execsql_test 1.1 {
  25. CREATE TABLE pp(x PRIMARY KEY);
  26. CREATE TABLE cc(y REFERENCES pp DEFERRABLE INITIALLY DEFERRED);
  27. INSERT INTO pp VALUES('abc');
  28. INSERT INTO cc VALUES('abc');
  29. }
  30. do_execsql_test 1.2 {
  31. BEGIN;
  32. DROP TABLE pp;
  33. DROP TABLE cc;
  34. COMMIT;
  35. }
  36. do_execsql_test 1.3 {
  37. CREATE TABLE pp(x PRIMARY KEY);
  38. CREATE TABLE cc(y REFERENCES pp DEFERRABLE INITIALLY DEFERRED);
  39. INSERT INTO pp VALUES('abc');
  40. INSERT INTO cc VALUES('abc');
  41. }
  42. do_execsql_test 1.4 {
  43. BEGIN;
  44. DROP TABLE cc;
  45. DROP TABLE pp;
  46. COMMIT;
  47. }
  48. do_execsql_test 2.1 {
  49. CREATE TABLE pp(x PRIMARY KEY);
  50. CREATE TABLE cc(
  51. y INTEGER PRIMARY KEY REFERENCES pp DEFERRABLE INITIALLY DEFERRED
  52. );
  53. INSERT INTO pp VALUES(5);
  54. INSERT INTO cc VALUES(5);
  55. }
  56. do_execsql_test 2.2 {
  57. BEGIN;
  58. DROP TABLE pp;
  59. DROP TABLE cc;
  60. COMMIT;
  61. }
  62. do_execsql_test 2.3 {
  63. CREATE TABLE pp(x PRIMARY KEY);
  64. CREATE TABLE cc(
  65. y INTEGER PRIMARY KEY REFERENCES pp DEFERRABLE INITIALLY DEFERRED
  66. );
  67. INSERT INTO pp VALUES(5);
  68. INSERT INTO cc VALUES(5);
  69. }
  70. do_execsql_test 2.4 {
  71. BEGIN;
  72. DROP TABLE cc;
  73. DROP TABLE pp;
  74. COMMIT;
  75. }
  76. do_execsql_test 3.1 {
  77. CREATE TABLE pp1(x PRIMARY KEY);
  78. CREATE TABLE cc1(y REFERENCES pp1 DEFERRABLE INITIALLY DEFERRED);
  79. CREATE TABLE pp2(x PRIMARY KEY);
  80. CREATE TABLE cc2(y REFERENCES pp1 DEFERRABLE INITIALLY DEFERRED);
  81. INSERT INTO pp1 VALUES(2200);
  82. INSERT INTO cc1 VALUES(NULL);
  83. INSERT INTO pp2 VALUES(2200);
  84. INSERT INTO cc2 VALUES(2200);
  85. }
  86. do_catchsql_test 3.2 {
  87. BEGIN;
  88. DELETE FROM pp2;
  89. DROP TABLE pp1;
  90. DROP TABLE cc1;
  91. COMMIT;
  92. } {1 {foreign key constraint failed}}
  93. do_catchsql_test 3.3 {
  94. DROP TABLE cc2;
  95. COMMIT;
  96. } {0 {}}
  97. finish_test