From: Daniel Hokka Zakrisson Date: Fri, 15 Oct 2010 09:34:17 +0000 (-0400) Subject: Improve filter. X-Git-Tag: plcapi-5.0-19~75 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=396345c6da341555b1cfb3a2fc265687cd4a235b;hp=399edf0617befa056249184aae43d89561ef6147;p=plcapi.git Improve filter. --- diff --git a/PLC/Filter.py b/PLC/Filter.py index 2c512a0..5dc9f9b 100644 --- a/PLC/Filter.py +++ b/PLC/Filter.py @@ -211,42 +211,31 @@ class Filter(Parameter, dict): value = "FALSE" clause = "%s %s %s" % (field, operator, value) else: - value = map(str, map(api.db.quote, value)) - do_join = True vals = {} for val in value: base_op, val = get_op_and_val(val) - if base_op != '=': - do_join = False if base_op in vals: vals[base_op].append(val) else: vals[base_op] = [val] - if do_join: - if modifiers['&']: - operator = "@>" - value = "ARRAY[%s]" % ", ".join(value) - elif modifiers['|']: - operator = "&&" - value = "ARRAY[%s]" % ", ".join(value) - else: - operator = "IN" - value = "(%s)" % ", ".join(value) - clause = "%s %s %s" % (field, operator, value) - else: - # We need something more complex - subclauses = [] - for operator in vals.keys(): - if operator == '=': - subclauses.append("(%s IN (%s))" % (field, ",".join(vals[operator]))) - elif operator == 'IS': - subclauses.append("(%s IS NULL)" % field) + subclauses = [] + for operator in vals.keys(): + if operator == '=': + if modifiers['&']: + subclauses.append("(%s @> ARRAY[%s])" % (field, ",".join(vals[operator]))) + elif modifiers['|']: + subclauses.append("(%s && ARRAY[%s])" % (field, ",".join(vals[operator]))) else: - for value in vals[operator]: - subclauses.append("(%s %s %s)" % (field, operator, value)) - clause = "(" + " OR ".join(subclauses) + ")" + subclauses.append("(%s IN (%s))" % (field, ",".join(vals[operator]))) + elif operator == 'IS': + subclauses.append("(%s IS NULL)" % field) + else: + for value in vals[operator]: + subclauses.append("(%s %s %s)" % (field, operator, value)) + clause = "(" + " OR ".join(subclauses) + ")" else: operator, value = get_op_and_val(value) + clause = "%s %s %s" % (field, operator, value) if modifiers['~']: