runInternal runs query over input and returns the output. input may be in any format recognized by "super -i auto" and may be gzip-compressed. outputFlags may contain any flags accepted by cli/outputflags.Flags.
(ctx context.Context, query string, input *string, outputFlags, inputFlags []string, vector bool)
| 484 | // may be in any format recognized by "super -i auto" and may be gzip-compressed. |
| 485 | // outputFlags may contain any flags accepted by cli/outputflags.Flags. |
| 486 | func runInternal(ctx context.Context, query string, input *string, outputFlags, inputFlags []string, vector bool) (string, error) { |
| 487 | ast, err := parser.ParseText(query) |
| 488 | if err != nil { |
| 489 | return "", err |
| 490 | } |
| 491 | sctx := super.NewContext() |
| 492 | var readers []sio.Reader |
| 493 | if input != nil { |
| 494 | zrc, err := newInputReader(sctx, *input, inputFlags) |
| 495 | if err != nil { |
| 496 | return "", err |
| 497 | } |
| 498 | defer zrc.Close() |
| 499 | readers = []sio.Reader{zrc} |
| 500 | } |
| 501 | var fs flag.FlagSet |
| 502 | var outflags outputflags.Flags |
| 503 | outflags.SetFlags(&fs) |
| 504 | if err := fs.Parse(outputFlags); err != nil { |
| 505 | return "", err |
| 506 | } |
| 507 | if err := outflags.Init(); err != nil { |
| 508 | return "", err |
| 509 | } |
| 510 | env := exec.NewEnvironment(nil, nil) |
| 511 | if vector { |
| 512 | env.Runtime = exec.RuntimeVAM |
| 513 | } |
| 514 | q, err := runtime.CompileQuery(ctx, sctx, compiler.NewCompilerWithEnv(env), ast, readers) |
| 515 | if err != nil { |
| 516 | return "", err |
| 517 | } |
| 518 | defer q.Pull(true) |
| 519 | var outbuf bytes.Buffer |
| 520 | zw, err := anyio.NewWriter(sio.NopCloser(&outbuf), outflags.Options()) |
| 521 | if err != nil { |
| 522 | return "", err |
| 523 | } |
| 524 | err = vio.Copy(zw, q) |
| 525 | if err2 := zw.Close(); err == nil { |
| 526 | err = err2 |
| 527 | } |
| 528 | return outbuf.String(), err |
| 529 | } |
| 530 | |
| 531 | func newInputReader(sctx *super.Context, input string, flags []string) (sio.ReadCloser, error) { |
| 532 | var inflags inputflags.Flags |
no test coverage detected