diff options
| author | JP Appel <jeanpierre.appel01@gmail.com> | 2025-07-28 01:20:01 -0400 |
|---|---|---|
| committer | JP Appel <jeanpierre.appel01@gmail.com> | 2025-07-28 01:20:01 -0400 |
| commit | 3b8dcd30f5aca7624a22cff85a2f767d8d1fb583 (patch) | |
| tree | db01e57776ef9a8bc104403cd038e303c6831500 /pkg/data | |
| parent | 7b5cd075161bd4e1a05070d51cc64b38882ae74b (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.go | 21 |
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) + }, + }, + ) +} |
