def _visit_column_change(self,table_name,col_name,delta): if not hasattr(delta,'result_column'): # Oracle needs the whole column definition, not just a lone name/type raise exceptions.NotSupportedError( "A column object is required to do this") column = delta.result_column # Oracle cannot drop a default once created, but it can set it to null. # We'll do that if default=None # http://forums.oracle.com/forums/message.jspa?messageID=1273234#1273234 dropdefault_hack = (column.default is None and 'default' in delta.keys()) # Oracle apparently doesn't like it when we say "not null" if the # column's already not null. Fudge it, so we don't need a new function notnull_hack = ((not column.nullable) and ('nullable' not in delta.keys())) # We need to specify NULL if we're removing a NOT NULL constraint null_hack = (column.nullable and ('nullable' in delta.keys())) if dropdefault_hack: #column.default = sqlalchemy.PassiveDefault("NULL") column.default = sqlalchemy.PassiveDefault(sqlalchemy.func.null()) if notnull_hack: column.nullable = True colspec=self.get_column_specification(column,override_nullable=null_hack) if null_hack: colspec += ' NULL' if notnull_hack: column.nullable = False if dropdefault_hack: column.default = None self.start_alter_table(table_name) self.append("MODIFY ") self.append(colspec)
def _visit_column_change(self, table, column, delta): # Oracle cannot drop a default once created, but it can set it # to null. We'll do that if default=None # http://forums.oracle.com/forums/message.jspa?messageID=1273234#1273234 dropdefault_hack = (column.server_default is None \ and 'server_default' in delta.keys()) # Oracle apparently doesn't like it when we say "not null" if # the column's already not null. Fudge it, so we don't need a # new function notnull_hack = ((not column.nullable) \ and ('nullable' not in delta.keys())) # We need to specify NULL if we're removing a NOT NULL # constraint null_hack = (column.nullable and ('nullable' in delta.keys())) if dropdefault_hack: column.server_default = sa.PassiveDefault(sa.sql.null()) if notnull_hack: column.nullable = True colspec = self.get_column_specification(column, override_nullable=null_hack) if null_hack: colspec += ' NULL' if notnull_hack: column.nullable = False if dropdefault_hack: column.server_default = None self.start_alter_table(table) self.append("MODIFY (") self.append(colspec) self.append(")")