diff -r f0de31a14797 -r 427d2ec42823 app/soc/logic/models/base.py --- a/app/soc/logic/models/base.py Mon Feb 02 14:19:22 2009 +0000 +++ b/app/soc/logic/models/base.py Mon Feb 02 14:47:09 2009 +0000 @@ -289,12 +289,30 @@ if unique: limit = 1 - q = db.Query(self._model) + format_eq = '%(key)s = :%(num)d' + format_in = '%(key)s IN (%(values)s)' + + n = 1 + conditionals = [] + args = [] - for key, values in filter.iteritems(): - for value in (values if isinstance(values, list) else [values]): - q.filter(key, value) + for key, value in filter.iteritems(): + if isinstance(value, list): + count = len(value) + args.extend(value) + values = ', '.join([':%d' % i for i in range(n, n + count)]) + sub = format_in % {'key': key, 'values': values} + n = n + count + else: + sub = format_eq % {'key': key, 'num': n} + args.append(value) + n = n + 1 + conditionals.append(sub) + joined_pairs = ' AND '.join(conditionals) + condition = 'WHERE ' + joined_pairs + + q = self._model.gql(condition, *args) result = q.fetch(limit, offset) if unique: