From 282bfeb4b46aa42981a17a07690d538cbc4f8b1a Mon Sep 17 00:00:00 2001 From: Petrik Date: Fri, 21 Mar 2025 12:39:31 +0100 Subject: [PATCH] [ruby/sinatra-sequel] Don't case statement for batch update +----------------------+------+ | branch_name|update| +----------------------+------+ | master| 8539| |sinatra/improve-update| 8783| +----------------------+------+ --- frameworks/Ruby/sinatra-sequel/boot.rb | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/frameworks/Ruby/sinatra-sequel/boot.rb b/frameworks/Ruby/sinatra-sequel/boot.rb index c86f4fb9f34..dd424ff602f 100644 --- a/frameworks/Ruby/sinatra-sequel/boot.rb +++ b/frameworks/Ruby/sinatra-sequel/boot.rb @@ -63,13 +63,10 @@ def self.batch_update(worlds) if DB.database_type == :mysql worlds.map(&:save_changes) else - ids = [] - sql = String.new("UPDATE world SET randomnumber = CASE id ") - worlds.each do |world| - sql << "when #{world.id} then #{world.randomnumber} " - ids << world.id - end - sql << "ELSE randomnumber END WHERE id IN ( #{ids.join(',')})" + sql_values = worlds.map { "(#{_1.id}, #{_1.randomnumber})" }.join(', ') + sql = "UPDATE world SET randomnumber = updated.randomnumber " + sql << " FROM (VALUES #{ sql_values }) AS updated (id, randomnumber)" + sql << "WHERE id = updated.id" DB.run(sql) end end