Class: Sequel::Schema::AlterTableGenerator

Inherits:
Object
  • Object
show all
Defined in:
lib/sequel_core/schema/generator.rb

Overview

The Schema::AlterTableGenerator creates DDL operations on existing tables, such as adding/removing/modifying columns/indexes/constraints.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(db, &block) ⇒ AlterTableGenerator

Set the Database object to which to apply the DDL, and evaluate the block in the context of this object.



157
158
159
160
161
# File 'lib/sequel_core/schema/generator.rb', line 157

def initialize(db, &block)
  @db = db
  @operations = []
  instance_eval(&block) if block
end

Instance Attribute Details

#operationsObject (readonly)

An array of DDL operations to perform



153
154
155
# File 'lib/sequel_core/schema/generator.rb', line 153

def operations
  @operations
end

Instance Method Details

#add_column(name, type, opts = {}) ⇒ Object

Add a column with the given name, type, and opts to the DDL for the table. See Generator#column for the available options.



165
166
167
# File 'lib/sequel_core/schema/generator.rb', line 165

def add_column(name, type, opts = {})
  @operations << {:op => :add_column, :name => name, :type => type}.merge(opts)
end

#add_constraint(name, *args, &block) ⇒ Object

Add a constraint with the given name and args to the DDL for the table. See Generator#constraint.



171
172
173
174
# File 'lib/sequel_core/schema/generator.rb', line 171

def add_constraint(name, *args, &block)
  @operations << {:op => :add_constraint, :name => name, :type => :check, \
    :check => block || args}
end

#add_foreign_key(name, table, opts = {}) ⇒ Object

Add a foreign key with the given name and referencing the given table to the DDL for the table. See Generator#column for the available options.



178
179
180
# File 'lib/sequel_core/schema/generator.rb', line 178

def add_foreign_key(name, table, opts = {})
  add_column(name, :integer, {:table=>table}.merge(opts))
end

#add_full_text_index(columns, opts = {}) ⇒ Object

Add a full text index on the given columns to the DDL for the table. See Generator#index for available options.



184
185
186
# File 'lib/sequel_core/schema/generator.rb', line 184

def add_full_text_index(columns, opts = {})
  add_index(columns, {:type=>:full_text}.merge(opts))
end

#add_index(columns, opts = {}) ⇒ Object

Add an index on the given columns to the DDL for the table. See Generator#index for available options.



190
191
192
# File 'lib/sequel_core/schema/generator.rb', line 190

def add_index(columns, opts = {})
  @operations << {:op => :add_index, :columns => Array(columns)}.merge(opts)
end

#add_primary_key(name, opts = {}) ⇒ Object

Add a primary key to the DDL for the table. See Generator#column for the available options.



196
197
198
199
# File 'lib/sequel_core/schema/generator.rb', line 196

def add_primary_key(name, opts = {})
  opts = @db.serial_primary_key_options.merge(opts)
  add_column(name, opts.delete(:type), opts)
end

#add_spatial_index(columns, opts = {}) ⇒ Object

Add a spatial index on the given columns to the DDL for the table. See Generator#index for available options.



203
204
205
# File 'lib/sequel_core/schema/generator.rb', line 203

def add_spatial_index(columns, opts = {})
  add_index(columns, {:type=>:spatial}.merge(opts))
end

#drop_column(name) ⇒ Object

Remove a column from the DDL for the table.



208
209
210
# File 'lib/sequel_core/schema/generator.rb', line 208

def drop_column(name)
  @operations << {:op => :drop_column, :name => name}
end

#drop_constraint(name) ⇒ Object

Remove a constraint from the DDL for the table.



213
214
215
# File 'lib/sequel_core/schema/generator.rb', line 213

def drop_constraint(name)
  @operations << {:op => :drop_constraint, :name => name}
end

#drop_index(columns) ⇒ Object

Remove an index from the DDL for the table.



218
219
220
# File 'lib/sequel_core/schema/generator.rb', line 218

def drop_index(columns)
  @operations << {:op => :drop_index, :columns => Array(columns)}
end

#rename_column(name, new_name, opts = {}) ⇒ Object

Modify a column’s name in the DDL for the table.



223
224
225
# File 'lib/sequel_core/schema/generator.rb', line 223

def rename_column(name, new_name, opts = {})
  @operations << {:op => :rename_column, :name => name, :new_name => new_name}.merge(opts)
end

#set_column_default(name, default) ⇒ Object

Modify a column’s default value in the DDL for the table.



228
229
230
# File 'lib/sequel_core/schema/generator.rb', line 228

def set_column_default(name, default)
  @operations << {:op => :set_column_default, :name => name, :default => default}
end

#set_column_type(name, type) ⇒ Object

Modify a column’s type in the DDL for the table.



233
234
235
# File 'lib/sequel_core/schema/generator.rb', line 233

def set_column_type(name, type)
  @operations << {:op => :set_column_type, :name => name, :type => type}
end