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