[yum-git] Branch 'yum-3_2_X' - 2 commits - yum/sqlitesack.py
James Antill
james at linux.duke.edu
Thu Jul 3 16:07:32 UTC 2008
yum/sqlitesack.py | 61 +++++++++++++++++++++++++-----------------------------
1 file changed, 29 insertions(+), 32 deletions(-)
New commits:
commit 381348cc5c852b7b2f2367b20dd854fc16b3068f
Author: James Antill <james at and.org>
Date: Thu Jul 3 12:07:28 2008 -0400
Add an arg. so _sql_pkgKey2po can use Data, convert some callers to use it.
diff --git a/yum/sqlitesack.py b/yum/sqlitesack.py
index d3ddca9..c81963f 100644
--- a/yum/sqlitesack.py
+++ b/yum/sqlitesack.py
@@ -424,13 +424,16 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
# this function is just silly and it reduces down to just this
return self.searchPrco(name, 'provides')
- def _sql_pkgKey2po(self, repo, cur, pkgs=None):
+ def _sql_pkgKey2po(self, repo, cur, pkgs=None, have_data=False):
""" Takes a cursor and maps the pkgKey rows into a list of packages. """
if pkgs is None: pkgs = []
for ob in cur:
if self._pkgKeyExcluded(repo, ob['pkgKey']):
continue
- pkgs.append(self._packageByKey(repo, ob['pkgKey']))
+ if have_data:
+ pkgs.append(self._packageByKeyData(repo, ob['pkgKey'], ob))
+ else:
+ pkgs.append(self._packageByKey(repo, ob['pkgKey']))
return pkgs
@catchSqliteException
@@ -763,23 +766,19 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
"""return a list of packages matching any of the given names. This is
only a match on package name, nothing else"""
+ pat_sqls = []
+ qsql = """select pkgId,pkgKey,name,epoch,version,release,arch
+ from packages where """
+ for name in names:
+ pat_sqls.append("name = ?")
+ qsql = qsql + " OR ".join(pat_sqls)
+
returnList = []
- for (repo,cache) in self.primarydb.items():
+ for (repo, cache) in self.primarydb.items():
cur = cache.cursor()
- pat_sqls = []
- qsql = """select pkgId,pkgKey,name,epoch,version,release,arch
- from packages where """
- for name in names:
- pat_sqls.append("name = ?")
- qsql = qsql + " OR ".join(pat_sqls)
- #print qsql
executeSQL(cur, qsql, list(names))
-
- for x in cur:
- po = self._packageByKeyData(repo, x['pkgKey'], x)
- if self._pkgExcluded(po):
- continue
- returnList.append(po)
+
+ self._sql_pkgKey2po(repo, cur, returnList, have_data=True)
return returnList
@@ -921,8 +920,8 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
allpkg = []
for (rep,cache) in self.primarydb.items():
cur = cache.cursor()
- executeSQL(cur, "select pkgKey from packages where name=? and arch=?",naTup)
- self._sql_pkgKey2po(rep, cur, allpkg)
+ executeSQL(cur, "select pkgId,pkgKey,name,epoch,version,release,arch from packages where name=? and arch=?", naTup)
+ self._sql_pkgKey2po(rep, cur, allpkg, have_data=True)
# if we've got zilch then raise
if not allpkg:
@@ -942,8 +941,8 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
allpkg = []
for (rep,cache) in self.primarydb.items():
cur = cache.cursor()
- executeSQL(cur, "select pkgKey from packages where name=?", (name,))
- self._sql_pkgKey2po(rep, cur, allpkg)
+ executeSQL(cur, "select pkgId,pkgKey,name,epoch,version,release,arch from packages where name=?", (name,))
+ self._sql_pkgKey2po(rep, cur, allpkg, have_data=True)
# if we've got zilch then raise
if not allpkg:
@@ -1058,7 +1057,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
return returnList
# make up our execute string
- q = "select pkgKey from packages WHERE"
+ q = "select pkgId,pkgKey,name,epoch,version,release,arch from packages WHERE"
for (col, var) in [('name', name), ('epoch', epoch), ('version', ver),
('arch', arch), ('release', rel)]:
if var:
@@ -1071,7 +1070,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
for (rep,cache) in self.primarydb.items():
cur = cache.cursor()
executeSQL(cur, q)
- self._sql_pkgKey2po(rep, cur, returnList)
+ self._sql_pkgKey2po(rep, cur, returnList, have_data=True)
return returnList
@catchSqliteException
commit 08f323275811a4590f11a561d1162b0eb9d11786
Author: James Antill <james at and.org>
Date: Thu Jul 3 12:00:45 2008 -0400
Add helper function to do self._packageByKey without the SQL lookup
diff --git a/yum/sqlitesack.py b/yum/sqlitesack.py
index c0f8839..d3ddca9 100644
--- a/yum/sqlitesack.py
+++ b/yum/sqlitesack.py
@@ -373,6 +373,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
return self._pkgKeyExcluded(po.repo, po.pkgKey)
def _packageByKey(self, repo, pkgKey):
+ """ Lookup a pkg by it's pkgKey, if we don't have it load it """
if not self._key2pkg.has_key(repo):
self._key2pkg[repo] = {}
if not self._key2pkg[repo].has_key(pkgKey):
@@ -383,6 +384,13 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
self._key2pkg[repo][pkgKey] = po
return self._key2pkg[repo][pkgKey]
+ def _packageByKeyData(self, repo, pkgKey, data):
+ """ Like _packageByKey() but we already have the data for .pc() """
+ if x['pkgKey'] not in self._key2pkg.get(repo, {}):
+ po = self.pc(repo, data)
+ self._key2pkg.setdefault(repo, {})[pkgKey] = po
+ return self._key2pkg[repo][x['pkgKey']]
+
def addDict(self, repo, datatype, dataobj, callback=None):
if self.added.has_key(repo):
if datatype in self.added[repo]:
@@ -767,14 +775,8 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
#print qsql
executeSQL(cur, qsql, list(names))
-
for x in cur:
- if self._key2pkg.get(repo, {}).has_key(x['pkgKey']):
- po = self._key2pkg[repo][x['pkgKey']]
- else:
- po = self.pc(repo,x)
- self._key2pkg.setdefault(repo, {})[po.pkgKey] = po
-
+ po = self._packageByKeyData(repo, x['pkgKey'], x)
if self._pkgExcluded(po):
continue
returnList.append(po)
@@ -1009,11 +1011,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
qsql = _FULL_PARSE_QUERY_BEG + " OR ".join(pat_sqls)
executeSQL(cur, qsql, pat_data)
for x in cur:
- if self._key2pkg.get(repo, {}).has_key(x['pkgKey']):
- po = self._key2pkg[repo][x['pkgKey']]
- else:
- po = self.pc(repo,x)
- self._key2pkg.setdefault(repo, {})[po.pkgKey] = po
+ po = self._packageByKeyData(repo, x['pkgKey'], x)
returnList.append(po)
if not patterns:
self.pkgobjlist = returnList
More information about the Yum-cvs-commits
mailing list