Revision 76da16c3 snf-pithos-backend/pithos/backends/lib/sqlalchemy/node.py
b/snf-pithos-backend/pithos/backends/lib/sqlalchemy/node.py | ||
---|---|---|
1079 | 1079 |
|
1080 | 1080 |
v = self.versions.alias('v') |
1081 | 1081 |
n = self.nodes.alias('n') |
1082 |
if not all_props: |
|
1083 |
s = select([n.c.path, v.c.serial]).distinct() |
|
1084 |
else: |
|
1085 |
s = select([n.c.path, |
|
1086 |
v.c.serial, v.c.node, v.c.hash, |
|
1087 |
v.c.size, v.c.type, v.c.source, |
|
1088 |
v.c.mtime, v.c.muser, v.c.uuid, |
|
1089 |
v.c.checksum, v.c.cluster]).distinct() |
|
1090 | 1082 |
if before != inf: |
1091 | 1083 |
filtered = select([func.max(self.versions.c.serial)]) |
1092 | 1084 |
filtered = filtered.where(self.versions.c.mtime < before) |
1085 |
inner_join = \ |
|
1086 |
self.nodes.join(self.versions, |
|
1087 |
onclause=self.versions.c.serial==filtered) |
|
1093 | 1088 |
else: |
1094 | 1089 |
filtered = select([self.nodes.c.latest_version]) |
1095 |
s = s.where( |
|
1096 |
v.c.serial == filtered.where(self.nodes.c.node == v.c.node)) |
|
1097 |
s = s.where(v.c.cluster != except_cluster) |
|
1098 |
s = s.where(v.c.node.in_(select([self.nodes.c.node], |
|
1090 |
inner_join = \ |
|
1091 |
self.nodes.join(self.versions, |
|
1092 |
onclause=\ |
|
1093 |
self.versions.c.serial==self.nodes.c.latest_version) |
|
1094 |
if not all_props: |
|
1095 |
s = select([self.nodes.c.path, |
|
1096 |
self.versions.c.serial],from_obj=[inner_join]).distinct() |
|
1097 |
else: |
|
1098 |
s = select([self.nodes.c.path, |
|
1099 |
self.versions.c.serial, self.versions.c.node, |
|
1100 |
self.versions.c.hash, |
|
1101 |
self.versions.c.size, self.versions.c.type, |
|
1102 |
self.versions.c.source, |
|
1103 |
self.versions.c.mtime, self.versions.c.muser, |
|
1104 |
self.versions.c.uuid, |
|
1105 |
self.versions.c.checksum, |
|
1106 |
self.versions.c.cluster],from_obj=[inner_join]).distinct() |
|
1107 |
|
|
1108 |
s = s.where(self.versions.c.cluster != except_cluster) |
|
1109 |
s = s.where(self.versions.c.node.in_(select([self.nodes.c.node], |
|
1099 | 1110 |
self.nodes.c.parent == parent))) |
1100 | 1111 |
|
1101 |
s = s.where(n.c.node == v.c.node)
|
|
1102 |
s = s.where(and_(n.c.path > bindparam('start'), n.c.path < nextling))
|
|
1112 |
s = s.where(self.versions.c.node == self.versions.c.node)
|
|
1113 |
s = s.where(and_(self.nodes.c.path > bindparam('start'), self.nodes.c.path < nextling))
|
|
1103 | 1114 |
conj = [] |
1104 | 1115 |
for path, match in pathq: |
1105 | 1116 |
if match == MATCH_PREFIX: |
1106 |
conj.append(n.c.path.like(self.escape_like(path) + '%',
|
|
1117 |
conj.append(self.nodes.c.path.like(self.escape_like(path) + '%',
|
|
1107 | 1118 |
escape=ESCAPE_CHAR)) |
1108 | 1119 |
elif match == MATCH_EXACT: |
1109 |
conj.append(n.c.path == path)
|
|
1120 |
conj.append(self.nodes.c.path == path)
|
|
1110 | 1121 |
if conj: |
1111 | 1122 |
s = s.where(or_(*conj)) |
1112 | 1123 |
|
1113 | 1124 |
if sizeq and len(sizeq) == 2: |
1114 | 1125 |
if sizeq[0]: |
1115 |
s = s.where(v.c.size >= sizeq[0])
|
|
1126 |
s = s.where(self.versions.c.size >= sizeq[0])
|
|
1116 | 1127 |
if sizeq[1]: |
1117 |
s = s.where(v.c.size < sizeq[1])
|
|
1128 |
s = s.where(self.versions.c.size < sizeq[1])
|
|
1118 | 1129 |
|
1119 | 1130 |
if domain and filterq: |
1120 | 1131 |
a = self.attributes.alias('a') |
... | ... | |
1140 | 1151 |
and_(a.c.key.op('=')(k), a.c.value.op(o)(val))) |
1141 | 1152 |
s = s.where(exists(subs)) |
1142 | 1153 |
|
1143 |
s = s.order_by(n.c.path)
|
|
1154 |
s = s.order_by(self.nodes.c.path)
|
|
1144 | 1155 |
|
1145 | 1156 |
if not delimiter: |
1146 | 1157 |
s = s.limit(limit) |
Also available in: Unified diff