xref: /sqlite-3.40.0/ext/rbu/rbuC.test (revision 6ab91a7a)
1# 2016 March 7
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# Tests for RBU focused on the REPLACE operation (rbu_control column
12# contains integer value 2).
13#
14
15source [file join [file dirname [info script]] rbu_common.tcl]
16set ::testprefix rbuC
17
18#-------------------------------------------------------------------------
19# This test is actually of an UPDATE directive. Just to establish that
20# these work with UNIQUE indexes before preceding to REPLACE.
21#
22do_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');
25}
26
27forcedelete rbu.db
28do_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');
32}
33
34do_test 1.2 {
35  step_rbu test.db rbu.db
36} {SQLITE_DONE}
37
38do_execsql_test 1.3 {
39  SELECT * FROM t1
40} {
41  1 a b c
42}
43
44#-------------------------------------------------------------------------
45#
46foreach {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
63
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
92}
93
94foreach {tn schema} {
95  1 {
96    CREATE TABLE t1(a, b, c UNIQUE);
97    CREATE INDEX t1a ON t1(a);
98  }
99
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
108
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
137}
138
139
140
141finish_test
142