db.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package storage
  2. import (
  3. "errors"
  4. "fmt"
  5. "runtime"
  6. "go-std/src/templates"
  7. )
  8. const (
  9. selectQueryStrPostgre = "SELECT id, randomNumber FROM World WHERE id = $1"
  10. updateQueryStrPostgre = "UPDATE World SET randomNumber = $1 WHERE id = $2"
  11. fortuneQueryStrPostgre = "SELECT id, message FROM Fortune"
  12. )
  13. const (
  14. selectQueryStrMySQL = "SELECT id, randomNumber FROM World WHERE id = ?"
  15. updateQueryStrMySQL = "UPDATE World SET randomNumber = ? WHERE id = ?"
  16. fortuneQueryStrMySQL = "SELECT id, message FROM Fortune"
  17. )
  18. const (
  19. worldsCount = 10000
  20. )
  21. // DB is interface for
  22. type DB interface {
  23. // GetOneRandomWorld() (World, error)
  24. GetOneRandomWorld(*World) error
  25. // UpdateWorlds([]World, int) error
  26. UpdateWorlds([]World, int) error
  27. GetFortunes() ([]templates.Fortune, error)
  28. GetFortunesPool() ([]templates.Fortune, error)
  29. Close()
  30. }
  31. // InitDB with appropriate driver
  32. func InitDB(dbDriver, dbConnectionString string) (DB, error) {
  33. var err error
  34. var db DB
  35. if dbDriver == "pgx" {
  36. db, err = NewPgxDB(
  37. dbConnectionString,
  38. runtime.NumCPU())
  39. if err != nil {
  40. return nil, fmt.Errorf("Error opening postgresql database with pgx driver: %s", err)
  41. }
  42. } else if dbDriver == "mysql" {
  43. db, err = NewMySQLDB(
  44. dbConnectionString,
  45. runtime.NumCPU())
  46. if err != nil {
  47. return nil, fmt.Errorf("Error opening mysql database: %s", err)
  48. }
  49. } else if dbDriver == "mgo" {
  50. db, err = NewMongoDB(
  51. dbConnectionString,
  52. runtime.NumCPU())
  53. if err != nil {
  54. return nil, fmt.Errorf("Error opening mongo database with mgo driver: %s", err)
  55. }
  56. // } else if dbDriver == "pq" {
  57. // db, err = NewPqDB(
  58. // dbConnectionString,
  59. // runtime.NumCPU())
  60. // if err != nil {
  61. // return nil, fmt.Errorf("Error opening postgresql database with pq driver: %s", err)
  62. // }
  63. } else if dbDriver == "none" {
  64. db = nil
  65. } else {
  66. return nil, errors.New("Can't recognize DB driver type")
  67. }
  68. return db, nil
  69. }