From 06bcbed4c15a05fe89469cde3f5cdb67154a5692 Mon Sep 17 00:00:00 2001 From: Petrik Date: Fri, 21 Mar 2025 13:03:40 +0100 Subject: [PATCH] [ruby/roda-sequel] Don't case statement for batch update +--------------------------+------+ | branch_name|update| +--------------------------+------+ | master| 9675| |roda-sequel/improve-update| 9949| +--------------------------+------+ --- frameworks/Ruby/roda-sequel/boot.rb | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/frameworks/Ruby/roda-sequel/boot.rb b/frameworks/Ruby/roda-sequel/boot.rb index bf22232abd7..7e1127fe951 100644 --- a/frameworks/Ruby/roda-sequel/boot.rb +++ b/frameworks/Ruby/roda-sequel/boot.rb @@ -71,13 +71,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