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_name,col_name,delta): if not hasattr(delta,'result_column'): # Mysql 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 colspec = self.get_column_specification(column) self.start_alter_table(table_name) self.append("CHANGE COLUMN ") self.append(col_name) self.append(' ') self.append(colspec)
def visit_index(self, param): # If MySQL can do this, I can't find how raise exceptions.NotSupportedError("MySQL cannot rename indexes")
def get_constraint_name(self,cons): # Oracle constraints can't guess their name like other DBs if not cons.name: raise exceptions.NotSupportedError( "Oracle constraint names must be explicitly stated") return cons.name
def _not_supported(self, op): raise exceptions.NotSupportedError( "SQLite does not support " "%s; see http://www.sqlite.org/lang_altertable.html" % op)
def visit_column(self, column): raise exceptions.NotSupportedError( "SQLite does not support " "DROP COLUMN; see http://www.sqlite.org/lang_altertable.html")