Class: Sequel::Schema::AlterTableGenerator

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

Overview

Schema::AlterTableGenerator is an internal class that the user is not expected to instantiate directly. Instances are created by Database#alter_table. It is used to specify table alteration parameters. It takes a Database object and a block of operations to perform on the table, and gives the Database a table an array of operations, which the database uses to alter a table’s description.

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.



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

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



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

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.



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

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.



220
221
222
223
# File 'lib/sequel_core/schema/generator.rb', line 220

def add_constraint(name, *args, &block)
  @operations << {:op => :add_constraint, :name => name, :type => :check, \
    :constraint_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.

You can also pass an array of column names for creating composite foreign keys. In this case, it will assume the columns exists and will only add the constraint.

NOTE: If you need to add a foreign key constraint to an existing column use the composite key syntax even if it is only one column.



239
240
241
242
# File 'lib/sequel_core/schema/generator.rb', line 239

def add_foreign_key(name, table, opts = {})
  return add_composite_foreign_key(name, table, opts) if name.is_a?(Array)
  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.



246
247
248
# File 'lib/sequel_core/schema/generator.rb', line 246

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.



252
253
254
# File 'lib/sequel_core/schema/generator.rb', line 252

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.



258
259
260
261
262
# File 'lib/sequel_core/schema/generator.rb', line 258

def add_primary_key(name, opts = {})
  return add_composite_primary_key(name, opts) if name.is_a?(Array)
  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.



266
267
268
# File 'lib/sequel_core/schema/generator.rb', line 266

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

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



225
226
227
228
# File 'lib/sequel_core/schema/generator.rb', line 225

def add_unique_constraint(columns, opts = {})
  @operations << {:op => :add_constraint, :type => :check,
    :constraint_type => :unique, :columns => Array(columns)}.merge(opts)
end

#drop_column(name) ⇒ Object

Remove a column from the DDL for the table.



271
272
273
# File 'lib/sequel_core/schema/generator.rb', line 271

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

#drop_constraint(name) ⇒ Object

Remove a constraint from the DDL for the table.



276
277
278
# File 'lib/sequel_core/schema/generator.rb', line 276

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

#drop_index(columns) ⇒ Object

Remove an index from the DDL for the table.



281
282
283
# File 'lib/sequel_core/schema/generator.rb', line 281

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.



286
287
288
# File 'lib/sequel_core/schema/generator.rb', line 286

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

#set_column_allow_null(name, allow_null) ⇒ Object

Modify a column’s NOT NULL constraint.



301
302
303
# File 'lib/sequel_core/schema/generator.rb', line 301

def set_column_allow_null(name, allow_null)
  @operations << {:op => :set_column_null, :name => name, :null => allow_null}
end

#set_column_default(name, default) ⇒ Object

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



291
292
293
# File 'lib/sequel_core/schema/generator.rb', line 291

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

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

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



296
297
298
# File 'lib/sequel_core/schema/generator.rb', line 296

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