From 5cfc74959f6f7cf0ff58693613ca410a256c3b4f Mon Sep 17 00:00:00 2001 From: Gabriel Date: Mon, 4 Jul 2011 21:50:55 +0200 Subject: 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. --- migrate/versioning/genmodel.py | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/migrate/versioning/genmodel.py b/migrate/versioning/genmodel.py index 826575a..6cb8e09 100644 --- a/migrate/versioning/genmodel.py +++ b/migrate/versioning/genmodel.py @@ -150,25 +150,23 @@ class ModelGenerator(object): for tableName in self.diff.tables_different: dbTable = self.diff.metadataB.tables[tableName] - missingInDatabase, missingInModel, diffDecl = \ - self.diff.colDiffs[tableName] - for col in missingInDatabase: - upgradeCommands.append('%s.columns[%r].create()' % ( - modelTable, col.name)) - downgradeCommands.append('%s.columns[%r].drop()' % ( - modelTable, col.name)) - for col in missingInModel: - upgradeCommands.append('%s.columns[%r].drop()' % ( - modelTable, col.name)) - downgradeCommands.append('%s.columns[%r].create()' % ( - modelTable, col.name)) - for modelCol, databaseCol, modelDecl, databaseDecl in diffDecl: + td = self.diff.tables_different[tableName] + for col in td.columns_missing_from_A: + upgradeCommands.append('%s.append_column(%s)' % ( + tableName, + self.column_repr( + self.diff.metadataB.tables[tableName].columns[col]))) + downgradeCommands.append('%s.columns[%r].drop()' % (tableName, col)) + for col in td.columns_missing_from_B: + upgradeCommands.append('%s.columns[%r].drop()' % (tableName, col)) + downgradeCommands.append('%s.columns[%r].create()' % (tableName, col)) + for modelCol, databaseCol, modelDecl, databaseDecl in td.columns_different: upgradeCommands.append( 'assert False, "Can\'t alter columns: %s:%s=>%s"' % ( - modelTable, modelCol.name, databaseCol.name)) + tableName, modelCol.name, databaseCol.name)) downgradeCommands.append( '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' return ( @@ -246,3 +244,4 @@ class ModelGenerator(object): except: trans.rollback() raise + -- cgit v1.2.1