1156
1158
return 'READ UNCOMMITTED'
1157
1159
elif testing.against('postgresql'):
1158
1160
return 'SERIALIZABLE'
1161
elif testing.against('mysql'):
1162
return "SERIALIZABLE"
1160
1164
assert False, "non default isolation level not known"
1162
1166
def test_engine_param_stays(self):
1164
1168
eng = testing_engine()
1165
isolation_level = eng.dialect.get_isolation_level(eng.connect().connection)
1169
isolation_level = eng.dialect.get_isolation_level(
1170
eng.connect().connection)
1166
1171
level = self._non_default_isolation_level()
1168
1173
ne_(isolation_level, level)
1170
1175
eng = testing_engine(options=dict(isolation_level=level))
1172
eng.dialect.get_isolation_level(eng.connect().connection),
1177
eng.dialect.get_isolation_level(
1178
eng.connect().connection),
1191
1197
def test_default_level(self):
1192
1198
eng = testing_engine(options=dict())
1193
isolation_level = eng.dialect.get_isolation_level(eng.connect().connection)
1199
isolation_level = eng.dialect.get_isolation_level(
1200
eng.connect().connection)
1194
1201
eq_(isolation_level, self._default_isolation_level())
1196
1203
def test_reset_level(self):
1197
1204
eng = testing_engine(options=dict())
1198
1205
conn = eng.connect()
1199
eq_(eng.dialect.get_isolation_level(conn.connection), self._default_isolation_level())
1207
eng.dialect.get_isolation_level(conn.connection),
1208
self._default_isolation_level()
1201
eng.dialect.set_isolation_level(conn.connection, self._non_default_isolation_level())
1202
eq_(eng.dialect.get_isolation_level(conn.connection), self._non_default_isolation_level())
1211
eng.dialect.set_isolation_level(
1212
conn.connection, self._non_default_isolation_level()
1215
eng.dialect.get_isolation_level(conn.connection),
1216
self._non_default_isolation_level()
1204
1219
eng.dialect.reset_isolation_level(conn.connection)
1205
eq_(eng.dialect.get_isolation_level(conn.connection), self._default_isolation_level())
1221
eng.dialect.get_isolation_level(conn.connection),
1222
self._default_isolation_level()
1209
1227
def test_reset_level_with_setting(self):
1210
eng = testing_engine(options=dict(isolation_level=self._non_default_isolation_level()))
1228
eng = testing_engine(options=dict(
1230
self._non_default_isolation_level()))
1211
1231
conn = eng.connect()
1212
eq_(eng.dialect.get_isolation_level(conn.connection), self._non_default_isolation_level())
1214
eng.dialect.set_isolation_level(conn.connection, self._default_isolation_level())
1215
eq_(eng.dialect.get_isolation_level(conn.connection), self._default_isolation_level())
1232
eq_(eng.dialect.get_isolation_level(conn.connection),
1233
self._non_default_isolation_level())
1234
eng.dialect.set_isolation_level(conn.connection,
1235
self._default_isolation_level())
1236
eq_(eng.dialect.get_isolation_level(conn.connection),
1237
self._default_isolation_level())
1217
1238
eng.dialect.reset_isolation_level(conn.connection)
1218
eq_(eng.dialect.get_isolation_level(conn.connection), self._non_default_isolation_level())
1239
eq_(eng.dialect.get_isolation_level(conn.connection),
1240
self._non_default_isolation_level())
1222
1243
def test_invalid_level(self):
1225
1246
exc.ArgumentError,
1226
1247
"Invalid value '%s' for isolation_level. "
1227
1248
"Valid isolation levels for %s are %s" %
1228
("FOO", eng.dialect.name, ", ".join(eng.dialect._isolation_lookup)),
1249
("FOO", eng.dialect.name,
1250
", ".join(eng.dialect._isolation_lookup)),
1231
1253
def test_per_connection(self):
1232
1254
from sqlalchemy.pool import QueuePool
1233
eng = testing_engine(options=dict(poolclass=QueuePool, pool_size=2, max_overflow=0))
1255
eng = testing_engine(options=dict(
1256
poolclass=QueuePool,
1257
pool_size=2, max_overflow=0))
1235
1259
c1 = eng.connect()
1236
c1 = c1.execution_options(isolation_level=self._non_default_isolation_level())
1260
c1 = c1.execution_options(
1261
isolation_level=self._non_default_isolation_level()
1238
1263
c2 = eng.connect()
1239
eq_(eng.dialect.get_isolation_level(c1.connection), self._non_default_isolation_level())
1240
eq_(eng.dialect.get_isolation_level(c2.connection), self._default_isolation_level())
1265
eng.dialect.get_isolation_level(c1.connection),
1266
self._non_default_isolation_level()
1269
eng.dialect.get_isolation_level(c2.connection),
1270
self._default_isolation_level()
1244
1274
c3 = eng.connect()
1245
eq_(eng.dialect.get_isolation_level(c3.connection), self._default_isolation_level())
1276
eng.dialect.get_isolation_level(c3.connection),
1277
self._default_isolation_level()
1247
1279
c4 = eng.connect()
1248
eq_(eng.dialect.get_isolation_level(c4.connection), self._default_isolation_level())
1281
eng.dialect.get_isolation_level(c4.connection),
1282
self._default_isolation_level()
1257
1292
r"on Connection.execution_options\(\), or "
1258
1293
r"per-engine using the isolation_level "
1259
1294
r"argument to create_engine\(\).",
1260
select([1]).execution_options, isolation_level=self._non_default_isolation_level()
1295
select([1]).execution_options,
1296
isolation_level=self._non_default_isolation_level()
1269
1305
r"To set engine-wide isolation level, "
1270
1306
r"use the isolation_level argument to create_engine\(\).",
1272
testing.db.url, execution_options={'isolation_level':self._non_default_isolation_level}
1309
execution_options={'isolation_level':
1310
self._non_default_isolation_level}