diff options
Diffstat (limited to 'lib/sqlalchemy/databases/firebird.py')
-rw-r--r-- | lib/sqlalchemy/databases/firebird.py | 12 |
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) |