aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/atlas.go
diff options
context:
space:
mode:
authorJP Appel <jeanpierre.appel01@gmail.com>2025-06-28 01:15:44 -0400
committerJP Appel <jeanpierre.appel01@gmail.com>2025-06-28 01:15:44 -0400
commitb6d1375c7bdf0f06eb32f1273ad5fd4f7c0e5673 (patch)
tree07b6bcfa994ed5273dea6d7d2d9491bf1fe91c94 /cmd/atlas.go
parent468b14ea9e60698a3340aa1f1f53794834dafe9f (diff)
Add leveld optimization wrapper
Diffstat (limited to 'cmd/atlas.go')
-rw-r--r--cmd/atlas.go45
1 files changed, 36 insertions, 9 deletions
diff --git a/cmd/atlas.go b/cmd/atlas.go
index b98b0f6..08e1a00 100644
--- a/cmd/atlas.go
+++ b/cmd/atlas.go
@@ -82,8 +82,9 @@ func main() {
args := flag.Args()
queryFlags := struct {
- Output query.Outputer
- CustomFormat string
+ Output query.Outputer
+ CustomFormat string
+ OptimizationLevel int
}{}
indexFlags := struct {
Filters []index.DocFilter
@@ -119,6 +120,7 @@ func main() {
return fmt.Errorf("Unrecognized output format: %s", arg)
})
queryFs.StringVar(&queryFlags.CustomFormat, "outCustomFormat", query.DefaultOutputFormat, "format string for --outFormat custom, see EXAMPLES for more details")
+ queryFs.IntVar(&queryFlags.OptimizationLevel, "optLevel", 0, "optimization `level` for queries, 0 is automatic, <0 to disable")
queryFs.Parse(args[1:])
case "index":
@@ -150,7 +152,7 @@ func main() {
case "help":
printHelp()
flag.PrintDefaults()
- os.Exit(0)
+ return
case "shell":
shellFs.Parse(args[1:])
default:
@@ -186,16 +188,41 @@ func main() {
querier := data.NewQuery(globalFlags.DBPath)
defer querier.Close()
+ go func() {
+ if r := recover(); r != nil {
+ os.Exit(1)
+ }
+ }()
+
// command specific
switch command {
case "query":
- // TODO: evaluate query
- s, err := queryFlags.Output.Output(nil)
+ searchQuery := strings.Join(queryFs.Args(), " ")
+ tokens := query.Lex(searchQuery)
+ clause, err := query.Parse(tokens)
+ if err != nil {
+ fmt.Fprintln(os.Stderr, "Failed to parse query: ", err)
+ panic(err)
+ }
+
+ if queryFlags.OptimizationLevel >= 0 {
+ o := query.NewOptimizer(clause, globalFlags.NumWorkers)
+ o.Optimize(queryFlags.OptimizationLevel)
+ }
+
+ artifact, err := clause.Compile()
if err != nil {
- slog.Error("Error while outputing query results", slog.String("err", err.Error()))
- return
+ panic(err)
}
- fmt.Print(s)
+ fmt.Println("query\n", artifact.Query)
+ fmt.Println("args\n", strings.Join(artifact.Args, ", "))
+ // TODO: evaluate query
+ // s, err := queryFlags.Output.Output(nil)
+ // if err != nil {
+ // slog.Error("Error while outputing query results", slog.String("err", err.Error()))
+ // return
+ // }
+ // fmt.Print(s)
case "index":
idx := index.Index{Root: globalFlags.IndexRoot, Filters: indexFlags.Filters}
if logger.Enabled(context.Background(), slog.LevelDebug) {
@@ -233,7 +260,7 @@ func main() {
interpreter := shell.NewInterpreter(state, env, globalFlags.NumWorkers)
if err := interpreter.Run(); err != nil && err != io.EOF {
slog.Error("Fatal error occured", slog.String("err", err.Error()))
- os.Exit(1)
+ panic(err)
}
}