def setup_sqlite_dbs(self, initdb=True):
"""sets up the sqlite dbs w/table schemas and db_infos"""
destdir = os.path.join(self.conf.outputdir, self.conf.tempdir)
- self.md_sqlite = MetaDataSqlite(destdir)
+ try:
+ self.md_sqlite = MetaDataSqlite(destdir)
+ except sqlite.OperationalError, e:
+ raise MDError, _('Cannot create sqlite databases: %s.\nMaybe you need to clean up a .repodata dir?') % e
DELETE FROM provides WHERE pkgKey = old.pkgKey;
DELETE FROM conflicts WHERE pkgKey = old.pkgKey;
DELETE FROM obsoletes WHERE pkgKey = old.pkgKey;
- END;"""
+ END;""",
+ """INSERT into db_info values (%s, 'direct_create');""" % sqlitecachec.DBVERSION,
]
for cmd in schema:
"""CREATE TRIGGER remove_filelist AFTER DELETE ON packages
BEGIN
DELETE FROM filelist WHERE pkgKey = old.pkgKey;
- END;"""
+ END;""",
+ """INSERT into db_info values (%s, 'direct_create');""" % sqlitecachec.DBVERSION,
]
for cmd in schema:
executeSQL(self.filelists_cursor, cmd)
BEGIN
DELETE FROM changelog WHERE pkgKey = old.pkgKey;
END;""",
+ """INSERT into db_info values (%s, 'direct_create');""" % sqlitecachec.DBVERSION,
]
for cmd in schema:
# - that's what it is
newflag = flag
if flag is not None:
- newflag = flag & 64
- if newflag == 64:
+ newflag = flag & rpm.RPMSENSE_PREREQ
+ if newflag == rpm.RPMSENSE_PREREQ:
return 1
else:
return 0
def do_filelists_sqlite_dump(self, cur):
"""inserts filelists data in place, this assumes the tables exist"""
- #FIXME
- pass
-
+ # insert packagenumber + checksum into 'packages' table
+ q = 'insert into packages values (?, ?)'
+ p = (self.crp_packagenumber, self.checksum)
+
+ cur.execute(q, p)
+
+ # break up filelists and encode them
+ dirs = {}
+ for (filetype, files) in [('file', self.filelist), ('dir', self.dirlist),
+ ('ghost', self.ghostlist)]:
+ for filename in files:
+ (dirname,filename) = (os.path.split(filename))
+ if not dirs.has_key(dirname):
+ dirs[dirname] = {'files':[], 'types':[]}
+ dirs[dirname]['files'].append(filename)
+ dirs[dirname]['types'].append(filetype)
+
+ # insert packagenumber|dir|files|types into files table
+ p = []
+ for (dirname,direc) in dirs.items():
+ p.append((self.crp_packagenumber, dirname,
+ utils.encodefilenamelist(direc['files']),
+ utils.encodefiletypelist(direc['types'])))
+ if p:
+ q = 'insert into filelist values (?, ?, ?, ?)'
+ cur.executemany(q, p)
+
+
def do_other_sqlite_dump(self, cur):
"""inserts changelog data in place, this assumes the tables exist"""
- #FIXME
- pass
+ # insert packagenumber + checksum into 'packages' table
+ q = 'insert into packages values (?, ?)'
+ p = (self.crp_packagenumber, self.checksum)
+ cur.execute(q, p)
+
+ if self.changelog:
+ q = 'insert into changelog ("pkgKey", "date", "author", "changelog") values (%s, ?, ?, ?)' % self.crp_packagenumber
+ cur.executemany(q, self.changelog)
+
+
def do_sqlite_dump(self, md_sqlite):
"""write the metadata out to the sqlite dbs"""
self.do_primary_sqlite_dump(md_sqlite.primary_cursor)