diff options
author | Lele Gaifax <lele@metapensiero.it> | 2007-12-09 23:08:59 +0000 |
---|---|---|
committer | Lele Gaifax <lele@metapensiero.it> | 2007-12-09 23:08:59 +0000 |
commit | 7cbfbba9496fc41c21390aad8d8731c45fbacbce (patch) | |
tree | 5e14773d96a388fd8329ea0de3949f6c958e7b4d /test/dialect/firebird.py | |
parent | 7758edfd7427a0ad429e23bc57878422840d2d6d (diff) | |
download | sqlalchemy-7cbfbba9496fc41c21390aad8d8731c45fbacbce.tar.gz |
Better reflection of Firebird data types.
Instead of relying on internal numeric code, lookup the associated real
name. This has the extra benefit of properly handling of DOMAINs.
Diffstat (limited to 'test/dialect/firebird.py')
-rw-r--r-- | test/dialect/firebird.py | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/test/dialect/firebird.py b/test/dialect/firebird.py index 636ab2d05..f3cd57aa7 100644 --- a/test/dialect/firebird.py +++ b/test/dialect/firebird.py @@ -1,6 +1,7 @@ import testbase from sqlalchemy import * from sqlalchemy.databases import firebird +from sqlalchemy.exceptions import ProgrammingError from sqlalchemy.sql import table, column from testlib import * @@ -11,6 +12,53 @@ class BasicTest(AssertMixin): return True +class DomainReflectionTest(AssertMixin): + "Test Firebird domains" + + @testing.supported('firebird') + def setUpAll(self): + con = testbase.db.connect() + try: + con.execute('CREATE DOMAIN int_domain AS INTEGER DEFAULT 42 NOT NULL') + con.execute('CREATE DOMAIN str_domain AS VARCHAR(255)') + con.execute('CREATE DOMAIN rem_domain AS BLOB SUB_TYPE TEXT') + con.execute('CREATE DOMAIN img_domain AS BLOB SUB_TYPE BINARY') + except ProgrammingError, e: + if not "attempt to store duplicate value" in str(e): + raise e + con.execute('''CREATE TABLE testtable (question int_domain, + answer str_domain, + remark rem_domain, + photo img_domain, + d date, + t time, + dt timestamp)''') + + @testing.supported('firebird') + def tearDownAll(self): + con = testbase.db.connect() + con.execute('DROP TABLE testtable') + con.execute('DROP DOMAIN int_domain') + con.execute('DROP DOMAIN str_domain') + con.execute('DROP DOMAIN rem_domain') + con.execute('DROP DOMAIN img_domain') + + @testing.supported('firebird') + def test_table_is_reflected(self): + metadata = MetaData(testbase.db) + table = Table('testtable', metadata, autoload=True) + self.assertEquals(set(table.columns.keys()), + set(['question', 'answer', 'remark', 'photo', 'd', 't', 'dt']), + "Columns of reflected table didn't equal expected columns") + self.assertEquals(table.c.question.type.__class__, firebird.FBInteger) + self.assertEquals(table.c.answer.type.__class__, firebird.FBString) + self.assertEquals(table.c.remark.type.__class__, firebird.FBText) + self.assertEquals(table.c.photo.type.__class__, firebird.FBBinary) + # The following assume a Dialect 3 database + self.assertEquals(table.c.d.type.__class__, firebird.FBDate) + self.assertEquals(table.c.t.type.__class__, firebird.FBTime) + self.assertEquals(table.c.dt.type.__class__, firebird.FBDateTime) + class CompileTest(SQLCompileTest): __dialect__ = firebird.FBDialect() |