MCPcopy Index your code
hub / github.com/CovenantSQL/CovenantSQL / ResolveFilter

Function ResolveFilter

cmd/cql-proxy/resolver/resolver.go:210–289  ·  view source on GitHub ↗

ResolveFilter resolves filter object and returns as full where statement.

(q map[string]interface{}, availFields FieldMap)

Source from the content-addressed store, hash-verified

208
209// ResolveFilter resolves filter object and returns as full where statement.
210func ResolveFilter(q map[string]interface{}, availFields FieldMap) (
211 fields FieldMap, statement string, args []interface{}, err error) {
212 if q == nil {
213 return
214 }
215
216 fields = FieldMap{}
217 var subStatements []string
218
219 if len(q) == 0 {
220 return
221 }
222
223 for k, v := range q {
224 switch {
225 case k == "$and" || k == "$or" || k == "$nor":
226 var (
227 childFields FieldMap
228 childStatement string
229 childArgs []interface{}
230 childQuery []map[string]interface{}
231 )
232 childQuery, err = getNonEmptyArrayOfObjects(v)
233 if err != nil {
234 err = errors.Wrapf(err, "%s operator", k)
235 return
236 }
237 childFields, childStatement, childArgs, err = logicRelation(childQuery, availFields, opMap[k])
238 if err != nil {
239 return
240 }
241 if k == "$nor" {
242 // $nor empty result should be false
243 if childStatement == "" {
244 childStatement = "TRUE"
245 }
246 childStatement = "NOT (" + childStatement + ")"
247 } else {
248 if childStatement == "" {
249 continue
250 }
251 }
252 fields.Merge(childFields)
253 subStatements = append(subStatements, childStatement)
254 args = append(args, childArgs...)
255 case k == "$comment":
256 // ignore
257 case strings.HasPrefix(k, "$"):
258 err = errors.Errorf("invalid operator %s", k)
259 return
260 default:
261 // treat key as column
262 if !availFields[k] {
263 err = errors.Errorf("unknown field: %s", k)
264 return
265 }
266
267 var (

Callers 5

FindFunction · 0.85
UpdateFunction · 0.85
RemoveFunction · 0.85
CountFunction · 0.85
logicRelationFunction · 0.85

Calls 5

logicRelationFunction · 0.85
ResolveFieldConditionFunction · 0.85
MergeMethod · 0.80
ErrorfMethod · 0.80

Tested by

no test coverage detected