Skip to content

Commit 8fd6d0c

Browse files
committed
fix(vet): report an error when a query is unpreparable, remove dead code
1 parent dddfe4f commit 8fd6d0c

File tree

1 file changed

+12
-22
lines changed

1 file changed

+12
-22
lines changed

internal/cmd/vet.go

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import (
1515

1616
_ "github.com/go-sql-driver/mysql"
1717
"github.com/google/cel-go/cel"
18-
"github.com/google/cel-go/common/types/ref"
1918
"github.com/google/cel-go/ext"
2019
"github.com/jackc/pgx/v5"
2120
_ "github.com/mattn/go-sqlite3"
@@ -53,17 +52,6 @@ func NewCmdVet() *cobra.Command {
5352
}
5453
}
5554

56-
type emptyProgram struct {
57-
}
58-
59-
func (e *emptyProgram) Eval(any) (ref.Val, *cel.EvalDetails, error) {
60-
return nil, nil, fmt.Errorf("unimplemented")
61-
}
62-
63-
func (e *emptyProgram) ContextEval(ctx context.Context, a any) (ref.Val, *cel.EvalDetails, error) {
64-
return e.Eval(a)
65-
}
66-
6755
func Vet(ctx context.Context, e Env, dir, filename string, stderr io.Writer) error {
6856
configPath, conf, err := readConfig(stderr, dir, filename)
6957
if err != nil {
@@ -99,9 +87,7 @@ func Vet(ctx context.Context, e Env, dir, filename string, stderr io.Writer) err
9987
return fmt.Errorf("new env: %s", err)
10088
}
10189

102-
checks := map[string]cel.Program{
103-
RuleDbPrepare: &emptyProgram{},
104-
}
90+
checks := map[string]cel.Program{}
10591
msgs := map[string]string{}
10692

10793
for _, c := range conf.Rules {
@@ -198,7 +184,8 @@ type dbPreparer struct {
198184
}
199185

200186
func (p *dbPreparer) Prepare(ctx context.Context, name, query string) error {
201-
_, err := p.db.PrepareContext(ctx, query)
187+
s, err := p.db.PrepareContext(ctx, query)
188+
s.Close()
202189
return err
203190
}
204191

@@ -316,12 +303,15 @@ func (c *checker) checkSQL(ctx context.Context, s config.SQL) error {
316303
continue
317304
}
318305
original := result.Queries[i]
319-
if prepareable(s, original.RawStmt) {
320-
name := fmt.Sprintf("sqlc_vet_%d_%d", time.Now().Unix(), i)
321-
if err := prep.Prepare(ctx, name, query.Text); err != nil {
322-
fmt.Fprintf(c.Stderr, "%s: %s: %s: error preparing query: %s\n", query.Filename, q.Name, name, err)
323-
errored = true
324-
}
306+
if !prepareable(s, original.RawStmt) {
307+
fmt.Fprintf(c.Stderr, "%s: %s: %s: error preparing query: %s\n", query.Filename, q.Name, name, "query type is unpreparable")
308+
errored = true
309+
continue
310+
}
311+
name := fmt.Sprintf("sqlc_vet_%d_%d", time.Now().Unix(), i)
312+
if err := prep.Prepare(ctx, name, query.Text); err != nil {
313+
fmt.Fprintf(c.Stderr, "%s: %s: %s: error preparing query: %s\n", query.Filename, q.Name, name, err)
314+
errored = true
325315
}
326316
continue
327317
}

0 commit comments

Comments
 (0)