summaryrefslogtreecommitdiff
path: root/storage
diff options
context:
space:
mode:
Diffstat (limited to 'storage')
-rw-r--r--storage/migrate.go6
-rw-r--r--storage/storage.go10
-rw-r--r--storage/vector.go62
3 files changed, 24 insertions, 54 deletions
diff --git a/storage/migrate.go b/storage/migrate.go
index b05dddc..decfe9c 100644
--- a/storage/migrate.go
+++ b/storage/migrate.go
@@ -5,8 +5,6 @@ import (
"fmt"
"io/fs"
"strings"
-
- _ "github.com/asg017/sqlite-vec-go-bindings/ncruces"
)
//go:embed migrations/*
@@ -53,8 +51,8 @@ func (p *ProviderSQL) executeMigration(migrationsDir fs.FS, fileName string) err
}
func (p *ProviderSQL) executeSQL(sqlContent []byte) error {
- // Connect to the database (example using a simple connection)
- err := p.s3Conn.Exec(string(sqlContent))
+ // Execute the migration content using standard database connection
+ _, err := p.db.Exec(string(sqlContent))
if err != nil {
return fmt.Errorf("failed to execute SQL: %w", err)
}
diff --git a/storage/storage.go b/storage/storage.go
index 0416884..a092f8d 100644
--- a/storage/storage.go
+++ b/storage/storage.go
@@ -6,7 +6,6 @@ import (
_ "github.com/glebarez/go-sqlite"
"github.com/jmoiron/sqlx"
- "github.com/ncruces/go-sqlite3"
)
type FullRepo interface {
@@ -28,7 +27,6 @@ type ChatHistory interface {
type ProviderSQL struct {
db *sqlx.DB
- s3Conn *sqlite3.Conn
logger *slog.Logger
}
@@ -97,7 +95,7 @@ func (p ProviderSQL) ChatGetMaxID() (uint32, error) {
return id, err
}
-// opens two connections
+// opens database connection
func NewProviderSQL(dbPath string, logger *slog.Logger) FullRepo {
db, err := sqlx.Open("sqlite", dbPath)
if err != nil {
@@ -105,11 +103,7 @@ func NewProviderSQL(dbPath string, logger *slog.Logger) FullRepo {
return nil
}
p := ProviderSQL{db: db, logger: logger}
- p.s3Conn, err = sqlite3.Open(dbPath)
- if err != nil {
- logger.Error("failed to open vecdb connection", "error", err)
- return nil
- }
+
p.Migrate()
return p
}
diff --git a/storage/vector.go b/storage/vector.go
index b3e5654..6958634 100644
--- a/storage/vector.go
+++ b/storage/vector.go
@@ -66,35 +66,13 @@ func (p ProviderSQL) WriteVector(row *models.VectorRow) error {
if err != nil {
return err
}
- stmt, _, err := p.s3Conn.Prepare(
- fmt.Sprintf("INSERT INTO %s(embedding, slug, raw_text, filename) VALUES (?, ?, ?, ?)", tableName))
- if err != nil {
- p.logger.Error("failed to prep a stmt", "error", err)
- return err
- }
- defer stmt.Close()
+
serializedEmbeddings := SerializeVector(row.Embeddings)
- if err := stmt.BindBlob(1, serializedEmbeddings); err != nil {
- p.logger.Error("failed to bind", "error", err)
- return err
- }
- if err := stmt.BindText(2, row.Slug); err != nil {
- p.logger.Error("failed to bind", "error", err)
- return err
- }
- if err := stmt.BindText(3, row.RawText); err != nil {
- p.logger.Error("failed to bind", "error", err)
- return err
- }
- if err := stmt.BindText(4, row.FileName); err != nil {
- p.logger.Error("failed to bind", "error", err)
- return err
- }
- err = stmt.Exec()
- if err != nil {
- return err
- }
- return nil
+
+ query := fmt.Sprintf("INSERT INTO %s(embedding, slug, raw_text, filename) VALUES (?, ?, ?, ?)", tableName)
+ _, err = p.db.Exec(query, serializedEmbeddings, row.Slug, row.RawText, row.FileName)
+
+ return err
}
func decodeUnsafe(bs []byte) []float32 {
@@ -110,30 +88,30 @@ func (p ProviderSQL) SearchClosest(q []float32) ([]models.VectorRow, error) {
func (p ProviderSQL) ListFiles() ([]string, error) {
q := fmt.Sprintf("SELECT filename FROM %s GROUP BY filename", vecTableName384)
- stmt, _, err := p.s3Conn.Prepare(q)
+ rows, err := p.db.Query(q)
if err != nil {
return nil, err
}
- defer stmt.Close()
+ defer rows.Close()
+
resp := []string{}
- for stmt.Step() {
- resp = append(resp, stmt.ColumnText(0))
+ for rows.Next() {
+ var filename string
+ if err := rows.Scan(&filename); err != nil {
+ return nil, err
+ }
+ resp = append(resp, filename)
}
- if err := stmt.Err(); err != nil {
+
+ if err := rows.Err(); err != nil {
return nil, err
}
+
return resp, nil
}
func (p ProviderSQL) RemoveEmbByFileName(filename string) error {
q := fmt.Sprintf("DELETE FROM %s WHERE filename = ?", vecTableName384)
- stmt, _, err := p.s3Conn.Prepare(q)
- if err != nil {
- return err
- }
- defer stmt.Close()
- if err := stmt.BindText(1, filename); err != nil {
- return err
- }
- return stmt.Exec()
+ _, err := p.db.Exec(q, filename)
+ return err
}