Author: phd
Date: Sat Nov 26 06:05:59 2011
New Revision: 4482
Log:
A bug was fixed in handling ``modulo`` operator - SQLite implements only ``%``.
Modified:
SQLObject/branches/1.1/docs/News.txt
SQLObject/branches/1.1/sqlobject/sqlbuilder.py
SQLObject/branches/1.1/sqlobject/tests/test_sqlbuilder.py
Modified: SQLObject/branches/1.1/docs/News.txt
==============================================================================
--- SQLObject/branches/1.1/docs/News.txt Sun Nov 20 04:57:00 2011 (r4481)
+++ SQLObject/branches/1.1/docs/News.txt Sat Nov 26 06:05:59 2011 (r4482)
@@ -7,6 +7,12 @@
.. _start:
+SQLObject 1.1.4
+===============
+
+* A bug was fixed in handling ``modulo`` operator - SQLite implements
+ only ``%``, MySQL - only ``MOD()``, PostgreSQL implements both.
+
SQLObject 1.1.3
===============
Modified: SQLObject/branches/1.1/sqlobject/sqlbuilder.py
==============================================================================
--- SQLObject/branches/1.1/sqlobject/sqlbuilder.py Sun Nov 20 04:57:00 2011 (r4481)
+++ SQLObject/branches/1.1/sqlobject/sqlbuilder.py Sat Nov 26 06:05:59 2011 (r4482)
@@ -127,7 +127,7 @@
def __abs__(self):
return SQLConstant("ABS")(self)
def __mod__(self, other):
- return SQLConstant("MOD")(self, other)
+ return SQLModulo(self, other)
def __rmod__(self, other):
return SQLConstant("MOD")(other, self)
@@ -259,7 +259,18 @@
return operatorMap[self.op.upper()](execute(self.expr1, executor),
execute(self.expr2, executor))
+class SQLModulo(SQLOp):
+ def __init__(self, expr1, expr2):
+ SQLOp.__init__(self, '%', expr1, expr2)
+ def __sqlrepr__(self, db):
+ if db == 'sqlite':
+ return SQLOp.__sqlrepr__(self, db)
+ s1 = sqlrepr(self.expr1, db)
+ s2 = sqlrepr(self.expr2, db)
+ return "MOD(%s, %s)" % (s1, s2)
+
registerConverter(SQLOp, SQLExprConverter)
+registerConverter(SQLModulo, SQLExprConverter)
class SQLCall(SQLExpression):
def __init__(self, expr, args):
Modified: SQLObject/branches/1.1/sqlobject/tests/test_sqlbuilder.py
==============================================================================
--- SQLObject/branches/1.1/sqlobject/tests/test_sqlbuilder.py Sun Nov 20 04:57:00 2011 (r4481)
+++ SQLObject/branches/1.1/sqlobject/tests/test_sqlbuilder.py Sat Nov 26 06:05:59 2011 (r4482)
@@ -33,3 +33,10 @@
assert sqlrepr(AND(1, 2, '3'), "sqlite") == \
sqlrepr(SQLOp("AND", 1, SQLOp("AND", 2, '3')), "sqlite") == \
"((1) AND ((2) AND ('3')))"
+
+def test_modulo():
+ setupClass(TestSQLBuilder)
+ assert sqlrepr(TestSQLBuilder.q.value % 2 == 0, 'mysql') == \
+ "((MOD(test_sql_builder.value, 2)) = (0))"
+ assert sqlrepr(TestSQLBuilder.q.value % 2 == 0, 'sqlite') == \
+ "(((test_sql_builder.value) % (2)) = (0))"
|