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

Function NamedParameters

internal/sql/rewrite/parameters.go:81–192  ·  view source on GitHub ↗
(engine config.Engine, raw *ast.RawStmt, numbs map[int]bool, dollar bool)

Source from the content-addressed store, hash-verified

79}
80
81func NamedParameters(engine config.Engine, raw *ast.RawStmt, numbs map[int]bool, dollar bool) (*ast.RawStmt, *named.ParamSet, []source.Edit) {
82 foundFunc := astutils.Search(raw, named.IsParamFunc)
83 foundSign := astutils.Search(raw, named.IsParamSign)
84 hasNamedParameterSupport := engine != config.EngineMySQL
85 allParams := named.NewParamSet(numbs, hasNamedParameterSupport)
86
87 if len(foundFunc.Items)+len(foundSign.Items) == 0 {
88 return raw, allParams, nil
89 }
90
91 var edits []source.Edit
92 node := astutils.Apply(raw, func(cr *astutils.Cursor) bool {
93 node := cr.Node()
94 switch {
95 case named.IsParamFunc(node):
96 fun := node.(*ast.FuncCall)
97 param, origText := paramFromFuncCall(fun)
98 argn := allParams.Add(param)
99 cr.Replace(&ast.ParamRef{
100 Number: argn,
101 Location: fun.Location,
102 })
103
104 var replace string
105 if engine == config.EngineMySQL || engine == config.EngineSQLite || !dollar {
106 if param.IsSqlcSlice() {
107 // This sequence is also replicated in internal/codegen/golang.Field
108 // since it's needed during template generation for replacement
109 replace = fmt.Sprintf(`/*SLICE:%s*/?`, param.Name())
110 } else {
111 if engine == config.EngineSQLite {
112 replace = fmt.Sprintf("?%d", argn)
113 } else {
114 replace = "?"
115 }
116 }
117 } else {
118 replace = fmt.Sprintf("$%d", argn)
119 }
120
121 edits = append(edits, source.Edit{
122 Location: fun.Location - raw.StmtLocation,
123 Old: origText,
124 New: replace,
125 })
126 return false
127
128 case isNamedParamSignCast(node):
129 expr := node.(*ast.A_Expr)
130 cast := expr.Rexpr.(*ast.TypeCast)
131 paramName, _ := flatten(cast.Arg)
132 param := named.NewParam(paramName)
133
134 argn := allParams.Add(param)
135 cast.Arg = &ast.ParamRef{
136 Number: argn,
137 Location: expr.Location,
138 }

Callers 1

_analyzeQueryMethod · 0.92

Calls 14

AddMethod · 0.95
IsSqlcSliceMethod · 0.95
NameMethod · 0.95
SearchFunction · 0.92
NewParamSetFunction · 0.92
ApplyFunction · 0.92
IsParamFuncFunction · 0.92
NewParamFunction · 0.92
IsParamSignFunction · 0.92
paramFromFuncCallFunction · 0.85
isNamedParamSignCastFunction · 0.85
flattenFunction · 0.85

Tested by

no test coverage detected