From c79342ef957fd901db41562ad13e68638a597fbe Mon Sep 17 00:00:00 2001 From: Lele Gaifax Date: Fri, 11 Apr 2008 22:14:34 +0000 Subject: Firebird 2 has a SUBSTRING() builtin, expose it thru a function --- lib/sqlalchemy/databases/firebird.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'lib/sqlalchemy/databases/firebird.py') 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) -- cgit v1.2.1