MCPcopy
hub / github.com/dosco/graphjin / inlinePositionalArgs

Function inlinePositionalArgs

core/snowflake_bind.go:24–83  ·  view source on GitHub ↗
(query string, args []interface{})

Source from the content-addressed store, hash-verified

22}
23
24func inlinePositionalArgs(query string, args []interface{}) (string, error) {
25 var b strings.Builder
26 b.Grow(len(query) + (len(args) * 8))
27
28 inSingle := false
29 inDouble := false
30 argPos := 0
31
32 for i := 0; i < len(query); i++ {
33 ch := query[i]
34
35 switch ch {
36 case '\'':
37 b.WriteByte(ch)
38 if !inDouble {
39 if inSingle && i+1 < len(query) && query[i+1] == '\'' {
40 b.WriteByte(query[i+1])
41 i++
42 continue
43 }
44 inSingle = !inSingle
45 }
46
47 case '"':
48 b.WriteByte(ch)
49 if !inSingle {
50 if inDouble && i+1 < len(query) && query[i+1] == '"' {
51 b.WriteByte(query[i+1])
52 i++
53 continue
54 }
55 inDouble = !inDouble
56 }
57
58 case '?':
59 if inSingle || inDouble {
60 b.WriteByte(ch)
61 continue
62 }
63 if argPos >= len(args) {
64 return "", fmt.Errorf("missing argument for placeholder at index %d", argPos)
65 }
66 lit, err := sqlLiteral(args[argPos])
67 if err != nil {
68 return "", err
69 }
70 b.WriteString(lit)
71 argPos++
72
73 default:
74 b.WriteByte(ch)
75 }
76 }
77
78 if argPos != len(args) {
79 return "", fmt.Errorf("unused arguments: used %d of %d", argPos, len(args))
80 }
81

Callers 1

prepareQueryArgsForDBFunction · 0.85

Calls 3

sqlLiteralFunction · 0.85
WriteStringMethod · 0.65
StringMethod · 0.45

Tested by

no test coverage detected