package cli import ( "context" "fmt" "github.com/MontFerret/ferret/pkg/compiler" "github.com/MontFerret/ferret/pkg/runtime" "github.com/MontFerret/ferret/pkg/runtime/logging" "io/ioutil" "os" "os/signal" ) func ExecFile(pathToFile string, opts Options) { query, err := ioutil.ReadFile(pathToFile) if err != nil { fmt.Println(err) os.Exit(1) return } Exec(string(query), opts) } func Exec(query string, opts Options) { ferret := compiler.New() prog, err := ferret.Compile(query) if err != nil { fmt.Println("Failed to compile the query") fmt.Println(err) os.Exit(1) return } l := NewLogger() ctx, cancel := opts.WithContext(context.Background()) c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt) go func() { for { <-c cancel() l.Close() } }() var timer *Timer if opts.ShowTime { timer = NewTimer() timer.Start() } out, err := prog.Run( ctx, runtime.WithLog(l), runtime.WithLogLevel(logging.DebugLevel), runtime.WithParams(opts.Params), ) if opts.ShowTime { timer.Stop() } if err != nil { fmt.Println("Failed to execute the query") fmt.Println(err) os.Exit(1) return } fmt.Println(string(out)) if opts.ShowTime { fmt.Println(timer.Print()) } }