[yum-cvs] yum/yum sqlitesack.py,1.16,1.17
Gijs Hollestelle
gijs at login.linux.duke.edu
Tue Mar 15 17:05:15 UTC 2005
Update of /home/groups/yum/cvs/yum/yum
In directory login:/tmp/cvs-serv21388
Modified Files:
sqlitesack.py
Log Message:
Explicitly name columns when doing selects from multiple tables. This should
fix sqlite 3.1 issues while remaining compatible with sqlite 3.0 and older.
Index: sqlitesack.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/yum/sqlitesack.py,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- sqlitesack.py 10 Mar 2005 22:44:39 -0000 1.16
+++ sqlitesack.py 15 Mar 2005 17:05:13 -0000 1.17
@@ -126,11 +126,13 @@
result = []
for (rep,cache) in self.otherdb.items():
cur = cache.cursor()
- cur.execute("select * from packages,changelog where packages.pkgId = %s and packages.pkgKey = changelog.pkgKey",pkgId)
+ cur.execute("select chagelog.date as date,\
+ chagelog.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['changelog.date'],
- ob['changelog.author'],
- ob['changelog.changelog']
+ result.append(( ob['date'],
+ ob['author'],
+ ob['changelog']
))
return result
@@ -139,13 +141,16 @@
for (rep, cache) in self.primarydb.items():
cur = cache.cursor()
for prco in result.keys():
- cur.execute("select * from packages,%s where packages.pkgId = %s and packages.pkgKey = %s.pkgKey", prco, pkgId, prco)
+ 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['%s.name' % prco ]
- version = ob['%s.version' % prco ]
- release = ob['%s.release' % prco ]
- epoch = ob['%s.epoch' % prco ]
- flags = ob['%s.flags' % prco ]
+ 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
@@ -155,12 +160,15 @@
found = False
result = {}
cur = cache.cursor()
- cur.execute("select * from packages,filelist where packages.pkgId = %s and packages.pkgKey = filelist.pkgKey", pkgId)
+ 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['filelist.dirname']
- filetypes = decodefiletypelist(ob['filelist.filetypes'])
- filenames = decodefilenamelist(ob['filelist.filenames'])
+ dirname = ob['dirname']
+ filetypes = decodefiletypelist(ob['filetypes'])
+ filenames = decodefilenamelist(ob['filenames'])
while(filenames):
if dirname:
filename = dirname+'/'+filenames.pop()
@@ -181,11 +189,11 @@
quotename = name.replace("'","''")
for (rep,cache) in self.primarydb.items():
cur = cache.cursor()
- cur.execute("select DISTINCT packages.pkgId from provides,packages where provides.name LIKE '%%%s%%' AND provides.pkgKey = packages.pkgKey" % quotename)
+ cur.execute("select DISTINCT packages.pkgId as pkgId from provides,packages where provides.name LIKE '%%%s%%' AND provides.pkgKey = packages.pkgKey" % quotename)
for ob in cur.fetchall():
- if (self.excludes[rep].has_key(ob['packages.pkgId'])):
+ if (self.excludes[rep].has_key(ob['pkgId'])):
continue
- pkg = self.getPackageDetails(ob['packages.pkgId'])
+ pkg = self.getPackageDetails(ob['pkgId'])
result.append((self.pc(pkg,rep)))
for (rep,cache) in self.filelistsdb.items():
@@ -195,7 +203,11 @@
# Either name is a substring of dirname or the directory part
# in name is a substring of dirname and the file part is part
# of filelist
- cur.execute("select * from packages,filelist where \
+ cur.execute("select packages.pkgId as pkgId,\
+ filelist.dirname as dirname,\
+ filelist.filetypes as filetypes,\
+ filelist.filenames as filenames \
+ from packages,filelist where \
(filelist.dirname LIKE '%%%s%%' \
OR (filelist.dirname LIKE '%%%s%%' AND\
filelist.filenames LIKE '%%%s%%'))\
@@ -204,15 +216,15 @@
# Check if it is an actual match
# The query above can give false positives, when
# a package provides /foo/aaabar it will also match /foo/bar
- if (self.excludes[rep].has_key(ob['packages.pkgId'])):
+ if (self.excludes[rep].has_key(ob['pkgId'])):
continue
real = False
- for filename in decodefilenamelist(ob['filelist.filenames']):
- if (ob['filelist.dirname']+'/'+filename).find(name) != -1:
+ for filename in decodefilenamelist(ob['filenames']):
+ if (ob['dirname']+'/'+filename).find(name) != -1:
real = True
if (not real):
continue
- pkg = self.getPackageDetails(ob['packages.pkgId'])
+ pkg = self.getPackageDetails(ob['pkgId'])
result.append((self.pc(pkg,rep)))
return result
@@ -220,18 +232,25 @@
obsoletes = {}
for (rep,cache) in self.primarydb.items():
cur = cache.cursor()
- cur.execute("select * from obsoletes,packages where obsoletes.pkgKey = packages.pkgKey")
+ cur.execute("select packages.name as name,\
+ packages.pkgId as pkgId,\
+ packages.arch as arch, packages.epoch as epoch,\
+ packages.release as release, packages.version as version,\
+ obsoletes.name as oname, obsoletes.epoch as oepoch,\
+ obsoletes.release as orelease, obsoletes.version as oversion,\
+ obsoletes.flags as oflags\
+ from obsoletes,packages where obsoletes.pkgKey = packages.pkgKey")
for ob in cur.fetchall():
# If the package that is causing the obsoletes is excluded
# continue without processing the obsoletes
- if (self.excludes[rep].has_key(ob['packages.pkgId'])):
+ if (self.excludes[rep].has_key(ob['pkgId'])):
continue
- key = ( ob['packages.name'],ob['packages.arch'],
- ob['packages.epoch'],ob['packages.version'],
- ob['packages.release'])
- (n,f,e,v,r) = ( ob['obsoletes.name'],ob['obsoletes.flags'],
- ob['obsoletes.epoch'],ob['obsoletes.version'],
- ob['obsoletes.release'])
+ key = ( ob['name'],ob['arch'],
+ ob['epoch'],ob['version'],
+ ob['release'])
+ (n,f,e,v,r) = ( ob['oname'],ob['oflags'],
+ ob['oepoch'],ob['oversion'],
+ ob['orelease'])
obsoletes.setdefault(key,[]).append((n,f,(e,v,r)))
@@ -296,19 +315,23 @@
for (rep,cache) in self.filelistsdb.items():
cur = cache.cursor()
(dirname,filename) = os.path.split(name)
- cur.execute("select * from filelist,packages where dirname = %s AND filelist.pkgKey = packages.pkgKey" , (dirname))
+ cur.execute("select packages.pkgId as pkgId,\
+ filelist.dirname as dirname,\
+ filelist.filetypes as filetypes,\
+ filelist.filenames as filenames \
+ from filelist,packages where dirname = %s AND filelist.pkgKey = packages.pkgKey" , (dirname))
files = cur.fetchall()
for res in files:
- if (self.excludes[rep].has_key(res['packages.pkgId'])):
+ if (self.excludes[rep].has_key(res['pkgId'])):
continue
# If it matches the dirname, that doesnt mean it matches
# the filename, check if it does
if filename and \
- not filename in res['filelist.filenames'].split('/'):
+ not filename in res['filenames'].split('/'):
continue
# If it matches we only know the packageId
- pkg = self.getPackageDetails(res['packages.pkgId'])
+ pkg = self.getPackageDetails(res['pkgId'])
results.append(self.pc(pkg,rep))
return results
More information about the Yum-cvs-commits
mailing list