Annotation of embedaddon/sqlite3/test/tkt-7bbfb7d442.test, revision 1.1.1.1

1.1       misho       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: do_execsql_test 1.4 {
                     53:   INSERT INTO t3(t3_a) SELECT 1 UNION SELECT 2 UNION SELECT 3;
                     54:   SELECT * FROM t3;
                     55: } {1 I 2 II 3 III}
                     56: 
                     57: 
                     58: 
                     59: #-------------------------------------------------------------------------
                     60: # The following test case - 2.* - is from the original bug report as 
                     61: # posted to the mailing list.
                     62: #
                     63: do_execsql_test 2.1 {
                     64:   CREATE TABLE InventoryControl (
                     65:     InventoryControlId INTEGER PRIMARY KEY AUTOINCREMENT,
                     66:     SKU INTEGER NOT NULL,
                     67:     Variant INTEGER NOT NULL DEFAULT 0,
                     68:     ControlDate DATE NOT NULL,
                     69:     ControlState INTEGER NOT NULL DEFAULT -1,
                     70:     DeliveredQty VARCHAR(30)
                     71:   );
                     72:   
                     73:   CREATE TRIGGER TGR_InventoryControl_AfterInsert
                     74:   AFTER INSERT ON InventoryControl 
                     75:   FOR EACH ROW WHEN NEW.ControlState=-1 BEGIN 
                     76: 
                     77:   INSERT OR REPLACE INTO InventoryControl(
                     78:         InventoryControlId,SKU,Variant,ControlDate,ControlState,DeliveredQty
                     79:   ) SELECT
                     80:           T1.InventoryControlId AS InventoryControlId,
                     81:           T1.SKU AS SKU,
                     82:           T1.Variant AS Variant,
                     83:           T1.ControlDate AS ControlDate,
                     84:           1 AS ControlState,
                     85:           COALESCE(T2.DeliveredQty,0) AS DeliveredQty
                     86:       FROM (
                     87:           SELECT
                     88:               NEW.InventoryControlId AS InventoryControlId,
                     89:               II.SKU AS SKU,
                     90:               II.Variant AS Variant,
                     91:               COALESCE(LastClosedIC.ControlDate,NEW.ControlDate) AS ControlDate
                     92:           FROM
                     93:               InventoryItem II
                     94:           LEFT JOIN
                     95:               InventoryControl LastClosedIC
                     96:               ON  LastClosedIC.InventoryControlId IN ( SELECT 99999 )
                     97:           WHERE
                     98:               II.SKU=NEW.SKU AND
                     99:               II.Variant=NEW.Variant
                    100:       )   T1
                    101:       LEFT JOIN (
                    102:           SELECT
                    103:               TD.SKU AS SKU,
                    104:               TD.Variant AS Variant,
                    105:               10 AS DeliveredQty
                    106:           FROM
                    107:               TransactionDetail TD
                    108:           WHERE
                    109:               TD.SKU=NEW.SKU AND
                    110:               TD.Variant=NEW.Variant
                    111:       )   T2
                    112:       ON  T2.SKU=T1.SKU AND
                    113:           T2.Variant=T1.Variant;
                    114:   END;
                    115:   
                    116:   CREATE TABLE InventoryItem (
                    117:     SKU INTEGER NOT NULL,
                    118:     Variant INTEGER NOT NULL DEFAULT 0,
                    119:     DeptCode INTEGER NOT NULL,
                    120:     GroupCode INTEGER NOT NULL,
                    121:     ItemDescription VARCHAR(120) NOT NULL,
                    122:     PRIMARY KEY(SKU, Variant)
                    123:   );
                    124:   
                    125:   INSERT INTO InventoryItem VALUES(220,0,1,170,'Scoth Tampon Recurer');
                    126:   INSERT INTO InventoryItem VALUES(31,0,1,110,'Fromage');
                    127:   
                    128:   CREATE TABLE TransactionDetail (
                    129:     TransactionId INTEGER NOT NULL,
                    130:     SKU INTEGER NOT NULL,
                    131:     Variant INTEGER NOT NULL DEFAULT 0,
                    132:     PRIMARY KEY(TransactionId, SKU, Variant)
                    133:   );
                    134:   INSERT INTO TransactionDetail(TransactionId, SKU, Variant) VALUES(44, 31, 0);
                    135:   
                    136:   
                    137:   INSERT INTO InventoryControl(SKU, Variant, ControlDate) SELECT 
                    138:       II.SKU AS SKU, II.Variant AS Variant, '2011-08-30' AS ControlDate 
                    139:       FROM InventoryItem II;
                    140: }
                    141: 
                    142: do_execsql_test 2.2 {
                    143:   SELECT SKU, DeliveredQty FROM InventoryControl WHERE SKU=31
                    144: } {31 10}
                    145: 
                    146: do_execsql_test 2.3 {
                    147:   SELECT CASE WHEN DeliveredQty=10 THEN "TEST PASSED!" ELSE "TEST FAILED!" END 
                    148:   FROM InventoryControl WHERE SKU=31; 
                    149: } {{TEST PASSED!}}
                    150: 
                    151: 
                    152: finish_test
                    153: 
                    154: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>