xref: /sqlite-3.40.0/test/upfrom4.test (revision 26c4df0f)
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