xref: /sqlite-3.40.0/test/rowid.test (revision 751f4121)
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 magic ROWID column that is
13# found on all tables.
14#
15# $Id: rowid.test,v 1.13 2004/01/14 21:59:24 drh Exp $
16
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}
64do_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} {}
71do_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
90# We can insert or update the ROWID column.
91#
92do_test rowid-2.1 {
93  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}}
98do_test rowid-2.2 {
99  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}}
104do_test rowid-2.3 {
105  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}}
110do_test rowid-2.4 {
111  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}}
116do_test rowid-2.5 {
117  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}}
122do_test rowid-2.6 {
123  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}}
128
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}
137} {1 2 5 7 9}
138do_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}
143} {1 3 5 7 9}
144
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);
170    INSERT INTO t2 VALUES(0,2,3);
171    INSERT INTO t2 VALUES(4,5,6);
172    INSERT INTO t2 VALUES(7,8,9);
173    SELECT * FROM t2 ORDER BY x;
174  }
175} {0 2 3 4 5 6 7 8 9}
176do_test rowid-3.2 {
177  execsql {SELECT * FROM t2 ORDER BY rowid}
178} {0 2 3 4 5 6 7 8 9}
179do_test rowid-3.3 {
180  execsql {SELECT rowid, x, y FROM t2 ORDER BY rowid}
181} {0 2 3 4 5 6 7 8 9}
182do_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}
189do_probtest rowid-3.5 {
190  set r1 [execsql {SELECT _rowid_, rowid FROM t2 ORDER BY rowid}]
191  foreach {a b c d e f} $r1 {}
192  expr {$a!=$b && $c!=$d && $e!=$f}
193} {1}
194
195# Let's try some more complex examples, including some joins.
196#
197do_test rowid-4.1 {
198  execsql {
199    DELETE FROM t1;
200    DELETE FROM t2;
201  }
202  for {set i 1} {$i<=50} {incr i} {
203    execsql "INSERT INTO t1(x,y) VALUES($i,[expr {$i*$i}])"
204  }
205  execsql {INSERT INTO t2 SELECT _rowid_, x*y, y*y FROM t1}
206  execsql {SELECT t2.y FROM t1, t2 WHERE t1.x==4 AND t1.rowid==t2.rowid}
207} {256}
208do_test rowid-4.2 {
209  execsql {SELECT t2.y FROM t2, t1 WHERE t1.x==4 AND t1.rowid==t2.rowid}
210} {256}
211do_test rowid-4.2.1 {
212  execsql {SELECT t2.y FROM t2, t1 WHERE t1.x==4 AND t1.oid==t2.rowid}
213} {256}
214do_test rowid-4.2.2 {
215  execsql {SELECT t2.y FROM t2, t1 WHERE t1.x==4 AND t1._rowid_==t2.rowid}
216} {256}
217do_test rowid-4.2.3 {
218  execsql {SELECT t2.y FROM t2, t1 WHERE t1.x==4 AND t2.rowid==t1.rowid}
219} {256}
220do_test rowid-4.2.4 {
221  execsql {SELECT t2.y FROM t2, t1 WHERE t2.rowid==t1.oid AND t1.x==4}
222} {256}
223do_test rowid-4.2.5 {
224  execsql {SELECT t2.y FROM t1, t2 WHERE t1.x==4 AND t1._rowid_==t2.rowid}
225} {256}
226do_test rowid-4.2.6 {
227  execsql {SELECT t2.y FROM t1, t2 WHERE t1.x==4 AND t2.rowid==t1.rowid}
228} {256}
229do_test rowid-4.2.7 {
230  execsql {SELECT t2.y FROM t1, t2 WHERE t2.rowid==t1.oid AND t1.x==4}
231} {256}
232do_test rowid-4.3 {
233  execsql {CREATE INDEX idxt1 ON t1(x)}
234  execsql {SELECT t2.y FROM t1, t2 WHERE t1.x==4 AND t1.rowid==t2.rowid}
235} {256}
236do_test rowid-4.3.1 {
237  execsql {SELECT t2.y FROM t1, t2 WHERE t1.x==4 AND t1._rowid_==t2.rowid}
238} {256}
239do_test rowid-4.3.2 {
240  execsql {SELECT t2.y FROM t1, t2 WHERE t2.rowid==t1.oid AND 4==t1.x}
241} {256}
242do_test rowid-4.4 {
243  execsql {SELECT t2.y FROM t2, t1 WHERE t1.x==4 AND t1.rowid==t2.rowid}
244} {256}
245do_test rowid-4.4.1 {
246  execsql {SELECT t2.y FROM t2, t1 WHERE t1.x==4 AND t1._rowid_==t2.rowid}
247} {256}
248do_test rowid-4.4.2 {
249  execsql {SELECT t2.y FROM t2, t1 WHERE t2.rowid==t1.oid AND 4==t1.x}
250} {256}
251do_test rowid-4.5 {
252  execsql {CREATE INDEX idxt2 ON t2(y)}
253  set sqlite_search_count 0
254  concat [execsql {
255    SELECT t1.x FROM t2, t1
256    WHERE t2.y==256 AND t1.rowid==t2.rowid
257  }] $sqlite_search_count
258} {4 3}
259do_test rowid-4.5.1 {
260  set sqlite_search_count 0
261  concat [execsql {
262    SELECT t1.x FROM t2, t1
263    WHERE t1.OID==t2.rowid AND t2.y==81
264  }] $sqlite_search_count
265} {3 3}
266do_test rowid-4.6 {
267  execsql {
268    SELECT t1.x FROM t1, t2
269    WHERE t2.y==256 AND t1.rowid==t2.rowid
270  }
271} {4}
272
273do_test rowid-5.1 {
274  execsql {DELETE FROM t1 WHERE _rowid_ IN (SELECT oid FROM t1 WHERE x>8)}
275  execsql {SELECT max(x) FROM t1}
276} {8}
277
278# Make sure a "WHERE rowid=X" clause works when there is no ROWID of X.
279#
280do_test rowid-6.1 {
281  execsql {
282    SELECT x FROM t1
283  }
284} {1 2 3 4 5 6 7 8}
285do_test rowid-6.2 {
286  for {set ::norow 1} {1} {incr ::norow} {
287    if {[execsql "SELECT x FROM t1 WHERE rowid=$::norow"]==""}  break
288  }
289  execsql [subst {
290    DELETE FROM t1 WHERE rowid=$::norow
291  }]
292} {}
293do_test rowid-6.3 {
294  execsql {
295    SELECT x FROM t1
296  }
297} {1 2 3 4 5 6 7 8}
298
299# Beginning with version 2.3.4, SQLite computes rowids of new rows by
300# finding the maximum current rowid and adding one.  It falls back to
301# the old random algorithm if the maximum rowid is the largest integer.
302# The following tests are for this new behavior.
303#
304do_test rowid-7.0 {
305  execsql {
306    DELETE FROM t1;
307    DROP TABLE t2;
308    DROP INDEX idxt1;
309    INSERT INTO t1 VALUES(1,2);
310    SELECT rowid, * FROM t1;
311  }
312} {1 1 2}
313do_test rowid-7.1 {
314  execsql {
315    INSERT INTO t1 VALUES(99,100);
316    SELECT rowid,* FROM t1
317  }
318} {1 1 2 2 99 100}
319do_test rowid-7.2 {
320  execsql {
321    CREATE TABLE t2(a INTEGER PRIMARY KEY, b);
322    INSERT INTO t2(b) VALUES(55);
323    SELECT * FROM t2;
324  }
325} {1 55}
326do_test rowid-7.3 {
327  execsql {
328    INSERT INTO t2(b) VALUES(66);
329    SELECT * FROM t2;
330  }
331} {1 55 2 66}
332do_test rowid-7.4 {
333  execsql {
334    INSERT INTO t2(a,b) VALUES(1000000,77);
335    INSERT INTO t2(b) VALUES(88);
336    SELECT * FROM t2;
337  }
338} {1 55 2 66 1000000 77 1000001 88}
339do_test rowid-7.5 {
340  execsql {
341    INSERT INTO t2(a,b) VALUES(2147483647,99);
342    INSERT INTO t2(b) VALUES(11);
343    SELECT b FROM t2 ORDER BY b;
344  }
345} {11 55 66 77 88 99}
346do_test rowid-7.6 {
347  execsql {
348    SELECT b FROM t2 WHERE a NOT IN(1,2,1000000,1000001,2147483647);
349  }
350} {11}
351do_test rowid-7.7 {
352  execsql {
353    INSERT INTO t2(b) VALUES(22);
354    INSERT INTO t2(b) VALUES(33);
355    INSERT INTO t2(b) VALUES(44);
356    INSERT INTO t2(b) VALUES(55);
357    SELECT b FROM t2 WHERE a NOT IN(1,2,1000000,1000001,2147483647) ORDER BY b;
358  }
359} {11 22 33 44 55}
360do_test rowid-7.8 {
361  execsql {
362    DELETE FROM t2 WHERE a!=2;
363    INSERT INTO t2(b) VALUES(111);
364    SELECT * FROM t2;
365  }
366} {2 66 3 111}
367
368# Make sure AFTER triggers that do INSERTs do not change the last_insert_rowid.
369# Ticket #290
370#
371do_test rowid-8.1 {
372  execsql {
373    CREATE TABLE t3(a integer primary key);
374    CREATE TABLE t4(x);
375    INSERT INTO t4 VALUES(1);
376    CREATE TRIGGER r3 AFTER INSERT on t3 FOR EACH ROW BEGIN
377      INSERT INTO t4 VALUES(NEW.a+10);
378    END;
379    SELECT * FROM t3;
380  }
381} {}
382do_test rowid-8.2 {
383  execsql {
384    SELECT rowid, * FROM t4;
385  }
386} {1 1}
387do_test rowid-8.3 {
388  execsql {
389    INSERT INTO t3 VALUES(123);
390    SELECT last_insert_rowid();
391  }
392} {123}
393do_test rowid-8.4 {
394  execsql {
395    SELECT * FROM t3;
396  }
397} {123}
398do_test rowid-8.5 {
399  execsql {
400    SELECT rowid, * FROM t4;
401  }
402} {1 1 2 133}
403do_test rowid-8.6 {
404  execsql {
405    INSERT INTO t3 VALUES(NULL);
406    SELECT last_insert_rowid();
407  }
408} {124}
409do_test rowid-8.7 {
410  execsql {
411    SELECT * FROM t3;
412  }
413} {123 124}
414do_test rowid-8.8 {
415  execsql {
416    SELECT rowid, * FROM t4;
417  }
418} {1 1 2 133 3 134}
419
420# ticket #377: Comparison between integer primiary key and floating point
421# values.
422#
423do_test rowid-9.1 {
424  execsql {
425    SELECT * FROM t3 WHERE a<123.5
426  }
427} {123}
428do_test rowid-9.2 {
429  execsql {
430    SELECT * FROM t3 WHERE a<124.5
431  }
432} {123 124}
433do_test rowid-9.3 {
434  execsql {
435    SELECT * FROM t3 WHERE a>123.5
436  }
437} {124}
438do_test rowid-9.4 {
439  execsql {
440    SELECT * FROM t3 WHERE a>122.5
441  }
442} {123 124}
443do_test rowid-9.5 {
444  execsql {
445    SELECT * FROM t3 WHERE a==123.5
446  }
447} {}
448do_test rowid-9.6 {
449  execsql {
450    SELECT * FROM t3 WHERE a==123.000
451  }
452} {123}
453do_test rowid-9.7 {
454  execsql {
455    SELECT * FROM t3 WHERE a>100.5 AND a<200.5
456  }
457} {123 124}
458do_test rowid-9.8 {
459  execsql {
460    SELECT * FROM t3 WHERE a>'xyz';
461  }
462} {}
463do_test rowid-9.9 {
464  execsql {
465    SELECT * FROM t3 WHERE a<'xyz';
466  }
467} {123 124}
468do_test rowid-9.10 {
469  execsql {
470    SELECT * FROM t3 WHERE a>=122.9 AND a<=123.1
471  }
472} {123}
473
474# Ticket #567.  Comparisons of ROWID or integery primary key against
475# floating point numbers still do not always work.
476#
477do_test rowid-10.1 {
478  execsql {
479    CREATE TABLE t5(a);
480    INSERT INTO t5 VALUES(1);
481    INSERT INTO t5 VALUES(2);
482    INSERT INTO t5 SELECT a+2 FROM t5;
483    INSERT INTO t5 SELECT a+4 FROM t5;
484    SELECT rowid, * FROM t5;
485  }
486} {1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8}
487do_test rowid-10.2 {
488  execsql {SELECT rowid, a FROM t5 WHERE rowid>=5.5}
489} {6 6 7 7 8 8}
490do_test rowid-10.3 {
491  execsql {SELECT rowid, a FROM t5 WHERE rowid>=5.0}
492} {5 5 6 6 7 7 8 8}
493do_test rowid-10.4 {
494  execsql {SELECT rowid, a FROM t5 WHERE rowid>5.5}
495} {6 6 7 7 8 8}
496do_test rowid-10.3.2 {
497  execsql {SELECT rowid, a FROM t5 WHERE rowid>5.0}
498} {6 6 7 7 8 8}
499do_test rowid-10.5 {
500  execsql {SELECT rowid, a FROM t5 WHERE 5.5<=rowid}
501} {6 6 7 7 8 8}
502do_test rowid-10.6 {
503  execsql {SELECT rowid, a FROM t5 WHERE 5.5<rowid}
504} {6 6 7 7 8 8}
505do_test rowid-10.7 {
506  execsql {SELECT rowid, a FROM t5 WHERE rowid<=5.5}
507} {1 1 2 2 3 3 4 4 5 5}
508do_test rowid-10.8 {
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.9 {
512  execsql {SELECT rowid, a FROM t5 WHERE 5.5>=rowid}
513} {1 1 2 2 3 3 4 4 5 5}
514do_test rowid-10.10 {
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.11 {
518  execsql {SELECT rowid, a FROM t5 WHERE rowid>=5.5 ORDER BY rowid DESC}
519} {8 8 7 7 6 6}
520do_test rowid-10.11.2 {
521  execsql {SELECT rowid, a FROM t5 WHERE rowid>=5.0 ORDER BY rowid DESC}
522} {8 8 7 7 6 6 5 5}
523do_test rowid-10.12 {
524  execsql {SELECT rowid, a FROM t5 WHERE rowid>5.5 ORDER BY rowid DESC}
525} {8 8 7 7 6 6}
526do_test rowid-10.12.2 {
527  execsql {SELECT rowid, a FROM t5 WHERE rowid>5.0 ORDER BY rowid DESC}
528} {8 8 7 7 6 6}
529do_test rowid-10.13 {
530  execsql {SELECT rowid, a FROM t5 WHERE 5.5<=rowid ORDER BY rowid DESC}
531} {8 8 7 7 6 6}
532do_test rowid-10.14 {
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.15 {
536  execsql {SELECT rowid, a FROM t5 WHERE rowid<=5.5 ORDER BY rowid DESC}
537} {5 5 4 4 3 3 2 2 1 1}
538do_test rowid-10.16 {
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.17 {
542  execsql {SELECT rowid, a FROM t5 WHERE 5.5>=rowid ORDER BY rowid DESC}
543} {5 5 4 4 3 3 2 2 1 1}
544do_test rowid-10.18 {
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}
547
548do_test rowid-10.30 {
549  execsql {
550    CREATE TABLE t6(a);
551    INSERT INTO t6(rowid,a) SELECT -a,a FROM t5;
552    SELECT rowid, * FROM t6;
553  }
554} {-8 8 -7 7 -6 6 -5 5 -4 4 -3 3 -2 2 -1 1}
555do_test rowid-10.31.1 {
556  execsql {SELECT rowid, a FROM t6 WHERE rowid>=-5.5}
557} {-5 5 -4 4 -3 3 -2 2 -1 1}
558do_test rowid-10.31.2 {
559  execsql {SELECT rowid, a FROM t6 WHERE rowid>=-5.0}
560} {-5 5 -4 4 -3 3 -2 2 -1 1}
561do_test rowid-10.32.1 {
562  execsql {SELECT rowid, a FROM t6 WHERE rowid>=-5.5 ORDER BY rowid DESC}
563} {-1 1 -2 2 -3 3 -4 4 -5 5}
564do_test rowid-10.32.1 {
565  execsql {SELECT rowid, a FROM t6 WHERE rowid>=-5.0 ORDER BY rowid DESC}
566} {-1 1 -2 2 -3 3 -4 4 -5 5}
567do_test rowid-10.33 {
568  execsql {SELECT rowid, a FROM t6 WHERE -5.5<=rowid}
569} {-5 5 -4 4 -3 3 -2 2 -1 1}
570do_test rowid-10.34 {
571  execsql {SELECT rowid, a FROM t6 WHERE -5.5<=rowid ORDER BY rowid DESC}
572} {-1 1 -2 2 -3 3 -4 4 -5 5}
573do_test rowid-10.35.1 {
574  execsql {SELECT rowid, a FROM t6 WHERE rowid>-5.5}
575} {-5 5 -4 4 -3 3 -2 2 -1 1}
576do_test rowid-10.35.2 {
577  execsql {SELECT rowid, a FROM t6 WHERE rowid>-5.0}
578} {-4 4 -3 3 -2 2 -1 1}
579do_test rowid-10.36.1 {
580  execsql {SELECT rowid, a FROM t6 WHERE rowid>-5.5 ORDER BY rowid DESC}
581} {-1 1 -2 2 -3 3 -4 4 -5 5}
582do_test rowid-10.36.2 {
583  execsql {SELECT rowid, a FROM t6 WHERE rowid>-5.0 ORDER BY rowid DESC}
584} {-1 1 -2 2 -3 3 -4 4}
585do_test rowid-10.37 {
586  execsql {SELECT rowid, a FROM t6 WHERE -5.5<rowid}
587} {-5 5 -4 4 -3 3 -2 2 -1 1}
588do_test rowid-10.38 {
589  execsql {SELECT rowid, a FROM t6 WHERE -5.5<rowid ORDER BY rowid DESC}
590} {-1 1 -2 2 -3 3 -4 4 -5 5}
591do_test rowid-10.39 {
592  execsql {SELECT rowid, a FROM t6 WHERE rowid<=-5.5}
593} {-8 8 -7 7 -6 6}
594do_test rowid-10.40 {
595  execsql {SELECT rowid, a FROM t6 WHERE rowid<=-5.5 ORDER BY rowid DESC}
596} {-6 6 -7 7 -8 8}
597do_test rowid-10.41 {
598  execsql {SELECT rowid, a FROM t6 WHERE -5.5>=rowid}
599} {-8 8 -7 7 -6 6}
600do_test rowid-10.42 {
601  execsql {SELECT rowid, a FROM t6 WHERE -5.5>=rowid ORDER BY rowid DESC}
602} {-6 6 -7 7 -8 8}
603do_test rowid-10.43 {
604  execsql {SELECT rowid, a FROM t6 WHERE rowid<-5.5}
605} {-8 8 -7 7 -6 6}
606do_test rowid-10.44 {
607  execsql {SELECT rowid, a FROM t6 WHERE rowid<-5.5 ORDER BY rowid DESC}
608} {-6 6 -7 7 -8 8}
609do_test rowid-10.44 {
610  execsql {SELECT rowid, a FROM t6 WHERE -5.5>rowid}
611} {-8 8 -7 7 -6 6}
612do_test rowid-10.46 {
613  execsql {SELECT rowid, a FROM t6 WHERE -5.5>rowid ORDER BY rowid DESC}
614} {-6 6 -7 7 -8 8}
615
616# Comparison of rowid against string values.
617#
618do_test rowid-11.1 {
619  execsql {SELECT rowid, a FROM t5 WHERE rowid>'abc'}
620} {}
621do_test rowid-11.2 {
622  execsql {SELECT rowid, a FROM t5 WHERE rowid>='abc'}
623} {}
624do_test rowid-11.3 {
625  execsql {SELECT rowid, a FROM t5 WHERE rowid<'abc'}
626} {1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8}
627do_test rowid-11.4 {
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}
630
631
632
633finish_test
634