File tree Expand file tree Collapse file tree 2 files changed +21
-4
lines changed
frameworks/Ruby/sinatra-sequel Expand file tree Collapse file tree 2 files changed +21
-4
lines changed Original file line number Diff line number Diff line change @@ -62,6 +62,21 @@ def connect(dbtype)
62
62
# Define ORM models
63
63
class World < Sequel ::Model ( :World )
64
64
def_column_alias ( :randomnumber , :randomNumber ) if DB . database_type == :mysql
65
+
66
+ def self . batch_update ( worlds )
67
+ if DB . database_type == :mysql
68
+ worlds . map ( &:save_changes )
69
+ else
70
+ ids = [ ]
71
+ sql = String . new ( "UPDATE world SET randomnumber = CASE id " )
72
+ worlds . each do |world |
73
+ sql << "when #{ world . id } then #{ world . randomnumber } "
74
+ ids << world . id
75
+ end
76
+ sql << "ELSE randomnumber END WHERE id IN ( #{ ids . join ( ',' ) } )"
77
+ DB . run ( sql )
78
+ end
79
+ end
65
80
end
66
81
67
82
class Fortune < Sequel ::Model ( :Fortune )
Original file line number Diff line number Diff line change @@ -78,16 +78,18 @@ def rand1
78
78
79
79
# Test type 5: Database updates
80
80
get '/updates' do
81
- worlds =
82
- DB . synchronize do
81
+ worlds = nil
82
+ DB . synchronize do
83
+ worlds =
83
84
ALL_IDS . sample ( bounded_queries ) . map do |id |
84
85
world = World . with_pk ( id )
85
86
new_value = rand1
86
87
new_value = rand1 while new_value == world . randomnumber
87
- world . update ( randomnumber : new_value )
88
+ world . randomnumber = new_value
88
89
world
89
90
end
90
- end
91
+ World . batch_update ( worlds )
92
+ end
91
93
92
94
json worlds . map! ( &:values )
93
95
end
You can’t perform that action at this time.
0 commit comments