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