1522efc62Sdrh# 2009 November 10 2522efc62Sdrh# 3522efc62Sdrh# The author disclaims copyright to this source code. In place of 4522efc62Sdrh# a legal notice, here is a blessing: 5522efc62Sdrh# 6522efc62Sdrh# May you do good and not evil. 7522efc62Sdrh# May you find forgiveness for yourself and forgive others. 8522efc62Sdrh# May you share freely, never taking more than you give. 9522efc62Sdrh# 10522efc62Sdrh#*********************************************************************** 11522efc62Sdrh# This file implements regression tests for SQLite library. 12522efc62Sdrh# 13522efc62Sdrh# This file implements tests for the "intarray" object implemented 14522efc62Sdrh# in test_intarray.c. 15522efc62Sdrh# 16522efc62Sdrh 17522efc62Sdrhset testdir [file dirname $argv0] 18522efc62Sdrhsource $testdir/tester.tcl 19522efc62Sdrh 20522efc62Sdrhifcapable !vtab { 21522efc62Sdrh return 22522efc62Sdrh} 23522efc62Sdrh 24522efc62Sdrhdo_test intarray-1.0 { 25522efc62Sdrh db eval { 26522efc62Sdrh CREATE TABLE t1(a INTEGER PRIMARY KEY, b); 27522efc62Sdrh } 28522efc62Sdrh for {set i 1} {$i<=999} {incr i} { 29522efc62Sdrh set b [format {x%03d} $i] 30522efc62Sdrh db eval {INSERT INTO t1(a,b) VALUES($i,$b)} 31522efc62Sdrh } 32522efc62Sdrh db eval { 3363b38789Sdrh CREATE TABLE t2(x INTEGER PRIMARY KEY, y); 3463b38789Sdrh INSERT INTO t2 SELECT * FROM t1; 35522efc62Sdrh SELECT b FROM t1 WHERE a IN (12,34,56,78) ORDER BY a 36522efc62Sdrh } 37522efc62Sdrh} {x012 x034 x056 x078} 38522efc62Sdrh 39522efc62Sdrhdo_test intarray-1.1 { 40522efc62Sdrh set ia1 [sqlite3_intarray_create db ia1] 41522efc62Sdrh set ia2 [sqlite3_intarray_create db ia2] 42522efc62Sdrh set ia3 [sqlite3_intarray_create db ia3] 43522efc62Sdrh set ia4 [sqlite3_intarray_create db ia4] 44522efc62Sdrh db eval { 45e0a04a36Sdrh SELECT type, name FROM temp.sqlite_master 46522efc62Sdrh ORDER BY name 47522efc62Sdrh } 48522efc62Sdrh} {table ia1 table ia2 table ia3 table ia4} 49522efc62Sdrh 50*cc5979dbSdrh# Verify the ability to DROP and recreate an intarray virtual table. 51f8181eaaSdrhdo_test intarray-1.1b { 52f8181eaaSdrh db eval {DROP TABLE ia1} 53*cc5979dbSdrh set rc [catch {sqlite3_intarray_create db ia1} ia1] 54*cc5979dbSdrh lappend rc $ia1 55*cc5979dbSdrh} {/0 [0-9A-Z]+/} 56f8181eaaSdrh 57522efc62Sdrhdo_test intarray-1.2 { 58522efc62Sdrh db eval { 59522efc62Sdrh SELECT b FROM t1 WHERE a IN ia3 ORDER BY a 60522efc62Sdrh } 61522efc62Sdrh} {} 62522efc62Sdrh 63522efc62Sdrhdo_test intarray-1.3 { 64522efc62Sdrh sqlite3_intarray_bind $ia3 45 123 678 65522efc62Sdrh db eval { 66522efc62Sdrh SELECT b FROM t1 WHERE a IN ia3 ORDER BY a 67522efc62Sdrh } 68522efc62Sdrh} {x045 x123 x678} 69522efc62Sdrh 7063b38789Sdrhdo_test intarray-1.4 { 7163b38789Sdrh db eval { 7263b38789Sdrh SELECT count(b) FROM t1 WHERE a NOT IN ia3 ORDER BY a 7363b38789Sdrh } 7463b38789Sdrh} {996} 7563b38789Sdrh 7663b38789Sdrh#explain {SELECT b FROM t1 WHERE a NOT IN ia3} 7763b38789Sdrh 7863b38789Sdrhdo_test intarray-1.5 { 7963b38789Sdrh set cmd sqlite3_intarray_bind 8063b38789Sdrh lappend cmd $ia1 8163b38789Sdrh for {set i 1} {$i<=999} {incr i} { 8263b38789Sdrh lappend cmd $i 8363b38789Sdrh lappend cmd [expr {$i+1000}] 8463b38789Sdrh lappend cmd [expr {$i+2000}] 8563b38789Sdrh } 8663b38789Sdrh eval $cmd 8763b38789Sdrh db eval { 8863b38789Sdrh REPLACE INTO t1 SELECT * FROM t2; 8963b38789Sdrh DELETE FROM t1 WHERE a NOT IN ia1; 9063b38789Sdrh SELECT count(*) FROM t1; 9163b38789Sdrh } 9263b38789Sdrh} {999} 9363b38789Sdrh 9463b38789Sdrhdo_test intarray-1.6 { 9563b38789Sdrh db eval { 9663b38789Sdrh DELETE FROM t1 WHERE a IN ia1; 9763b38789Sdrh SELECT count(*) FROM t1; 9863b38789Sdrh } 9963b38789Sdrh} {0} 10063b38789Sdrh 10163b38789Sdrhdo_test intarray-2.1 { 10263b38789Sdrh db eval { 10363b38789Sdrh CREATE TEMP TABLE t3(p,q); 10463b38789Sdrh INSERT INTO t3 SELECT * FROM t2; 10563b38789Sdrh SELECT count(*) FROM t3 WHERE p IN ia1; 10663b38789Sdrh } 10763b38789Sdrh} {999} 10863b38789Sdrh 10963b38789Sdrhdo_test intarray-2.2 { 11063b38789Sdrh set ia5 [sqlite3_intarray_create db ia5] 11163b38789Sdrh db eval { 11263b38789Sdrh SELECT count(*) FROM t3 WHERE p IN ia1; 11363b38789Sdrh } 11463b38789Sdrh} {999} 115522efc62Sdrh 116522efc62Sdrhfinish_test 117