Skip to content

Commit 06bcbed

Browse files
committed
[ruby/roda-sequel] Don't case statement for batch update
+--------------------------+------+ | branch_name|update| +--------------------------+------+ | master| 9675| |roda-sequel/improve-update| 9949| +--------------------------+------+
1 parent 508fb38 commit 06bcbed

File tree

1 file changed

+4
-7
lines changed

1 file changed

+4
-7
lines changed

frameworks/Ruby/roda-sequel/boot.rb

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,10 @@ def self.batch_update(worlds)
7171
if DB.database_type == :mysql
7272
worlds.map(&:save_changes)
7373
else
74-
ids = []
75-
sql = String.new("UPDATE world SET randomnumber = CASE id ")
76-
worlds.each do |world|
77-
sql << "when #{world.id} then #{world.randomnumber} "
78-
ids << world.id
79-
end
80-
sql << "ELSE randomnumber END WHERE id IN ( #{ids.join(',')})"
74+
sql_values = worlds.map { "(#{_1.id}, #{_1.randomnumber})" }.join(', ')
75+
sql = "UPDATE world SET randomnumber = updated.randomnumber "
76+
sql << " FROM (VALUES #{ sql_values }) AS updated (id, randomnumber)"
77+
sql << "WHERE id = updated.id"
8178
DB.run(sql)
8279
end
8380
end

0 commit comments

Comments
 (0)