MCPcopy
hub / github.com/sqlc-dev/sqlc / ParamRef

Function ParamRef

internal/sql/validate/param_ref.go:12–48  ·  view source on GitHub ↗
(n ast.Node)

Source from the content-addressed store, hash-verified

10)
11
12func ParamRef(n ast.Node) (map[int]bool, bool, error) {
13 var allrefs []*ast.ParamRef
14 var dollar bool
15 var nodollar bool
16 // Find all parameter references
17 astutils.Walk(astutils.VisitorFunc(func(node ast.Node) {
18 switch n := node.(type) {
19 case *ast.ParamRef:
20 ref := node.(*ast.ParamRef)
21 if ref.Dollar {
22 dollar = true
23 } else {
24 nodollar = true
25 }
26 allrefs = append(allrefs, n)
27 }
28 }), n)
29 if dollar && nodollar {
30 return nil, false, errors.New("can not mix $1 format with ? format")
31 }
32
33 seen := map[int]bool{}
34 for _, r := range allrefs {
35 if r.Number > 0 {
36 seen[r.Number] = true
37 }
38 }
39 for i := 1; i <= len(seen); i += 1 {
40 if _, ok := seen[i]; !ok {
41 return seen, !nodollar, &sqlerr.Error{
42 Code: "42P18",
43 Message: fmt.Sprintf("could not determine data type of parameter $%d", i),
44 }
45 }
46 }
47 return seen, !nodollar, nil
48}

Callers 1

_analyzeQueryMethod · 0.92

Calls 2

WalkFunction · 0.92
VisitorFuncFuncType · 0.92

Tested by

no test coverage detected