From debd05b372fa21f00e2383e7c9d4990db4cbb038 Mon Sep 17 00:00:00 2001 From: Andrew Benton Date: Fri, 3 Nov 2023 11:00:54 -0700 Subject: [PATCH] fix(compiler): Prevent panic when compiler is nil Resolves https://github.com/sqlc-dev/sqlc/issues/2939 --- internal/cmd/generate.go | 6 +++++- internal/endtoend/testdata/bad_config/engine/query.sql | 2 ++ internal/endtoend/testdata/bad_config/engine/sqlc.yaml | 8 ++++++++ internal/endtoend/testdata/bad_config/engine/stderr.txt | 1 + 4 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 internal/endtoend/testdata/bad_config/engine/query.sql create mode 100644 internal/endtoend/testdata/bad_config/engine/sqlc.yaml create mode 100644 internal/endtoend/testdata/bad_config/engine/stderr.txt diff --git a/internal/cmd/generate.go b/internal/cmd/generate.go index 0865705db7..0dd097049d 100644 --- a/internal/cmd/generate.go +++ b/internal/cmd/generate.go @@ -348,7 +348,11 @@ func remoteGenerate(ctx context.Context, configPath string, conf *config.Config, func parse(ctx context.Context, name, dir string, sql config.SQL, combo config.CombinedSettings, parserOpts opts.Parser, stderr io.Writer) (*compiler.Result, bool) { defer trace.StartRegion(ctx, "parse").End() c, err := compiler.NewCompiler(sql, combo) - defer c.Close(ctx) + defer func() { + if c != nil { + c.Close(ctx) + } + }() if err != nil { fmt.Fprintf(stderr, "error creating compiler: %s\n", err) return nil, true diff --git a/internal/endtoend/testdata/bad_config/engine/query.sql b/internal/endtoend/testdata/bad_config/engine/query.sql new file mode 100644 index 0000000000..18b0c0d03c --- /dev/null +++ b/internal/endtoend/testdata/bad_config/engine/query.sql @@ -0,0 +1,2 @@ +-- name: Test :exec +SELECT 1; \ No newline at end of file diff --git a/internal/endtoend/testdata/bad_config/engine/sqlc.yaml b/internal/endtoend/testdata/bad_config/engine/sqlc.yaml new file mode 100644 index 0000000000..8f20b4eaa5 --- /dev/null +++ b/internal/endtoend/testdata/bad_config/engine/sqlc.yaml @@ -0,0 +1,8 @@ +version: 2 +sql: +- queries: query.sql + schema: query.sql + engine: "bad_engine" + gen: + go: + out: "db" \ No newline at end of file diff --git a/internal/endtoend/testdata/bad_config/engine/stderr.txt b/internal/endtoend/testdata/bad_config/engine/stderr.txt new file mode 100644 index 0000000000..9797244924 --- /dev/null +++ b/internal/endtoend/testdata/bad_config/engine/stderr.txt @@ -0,0 +1 @@ +error creating compiler: unknown engine: bad_engine \ No newline at end of file