[entropy.db] EntropyRepositoryBase: add extended=True support to retrieveReverseDependencies()

This commit is contained in:
Fabio Erculiani
2011-05-06 11:50:40 +02:00
parent 208c9c3f4e
commit 4da60e84d2
2 changed files with 95 additions and 29 deletions
+85 -27
View File
@@ -3547,7 +3547,7 @@ class EntropyRepository(EntropyRepositoryBase):
return flags
def retrieveReverseDependencies(self, package_id, atoms = False,
key_slot = False, exclude_deptypes = None):
key_slot = False, exclude_deptypes = None, extended = False):
"""
Reimplemented from EntropyRepositoryBase.
"""
@@ -3571,40 +3571,98 @@ class EntropyRepository(EntropyRepositoryBase):
dep_type,)
if atoms:
cur = self._cursor().execute("""
SELECT baseinfo.atom FROM dependencies, baseinfo
WHERE baseinfo.idpackage = dependencies.idpackage %s AND
dependencies.iddependency IN ( %s )""" % (
excluded_deptypes_query, dep_ids_str,))
result = self._cur2frozenset(cur)
elif key_slot:
if self._isBaseinfoExtrainfo2010():
if extended:
cur = self._cursor().execute("""
SELECT baseinfo.category || "/" || baseinfo.name, baseinfo.slot
FROM baseinfo, dependencies
SELECT baseinfo.atom, dependenciesreference.dependency
FROM dependencies, baseinfo, dependenciesreference
WHERE baseinfo.idpackage = dependencies.idpackage %s AND
dependencies.iddependency =
dependenciesreference.iddependency AND
dependencies.iddependency IN ( %s )""" % (
excluded_deptypes_query, dep_ids_str,))
result = tuple(cur)
else:
cur = self._cursor().execute("""
SELECT baseinfo.atom FROM dependencies, baseinfo
WHERE baseinfo.idpackage = dependencies.idpackage %s AND
dependencies.iddependency IN ( %s )""" % (
excluded_deptypes_query, dep_ids_str,))
result = self._cur2frozenset(cur)
elif key_slot:
if self._isBaseinfoExtrainfo2010():
if extended:
cur = self._cursor().execute("""
SELECT baseinfo.category || "/" || baseinfo.name,
baseinfo.slot, dependenciesreference.dependency
FROM baseinfo, dependencies, dependenciesreference
WHERE baseinfo.idpackage = dependencies.idpackage %s AND
dependencies.iddependency =
dependenciesreference.iddependency AND
dependencies.iddependency IN ( %s )""" % (
excluded_deptypes_query, dep_ids_str,))
else:
cur = self._cursor().execute("""
SELECT baseinfo.category || "/" || baseinfo.name,
baseinfo.slot
FROM baseinfo, dependencies
WHERE baseinfo.idpackage = dependencies.idpackage %s AND
dependencies.iddependency IN ( %s )""" % (
excluded_deptypes_query, dep_ids_str,))
else:
cur = self._cursor().execute("""
SELECT categories.category || "/" || baseinfo.name,baseinfo.slot
FROM baseinfo, categories, dependencies
WHERE baseinfo.idpackage = dependencies.idpackage AND
categories.idcategory = baseinfo.idcategory %s AND
dependencies.iddependency IN ( %s )""" % (
excluded_deptypes_query, dep_ids_str,))
if extended:
cur = self._cursor().execute("""
SELECT categories.category || "/" || baseinfo.name,
baseinfo.slot, dependenciesreference.dependency
FROM baseinfo, categories,
dependencies, dependenciesreference
WHERE baseinfo.idpackage = dependencies.idpackage AND
dependencies.iddependency =
dependenciesreference.iddependency AND
categories.idcategory = baseinfo.idcategory %s AND
dependencies.iddependency IN ( %s )""" % (
excluded_deptypes_query, dep_ids_str,))
else:
cur = self._cursor().execute("""
SELECT categories.category || "/" || baseinfo.name,
baseinfo.slot
FROM baseinfo, categories, dependencies
WHERE baseinfo.idpackage = dependencies.idpackage AND
categories.idcategory = baseinfo.idcategory %s AND
dependencies.iddependency IN ( %s )""" % (
excluded_deptypes_query, dep_ids_str,))
result = tuple(cur)
elif excluded_deptypes_query:
cur = self._cursor().execute("""
SELECT dependencies.idpackage FROM dependencies
WHERE %s AND dependencies.iddependency IN ( %s )""" % (
excluded_deptypes_query.lstrip("AND "), dep_ids_str,))
result = self._cur2frozenset(cur)
if extended:
cur = self._cursor().execute("""
SELECT dependencies.idpackage, dependenciesreference.dependency
FROM dependencies, dependenciesreference
WHERE %s AND
dependencies.iddependency =
dependenciesreference.iddependency AND
dependencies.iddependency IN ( %s )""" % (
excluded_deptypes_query.lstrip("AND "), dep_ids_str,))
result = tuple(cur)
else:
cur = self._cursor().execute("""
SELECT dependencies.idpackage FROM dependencies
WHERE %s AND dependencies.iddependency IN ( %s )""" % (
excluded_deptypes_query.lstrip("AND "), dep_ids_str,))
result = self._cur2frozenset(cur)
else:
cur = self._cursor().execute("""
SELECT dependencies.idpackage FROM dependencies
WHERE dependencies.iddependency IN ( %s )""" % (dep_ids_str,))
result = self._cur2frozenset(cur)
if extended:
cur = self._cursor().execute("""
SELECT dependencies.idpackage, dependenciesreference.dependency
FROM dependencies, dependenciesreference
WHERE
dependencies.iddependency =
dependenciesreference.iddependency AND
dependencies.iddependency IN ( %s )""" % (dep_ids_str,))
result = tuple(cur)
else:
cur = self._cursor().execute("""
SELECT dependencies.idpackage FROM dependencies
WHERE dependencies.iddependency IN ( %s )""" % (dep_ids_str,))
result = self._cur2frozenset(cur)
# avoid python3.x memleak
del cached
+10 -2
View File
@@ -2732,7 +2732,7 @@ class EntropyRepositoryBase(TextInterface, EntropyRepositoryPluginStore):
raise NotImplementedError()
def retrieveReverseDependencies(self, package_id, atoms = False,
key_slot = False, exclude_deptypes = None):
key_slot = False, exclude_deptypes = None, extended = False):
"""
Return reverse (or inverse) dependencies for given package.
@@ -2747,7 +2747,15 @@ class EntropyRepositoryBase(TextInterface, EntropyRepositoryPluginStore):
data. Please see etpConst['dependency_type_ids'] for valid values.
Anything != int will raise AttributeError
@type exclude_deptypes: iterable of ints
@return: reverse dependency list (tuple)
@keyword extended: if True, the original dependency string will
be returned along with the rest of information. So, if data
returned would be a list of package identifiers (int),
if extended = True this method will return a list of tuples
composed by (package_id, dep_string). Same for atoms = True and
key_slot = True.
@type extended: bool
@return: reverse dependency list (tuple) (or list of lists in case
of extended = True)
@rtype: tuple or frozenset
@raise AttributeError: if exclude_deptypes contains illegal values
"""