tkt3810.test 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. # 2009 August 1
  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. #
  12. # Tests to make sure #3810 is fixed.
  13. #
  14. # $Id: tkt3810.test,v 1.4 2009/08/06 17:43:31 drh Exp $
  15. set testdir [file dirname $argv0]
  16. source $testdir/tester.tcl
  17. ifcapable {!trigger} {
  18. finish_test
  19. return
  20. }
  21. # Create a table using the first database connection.
  22. #
  23. do_test tkt3810-1.1 {
  24. execsql {
  25. CREATE TABLE t1(x);
  26. INSERT INTO t1 VALUES(123);
  27. SELECT * FROM t1;
  28. CREATE TABLE t2(y);
  29. CREATE TABLE t3(z);
  30. }
  31. } 123
  32. # Create a second connection to the same database. Make sure the
  33. # schema of the database has been parsed by the second connection.
  34. #
  35. do_test tkt3810-2 {
  36. sqlite3 db2 test.db
  37. execsql {
  38. SELECT * FROM t1;
  39. } db2
  40. } 123
  41. # DROP the table using the second connection. The table no longer exists
  42. # but the first connection does not yet know this. Then try to create a TEMP
  43. # trigger in the first connection that references the table that was dropped.
  44. #
  45. do_test tkt3810-3 {
  46. execsql {DROP TABLE t1} db2
  47. execsql {
  48. CREATE TEMP TRIGGER r1 AFTER INSERT ON t1 BEGIN
  49. INSERT INTO t2 VALUES(new.rowid);
  50. END;
  51. }
  52. catchsql {
  53. SELECT * FROM t3;
  54. }
  55. } {0 {}}
  56. # Trigger still exists in the sqlite_temp_master table, but now it is
  57. # an orphan.
  58. #
  59. do_test tkt3810-4 {
  60. execsql {SELECT name FROM sqlite_temp_master ORDER BY name}
  61. } {r1}
  62. # Because it is an orphan, it cannot be dropped.
  63. #
  64. do_test tkt3810-5 {
  65. catchsql {DROP TRIGGER r1}
  66. } {1 {no such trigger: r1}}
  67. # Create a table t1 then drop the table in order to drop the orphaned
  68. # trigger.
  69. #
  70. do_test tkt3810-6 {
  71. execsql {CREATE TABLE t1(x)} db2
  72. execsql {DROP TABLE t1}
  73. execsql {
  74. SELECT name FROM sqlite_temp_master;
  75. }
  76. } {}
  77. db2 close
  78. finish_test