Author: phd
Date: Sat Nov 26 06:09:55 2011
New Revision: 4483
Log:
Merged revision 4482 from branch 1.1: a bug was fixed in handling ``modulo`` operator.
Modified:
SQLObject/branches/1.2/docs/News.txt
SQLObject/branches/1.2/sqlobject/sqlbuilder.py
SQLObject/branches/1.2/sqlobject/tests/test_sqlbuilder.py
Modified: SQLObject/branches/1.2/docs/News.txt
==============================================================================
--- SQLObject/branches/1.2/docs/News.txt Sat Nov 26 06:05:59 2011 (r4482)
+++ SQLObject/branches/1.2/docs/News.txt Sat Nov 26 06:09:55 2011 (r4483)
@@ -7,6 +7,11 @@
.. _start:
+SQLObject 1.2.1
+===============
+
+* A bugfix was ported from `SQLObject 1.1.4`_.
+
SQLObject 1.2.0
===============
@@ -37,6 +42,12 @@
* sqlobject.__doc__ and main.__doc__ no longer contain version number.
Use sqlobject.version or version_info.
+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.2/sqlobject/sqlbuilder.py
==============================================================================
--- SQLObject/branches/1.2/sqlobject/sqlbuilder.py Sat Nov 26 06:05:59 2011 (r4482)
+++ SQLObject/branches/1.2/sqlobject/sqlbuilder.py Sat Nov 26 06:09:55 2011 (r4483)
@@ -133,7 +133,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)
@@ -265,7 +265,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.2/sqlobject/tests/test_sqlbuilder.py
==============================================================================
--- SQLObject/branches/1.2/sqlobject/tests/test_sqlbuilder.py Sat Nov 26 06:05:59 2011 (r4482)
+++ SQLObject/branches/1.2/sqlobject/tests/test_sqlbuilder.py Sat Nov 26 06:09:55 2011 (r4483)
@@ -34,6 +34,13 @@
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))"
+
def test_str_or_sqlrepr():
select = Select(['id', 'name'], staticTables=['employees'],
where='value>0', orderBy='id')
|