tkt-7bbfb7d442.test 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. # 2011 December 9
  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 to verify that ticket [7bbfb7d442] has been
  14. # fixed.
  15. #
  16. set testdir [file dirname $argv0]
  17. source $testdir/tester.tcl
  18. set testprefix tkt-7bbfb7d442
  19. do_execsql_test 1.1 {
  20. CREATE TABLE t1(a, b);
  21. INSERT INTO t1 VALUES(1, 'one');
  22. INSERT INTO t1 VALUES(2, 'two');
  23. INSERT INTO t1 VALUES(3, 'three');
  24. CREATE TABLE t2(c, d);
  25. INSERT INTO t2 VALUES('one', 'I');
  26. INSERT INTO t2 VALUES('two', 'II');
  27. INSERT INTO t2 VALUES('three', 'III');
  28. CREATE TABLE t3(t3_a PRIMARY KEY, t3_d);
  29. CREATE TRIGGER t3t AFTER INSERT ON t3 WHEN new.t3_d IS NULL BEGIN
  30. UPDATE t3 SET t3_d = (
  31. SELECT d FROM
  32. (SELECT * FROM t2 WHERE (new.t3_a%2)=(rowid%2) LIMIT 10),
  33. (SELECT * FROM t1 WHERE (new.t3_a%2)=(rowid%2) LIMIT 10)
  34. WHERE a = new.t3_a AND b = c
  35. ) WHERE t3_a = new.t3_a;
  36. END;
  37. }
  38. do_execsql_test 1.2 {
  39. INSERT INTO t3(t3_a) VALUES(1);
  40. INSERT INTO t3(t3_a) VALUES(2);
  41. INSERT INTO t3(t3_a) VALUES(3);
  42. SELECT * FROM t3;
  43. } {1 I 2 II 3 III}
  44. do_execsql_test 1.3 { DELETE FROM t3 }
  45. ifcapable compound {
  46. do_execsql_test 1.4 {
  47. INSERT INTO t3(t3_a) SELECT 1 UNION SELECT 2 UNION SELECT 3;
  48. SELECT * FROM t3;
  49. } {1 I 2 II 3 III}
  50. }
  51. #-------------------------------------------------------------------------
  52. # The following test case - 2.* - is from the original bug report as
  53. # posted to the mailing list.
  54. #
  55. do_execsql_test 2.1 {
  56. CREATE TABLE InventoryControl (
  57. InventoryControlId INTEGER PRIMARY KEY AUTOINCREMENT,
  58. SKU INTEGER NOT NULL,
  59. Variant INTEGER NOT NULL DEFAULT 0,
  60. ControlDate DATE NOT NULL,
  61. ControlState INTEGER NOT NULL DEFAULT -1,
  62. DeliveredQty VARCHAR(30)
  63. );
  64. CREATE TRIGGER TGR_InventoryControl_AfterInsert
  65. AFTER INSERT ON InventoryControl
  66. FOR EACH ROW WHEN NEW.ControlState=-1 BEGIN
  67. INSERT OR REPLACE INTO InventoryControl(
  68. InventoryControlId,SKU,Variant,ControlDate,ControlState,DeliveredQty
  69. ) SELECT
  70. T1.InventoryControlId AS InventoryControlId,
  71. T1.SKU AS SKU,
  72. T1.Variant AS Variant,
  73. T1.ControlDate AS ControlDate,
  74. 1 AS ControlState,
  75. COALESCE(T2.DeliveredQty,0) AS DeliveredQty
  76. FROM (
  77. SELECT
  78. NEW.InventoryControlId AS InventoryControlId,
  79. II.SKU AS SKU,
  80. II.Variant AS Variant,
  81. COALESCE(LastClosedIC.ControlDate,NEW.ControlDate) AS ControlDate
  82. FROM
  83. InventoryItem II
  84. LEFT JOIN
  85. InventoryControl LastClosedIC
  86. ON LastClosedIC.InventoryControlId IN ( SELECT 99999 )
  87. WHERE
  88. II.SKU=NEW.SKU AND
  89. II.Variant=NEW.Variant
  90. ) T1
  91. LEFT JOIN (
  92. SELECT
  93. TD.SKU AS SKU,
  94. TD.Variant AS Variant,
  95. 10 AS DeliveredQty
  96. FROM
  97. TransactionDetail TD
  98. WHERE
  99. TD.SKU=NEW.SKU AND
  100. TD.Variant=NEW.Variant
  101. ) T2
  102. ON T2.SKU=T1.SKU AND
  103. T2.Variant=T1.Variant;
  104. END;
  105. CREATE TABLE InventoryItem (
  106. SKU INTEGER NOT NULL,
  107. Variant INTEGER NOT NULL DEFAULT 0,
  108. DeptCode INTEGER NOT NULL,
  109. GroupCode INTEGER NOT NULL,
  110. ItemDescription VARCHAR(120) NOT NULL,
  111. PRIMARY KEY(SKU, Variant)
  112. );
  113. INSERT INTO InventoryItem VALUES(220,0,1,170,'Scoth Tampon Recurer');
  114. INSERT INTO InventoryItem VALUES(31,0,1,110,'Fromage');
  115. CREATE TABLE TransactionDetail (
  116. TransactionId INTEGER NOT NULL,
  117. SKU INTEGER NOT NULL,
  118. Variant INTEGER NOT NULL DEFAULT 0,
  119. PRIMARY KEY(TransactionId, SKU, Variant)
  120. );
  121. INSERT INTO TransactionDetail(TransactionId, SKU, Variant) VALUES(44, 31, 0);
  122. INSERT INTO InventoryControl(SKU, Variant, ControlDate) SELECT
  123. II.SKU AS SKU, II.Variant AS Variant, '2011-08-30' AS ControlDate
  124. FROM InventoryItem II;
  125. }
  126. do_execsql_test 2.2 {
  127. SELECT SKU, DeliveredQty FROM InventoryControl WHERE SKU=31
  128. } {31 10}
  129. do_execsql_test 2.3 {
  130. SELECT CASE WHEN DeliveredQty=10 THEN "TEST PASSED!" ELSE "TEST FAILED!" END
  131. FROM InventoryControl WHERE SKU=31;
  132. } {{TEST PASSED!}}
  133. finish_test