Esempio n. 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)
Esempio n. 2
0
    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(")")