[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