sqlite.go 852 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package database
  2. import (
  3. "database/sql"
  4. "time"
  5. "git.linuxforward.com/byom/byom-golang-lib/pkg/errors"
  6. _ "github.com/mattn/go-sqlite3"
  7. )
  8. func NewSQLiteDB(config *Config) (*sql.DB, error) {
  9. db, err := sql.Open("sqlite3", config.Path)
  10. if err != nil {
  11. return nil, errors.NewDatabaseError("open", err)
  12. }
  13. // Test connection
  14. if err := db.Ping(); err != nil {
  15. return nil, errors.NewDatabaseError("ping", err)
  16. }
  17. // Set connection pool settings
  18. db.SetMaxOpenConns(config.MaxOpenConns)
  19. db.SetMaxIdleConns(config.MaxIdleConns)
  20. db.SetConnMaxLifetime(time.Duration(config.ConnMaxLifetime) * time.Second)
  21. // Apply pragmas if specified
  22. if len(config.Pragmas) > 0 {
  23. for _, pragma := range config.Pragmas {
  24. _, err := db.Exec(pragma)
  25. if err != nil {
  26. return nil, errors.NewDatabaseError("pragma", err)
  27. }
  28. }
  29. }
  30. return db, nil
  31. }