Fix column creation in make_update_script_for_model.

Generating the script needs internal API updates:
https://code.google.com/p/sqlalchemy-migrate/issues/detail?id=113

Getting the script to run needs the new columns defined:
https://code.google.com/p/sqlalchemy-migrate/issues/detail?id=123

Table metadata represents the former state and does not contain
the columns being added.
This commit is contained in:
Gabriel 2011-07-04 21:50:55 +02:00
parent 28d2ca21d5
commit 5cfc74959f

View File

@ -150,25 +150,23 @@ class ModelGenerator(object):
for tableName in self.diff.tables_different: for tableName in self.diff.tables_different:
dbTable = self.diff.metadataB.tables[tableName] dbTable = self.diff.metadataB.tables[tableName]
missingInDatabase, missingInModel, diffDecl = \ td = self.diff.tables_different[tableName]
self.diff.colDiffs[tableName] for col in td.columns_missing_from_A:
for col in missingInDatabase: upgradeCommands.append('%s.append_column(%s)' % (
upgradeCommands.append('%s.columns[%r].create()' % ( tableName,
modelTable, col.name)) self.column_repr(
downgradeCommands.append('%s.columns[%r].drop()' % ( self.diff.metadataB.tables[tableName].columns[col])))
modelTable, col.name)) downgradeCommands.append('%s.columns[%r].drop()' % (tableName, col))
for col in missingInModel: for col in td.columns_missing_from_B:
upgradeCommands.append('%s.columns[%r].drop()' % ( upgradeCommands.append('%s.columns[%r].drop()' % (tableName, col))
modelTable, col.name)) downgradeCommands.append('%s.columns[%r].create()' % (tableName, col))
downgradeCommands.append('%s.columns[%r].create()' % ( for modelCol, databaseCol, modelDecl, databaseDecl in td.columns_different:
modelTable, col.name))
for modelCol, databaseCol, modelDecl, databaseDecl in diffDecl:
upgradeCommands.append( upgradeCommands.append(
'assert False, "Can\'t alter columns: %s:%s=>%s"' % ( 'assert False, "Can\'t alter columns: %s:%s=>%s"' % (
modelTable, modelCol.name, databaseCol.name)) tableName, modelCol.name, databaseCol.name))
downgradeCommands.append( downgradeCommands.append(
'assert False, "Can\'t alter columns: %s:%s=>%s"' % ( 'assert False, "Can\'t alter columns: %s:%s=>%s"' % (
modelTable, modelCol.name, databaseCol.name)) tableName, modelCol.name, databaseCol.name))
pre_command = ' meta.bind = migrate_engine' pre_command = ' meta.bind = migrate_engine'
return ( return (
@ -246,3 +244,4 @@ class ModelGenerator(object):
except: except:
trans.rollback() trans.rollback()
raise raise