Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Side by Side Diff: third_party/sqlite/sqlite-src-3080704/test/vtab_shared.test

Issue 2363173002: [sqlite] Remove obsolete reference version 3.8.7.4. (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # 2007 April 16
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 # This file tests interactions between the virtual table and
12 # shared-schema functionality.
13 #
14 # $Id: vtab_shared.test,v 1.3 2009/07/24 17:58:53 danielk1977 Exp $
15
16 set testdir [file dirname $argv0]
17 source $testdir/tester.tcl
18 set testprefix vtab_shared
19
20 ifcapable !vtab||!shared_cache {
21 finish_test
22 return
23 }
24
25 db close
26 sqlite3_enable_shared_cache 1
27 sqlite3 db test.db
28 sqlite3 db2 test.db
29
30 do_test vtab_shared-1.1 {
31 register_echo_module [sqlite3_connection_pointer db]
32 execsql {
33 CREATE TABLE t0(a, b, c);
34 INSERT INTO t0 VALUES(1, 2, 3);
35 CREATE VIRTUAL TABLE t1 USING echo(t0);
36 }
37 } {}
38
39 do_test vtab_shared-1.2 {
40 execsql { SELECT * FROM t1 } db
41 } {1 2 3}
42
43 # Fails because the 'echo' module has not been registered with connection db2
44 do_test vtab_shared-1.3 {
45 catchsql { SELECT * FROM t1 } db2
46 } {1 {no such module: echo}}
47
48 do_test vtab_shared-1.4 {
49 execsql { SELECT * FROM t0 } db2
50 } {1 2 3}
51
52 do_test vtab_shared-1.5 {
53 register_echo_module [sqlite3_connection_pointer db2]
54 execsql { SELECT * FROM t1 } db
55 } {1 2 3}
56
57 # Works after the module is registered with db2
58 do_test vtab_shared-1.6 {
59 execsql { SELECT * FROM t1 } db2
60 } {1 2 3}
61
62 # Set a write-lock on table t0 using connection [db]. Then try to read from
63 # virtual table t1 using [db2]. That this returns an SQLITE_LOCKED error
64 # shows that the correct sqlite3_vtab is being used.
65 #
66 do_test vtab_shared-1.8.1 {
67 execsql {
68 BEGIN;
69 INSERT INTO t1 VALUES(4, 5, 6);
70 SELECT * FROM t1;
71 }
72 } {1 2 3 4 5 6}
73 do_test vtab_shared-1.8.2 {
74 catchsql { SELECT * FROM t1 } db2
75 } {1 {database table is locked}}
76 do_test vtab_shared-1.8.3 {
77 catchsql { SELECT * FROM t0 } db2
78 } {1 {database table is locked: t0}}
79 do_test vtab_shared-1.8.4 {
80 execsql { SELECT * FROM t0 } db
81 } {1 2 3 4 5 6}
82 do_test vtab_shared-1.8.5 {
83 execsql { COMMIT } db
84 execsql { SELECT * FROM t1 } db2
85 } {1 2 3 4 5 6}
86
87 # While a SELECT is active on virtual table t1 via connection [db], close
88 # [db2]. This causes the schema to be reset internally. Verify that this
89 # does not cause a problem.
90 #
91 foreach {iTest dbSelect dbClose} {
92 1 db db2
93 2 db db2
94 3 db2 db
95 } {
96 do_test vtab_shared-1.9.$iTest {
97 set res [list]
98 $dbSelect eval { SELECT * FROM t1 } {
99 if {$a == 1} {$dbClose close}
100 lappend res $a $b $c
101 }
102 sqlite3 $dbClose test.db
103 register_echo_module [sqlite3_connection_pointer $dbClose]
104 set res
105 } {1 2 3 4 5 6}
106 }
107
108 # Ensure that it is not possible for one connection to DROP a virtual
109 # table while a second connection is reading from the database.
110 #
111 do_test vtab_shared-1.10 {
112 db eval { SELECT * FROM t1 } {
113 set error [catchsql { DROP TABLE t1 } db2]
114 break
115 }
116 set error
117 } {1 {database table is locked: sqlite_master}}
118
119 do_test vtab_shared-1.11 {
120 execsql {
121 CREATE VIRTUAL TABLE t2 USING echo(t0);
122 CREATE VIRTUAL TABLE t3 USING echo(t0);
123 }
124 execsql { SELECT * FROM t3 } db2
125 } {1 2 3 4 5 6}
126
127 ifcapable compound {
128 do_test vtab_shared-1.12.1 {
129 db close
130 execsql {
131 SELECT * FROM t1 UNION ALL
132 SELECT * FROM t2 UNION ALL
133 SELECT * FROM t3
134 } db2
135 } {1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6}
136 do_test vtab_shared-1.12.2 {
137 sqlite3 db test.db
138 register_echo_module [sqlite3_connection_pointer db]
139 execsql {
140 SELECT * FROM t1 UNION ALL
141 SELECT * FROM t2 UNION ALL
142 SELECT * FROM t3
143 } db
144 } {1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6}
145 }
146
147 # Try a rename or two.
148 #
149 ifcapable altertable {
150 do_test vtab_shared-1.13.1 {
151 execsql { ALTER TABLE t1 RENAME TO t4 }
152 execsql { SELECT * FROM t4 } db
153 } {1 2 3 4 5 6}
154 do_test vtab_shared-1.13.2 {
155 execsql { SELECT * FROM t4 } db2
156 } {1 2 3 4 5 6}
157 do_test vtab_shared-1.13.3 {
158 execsql { ALTER TABLE t2 RENAME TO t5 }
159 execsql { SELECT * FROM t4 } db2
160 } {1 2 3 4 5 6}
161 }
162
163 # Try an UPDATE/INSERT/DELETE on a shared vtab as the first statement after a
164 # schema is loaded.
165 do_test vtab_shared_1.14.1 {
166 db2 close
167 sqlite3 db2 test.db
168 register_echo_module [sqlite3_connection_pointer db2]
169 execsql { SELECT * FROM t3 }
170 } {1 2 3 4 5 6}
171 do_test vtab_shared_1.14.2 {
172 execsql {
173 UPDATE t3 SET c = 'six' WHERE c = 6;
174 SELECT * FROM t3;
175 } db2
176 } {1 2 3 4 5 six}
177 do_test vtab_shared_1.14.3 {
178 db2 close
179 sqlite3 db2 test.db
180 register_echo_module [sqlite3_connection_pointer db2]
181 execsql { SELECT * FROM t3 }
182 } {1 2 3 4 5 six}
183 do_test vtab_shared_1.14.4 {
184 execsql {
185 DELETE FROM t3 WHERE c = 'six';
186 SELECT * FROM t3;
187 } db2
188 } {1 2 3}
189 do_test vtab_shared_1.14.5 {
190 db2 close
191 sqlite3 db2 test.db
192 register_echo_module [sqlite3_connection_pointer db2]
193 execsql { SELECT * FROM t3 }
194 } {1 2 3}
195 do_test vtab_shared_1.14.6 {
196 execsql {
197 INSERT INTO t3 VALUES(4, 5, 6);
198 SELECT * FROM t3;
199 } db2
200 } {1 2 3 4 5 6}
201
202 do_test vtab_shared_1.15.1 {
203 db2 close
204 sqlite3 db2 test.db
205 register_echo_module [sqlite3_connection_pointer db2]
206 execsql {
207 UPDATE t3 SET c = 'six' WHERE c = 6;
208 SELECT * FROM t3;
209 } db2
210 } {1 2 3 4 5 six}
211 do_test vtab_shared_1.15.2 {
212 db2 close
213 sqlite3 db2 test.db
214 register_echo_module [sqlite3_connection_pointer db2]
215 execsql {
216 DELETE FROM t3 WHERE c = 'six';
217 SELECT * FROM t3;
218 } db2
219 } {1 2 3}
220 do_test vtab_shared_1.15.3 {
221 db2 close
222 sqlite3 db2 test.db
223 register_echo_module [sqlite3_connection_pointer db2]
224 execsql {
225 INSERT INTO t3 VALUES(4, 5, 6);
226 SELECT * FROM t3;
227 }
228 } {1 2 3 4 5 6}
229
230 db close
231 db2 close
232
233 #---------------------------------------------------------------
234 # Test calling sqlite3_close() with vtabs on the disconnect list.
235 #
236 ifcapable rtree {
237 reset_db
238 do_test 2.1.1 {
239 sqlite3 db test.db
240 sqlite3 db2 test.db
241
242 # Create a virtual table using [db].
243 execsql {
244 CREATE VIRTUAL TABLE rt USING rtree(id, x1, x2);
245 INSERT INTO rt VALUES(1, 2 ,3);
246 SELECT * FROM rt;
247 }
248
249 # Drop the virtual table using [db2]. The sqlite3_vtab object belonging
250 # to [db] is moved to the sqlite3.pDisconnect list.
251 execsql { DROP TABLE rt } db2
252
253 # Immediately close [db]. At one point this would fail due to the
254 # unfinalized statements held by the un-xDisconnect()ed sqlite3_vtab.
255 db close
256 } {}
257 db2 close
258 }
259
260 ifcapable fts3 {
261 # Same test as above, except using fts3 instead of rtree.
262 reset_db
263 do_test 2.2.1 {
264 sqlite3 db test.db
265 sqlite3 db2 test.db
266 execsql {
267 CREATE VIRTUAL TABLE ft USING fts3;
268 INSERT INTO ft VALUES('hello world');
269 SELECT * FROM ft;
270 }
271 execsql { DROP TABLE ft } db2
272 db close
273 } {}
274 db2 close
275 }
276
277 sqlite3_enable_shared_cache 0
278 finish_test
279
OLDNEW
« no previous file with comments | « third_party/sqlite/sqlite-src-3080704/test/vtab_err.test ('k') | third_party/sqlite/sqlite-src-3080704/test/wal.test » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698