Module: Sequel::Plugins::Upsert::ClassMethods
- Defined in:
- lib/sequel/plugins/upsert.rb
Instance Method Summary collapse
-
#multi_upsert(rows, **options) ⇒ Object
Executes the upsert request for multiple rows.
-
#sequel_values(row) ⇒ Hash
Returns formatted row values.
-
#upsert(row, **options) ⇒ Sequel::Model
Executes the upsert request.
-
#upsert_dataset(target: primary_key) ⇒ Sequel::Dataset
Returns an upsert dataset.
-
#upsert_model ⇒ Sequel::Model
Returns upsert model for current table.
Instance Method Details
#multi_upsert(rows, **options) ⇒ Object
Executes the upsert request for multiple rows
39 40 41 42 |
# File 'lib/sequel/plugins/upsert.rb', line 39 def multi_upsert(rows, **) rows = rows.map { |row| sequel_values(row) } upsert_dataset().multi_insert(rows) end |
#sequel_values(row) ⇒ Hash
Returns formatted row values
49 50 51 |
# File 'lib/sequel/plugins/upsert.rb', line 49 def sequel_values(row) upsert_model.new(row).values end |
#upsert(row, **options) ⇒ Sequel::Model
Executes the upsert request
32 33 34 |
# File 'lib/sequel/plugins/upsert.rb', line 32 def upsert(row, **) upsert_dataset(**).insert(sequel_values(row)) end |
#upsert_dataset(target: primary_key) ⇒ Sequel::Dataset
Returns an upsert dataset
12 13 14 15 16 17 18 19 20 21 22 |
# 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[table_name][x], Sequel[:excluded][x]] } dataset.insert_conflict( target: target, update: update_spec, update_where: Sequel.~(where_spec), ) end |
#upsert_model ⇒ Sequel::Model
Returns upsert model for current table
56 57 58 |
# File 'lib/sequel/plugins/upsert.rb', line 56 def upsert_model @upsert_model ||= Sequel::Model(table_name) end |