module Sequel::Plugins::Upsert::ClassMethods
Public Instance Methods
multi_upsert(rows, **options)
click to toggle source
Executes the upsert request for multiple rows @see upsert
@see upsert_dataset
# File lib/sequel/plugins/upsert.rb, line 40 def multi_upsert(rows, **options) rows = rows.map { |row| sequel_values(row) } upsert_dataset(**options).multi_insert(rows) end
sequel_values(row)
click to toggle source
Returns formatted row values
@param row [Hash]
@return [Hash]
# File lib/sequel/plugins/upsert.rb, line 50 def sequel_values(row) upsert_model.new(row).values end
upsert(row, **options)
click to toggle source
Executes the upsert request
@param row [Hash] values @param options [Hash] options
@example
User.upsert(name: "John", email: "jd@test.com", target: :email)
@return [Sequel::Model]
# File lib/sequel/plugins/upsert.rb, line 33 def upsert(row, **options) upsert_dataset(**options).insert(sequel_values(row)) end
upsert_dataset(target: primary_key)
click to toggle source
Returns an upsert dataset
@param target [Symbol] target column @example
User.upsert_dataset.insert(name: "John", email: "jd@test.com")
@return [Sequel::Dataset] dataset
# File lib/sequel/plugins/upsert.rb, line 12 def upsert_dataset(target: primary_key) cols = columns - Array(primary_key) update_spec = cols.map { |x| [x, Sequel[:excluded][x]] } where_spec = cols.map { |x| Sequel::Plugins::Upsert.distinct_expr(table_name, x) }.reduce(:|) dataset.insert_conflict( target: target, update: update_spec, update_where: where_spec, ) end
upsert_model()
click to toggle source
Returns upsert model for current table
@return [Sequel::Model]
# File lib/sequel/plugins/upsert.rb, line 57 def upsert_model @upsert_model ||= Sequel::Model(table_name) end