989 |
989 |
a = self.attributes.alias('a')
|
990 |
990 |
v = self.versions.alias('v')
|
991 |
991 |
n = self.nodes.alias('n')
|
992 |
|
s = select([a.c.key]).distinct()
|
|
992 |
s = select([self.attributes.c.key]).distinct()
|
993 |
993 |
if before != inf:
|
994 |
994 |
filtered = select([func.max(self.versions.c.serial)])
|
995 |
995 |
filtered = filtered.where(self.versions.c.mtime < before)
|
996 |
|
filtered = filtered.where(self.versions.c.node == v.c.node)
|
|
996 |
filtered = filtered.where(self.versions.c.node == \
|
|
997 |
self.versions.c.node)
|
997 |
998 |
else:
|
998 |
999 |
filtered = select([self.nodes.c.latest_version])
|
999 |
|
filtered = filtered.where(self.nodes.c.node == v.c.node)
|
1000 |
|
s = s.where(v.c.serial == filtered)
|
1001 |
|
s = s.where(v.c.cluster != except_cluster)
|
1002 |
|
s = s.where(v.c.node.in_(select([self.nodes.c.node],
|
|
1000 |
filtered = filtered.where(self.nodes.c.node == \
|
|
1001 |
self.versions.c.node).correlate(self.versions)
|
|
1002 |
s = s.where(self.versions.c.serial == filtered)
|
|
1003 |
s = s.where(self.versions.c.cluster != except_cluster)
|
|
1004 |
s = s.where(self.versions.c.node.in_(select([self.nodes.c.node],
|
1003 |
1005 |
self.nodes.c.parent == parent)))
|
1004 |
|
s = s.where(a.c.serial == v.c.serial)
|
1005 |
|
s = s.where(a.c.domain == domain)
|
1006 |
|
s = s.where(n.c.node == v.c.node)
|
|
1006 |
s = s.where(self.attributes.c.serial == self.versions.c.serial)
|
|
1007 |
s = s.where(self.attributes.c.domain == domain)
|
|
1008 |
s = s.where(self.nodes.c.node == self.versions.c.node)
|
1007 |
1009 |
conj = []
|
1008 |
1010 |
for path, match in pathq:
|
1009 |
1011 |
if match == MATCH_PREFIX:
|
1010 |
|
conj.append(n.c.path.like(self.escape_like(path) + '%',
|
|
1012 |
conj.append(self.nodes.c.path.like(self.escape_like(path) + '%',
|
1011 |
1013 |
escape=ESCAPE_CHAR))
|
1012 |
1014 |
elif match == MATCH_EXACT:
|
1013 |
|
conj.append(n.c.path == path)
|
|
1015 |
conj.append(self.nodes.c.path == path)
|
1014 |
1016 |
if conj:
|
1015 |
1017 |
s = s.where(or_(*conj))
|
1016 |
1018 |
rp = self.conn.execute(s)
|
... | ... | |
1087 |
1089 |
onclause=self.versions.c.serial==filtered)
|
1088 |
1090 |
else:
|
1089 |
1091 |
filtered = select([self.nodes.c.latest_version])
|
|
1092 |
filtered = filtered.where(self.nodes.c.node == self.versions.c.node).correlate(self.versions)
|
1090 |
1093 |
inner_join = \
|
1091 |
1094 |
self.nodes.join(self.versions,
|
1092 |
1095 |
onclause=\
|
1093 |
|
self.versions.c.serial==self.nodes.c.latest_version)
|
|
1096 |
self.versions.c.serial==filtered)
|
1094 |
1097 |
if not all_props:
|
1095 |
1098 |
s = select([self.nodes.c.path,
|
1096 |
1099 |
self.versions.c.serial],from_obj=[inner_join]).distinct()
|
... | ... | |
1107 |
1110 |
|
1108 |
1111 |
s = s.where(self.versions.c.cluster != except_cluster)
|
1109 |
1112 |
s = s.where(self.versions.c.node.in_(select([self.nodes.c.node],
|
1110 |
|
self.nodes.c.parent == parent)))
|
|
1113 |
self.nodes.c.parent == parent)))
|
1111 |
1114 |
|
1112 |
1115 |
s = s.where(self.versions.c.node == self.nodes.c.node)
|
1113 |
|
s = s.where(and_(self.nodes.c.path > bindparam('start'), self.nodes.c.path < nextling))
|
1114 |
|
conja = []
|
1115 |
|
conjb = []
|
|
1116 |
s = s.where(and_(self.nodes.c.path > bindparam('start'),
|
|
1117 |
self.nodes.c.path < nextling))
|
|
1118 |
conj = []
|
1116 |
1119 |
for path, match in pathq:
|
1117 |
1120 |
if match == MATCH_PREFIX:
|
1118 |
|
conja.append(self.nodes.c.path.like(self.escape_like(path) + '%',
|
1119 |
|
escape=ESCAPE_CHAR))
|
|
1121 |
conj.append(self.nodes.c.path.like(self.escape_like(path) + '%',
|
|
1122 |
escape=ESCAPE_CHAR))
|
1120 |
1123 |
elif match == MATCH_EXACT:
|
1121 |
|
conjb.append(path)
|
1122 |
|
if conja or conjb:
|
1123 |
|
s = s.where(and_(self.nodes.c.path.in_(conjb),*conja))
|
|
1124 |
conj.append(self.nodes.c.path == path)
|
|
1125 |
if conj:
|
|
1126 |
s = s.where(or_(*conj))
|
1124 |
1127 |
|
1125 |
1128 |
if sizeq and len(sizeq) == 2:
|
1126 |
1129 |
if sizeq[0]:
|
... | ... | |
1133 |
1136 |
included, excluded, opers = parse_filters(filterq)
|
1134 |
1137 |
if included:
|
1135 |
1138 |
subs = select([1])
|
1136 |
|
subs = subs.where(a.c.serial == v.c.serial).correlate(v)
|
1137 |
|
subs = subs.where(a.c.domain == domain)
|
1138 |
|
subs = subs.where(or_(*[a.c.key.op('=')(x) for x in included]))
|
|
1139 |
subs = subs.where(self.attributes.c.serial == self.versions.c.serial).correlate(self.versions)
|
|
1140 |
subs = subs.where(self.attributes.c.domain == domain)
|
|
1141 |
subs = subs.where(or_(*[self.attributes.c.key.op('=')(x) for x in included]))
|
1139 |
1142 |
s = s.where(exists(subs))
|
1140 |
1143 |
if excluded:
|
1141 |
1144 |
subs = select([1])
|
1142 |
|
subs = subs.where(a.c.serial == v.c.serial).correlate(v)
|
1143 |
|
subs = subs.where(a.c.domain == domain)
|
1144 |
|
subs = subs.where(or_(*[a.c.key.op('=')(x) for x in excluded]))
|
|
1145 |
subs = subs.where(self.attributes.c.serial == self.versions.c.serial).correlate(self.versions)
|
|
1146 |
subs = subs.where(self.attributes.c.domain == domain)
|
|
1147 |
subs = subs.where(or_(*[self.attributes.c.key.op('=')(x) for x in excluded]))
|
1145 |
1148 |
s = s.where(not_(exists(subs)))
|
1146 |
1149 |
if opers:
|
1147 |
1150 |
for k, o, val in opers:
|
1148 |
1151 |
subs = select([1])
|
1149 |
|
subs = subs.where(a.c.serial == v.c.serial).correlate(v)
|
1150 |
|
subs = subs.where(a.c.domain == domain)
|
|
1152 |
subs = subs.where(self.attributes.c.serial == self.versions.c.serial).correlate(self.versions)
|
|
1153 |
subs = subs.where(self.attributes.c.domain == domain)
|
1151 |
1154 |
subs = subs.where(
|
1152 |
|
and_(a.c.key.op('=')(k), a.c.value.op(o)(val)))
|
|
1155 |
and_(self.attributes.c.key.op('=')(k), self.attributes.c.value.op(o)(val)))
|
1153 |
1156 |
s = s.where(exists(subs))
|
1154 |
1157 |
|
1155 |
1158 |
s = s.order_by(self.nodes.c.path)
|