X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FFilter.py;fp=PLC%2FFilter.py;h=5dc9f9b3df0c3ab03f7959eb3e5ee55d1a8a9920;hb=396345c6da341555b1cfb3a2fc265687cd4a235b;hp=2c512a05bb895372128bab593f3185c99c489bbe;hpb=399edf0617befa056249184aae43d89561ef6147;p=plcapi.git 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['~']: