674 |
674 |
# This is why the full path is stored.
|
675 |
675 |
if before != inf:
|
676 |
676 |
s = select([func.count(v.c.serial),
|
677 |
|
func.sum(v.c.size),
|
678 |
|
func.max(v.c.mtime)])
|
|
677 |
func.sum(v.c.size),
|
|
678 |
func.max(v.c.mtime)])
|
679 |
679 |
c1 = select([func.max(self.versions.c.serial)],
|
680 |
680 |
and_(self.versions.c.mtime < before,
|
681 |
681 |
self.versions.c.node == v.c.node))
|
682 |
682 |
else:
|
683 |
683 |
inner_join = \
|
684 |
|
self.versions.join(self.nodes, onclause=\
|
685 |
|
self.versions.c.serial == self.nodes.c.latest_version)
|
|
684 |
self.versions.join(self.nodes, onclause=
|
|
685 |
self.versions.c.serial ==
|
|
686 |
self.nodes.c.latest_version)
|
686 |
687 |
s = select([func.count(self.versions.c.serial),
|
687 |
|
func.sum(self.versions.c.size),
|
688 |
|
func.max(self.versions.c.mtime)], from_obj=[inner_join])
|
|
688 |
func.sum(self.versions.c.size),
|
|
689 |
func.max(self.versions.c.mtime)],
|
|
690 |
from_obj=[inner_join])
|
689 |
691 |
|
690 |
692 |
c2 = select([self.nodes.c.node],
|
691 |
693 |
self.nodes.c.path.like(self.escape_like(path) + '%',
|
692 |
694 |
escape=ESCAPE_CHAR))
|
693 |
695 |
if before != inf:
|
694 |
696 |
s = s.where(and_(v.c.serial == c1,
|
695 |
|
v.c.cluster != except_cluster,
|
696 |
|
v.c.node.in_(c2)))
|
|
697 |
v.c.cluster != except_cluster,
|
|
698 |
v.c.node.in_(c2)))
|
697 |
699 |
else:
|
698 |
700 |
s = s.where(and_(self.versions.c.cluster != except_cluster,
|
699 |
701 |
self.versions.c.node.in_(c2)))
|
... | ... | |
999 |
1001 |
v.c.node == self.versions.c.node))
|
1000 |
1002 |
else:
|
1001 |
1003 |
filtered = select([self.nodes.c.latest_version])
|
1002 |
|
filtered = filtered.where(self.nodes.c.node == \
|
1003 |
|
self.versions.c.node).correlate(self.versions)
|
|
1004 |
filtered = filtered.where(self.nodes.c.node ==
|
|
1005 |
self.versions.c.node
|
|
1006 |
).correlate(self.versions)
|
1004 |
1007 |
s = s.where(self.versions.c.serial == filtered)
|
1005 |
1008 |
s = s.where(self.versions.c.cluster != except_cluster)
|
1006 |
1009 |
s = s.where(self.versions.c.node.in_(select([self.nodes.c.node],
|
1007 |
|
self.nodes.c.parent == parent)))
|
|
1010 |
self.nodes.c.parent == parent)))
|
1008 |
1011 |
s = s.where(self.attributes.c.serial == self.versions.c.serial)
|
1009 |
1012 |
s = s.where(self.attributes.c.domain == domain)
|
1010 |
1013 |
s = s.where(self.nodes.c.node == self.versions.c.node)
|
... | ... | |
1013 |
1016 |
conjb = []
|
1014 |
1017 |
for path, match in pathq:
|
1015 |
1018 |
if match == MATCH_PREFIX:
|
1016 |
|
conja.append(self.nodes.c.path.like(self.escape_like(path) + '%',
|
1017 |
|
escape=ESCAPE_CHAR))
|
|
1019 |
conja.append(self.nodes.c.path.like(self.escape_like(path) +
|
|
1020 |
'%', escape=ESCAPE_CHAR))
|
1018 |
1021 |
elif match == MATCH_EXACT:
|
1019 |
1022 |
conjb.append(path)
|
1020 |
1023 |
if conja or conjb:
|
1021 |
|
s = s.where(or_(self.nodes.c.path.in_(conjb),*conja))
|
|
1024 |
s = s.where(or_(self.nodes.c.path.in_(conjb), *conja))
|
1022 |
1025 |
rp = self.conn.execute(s)
|
1023 |
1026 |
rows = rp.fetchall()
|
1024 |
1027 |
rp.close()
|
... | ... | |
1090 |
1093 |
and_(v.c.mtime < before,
|
1091 |
1094 |
v.c.node == self.versions.c.node))
|
1092 |
1095 |
inner_join = \
|
1093 |
|
self.nodes.join(self.versions,
|
1094 |
|
onclause=self.versions.c.serial==filtered)
|
|
1096 |
self.nodes.join(self.versions,
|
|
1097 |
onclause=self.versions.c.serial == filtered)
|
1095 |
1098 |
else:
|
1096 |
1099 |
filtered = select([self.nodes.c.latest_version])
|
1097 |
|
filtered = filtered.where(self.nodes.c.node == self.versions.c.node).correlate(self.versions)
|
|
1100 |
filtered = filtered.where(self.nodes.c.node ==
|
|
1101 |
self.versions.c.node
|
|
1102 |
).correlate(self.versions)
|
1098 |
1103 |
inner_join = \
|
1099 |
|
self.nodes.join(self.versions,
|
1100 |
|
onclause=\
|
1101 |
|
self.versions.c.serial==filtered)
|
|
1104 |
self.nodes.join(self.versions,
|
|
1105 |
onclause=
|
|
1106 |
self.versions.c.serial == filtered)
|
1102 |
1107 |
if not all_props:
|
1103 |
1108 |
s = select([self.nodes.c.path,
|
1104 |
|
self.versions.c.serial],from_obj=[inner_join]).distinct()
|
|
1109 |
self.versions.c.serial],
|
|
1110 |
from_obj=[inner_join]).distinct()
|
1105 |
1111 |
else:
|
1106 |
1112 |
s = select([self.nodes.c.path,
|
1107 |
|
self.versions.c.serial, self.versions.c.node,
|
1108 |
|
self.versions.c.hash,
|
1109 |
|
self.versions.c.size, self.versions.c.type,
|
1110 |
|
self.versions.c.source,
|
1111 |
|
self.versions.c.mtime, self.versions.c.muser,
|
1112 |
|
self.versions.c.uuid,
|
1113 |
|
self.versions.c.checksum,
|
1114 |
|
self.versions.c.cluster],from_obj=[inner_join]).distinct()
|
|
1113 |
self.versions.c.serial, self.versions.c.node,
|
|
1114 |
self.versions.c.hash,
|
|
1115 |
self.versions.c.size, self.versions.c.type,
|
|
1116 |
self.versions.c.source,
|
|
1117 |
self.versions.c.mtime, self.versions.c.muser,
|
|
1118 |
self.versions.c.uuid,
|
|
1119 |
self.versions.c.checksum,
|
|
1120 |
self.versions.c.cluster],
|
|
1121 |
from_obj=[inner_join]).distinct()
|
1115 |
1122 |
|
1116 |
1123 |
s = s.where(self.versions.c.cluster != except_cluster)
|
1117 |
1124 |
s = s.where(self.versions.c.node.in_(select([self.nodes.c.node],
|
... | ... | |
1119 |
1126 |
|
1120 |
1127 |
s = s.where(self.versions.c.node == self.nodes.c.node)
|
1121 |
1128 |
s = s.where(and_(self.nodes.c.path > bindparam('start'),
|
1122 |
|
self.nodes.c.path < nextling))
|
|
1129 |
self.nodes.c.path < nextling))
|
1123 |
1130 |
conja = []
|
1124 |
1131 |
conjb = []
|
1125 |
1132 |
for path, match in pathq:
|
1126 |
1133 |
if match == MATCH_PREFIX:
|
1127 |
|
conja.append(self.nodes.c.path.like(self.escape_like(path) + '%',
|
1128 |
|
escape=ESCAPE_CHAR))
|
|
1134 |
conja.append(self.nodes.c.path.like(self.escape_like(path) +
|
|
1135 |
'%', escape=ESCAPE_CHAR))
|
1129 |
1136 |
elif match == MATCH_EXACT:
|
1130 |
1137 |
conjb.append(path)
|
1131 |
1138 |
if conja or conjb:
|
1132 |
|
s = s.where(or_(self.nodes.c.path.in_(conjb),*conja))
|
|
1139 |
s = s.where(or_(self.nodes.c.path.in_(conjb), *conja))
|
1133 |
1140 |
|
1134 |
1141 |
if sizeq and len(sizeq) == 2:
|
1135 |
1142 |
if sizeq[0]:
|
... | ... | |
1142 |
1149 |
included, excluded, opers = parse_filters(filterq)
|
1143 |
1150 |
if included:
|
1144 |
1151 |
subs = select([1])
|
1145 |
|
subs = subs.where(self.attributes.c.serial == self.versions.c.serial).correlate(self.versions)
|
|
1152 |
subs = subs.where(self.attributes.c.serial ==
|
|
1153 |
self.versions.c.serial
|
|
1154 |
).correlate(self.versions)
|
1146 |
1155 |
subs = subs.where(self.attributes.c.domain == domain)
|
1147 |
|
subs = subs.where(or_(*[self.attributes.c.key.op('=')(x) for x in included]))
|
|
1156 |
subs = subs.where(or_(*[self.attributes.c.key.op('=')(x)
|
|
1157 |
for x in included]))
|
1148 |
1158 |
s = s.where(exists(subs))
|
1149 |
1159 |
if excluded:
|
1150 |
1160 |
subs = select([1])
|
1151 |
|
subs = subs.where(self.attributes.c.serial == self.versions.c.serial).correlate(self.versions)
|
|
1161 |
subs = subs.where(self.attributes.c.serial ==
|
|
1162 |
self.versions.c.serial
|
|
1163 |
).correlate(self.versions)
|
1152 |
1164 |
subs = subs.where(self.attributes.c.domain == domain)
|
1153 |
|
subs = subs.where(or_(*[self.attributes.c.key.op('=')(x) for x in excluded]))
|
|
1165 |
subs = subs.where(or_(*[self.attributes.c.key.op('=')(x)
|
|
1166 |
for x in excluded]))
|
1154 |
1167 |
s = s.where(not_(exists(subs)))
|
1155 |
1168 |
if opers:
|
1156 |
1169 |
for k, o, val in opers:
|
1157 |
1170 |
subs = select([1])
|
1158 |
|
subs = subs.where(self.attributes.c.serial == self.versions.c.serial).correlate(self.versions)
|
|
1171 |
subs = subs.where(self.attributes.c.serial ==
|
|
1172 |
self.versions.c.serial
|
|
1173 |
).correlate(self.versions)
|
1159 |
1174 |
subs = subs.where(self.attributes.c.domain == domain)
|
1160 |
1175 |
subs = subs.where(
|
1161 |
|
and_(self.attributes.c.key.op('=')(k), self.attributes.c.value.op(o)(val)))
|
|
1176 |
and_(self.attributes.c.key.op('=')(k),
|
|
1177 |
self.attributes.c.value.op(o)(val)))
|
1162 |
1178 |
s = s.where(exists(subs))
|
1163 |
1179 |
|
1164 |
1180 |
s = s.order_by(self.nodes.c.path)
|
... | ... | |
1264 |
1280 |
def get_props(self, paths):
|
1265 |
1281 |
inner_join = \
|
1266 |
1282 |
self.nodes.join(self.versions,
|
1267 |
|
onclause=self.versions.c.serial == self.nodes.c.latest_version)
|
|
1283 |
onclause=self.versions.c.serial ==
|
|
1284 |
self.nodes.c.latest_version)
|
1268 |
1285 |
cc = self.nodes.c.path.in_(paths)
|
1269 |
1286 |
s = select([self.nodes.c.path, self.versions.c.type],
|
1270 |
|
from_obj=[inner_join]).where(cc).distinct()
|
|
1287 |
from_obj=[inner_join]).where(cc).distinct()
|
1271 |
1288 |
r = self.conn.execute(s)
|
1272 |
1289 |
rows = r.fetchall()
|
1273 |
1290 |
r.close()
|