[yum-cvs] yum/yum sqlitesack.py,1.38,1.39
Jeremy Katz
katzj at linux.duke.edu
Fri Aug 25 15:57:07 UTC 2006
Update of /home/groups/yum/cvs/yum/yum
In directory login1.linux.duke.edu:/tmp/cvs-serv25539/yum
Modified Files:
sqlitesack.py
Log Message:
speed up sqlite querying a bit by only looking things up in the appropriate
sqlitedb and also only getting what we want
Index: sqlitesack.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/yum/sqlitesack.py,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -r1.38 -r1.39
--- sqlitesack.py 19 Jun 2006 21:46:54 -0000 1.38
+++ sqlitesack.py 25 Aug 2006 15:57:05 -0000 1.39
@@ -38,43 +38,81 @@
self.pkgId = pkgdict.pkgId
self.simple['id'] = self.pkgId
self.changelog = None
+ self.files = None
- def loadChangelog(self):
- if hasattr(self, 'dbusedother'):
- return
- self.dbusedother = 1
- self.changelog = self.sack.getChangelog(self.pkgId)
-
def returnSimple(self, varname):
- if (not self.simple.has_key(varname) and not hasattr(self,'dbusedsimple')):
- # Make sure we only try once to get the stuff from the database
- self.dbusedsimple = 1
- details = self.sack.getPackageDetails(self.pkgId)
- self.importFromDict(details)
+ if not self.simple.has_key(varname):
+ cache = self.sack.primarydb[self.repoid]
+ c = cache.cursor()
+ c.execute("select %s from packages where pkgId = %s",
+ varname, self.pkgId)
+ r = c.fetchone()
+ self.simple[varname] = r[0]
return YumAvailablePackage.returnSimple(self,varname)
- def loadFiles(self):
- if (hasattr(self,'dbusedfiles')):
+ def _loadFiles(self):
+ if self.files is not None:
return
- self.dbusedfiles = 1
- self.files = self.sack.getFiles(self.pkgId)
+ result = {}
+ cache = self.sack.filelistsdb[self.repoid]
+ cur = cache.cursor()
+ cur.execute("select filelist.dirname as dirname, "
+ "filelist.filetypes as filetypes, "
+ "filelist.filenames as filenames from packages,filelist "
+ "where packages.pkgId = %s and "
+ "packages.pkgKey = filelist.pkgKey", self.pkgId)
+ for ob in cur.fetchall():
+ dirname = ob['dirname']
+ filetypes = decodefiletypelist(ob['filetypes'])
+ filenames = decodefilenamelist(ob['filenames'])
+ while(filenames):
+ if dirname:
+ filename = dirname+'/'+filenames.pop()
+ else:
+ filename = filenames.pop()
+ filetype = filetypes.pop()
+ result.setdefault(filetype,[]).append(filename)
+ self.files = result
def returnChangelog(self):
- self.loadChangelog()
- return YumAvailablePackage.returnChangelog(self)
+ if not self.changelog:
+ cache = self.sack.otherdb[self.repoid]
+ cur = cache.cursor()
+ cur.execute("select changelog.date as date, "
+ "changelog.author as author, "
+ "changelog.changelog as changelog "
+ "from packages,changelog where packages.pkgId = %s "
+ "and packages.pkgKey = changelog.pkgKey", self.pkgId)
+ for ob in cur.fetchall():
+ result.append( (ob['date'], ob['author'], ob['changelog']) )
+ self.changelog = result
+ return self.changelog
def returnFileEntries(self, ftype='file'):
- self.loadFiles()
+ self._loadFiles()
return YumAvailablePackage.returnFileEntries(self,ftype)
def returnFileTypes(self):
- self.loadFiles()
+ self._loadFiles()
return YumAvailablePackage.returnFileTypes(self)
def returnPrco(self, prcotype):
if not self.prco[prcotype]:
- self.prco = self.sack.getPrco(self.pkgId, prcotype)
+ cache = self.sack.primarydb[self.repoid]
+ cur = cache.cursor()
+ cur.execute("select %s.name as name, %s.version as version, "
+ "%s.release as release, %s.epoch as epoch, "
+ "%s.flags as flags from packages,%s "
+ "where packages.pkgId = %s and "
+ "packages.pkgKey = %s.pkgKey",
+ prcotype, prcotype, prcotype, prcotype,
+ prcotype, prcotype, self.pkgId, prcotype)
+ for ob in cur.fetchall():
+ self.prco[prcotype].append((ob['name'],
+ ob['flags'],
+ (ob['epoch'], ob['version'], ob['release'])))
+
return self.prco[prcotype]
class YumSqlitePackageSack(yumRepo.YumPackageSack):
@@ -125,67 +163,7 @@
# We can not handle this yet...
raise "Sorry sqlite does not support %s" % (datatype)
- def getChangelog(self,pkgId):
- result = []
- for (rep,cache) in self.otherdb.items():
- cur = cache.cursor()
- cur.execute("select changelog.date as date,\
- changelog.author as author,\
- changelog.changelog as changelog from packages,changelog where packages.pkgId = %s and packages.pkgKey = changelog.pkgKey",pkgId)
- for ob in cur.fetchall():
- result.append(( ob['date'],
- ob['author'],
- ob['changelog']
- ))
- return result
-
- def getPrco(self,pkgId, prcotype=None):
- if prcotype is not None:
- result = {'requires': [], 'provides': [], 'obsoletes': [], 'conflicts': []}
- else:
- result = { prcotype: [] }
- for (rep, cache) in self.primarydb.items():
- cur = cache.cursor()
- for prco in result.keys():
- cur.execute("select %s.name as name, %s.version as version,\
- %s.release as release, %s.epoch as epoch, %s.flags as flags\
- from packages,%s\
- where packages.pkgId = %s and packages.pkgKey = %s.pkgKey", prco, prco, prco, prco, prco, prco, pkgId, prco)
- for ob in cur.fetchall():
- name = ob['name']
- version = ob['version']
- release = ob['release']
- epoch = ob['epoch']
- flags = ob['flags']
- result[prco].append((name, flags, (epoch, version, release)))
- return result
-
# Get all files for a certain pkgId from the filelists.xml metadata
- def getFiles(self,pkgId):
- for (rep,cache) in self.filelistsdb.items():
- found = False
- result = {}
- cur = cache.cursor()
- cur.execute("select filelist.dirname as dirname,\
- filelist.filetypes as filetypes,\
- filelist.filenames as filenames from packages,filelist\
- where packages.pkgId = %s and packages.pkgKey = filelist.pkgKey", pkgId)
- for ob in cur.fetchall():
- found = True
- dirname = ob['dirname']
- filetypes = decodefiletypelist(ob['filetypes'])
- filenames = decodefilenamelist(ob['filenames'])
- while(filenames):
- if dirname:
- filename = dirname+'/'+filenames.pop()
- else:
- filename = filenames.pop()
- filetype = filetypes.pop()
- result.setdefault(filetype,[]).append(filename)
- if (found):
- return result
- return {}
-
# Search packages that either provide something containing name
# or provide a file containing name
def searchAll(self,name, query_type='like'):
More information about the Yum-cvs-commits
mailing list