Enhance the command-line completion extension to return the names of
[sqlite.git] / ext / rbu / rbuC.test
blob89fd01518f0e616ee519e0ba3ac94666b62d85d6
1 # 2016 March 7
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
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.
10 #***********************************************************************
11 # Tests for RBU focused on the REPLACE operation (rbu_control column
12 # contains integer value 2).
15 source [file join [file dirname [info script]] rbu_common.tcl]
16 set ::testprefix rbuC
18 #-------------------------------------------------------------------------
19 # This test is actually of an UPDATE directive. Just to establish that
20 # these work with UNIQUE indexes before preceding to REPLACE.
22 do_execsql_test 1.0 {
23   CREATE TABLE t1(i INTEGER PRIMARY KEY, a, b, c UNIQUE);
24   INSERT INTO t1 VALUES(1, 'a', 'b', 'c');
27 forcedelete rbu.db
28 do_execsql_test 1.1 {
29   ATTACH 'rbu.db' AS rbu;
30   CREATE TABLE rbu.data_t1(i, a, b, c, rbu_control);
31   INSERT INTO data_t1 VALUES(1, 'a', 'b', 'c', '.xxx');
34 do_test 1.2 {
35   step_rbu test.db rbu.db
36 } {SQLITE_DONE}
38 do_execsql_test 1.3 {
39   SELECT * FROM t1
40 } {
41   1 a b c
44 #-------------------------------------------------------------------------
46 foreach {tn schema} {
47   1 {
48     CREATE TABLE t1(i INTEGER PRIMARY KEY, a, b, c UNIQUE);
49     CREATE INDEX t1a ON t1(a);
50   }
51   2 {
52     CREATE TABLE t1(i PRIMARY KEY, a, b, c UNIQUE);
53     CREATE INDEX t1a ON t1(a);
54   }
55   3 {
56     CREATE TABLE t1(i PRIMARY KEY, a, b, c UNIQUE) WITHOUT ROWID;
57     CREATE INDEX t1a ON t1(a);
58   }
59 } {
60   reset_db
61   forcedelete rbu.db
62   execsql $schema
64   do_execsql_test 2.$tn.0 {
65     INSERT INTO t1 VALUES(1, 'a', 'b', 'c');
66     INSERT INTO t1 VALUES(2, 'b', 'c', 'd');
67     INSERT INTO t1 VALUES(3, 'c', 'd', 'e');
68   }
69   
70   do_execsql_test 2.$tn.1 {
71     ATTACH 'rbu.db' AS rbu;
72     CREATE TABLE rbu.data_t1(i, a, b, c, rbu_control);
73     INSERT INTO data_t1 VALUES(1, 1, 2, 3, 2);
74     INSERT INTO data_t1 VALUES(3, 'c', 'd', 'e', 2);
75     INSERT INTO data_t1 VALUES(4, 'd', 'e', 'f', 2);
76   }
77   
78   do_test 2.$tn.2 {
79     step_rbu test.db rbu.db
80   } {SQLITE_DONE}
81   
82   do_execsql_test 2.$tn.3 {
83     SELECT * FROM t1 ORDER BY i
84   } {
85     1 1 2 3
86     2 b c d
87     3 c d e
88     4 d e f
89   }
90   
91   integrity_check 2.$tn.4
94 foreach {tn schema} {
95   1 {
96     CREATE TABLE t1(a, b, c UNIQUE);
97     CREATE INDEX t1a ON t1(a);
98   }
100   2 {
101     CREATE VIRTUAL TABLE t1 USING fts5(a, b, c);
102   }
103 } {
104   if {$tn==2} { ifcapable !fts5 break }
105   reset_db
106   forcedelete rbu.db
107   execsql $schema
109   do_execsql_test 3.$tn.0 {
110     INSERT INTO t1 VALUES('a', 'b', 'c');
111     INSERT INTO t1 VALUES('b', 'c', 'd');
112     INSERT INTO t1 VALUES('c', 'd', 'e');
113   }
114   
115   do_execsql_test 3.$tn.1 {
116     ATTACH 'rbu.db' AS rbu;
117     CREATE TABLE rbu.data_t1(rbu_rowid, a, b, c, rbu_control);
118     INSERT INTO data_t1 VALUES(1, 1, 2, 3, 2);
119     INSERT INTO data_t1 VALUES(3, 'c', 'd', 'e', 2);
120     INSERT INTO data_t1 VALUES(4, 'd', 'e', 'f', 2);
121   }
122   
123   do_test 3.$tn.2 {
124     step_rbu test.db rbu.db
125   } {SQLITE_DONE}
126   
127   do_execsql_test 3.$tn.3 {
128     SELECT rowid, * FROM t1 ORDER BY 1
129   } {
130     1 1 2 3
131     2 b c d
132     3 c d e
133     4 d e f
134   }
135   
136   integrity_check 3.$tn.4
141 finish_test