database.go 784 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package database
  2. import (
  3. "database/sql"
  4. _ "github.com/lib/pq"
  5. _ "github.com/mattn/go-sqlite3"
  6. log "maunium.net/go/maulogger/v2"
  7. "gitlab.com/beeper/discord/database/migrations"
  8. )
  9. type Database struct {
  10. *sql.DB
  11. log log.Logger
  12. dialect string
  13. }
  14. func New(dbType, uri string, maxOpenConns, maxIdleConns int, baseLog log.Logger) (*Database, error) {
  15. conn, err := sql.Open(dbType, uri)
  16. if err != nil {
  17. return nil, err
  18. }
  19. if dbType == "sqlite3" {
  20. conn.Exec("PRAGMA foreign_keys = ON")
  21. }
  22. conn.SetMaxOpenConns(maxOpenConns)
  23. conn.SetMaxIdleConns(maxIdleConns)
  24. dbLog := baseLog.Sub("Database")
  25. if err := migrations.Run(conn, dbLog); err != nil {
  26. return nil, err
  27. }
  28. db := &Database{
  29. DB: conn,
  30. log: dbLog,
  31. dialect: dbType,
  32. }
  33. return db, nil
  34. }