Class: ActiveRecord::ConnectionAdapters::TableDefinition

Inherits:
Object
  • Object
show all
Defined in:
lib/active_record/connection_adapters/abstract/schema_definitions.rb

Overview

Represents a SQL table in an abstract way. Columns are stored as ColumnDefinition in the #columns attribute.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(base) ⇒ TableDefinition

Returns a new instance of TableDefinition.



189
190
191
192
# File 'lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 189

def initialize(base)
  @columns = []
  @base = base
end

Instance Attribute Details

#columnsObject

Returns the value of attribute columns.



187
188
189
# File 'lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 187

def columns
  @columns
end

Instance Method Details

#[](name) ⇒ Object

Returns a ColumnDefinition for the column with name name.



201
202
203
# File 'lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 201

def [](name)
  @columns.find {|column| column.name.to_s == name.to_s}
end

#column(name, type, options = {}) ⇒ Object

Instantiates a new column for the table. The type parameter must be one of the following values: :primary_key, :string, :text, :integer, :float, :datetime, :timestamp, :time, :date, :binary, :boolean.

Available options are (none of these exists by default):

  • :limit: Requests a maximum column length (:string, :text, :binary or :integer columns only)

  • :default: The column’s default value. You cannot explicitely set the default value to NULL. Simply leave off this option if you want a NULL default value.

  • :null: Allows or disallows NULL values in the column. This option could have been named :null_allowed.

This method returns self.

Examples
# Assuming def is an instance of TableDefinition
def.column(:granted, :boolean)
  #=> granted BOOLEAN

def.column(:picture, :binary, :limit => 2.megabytes)
  #=> picture BLOB(2097152)

def.column(:sales_stage, :string, :limit => 20, :default => 'new', :null => false)
  #=> sales_stage VARCHAR(20) DEFAULT 'new' NOT NULL


236
237
238
239
240
241
242
243
# File 'lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 236

def column(name, type, options = {})
  column = self[name] || ColumnDefinition.new(@base, name, type)
  column.limit = options[:limit] || native[type.to_sym][:limit] if options[:limit] or native[type.to_sym]
  column.default = options[:default]
  column.null = options[:null]
  @columns << column unless @columns.include? column
  self
end

#primary_key(name) ⇒ Object

Appends a primary key definition to the table definition. Can be called multiple times, but this is probably not a good idea.



196
197
198
# File 'lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 196

def primary_key(name)
  column(name, native[:primary_key])
end

#to_sqlObject

Returns a String whose contents are the column definitions concatenated together. This string can then be pre and appended to to generate the final SQL to create the table.



248
249
250
# File 'lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 248

def to_sql
  @columns * ', '
end