Mercurial > p > roundup > code
diff roundup/backends/rdbms_common.py @ 2530:a182c536b72d
fix filtering by Link property:
if value list contained both NULL (-1) and non-NULL items, 'is NULL'
and 'in (list)' clauses were joined by 'and' instead of 'or'.
in .find() and .filter(), put brackets around all 'where' segments
that may contain ORed parts: 'or' has lower precedence than 'and'
| author | Alexander Smishlajev <a1s@users.sourceforge.net> |
|---|---|
| date | Sat, 03 Jul 2004 16:51:52 +0000 |
| parents | 125311efe783 |
| children | 70ede89e8056 |
line wrap: on
line diff
--- a/roundup/backends/rdbms_common.py Sat Jul 03 15:51:11 2004 +0000 +++ b/roundup/backends/rdbms_common.py Sat Jul 03 16:51:52 2004 +0000 @@ -1,4 +1,4 @@ -# $Id: rdbms_common.py,v 1.117 2004-07-02 08:15:01 a1s Exp $ +# $Id: rdbms_common.py,v 1.118 2004-07-03 16:51:52 a1s Exp $ ''' Relational database (SQL) backend common code. Basics: @@ -1878,7 +1878,7 @@ s = '_%s is NULL or '%prop allvalues += tuple(values) s += '_%s in (%s)'%(prop, ','.join([a]*len(values))) - where.append(s) + where.append('(' + s +')') tables = ['_%s'%self.classname] if where: o.append('(' + ' and '.join(where) + ')') @@ -2041,8 +2041,9 @@ v = ['%%'+self.db.sql_stringquote(s)+'%%' for s in v] # now add to the where clause - where.append(' or '.join(["_%s._%s LIKE '%s'"%(cn, k, s) - for s in v])) + where.append('(' + +' or '.join(["_%s._%s LIKE '%s'"%(cn, k, s) for s in v]) + +')') # note: args are embedded in the query string now elif isinstance(propclass, Link): if isinstance(v, type([])): @@ -2058,10 +2059,10 @@ if d: v = d.keys() s = ','.join([a for x in v]) - where.append('(_%s._%s in (%s))'%(cn, k, s)) + l.append('(_%s._%s in (%s))'%(cn, k, s)) args = args + v if l: - where.append(' or '.join(l)) + where.append('(' + ' or '.join(l) +')') else: if v in ('-1', None): v = None
