Revision a3622324 snf-pithos-backend/pithos/backends/lib/sqlalchemy/node.py
b/snf-pithos-backend/pithos/backends/lib/sqlalchemy/node.py | ||
---|---|---|
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() |
Also available in: Unified diff