Revision 5576e6dd snf-pithos-backend/pithos/backends/lib/sqlite/node.py
b/snf-pithos-backend/pithos/backends/lib/sqlite/node.py | ||
---|---|---|
32 | 32 |
# or implied, of GRNET S.A. |
33 | 33 |
|
34 | 34 |
from time import time |
35 |
from operator import itemgetter |
|
36 |
from itertools import groupby |
|
35 | 37 |
|
36 | 38 |
from dbworker import DBWorker |
37 | 39 |
|
... | ... | |
180 | 182 |
references versions(serial) |
181 | 183 |
on update cascade |
182 | 184 |
on delete cascade ) """) |
185 |
execute(""" create index if not exists idx_attributes_domain |
|
186 |
on attributes(domain) """) |
|
183 | 187 |
|
184 | 188 |
wrapper = self.wrapper |
185 | 189 |
wrapper.execute() |
... | ... | |
284 | 288 |
self.statistics_update(parent, -nr, -size, mtime, cluster) |
285 | 289 |
self.statistics_update_ancestors(parent, -nr, -size, mtime, cluster) |
286 | 290 |
|
287 |
q = ("select hash from versions " |
|
291 |
q = ("select hash, serial from versions "
|
|
288 | 292 |
"where node in (select node " |
289 | 293 |
"from nodes " |
290 | 294 |
"where parent = ?) " |
... | ... | |
333 | 337 |
mtime = time() |
334 | 338 |
self.statistics_update_ancestors(node, -nr, -size, mtime, cluster) |
335 | 339 |
|
336 |
q = ("select hash from versions " |
|
340 |
q = ("select hash, serial from versions "
|
|
337 | 341 |
"where node = ? " |
338 | 342 |
"and cluster = ? " |
339 | 343 |
"and mtime <= ?") |
... | ... | |
343 | 347 |
for r in self.fetchall(): |
344 | 348 |
hashes += [r[0]] |
345 | 349 |
serials += [r[1]] |
346 |
|
|
350 |
|
|
347 | 351 |
q = ("delete from versions " |
348 | 352 |
"where node = ? " |
349 | 353 |
"and cluster = ? " |
... | ... | |
1001 | 1005 |
"and n.node = v.node") % cluster_where |
1002 | 1006 |
self.execute(q, args) |
1003 | 1007 |
return self.fetchone() |
1008 |
|
|
1009 |
def domain_object_list(self, domain, cluster=None): |
|
1010 |
"""Return a list of (path, property list, attribute dictionary) |
|
1011 |
for the objects in the specific domain and cluster. |
|
1012 |
""" |
|
1013 |
|
|
1014 |
q = ("select n.path, v.serial, v.node, v.hash, " |
|
1015 |
"v.size, v.type, v.source, v.mtime, v.muser, " |
|
1016 |
"v.uuid, v.checksum, v.cluster, a.key, a.value " |
|
1017 |
"from nodes n, versions v, attributes a " |
|
1018 |
"where n.node = v.node and " |
|
1019 |
"n.latest_version = v.serial and " |
|
1020 |
"v.serial = a.serial and " |
|
1021 |
"a.domain = ? ") |
|
1022 |
args = [domain] |
|
1023 |
if cluster != None: |
|
1024 |
q += "and v.cluster = ?" |
|
1025 |
args += [cluster] |
|
1026 |
|
|
1027 |
self.execute(q, args) |
|
1028 |
rows = self.fetchall() |
|
1029 |
|
|
1030 |
group_by = itemgetter(slice(12)) |
|
1031 |
rows.sort(key = group_by) |
|
1032 |
groups = groupby(rows, group_by) |
|
1033 |
return [(k[0], k[1:], dict([i[12:] for i in data])) \ |
|
1034 |
for (k, data) in groups] |
Also available in: Unified diff