📄 update.test
字号:
} {8 88 8 256 8 888}# Repeat the previous sequence of tests with multiple# indices#do_test update-7.0 { execsql {CREATE INDEX idx2 ON test1(f2)} execsql {CREATE INDEX idx3 ON test1(f1,f2)} execsql {SELECT * FROM test1 ORDER BY f1,f2}} {6 64 7 128 8 88 8 256 8 888 9 512 10 1024 77 128 777 128}do_test update-7.1 { execsql {UPDATE test1 SET f2=f2+1 WHERE f1==8} execsql {SELECT * FROM test1 ORDER BY f1,f2}} {6 64 7 128 8 89 8 257 8 889 9 512 10 1024 77 128 777 128}do_test update-7.1.1 { execsql {SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2}} {8 89 8 257 8 889}do_test update-7.1.2 { execsql {SELECT * FROM test1 WHERE f2==89 ORDER BY f1,f2}} {8 89}do_test update-7.1.3 { execsql {SELECT * FROM test1 WHERE f1==88 ORDER BY f1,f2}} {}do_test update-7.2 { execsql {UPDATE test1 SET f2=f2-1 WHERE f1==8 and f2>800} execsql {SELECT * FROM test1 ORDER BY f1,f2}} {6 64 7 128 8 89 8 257 8 888 9 512 10 1024 77 128 777 128}do_test update-7.3 { # explain {UPDATE test1 SET f2=f2-1 WHERE f1==8 and F2<300} execsql {UPDATE test1 SET f2=f2-1 WHERE f1==8 and f2<800} execsql {SELECT * FROM test1 ORDER BY f1,f2}} {6 64 7 128 8 88 8 256 8 888 9 512 10 1024 77 128 777 128}do_test update-7.3.1 { execsql {SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2}} {8 88 8 256 8 888}do_test update-7.3.2 { execsql {SELECT * FROM test1 WHERE f2==89 ORDER BY f1,f2}} {}do_test update-7.3.3 { execsql {SELECT * FROM test1 WHERE f2==88 ORDER BY f1,f2}} {8 88}do_test update-7.4 { execsql {UPDATE test1 SET f1=f1+1 WHERE f2==128} execsql {SELECT * FROM test1 ORDER BY f1,f2}} {6 64 8 88 8 128 8 256 8 888 9 512 10 1024 78 128 778 128}do_test update-7.4.1 { execsql {SELECT * FROM test1 WHERE f1==78 ORDER BY f1,f2}} {78 128}do_test update-7.4.2 { execsql {SELECT * FROM test1 WHERE f1==778 ORDER BY f1,f2}} {778 128}do_test update-7.4.3 { execsql {SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2}} {8 88 8 128 8 256 8 888}do_test update-7.5 { execsql {UPDATE test1 SET f1=f1-1 WHERE f1>100 and f2==128} execsql {SELECT * FROM test1 ORDER BY f1,f2}} {6 64 8 88 8 128 8 256 8 888 9 512 10 1024 78 128 777 128}do_test update-7.5.1 { execsql {SELECT * FROM test1 WHERE f1==78 ORDER BY f1,f2}} {78 128}do_test update-7.5.2 { execsql {SELECT * FROM test1 WHERE f1==778 ORDER BY f1,f2}} {}do_test update-7.5.3 { execsql {SELECT * FROM test1 WHERE f1==777 ORDER BY f1,f2}} {777 128}do_test update-7.5.4 { execsql {SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2}} {8 88 8 128 8 256 8 888}do_test update-7.6 { execsql {UPDATE test1 SET f1=f1-1 WHERE f1<=100 and f2==128} execsql {SELECT * FROM test1 ORDER BY f1,f2}} {6 64 7 128 8 88 8 256 8 888 9 512 10 1024 77 128 777 128}do_test update-7.6.1 { execsql {SELECT * FROM test1 WHERE f1==77 ORDER BY f1,f2}} {77 128}do_test update-7.6.2 { execsql {SELECT * FROM test1 WHERE f1==778 ORDER BY f1,f2}} {}do_test update-7.6.3 { execsql {SELECT * FROM test1 WHERE f1==777 ORDER BY f1,f2}} {777 128}do_test update-7.6.4 { execsql {SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2}} {8 88 8 256 8 888}# Error messages#do_test update-9.1 { set v [catch {execsql { UPDATE test1 SET x=11 WHERE f1=1025 }} msg] lappend v $msg} {1 {no such column: x}}do_test update-9.2 { set v [catch {execsql { UPDATE test1 SET f1=x(11) WHERE f1=1025 }} msg] lappend v $msg} {1 {no such function: x}}do_test update-9.3 { set v [catch {execsql { UPDATE test1 SET f1=11 WHERE x=1025 }} msg] lappend v $msg} {1 {no such column: x}}do_test update-9.4 { set v [catch {execsql { UPDATE test1 SET f1=11 WHERE x(f1)=1025 }} msg] lappend v $msg} {1 {no such function: x}}# Try doing updates on a unique column where the value does not# really change.#do_test update-10.1 { execsql { DROP TABLE test1; CREATE TABLE t1( a integer primary key, b UNIQUE, c, d, e, f, UNIQUE(c,d) ); INSERT INTO t1 VALUES(1,2,3,4,5,6); INSERT INTO t1 VALUES(2,3,4,4,6,7); SELECT * FROM t1 }} {1 2 3 4 5 6 2 3 4 4 6 7}do_test update-10.2 { catchsql { UPDATE t1 SET a=1, e=9 WHERE f=6; SELECT * FROM t1; }} {0 {1 2 3 4 9 6 2 3 4 4 6 7}}do_test update-10.3 { catchsql { UPDATE t1 SET a=1, e=10 WHERE f=7; SELECT * FROM t1; }} {1 {PRIMARY KEY must be unique}}do_test update-10.4 { catchsql { SELECT * FROM t1; }} {0 {1 2 3 4 9 6 2 3 4 4 6 7}}do_test update-10.5 { catchsql { UPDATE t1 SET b=2, e=11 WHERE f=6; SELECT * FROM t1; }} {0 {1 2 3 4 11 6 2 3 4 4 6 7}}do_test update-10.6 { catchsql { UPDATE t1 SET b=2, e=12 WHERE f=7; SELECT * FROM t1; }} {1 {column b is not unique}}do_test update-10.7 { catchsql { SELECT * FROM t1; }} {0 {1 2 3 4 11 6 2 3 4 4 6 7}}do_test update-10.8 { catchsql { UPDATE t1 SET c=3, d=4, e=13 WHERE f=6; SELECT * FROM t1; }} {0 {1 2 3 4 13 6 2 3 4 4 6 7}}do_test update-10.9 { catchsql { UPDATE t1 SET c=3, d=4, e=14 WHERE f=7; SELECT * FROM t1; }} {1 {columns c, d are not unique}}do_test update-10.10 { catchsql { SELECT * FROM t1; }} {0 {1 2 3 4 13 6 2 3 4 4 6 7}}# Make sure we can handle a subquery in the where clause.#ifcapable subquery { do_test update-11.1 { execsql { UPDATE t1 SET e=e+1 WHERE b IN (SELECT b FROM t1); SELECT b,e FROM t1; } } {2 14 3 7} do_test update-11.2 { execsql { UPDATE t1 SET e=e+1 WHERE a IN (SELECT a FROM t1); SELECT a,e FROM t1; } } {1 15 2 8}}integrity_check update-12.1# Ticket 602. Updates should occur in the same order as the records# were discovered in the WHERE clause.#do_test update-13.1 { execsql { BEGIN; CREATE TABLE t2(a); INSERT INTO t2 VALUES(1); INSERT INTO t2 VALUES(2); INSERT INTO t2 SELECT a+2 FROM t2; INSERT INTO t2 SELECT a+4 FROM t2; INSERT INTO t2 SELECT a+8 FROM t2; INSERT INTO t2 SELECT a+16 FROM t2; INSERT INTO t2 SELECT a+32 FROM t2; INSERT INTO t2 SELECT a+64 FROM t2; INSERT INTO t2 SELECT a+128 FROM t2; INSERT INTO t2 SELECT a+256 FROM t2; INSERT INTO t2 SELECT a+512 FROM t2; INSERT INTO t2 SELECT a+1024 FROM t2; COMMIT; SELECT count(*) FROM t2; }} {2048}do_test update-13.2 { execsql { SELECT count(*) FROM t2 WHERE a=rowid; }} {2048}do_test update-13.3 { execsql { UPDATE t2 SET rowid=rowid-1; SELECT count(*) FROM t2 WHERE a=rowid+1; }} {2048}do_test update-13.3 { execsql { UPDATE t2 SET rowid=rowid+10000; UPDATE t2 SET rowid=rowid-9999; SELECT count(*) FROM t2 WHERE a=rowid; }} {2048}do_test update-13.4 { execsql { BEGIN; INSERT INTO t2 SELECT a+2048 FROM t2; INSERT INTO t2 SELECT a+4096 FROM t2; INSERT INTO t2 SELECT a+8192 FROM t2; SELECT count(*) FROM t2 WHERE a=rowid; COMMIT; }} 16384do_test update-13.5 { execsql { UPDATE t2 SET rowid=rowid-1; SELECT count(*) FROM t2 WHERE a=rowid+1; }} 16384integrity_check update-13.6ifcapable {trigger} {# Test for proper detection of malformed WHEN clauses on UPDATE triggers.#do_test update-14.1 { execsql { CREATE TABLE t3(a,b,c); CREATE TRIGGER t3r1 BEFORE UPDATE on t3 WHEN nosuchcol BEGIN SELECT 'illegal WHEN clause'; END; }} {}do_test update-14.2 { catchsql { UPDATE t3 SET a=1; }} {1 {no such column: nosuchcol}}do_test update-14.3 { execsql { CREATE TABLE t4(a,b,c); CREATE TRIGGER t4r1 AFTER UPDATE on t4 WHEN nosuchcol BEGIN SELECT 'illegal WHEN clause'; END; }} {}do_test update-14.4 { catchsql { UPDATE t4 SET a=1; }} {1 {no such column: nosuchcol}}} ;# ifcapable {trigger}finish_test
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -