DB.scala 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package code.db
  2. import code.Main
  3. import org.apache.commons.dbcp.BasicDataSource
  4. import javax.sql.DataSource
  5. import Main.config
  6. import scala.slick.driver.MySQLDriver.simple._
  7. import Database.threadLocalSession
  8. object DB {
  9. val dataSource: DataSource = {
  10. val ds = new BasicDataSource
  11. ds.setDriverClassName("com.mysql.jdbc.Driver")
  12. ds.setUsername("benchmarkdbuser")
  13. ds.setPassword("benchmarkdbpass")
  14. ds.setMaxActive(20);
  15. ds.setMaxIdle(10);
  16. ds.setInitialSize(10);
  17. ds.setValidationQuery("SELECT 1")
  18. ds.setUrl("jdbc:mysql://%s/%s?useUnicode=true&characterEncoding=UTF-8"
  19. format (config[String]("db.host"), config[String]("db.name")))
  20. ds
  21. }
  22. // test the data source validity
  23. dataSource.getConnection().close()
  24. // perform the migrations
  25. val database = Database.forDataSource(dataSource)
  26. val lastInsertIdFunction = SimpleFunction.nullary[Long]("LAST_INSERT_ID")
  27. def lastInsertId = Query(lastInsertIdFunction).firstOption
  28. /** runs the db code inside the transaction */
  29. def exec[A](fn: => A) =
  30. database withTransaction {
  31. fn
  32. }
  33. }
  34. case class World(id: Option[Long], randomNumber: Long) {
  35. import net.liftweb.json._
  36. def toJson = JObject(List(
  37. JField("id", JInt(id.get)),
  38. JField("randomNumber", JInt(randomNumber))
  39. ))
  40. }
  41. object WorldTable extends Table[World]("World") {
  42. def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
  43. def randomNumber = column[Long]("randomNumber")
  44. def * = id.? ~ randomNumber <> (World, World.unapply _)
  45. }