def node_purge_children(self, parent, before=inf, cluster=0):
"""Delete all versions with the specified
parent and cluster, and return
- the serials of versions deleted.
+ the hashes of versions deleted.
Clears out nodes with no remaining versions.
"""
self.statistics_update(parent, -nr, -size, mtime, cluster)
self.statistics_update_ancestors(parent, -nr, -size, mtime, cluster)
- q = ("select serial from versions "
+ q = ("select hash from versions "
"where node in (select node "
"from nodes "
"where parent = ?) "
"and cluster = ? "
"and mtime <= ?")
execute(q, args)
- serials = [r[SERIAL] for r in self.fetchall()]
+ hashes = [r[0] for r in self.fetchall()]
q = ("delete from versions "
"where node in (select node "
"from nodes "
"where node = n.node) = 0 "
"and parent = ?)")
execute(q, (parent,))
- return serials
+ return hashes
def node_purge(self, node, before=inf, cluster=0):
"""Delete all versions with the specified
node and cluster, and return
- the serials of versions deleted.
+ the hashes of versions deleted.
Clears out the node if it has no remaining versions.
"""
mtime = time()
self.statistics_update_ancestors(node, -nr, -size, mtime, cluster)
- q = ("select serial from versions "
+ q = ("select hash from versions "
"where node = ? "
"and cluster = ? "
"and mtime <= ?")
execute(q, args)
- serials = [r[SERIAL] for r in self.fetchall()]
+ hashes = [r[0] for r in self.fetchall()]
q = ("delete from versions "
"where node = ? "
"and cluster = ? "
"where node = n.node) = 0 "
"and node = ?)")
execute(q, (node,))
- return serials
+ return hashes
def node_remove(self, node):
"""Remove the node specified.
"and cluster != ? "
"and node in (select node "
"from nodes "
- "where path like ?)")
- execute(q, (before, except_cluster, path + '%'))
+ "where path like ? escape '\\')")
+ execute(q, (before, except_cluster, self.escape_like(path) + '%'))
r = fetchone()
if r is None:
return None
def version_remove(self, serial):
"""Remove the serial specified."""
- props = self.node_get_properties(serial)
+ props = self.version_get_properties(serial)
if not props:
return
node = props[NODE]
+ hash = props[HASH]
size = props[SIZE]
cluster = props[CLUSTER]
q = "delete from versions where serial = ?"
self.execute(q, (serial,))
- return True
+ return hash
def attribute_get(self, serial, keys=()):
"""Return a list of (key, value) pairs of the version specified by serial.
return None, None
subq = " and ("
- subq += ' or '.join(('n.path like ?' for x in pathq))
+ subq += ' or '.join(("n.path like ? escape '\\'" for x in pathq))
subq += ")"
- args = tuple([x + '%' for x in pathq])
+ args = tuple([self.escape_like(x) + '%' for x in pathq])
return subq, args