Thread: [SQL-CVS] r4483 - in SQLObject/branches/1.2: docs sqlobject sqlobject/tests
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: <sub...@co...> - 2011-11-26 13:10:02
|
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') |