method
build_fixture_sql
v7.2.3 -
Show latest stable
- Class:
ActiveRecord::ConnectionAdapters::DatabaseStatements
build_fixture_sql(fixtures, table_name)private
No documentation available.
# File activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb, line 558
def build_fixture_sql(fixtures, table_name)
columns = schema_cache.columns_hash(table_name).reject { |_, column| supports_virtual_columns? && column.virtual? }
values_list = fixtures.map do |fixture|
fixture = fixture.stringify_keys
unknown_columns = fixture.keys - columns.keys
if unknown_columns.any?
raise Fixture::FixtureError, %(table "#{table_name}" has no columns named #{unknown_columns.map(&:inspect).join(', ')}.)
end
columns.map do |name, column|
if fixture.key?(name)
type = lookup_cast_type_from_column(column)
with_yaml_fallback(type.serialize(fixture[name]))
else
default_insert_value(column)
end
end
end
table = Arel::Table.new(table_name)
manager = Arel::InsertManager.new(table)
if values_list.size == 1
values = values_list.shift
new_values = []
columns.each_key.with_index { |column, i|
unless values[i].equal?(DEFAULT_INSERT_VALUE)
new_values << values[i]
manager.columns << table[column]
end
}
values_list << new_values
else
columns.each_key { |column| manager.columns << table[column] }
end
manager.values = manager.create_values_list(values_list)
visitor.compile(manager.ast)
end