1# 2001 September 15 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. The 12# focus of this file is testing the UPDATE statement. 13# 14# $Id: update.test,v 1.19 2008/04/10 18:44:36 drh Exp $ 15 16set testdir [file dirname $argv0] 17source $testdir/tester.tcl 18 19# Try to update an non-existent table 20# 21do_test update-1.1 { 22 set v [catch {execsql {UPDATE test1 SET f2=5 WHERE f1<1}} msg] 23 lappend v $msg 24} {1 {no such table: test1}} 25 26# Try to update a read-only table 27# 28do_test update-2.1 { 29 set v [catch \ 30 {execsql {UPDATE sqlite_master SET name='xyz' WHERE name='123'}} msg] 31 lappend v $msg 32} {1 {table sqlite_master may not be modified}} 33 34# Create a table to work with 35# 36do_test update-3.1 { 37 execsql {CREATE TABLE test1(f1 int,f2 int)} 38 for {set i 1} {$i<=10} {incr i} { 39 set sql "INSERT INTO test1 VALUES($i,[expr {1<<$i}])" 40 execsql $sql 41 } 42 execsql {SELECT * FROM test1 ORDER BY f1} 43} {1 2 2 4 3 8 4 16 5 32 6 64 7 128 8 256 9 512 10 1024} 44 45# Unknown column name in an expression 46# 47do_test update-3.2 { 48 set v [catch {execsql {UPDATE test1 SET f1=f3*2 WHERE f2==32}} msg] 49 lappend v $msg 50} {1 {no such column: f3}} 51do_test update-3.3 { 52 set v [catch {execsql {UPDATE test1 SET f1=test2.f1*2 WHERE f2==32}} msg] 53 lappend v $msg 54} {1 {no such column: test2.f1}} 55do_test update-3.4 { 56 set v [catch {execsql {UPDATE test1 SET f3=f1*2 WHERE f2==32}} msg] 57 lappend v $msg 58} {1 {no such column: f3}} 59 60# Actually do some updates 61# 62do_test update-3.5 { 63 execsql {UPDATE test1 SET f2=f2*3} 64} {} 65do_test update-3.5.1 { 66 db changes 67} {10} 68 69# verify that SELECT does not reset the change counter 70do_test update-3.5.2 { 71 db eval {SELECT count(*) FROM test1} 72} {10} 73do_test update-3.5.3 { 74 db changes 75} {10} 76 77do_test update-3.6 { 78 execsql {SELECT * FROM test1 ORDER BY f1} 79} {1 6 2 12 3 24 4 48 5 96 6 192 7 384 8 768 9 1536 10 3072} 80do_test update-3.7 { 81 execsql {PRAGMA count_changes=on} 82 execsql {UPDATE test1 SET f2=f2/3 WHERE f1<=5} 83} {5} 84do_test update-3.8 { 85 execsql {SELECT * FROM test1 ORDER BY f1} 86} {1 2 2 4 3 8 4 16 5 32 6 192 7 384 8 768 9 1536 10 3072} 87do_test update-3.9 { 88 execsql {UPDATE test1 SET f2=f2/3 WHERE f1>5} 89} {5} 90do_test update-3.10 { 91 execsql {SELECT * FROM test1 ORDER BY f1} 92} {1 2 2 4 3 8 4 16 5 32 6 64 7 128 8 256 9 512 10 1024} 93 94# Swap the values of f1 and f2 for all elements 95# 96do_test update-3.11 { 97 execsql {UPDATE test1 SET F2=f1, F1=f2} 98} {10} 99do_test update-3.12 { 100 execsql {SELECT * FROM test1 ORDER BY F1} 101} {2 1 4 2 8 3 16 4 32 5 64 6 128 7 256 8 512 9 1024 10} 102do_test update-3.13 { 103 execsql {PRAGMA count_changes=off} 104 execsql {UPDATE test1 SET F2=f1, F1=f2} 105} {} 106do_test update-3.14 { 107 execsql {SELECT * FROM test1 ORDER BY F1} 108} {1 2 2 4 3 8 4 16 5 32 6 64 7 128 8 256 9 512 10 1024} 109 110# Create duplicate entries and make sure updating still 111# works. 112# 113do_test update-4.0 { 114 execsql { 115 DELETE FROM test1 WHERE f1<=5; 116 INSERT INTO test1(f1,f2) VALUES(8,88); 117 INSERT INTO test1(f1,f2) VALUES(8,888); 118 INSERT INTO test1(f1,f2) VALUES(77,128); 119 INSERT INTO test1(f1,f2) VALUES(777,128); 120 } 121 execsql {SELECT * FROM test1 ORDER BY f1,f2} 122} {6 64 7 128 8 88 8 256 8 888 9 512 10 1024 77 128 777 128} 123do_test update-4.1 { 124 execsql {UPDATE test1 SET f2=f2+1 WHERE f1==8} 125 execsql {SELECT * FROM test1 ORDER BY f1,f2} 126} {6 64 7 128 8 89 8 257 8 889 9 512 10 1024 77 128 777 128} 127do_test update-4.2 { 128 execsql {UPDATE test1 SET f2=f2-1 WHERE f1==8 and f2>800} 129 execsql {SELECT * FROM test1 ORDER BY f1,f2} 130} {6 64 7 128 8 89 8 257 8 888 9 512 10 1024 77 128 777 128} 131do_test update-4.3 { 132 execsql {UPDATE test1 SET f2=f2-1 WHERE f1==8 and f2<800} 133 execsql {SELECT * FROM test1 ORDER BY f1,f2} 134} {6 64 7 128 8 88 8 256 8 888 9 512 10 1024 77 128 777 128} 135do_test update-4.4 { 136 execsql {UPDATE test1 SET f1=f1+1 WHERE f2==128} 137 execsql {SELECT * FROM test1 ORDER BY f1,f2} 138} {6 64 8 88 8 128 8 256 8 888 9 512 10 1024 78 128 778 128} 139do_test update-4.5 { 140 execsql {UPDATE test1 SET f1=f1-1 WHERE f1>100 and f2==128} 141 execsql {SELECT * FROM test1 ORDER BY f1,f2} 142} {6 64 8 88 8 128 8 256 8 888 9 512 10 1024 78 128 777 128} 143do_test update-4.6 { 144 execsql { 145 PRAGMA count_changes=on; 146 UPDATE test1 SET f1=f1-1 WHERE f1<=100 and f2==128; 147 } 148} {2} 149do_test update-4.7 { 150 execsql { 151 PRAGMA count_changes=off; 152 SELECT * FROM test1 ORDER BY f1,f2 153 } 154} {6 64 7 128 8 88 8 256 8 888 9 512 10 1024 77 128 777 128} 155 156# Repeat the previous sequence of tests with an index. 157# 158do_test update-5.0 { 159 execsql {CREATE INDEX idx1 ON test1(f1)} 160 execsql {SELECT * FROM test1 ORDER BY f1,f2} 161} {6 64 7 128 8 88 8 256 8 888 9 512 10 1024 77 128 777 128} 162do_test update-5.1 { 163 execsql {UPDATE test1 SET f2=f2+1 WHERE f1==8} 164 execsql {SELECT * FROM test1 ORDER BY f1,f2} 165} {6 64 7 128 8 89 8 257 8 889 9 512 10 1024 77 128 777 128} 166do_test update-5.2 { 167 execsql {UPDATE test1 SET f2=f2-1 WHERE f1==8 and f2>800} 168 execsql {SELECT * FROM test1 ORDER BY f1,f2} 169} {6 64 7 128 8 89 8 257 8 888 9 512 10 1024 77 128 777 128} 170do_test update-5.3 { 171 execsql {UPDATE test1 SET f2=f2-1 WHERE f1==8 and f2<800} 172 execsql {SELECT * FROM test1 ORDER BY f1,f2} 173} {6 64 7 128 8 88 8 256 8 888 9 512 10 1024 77 128 777 128} 174do_test update-5.4 { 175 execsql {UPDATE test1 SET f1=f1+1 WHERE f2==128} 176 execsql {SELECT * FROM test1 ORDER BY f1,f2} 177} {6 64 8 88 8 128 8 256 8 888 9 512 10 1024 78 128 778 128} 178do_test update-5.4.1 { 179 execsql {SELECT * FROM test1 WHERE f1==78 ORDER BY f1,f2} 180} {78 128} 181do_test update-5.4.2 { 182 execsql {SELECT * FROM test1 WHERE f1==778 ORDER BY f1,f2} 183} {778 128} 184do_test update-5.4.3 { 185 execsql {SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2} 186} {8 88 8 128 8 256 8 888} 187do_test update-5.5 { 188 execsql {UPDATE test1 SET f1=f1-1 WHERE f1>100 and f2==128} 189} {} 190do_test update-5.5.1 { 191 execsql {SELECT * FROM test1 ORDER BY f1,f2} 192} {6 64 8 88 8 128 8 256 8 888 9 512 10 1024 78 128 777 128} 193do_test update-5.5.2 { 194 execsql {SELECT * FROM test1 WHERE f1==78 ORDER BY f1,f2} 195} {78 128} 196do_test update-5.5.3 { 197 execsql {SELECT * FROM test1 WHERE f1==778 ORDER BY f1,f2} 198} {} 199do_test update-5.5.4 { 200 execsql {SELECT * FROM test1 WHERE f1==777 ORDER BY f1,f2} 201} {777 128} 202do_test update-5.5.5 { 203 execsql {SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2} 204} {8 88 8 128 8 256 8 888} 205do_test update-5.6 { 206 execsql { 207 PRAGMA count_changes=on; 208 UPDATE test1 SET f1=f1-1 WHERE f1<=100 and f2==128; 209 } 210} {2} 211do_test update-5.6.1 { 212 execsql { 213 PRAGMA count_changes=off; 214 SELECT * FROM test1 ORDER BY f1,f2 215 } 216} {6 64 7 128 8 88 8 256 8 888 9 512 10 1024 77 128 777 128} 217do_test update-5.6.2 { 218 execsql {SELECT * FROM test1 WHERE f1==77 ORDER BY f1,f2} 219} {77 128} 220do_test update-5.6.3 { 221 execsql {SELECT * FROM test1 WHERE f1==778 ORDER BY f1,f2} 222} {} 223do_test update-5.6.4 { 224 execsql {SELECT * FROM test1 WHERE f1==777 ORDER BY f1,f2} 225} {777 128} 226do_test update-5.6.5 { 227 execsql {SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2} 228} {8 88 8 256 8 888} 229 230# Repeat the previous sequence of tests with a different index. 231# 232execsql {PRAGMA synchronous=FULL} 233do_test update-6.0 { 234 execsql {DROP INDEX idx1} 235 execsql {CREATE INDEX idx1 ON test1(f2)} 236 execsql {SELECT * FROM test1 ORDER BY f1,f2} 237} {6 64 7 128 8 88 8 256 8 888 9 512 10 1024 77 128 777 128} 238do_test update-6.1 { 239 execsql {UPDATE test1 SET f2=f2+1 WHERE f1==8} 240 execsql {SELECT * FROM test1 ORDER BY f1,f2} 241} {6 64 7 128 8 89 8 257 8 889 9 512 10 1024 77 128 777 128} 242do_test update-6.1.1 { 243 execsql {SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2} 244} {8 89 8 257 8 889} 245do_test update-6.1.2 { 246 execsql {SELECT * FROM test1 WHERE f2==89 ORDER BY f1,f2} 247} {8 89} 248do_test update-6.1.3 { 249 execsql {SELECT * FROM test1 WHERE f1==88 ORDER BY f1,f2} 250} {} 251do_test update-6.2 { 252 execsql {UPDATE test1 SET f2=f2-1 WHERE f1==8 and f2>800} 253 execsql {SELECT * FROM test1 ORDER BY f1,f2} 254} {6 64 7 128 8 89 8 257 8 888 9 512 10 1024 77 128 777 128} 255do_test update-6.3 { 256 execsql {UPDATE test1 SET f2=f2-1 WHERE f1==8 and f2<800} 257 execsql {SELECT * FROM test1 ORDER BY f1,f2} 258} {6 64 7 128 8 88 8 256 8 888 9 512 10 1024 77 128 777 128} 259do_test update-6.3.1 { 260 execsql {SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2} 261} {8 88 8 256 8 888} 262do_test update-6.3.2 { 263 execsql {SELECT * FROM test1 WHERE f2==89 ORDER BY f1,f2} 264} {} 265do_test update-6.3.3 { 266 execsql {SELECT * FROM test1 WHERE f2==88 ORDER BY f1,f2} 267} {8 88} 268do_test update-6.4 { 269 execsql {UPDATE test1 SET f1=f1+1 WHERE f2==128} 270 execsql {SELECT * FROM test1 ORDER BY f1,f2} 271} {6 64 8 88 8 128 8 256 8 888 9 512 10 1024 78 128 778 128} 272do_test update-6.4.1 { 273 execsql {SELECT * FROM test1 WHERE f1==78 ORDER BY f1,f2} 274} {78 128} 275do_test update-6.4.2 { 276 execsql {SELECT * FROM test1 WHERE f1==778 ORDER BY f1,f2} 277} {778 128} 278do_test update-6.4.3 { 279 execsql {SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2} 280} {8 88 8 128 8 256 8 888} 281do_test update-6.5 { 282 execsql {UPDATE test1 SET f1=f1-1 WHERE f1>100 and f2==128} 283 execsql {SELECT * FROM test1 ORDER BY f1,f2} 284} {6 64 8 88 8 128 8 256 8 888 9 512 10 1024 78 128 777 128} 285do_test update-6.5.1 { 286 execsql {SELECT * FROM test1 WHERE f1==78 ORDER BY f1,f2} 287} {78 128} 288do_test update-6.5.2 { 289 execsql {SELECT * FROM test1 WHERE f1==778 ORDER BY f1,f2} 290} {} 291do_test update-6.5.3 { 292 execsql {SELECT * FROM test1 WHERE f1==777 ORDER BY f1,f2} 293} {777 128} 294do_test update-6.5.4 { 295 execsql {SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2} 296} {8 88 8 128 8 256 8 888} 297do_test update-6.6 { 298 execsql {UPDATE test1 SET f1=f1-1 WHERE f1<=100 and f2==128} 299 execsql {SELECT * FROM test1 ORDER BY f1,f2} 300} {6 64 7 128 8 88 8 256 8 888 9 512 10 1024 77 128 777 128} 301do_test update-6.6.1 { 302 execsql {SELECT * FROM test1 WHERE f1==77 ORDER BY f1,f2} 303} {77 128} 304do_test update-6.6.2 { 305 execsql {SELECT * FROM test1 WHERE f1==778 ORDER BY f1,f2} 306} {} 307do_test update-6.6.3 { 308 execsql {SELECT * FROM test1 WHERE f1==777 ORDER BY f1,f2} 309} {777 128} 310do_test update-6.6.4 { 311 execsql {SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2} 312} {8 88 8 256 8 888} 313 314# Repeat the previous sequence of tests with multiple 315# indices 316# 317do_test update-7.0 { 318 execsql {CREATE INDEX idx2 ON test1(f2)} 319 execsql {CREATE INDEX idx3 ON test1(f1,f2)} 320 execsql {SELECT * FROM test1 ORDER BY f1,f2} 321} {6 64 7 128 8 88 8 256 8 888 9 512 10 1024 77 128 777 128} 322do_test update-7.1 { 323 execsql {UPDATE test1 SET f2=f2+1 WHERE f1==8} 324 execsql {SELECT * FROM test1 ORDER BY f1,f2} 325} {6 64 7 128 8 89 8 257 8 889 9 512 10 1024 77 128 777 128} 326do_test update-7.1.1 { 327 execsql {SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2} 328} {8 89 8 257 8 889} 329do_test update-7.1.2 { 330 execsql {SELECT * FROM test1 WHERE f2==89 ORDER BY f1,f2} 331} {8 89} 332do_test update-7.1.3 { 333 execsql {SELECT * FROM test1 WHERE f1==88 ORDER BY f1,f2} 334} {} 335do_test update-7.2 { 336 execsql {UPDATE test1 SET f2=f2-1 WHERE f1==8 and f2>800} 337 execsql {SELECT * FROM test1 ORDER BY f1,f2} 338} {6 64 7 128 8 89 8 257 8 888 9 512 10 1024 77 128 777 128} 339do_test update-7.3 { 340 # explain {UPDATE test1 SET f2=f2-1 WHERE f1==8 and F2<300} 341 execsql {UPDATE test1 SET f2=f2-1 WHERE f1==8 and f2<800} 342 execsql {SELECT * FROM test1 ORDER BY f1,f2} 343} {6 64 7 128 8 88 8 256 8 888 9 512 10 1024 77 128 777 128} 344do_test update-7.3.1 { 345 execsql {SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2} 346} {8 88 8 256 8 888} 347do_test update-7.3.2 { 348 execsql {SELECT * FROM test1 WHERE f2==89 ORDER BY f1,f2} 349} {} 350do_test update-7.3.3 { 351 execsql {SELECT * FROM test1 WHERE f2==88 ORDER BY f1,f2} 352} {8 88} 353do_test update-7.4 { 354 execsql {UPDATE test1 SET f1=f1+1 WHERE f2==128} 355 execsql {SELECT * FROM test1 ORDER BY f1,f2} 356} {6 64 8 88 8 128 8 256 8 888 9 512 10 1024 78 128 778 128} 357do_test update-7.4.1 { 358 execsql {SELECT * FROM test1 WHERE f1==78 ORDER BY f1,f2} 359} {78 128} 360do_test update-7.4.2 { 361 execsql {SELECT * FROM test1 WHERE f1==778 ORDER BY f1,f2} 362} {778 128} 363do_test update-7.4.3 { 364 execsql {SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2} 365} {8 88 8 128 8 256 8 888} 366do_test update-7.5 { 367 execsql {UPDATE test1 SET f1=f1-1 WHERE f1>100 and f2==128} 368 execsql {SELECT * FROM test1 ORDER BY f1,f2} 369} {6 64 8 88 8 128 8 256 8 888 9 512 10 1024 78 128 777 128} 370do_test update-7.5.1 { 371 execsql {SELECT * FROM test1 WHERE f1==78 ORDER BY f1,f2} 372} {78 128} 373do_test update-7.5.2 { 374 execsql {SELECT * FROM test1 WHERE f1==778 ORDER BY f1,f2} 375} {} 376do_test update-7.5.3 { 377 execsql {SELECT * FROM test1 WHERE f1==777 ORDER BY f1,f2} 378} {777 128} 379do_test update-7.5.4 { 380 execsql {SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2} 381} {8 88 8 128 8 256 8 888} 382do_test update-7.6 { 383 execsql {UPDATE test1 SET f1=f1-1 WHERE f1<=100 and f2==128} 384 execsql {SELECT * FROM test1 ORDER BY f1,f2} 385} {6 64 7 128 8 88 8 256 8 888 9 512 10 1024 77 128 777 128} 386do_test update-7.6.1 { 387 execsql {SELECT * FROM test1 WHERE f1==77 ORDER BY f1,f2} 388} {77 128} 389do_test update-7.6.2 { 390 execsql {SELECT * FROM test1 WHERE f1==778 ORDER BY f1,f2} 391} {} 392do_test update-7.6.3 { 393 execsql {SELECT * FROM test1 WHERE f1==777 ORDER BY f1,f2} 394} {777 128} 395do_test update-7.6.4 { 396 execsql {SELECT * FROM test1 WHERE f1==8 ORDER BY f1,f2} 397} {8 88 8 256 8 888} 398 399# Error messages 400# 401do_test update-9.1 { 402 set v [catch {execsql { 403 UPDATE test1 SET x=11 WHERE f1=1025 404 }} msg] 405 lappend v $msg 406} {1 {no such column: x}} 407do_test update-9.2 { 408 set v [catch {execsql { 409 UPDATE test1 SET f1=x(11) WHERE f1=1025 410 }} msg] 411 lappend v $msg 412} {1 {no such function: x}} 413do_test update-9.3 { 414 set v [catch {execsql { 415 UPDATE test1 SET f1=11 WHERE x=1025 416 }} msg] 417 lappend v $msg 418} {1 {no such column: x}} 419do_test update-9.4 { 420 set v [catch {execsql { 421 UPDATE test1 SET f1=11 WHERE x(f1)=1025 422 }} msg] 423 lappend v $msg 424} {1 {no such function: x}} 425 426# Try doing updates on a unique column where the value does not 427# really change. 428# 429do_test update-10.1 { 430 execsql { 431 DROP TABLE test1; 432 CREATE TABLE t1( 433 a integer primary key, 434 b UNIQUE, 435 c, d, 436 e, f, 437 UNIQUE(c,d) 438 ); 439 INSERT INTO t1 VALUES(1,2,3,4,5,6); 440 INSERT INTO t1 VALUES(2,3,4,4,6,7); 441 SELECT * FROM t1 442 } 443} {1 2 3 4 5 6 2 3 4 4 6 7} 444do_test update-10.2 { 445 catchsql { 446 UPDATE t1 SET a=1, e=9 WHERE f=6; 447 SELECT * FROM t1; 448 } 449} {0 {1 2 3 4 9 6 2 3 4 4 6 7}} 450do_test update-10.3 { 451 catchsql { 452 UPDATE t1 SET a=1, e=10 WHERE f=7; 453 SELECT * FROM t1; 454 } 455} {1 {PRIMARY KEY must be unique}} 456do_test update-10.4 { 457 catchsql { 458 SELECT * FROM t1; 459 } 460} {0 {1 2 3 4 9 6 2 3 4 4 6 7}} 461do_test update-10.5 { 462 catchsql { 463 UPDATE t1 SET b=2, e=11 WHERE f=6; 464 SELECT * FROM t1; 465 } 466} {0 {1 2 3 4 11 6 2 3 4 4 6 7}} 467do_test update-10.6 { 468 catchsql { 469 UPDATE t1 SET b=2, e=12 WHERE f=7; 470 SELECT * FROM t1; 471 } 472} {1 {column b is not unique}} 473do_test update-10.7 { 474 catchsql { 475 SELECT * FROM t1; 476 } 477} {0 {1 2 3 4 11 6 2 3 4 4 6 7}} 478do_test update-10.8 { 479 catchsql { 480 UPDATE t1 SET c=3, d=4, e=13 WHERE f=6; 481 SELECT * FROM t1; 482 } 483} {0 {1 2 3 4 13 6 2 3 4 4 6 7}} 484do_test update-10.9 { 485 catchsql { 486 UPDATE t1 SET c=3, d=4, e=14 WHERE f=7; 487 SELECT * FROM t1; 488 } 489} {1 {columns c, d are not unique}} 490do_test update-10.10 { 491 catchsql { 492 SELECT * FROM t1; 493 } 494} {0 {1 2 3 4 13 6 2 3 4 4 6 7}} 495 496# Make sure we can handle a subquery in the where clause. 497# 498ifcapable subquery { 499 do_test update-11.1 { 500 execsql { 501 UPDATE t1 SET e=e+1 WHERE b IN (SELECT b FROM t1); 502 SELECT b,e FROM t1; 503 } 504 } {2 14 3 7} 505 do_test update-11.2 { 506 execsql { 507 UPDATE t1 SET e=e+1 WHERE a IN (SELECT a FROM t1); 508 SELECT a,e FROM t1; 509 } 510 } {1 15 2 8} 511} 512 513integrity_check update-12.1 514 515# Ticket 602. Updates should occur in the same order as the records 516# were discovered in the WHERE clause. 517# 518do_test update-13.1 { 519 execsql { 520 BEGIN; 521 CREATE TABLE t2(a); 522 INSERT INTO t2 VALUES(1); 523 INSERT INTO t2 VALUES(2); 524 INSERT INTO t2 SELECT a+2 FROM t2; 525 INSERT INTO t2 SELECT a+4 FROM t2; 526 INSERT INTO t2 SELECT a+8 FROM t2; 527 INSERT INTO t2 SELECT a+16 FROM t2; 528 INSERT INTO t2 SELECT a+32 FROM t2; 529 INSERT INTO t2 SELECT a+64 FROM t2; 530 INSERT INTO t2 SELECT a+128 FROM t2; 531 INSERT INTO t2 SELECT a+256 FROM t2; 532 INSERT INTO t2 SELECT a+512 FROM t2; 533 INSERT INTO t2 SELECT a+1024 FROM t2; 534 COMMIT; 535 SELECT count(*) FROM t2; 536 } 537} {2048} 538do_test update-13.2 { 539 execsql { 540 SELECT count(*) FROM t2 WHERE a=rowid; 541 } 542} {2048} 543do_test update-13.3 { 544 execsql { 545 UPDATE t2 SET rowid=rowid-1; 546 SELECT count(*) FROM t2 WHERE a=rowid+1; 547 } 548} {2048} 549do_test update-13.3 { 550 execsql { 551 UPDATE t2 SET rowid=rowid+10000; 552 UPDATE t2 SET rowid=rowid-9999; 553 SELECT count(*) FROM t2 WHERE a=rowid; 554 } 555} {2048} 556do_test update-13.4 { 557 execsql { 558 BEGIN; 559 INSERT INTO t2 SELECT a+2048 FROM t2; 560 INSERT INTO t2 SELECT a+4096 FROM t2; 561 INSERT INTO t2 SELECT a+8192 FROM t2; 562 SELECT count(*) FROM t2 WHERE a=rowid; 563 COMMIT; 564 } 565} 16384 566do_test update-13.5 { 567 execsql { 568 UPDATE t2 SET rowid=rowid-1; 569 SELECT count(*) FROM t2 WHERE a=rowid+1; 570 } 571} 16384 572 573integrity_check update-13.6 574 575ifcapable {trigger} { 576# Test for proper detection of malformed WHEN clauses on UPDATE triggers. 577# 578do_test update-14.1 { 579 execsql { 580 CREATE TABLE t3(a,b,c); 581 CREATE TRIGGER t3r1 BEFORE UPDATE on t3 WHEN nosuchcol BEGIN 582 SELECT 'illegal WHEN clause'; 583 END; 584 } 585} {} 586do_test update-14.2 { 587 catchsql { 588 UPDATE t3 SET a=1; 589 } 590} {1 {no such column: nosuchcol}} 591do_test update-14.3 { 592 execsql { 593 CREATE TABLE t4(a,b,c); 594 CREATE TRIGGER t4r1 AFTER UPDATE on t4 WHEN nosuchcol BEGIN 595 SELECT 'illegal WHEN clause'; 596 END; 597 } 598} {} 599do_test update-14.4 { 600 catchsql { 601 UPDATE t4 SET a=1; 602 } 603} {1 {no such column: nosuchcol}} 604 605} ;# ifcapable {trigger} 606 607 608finish_test 609