method
copy_table
v8.0.0 -
Show latest stable
- Class:
ActiveRecord::ConnectionAdapters::SQLite3Adapter
copy_table(from, to, options = {})private
No documentation available.
# File activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb, line 594
def copy_table(from, to, options = {})
from_primary_key = primary_key(from)
options[:id] = false
create_table(to, **options) do |definition|
@definition = definition
if from_primary_key.is_a?(Array)
@definition.primary_keys from_primary_key
end
columns(from).each do |column|
column_name = options[:rename] ?
(options[:rename][column.name] ||
options[:rename][column.name.to_sym] ||
column.name) : column.name
column_options = {
limit: column.limit,
precision: column.precision,
scale: column.scale,
null: column.null,
collation: column.collation,
primary_key: column_name == from_primary_key
}
if column.virtual?
column_options[:as] = column.default_function
column_options[:stored] = column.virtual_stored?
column_options[:type] = column.type
elsif column.has_default?
type = lookup_cast_type_from_column(column)
default = type.deserialize(column.default)
default = -> { column.default_function } if default.nil?
unless column.auto_increment?
column_options[:default] = default
end
end
column_type = column.virtual? ? :virtual : (column.bigint? ? :bigint : column.type)
@definition.column(column_name, column_type, **column_options)
end
yield @definition if block_given?
end
copy_table_indexes(from, to, options[:rename] || {})
columns_to_copy = @definition.columns.reject { |col| col.options.key?(:as) }.map(&:name)
copy_table_contents(from, to,
columns_to_copy,
options[:rename] || {})
end