23
23
import os , unittest
24
24
import sqlite3 as sqlite
25
25
26
+ from .test_dbapi import memory_database
27
+
26
28
def get_db_path ():
27
29
return "sqlite_testdb"
28
30
@@ -143,6 +145,7 @@ def test_rollback_cursor_consistency(self):
143
145
with self .assertRaises (sqlite .InterfaceError ):
144
146
cur .fetchall ()
145
147
148
+
146
149
class SpecialCommandTests (unittest .TestCase ):
147
150
def setUp (self ):
148
151
self .con = sqlite .connect (":memory:" )
@@ -162,6 +165,7 @@ def tearDown(self):
162
165
self .cur .close ()
163
166
self .con .close ()
164
167
168
+
165
169
class TransactionalDDL (unittest .TestCase ):
166
170
def setUp (self ):
167
171
self .con = sqlite .connect (":memory:" )
@@ -196,5 +200,101 @@ def tearDown(self):
196
200
self .con .close ()
197
201
198
202
203
+ class IsolationLevelFromInit (unittest .TestCase ):
204
+ CREATE = "create table t(t)"
205
+ INSERT = "insert into t values(1)"
206
+
207
+ def setUp (self ):
208
+ self .traced = []
209
+
210
+ def _run_test (self , cx ):
211
+ cx .execute (self .CREATE )
212
+ cx .set_trace_callback (lambda stmt : self .traced .append (stmt ))
213
+ with cx :
214
+ cx .execute (self .INSERT )
215
+
216
+ def test_isolation_level_default (self ):
217
+ with memory_database () as cx :
218
+ self ._run_test (cx )
219
+ self .assertEqual (self .traced , ["BEGIN " , self .INSERT , "COMMIT" ])
220
+
221
+ def test_isolation_level_begin (self ):
222
+ with memory_database (isolation_level = "" ) as cx :
223
+ self ._run_test (cx )
224
+ self .assertEqual (self .traced , ["BEGIN " , self .INSERT , "COMMIT" ])
225
+
226
+ def test_isolation_level_deferred (self ):
227
+ with memory_database (isolation_level = "DEFERRED" ) as cx :
228
+ self ._run_test (cx )
229
+ self .assertEqual (self .traced , ["BEGIN DEFERRED" , self .INSERT , "COMMIT" ])
230
+
231
+ def test_isolation_level_immediate (self ):
232
+ with memory_database (isolation_level = "IMMEDIATE" ) as cx :
233
+ self ._run_test (cx )
234
+ self .assertEqual (self .traced ,
235
+ ["BEGIN IMMEDIATE" , self .INSERT , "COMMIT" ])
236
+
237
+ def test_isolation_level_exclusive (self ):
238
+ with memory_database (isolation_level = "EXCLUSIVE" ) as cx :
239
+ self ._run_test (cx )
240
+ self .assertEqual (self .traced ,
241
+ ["BEGIN EXCLUSIVE" , self .INSERT , "COMMIT" ])
242
+
243
+ def test_isolation_level_none (self ):
244
+ with memory_database (isolation_level = None ) as cx :
245
+ self ._run_test (cx )
246
+ self .assertEqual (self .traced , [self .INSERT ])
247
+
248
+
249
+ class IsolationLevelPostInit (unittest .TestCase ):
250
+ QUERY = "insert into t values(1)"
251
+
252
+ def setUp (self ):
253
+ self .cx = sqlite .connect (":memory:" )
254
+ self .cx .execute ("create table t(t)" )
255
+ self .traced = []
256
+ self .cx .set_trace_callback (lambda stmt : self .traced .append (stmt ))
257
+
258
+ def tearDown (self ):
259
+ self .cx .close ()
260
+
261
+ def test_isolation_level_default (self ):
262
+ with self .cx :
263
+ self .cx .execute (self .QUERY )
264
+ self .assertEqual (self .traced , ["BEGIN " , self .QUERY , "COMMIT" ])
265
+
266
+ def test_isolation_level_begin (self ):
267
+ self .cx .isolation_level = ""
268
+ with self .cx :
269
+ self .cx .execute (self .QUERY )
270
+ self .assertEqual (self .traced , ["BEGIN " , self .QUERY , "COMMIT" ])
271
+
272
+ def test_isolation_level_deferrred (self ):
273
+ self .cx .isolation_level = "DEFERRED"
274
+ with self .cx :
275
+ self .cx .execute (self .QUERY )
276
+ self .assertEqual (self .traced , ["BEGIN DEFERRED" , self .QUERY , "COMMIT" ])
277
+
278
+ def test_isolation_level_immediate (self ):
279
+ self .cx .isolation_level = "IMMEDIATE"
280
+ with self .cx :
281
+ self .cx .execute (self .QUERY )
282
+ self .assertEqual (self .traced ,
283
+ ["BEGIN IMMEDIATE" , self .QUERY , "COMMIT" ])
284
+
285
+ def test_isolation_level_exclusive (self ):
286
+ self .cx .isolation_level = "EXCLUSIVE"
287
+ with self .cx :
288
+ self .cx .execute (self .QUERY )
289
+ self .assertEqual (self .traced ,
290
+ ["BEGIN EXCLUSIVE" , self .QUERY , "COMMIT" ])
291
+
292
+ def test_isolation_level_none (self ):
293
+ self .cx .isolation_level = None
294
+ with self .cx :
295
+ self .cx .execute (self .QUERY )
296
+ self .assertEqual (self .traced , [self .QUERY ])
297
+
298
+
199
299
if __name__ == "__main__" :
200
300
unittest .main ()
0 commit comments