/store/database/sqlite.go

https://github.com/Dentrax/GMDB · Go · 61 lines · 42 code · 13 blank · 6 comment · 9 complexity · d499cbf9747ff8a4c7e8705b12298a6e MD5 · raw file

  1. // ====================================================
  2. // GMDB Copyright(C) 2019 Furkan Türkal
  3. // This program comes with ABSOLUTELY NO WARRANTY; This is free software,
  4. // and you are welcome to redistribute it under certain conditions; See
  5. // file LICENSE, which is part of this source code package, for details.
  6. // ====================================================
  7. package database
  8. import (
  9. "database/sql"
  10. "sync"
  11. "time"
  12. "github.com/Dentrax/GMDB/store/database/ddl"
  13. "github.com/jmoiron/sqlx"
  14. _ "github.com/mattn/go-sqlite3"
  15. )
  16. func Connect(driver, datasource string) (*DB, error) {
  17. db, err := sql.Open(driver, datasource)
  18. if err != nil {
  19. return nil, err
  20. }
  21. if err := pingDatabase(db); err != nil {
  22. return nil, err
  23. }
  24. if err := setupDatabase(db); err != nil {
  25. return nil, err
  26. }
  27. db.SetMaxOpenConns(1)
  28. var engine Driver = Sqlite
  29. var locker Locker = &sync.RWMutex{}
  30. return &DB{
  31. conn: sqlx.NewDb(db, driver),
  32. lock: locker,
  33. driver: engine,
  34. }, nil
  35. }
  36. func pingDatabase(db *sql.DB) (err error) {
  37. for i := 0; i < 3; i++ {
  38. err = db.Ping()
  39. if err == nil {
  40. return
  41. }
  42. time.Sleep(time.Second)
  43. }
  44. return
  45. }
  46. func setupDatabase(db *sql.DB) error {
  47. return ddl.Migrate(db)
  48. }