1
1
"""SQLite-specific tests."""
3
from test.lib.testing import eq_, assert_raises, \
3
from sqlalchemy.testing import eq_, assert_raises, \
4
4
assert_raises_message
6
from sqlalchemy import *
6
from sqlalchemy import Table, String, select, Text, CHAR, bindparam, Column,\
7
Unicode, Date, MetaData, UnicodeText, Time, Integer, TIMESTAMP, \
8
Boolean, func, NUMERIC, DateTime, extract, ForeignKey, text, Numeric,\
9
DefaultClause, and_, DECIMAL, TypeDecorator, create_engine, Float, \
10
INTEGER, UniqueConstraint, DATETIME, DATE, TIME, BOOLEAN, BIGINT
7
11
from sqlalchemy import exc, sql, schema, pool, types as sqltypes
8
12
from sqlalchemy.dialects.sqlite import base as sqlite, \
9
13
pysqlite as pysqlite_dialect
10
14
from sqlalchemy.engine.url import make_url
11
from test.lib import *
15
from sqlalchemy.testing import fixtures, AssertsCompiledSQL, \
16
AssertsExecutionResults, engines
17
from sqlalchemy import testing
13
19
from sqlalchemy.schema import CreateTable
183
182
assert isinstance(t2.c.y.type, sqltypes.NullType)
185
class DateTimeTest(fixtures.TestBase, AssertsCompiledSQL):
187
def test_time_microseconds(self):
188
dt = datetime.datetime(2008, 6, 27, 12, 0, 0, 125, )
189
eq_(str(dt), '2008-06-27 12:00:00.000125')
190
sldt = sqlite.DATETIME()
191
bp = sldt.bind_processor(None)
192
eq_(bp(dt), '2008-06-27 12:00:00.000125')
193
rp = sldt.result_processor(None, None)
196
def test_truncate_microseconds(self):
197
dt = datetime.datetime(2008, 6, 27, 12, 0, 0, 125)
198
dt_out = datetime.datetime(2008, 6, 27, 12, 0, 0)
199
eq_(str(dt), '2008-06-27 12:00:00.000125')
200
sldt = sqlite.DATETIME(truncate_microseconds=True)
201
bp = sldt.bind_processor(None)
202
eq_(bp(dt), '2008-06-27 12:00:00')
203
rp = sldt.result_processor(None, None)
204
eq_(rp(bp(dt)), dt_out)
206
def test_custom_format_compact(self):
207
dt = datetime.datetime(2008, 6, 27, 12, 0, 0, 125)
208
eq_(str(dt), '2008-06-27 12:00:00.000125')
209
sldt = sqlite.DATETIME(
211
"%(year)04d%(month)02d%(day)02d"
212
"%(hour)02d%(minute)02d%(second)02d%(microsecond)06d"
214
regexp="(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{6})",
216
bp = sldt.bind_processor(None)
217
eq_(bp(dt), '20080627120000000125')
218
rp = sldt.result_processor(None, None)
222
class DateTest(fixtures.TestBase, AssertsCompiledSQL):
224
def test_default(self):
225
dt = datetime.date(2008, 6, 27)
226
eq_(str(dt), '2008-06-27')
228
bp = sldt.bind_processor(None)
229
eq_(bp(dt), '2008-06-27')
230
rp = sldt.result_processor(None, None)
233
def test_custom_format(self):
234
dt = datetime.date(2008, 6, 27)
235
eq_(str(dt), '2008-06-27')
237
storage_format="%(month)02d/%(day)02d/%(year)04d",
238
regexp="(?P<month>\d+)/(?P<day>\d+)/(?P<year>\d+)",
240
bp = sldt.bind_processor(None)
241
eq_(bp(dt), '06/27/2008')
242
rp = sldt.result_processor(None, None)
245
class TimeTest(fixtures.TestBase, AssertsCompiledSQL):
247
def test_default(self):
248
dt = datetime.date(2008, 6, 27)
249
eq_(str(dt), '2008-06-27')
251
bp = sldt.bind_processor(None)
252
eq_(bp(dt), '2008-06-27')
253
rp = sldt.result_processor(None, None)
256
def test_truncate_microseconds(self):
257
dt = datetime.time(12, 0, 0, 125)
258
dt_out = datetime.time(12, 0, 0)
259
eq_(str(dt), '12:00:00.000125')
260
sldt = sqlite.TIME(truncate_microseconds=True)
261
bp = sldt.bind_processor(None)
262
eq_(bp(dt), '12:00:00')
263
rp = sldt.result_processor(None, None)
264
eq_(rp(bp(dt)), dt_out)
266
def test_custom_format(self):
267
dt = datetime.date(2008, 6, 27)
268
eq_(str(dt), '2008-06-27')
270
storage_format="%(year)04d%(month)02d%(day)02d",
271
regexp="(\d{4})(\d{2})(\d{2})",
273
bp = sldt.bind_processor(None)
274
eq_(bp(dt), '20080627')
275
rp = sldt.result_processor(None, None)
186
279
class DefaultsTest(fixtures.TestBase, AssertsCompiledSQL):
188
281
__only_on__ = 'sqlite'
375
468
#assert j.onclause.compare(table1.c['"id"']
376
469
# == table2.c['"aid"'])
471
def test_legacy_quoted_identifiers_unit(self):
472
dialect = sqlite.dialect()
473
dialect._broken_fk_pragma_quotes = True
477
(0, 'target', 'tid', 'id'),
478
(0, '"target"', 'tid', 'id'),
479
(0, '[target]', 'tid', 'id'),
480
(0, "'target'", 'tid', 'id'),
481
(0, '`target`', 'tid', 'id'),
485
dialect._parse_fk(fks, fkeys, *row)
487
'referred_table': 'target',
488
'referred_columns': ['id'],
489
'referred_schema': None,
491
'constrained_columns': ['tid']
378
495
def test_attached_as_schema(self):
379
496
cx = testing.db.connect()