Sha256: 3ab0a7d02ebd36b3041e3111a62ac8d05db461447b6f8c4779131d04e4f8ce13
Contents?: true
Size: 1.37 KB
Versions: 4
Compression:
Stored size: 1.37 KB
Contents
module ActiveRecord class TableMetadata # :nodoc: # This attr_reader is private in ActiveRecord 6.0.x and public in 6.1.x. This makes sure it is always available in # the Spanner adapter. attr_reader :arel_table end module ActiveRecordBigqueryAdapterBaseExtension extend ActiveSupport::Concern class_methods do def bigquery_adapter? connection.adapter_name == 'bigquery' end def _insert_record(values) return super unless bigquery_adapter? primary_key = self.primary_key primary_key_value = nil if primary_key && values.is_a?(Hash) primary_key_value = values[primary_key] end metadata = TableMetadata.new(self, arel_table) connection.insert_async(arel_table.name, values_for_insert(metadata, values)) primary_key_value end def values_for_insert(metadata, values) values.collect do |key, value| unwrapped_value = unwrap_attribute(value) type = metadata.type(key) [metadata.arel_table[key].name, type.serialize(unwrapped_value)] end.to_h end def unwrap_attribute(attr_or_value) if attr_or_value.is_a?(ActiveModel::Attribute) attr_or_value.value else attr_or_value end end end end Base.prepend(ActiveRecordBigqueryAdapterBaseExtension) end
Version data entries
4 entries across 4 versions & 1 rubygems