Пример #1
0
 def get_alter_ops(table):
     schema = table.schema
     drops = []
     ops = []
     for column in table.column_list:
         if column.prev is None:
             sql = '%s %s' % (schema.ADD_COLUMN, column.get_sql())
             ops.append(
                 Op(sql,
                    obj=column,
                    type='create',
                    prefix=alter_table(table)))
         elif column.get_definition() != column.prev.get_definition():
             ops.extend(column.get_alter_ops())
     for cols, fkey in table.foreign_keys.items():
         sql = fkey.get_create_command()
         prev_fkey = table.prev.foreign_keys.get(cols)
         if prev_fkey is None:
             ops.append(Op(sql, obj=fkey, type='create'))
         elif sql != prev_fkey.get_create_command():
             drops.extend(prev_fkey.get_drop_ops())
             ops.append(Op(sql, obj=fkey, type='create'))
     for cols, index in table.indexes.items():
         if index.is_pk or index.is_unique: continue
         sql = index.get_create_command()
         prev_index = table.prev.indexes.get(cols)
         if prev_index is None:
             ops.append(Op(sql, obj=index, type='create'))
         elif sql != prev_index.get_create_command():
             drops.extend(prev_index.get_drop_ops())
             ops.append(Op(sql, obj=index, type='create'))
     for column in table.prev.column_list:
         if column.new is None:
             drops.extend(column.get_drop_ops())
     return drops + ops
Пример #2
0
    def get_alter_ops(column):
        table = column.table
        schema = column.table.schema
        sql = '%s %s' % (schema.ALTER_COLUMN, column.get_sql())

        provider = table.schema.provider
        sql, _ = provider.ast2sql(['ALTER COLUMN'])
        return [Op(sql, obj=column, type='alter', prefix=alter_table(table))]
Пример #3
0
 def get_rename_ops(column):
     prev_table = column.table
     schema = prev_table.schema
     quote_name = schema.provider.quote_name
     prev_name = quote_name(column.name)
     sql = '%s %s %s' % ('CHANGE', prev_name, column.new.get_sql())
     return [
         Op(sql, obj=column, type='rename', prefix=alter_table(prev_table))
     ]
Пример #4
0
 def get_rename_ops(column):
     prev_table = column.table
     schema = prev_table.schema
     quote_name = schema.provider.quote_name
     prev_name = quote_name(column.name)
     new_name = quote_name(column.new.name)
     sql = 'RENAME %s TO %s' % (prev_name, new_name)
     return [
         Op(sql, obj=column, type='rename', prefix=alter_table(prev_table))
     ]
Пример #5
0
 def get_drop_ops(foreign_key):
     schema = foreign_key.table.schema
     quote_name = schema.provider.quote_name
     sql = 'DROP CONSTRAINT %s' % quote_name(foreign_key.name)
     return [
         Op(sql,
            obj=foreign_key,
            type='drop',
            prefix=alter_table(foreign_key.table))
     ]
Пример #6
0
    def get_alter_ops(column):
        table = column.table
        provider = table.schema.provider
        quote_name = provider.quote_name
        prefix = '%s %s' % (table.schema.ALTER_COLUMN, quote_name(column.name))
        ops = []
        if column.sql_type != column.prev.sql_type:
            if column.prev.sql_type.lower() in ('json', 'jsonb'):
                if column.sql_type.lower() != 'text':
                    sql_type = 'TEXT::%s' % column.sql_type
                else:
                    sql_type = column.sql_type
            else:
                sql_type = column.sql_type
            sql = '%s TYPE %s USING %s::%s' % (
                prefix, column.sql_type, quote_name(column.name), sql_type)
            ops.append(
                Op(sql, obj=column, type='alter', prefix=alter_table(table)))

        if column.is_not_null and not column.prev.is_not_null:
            sql = '{} SET NOT NULL'.format(prefix)
            ops.append(
                Op(sql, obj=column, type='alter', prefix=alter_table(table)))
        elif not column.is_not_null and column.prev.is_not_null:
            sql = '{} DROP NOT NULL'.format(prefix)
            ops.append(
                Op(sql, obj=column, type='alter', prefix=alter_table(table)))

        if column.sql_default is None and column.prev.sql_default is not None:
            sql = '{} DROP DEFAULT'.format(prefix)
            ops.append(
                Op(sql, obj=column, type='alter', prefix=alter_table(table)))
        elif column.sql_default is not None and column.prev.sql_default != column.sql_default:
            value_class = provider.sqlbuilder_cls.value_class
            value = value_class(provider.paramstyle, column.sql_default)
            sql = '{} SET DEFAULT {}'.format(prefix, value)
            ops.append(
                Op(sql, obj=column, type='alter', prefix=alter_table(table)))

        return ops
Пример #7
0
 def get_drop_ops(column):
     table = column.table
     schema = table.schema
     quote_name = schema.provider.quote_name
     sql = 'DROP COLUMN %s' % quote_name(column.name)
     return [Op(sql, obj=column, type='drop', prefix=alter_table(table))]
Пример #8
0
 def get_rename_ops(table):
     schema = table.schema
     provider = schema.provider
     quote_name = provider.quote_name
     sql = '%s %s' % ('RENAME TO', quote_name(table.new.name))
     return [Op(sql, obj=table, type='rename', prefix=alter_table(table))]
Пример #9
0
 def get_alter_ops(column):
     sql = '%s %s' % ('MODIFY', column.get_sql())
     return [
         Op(sql, obj=column, type='alter', prefix=alter_table(column.table))
     ]