Skip to content

Commit 282bfeb

Browse files
committed
[ruby/sinatra-sequel] Don't case statement for batch update
+----------------------+------+ | branch_name|update| +----------------------+------+ | master| 8539| |sinatra/improve-update| 8783| +----------------------+------+
1 parent 508fb38 commit 282bfeb

File tree

1 file changed

+4
-7
lines changed
  • frameworks/Ruby/sinatra-sequel

1 file changed

+4
-7
lines changed

frameworks/Ruby/sinatra-sequel/boot.rb

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,10 @@ def self.batch_update(worlds)
6363
if DB.database_type == :mysql
6464
worlds.map(&:save_changes)
6565
else
66-
ids = []
67-
sql = String.new("UPDATE world SET randomnumber = CASE id ")
68-
worlds.each do |world|
69-
sql << "when #{world.id} then #{world.randomnumber} "
70-
ids << world.id
71-
end
72-
sql << "ELSE randomnumber END WHERE id IN ( #{ids.join(',')})"
66+
sql_values = worlds.map { "(#{_1.id}, #{_1.randomnumber})" }.join(', ')
67+
sql = "UPDATE world SET randomnumber = updated.randomnumber "
68+
sql << " FROM (VALUES #{ sql_values }) AS updated (id, randomnumber)"
69+
sql << "WHERE id = updated.id"
7370
DB.run(sql)
7471
end
7572
end

0 commit comments

Comments
 (0)