jruby_impl.rb 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. require 'java'
  2. Jdbc::MySQL.load_driver
  3. Java::com.mysql.jdbc.Driver
  4. host, database = DB_CONFIG[:host], DB_CONFIG[:database]
  5. username, password = DB_CONFIG[:username], DB_CONFIG[:password]
  6. JDBC_CONFIG = "jdbc:mysql://#{host}/#{database}?user=#{username}&password=#{password}"
  7. module App
  8. JRuby = lambda do |env|
  9. content_type, body = case env['PATH_INFO']
  10. when '/plaintext'
  11. ['text/plain', "Hello, World!"]
  12. when '/json'
  13. ['application/json', {:message => "Hello, World!"}.to_json]
  14. when '/db'
  15. id = Random.rand(10000) + 1
  16. query = "SELECT * FROM World WHERE id = " + id.to_s
  17. connection = java.sql.DriverManager.get_connection(JDBC_CONFIG)
  18. results = begin
  19. statement = connection.create_statement
  20. begin
  21. rs = statement.execute_query(query)
  22. rs.next
  23. {id: rs.getObject('id'), randomNumber: rs.getObject('randomNumber')}
  24. ensure
  25. statement.close
  26. end
  27. ensure
  28. connection.close
  29. end
  30. ['application/json', results.to_json]
  31. when '/queries'
  32. query_string = Rack::Utils.parse_query(env['QUERY_STRING'])
  33. queries = query_string['queries'].to_i
  34. queries = 1 if queries < 1
  35. queries = 500 if queries > 500
  36. connection = java.sql.DriverManager.get_connection(JDBC_CONFIG)
  37. results = begin
  38. statement = connection.create_statement
  39. begin
  40. (1..queries).map do
  41. id = Random.rand(10000) + 1
  42. rs = statement.execute_query("SELECT * FROM World WHERE id = " + id.to_s)
  43. rs.next
  44. {id: rs.getObject('id'), randomNumber: rs.getObject('randomNumber')}
  45. end
  46. ensure
  47. statement.close
  48. end
  49. ensure
  50. connection.close
  51. end
  52. ['application/json', results.to_json]
  53. when '/updates'
  54. query_string = Rack::Utils.parse_query(env['QUERY_STRING'])
  55. queries = query_string['queries'].to_i
  56. queries = 1 if queries < 1
  57. queries = 500 if queries > 500
  58. connection = java.sql.DriverManager.get_connection(JDBC_CONFIG)
  59. results = begin
  60. statement = connection.create_statement
  61. begin
  62. results = (1..queries).map do
  63. id = Random.rand(10000) + 1
  64. rs = statement.execute_query("SELECT * FROM World WHERE id = " + id.to_s)
  65. rs.next
  66. {id: rs.getObject('id'), randomNumber: rs.getObject('randomNumber')}
  67. end
  68. #mass update
  69. values = results.map { |h| ['(', h[:id], ',' ,Random.rand(10000) + 1, ')', ','] }.flatten[0..-2].join
  70. sql = "INSERT INTO `World` (`id`,`randomNumber`) VALUES #{values} ON DUPLICATE KEY UPDATE `World`.`randomNumber` = VALUES(`randomNumber`)"
  71. rs = statement.execute_update(sql)
  72. results
  73. ensure
  74. statement.close
  75. end
  76. ensure
  77. connection.close
  78. end
  79. ['application/json', results.to_json]
  80. end
  81. [200, { 'Content-Type' => content_type }, [body]]
  82. end
  83. end