Sha256: d31847b7c02cc514bc4020038b6ee0ad1e8e51d5ed76227ab2a90c21a1b106a6

Contents?: true

Size: 1.47 KB

Versions: 156

Compression:

Stored size: 1.47 KB

Contents

# frozen-string-literal: true

module Sequel::Database::SplitAlterTable
  private

  # Preprocess the array of operations.  If it looks like some operations depend
  # on results of earlier operations and may require reloading the schema to
  # work correctly, split those operations into separate lists, and between each
  # list, remove the cached schema so that the later operations deal with the
  # then current table schema.
  def apply_alter_table(name, ops)
    modified_columns = []
    op_groups = [[]]
    ops.each do |op|
      case op[:op]
      when :add_column, :set_column_type, :set_column_null, :set_column_default
        if modified_columns.include?(op[:name])
          op_groups << []
        else
          modified_columns << op[:name]
        end
      when :rename_column
        if modified_columns.include?(op[:name]) || modified_columns.include?(op[:new_name])
          op_groups << []
        end
        modified_columns << op[:name] unless modified_columns.include?(op[:name])
        modified_columns << op[:new_name] unless modified_columns.include?(op[:new_name])
      end
      if split_alter_table_op?(op)
        op_groups << []
      end
      op_groups.last << op
    end

    op_groups.each do |opgs|
      next if opgs.empty?
      alter_table_sql_list(name, opgs).each{|sql| execute_ddl(sql)}
      remove_cached_schema(name)
    end
  end

  # Whether the given alter table op should start a new group.
  def split_alter_table_op?(op)
    false
  end
end

Version data entries

156 entries across 137 versions & 2 rubygems

Version Path
sequel-5.33.0 lib/sequel/adapters/utils/split_alter_table.rb
tdiary-5.1.2 vendor/bundle/ruby/2.7.0/gems/sequel-5.32.0/lib/sequel/adapters/utils/split_alter_table.rb
tdiary-5.1.2 vendor/bundle/ruby/2.6.0/gems/sequel-5.26.0/lib/sequel/adapters/utils/split_alter_table.rb
sequel-5.32.0 lib/sequel/adapters/utils/split_alter_table.rb
sequel-5.31.0 lib/sequel/adapters/utils/split_alter_table.rb
sequel-5.30.0 lib/sequel/adapters/utils/split_alter_table.rb
tdiary-5.1.1 vendor/bundle/ruby/2.6.0/gems/sequel-5.26.0/lib/sequel/adapters/utils/split_alter_table.rb
tdiary-5.1.1 vendor/bundle/ruby/2.7.0/gems/sequel-5.29.0/lib/sequel/adapters/utils/split_alter_table.rb
sequel-5.29.0 lib/sequel/adapters/utils/split_alter_table.rb
sequel-5.28.0 lib/sequel/adapters/utils/split_alter_table.rb
sequel-5.27.0 lib/sequel/adapters/utils/split_alter_table.rb
tdiary-5.1.0 vendor/bundle/gems/sequel-5.26.0/lib/sequel/adapters/utils/split_alter_table.rb
sequel-5.26.0 lib/sequel/adapters/utils/split_alter_table.rb
sequel-5.25.0 lib/sequel/adapters/utils/split_alter_table.rb
sequel-5.24.0 lib/sequel/adapters/utils/split_alter_table.rb
sequel-5.23.0 lib/sequel/adapters/utils/split_alter_table.rb
sequel-5.22.0 lib/sequel/adapters/utils/split_alter_table.rb
sequel-5.21.0 lib/sequel/adapters/utils/split_alter_table.rb
sequel-5.20.0 lib/sequel/adapters/utils/split_alter_table.rb
tdiary-5.0.13 vendor/bundle/gems/sequel-5.18.0/lib/sequel/adapters/utils/split_alter_table.rb