sequel.rb 997 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. # frozen_string_literal: true
  2. SEQUEL_NO_ASSOCIATIONS = true
  3. Sequel.extension :fiber_concurrency
  4. # Determine thread pool size and timeout
  5. opts = {
  6. max_connections: 512,
  7. pool_timeout: 10
  8. }
  9. DB = Sequel.connect \
  10. '%{adapter}://%{host}/%{database}?user=%{user}&password=%{password}' % {
  11. :adapter=>'postgres',
  12. :host=>'tfb-database',
  13. :database=>'hello_world',
  14. :user=>'benchmarkdbuser',
  15. :password=>'benchmarkdbpass'
  16. }, opts
  17. # Define ORM models
  18. class World < Sequel::Model(:World)
  19. def self.batch_update(worlds)
  20. ids = []
  21. sql = String.new("UPDATE world SET randomnumber = CASE id ")
  22. worlds.each do |world|
  23. sql << "when #{world.id} then #{world.randomnumber} "
  24. ids << world.id
  25. end
  26. sql << "ELSE randomnumber END WHERE id IN ( #{ids.join(',')})"
  27. DB.run(sql)
  28. end
  29. end
  30. class Fortune < Sequel::Model(:Fortune)
  31. # Allow setting id to zero (0) per benchmark requirements
  32. unrestrict_primary_key
  33. end
  34. [World, Fortune].each(&:freeze)
  35. DB.freeze