Add some migrations of type

This commit is contained in:
Cédric Krier
2008-11-04 12:01:11 +01:00
parent 976a944e97
commit 0ab0b988ca
+40 -24
View File
@@ -350,7 +350,7 @@ class table_handler:
for line in self.cursor.fetchall():
self.field2module[line[0]] = line[1]
def migrate_column(self, column_name, column_type):
def alter_size(self, column_name, column_type):
self.cursor.execute("ALTER TABLE \"%s\" " \
"RENAME COLUMN \"%s\" " \
@@ -367,6 +367,11 @@ class table_handler:
(self.table_name,))
self.update_definitions()
def alter_type(self, column_name, column_type):
self.cursor.execute('ALTER TABLE "' + self.table_name + '" ' \
'ALTER "' + column_name + '" TYPE ' + column_type)
self.update_definitions()
def db_default(self, column_name, value):
self.cursor.execute('ALTER TABLE "' + self.table_name + '" ' \
'ALTER COLUMN "' + column_name + '" SET DEFAULT %s',
@@ -380,29 +385,40 @@ class table_handler:
return
base_type = column_type[0].lower()
if base_type != self.table[column_name]['typname']:
logging.getLogger('init').warning(
'Unable to migrate column %s on table %s from %s to %s.' % \
(column_name, self.table_name,
self.table[column_name]['typname'], base_type))
if base_type != 'varchar':
return
if field_size == None:
if self.table[column_name]['size'] > 0:
self.migrate_column(column_name, base_type)
return
elif self.table[column_name]['size'] == field_size:
return
elif self.table[column_name]['size'] > 0 and \
self.table[column_name]['size'] < field_size:
self.migrate_column(column_name, column_type[1])
else:
logging.getLogger('init').warning(
'Unable to migrate column %s on table %s ' \
'from varchar(%s) to varchar(%s).' % \
(column_name, self.table_name,
self.table[column_name]['size'] > 0 and \
self.table[column_name]['size'] or "",
field_size))
if (self.table[column_name]['typname'], base_type) in [
('varchar', 'text'),
('text', 'varchar'),
('date', 'timestamp'),
('int4', 'float8'),
]:
self.alter_type(column_name, base_type)
else:
logging.getLogger('init').warning(
'Unable to migrate column %s on table %s ' \
'from %s to %s.' % \
(column_name, self.table_name,
self.table[column_name]['typname'], base_type))
if base_type == 'varchar' \
and self.table[column_name]['typname'] == 'varchar':
# Migrate size
if field_size == None:
if self.table[column_name]['size'] > 0:
self.alter_size(column_name, base_type)
pass
elif self.table[column_name]['size'] == field_size:
pass
elif self.table[column_name]['size'] > 0 and \
self.table[column_name]['size'] < field_size:
self.alter_size(column_name, column_type[1])
else:
logging.getLogger('init').warning(
'Unable to migrate column %s on table %s ' \
'from varchar(%s) to varchar(%s).' % \
(column_name, self.table_name,
self.table[column_name]['size'] > 0 and \
self.table[column_name]['size'] or "",
field_size))
return
column_type = column_type[1]