blob: cff09d0b9beff54c8254669e517d226eaea31b71 [file] [log] [blame]
drhb19a2bc2001-09-16 00:13:26 +00001# 2001 September 15
drhc4a3c772001-04-04 11:48:57 +00002#
drhb19a2bc2001-09-16 00:13:26 +00003# The author disclaims copyright to this source code. In place of
4# a legal notice, here is a blessing:
drhc4a3c772001-04-04 11:48:57 +00005#
drhb19a2bc2001-09-16 00:13:26 +00006# 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.
drhc4a3c772001-04-04 11:48:57 +00009#
10#***********************************************************************
11# This file implements regression tests for SQLite library. The
12# focus of this file is testing the magic ROWID column that is
13# found on all tables.
14#
drhef4ac8f2004-06-19 00:16:31 +000015# $Id: rowid.test,v 1.15 2004/06/19 00:16:31 drh Exp $
drhc4a3c772001-04-04 11:48:57 +000016
17set testdir [file dirname $argv0]
18source $testdir/tester.tcl
19
20# Basic ROWID functionality tests.
21#
22do_test rowid-1.1 {
23 execsql {
24 CREATE TABLE t1(x int, y int);
25 INSERT INTO t1 VALUES(1,2);
26 INSERT INTO t1 VALUES(3,4);
27 SELECT x FROM t1 ORDER BY y;
28 }
29} {1 3}
30do_test rowid-1.2 {
31 set r [execsql {SELECT rowid FROM t1 ORDER BY x}]
32 global x2rowid rowid2x
33 set x2rowid(1) [lindex $r 0]
34 set x2rowid(3) [lindex $r 1]
35 set rowid2x($x2rowid(1)) 1
36 set rowid2x($x2rowid(3)) 3
37 llength $r
38} {2}
39do_test rowid-1.3 {
40 global x2rowid
41 set sql "SELECT x FROM t1 WHERE rowid==$x2rowid(1)"
42 execsql $sql
43} {1}
44do_test rowid-1.4 {
45 global x2rowid
46 set sql "SELECT x FROM t1 WHERE rowid==$x2rowid(3)"
47 execsql $sql
48} {3}
49do_test rowid-1.5 {
50 global x2rowid
51 set sql "SELECT x FROM t1 WHERE oid==$x2rowid(1)"
52 execsql $sql
53} {1}
54do_test rowid-1.6 {
55 global x2rowid
56 set sql "SELECT x FROM t1 WHERE OID==$x2rowid(3)"
57 execsql $sql
58} {3}
59do_test rowid-1.7 {
60 global x2rowid
61 set sql "SELECT x FROM t1 WHERE _rowid_==$x2rowid(1)"
62 execsql $sql
63} {1}
drh1eaa2692001-09-18 02:02:23 +000064do_test rowid-1.7.1 {
65 while 1 {
66 set norow [expr {int(rand()*1000000)}]
67 if {$norow!=$x2rowid(1) && $norow!=$x2rowid(3)} break
68 }
69 execsql "SELECT x FROM t1 WHERE rowid=$norow"
70} {}
drhc4a3c772001-04-04 11:48:57 +000071do_test rowid-1.8 {
72 global x2rowid
73 set v [execsql {SELECT x, oid FROM t1 order by x}]
74 set v2 [list 1 $x2rowid(1) 3 $x2rowid(3)]
75 expr {$v==$v2}
76} {1}
77do_test rowid-1.9 {
78 global x2rowid
79 set v [execsql {SELECT x, RowID FROM t1 order by x}]
80 set v2 [list 1 $x2rowid(1) 3 $x2rowid(3)]
81 expr {$v==$v2}
82} {1}
83do_test rowid-1.9 {
84 global x2rowid
85 set v [execsql {SELECT x, _rowid_ FROM t1 order by x}]
86 set v2 [list 1 $x2rowid(1) 3 $x2rowid(3)]
87 expr {$v==$v2}
88} {1}
89
drha0217ba2003-06-01 01:10:33 +000090# We can insert or update the ROWID column.
drhc4a3c772001-04-04 11:48:57 +000091#
92do_test rowid-2.1 {
drha0217ba2003-06-01 01:10:33 +000093 catchsql {
94 INSERT INTO t1(rowid,x,y) VALUES(1234,5,6);
95 SELECT rowid, * FROM t1;
96 }
97} {0 {1 1 2 2 3 4 1234 5 6}}
drhc4a3c772001-04-04 11:48:57 +000098do_test rowid-2.2 {
drha0217ba2003-06-01 01:10:33 +000099 catchsql {
100 UPDATE t1 SET rowid=12345 WHERE x==1;
101 SELECT rowid, * FROM t1
102 }
103} {0 {2 3 4 1234 5 6 12345 1 2}}
drhc4a3c772001-04-04 11:48:57 +0000104do_test rowid-2.3 {
drha0217ba2003-06-01 01:10:33 +0000105 catchsql {
106 INSERT INTO t1(y,x,oid) VALUES(8,7,1235);
107 SELECT rowid, * FROM t1 WHERE rowid>1000;
108 }
109} {0 {1234 5 6 1235 7 8 12345 1 2}}
drhc4a3c772001-04-04 11:48:57 +0000110do_test rowid-2.4 {
drha0217ba2003-06-01 01:10:33 +0000111 catchsql {
112 UPDATE t1 SET oid=12346 WHERE x==1;
113 SELECT rowid, * FROM t1;
114 }
115} {0 {2 3 4 1234 5 6 1235 7 8 12346 1 2}}
drhc4a3c772001-04-04 11:48:57 +0000116do_test rowid-2.5 {
drha0217ba2003-06-01 01:10:33 +0000117 catchsql {
118 INSERT INTO t1(x,_rowid_,y) VALUES(9,1236,10);
119 SELECT rowid, * FROM t1 WHERE rowid>1000;
120 }
121} {0 {1234 5 6 1235 7 8 1236 9 10 12346 1 2}}
drhc4a3c772001-04-04 11:48:57 +0000122do_test rowid-2.6 {
drha0217ba2003-06-01 01:10:33 +0000123 catchsql {
124 UPDATE t1 SET _rowid_=12347 WHERE x==1;
125 SELECT rowid, * FROM t1 WHERE rowid>1000;
126 }
127} {0 {1234 5 6 1235 7 8 1236 9 10 12347 1 2}}
drhc4a3c772001-04-04 11:48:57 +0000128
129# But we can use ROWID in the WHERE clause of an UPDATE that does not
130# change the ROWID.
131#
132do_test rowid-2.7 {
133 global x2rowid
134 set sql "UPDATE t1 SET x=2 WHERE OID==$x2rowid(3)"
135 execsql $sql
136 execsql {SELECT x FROM t1 ORDER BY x}
drha0217ba2003-06-01 01:10:33 +0000137} {1 2 5 7 9}
drhc4a3c772001-04-04 11:48:57 +0000138do_test rowid-2.8 {
139 global x2rowid
140 set sql "UPDATE t1 SET x=3 WHERE _rowid_==$x2rowid(3)"
141 execsql $sql
142 execsql {SELECT x FROM t1 ORDER BY x}
drha0217ba2003-06-01 01:10:33 +0000143} {1 3 5 7 9}
drhc4a3c772001-04-04 11:48:57 +0000144
145# We cannot index by ROWID
146#
147do_test rowid-2.9 {
148 set v [catch {execsql {CREATE INDEX idxt1 ON t1(rowid)}} msg]
149 lappend v $msg
150} {1 {table t1 has no column named rowid}}
151do_test rowid-2.10 {
152 set v [catch {execsql {CREATE INDEX idxt1 ON t1(_rowid_)}} msg]
153 lappend v $msg
154} {1 {table t1 has no column named _rowid_}}
155do_test rowid-2.11 {
156 set v [catch {execsql {CREATE INDEX idxt1 ON t1(oid)}} msg]
157 lappend v $msg
158} {1 {table t1 has no column named oid}}
159do_test rowid-2.12 {
160 set v [catch {execsql {CREATE INDEX idxt1 ON t1(x, rowid)}} msg]
161 lappend v $msg
162} {1 {table t1 has no column named rowid}}
163
164# Columns defined in the CREATE statement override the buildin ROWID
165# column names.
166#
167do_test rowid-3.1 {
168 execsql {
169 CREATE TABLE t2(rowid int, x int, y int);
drh5cf8e8c2002-02-19 22:42:05 +0000170 INSERT INTO t2 VALUES(0,2,3);
drhc4a3c772001-04-04 11:48:57 +0000171 INSERT INTO t2 VALUES(4,5,6);
172 INSERT INTO t2 VALUES(7,8,9);
173 SELECT * FROM t2 ORDER BY x;
174 }
drh5cf8e8c2002-02-19 22:42:05 +0000175} {0 2 3 4 5 6 7 8 9}
drhc4a3c772001-04-04 11:48:57 +0000176do_test rowid-3.2 {
177 execsql {SELECT * FROM t2 ORDER BY rowid}
drh5cf8e8c2002-02-19 22:42:05 +0000178} {0 2 3 4 5 6 7 8 9}
drhc4a3c772001-04-04 11:48:57 +0000179do_test rowid-3.3 {
180 execsql {SELECT rowid, x, y FROM t2 ORDER BY rowid}
drh5cf8e8c2002-02-19 22:42:05 +0000181} {0 2 3 4 5 6 7 8 9}
drhc4a3c772001-04-04 11:48:57 +0000182do_test rowid-3.4 {
183 set r1 [execsql {SELECT _rowid_, rowid FROM t2 ORDER BY rowid}]
184 foreach {a b c d e f} $r1 {}
185 set r2 [execsql {SELECT _rowid_, rowid FROM t2 ORDER BY x DESC}]
186 foreach {u v w x y z} $r2 {}
187 expr {$u==$e && $w==$c && $y==$a}
188} {1}
drhef4ac8f2004-06-19 00:16:31 +0000189# sqlite3 v3 - do_probtest doesn't exist anymore?
danielk197796fc5fe2004-05-13 11:34:16 +0000190if 0 {
drhc4a3c772001-04-04 11:48:57 +0000191do_probtest rowid-3.5 {
192 set r1 [execsql {SELECT _rowid_, rowid FROM t2 ORDER BY rowid}]
193 foreach {a b c d e f} $r1 {}
194 expr {$a!=$b && $c!=$d && $e!=$f}
195} {1}
danielk197796fc5fe2004-05-13 11:34:16 +0000196}
drhc4a3c772001-04-04 11:48:57 +0000197
198# Let's try some more complex examples, including some joins.
199#
200do_test rowid-4.1 {
201 execsql {
202 DELETE FROM t1;
203 DELETE FROM t2;
204 }
205 for {set i 1} {$i<=50} {incr i} {
206 execsql "INSERT INTO t1(x,y) VALUES($i,[expr {$i*$i}])"
207 }
208 execsql {INSERT INTO t2 SELECT _rowid_, x*y, y*y FROM t1}
209 execsql {SELECT t2.y FROM t1, t2 WHERE t1.x==4 AND t1.rowid==t2.rowid}
210} {256}
211do_test rowid-4.2 {
212 execsql {SELECT t2.y FROM t2, t1 WHERE t1.x==4 AND t1.rowid==t2.rowid}
213} {256}
214do_test rowid-4.2.1 {
215 execsql {SELECT t2.y FROM t2, t1 WHERE t1.x==4 AND t1.oid==t2.rowid}
216} {256}
217do_test rowid-4.2.2 {
218 execsql {SELECT t2.y FROM t2, t1 WHERE t1.x==4 AND t1._rowid_==t2.rowid}
219} {256}
220do_test rowid-4.2.3 {
221 execsql {SELECT t2.y FROM t2, t1 WHERE t1.x==4 AND t2.rowid==t1.rowid}
222} {256}
223do_test rowid-4.2.4 {
224 execsql {SELECT t2.y FROM t2, t1 WHERE t2.rowid==t1.oid AND t1.x==4}
225} {256}
226do_test rowid-4.2.5 {
227 execsql {SELECT t2.y FROM t1, t2 WHERE t1.x==4 AND t1._rowid_==t2.rowid}
228} {256}
229do_test rowid-4.2.6 {
230 execsql {SELECT t2.y FROM t1, t2 WHERE t1.x==4 AND t2.rowid==t1.rowid}
231} {256}
232do_test rowid-4.2.7 {
233 execsql {SELECT t2.y FROM t1, t2 WHERE t2.rowid==t1.oid AND t1.x==4}
234} {256}
235do_test rowid-4.3 {
236 execsql {CREATE INDEX idxt1 ON t1(x)}
237 execsql {SELECT t2.y FROM t1, t2 WHERE t1.x==4 AND t1.rowid==t2.rowid}
238} {256}
239do_test rowid-4.3.1 {
240 execsql {SELECT t2.y FROM t1, t2 WHERE t1.x==4 AND t1._rowid_==t2.rowid}
241} {256}
242do_test rowid-4.3.2 {
243 execsql {SELECT t2.y FROM t1, t2 WHERE t2.rowid==t1.oid AND 4==t1.x}
244} {256}
245do_test rowid-4.4 {
246 execsql {SELECT t2.y FROM t2, t1 WHERE t1.x==4 AND t1.rowid==t2.rowid}
247} {256}
248do_test rowid-4.4.1 {
249 execsql {SELECT t2.y FROM t2, t1 WHERE t1.x==4 AND t1._rowid_==t2.rowid}
250} {256}
251do_test rowid-4.4.2 {
252 execsql {SELECT t2.y FROM t2, t1 WHERE t2.rowid==t1.oid AND 4==t1.x}
253} {256}
254do_test rowid-4.5 {
255 execsql {CREATE INDEX idxt2 ON t2(y)}
drh487ab3c2001-11-08 00:45:21 +0000256 set sqlite_search_count 0
257 concat [execsql {
258 SELECT t1.x FROM t2, t1
drhc4a3c772001-04-04 11:48:57 +0000259 WHERE t2.y==256 AND t1.rowid==t2.rowid
drh487ab3c2001-11-08 00:45:21 +0000260 }] $sqlite_search_count
261} {4 3}
drhc4a3c772001-04-04 11:48:57 +0000262do_test rowid-4.5.1 {
drh487ab3c2001-11-08 00:45:21 +0000263 set sqlite_search_count 0
264 concat [execsql {
265 SELECT t1.x FROM t2, t1
drhc4a3c772001-04-04 11:48:57 +0000266 WHERE t1.OID==t2.rowid AND t2.y==81
drh487ab3c2001-11-08 00:45:21 +0000267 }] $sqlite_search_count
268} {3 3}
drhc4a3c772001-04-04 11:48:57 +0000269do_test rowid-4.6 {
270 execsql {
271 SELECT t1.x FROM t1, t2
272 WHERE t2.y==256 AND t1.rowid==t2.rowid
273 }
274} {4}
275
276do_test rowid-5.1 {
277 execsql {DELETE FROM t1 WHERE _rowid_ IN (SELECT oid FROM t1 WHERE x>8)}
278 execsql {SELECT max(x) FROM t1}
279} {8}
drh3543b3e2001-09-15 00:57:59 +0000280
drhc6b52df2002-01-04 03:09:29 +0000281# Make sure a "WHERE rowid=X" clause works when there is no ROWID of X.
282#
283do_test rowid-6.1 {
284 execsql {
285 SELECT x FROM t1
286 }
287} {1 2 3 4 5 6 7 8}
288do_test rowid-6.2 {
drh5cf8e8c2002-02-19 22:42:05 +0000289 for {set ::norow 1} {1} {incr ::norow} {
290 if {[execsql "SELECT x FROM t1 WHERE rowid=$::norow"]==""} break
291 }
drhc6b52df2002-01-04 03:09:29 +0000292 execsql [subst {
293 DELETE FROM t1 WHERE rowid=$::norow
294 }]
295} {}
296do_test rowid-6.3 {
297 execsql {
298 SELECT x FROM t1
299 }
300} {1 2 3 4 5 6 7 8}
301
drh5cf8e8c2002-02-19 22:42:05 +0000302# Beginning with version 2.3.4, SQLite computes rowids of new rows by
303# finding the maximum current rowid and adding one. It falls back to
304# the old random algorithm if the maximum rowid is the largest integer.
305# The following tests are for this new behavior.
306#
307do_test rowid-7.0 {
308 execsql {
309 DELETE FROM t1;
310 DROP TABLE t2;
311 DROP INDEX idxt1;
312 INSERT INTO t1 VALUES(1,2);
313 SELECT rowid, * FROM t1;
314 }
315} {1 1 2}
316do_test rowid-7.1 {
317 execsql {
318 INSERT INTO t1 VALUES(99,100);
319 SELECT rowid,* FROM t1
320 }
321} {1 1 2 2 99 100}
322do_test rowid-7.2 {
323 execsql {
324 CREATE TABLE t2(a INTEGER PRIMARY KEY, b);
325 INSERT INTO t2(b) VALUES(55);
326 SELECT * FROM t2;
327 }
328} {1 55}
329do_test rowid-7.3 {
330 execsql {
331 INSERT INTO t2(b) VALUES(66);
332 SELECT * FROM t2;
333 }
334} {1 55 2 66}
335do_test rowid-7.4 {
336 execsql {
337 INSERT INTO t2(a,b) VALUES(1000000,77);
338 INSERT INTO t2(b) VALUES(88);
339 SELECT * FROM t2;
340 }
341} {1 55 2 66 1000000 77 1000001 88}
342do_test rowid-7.5 {
343 execsql {
344 INSERT INTO t2(a,b) VALUES(2147483647,99);
345 INSERT INTO t2(b) VALUES(11);
346 SELECT b FROM t2 ORDER BY b;
347 }
348} {11 55 66 77 88 99}
349do_test rowid-7.6 {
350 execsql {
351 SELECT b FROM t2 WHERE a NOT IN(1,2,1000000,1000001,2147483647);
352 }
353} {11}
354do_test rowid-7.7 {
355 execsql {
356 INSERT INTO t2(b) VALUES(22);
357 INSERT INTO t2(b) VALUES(33);
358 INSERT INTO t2(b) VALUES(44);
359 INSERT INTO t2(b) VALUES(55);
360 SELECT b FROM t2 WHERE a NOT IN(1,2,1000000,1000001,2147483647) ORDER BY b;
361 }
362} {11 22 33 44 55}
363do_test rowid-7.8 {
364 execsql {
365 DELETE FROM t2 WHERE a!=2;
366 INSERT INTO t2(b) VALUES(111);
367 SELECT * FROM t2;
368 }
369} {2 66 3 111}
drhc6b52df2002-01-04 03:09:29 +0000370
drh49449832003-04-15 14:01:43 +0000371# Make sure AFTER triggers that do INSERTs do not change the last_insert_rowid.
372# Ticket #290
373#
374do_test rowid-8.1 {
375 execsql {
376 CREATE TABLE t3(a integer primary key);
377 CREATE TABLE t4(x);
378 INSERT INTO t4 VALUES(1);
379 CREATE TRIGGER r3 AFTER INSERT on t3 FOR EACH ROW BEGIN
380 INSERT INTO t4 VALUES(NEW.a+10);
381 END;
382 SELECT * FROM t3;
383 }
384} {}
385do_test rowid-8.2 {
386 execsql {
387 SELECT rowid, * FROM t4;
388 }
389} {1 1}
390do_test rowid-8.3 {
391 execsql {
392 INSERT INTO t3 VALUES(123);
393 SELECT last_insert_rowid();
394 }
395} {123}
396do_test rowid-8.4 {
397 execsql {
398 SELECT * FROM t3;
399 }
400} {123}
401do_test rowid-8.5 {
402 execsql {
403 SELECT rowid, * FROM t4;
404 }
405} {1 1 2 133}
406do_test rowid-8.6 {
407 execsql {
408 INSERT INTO t3 VALUES(NULL);
409 SELECT last_insert_rowid();
410 }
411} {124}
412do_test rowid-8.7 {
413 execsql {
414 SELECT * FROM t3;
415 }
416} {123 124}
417do_test rowid-8.8 {
418 execsql {
419 SELECT rowid, * FROM t4;
420 }
drh70ce3f02003-04-15 19:22:22 +0000421} {1 1 2 133 3 134}
drh49449832003-04-15 14:01:43 +0000422
drh1dd59e02003-07-06 17:22:25 +0000423# ticket #377: Comparison between integer primiary key and floating point
424# values.
425#
426do_test rowid-9.1 {
427 execsql {
428 SELECT * FROM t3 WHERE a<123.5
429 }
430} {123}
431do_test rowid-9.2 {
432 execsql {
433 SELECT * FROM t3 WHERE a<124.5
434 }
435} {123 124}
436do_test rowid-9.3 {
437 execsql {
438 SELECT * FROM t3 WHERE a>123.5
439 }
440} {124}
441do_test rowid-9.4 {
442 execsql {
443 SELECT * FROM t3 WHERE a>122.5
444 }
445} {123 124}
446do_test rowid-9.5 {
447 execsql {
448 SELECT * FROM t3 WHERE a==123.5
449 }
450} {}
451do_test rowid-9.6 {
452 execsql {
453 SELECT * FROM t3 WHERE a==123.000
454 }
455} {123}
456do_test rowid-9.7 {
457 execsql {
458 SELECT * FROM t3 WHERE a>100.5 AND a<200.5
459 }
460} {123 124}
461do_test rowid-9.8 {
462 execsql {
463 SELECT * FROM t3 WHERE a>'xyz';
464 }
465} {}
466do_test rowid-9.9 {
467 execsql {
468 SELECT * FROM t3 WHERE a<'xyz';
469 }
470} {123 124}
471do_test rowid-9.10 {
472 execsql {
473 SELECT * FROM t3 WHERE a>=122.9 AND a<=123.1
474 }
475} {123}
476
drh751f4122004-01-14 21:59:22 +0000477# Ticket #567. Comparisons of ROWID or integery primary key against
478# floating point numbers still do not always work.
479#
480do_test rowid-10.1 {
481 execsql {
482 CREATE TABLE t5(a);
483 INSERT INTO t5 VALUES(1);
484 INSERT INTO t5 VALUES(2);
485 INSERT INTO t5 SELECT a+2 FROM t5;
486 INSERT INTO t5 SELECT a+4 FROM t5;
487 SELECT rowid, * FROM t5;
488 }
489} {1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8}
490do_test rowid-10.2 {
491 execsql {SELECT rowid, a FROM t5 WHERE rowid>=5.5}
492} {6 6 7 7 8 8}
493do_test rowid-10.3 {
494 execsql {SELECT rowid, a FROM t5 WHERE rowid>=5.0}
495} {5 5 6 6 7 7 8 8}
496do_test rowid-10.4 {
497 execsql {SELECT rowid, a FROM t5 WHERE rowid>5.5}
498} {6 6 7 7 8 8}
499do_test rowid-10.3.2 {
500 execsql {SELECT rowid, a FROM t5 WHERE rowid>5.0}
501} {6 6 7 7 8 8}
502do_test rowid-10.5 {
503 execsql {SELECT rowid, a FROM t5 WHERE 5.5<=rowid}
504} {6 6 7 7 8 8}
505do_test rowid-10.6 {
506 execsql {SELECT rowid, a FROM t5 WHERE 5.5<rowid}
507} {6 6 7 7 8 8}
508do_test rowid-10.7 {
509 execsql {SELECT rowid, a FROM t5 WHERE rowid<=5.5}
510} {1 1 2 2 3 3 4 4 5 5}
511do_test rowid-10.8 {
512 execsql {SELECT rowid, a FROM t5 WHERE rowid<5.5}
513} {1 1 2 2 3 3 4 4 5 5}
514do_test rowid-10.9 {
515 execsql {SELECT rowid, a FROM t5 WHERE 5.5>=rowid}
516} {1 1 2 2 3 3 4 4 5 5}
517do_test rowid-10.10 {
518 execsql {SELECT rowid, a FROM t5 WHERE 5.5>rowid}
519} {1 1 2 2 3 3 4 4 5 5}
520do_test rowid-10.11 {
521 execsql {SELECT rowid, a FROM t5 WHERE rowid>=5.5 ORDER BY rowid DESC}
522} {8 8 7 7 6 6}
523do_test rowid-10.11.2 {
524 execsql {SELECT rowid, a FROM t5 WHERE rowid>=5.0 ORDER BY rowid DESC}
525} {8 8 7 7 6 6 5 5}
526do_test rowid-10.12 {
527 execsql {SELECT rowid, a FROM t5 WHERE rowid>5.5 ORDER BY rowid DESC}
528} {8 8 7 7 6 6}
529do_test rowid-10.12.2 {
530 execsql {SELECT rowid, a FROM t5 WHERE rowid>5.0 ORDER BY rowid DESC}
531} {8 8 7 7 6 6}
532do_test rowid-10.13 {
533 execsql {SELECT rowid, a FROM t5 WHERE 5.5<=rowid ORDER BY rowid DESC}
534} {8 8 7 7 6 6}
535do_test rowid-10.14 {
536 execsql {SELECT rowid, a FROM t5 WHERE 5.5<rowid ORDER BY rowid DESC}
537} {8 8 7 7 6 6}
538do_test rowid-10.15 {
539 execsql {SELECT rowid, a FROM t5 WHERE rowid<=5.5 ORDER BY rowid DESC}
540} {5 5 4 4 3 3 2 2 1 1}
541do_test rowid-10.16 {
542 execsql {SELECT rowid, a FROM t5 WHERE rowid<5.5 ORDER BY rowid DESC}
543} {5 5 4 4 3 3 2 2 1 1}
544do_test rowid-10.17 {
545 execsql {SELECT rowid, a FROM t5 WHERE 5.5>=rowid ORDER BY rowid DESC}
546} {5 5 4 4 3 3 2 2 1 1}
547do_test rowid-10.18 {
548 execsql {SELECT rowid, a FROM t5 WHERE 5.5>rowid ORDER BY rowid DESC}
549} {5 5 4 4 3 3 2 2 1 1}
550
551do_test rowid-10.30 {
552 execsql {
553 CREATE TABLE t6(a);
554 INSERT INTO t6(rowid,a) SELECT -a,a FROM t5;
555 SELECT rowid, * FROM t6;
556 }
557} {-8 8 -7 7 -6 6 -5 5 -4 4 -3 3 -2 2 -1 1}
558do_test rowid-10.31.1 {
559 execsql {SELECT rowid, a FROM t6 WHERE rowid>=-5.5}
560} {-5 5 -4 4 -3 3 -2 2 -1 1}
561do_test rowid-10.31.2 {
562 execsql {SELECT rowid, a FROM t6 WHERE rowid>=-5.0}
563} {-5 5 -4 4 -3 3 -2 2 -1 1}
564do_test rowid-10.32.1 {
565 execsql {SELECT rowid, a FROM t6 WHERE rowid>=-5.5 ORDER BY rowid DESC}
566} {-1 1 -2 2 -3 3 -4 4 -5 5}
567do_test rowid-10.32.1 {
568 execsql {SELECT rowid, a FROM t6 WHERE rowid>=-5.0 ORDER BY rowid DESC}
569} {-1 1 -2 2 -3 3 -4 4 -5 5}
570do_test rowid-10.33 {
571 execsql {SELECT rowid, a FROM t6 WHERE -5.5<=rowid}
572} {-5 5 -4 4 -3 3 -2 2 -1 1}
573do_test rowid-10.34 {
574 execsql {SELECT rowid, a FROM t6 WHERE -5.5<=rowid ORDER BY rowid DESC}
575} {-1 1 -2 2 -3 3 -4 4 -5 5}
576do_test rowid-10.35.1 {
577 execsql {SELECT rowid, a FROM t6 WHERE rowid>-5.5}
578} {-5 5 -4 4 -3 3 -2 2 -1 1}
579do_test rowid-10.35.2 {
580 execsql {SELECT rowid, a FROM t6 WHERE rowid>-5.0}
581} {-4 4 -3 3 -2 2 -1 1}
582do_test rowid-10.36.1 {
583 execsql {SELECT rowid, a FROM t6 WHERE rowid>-5.5 ORDER BY rowid DESC}
584} {-1 1 -2 2 -3 3 -4 4 -5 5}
585do_test rowid-10.36.2 {
586 execsql {SELECT rowid, a FROM t6 WHERE rowid>-5.0 ORDER BY rowid DESC}
587} {-1 1 -2 2 -3 3 -4 4}
588do_test rowid-10.37 {
589 execsql {SELECT rowid, a FROM t6 WHERE -5.5<rowid}
590} {-5 5 -4 4 -3 3 -2 2 -1 1}
591do_test rowid-10.38 {
592 execsql {SELECT rowid, a FROM t6 WHERE -5.5<rowid ORDER BY rowid DESC}
593} {-1 1 -2 2 -3 3 -4 4 -5 5}
594do_test rowid-10.39 {
595 execsql {SELECT rowid, a FROM t6 WHERE rowid<=-5.5}
596} {-8 8 -7 7 -6 6}
597do_test rowid-10.40 {
598 execsql {SELECT rowid, a FROM t6 WHERE rowid<=-5.5 ORDER BY rowid DESC}
599} {-6 6 -7 7 -8 8}
600do_test rowid-10.41 {
601 execsql {SELECT rowid, a FROM t6 WHERE -5.5>=rowid}
602} {-8 8 -7 7 -6 6}
603do_test rowid-10.42 {
604 execsql {SELECT rowid, a FROM t6 WHERE -5.5>=rowid ORDER BY rowid DESC}
605} {-6 6 -7 7 -8 8}
606do_test rowid-10.43 {
607 execsql {SELECT rowid, a FROM t6 WHERE rowid<-5.5}
608} {-8 8 -7 7 -6 6}
609do_test rowid-10.44 {
610 execsql {SELECT rowid, a FROM t6 WHERE rowid<-5.5 ORDER BY rowid DESC}
611} {-6 6 -7 7 -8 8}
612do_test rowid-10.44 {
613 execsql {SELECT rowid, a FROM t6 WHERE -5.5>rowid}
614} {-8 8 -7 7 -6 6}
615do_test rowid-10.46 {
616 execsql {SELECT rowid, a FROM t6 WHERE -5.5>rowid ORDER BY rowid DESC}
617} {-6 6 -7 7 -8 8}
618
619# Comparison of rowid against string values.
620#
621do_test rowid-11.1 {
622 execsql {SELECT rowid, a FROM t5 WHERE rowid>'abc'}
623} {}
624do_test rowid-11.2 {
625 execsql {SELECT rowid, a FROM t5 WHERE rowid>='abc'}
626} {}
627do_test rowid-11.3 {
628 execsql {SELECT rowid, a FROM t5 WHERE rowid<'abc'}
629} {1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8}
630do_test rowid-11.4 {
631 execsql {SELECT rowid, a FROM t5 WHERE rowid<='abc'}
632} {1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8}
633
634
drh49449832003-04-15 14:01:43 +0000635
drh3543b3e2001-09-15 00:57:59 +0000636finish_test