summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
authorLele Gaifax <lele@metapensiero.it>2008-04-11 22:14:34 +0000
committerLele Gaifax <lele@metapensiero.it>2008-04-11 22:14:34 +0000
commitc79342ef957fd901db41562ad13e68638a597fbe (patch)
tree2eaddccbd78774a0d4cc4d73cf1c27d0859bfe50 /lib/sqlalchemy
parentce109f7adf081c3b42802d0de1a2c92bc56f9809 (diff)
downloadsqlalchemy-c79342ef957fd901db41562ad13e68638a597fbe.tar.gz
Firebird 2 has a SUBSTRING() builtin, expose it thru a function
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/databases/firebird.py12
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/sqlalchemy/databases/firebird.py b/lib/sqlalchemy/databases/firebird.py
index 11a88bf18..5e1dd72bb 100644
--- a/lib/sqlalchemy/databases/firebird.py
+++ b/lib/sqlalchemy/databases/firebird.py
@@ -547,6 +547,15 @@ class FBDialect(default.DefaultDialect):
connection.commit(True)
+def _substring(s, start, length=None):
+ "Helper function to handle Firebird 2 SUBSTRING builtin"
+
+ if length is None:
+ return "SUBSTRING(%s FROM %s)" % (s, start)
+ else:
+ return "SUBSTRING(%s FROM %s FOR %s)" % (s, start, length)
+
+
class FBCompiler(sql.compiler.DefaultCompiler):
"""Firebird specific idiosincrasies"""
@@ -564,6 +573,9 @@ class FBCompiler(sql.compiler.DefaultCompiler):
else:
return self.process(alias.original, **kwargs)
+ functions = sql.compiler.DefaultCompiler.functions.copy()
+ functions['substring'] = _substring
+
def function_argspec(self, func):
if func.clauses:
return self.process(func.clause_expr)