MCPcopy Index your code
hub / github.com/sqlc-dev/sqlc / _analyzeQuery

Method _analyzeQuery

internal/compiler/analyze.go:125–215  ·  view source on GitHub ↗
(raw *ast.RawStmt, query string, failfast bool)

Source from the content-addressed store, hash-verified

123}
124
125func (c *Compiler) _analyzeQuery(raw *ast.RawStmt, query string, failfast bool) (*analysis, error) {
126 errors := make([]error, 0)
127 check := func(err error) error {
128 if failfast {
129 return err
130 }
131 if err != nil {
132 errors = append(errors, err)
133 }
134 return nil
135 }
136
137 numbers, dollar, err := validate.ParamRef(raw)
138 if err := check(err); err != nil {
139 return nil, err
140 }
141
142 raw, namedParams, edits := rewrite.NamedParameters(c.conf.Engine, raw, numbers, dollar)
143
144 var table *ast.TableName
145 switch n := raw.Stmt.(type) {
146 case *ast.InsertStmt:
147 var err error
148 table, err = ParseTableName(n.Relation)
149 if err := check(err); err != nil {
150 return nil, err
151 }
152 if err := check(validate.InsertStmt(c.catalog, table, n)); err != nil {
153 return nil, err
154 }
155 }
156
157 if err := check(validate.FuncCall(c.catalog, c.combo, raw)); err != nil {
158 return nil, err
159 }
160
161 if err := check(validate.In(c.catalog, raw)); err != nil {
162 return nil, err
163 }
164 rvs := rangeVars(raw.Stmt)
165 refs, errs := findParameters(raw.Stmt)
166 if len(errs) > 0 {
167 if failfast {
168 return nil, errs[0]
169 }
170 errors = append(errors, errs...)
171 }
172 refs = uniqueParamRefs(refs, dollar)
173 if c.conf.Engine == config.EngineMySQL || !dollar {
174 sort.Slice(refs, func(i, j int) bool { return refs[i].ref.Location < refs[j].ref.Location })
175 } else {
176 sort.Slice(refs, func(i, j int) bool { return refs[i].ref.Number < refs[j].ref.Number })
177 }
178 raw, embeds := rewrite.Embeds(raw)
179 qc, err := c.buildQueryCatalog(c.catalog, raw.Stmt, embeds)
180 if err := check(err); err != nil {
181 return nil, err
182 }

Callers 2

analyzeQueryMethod · 0.95
inferQueryMethod · 0.95

Calls 15

buildQueryCatalogMethod · 0.95
resolveCatalogRefsMethod · 0.95
outputColumnsMethod · 0.95
expandMethod · 0.95
ParamRefFunction · 0.92
NamedParametersFunction · 0.92
InsertStmtFunction · 0.92
FuncCallFunction · 0.92
InFunction · 0.92
EmbedsFunction · 0.92
MutateFunction · 0.92
ParseTableNameFunction · 0.85

Tested by

no test coverage detected