aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/data
diff options
context:
space:
mode:
authorJP Appel <jeanpierre.appel01@gmail.com>2025-07-28 01:20:01 -0400
committerJP Appel <jeanpierre.appel01@gmail.com>2025-07-28 01:20:01 -0400
commit3b8dcd30f5aca7624a22cff85a2f767d8d1fb583 (patch)
treedb01e57776ef9a8bc104403cd038e303c6831500 /pkg/data
parent7b5cd075161bd4e1a05070d51cc64b38882ae74b (diff)
Add regex operator
Implemented regex operator using go flavored regular expressions. Added optimization to combine regex's in `OR` clauses.
Diffstat (limited to 'pkg/data')
-rw-r--r--pkg/data/db.go21
1 files changed, 18 insertions, 3 deletions
diff --git a/pkg/data/db.go b/pkg/data/db.go
index 178c19d..cf58caf 100644
--- a/pkg/data/db.go
+++ b/pkg/data/db.go
@@ -5,12 +5,13 @@ import (
"database/sql"
"fmt"
"log/slog"
+ "regexp"
"strings"
"time"
"github.com/jpappel/atlas/pkg/index"
"github.com/jpappel/atlas/pkg/query"
- _ "github.com/mattn/go-sqlite3"
+ "github.com/mattn/go-sqlite3"
)
type Query struct {
@@ -51,7 +52,7 @@ func NewQuery(filename string) *Query {
func NewDB(filename string) *sql.DB {
connStr := "file:" + filename + "?_fk=true&_journal=WAL"
- db, err := sql.Open("sqlite3", connStr)
+ db, err := sql.Open("sqlite3_regex", connStr)
if err != nil {
panic(err)
}
@@ -64,7 +65,7 @@ func NewDB(filename string) *sql.DB {
}
func NewMemDB() *sql.DB {
- db, err := sql.Open("sqlite3", ":memory:?_fk=true")
+ db, err := sql.Open("sqlite3_regex", ":memory:?_fk=true")
if err != nil {
panic(err)
}
@@ -420,3 +421,17 @@ func (q Query) Execute(artifact query.CompilationArtifact) (map[string]*index.Do
return f.docs, nil
}
+
+func regex(re, s string) (bool, error) {
+ return regexp.MatchString(re, s)
+}
+
+func init() {
+ sql.Register("sqlite3_regex",
+ &sqlite3.SQLiteDriver{
+ ConnectHook: func(sc *sqlite3.SQLiteConn) error {
+ return sc.RegisterFunc("regexp", regex, true)
+ },
+ },
+ )
+}