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
40 41 42 43 |
# File 'lib/sequel/plugins/upsert.rb', line 40 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
50 51 52 |
# File 'lib/sequel/plugins/upsert.rb', line 50 def sequel_values(row) upsert_model.new(row).values end |
#upsert(row, **options) ⇒ Sequel::Model
Executes the upsert request
33 34 35 |
# File 'lib/sequel/plugins/upsert.rb', line 33 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 23 |
# 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 ⇒ Sequel::Model
Returns upsert model for current table
57 58 59 |
# File 'lib/sequel/plugins/upsert.rb', line 57 def upsert_model @upsert_model ||= Sequel::Model(table_name) end |