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