1fb98dac0Sdrh# 2022-05-24 2fb98dac0Sdrh# 3fb98dac0Sdrh# The author disclaims copyright to this source code. In place of 4fb98dac0Sdrh# a legal notice, here is a blessing: 5fb98dac0Sdrh# 6fb98dac0Sdrh# May you do good and not evil. 7fb98dac0Sdrh# May you find forgiveness for yourself and forgive others. 8fb98dac0Sdrh# May you share freely, never taking more than you give. 9fb98dac0Sdrh# 10fb98dac0Sdrh#*********************************************************************** 11fb98dac0Sdrh# 12fb98dac0Sdrh 13fb98dac0Sdrhset testdir [file dirname $argv0] 14fb98dac0Sdrhsource $testdir/tester.tcl 15fb98dac0Sdrhset testprefix upfrom4 16fb98dac0Sdrh 17fb98dac0Sdrhdo_execsql_test 100 { 18fb98dac0Sdrh DROP TABLE IF EXISTS t5; 19fb98dac0Sdrh DROP TABLE IF EXISTS m1; 20fb98dac0Sdrh DROP TABLE IF EXISTS m2; 21fb98dac0Sdrh CREATE TABLE t5(a INTEGER PRIMARY KEY, b TEXT, c TEXT); 22fb98dac0Sdrh CREATE TABLE m1(x INTEGER PRIMARY KEY, y TEXT); 23fb98dac0Sdrh CREATE TABLE m2(u INTEGER PRIMARY KEY, v TEXT); 24fb98dac0Sdrh 25fb98dac0Sdrh INSERT INTO t5 VALUES(1, 'one', 'ONE'); 26fb98dac0Sdrh INSERT INTO t5 VALUES(2, 'two', 'TWO'); 27fb98dac0Sdrh INSERT INTO t5 VALUES(3, 'three', 'THREE'); 28fb98dac0Sdrh INSERT INTO t5 VALUES(4, 'four', 'FOUR'); 29fb98dac0Sdrh 30fb98dac0Sdrh INSERT INTO m1 VALUES(1, 'i'); 31fb98dac0Sdrh INSERT INTO m1 VALUES(2, 'ii'); 32fb98dac0Sdrh INSERT INTO m1 VALUES(3, 'iii'); 33fb98dac0Sdrh 34fb98dac0Sdrh INSERT INTO m2 VALUES(1, 'I'); 35fb98dac0Sdrh INSERT INTO m2 VALUES(3, 'II'); 36fb98dac0Sdrh INSERT INTO m2 VALUES(4, 'III'); 37fb98dac0Sdrh SELECT * FROM t5; 38fb98dac0Sdrh} {1 one ONE 2 two TWO 3 three THREE 4 four FOUR} 39fb98dac0Sdrh 40fb98dac0Sdrhdo_execsql_test 110 { 41fb98dac0Sdrh BEGIN; 42fb98dac0Sdrh UPDATE t5 SET b=y, c=v FROM m1 LEFT JOIN m2 ON (x=u) WHERE x=a; 43fb98dac0Sdrh SELECT * FROM t5 ORDER BY a; 44fb98dac0Sdrh ROLLBACK; 45fb98dac0Sdrh} {1 i I 2 ii {} 3 iii II 4 four FOUR} 46fb98dac0Sdrh 47fb98dac0Sdrhdo_execsql_test 120 { 48fb98dac0Sdrh BEGIN; 49fb98dac0Sdrh UPDATE t5 SET b=y, c=v FROM m2 RIGHT JOIN m1 ON (x=u) WHERE x=a; 50fb98dac0Sdrh SELECT * FROM t5 ORDER BY a; 51fb98dac0Sdrh ROLLBACK; 52fb98dac0Sdrh} {1 i I 2 ii {} 3 iii II 4 four FOUR} 53fb98dac0Sdrh 54fb98dac0Sdrh 55*26c4df0fSdrhreset_db 56*26c4df0fSdrhdb null - 57*26c4df0fSdrhdo_execsql_test 200 { 58*26c4df0fSdrh CREATE TABLE t1(a INT PRIMARY KEY, b INT, c INT); 59*26c4df0fSdrh INSERT INTO t1(a) VALUES(1),(2),(8),(19); 60*26c4df0fSdrh CREATE TABLE c1(x INTEGER PRIMARY KEY, b INT); 61*26c4df0fSdrh INSERT INTO c1(x,b) VALUES(1,1),(8,8),(17,17),(NULL,NULL); 62*26c4df0fSdrh CREATE TABLE c2(x INT,c INT); 63*26c4df0fSdrh INSERT INTO c2(x,c) VALUES(2,2),(8,8),(NULL,NULL); 64*26c4df0fSdrh CREATE TABLE dual(dummy TEXT); 65*26c4df0fSdrh INSERT INTO dual VALUES('X'); 66*26c4df0fSdrh} {} 67*26c4df0fSdrhdo_execsql_test 210 { 68*26c4df0fSdrh BEGIN; 69*26c4df0fSdrh SELECT * FROM t1 ORDER BY a; 70*26c4df0fSdrh UPDATE t1 SET b=c1.b, c=c2.c 71*26c4df0fSdrh FROM dual, c1 NATURAL RIGHT JOIN c2 72*26c4df0fSdrh WHERE x=a; 73*26c4df0fSdrh SELECT * FROM t1 ORDER BY a; 74*26c4df0fSdrh ROLLBACK; 75*26c4df0fSdrh} { 76*26c4df0fSdrh 1 - - 77*26c4df0fSdrh 2 - - 78*26c4df0fSdrh 8 - - 79*26c4df0fSdrh 19 - - 80*26c4df0fSdrh 1 - - 81*26c4df0fSdrh 2 - 2 82*26c4df0fSdrh 8 8 8 83*26c4df0fSdrh 19 - - 84*26c4df0fSdrh} 85*26c4df0fSdrhdo_execsql_test 300 { 86*26c4df0fSdrh CREATE TABLE t2(x); 87*26c4df0fSdrh CREATE TRIGGER AFTER INSERT ON t2 BEGIN 88*26c4df0fSdrh UPDATE t1 SET b=c1.b, c=c2.c 89*26c4df0fSdrh FROM dual, c1 NATURAL RIGHT JOIN c2 90*26c4df0fSdrh WHERE x=a; 91*26c4df0fSdrh END; 92*26c4df0fSdrh} {} 93*26c4df0fSdrhdo_execsql_test 310 { 94*26c4df0fSdrh BEGIN; 95*26c4df0fSdrh SELECT * FROM t1 ORDER BY a; 96*26c4df0fSdrh INSERT INTO t2(x) VALUES(1); 97*26c4df0fSdrh SELECT * FROM t1 ORDER BY a; 98*26c4df0fSdrh ROLLBACK; 99*26c4df0fSdrh} { 100*26c4df0fSdrh 1 - - 101*26c4df0fSdrh 2 - - 102*26c4df0fSdrh 8 - - 103*26c4df0fSdrh 19 - - 104*26c4df0fSdrh 1 - - 105*26c4df0fSdrh 2 - 2 106*26c4df0fSdrh 8 8 8 107*26c4df0fSdrh 19 - - 108*26c4df0fSdrh} 109*26c4df0fSdrh 110*26c4df0fSdrh# 2022-05-26 dbsqlfuzz crash-9401d6ba699f1257d352a657de236286bf2b14da 111*26c4df0fSdrh# 112*26c4df0fSdrhreset_db 113*26c4df0fSdrhdb null - 114*26c4df0fSdrhdo_execsql_test 400 { 115*26c4df0fSdrh CREATE TABLE t2(x,y,z PRIMARY KEY) WITHOUT ROWID; 116*26c4df0fSdrh INSERT INTO t2 VALUES(89,-89,6); 117*26c4df0fSdrh CREATE TABLE t1(a INT,b TEXT,c TEXT,d REAL) STRICT; 118*26c4df0fSdrh INSERT INTO t1 VALUES(1,'xyz','def',4.5); 119*26c4df0fSdrh CREATE TRIGGER t1tr BEFORE UPDATE ON t1 BEGIN 120*26c4df0fSdrh INSERT INTO t1(a,b) VALUES(1000,'uvw'); 121*26c4df0fSdrh UPDATE t1 SET b=NULL FROM (SELECT CAST(a AS varchar) FROM t1 ORDER BY b) NATURAL LEFT FULL JOIN t1 AS text; 122*26c4df0fSdrh END; 123*26c4df0fSdrh UPDATE t1 SET b=b|100; 124*26c4df0fSdrh SELECT * FROM t1 ORDER BY a; 125*26c4df0fSdrh} { 126*26c4df0fSdrh 1 100 def 4.5 127*26c4df0fSdrh 1000 - - - 128*26c4df0fSdrh} 129*26c4df0fSdrh 130fb98dac0Sdrhfinish_test 131