- if set(excluded) & keyset:
- return True
- for k, op, v in opers:
- k = k.decode('utf8')
- v = v.decode('utf8')
- if k not in meta:
- return True
- operation = OPERATORS[op]
- if not operation(meta[k], v):
- return True
- return False
-
+ subs = select([1])
+ subs = subs.where(a.c.serial == v.c.serial).correlate(v)
+ subs = subs.where(a.c.domain == domain)
+ subs = subs.where(or_(*[a.c.key.op('=')(x) for x in excluded]))
+ s = s.where(not_(exists(subs)))
+ if opers:
+ for k, o, val in opers:
+ subs = select([1])
+ subs = subs.where(a.c.serial == v.c.serial).correlate(v)
+ subs = subs.where(a.c.domain == domain)
+ subs = subs.where(and_(a.c.key.op('=')(k), a.c.value.op(o)(val)))
+ s = s.where(exists(subs))
+
+ s = s.order_by(n.c.path)
+