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