summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/databases/firebird.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2006-10-07 00:54:14 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2006-10-07 00:54:14 +0000
commit758828ed544966cd78524f450f877be5b789fee4 (patch)
tree6a5839fae5738d0a7ae339d90fb246fce05a0330 /lib/sqlalchemy/databases/firebird.py
parent427baabc66743b2bbe978c61ff96251201fbc43d (diff)
downloadsqlalchemy-758828ed544966cd78524f450f877be5b789fee4.tar.gz
assorted firebird fixes from Lele Gaifax
Diffstat (limited to 'lib/sqlalchemy/databases/firebird.py')
-rw-r--r--lib/sqlalchemy/databases/firebird.py18
1 files changed, 14 insertions, 4 deletions
diff --git a/lib/sqlalchemy/databases/firebird.py b/lib/sqlalchemy/databases/firebird.py
index 67214313f..a3344418d 100644
--- a/lib/sqlalchemy/databases/firebird.py
+++ b/lib/sqlalchemy/databases/firebird.py
@@ -117,7 +117,8 @@ class FireBirdDialect(ansisql.ANSIDialect):
if isinstance(concurrency_level, types.StringTypes):
concurrency_level = int(concurrency_level)
- kinterbasdb.init(type_conv=type_conv, concurrency_level=concurrency_level)
+ if kinterbasdb is not None:
+ kinterbasdb.init(type_conv=type_conv, concurrency_level=concurrency_level)
ansisql.ANSIDialect.__init__(self, **params)
def create_connect_args(self, url):
@@ -243,9 +244,11 @@ class FireBirdDialect(ansisql.ANSIDialect):
return name
c = connection.execute(tblqry, [table.name.upper()])
- while True:
- row = c.fetchone()
- if not row: break
+ row = c.fetchone()
+ if not row:
+ raise exceptions.NoSuchTableError(table.name)
+
+ while row:
name = row['FNAME']
args = [lower_if_possible(name)]
@@ -257,6 +260,7 @@ class FireBirdDialect(ansisql.ANSIDialect):
kw['primary_key'] = name in pkfields
table.append_item(schema.Column(*args, **kw))
+ row = c.fetchone()
# get the foreign keys
c = connection.execute(fkqry, ["FOREIGN KEY", table.name.upper()])
@@ -314,6 +318,12 @@ class FBCompiler(ansisql.ANSICompiler):
super(FBCompiler, self).__init__(dialect, statement, parameters, **kwargs)
+ def visit_alias(self, alias):
+ # Override to not use the AS keyword which FB 1.5 does not like
+ self.froms[alias] = self.get_from_text(alias.original) + " " + self.preparer.format_alias(alias)
+ self.strings[alias] = self.get_str(alias.original)
+
+
def visit_column(self, column):
return ansisql.ANSICompiler.visit_column(self, column)