xref: /sqlite-3.40.0/test/btree02.test (revision aa243aa7)
1d2f83139Sdrh# 2015-03-25
2d2f83139Sdrh#
3d2f83139Sdrh# The author disclaims copyright to this source code.  In place of
4d2f83139Sdrh# a legal notice, here is a blessing:
5d2f83139Sdrh#
6d2f83139Sdrh#    May you do good and not evil.
7d2f83139Sdrh#    May you find forgiveness for yourself and forgive others.
8d2f83139Sdrh#    May you share freely, never taking more than you give.
9d2f83139Sdrh#
10d2f83139Sdrh#***********************************************************************
11d2f83139Sdrh# This file implements regression tests for SQLite library.
12d2f83139Sdrh#
13d2f83139Sdrh# The focus of this script is making multiple calls to saveCursorPosition()
14d2f83139Sdrh# and restoreCursorPosition() when cursors have eState==CURSOR_SKIPNEXT
15d2f83139Sdrh#
16d2f83139Sdrh
17d2f83139Sdrhset testdir [file dirname $argv0]
18d2f83139Sdrhsource $testdir/tester.tcl
19d2f83139Sdrh
20d2f83139Sdrhload_static_extension db eval
21d2f83139Sdrhdo_execsql_test btree02-100 {
22d2f83139Sdrh  CREATE TABLE t1(a TEXT, ax INTEGER, b INT, PRIMARY KEY(a,ax)) WITHOUT ROWID;
23d2f83139Sdrh  WITH RECURSIVE c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<10)
24*aa243aa7Sdrh    INSERT INTO t1(a,ax,b) SELECT printf('%02x',i+160), random(), i FROM c;
25d2f83139Sdrh  CREATE INDEX t1a ON t1(a);
26d2f83139Sdrh  CREATE TABLE t2(x,y);
27d2f83139Sdrh  CREATE TABLE t3(cnt);
28d2f83139Sdrh  WITH RECURSIVE c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<4)
29d2f83139Sdrh    INSERT INTO t3(cnt) SELECT i FROM c;
30d2f83139Sdrh  SELECT count(*) FROM t1;
31d2f83139Sdrh} {10}
32*aa243aa7Sdrh
33*aa243aa7Sdrhproc showt1 {} {
34*aa243aa7Sdrh  puts -nonewline "t1: "
35*aa243aa7Sdrh  puts [db eval {SELECT printf('(%s,%s)',quote(a),quote(b)) FROM t1}]
36*aa243aa7Sdrh}
37*aa243aa7Sdrh
38d2f83139Sdrhdo_test btree02-110 {
39d2f83139Sdrh  db eval BEGIN
40d2f83139Sdrh  set i 0
41*aa243aa7Sdrh  # showt1
42d2f83139Sdrh  db eval {SELECT a, ax, b, cnt FROM t1 CROSS JOIN t3 WHERE b IS NOT NULL} {
43*aa243aa7Sdrh    if {$a==""} continue
44d2f83139Sdrh    db eval {INSERT INTO t2(x,y) VALUES($b,$cnt)}
45d2f83139Sdrh    # puts "a,b,cnt = ($a,$b,$cnt)"
46d2f83139Sdrh    incr i
47d2f83139Sdrh    if {$i%2==1} {
48d2f83139Sdrh      set bx [expr {$b+1000}]
49d2f83139Sdrh      #  puts "INSERT ($a),$bx"
50d2f83139Sdrh      db eval {INSERT INTO t1(a,ax,b) VALUES(printf('(%s)',$a),random(),$bx)}
51*aa243aa7Sdrh      # showt1
52d2f83139Sdrh    } else {
53d2f83139Sdrh      # puts "DELETE a=$a"
54d2f83139Sdrh      db eval {DELETE FROM t1 WHERE a=$a}
55*aa243aa7Sdrh      # showt1
56d2f83139Sdrh    }
57d2f83139Sdrh    db eval {COMMIT; BEGIN}
58d2f83139Sdrh  }
59d2f83139Sdrh  db one {COMMIT; SELECT count(*) FROM t1;}
60*aa243aa7Sdrh} {10}
61d2f83139Sdrh
62d2f83139Sdrhfinish_test
63