equal
deleted
inserted
replaced
287 if not filter: |
287 if not filter: |
288 filter = {} |
288 filter = {} |
289 if unique: |
289 if unique: |
290 limit = 1 |
290 limit = 1 |
291 |
291 |
292 q = db.Query(self._model) |
292 format_eq = '%(key)s = :%(num)d' |
293 |
293 format_in = '%(key)s IN (%(values)s)' |
294 for key, values in filter.iteritems(): |
294 |
295 for value in (values if isinstance(values, list) else [values]): |
295 n = 1 |
296 q.filter(key, value) |
296 conditionals = [] |
297 |
297 args = [] |
|
298 |
|
299 for key, value in filter.iteritems(): |
|
300 if isinstance(value, list): |
|
301 count = len(value) |
|
302 args.extend(value) |
|
303 values = ', '.join([':%d' % i for i in range(n, n + count)]) |
|
304 sub = format_in % {'key': key, 'values': values} |
|
305 n = n + count |
|
306 else: |
|
307 sub = format_eq % {'key': key, 'num': n} |
|
308 args.append(value) |
|
309 n = n + 1 |
|
310 conditionals.append(sub) |
|
311 |
|
312 joined_pairs = ' AND '.join(conditionals) |
|
313 condition = 'WHERE ' + joined_pairs |
|
314 |
|
315 q = self._model.gql(condition, *args) |
298 result = q.fetch(limit, offset) |
316 result = q.fetch(limit, offset) |
299 |
317 |
300 if unique: |
318 if unique: |
301 return result[0] if result else None |
319 return result[0] if result else None |
302 |
320 |