-
Notifications
You must be signed in to change notification settings - Fork 802
/
param_style.go
43 lines (40 loc) · 1.18 KB
/
param_style.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package validate
import (
"github.com/kyleconroy/sqlc/internal/sql/ast"
"github.com/kyleconroy/sqlc/internal/sql/astutils"
"github.com/kyleconroy/sqlc/internal/sql/named"
"github.com/kyleconroy/sqlc/internal/sql/sqlerr"
)
// A query can use one (and only one) of the following formats:
// - positional parameters $1
// - named parameter operator @param
// - named parameter function calls sqlc.arg(param)
func ParamStyle(n ast.Node) error {
namedFunc := astutils.Search(n, named.IsParamFunc)
for _, f := range namedFunc.Items {
fc, ok := f.(*ast.FuncCall)
if ok {
switch val := fc.Args.Items[0].(type) {
case *ast.FuncCall:
return &sqlerr.Error{
Code: "", // TODO: Pick a new error code
Message: "Invalid argument to sqlc.arg()",
Location: val.Location,
}
case *ast.ParamRef:
return &sqlerr.Error{
Code: "", // TODO: Pick a new error code
Message: "Invalid argument to sqlc.arg()",
Location: val.Location,
}
case *ast.A_Const, *ast.ColumnRef:
default:
return &sqlerr.Error{
Code: "", // TODO: Pick a new error code
Message: "Invalid argument to sqlc.arg()",
}
}
}
}
return nil
}