12cc00423Sdan# 2018-04-17 22cc00423Sdan# 32cc00423Sdan# The author disclaims copyright to this source code. In place of 42cc00423Sdan# a legal notice, here is a blessing: 52cc00423Sdan# 62cc00423Sdan# May you do good and not evil. 72cc00423Sdan# May you find forgiveness for yourself and forgive others. 82cc00423Sdan# May you share freely, never taking more than you give. 92cc00423Sdan# 102cc00423Sdan#*********************************************************************** 112cc00423Sdan# 122cc00423Sdan# Test cases for UPSERT 132cc00423Sdan 142cc00423Sdanset testdir [file dirname $argv0] 152cc00423Sdansource $testdir/tester.tcl 16370c3262Sdanset testprefix upsert4 172cc00423Sdan 182cc00423Sdanforeach {tn sql} { 192cc00423Sdan 1 { CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c UNIQUE) } 202cc00423Sdan 2 { CREATE TABLE t1(a INT PRIMARY KEY, b, c UNIQUE) } 212cc00423Sdan 3 { CREATE TABLE t1(a INT PRIMARY KEY, b, c UNIQUE) WITHOUT ROWID} 222cc00423Sdan} { 232cc00423Sdan reset_db 242cc00423Sdan execsql $sql 252cc00423Sdan 262cc00423Sdan do_execsql_test 1.$tn.0 { 272cc00423Sdan INSERT INTO t1 VALUES(1, NULL, 'one'); 282cc00423Sdan INSERT INTO t1 VALUES(2, NULL, 'two'); 292cc00423Sdan INSERT INTO t1 VALUES(3, NULL, 'three'); 302cc00423Sdan } 312cc00423Sdan 322cc00423Sdan do_execsql_test 1.$tn.1 { 332cc00423Sdan INSERT INTO t1 VALUES(1, NULL, 'xyz') ON CONFLICT DO NOTHING; 342cc00423Sdan SELECT * FROM t1; 352cc00423Sdan } { 362cc00423Sdan 1 {} one 2 {} two 3 {} three 372cc00423Sdan } 382cc00423Sdan 392cc00423Sdan do_execsql_test 1.$tn.2 { 402cc00423Sdan INSERT INTO t1 VALUES(4, NULL, 'two') ON CONFLICT DO NOTHING; 412cc00423Sdan SELECT * FROM t1; 422cc00423Sdan } { 432cc00423Sdan 1 {} one 2 {} two 3 {} three 442cc00423Sdan } 452cc00423Sdan 462cc00423Sdan do_execsql_test 1.$tn.3 { 472cc00423Sdan INSERT INTO t1 VALUES(4, NULL, 'two') ON CONFLICT (c) DO UPDATE SET b = 1; 482cc00423Sdan SELECT * FROM t1; 492cc00423Sdan } { 502cc00423Sdan 1 {} one 2 1 two 3 {} three 512cc00423Sdan } 522cc00423Sdan 532cc00423Sdan do_execsql_test 1.$tn.4 { 542cc00423Sdan INSERT INTO t1 VALUES(2, NULL, 'zero') ON CONFLICT (a) DO UPDATE SET b=2; 552cc00423Sdan SELECT * FROM t1; 562cc00423Sdan } {1 {} one 2 2 two 3 {} three} 572cc00423Sdan 582cc00423Sdan do_catchsql_test 1.$tn.5 { 592cc00423Sdan INSERT INTO t1 VALUES(2, NULL, 'zero') ON CONFLICT (a) 602cc00423Sdan DO UPDATE SET c = 'one'; 612cc00423Sdan } {1 {UNIQUE constraint failed: t1.c}} 622cc00423Sdan 632cc00423Sdan do_execsql_test 1.$tn.6 { 642cc00423Sdan SELECT * FROM t1; 652cc00423Sdan } {1 {} one 2 2 two 3 {} three} 66370c3262Sdan 67370c3262Sdan do_execsql_test 1.$tn.7 { 68370c3262Sdan INSERT INTO t1 VALUES(2, NULL, 'zero') ON CONFLICT (a) 69370c3262Sdan DO UPDATE SET (b, c) = (SELECT 'x', 'y'); 70370c3262Sdan SELECT * FROM t1; 71370c3262Sdan } {1 {} one 2 x y 3 {} three} 72370c3262Sdan 73370c3262Sdan do_execsql_test 1.$tn.8 { 74370c3262Sdan INSERT INTO t1 VALUES(1, NULL, NULL) ON CONFLICT (a) 75370c3262Sdan DO UPDATE SET (c, a) = ('four', 4); 76370c3262Sdan SELECT * FROM t1 ORDER BY 1; 77370c3262Sdan } {2 x y 3 {} three 4 {} four} 782cc00423Sdan} 792cc00423Sdan 80370c3262Sdan#------------------------------------------------------------------------- 81370c3262Sdan# Test target analysis. 82370c3262Sdan# 83370c3262Sdanset rtbl(0) {0 {}} 84370c3262Sdanset rtbl(1) {/1 .*failed.*/} 85370c3262Sdanset rtbl(2) {1 {ON CONFLICT clause does not match any PRIMARY KEY or UNIQUE constraint}} 86370c3262Sdan 87370c3262Sdanforeach {tn sql} { 88370c3262Sdan 1 { 89370c3262Sdan CREATE TABLE xyz(a INTEGER PRIMARY KEY, b, c, d); 90370c3262Sdan CREATE UNIQUE INDEX xyz1 ON xyz(d, c, b COLLATE nocase); 91370c3262Sdan } 92370c3262Sdan 93370c3262Sdan 2 { 94370c3262Sdan CREATE TABLE xyz(a INT PRIMARY KEY, b, c, d); 95370c3262Sdan CREATE UNIQUE INDEX xyz1 ON xyz(d, c, b COLLATE nocase); 96370c3262Sdan } 97370c3262Sdan 98370c3262Sdan 3 { 99370c3262Sdan CREATE TABLE xyz(a INT PRIMARY KEY, b, c, d) WITHOUT ROWID; 100370c3262Sdan CREATE UNIQUE INDEX xyz1 ON xyz(d, c, b COLLATE nocase); 101370c3262Sdan } 102370c3262Sdan} { 103370c3262Sdan reset_db 104370c3262Sdan execsql $sql 105370c3262Sdan do_execsql_test 2.$tn.1 { 106370c3262Sdan INSERT INTO xyz VALUES(10, 1, 1, 'one'); 107370c3262Sdan } 108370c3262Sdan 109370c3262Sdan 110370c3262Sdan foreach {tn2 oc res} { 111370c3262Sdan 1 "ON CONFLICT (b COLLATE nocase, c, d) DO NOTHING" 0 112370c3262Sdan 2 "ON CONFLICT (b, c, d) DO NOTHING" 0 113370c3262Sdan 3 "ON CONFLICT (b, c COLLATE nocase, d) DO NOTHING" 2 114370c3262Sdan 4 "ON CONFLICT (a) DO NOTHING" 1 115370c3262Sdan 5 "ON CONFLICT DO NOTHING" 0 116370c3262Sdan 6 "ON CONFLICT (b, c, d) WHERE a!=0 DO NOTHING" 0 117370c3262Sdan 7 "ON CONFLICT (d, c, c) WHERE a!=0 DO NOTHING" 2 11852b3e340Sdan 8 "ON CONFLICT (b COLLATE nocase, c COLLATE nocase, d) DO NOTHING" 2 119a46838cbSdan 9 "ON CONFLICT (b, c, d) WHERE b==45 DO NOTHING" 0 120370c3262Sdan } { 121370c3262Sdan 122370c3262Sdan do_catchsql_test 2.$tn.2.$tn2 " 123370c3262Sdan INSERT INTO xyz VALUES(11, 1, 1, 'one') $oc 124370c3262Sdan " $rtbl($res) 125370c3262Sdan } 126370c3262Sdan 127370c3262Sdan do_execsql_test 2.$tn.3 { 128370c3262Sdan SELECT * FROM xyz; 129370c3262Sdan } {10 1 1 one} 130370c3262Sdan} 131370c3262Sdan 132370c3262Sdanforeach {tn sql} { 133370c3262Sdan 1 { 134370c3262Sdan CREATE TABLE abc(a INTEGER PRIMARY KEY, x, y); 135370c3262Sdan CREATE UNIQUE INDEX abc1 ON abc(('x' || x) COLLATE nocase); 136370c3262Sdan } 137370c3262Sdan 2 { 138370c3262Sdan CREATE TABLE abc(a INT PRIMARY KEY, x, y); 139370c3262Sdan CREATE UNIQUE INDEX abc1 ON abc(('x' || x) COLLATE nocase); 140370c3262Sdan } 141370c3262Sdan 3 { 142370c3262Sdan CREATE TABLE abc(a INT PRIMARY KEY, x, y) WITHOUT ROWID; 143370c3262Sdan CREATE UNIQUE INDEX abc1 ON abc(('x' || x) COLLATE nocase); 144370c3262Sdan } 145370c3262Sdan} { 146370c3262Sdan reset_db 147370c3262Sdan execsql $sql 148a46838cbSdan do_execsql_test 3.$tn.1 { 149370c3262Sdan INSERT INTO abc VALUES(1, 'one', 'two'); 150370c3262Sdan } 151370c3262Sdan 152370c3262Sdan foreach {tn2 oc res} { 153370c3262Sdan 1 "ON CONFLICT DO NOTHING" 0 154370c3262Sdan 2 "ON CONFLICT ('x' || x) DO NOTHING" 0 155370c3262Sdan 3 "ON CONFLICT (('x' || x) COLLATE nocase) DO NOTHING" 0 156370c3262Sdan 4 "ON CONFLICT (('x' || x) COLLATE binary) DO NOTHING" 2 157370c3262Sdan 5 "ON CONFLICT (x || 'x') DO NOTHING" 2 158370c3262Sdan 6 "ON CONFLICT ((('x' || x))) DO NOTHING" 0 159370c3262Sdan } { 160a46838cbSdan do_catchsql_test 3.$tn.2.$tn2 " 161370c3262Sdan INSERT INTO abc VALUES(2, 'one', NULL) $oc; 162370c3262Sdan " $rtbl($res) 163370c3262Sdan } 164370c3262Sdan 165a46838cbSdan do_execsql_test 3.$tn.3 { 166370c3262Sdan SELECT * FROM abc 167370c3262Sdan } {1 one two} 168370c3262Sdan} 169370c3262Sdan 170a46838cbSdanforeach {tn sql} { 171a46838cbSdan 1 { 172a46838cbSdan CREATE TABLE abc(a INTEGER PRIMARY KEY, x, y); 173a46838cbSdan CREATE UNIQUE INDEX abc1 ON abc(x) WHERE y>0; 174a46838cbSdan CREATE UNIQUE INDEX abc2 ON abc(y) WHERE x='xyz' COLLATE nocase; 175a46838cbSdan } 176a46838cbSdan} { 177a46838cbSdan reset_db 178a46838cbSdan execsql $sql 179a46838cbSdan do_execsql_test 4.$tn.1 { 180a46838cbSdan INSERT INTO abc VALUES(1, 'one', 1); 181a46838cbSdan INSERT INTO abc VALUES(2, 'two', 2); 182a46838cbSdan INSERT INTO abc VALUES(3, 'xyz', 3); 183a46838cbSdan INSERT INTO abc VALUES(4, 'XYZ', 4); 184a46838cbSdan } 185a46838cbSdan 186a46838cbSdan foreach {tn2 oc res} { 187a46838cbSdan 1 "ON CONFLICT DO NOTHING" 0 188a46838cbSdan 2 "ON CONFLICT(x) WHERE y>0 DO NOTHING" 0 189a46838cbSdan 3 "ON CONFLICT(x) DO NOTHING" 2 190a46838cbSdan 4 "ON CONFLICT(x) WHERE y>=0 DO NOTHING" 2 191a46838cbSdan 5 "ON CONFLICT(y) WHERE x='xyz' COLLATE nocase DO NOTHING" 1 192a46838cbSdan } { 193a46838cbSdan do_catchsql_test 4.$tn.2.$tn2 " 194a46838cbSdan INSERT INTO abc VALUES(5, 'one', 10) $oc 195a46838cbSdan " $rtbl($res) 196a46838cbSdan } 197a46838cbSdan 198a46838cbSdan do_execsql_test 4.$tn.3 { 199a46838cbSdan SELECT * FROM abc 200a46838cbSdan } {1 one 1 2 two 2 3 xyz 3 4 XYZ 4} 201a46838cbSdan 202a46838cbSdan foreach {tn2 oc res} { 203a46838cbSdan 1 "ON CONFLICT DO NOTHING" 0 204a46838cbSdan 2 "ON CONFLICT(y) WHERE x='xyz' COLLATE nocase DO NOTHING" 0 205a46838cbSdan 3 "ON CONFLICT(y) WHERE x='xyz' COLLATE binary DO NOTHING" 2 206a46838cbSdan 4 "ON CONFLICT(x) WHERE y>0 DO NOTHING" 1 207a46838cbSdan } { 208a46838cbSdan do_catchsql_test 4.$tn.2.$tn2 " 209a46838cbSdan INSERT INTO abc VALUES(5, 'xYz', 3) $oc 210a46838cbSdan " $rtbl($res) 211a46838cbSdan } 212a46838cbSdan} 213a46838cbSdan 214a46838cbSdando_catchsql_test 5.0 { 21552b3e340Sdan CREATE TABLE w1(a INT PRIMARY KEY, x, y); 21652b3e340Sdan CREATE UNIQUE INDEX w1expr ON w1(('x' || x)); 21752b3e340Sdan INSERT INTO w1 VALUES(2, 'one', NULL) 21852b3e340Sdan ON CONFLICT (('x' || x) COLLATE nocase) DO NOTHING; 21952b3e340Sdan} {1 {ON CONFLICT clause does not match any PRIMARY KEY or UNIQUE constraint}} 220370c3262Sdan 221a46838cbSdan#------------------------------------------------------------------------- 222224d92c8Sdan# Test that ON CONFLICT constraint processing occurs before any REPLACE 223224d92c8Sdan# constraint processing. 224a46838cbSdan# 225224d92c8Sdanforeach {tn sql} { 226224d92c8Sdan 1 { 227a46838cbSdan CREATE TABLE t1(a INTEGER PRIMARY KEY, b UNIQUE, c); 228224d92c8Sdan } 229224d92c8Sdan 2 { 230224d92c8Sdan CREATE TABLE t1(a INT PRIMARY KEY, b UNIQUE, c); 231224d92c8Sdan } 232224d92c8Sdan 3 { 233224d92c8Sdan CREATE TABLE t1(a INT PRIMARY KEY, b UNIQUE, c) WITHOUT ROWID; 234224d92c8Sdan } 235224d92c8Sdan} { 236224d92c8Sdan reset_db 237224d92c8Sdan execsql $sql 238224d92c8Sdan do_execsql_test 6.1.$tn { 239a46838cbSdan INSERT INTO t1 VALUES(1, 1, 'one'); 240a46838cbSdan INSERT INTO t1 VALUES(2, 2, 'two'); 241a46838cbSdan INSERT OR REPLACE INTO t1 VALUES(1, 2, 'two') ON CONFLICT(b) DO NOTHING; 242a46838cbSdan PRAGMA integrity_check; 243a46838cbSdan } {ok} 244224d92c8Sdan} 245224d92c8Sdan 246224d92c8Sdanforeach {tn sql} { 247224d92c8Sdan 1 { 248224d92c8Sdan CREATE TABLE t1(a INTEGER PRIMARY KEY, b UNIQUE, c UNIQUE); 249224d92c8Sdan } 250224d92c8Sdan} { 251224d92c8Sdan reset_db 252224d92c8Sdan execsql $sql 253224d92c8Sdan 254224d92c8Sdan do_execsql_test 6.2.$tn.1 { 255224d92c8Sdan INSERT INTO t1 VALUES(1, 1, 1); 256224d92c8Sdan INSERT INTO t1 VALUES(2, 2, 2); 257224d92c8Sdan } 258224d92c8Sdan 259224d92c8Sdan do_execsql_test 6.2.$tn.2 { 260224d92c8Sdan INSERT OR REPLACE INTO t1 VALUES(3, 1, 1) ON CONFLICT(b) DO NOTHING; 261224d92c8Sdan SELECT * FROM t1; 262224d92c8Sdan PRAGMA integrity_check; 263224d92c8Sdan } {1 1 1 2 2 2 ok} 264224d92c8Sdan 265224d92c8Sdan do_execsql_test 6.2.$tn.3 { 266224d92c8Sdan INSERT OR REPLACE INTO t1 VALUES(3, 2, 2) ON CONFLICT(c) DO NOTHING; 267224d92c8Sdan SELECT * FROM t1; 268224d92c8Sdan PRAGMA integrity_check; 269224d92c8Sdan } {1 1 1 2 2 2 ok} 270224d92c8Sdan 271224d92c8Sdan do_execsql_test 6.2.$tn.2 { 272224d92c8Sdan INSERT OR REPLACE INTO t1 VALUES(3, 1, 1) ON CONFLICT(b) 273224d92c8Sdan DO UPDATE SET b=b||'x'; 274224d92c8Sdan SELECT * FROM t1; 275224d92c8Sdan PRAGMA integrity_check; 276224d92c8Sdan } {1 1x 1 2 2 2 ok} 277224d92c8Sdan 278224d92c8Sdan do_execsql_test 6.2.$tn.2 { 279224d92c8Sdan INSERT OR REPLACE INTO t1 VALUES(3, 2, 2) ON CONFLICT(c) 280224d92c8Sdan DO UPDATE SET c=c||'x'; 281224d92c8Sdan SELECT * FROM t1; 282224d92c8Sdan PRAGMA integrity_check; 283224d92c8Sdan } {1 1x 1 2 2 2x ok} 284224d92c8Sdan} 285224d92c8Sdan 286224d92c8Sdan#------------------------------------------------------------------------- 287224d92c8Sdan# Test references to "excluded". And using an alias in an INSERT 288224d92c8Sdan# statement. 289224d92c8Sdan# 290224d92c8Sdanforeach {tn sql} { 291224d92c8Sdan 1 { 292224d92c8Sdan CREATE TABLE t1(w, x, y, z, PRIMARY KEY(x, y)); 293224d92c8Sdan CREATE UNIQUE INDEX zz ON t1(z); 294224d92c8Sdan } 295224d92c8Sdan 2 { 296224d92c8Sdan CREATE TABLE t1(w, x, y, z, PRIMARY KEY(x, y)) WITHOUT ROWID; 297224d92c8Sdan CREATE UNIQUE INDEX zz ON t1(z); 298224d92c8Sdan } 299224d92c8Sdan} { 300224d92c8Sdan reset_db 301224d92c8Sdan execsql $sql 302224d92c8Sdan do_execsql_test 7.$tn.0 { 303224d92c8Sdan INSERT INTO t1 VALUES('a', 1, 1, 1); 304224d92c8Sdan INSERT INTO t1 VALUES('b', 2, 2, 2); 305224d92c8Sdan } 306224d92c8Sdan 307224d92c8Sdan do_execsql_test 7.$tn.1 { 308224d92c8Sdan INSERT INTO t1 VALUES('c', 3, 3, 1) ON CONFLICT(z) 309224d92c8Sdan DO UPDATE SET w = excluded.w; 310224d92c8Sdan SELECT * FROM t1; 311224d92c8Sdan } {c 1 1 1 b 2 2 2} 312224d92c8Sdan 313224d92c8Sdan do_execsql_test 7.$tn.2 { 314224d92c8Sdan INSERT INTO t1 VALUES('c', 2, 2, 3) ON CONFLICT(y, x) 315224d92c8Sdan DO UPDATE SET w = w||w; 316224d92c8Sdan SELECT * FROM t1; 317224d92c8Sdan } {c 1 1 1 bb 2 2 2} 318224d92c8Sdan 319224d92c8Sdan do_execsql_test 7.$tn.3 { 320224d92c8Sdan INSERT INTO t1 VALUES('c', 2, 2, 3) ON CONFLICT(y, x) 321224d92c8Sdan DO UPDATE SET w = w||t1.w; 322224d92c8Sdan SELECT * FROM t1; 323224d92c8Sdan } {c 1 1 1 bbbb 2 2 2} 324224d92c8Sdan 325224d92c8Sdan do_execsql_test 7.$tn.4 { 326224d92c8Sdan INSERT INTO t1 AS tbl VALUES('c', 2, 2, 3) ON CONFLICT(y, x) 327224d92c8Sdan DO UPDATE SET w = w||tbl.w; 328224d92c8Sdan SELECT * FROM t1; 329224d92c8Sdan } {c 1 1 1 bbbbbbbb 2 2 2} 330224d92c8Sdan} 331224d92c8Sdan 332224d92c8Sdanforeach {tn sql} { 333224d92c8Sdan 1 { 334*42d18160Sdan CREATE TABLE excluded(w, x INTEGER, 'a b', z, PRIMARY KEY(x, 'a b')); 335224d92c8Sdan CREATE UNIQUE INDEX zz ON excluded(z); 336*42d18160Sdan CREATE INDEX zz2 ON excluded(z); 337224d92c8Sdan } 338224d92c8Sdan 2 { 339224d92c8Sdan CREATE TABLE excluded(w, x, 'a b', z, PRIMARY KEY(x, 'a b')) WITHOUT ROWID; 340224d92c8Sdan CREATE UNIQUE INDEX zz ON excluded(z); 341*42d18160Sdan CREATE INDEX zz2 ON excluded(z); 342224d92c8Sdan } 343224d92c8Sdan} { 344224d92c8Sdan reset_db 345224d92c8Sdan execsql $sql 346224d92c8Sdan do_execsql_test 8.$tn.0 { 347224d92c8Sdan INSERT INTO excluded VALUES('a', 1, 1, 1); 348224d92c8Sdan INSERT INTO excluded VALUES('b', 2, 2, 2); 349224d92c8Sdan } 350224d92c8Sdan 351224d92c8Sdan # Note: An error in Postgres: "table reference "excluded" is ambiguous". 352224d92c8Sdan # 353224d92c8Sdan do_execsql_test 8.$tn.1 { 354224d92c8Sdan INSERT INTO excluded VALUES('hello', 1, 1, NULL) ON CONFLICT(x, "a b") 355224d92c8Sdan DO UPDATE SET w=excluded.w; 356224d92c8Sdan SELECT * FROM excluded; 357224d92c8Sdan } {a 1 1 1 b 2 2 2} 358224d92c8Sdan 359224d92c8Sdan do_execsql_test 8.$tn.2 { 360224d92c8Sdan INSERT INTO excluded AS x1 VALUES('hello', 1, 1, NULL) ON CONFLICT(x, [a b]) 361224d92c8Sdan DO UPDATE SET w=excluded.w; 362224d92c8Sdan SELECT * FROM excluded; 363224d92c8Sdan } {hello 1 1 1 b 2 2 2} 364*42d18160Sdan 365*42d18160Sdan do_execsql_test 8.$tn.3 { 366*42d18160Sdan INSERT INTO excluded AS x1 VALUES('hello', 1, 1, NULL) ON CONFLICT(x, [a b]) 367*42d18160Sdan DO UPDATE SET w=w||w WHERE excluded.w!='hello'; 368*42d18160Sdan SELECT * FROM excluded; 369*42d18160Sdan } {hello 1 1 1 b 2 2 2} 370*42d18160Sdan 371*42d18160Sdan do_execsql_test 8.$tn.4 { 372*42d18160Sdan INSERT INTO excluded AS x1 VALUES('hello', 1, 1, NULL) ON CONFLICT(x, [a b]) 373*42d18160Sdan DO UPDATE SET w=w||w WHERE excluded.x=1; 374*42d18160Sdan SELECT * FROM excluded; 375*42d18160Sdan } {hellohello 1 1 1 b 2 2 2} 376*42d18160Sdan 377*42d18160Sdan do_catchsql_test 8.$tn.5 { 378*42d18160Sdan INSERT INTO excluded AS x1 VALUES('hello', 1, 1, NULL) 379*42d18160Sdan ON CONFLICT(x, [a b]) WHERE y=1 380*42d18160Sdan DO UPDATE SET w=w||w WHERE excluded.x=1; 381*42d18160Sdan } {1 {no such column: y}} 382*42d18160Sdan} 383*42d18160Sdan 384*42d18160Sdan#-------------------------------------------------------------------------- 385*42d18160Sdan# 386*42d18160Sdando_execsql_test 9.0 { 387*42d18160Sdan CREATE TABLE v(x INTEGER); 388*42d18160Sdan CREATE TABLE hist(x INTEGER PRIMARY KEY, cnt INTEGER); 389*42d18160Sdan CREATE TRIGGER vt AFTER INSERT ON v BEGIN 390*42d18160Sdan INSERT INTO hist VALUES(new.x, 1) ON CONFLICT(x) DO 391*42d18160Sdan UPDATE SET cnt=cnt+1; 392*42d18160Sdan END; 393*42d18160Sdan} 394*42d18160Sdan 395*42d18160Sdando_execsql_test 9.1 { 396*42d18160Sdan INSERT INTO v VALUES(1), (4), (1), (5), (5), (8), (9), (1); 397*42d18160Sdan SELECT * FROM hist; 398*42d18160Sdan} { 399*42d18160Sdan 1 3 400*42d18160Sdan 4 1 401*42d18160Sdan 5 2 402*42d18160Sdan 8 1 403*42d18160Sdan 9 1 404224d92c8Sdan} 405224d92c8Sdan 406a46838cbSdan 4072cc00423Sdanfinish_test 408