xref: /sqlite-3.40.0/ext/rbu/rbu7.test (revision 6ab91a7a)
1# 2014 October 21
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#
12# This file contains tests for the RBU module.
13#
14
15
16if {![info exists testdir]} {
17  set testdir [file join [file dirname [info script]] .. .. test]
18}
19source $testdir/tester.tcl
20set ::testprefix rbu7
21
22# Test index:
23#
24#   1.*: That affinities are correctly applied to values within the
25#        RBU database.
26#
27#   2.*: Tests for multi-column primary keys.
28#
29
30do_test 1.0 {
31  execsql {
32    CREATE TABLE t1(a INT PRIMARY KEY, b) WITHOUT ROWID;
33    INSERT INTO t1 VALUES(1, 'abc');
34    INSERT INTO t1 VALUES(2, 'def');
35  }
36
37  forcedelete rbu.db
38  sqlite3 rbu rbu.db
39  rbu eval {
40    CREATE TABLE data_t1(a, b, rbu_control);
41    INSERT INTO data_t1 VALUES('1', NULL, 1);
42  }
43  rbu close
44} {}
45
46do_test 1.1 {
47  sqlite3rbu rbu test.db rbu.db
48  while { [rbu step]=="SQLITE_OK" } {}
49  rbu close
50} {SQLITE_DONE}
51
52sqlite3 db test.db
53do_execsql_test 1.2 {
54  SELECT * FROM t1
55} {2 def}
56
57#-------------------------------------------------------------------------
58#
59foreach {tn tbl} {
60  1 { CREATE TABLE t1(a, b, c, PRIMARY KEY(a, b)) WITHOUT ROWID }
61  2 { CREATE TABLE t1(a, b, c, PRIMARY KEY(a, b)) }
62} {
63  reset_db
64
65  execsql $tbl
66  do_execsql_test 2.$tn.1 {
67    CREATE INDEX t1c ON t1(c);
68    INSERT INTO t1 VALUES(1, 1, 'a');
69    INSERT INTO t1 VALUES(1, 2, 'b');
70    INSERT INTO t1 VALUES(2, 1, 'c');
71    INSERT INTO t1 VALUES(2, 2, 'd');
72  }
73
74  do_test 2.$tn.2 {
75    forcedelete rbu.db
76    sqlite3 rbu rbu.db
77    execsql {
78      CREATE TABLE data_t1(a, b, c, rbu_control);
79      INSERT INTO data_t1 VALUES(3, 1, 'e', 0);
80      INSERT INTO data_t1 VALUES(3, 2, 'f', 0);
81      INSERT INTO data_t1 VALUES(1, 2, NULL, 1);
82      INSERT INTO data_t1 VALUES(2, 1, 'X', '..x');
83    } rbu
84    rbu close
85  } {}
86
87  do_test 2.$tn.3 {
88    set rc "SQLITE_OK"
89    while {$rc == "SQLITE_OK"} {
90      sqlite3rbu rbu test.db rbu.db
91      rbu step
92      set rc [rbu close]
93    }
94    set rc
95  } {SQLITE_DONE}
96
97  do_execsql_test 2.$tn.1 {
98    SELECT * FROM t1 ORDER BY a, b
99  } {
100    1 1 a
101    2 1 X
102    2 2 d
103    3 1 e
104    3 2 f
105  }
106}
107
108finish_test
109