1# 2020 April 22 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 14#################################################### 15# DO NOT EDIT! THIS FILE IS AUTOMATICALLY GENERATED! 16#################################################### 17 18set testdir [file dirname $argv0] 19source $testdir/tester.tcl 20set testprefix upfrom1 21 22do_execsql_test 1.1.0 { 23 DROP TABLE IF EXISTS t2; 24 CREATE TABLE t2(a INTEGER PRIMARY KEY, b INTEGER, c INTEGER) WITHOUT ROWID; 25 INSERT INTO t2 VALUES(1, 2, 3); 26 INSERT INTO t2 VALUES(4, 5, 6); 27 INSERT INTO t2 VALUES(7, 8, 9); 28 29 DROP TABLE IF EXISTS chng; 30 CREATE TABLE chng(a INTEGER, b INTEGER, c INTEGER); 31 INSERT INTO chng VALUES(1, 100, 1000); 32 INSERT INTO chng VALUES(7, 700, 7000); 33} {} 34 35do_execsql_test 1.1.1 { 36 SELECT * FROM t2; 37} {1 2 3 4 5 6 7 8 9} 38 39do_execsql_test 1.1.2 { 40 UPDATE t2 SET b = chng.b, c = chng.c FROM chng WHERE chng.a = t2.a; 41 SELECT * FROM t2 ORDER BY a; 42} {1 100 1000 4 5 6 7 700 7000} 43 44do_execsql_test 1.1.3 { 45 DELETE FROM t2; 46 INSERT INTO t2 VALUES(1, 2, 3); 47 INSERT INTO t2 VALUES(4, 5, 6); 48 INSERT INTO t2 VALUES(7, 8, 9); 49} {} 50 51do_execsql_test 1.1.4 { 52 UPDATE t2 SET (b, c) = (SELECT b, c FROM chng WHERE a=t2.a) 53 WHERE a IN (SELECT a FROM chng); 54 SELECT * FROM t2 ORDER BY a; 55} {1 100 1000 4 5 6 7 700 7000} 56 57do_execsql_test 1.1.5 { 58 DROP TABLE IF EXISTS t3; 59 CREATE TABLE t3(a INTEGER PRIMARY KEY, b INTEGER, c TEXT) WITHOUT ROWID; 60 INSERT INTO t3 VALUES(1, 1, 'one'); 61 INSERT INTO t3 VALUES(2, 2, 'two'); 62 INSERT INTO t3 VALUES(3, 3, 'three'); 63 64 DROP TABLE IF EXISTS t4; 65 CREATE TABLE t4(x TEXT); 66 INSERT INTO t4 VALUES('five'); 67 68 SELECT * FROM t3 ORDER BY a; 69} {1 1 one 2 2 two 3 3 three} 70 71do_execsql_test 1.1.6 { 72 UPDATE t3 SET c=x FROM t4; 73 SELECT * FROM t3 ORDER BY a; 74} {1 1 five 2 2 five 3 3 five} 75 76do_execsql_test 1.2.0 { 77 DROP TABLE IF EXISTS t2; 78 CREATE TABLE t2(a INTEGER PRIMARY KEY, b INTEGER, c INTEGER) ; 79 INSERT INTO t2 VALUES(1, 2, 3); 80 INSERT INTO t2 VALUES(4, 5, 6); 81 INSERT INTO t2 VALUES(7, 8, 9); 82 83 DROP TABLE IF EXISTS chng; 84 CREATE TABLE chng(a INTEGER, b INTEGER, c INTEGER); 85 INSERT INTO chng VALUES(1, 100, 1000); 86 INSERT INTO chng VALUES(7, 700, 7000); 87} {} 88 89do_execsql_test 1.2.1 { 90 SELECT * FROM t2; 91} {1 2 3 4 5 6 7 8 9} 92 93do_execsql_test 1.2.2 { 94 UPDATE t2 SET b = chng.b, c = chng.c FROM chng WHERE chng.a = t2.a; 95 SELECT * FROM t2 ORDER BY a; 96} {1 100 1000 4 5 6 7 700 7000} 97 98do_execsql_test 1.2.3 { 99 DELETE FROM t2; 100 INSERT INTO t2 VALUES(1, 2, 3); 101 INSERT INTO t2 VALUES(4, 5, 6); 102 INSERT INTO t2 VALUES(7, 8, 9); 103} {} 104 105do_execsql_test 1.2.4 { 106 UPDATE t2 SET (b, c) = (SELECT b, c FROM chng WHERE a=t2.a) 107 WHERE a IN (SELECT a FROM chng); 108 SELECT * FROM t2 ORDER BY a; 109} {1 100 1000 4 5 6 7 700 7000} 110 111do_execsql_test 1.2.5 { 112 DROP TABLE IF EXISTS t3; 113 CREATE TABLE t3(a INTEGER PRIMARY KEY, b INTEGER, c TEXT) ; 114 INSERT INTO t3 VALUES(1, 1, 'one'); 115 INSERT INTO t3 VALUES(2, 2, 'two'); 116 INSERT INTO t3 VALUES(3, 3, 'three'); 117 118 DROP TABLE IF EXISTS t4; 119 CREATE TABLE t4(x TEXT); 120 INSERT INTO t4 VALUES('five'); 121 122 SELECT * FROM t3 ORDER BY a; 123} {1 1 one 2 2 two 3 3 three} 124 125do_execsql_test 1.2.6 { 126 UPDATE t3 SET c=x FROM t4; 127 SELECT * FROM t3 ORDER BY a; 128} {1 1 five 2 2 five 3 3 five} 129 130do_execsql_test 2.1 { 131 DROP TABLE IF EXISTS t5; 132 DROP TABLE IF EXISTS m1; 133 DROP TABLE IF EXISTS m2; 134 CREATE TABLE t5(a INTEGER PRIMARY KEY, b TEXT, c TEXT); 135 CREATE TABLE m1(x INTEGER PRIMARY KEY, y TEXT); 136 CREATE TABLE m2(u INTEGER PRIMARY KEY, v TEXT); 137 138 INSERT INTO t5 VALUES(1, 'one', 'ONE'); 139 INSERT INTO t5 VALUES(2, 'two', 'TWO'); 140 INSERT INTO t5 VALUES(3, 'three', 'THREE'); 141 INSERT INTO t5 VALUES(4, 'four', 'FOUR'); 142 143 INSERT INTO m1 VALUES(1, 'i'); 144 INSERT INTO m1 VALUES(2, 'ii'); 145 INSERT INTO m1 VALUES(3, 'iii'); 146 147 INSERT INTO m2 VALUES(1, 'I'); 148 INSERT INTO m2 VALUES(3, 'II'); 149 INSERT INTO m2 VALUES(4, 'III'); 150} {} 151 152do_execsql_test 2.2 { 153 UPDATE t5 SET b=y, c=v FROM m1 LEFT JOIN m2 ON (x=u) WHERE x=a; 154 SELECT * FROM t5 ORDER BY a; 155} {1 i I 2 ii {} 3 iii II 4 four FOUR} 156 157# PG says ERROR: table name "t5" specified more than once 158do_test 2.3.1 { catch { execsql { 159 UPDATE t5 SET b=1 FROM t5; 160} } } 1 161 162# PG says ERROR: table name "apples" specified more than once 163do_test 2.3.2 { catch { execsql { 164 UPDATE t5 AS apples SET b=1 FROM t5 AS apples; 165} } } 1 166 167# Problem found by OSSFuzz on 2020-07-20 168# https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=24282 169# 170reset_db 171do_execsql_test 3.1 { 172 CREATE TABLE t0(a); 173 CREATE TABLE t1(b); 174 UPDATE t1 SET b=sum(a) FROM t0; 175 SELECT * FROM t0, t1; 176} {} 177 178# Problem described by forum post https://sqlite.org/forum/forumpost/a274248080 179# 180reset_db 181do_execsql_test 4.1 { 182 CREATE TABLE t1(x INT); INSERT INTO t1 VALUES(1); 183 CREATE TABLE t2(y INT); INSERT INTO t2 VALUES(2); 184 WITH t1 AS (SELECT y+100 AS x FROM t2) 185 UPDATE t1 SET x=(SELECT x FROM t1); 186 SELECT x, y FROM t1, t2; 187} {102 2} 188do_execsql_test 4.2 { 189 WITH t1 AS (SELECT y+100 AS x FROM t2) 190 UPDATE t1 SET x=x+y FROM t2; 191 SELECT x, y FROM t1, t2; 192} {104 2} 193 194# 2021-05-20 195# Forum https://sqlite.org/forum/forumpost/339f487de5 by Yu Liang 196# A bad assert() 197# 198reset_db 199do_execsql_test 5.1 { 200 CREATE TABLE t1(a); 201 INSERT INTO t1(a) VALUES(5); 202 CREATE VIEW t2 AS SELECT a FROM t1 UNION ALL SELECT a FROM t1; 203 CREATE TABLE t3(b,c); 204 INSERT INTO t3(b,c) VALUES(1,2); 205 UPDATE t3 SET (c,b) = (SELECT 3,4) FROM t1, t2; 206 SELECT * FROM t3; 207} {4 3} 208 209 210finish_test 211