package database import ( "database/sql" "time" _ "github.com/mattn/go-sqlite3" ) func NewSQLiteDB(config *Config) (*sql.DB, error) { db, err := sql.Open("sqlite3", config.Path) if err != nil { if config.Path == "" { return nil, NewError("open", ErrInvalidPath, "database path is required") } return nil, NewError("open", ErrConnectionFailed, err.Error()) } // Test connection if err := db.Ping(); err != nil { return nil, NewError("ping", ErrConnectionFailed, "failed to verify database connection") } // Set connection pool settings db.SetMaxOpenConns(config.MaxOpenConns) db.SetMaxIdleConns(config.MaxIdleConns) db.SetConnMaxLifetime(time.Duration(config.ConnMaxLifetime) * time.Second) // Apply pragmas if specified if len(config.Pragmas) > 0 { for _, pragma := range config.Pragmas { _, err := db.Exec(pragma) if err != nil { return nil, NewQueryError("pragma", pragma, ErrPragmaFailed, err.Error()) } } } return db, nil }