extras-buildsys/server DBManager.py,1.1.2.2.4.4,1.1.2.2.4.5
Michael Schwendt
mschwendt at fedoraproject.org
Fri Sep 19 23:25:25 UTC 2008
Author: mschwendt
Update of /cvs/fedora/extras-buildsys/server
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv4555/server
Modified Files:
Tag: Plague-0_4_5
DBManager.py
Log Message:
fix for sqlite's limited ALTER TABLE
Index: DBManager.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/DBManager.py,v
retrieving revision 1.1.2.2.4.4
retrieving revision 1.1.2.2.4.5
diff -u -r1.1.2.2.4.4 -r1.1.2.2.4.5
--- DBManager.py 8 Sep 2008 15:56:38 -0000 1.1.2.2.4.4
+++ DBManager.py 19 Sep 2008 23:25:25 -0000 1.1.2.2.4.5
@@ -312,6 +312,7 @@
if not dbcx:
os._exit(1)
self._ensure_tables(dbcx)
+ self._fix_tables(dbcx)
del dbcx
def dbcx(self):
@@ -358,22 +359,6 @@
print "Could not access the job database. Reason: '%s'. Exiting..." % e
os._exit(1)
- # Rename columns in jobs table, because `RELEASE` is a new
- # reserved keyword in MySQL 5, and the quote character is
- # different for Postgresql.
- for i in range(len(curs.description or [])):
- if curs.description[i][0].upper() == 'RELEASE':
- if self.engine == 'mysql':
- curs.execute('ALTER TABLE jobs CHANGE `release` rpm_release VARCHAR(25);')
- curs.execute('ALTER TABLE jobs CHANGE `version` rpm_version VARCHAR(25);')
- curs.execute('ALTER TABLE jobs CHANGE `epoch` rpm_epoch VARCHAR(4);')
- else:
- curs.execute('ALTER TABLE jobs CHANGE release rpm_release VARCHAR(25);')
- curs.execute('ALTER TABLE jobs CHANGE version rpm_version VARCHAR(25);')
- curs.execute('ALTER TABLE jobs CHANGE epoch rpm_epoch VARCHAR(4);')
- dbcx.commit()
- break
-
# Create the archjobs table
try:
curs.execute('SELECT * FROM archjobs LIMIT 4')
@@ -396,3 +381,32 @@
print "Could not access the job database. Reason: '%s'. Exiting..." % e
os._exit(1)
+ def _fix_tables(self, dbcx):
+ """ Fix database tables for compatibility with e.g. MySQL 5 """
+
+ # Rename columns in jobs table, because `RELEASE` is a new
+ # reserved keyword in MySQL 5, and the quote character is
+ # different for Postgresql.
+ curs = dbcx.cursor()
+ curs.execute('SELECT * FROM jobs LIMIT 1')
+ for i in range(len(curs.description or [])):
+ if curs.description[i][0].upper() == 'RELEASE':
+ if self.engine == 'mysql':
+ curs.execute('ALTER TABLE jobs CHANGE `release` rpm_release VARCHAR(25);')
+ curs.execute('ALTER TABLE jobs CHANGE `version` rpm_version VARCHAR(25);')
+ curs.execute('ALTER TABLE jobs CHANGE `epoch` rpm_epoch VARCHAR(4);')
+ dbcx.commit()
+ elif self.engine == 'sqlite':
+ # No column rename available, so reconstruct a new table.
+ curs.execute('ALTER TABLE jobs RENAME TO oldjobs;')
+ self._ensure_tables(dbcx)
+ curs.execute('INSERT INTO jobs SELECT * FROM oldjobs;')
+ curs.execute('DROP TABLE oldjobs;')
+ dbcx.commit()
+ else:
+ curs.execute('ALTER TABLE jobs CHANGE release rpm_release VARCHAR(25);')
+ curs.execute('ALTER TABLE jobs CHANGE version rpm_version VARCHAR(25);')
+ curs.execute('ALTER TABLE jobs CHANGE epoch rpm_epoch VARCHAR(4);')
+ dbcx.commit()
+ break
+
More information about the fedora-extras-commits
mailing list