Beispiel #1
0
    def rename_table(self, model, old_db_table, new_db_table):
        """Rename a table.

        Args:
            model (django_evolution.mock_models.MockModel):
                The model representing the table to rename.

            old_db_table (unicode):
                The old table name.

            new_db_table (unicode):
                The new table name.

        Returns:
            django_evolution.db.sql_result.SQLResult:
            The resulting SQL for renaming the table.
        """
        sql_result = SQLResult()

        if old_db_table != new_db_table:
            sql_result.add(
                self.get_rename_table_sql(model, old_db_table, new_db_table))

        return sql_result
Beispiel #2
0
    def rename_column(self, model, old_field, new_field):
        """Rename a column on a table.

        Args:
            model (type):
                The :py:class:`~django.db.models.Model` class representing
                the table to rename the column on.

            old_field (django.db.models.Field):
                The field representing the old column.

            new_field (django.db.models.Field):
                The field representing the new column.

        Returns:
            django_evolution.db.sql_result.SQLResult:
            The resulting SQL for rebuilding the table.
        """
        if old_field.column == new_field.column:
            return []

        if self._can_rename_cols:
            qn = self.connection.ops.quote_name

            return SQLResult([
                'ALTER TABLE %s RENAME COLUMN %s TO %s;' %
                (qn(model._meta.db_table), qn(
                    old_field.column), qn(new_field.column))
            ])
        else:
            return SQLiteAlterTableSQLResult(evolver=self,
                                             model=model,
                                             alter_table=[
                                                 {
                                                     'op': 'RENAME COLUMN',
                                                     'old_field': old_field,
                                                     'new_field': new_field,
                                                 },
                                             ])
Beispiel #3
0
    def change_attribute(self,
                         model,
                         field,
                         attr_name,
                         new_attr_value,
                         initial=None):
        opts = model._meta
        table_name = opts.db_table
        setattr(field, attr_name, new_attr_value)
        fields = [
            f for f in opts.local_fields
            if f.db_type(connection=self.connection) is not None
        ]

        sql_result = SQLResult()
        sql_result.add(self.create_temp_table(fields))
        sql_result.add(self.copy_to_temp_table(table_name, fields))
        sql_result.add(
            self.insert_to_temp_table(opts.get_field(field.name), initial))
        sql_result.add(self.delete_table(table_name))
        sql_result.add(
            self.create_table(table_name, fields, create_index=False))
        sql_result.add(self.copy_from_temp_table(table_name, fields))
        sql_result.add(self.delete_table(TEMP_TABLE_NAME))

        return sql_result
Beispiel #4
0
    def add_column(self, model, f, initial):
        table_name = model._meta.db_table
        original_fields = [
            field for field in model._meta.local_fields
            if field.db_type(connection=self.connection) is not None
        ]
        new_fields = list(original_fields)
        new_fields.append(f)

        sql_result = SQLResult()
        sql_result.add(self.create_temp_table(new_fields))
        sql_result.add(self.copy_to_temp_table(table_name, original_fields))
        sql_result.add(self.insert_to_temp_table(f, initial))
        sql_result.add(self.delete_table(table_name))
        sql_result.add(
            self.create_table(table_name, new_fields, create_index=False))
        sql_result.add(self.copy_from_temp_table(table_name, new_fields))
        sql_result.add(self.delete_table(TEMP_TABLE_NAME))

        if f.unique or f.primary_key:
            self.record_index(model, [f],
                              use_constraint_name=True,
                              unique=True)

        return sql_result
Beispiel #5
0
    def get_drop_unique_constraint_sql(self, model, index_name):
        opts = model._meta
        table_name = opts.db_table
        fields = [
            f for f in opts.local_fields
            if f.db_type(connection=self.connection) is not None
        ]

        sql_result = SQLResult()
        sql_result.add(self.create_temp_table(fields))
        sql_result.add(self.copy_to_temp_table(table_name, fields))
        sql_result.add(self.delete_table(table_name))
        sql_result.add(self.create_table(table_name, fields))
        sql_result.add(self.copy_from_temp_table(table_name, fields))
        sql_result.add(self.delete_table(TEMP_TABLE_NAME))

        return sql_result
Beispiel #6
0
    def delete_column(self, model, f):
        field_list = [
            field for field in model._meta.local_fields
            # Remove the field to be deleted
            if f.name != field.name
            # and any Generic fields
            and field.db_type(connection=self.connection) is not None
        ]
        table_name = model._meta.db_table

        sql_result = SQLResult()
        sql_result.add(self.create_temp_table(field_list))
        sql_result.add(self.copy_to_temp_table(table_name, field_list))
        sql_result.add(self.delete_table(table_name))
        sql_result.add(self.create_table(table_name, field_list))
        sql_result.add(self.copy_from_temp_table(table_name, field_list))
        sql_result.add(self.delete_table(TEMP_TABLE_NAME))

        return sql_result
