lib/sequel/plugins/upsert.rb in umbrellio-sequel-plugins-0.3.1.69 vs lib/sequel/plugins/upsert.rb in umbrellio-sequel-plugins-0.3.1.77
- old
+ new
@@ -9,17 +9,18 @@
# User.upsert_dataset.insert(name: "John", email: "jd@test.com")
#
# @return [Sequel::Dataset] dataset
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]] }
+ where_spec = cols.map { |x| Sequel::Plugins::Upsert.distinct_expr(table_name, x) }.reduce(:|)
dataset.insert_conflict(
target: target,
update: update_spec,
- update_where: Sequel.~(where_spec),
+ update_where: where_spec,
)
end
# Executes the upsert request
#
@@ -54,7 +55,11 @@
#
# @return [Sequel::Model]
def upsert_model
@upsert_model ||= Sequel::Model(table_name)
end
+ end
+
+ def self.distinct_expr(table_name, col)
+ Sequel.lit("? IS DISTINCT FROM ?", Sequel[table_name][col], Sequel[:excluded][col])
end
end