xref: /sqlite-3.40.0/test/intarray.test (revision cc5979db)
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