Spaces:
Runtime error
Runtime error
| package db | |
| import ( | |
| "database/sql" | |
| "errors" | |
| "log" | |
| "os" | |
| "path/filepath" | |
| "github.com/arpinfidel/p2p-llm/config" | |
| ) | |
| var ( | |
| // ErrNoRows is returned when a query returns no rows | |
| ErrNoRows = errors.New("no rows in result set") | |
| ) | |
| // Database defines the interface for database operations | |
| type Database interface { | |
| Init() error | |
| Close() | |
| Ping() error | |
| Exec(query string, args ...interface{}) (sql.Result, error) | |
| Query(query string, args ...interface{}) (*sql.Rows, error) | |
| QueryRow(query string, args ...interface{}) *sql.Row | |
| } | |
| // SQLiteDB implements the Database interface for SQLite | |
| type SQLiteDB struct { | |
| db *sql.DB | |
| } | |
| // NewSQLiteDB creates a new SQLite database connection | |
| func NewSQLiteDB(cfg *config.Config) (*SQLiteDB, error) { | |
| // Ensure the database directory exists | |
| dbDir := filepath.Dir(cfg.DBPath) | |
| if dbDir != "." { | |
| if err := os.MkdirAll(dbDir, 0755); err != nil { | |
| return nil, err | |
| } | |
| } | |
| // Open the database connection | |
| db, err := sql.Open("sqlite", cfg.DBPath) | |
| if err != nil { | |
| return nil, err | |
| } | |
| return &SQLiteDB{db: db}, nil | |
| } | |
| func (s *SQLiteDB) Init() error { | |
| // Test the connection | |
| if err := s.Ping(); err != nil { | |
| return err | |
| } | |
| log.Println("Database connection established successfully") | |
| return nil | |
| } | |
| func (s *SQLiteDB) Close() { | |
| if s.db != nil { | |
| s.db.Close() | |
| log.Println("Database connection closed") | |
| } | |
| } | |
| func (s *SQLiteDB) Ping() error { | |
| return s.db.Ping() | |
| } | |
| func (s *SQLiteDB) Exec(query string, args ...interface{}) (sql.Result, error) { | |
| return s.db.Exec(query, args...) | |
| } | |
| func (s *SQLiteDB) Query(query string, args ...interface{}) (*sql.Rows, error) { | |
| return s.db.Query(query, args...) | |
| } | |
| func (s *SQLiteDB) QueryRow(query string, args ...interface{}) *sql.Row { | |
| return s.db.QueryRow(query, args...) | |
| } | |