]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Use an external UDF to implement the mod operator under Firebird
authorLele Gaifax <lele@metapensiero.it>
Wed, 12 Dec 2007 23:00:42 +0000 (23:00 +0000)
committerLele Gaifax <lele@metapensiero.it>
Wed, 12 Dec 2007 23:00:42 +0000 (23:00 +0000)
lib/sqlalchemy/databases/firebird.py

index 319e460626f65d469873733cac9fe8b9a7c28c04..59f435c92db37d892b206ed93fcb745af854de34 100644 (file)
@@ -10,7 +10,7 @@ import warnings
 
 from sqlalchemy import exceptions, pool, schema, types as sqltypes, util
 from sqlalchemy.engine import base, default
-from sqlalchemy.sql import compiler, text
+from sqlalchemy.sql import compiler, operators as sqloperators, text
 
 
 _initialized_kb = False
@@ -377,6 +377,13 @@ class FBDialect(default.DefaultDialect):
 class FBCompiler(compiler.DefaultCompiler):
     """Firebird specific idiosincrasies"""
 
+    # Firebird lacks a builtin modulo operator, but there is
+    # an equivalent function in the ib_udf library.
+    operators = compiler.DefaultCompiler.operators.copy()
+    operators.update({
+        sqloperators.mod : lambda x, y:"mod(%s, %s)" % (x, y)
+        })
+
     def visit_alias(self, alias, asfrom=False, **kwargs):
         # Override to not use the AS keyword which FB 1.5 does not like
         if asfrom: