class SQL::TableModifier

Attributes

adapter[RW]
opts[RW]
statements[RW]
table_name[RW]

Public Class Methods

new(adapter, table_name, opts = {}, &block) click to toggle source
# File lib/dm-migrations/sql/table_modifier.rb, line 7
def initialize(adapter, table_name, opts = {}, &block)
  @adapter = adapter
  @table_name = table_name.to_s
  @opts = (opts)

  @statements = []

  self.instance_eval &block
end

Public Instance Methods

add_column(name, type, opts = {}) click to toggle source
# File lib/dm-migrations/sql/table_modifier.rb, line 17
def add_column(name, type, opts = {})
  column = SQL::TableCreator::Column.new(@adapter, name, type, opts)
  @statements << "ALTER TABLE #{quoted_table_name} ADD COLUMN #{column.to_sql}"
end
change_column(name, type, opts = {}) click to toggle source
# File lib/dm-migrations/sql/table_modifier.rb, line 40
def change_column(name, type, opts = {})
  column = SQL::TableCreator::Column.new(@adapter, name, type, opts)
  @statements << @adapter.change_column_type_statement(table_name, column)
end
drop_column(name) click to toggle source
# File lib/dm-migrations/sql/table_modifier.rb, line 22
def drop_column(name)
  # raise NotImplemented for SQLite3. Can't ALTER TABLE, need to copy table.
  # We'd have to inspect it, and we can't, since we aren't executing any queries yet.
  # TODO instead of building the SQL queries when executing the block, create AddColumn,
  # AlterColumn and DropColumn objects that get #to_sql'd
  if name.is_a?(Array)
    name.each{ |n| drop_column(n) }
  else
    @statements << "ALTER TABLE #{quoted_table_name} DROP COLUMN #{quote_column_name(name)}"
  end
end
Also aliased as: drop_columns
drop_columns(name)
Alias for: drop_column
quote_column_name(name) click to toggle source
# File lib/dm-migrations/sql/table_modifier.rb, line 45
def quote_column_name(name)
  @adapter.send(:quote_name, name.to_s)
end
quoted_table_name() click to toggle source
# File lib/dm-migrations/sql/table_modifier.rb, line 49
def quoted_table_name
  @adapter.send(:quote_name, table_name)
end
rename_column(name, new_name, opts = {}) click to toggle source
# File lib/dm-migrations/sql/table_modifier.rb, line 35
def rename_column(name, new_name, opts = {})
  # raise NotImplemented for SQLite3
  @statements << "ALTER TABLE #{quoted_table_name} RENAME COLUMN #{quote_column_name(name)} TO #{quote_column_name(new_name)}"
end
to_sql() click to toggle source
# File lib/dm-migrations/sql/table_modifier.rb, line 53
def to_sql
  @statements.join(';')
end