db.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package main
  2. import (
  3. mysql "github.com/Philio/GoMySQL"
  4. "os"
  5. "log"
  6. )
  7. var dbPool chan *mysql.Client
  8. func initDb() {
  9. log.SetFlags(log.Ltime | log.Lshortfile)
  10. const dbPoolSize = 4
  11. dbPool = make(chan *mysql.Client, 4)
  12. for i := 0; i < dbPoolSize; i++ {
  13. db, err := mysql.DialTCP("localhost", "audio", "audio", "audio")
  14. if err != nil {
  15. log.Panicln(err)
  16. }
  17. db.Reconnect = true
  18. dbPool <- db
  19. }
  20. }
  21. func prepare(db *mysql.Client, sql string, params ...interface{}) (*mysql.Statement, os.Error) {
  22. query, err := db.Prepare(sql)
  23. if err != nil {
  24. log.Println(err)
  25. return nil, err
  26. }
  27. err = query.BindParams(params...)
  28. if err != nil {
  29. log.Println(err)
  30. return nil, err
  31. }
  32. err = query.Execute()
  33. if err != nil {
  34. log.Println(err)
  35. return nil, err
  36. }
  37. return query, err
  38. }
  39. func queryInt(db *mysql.Client, sql string, params ...interface{}) (int, os.Error) {
  40. query, err := prepare(db, sql, params...)
  41. if err != nil {
  42. return 0, err
  43. }
  44. var result int
  45. query.BindResult(&result)
  46. eof, err := query.Fetch()
  47. if err != nil {
  48. log.Println(err)
  49. return result, err
  50. } else if eof {
  51. return result, os.EOF
  52. }
  53. err = query.FreeResult()
  54. if err != nil {
  55. log.Println(err)
  56. return result, err
  57. }
  58. return result, err
  59. }
  60. // given an id ('abcd1234'), return the pid (1)
  61. func getpid(db *mysql.Client, id string) int {
  62. pid, err := queryInt(db, "SELECT `pid` FROM `playlist` WHERE `id` = ?", id)
  63. if err != nil {
  64. return -1
  65. }
  66. return pid
  67. }