Пример #1
0
    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)
Пример #2
0
 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)
Пример #3
0
 def visit_index(self, param):
     # If MySQL can do this, I can't find how
     raise exceptions.NotSupportedError("MySQL cannot rename indexes")
Пример #4
0
 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
Пример #5
0
 def _not_supported(self, op):
     raise exceptions.NotSupportedError(
         "SQLite does not support "
         "%s; see http://www.sqlite.org/lang_altertable.html" % op)
Пример #6
0
 def visit_column(self, column):
     raise exceptions.NotSupportedError(
         "SQLite does not support "
         "DROP COLUMN; see http://www.sqlite.org/lang_altertable.html")