|
@@ -33,8 +33,8 @@ def connect(dbtype)
|
|
|
Bundler.require(dbtype) # Load database-specific modules
|
|
|
|
|
|
adapters = {
|
|
|
- :mysql=>{ :jruby=>'jdbc:mysql', :mri=>'mysql2' },
|
|
|
- :postgresql=>{ :jruby=>'jdbc:postgresql', :mri=>'postgres' }
|
|
|
+ mysql: { jruby: 'jdbc:mysql', mri: 'mysql2' },
|
|
|
+ postgresql: { jruby: 'jdbc:postgresql', mri: 'postgres' }
|
|
|
}
|
|
|
|
|
|
opts = {}
|
|
@@ -52,11 +52,11 @@ def connect(dbtype)
|
|
|
|
|
|
Sequel.connect \
|
|
|
'%{adapter}://%{host}/%{database}?user=%{user}&password=%{password}' % {
|
|
|
- :adapter=>adapters.fetch(dbtype).fetch(defined?(JRUBY_VERSION) ? :jruby : :mri),
|
|
|
- :host=>'tfb-database',
|
|
|
- :database=>'hello_world',
|
|
|
- :user=>'benchmarkdbuser',
|
|
|
- :password=>'benchmarkdbpass'
|
|
|
+ adapter: adapters.fetch(dbtype).fetch(defined?(JRUBY_VERSION) ? :jruby : :mri),
|
|
|
+ host: 'tfb-database',
|
|
|
+ database: 'hello_world',
|
|
|
+ user: 'benchmarkdbuser',
|
|
|
+ password: 'benchmarkdbpass'
|
|
|
}, opts
|
|
|
end
|
|
|
|
|
@@ -64,7 +64,27 @@ DB = connect ENV.fetch('DBTYPE').to_sym
|
|
|
|
|
|
# Define ORM models
|
|
|
class World < Sequel::Model(:World)
|
|
|
+ BY_ID = naked.where(id: :$id).prepare(:first, :world_by_id)
|
|
|
+ UPDATE = where(id: :$id).prepare(:update, :world_update, randomnumber: :$randomnumber)
|
|
|
+
|
|
|
def_column_alias(:randomnumber, :randomNumber) if DB.database_type == :mysql
|
|
|
+
|
|
|
+ def self.batch_update(worlds)
|
|
|
+ if DB.database_type == :mysql
|
|
|
+ worlds.each do |world|
|
|
|
+ UPDATE.(id: world[:id], randomnumber: world[:randomnumber])
|
|
|
+ end
|
|
|
+ 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(',')})"
|
|
|
+ DB.run(sql)
|
|
|
+ end
|
|
|
+ end
|
|
|
end
|
|
|
|
|
|
class Fortune < Sequel::Model(:Fortune)
|