Beispiel #7
0
    def rename_column(self, model, old_field, new_field):
        sql_result = SQLResult()

        if old_field.column == new_field.column:
            # No Operation
            return sql_result

        opts = model._meta
        original_fields = opts.local_fields
        new_fields = []
        for f in original_fields:
            # Ignore Generic Fields
            if f.db_type(connection=self.connection) is not None:
                if f.name == old_field.name:
                    new_fields.append(new_field)
                else:
                    new_fields.append(f)

        table_name = opts.db_table

        sql_result.add(self.create_temp_table(new_fields))
        sql_result.add(
            self.copy_to_temp_table(table_name, original_fields, new_fields))
        sql_result.add(self.delete_table(table_name))
        sql_result.add(self.create_table(table_name, new_fields))
        sql_result.add(self.copy_from_temp_table(table_name, new_fields))
        sql_result.add(self.delete_table(TEMP_TABLE_NAME))

        return sql_result
Beispiel #8
0
    def change_attribute(self, model, field, attr_name, new_attr_value,
                         initial=None):
        opts = model._meta
        table_name = opts.db_table
        setattr(field, attr_name, new_attr_value)
        fields = [
            f
            for f in opts.local_fields
            if f.db_type(connection=self.connection) is not None
        ]

        sql_result = SQLResult()
        sql_result.add(self.create_temp_table(fields))
        sql_result.add(self.copy_to_temp_table(table_name, fields))
        sql_result.add(self.insert_to_temp_table(opts.get_field(field.name),
                                                 initial))
        sql_result.add(self.delete_table(table_name))
        sql_result.add(self.create_table(table_name, fields,
                                         create_index=False))
        sql_result.add(self.copy_from_temp_table(table_name, fields))
        sql_result.add(self.delete_table(TEMP_TABLE_NAME))

        return sql_result
Beispiel #9
0
    def get_drop_unique_constraint_sql(self, model, index_name):
        opts = model._meta
        table_name = opts.db_table
        fields = [
            f
            for f in opts.local_fields
            if f.db_type(connection=self.connection) is not None
        ]

        sql_result = SQLResult()
        sql_result.add(self.create_temp_table(fields))
        sql_result.add(self.copy_to_temp_table(table_name, fields))
        sql_result.add(self.delete_table(table_name))
        sql_result.add(self.create_table(table_name, fields))
        sql_result.add(self.copy_from_temp_table(table_name, fields))
        sql_result.add(self.delete_table(TEMP_TABLE_NAME))

        return sql_result
Beispiel #10
0
    def add_column(self, model, f, initial):
        table_name = model._meta.db_table
        original_fields = [
            field
            for field in model._meta.local_fields
            if field.db_type(connection=self.connection) is not None
        ]
        new_fields = list(original_fields)
        new_fields.append(f)

        sql_result = SQLResult()
        sql_result.add(self.create_temp_table(new_fields))
        sql_result.add(self.copy_to_temp_table(table_name, original_fields))
        sql_result.add(self.insert_to_temp_table(f, initial))
        sql_result.add(self.delete_table(table_name))
        sql_result.add(self.create_table(table_name, new_fields,
                                         create_index=False))
        sql_result.add(self.copy_from_temp_table(table_name, new_fields))
        sql_result.add(self.delete_table(TEMP_TABLE_NAME))

        if f.unique or f.primary_key:
            self.database_state.add_index(
                table_name=table_name,
                index_name=self.get_new_constraint_name(table_name, f.column),
                columns=[f.column],
                unique=True)

        return sql_result
Beispiel #11
0
    def rename_column(self, model, old_field, new_field):
        sql_result = SQLResult()

        if old_field.column == new_field.column:
            # No Operation
            return sql_result

        opts = model._meta
        original_fields = opts.local_fields
        new_fields = []
        for f in original_fields:
            # Ignore Generic Fields
            if f.db_type(connection=self.connection) is not None:
                if f.name == old_field.name:
                    new_fields.append(new_field)
                else:
                    new_fields.append(f)

        table_name = opts.db_table

        sql_result.add(self.create_temp_table(new_fields))
        sql_result.add(self.copy_to_temp_table(table_name, original_fields,
                                               new_fields))
        sql_result.add(self.delete_table(table_name))
        sql_result.add(self.create_table(table_name, new_fields))
        sql_result.add(self.copy_from_temp_table(table_name, new_fields))
        sql_result.add(self.delete_table(TEMP_TABLE_NAME))

        return sql_result
Beispiel #12
0
    def delete_column(self, model, f):
        field_list = [
            field for field in model._meta.local_fields
            # Remove the field to be deleted
            if f.name != field.name
            # and any Generic fields
            and field.db_type(connection=self.connection) is not None
        ]
        table_name = model._meta.db_table

        sql_result = SQLResult()
        sql_result.add(self.create_temp_table(field_list))
        sql_result.add(self.copy_to_temp_table(table_name, field_list))
        sql_result.add(self.delete_table(table_name))
        sql_result.add(self.create_table(table_name, field_list))
        sql_result.add(self.copy_from_temp_table(table_name, field_list))
        sql_result.add(self.delete_table(TEMP_TABLE_NAME))

        return sql_result