Revision 70516d86 pithos/backends/lib_alchemy/node.py
b/pithos/backends/lib_alchemy/node.py | ||
---|---|---|
240 | 240 |
Clears out nodes with no remaining versions. |
241 | 241 |
""" |
242 | 242 |
#update statistics |
243 |
#TODO handle before=inf |
|
244 | 243 |
c1 = select([self.nodes.c.node], |
245 | 244 |
self.nodes.c.parent == parent) |
246 | 245 |
where_clause = and_(self.versions.c.node.in_(c1), |
... | ... | |
275 | 274 |
and_(self.nodes.c.parent == parent, |
276 | 275 |
select([func.count(self.versions.c.serial)], |
277 | 276 |
self.versions.c.node == self.nodes.c.node).as_scalar() == 0)) |
278 |
r = self.conn.execute(s) |
|
279 |
nodes = r.fetchall()
|
|
280 |
r.close() |
|
277 |
rp = self.conn.execute(s)
|
|
278 |
nodes = [r[0] for r in rp.fetchall()]
|
|
279 |
rp.close()
|
|
281 | 280 |
s = self.nodes.delete().where(self.nodes.c.node.in_(nodes)) |
282 | 281 |
self.conn.execute(s).close() |
283 | 282 |
|
... | ... | |
388 | 387 |
size += presize |
389 | 388 |
|
390 | 389 |
#insert or replace |
390 |
#TODO better upsert |
|
391 | 391 |
u = self.statistics.update().where(and_(self.statistics.c.node==node, |
392 | 392 |
self.statistics.c.cluster==cluster)) |
393 | 393 |
u = u.values(population=population, size=size, mtime=mtime) |
... | ... | |
522 | 522 |
r = self.conn.execute(s) |
523 | 523 |
props = r.fetchone() |
524 | 524 |
r.close() |
525 |
if not props:
|
|
525 |
if props: |
|
526 | 526 |
return props |
527 | 527 |
return None |
528 | 528 |
|
... | ... | |
590 | 590 |
Othwerise, return only those specified. |
591 | 591 |
""" |
592 | 592 |
|
593 |
execute = self.execute |
|
594 | 593 |
if keys: |
595 | 594 |
attrs = self.attributes.alias() |
596 | 595 |
s = select([attrs.c.key, attrs.c.value]) |
... | ... | |
609 | 608 |
"""Set the attributes of the version specified by serial. |
610 | 609 |
Receive attributes as an iterable of (key, value) pairs. |
611 | 610 |
""" |
612 |
values = [{'serial':serial, 'key':k, 'value':v} for k, v in items] |
|
613 |
self.conn.execute(self.attributes.insert(), values).close() |
|
611 |
#insert or replace |
|
612 |
#TODO better upsert |
|
613 |
for k, v in items: |
|
614 |
s = self.attributes.update() |
|
615 |
s = s.where(and_(self.attributes.c.serial == serial, |
|
616 |
self.attributes.c.key == k)) |
|
617 |
s = s.values(value = v) |
|
618 |
rp = self.conn.execute(s) |
|
619 |
rp.close() |
|
620 |
if rp.rowcount == 0: |
|
621 |
s = self.attributes.insert() |
|
622 |
s = s.values(serial=serial, key=k, value=v) |
|
623 |
self.conn.execute(s).close() |
|
614 | 624 |
|
615 | 625 |
def attribute_del(self, serial, keys=()): |
616 | 626 |
"""Delete attributes of the version specified by serial. |
... | ... | |
676 | 686 |
if conj: |
677 | 687 |
s = s.where(or_(*conj)) |
678 | 688 |
rp = self.conn.execute(s) |
679 |
r = rp.fetchall() |
|
689 |
rows = rp.fetchall()
|
|
680 | 690 |
rp.close() |
681 |
return [r[0] for r in self.fetchall()]
|
|
691 |
return [r[0] for r in rows]
|
|
682 | 692 |
|
683 | 693 |
def latest_version_list(self, parent, prefix='', delimiter=None, |
684 | 694 |
start='', limit=10000, before=inf, |
Also available in: Unified diff