MCPcopy Index your code
hub / github.com/cockscomb/cel2sql / visitCallFunc

Method visitCallFunc

cel2sql.go:429–499  ·  view source on GitHub ↗
(expr *exprpb.Expr)

Source from the content-addressed store, hash-verified

427}
428
429func (con *converter) visitCallFunc(expr *exprpb.Expr) error {
430 c := expr.GetCallExpr()
431 fun := c.GetFunction()
432 target := c.GetTarget()
433 args := c.GetArgs()
434 switch fun {
435 case overloads.Contains:
436 return con.callContains(target, args)
437 case overloads.TypeConvertDuration:
438 return con.callDuration(target, args)
439 case "interval":
440 return con.callInterval(target, args)
441 case overloads.TimeGetFullYear,
442 overloads.TimeGetMonth,
443 overloads.TimeGetDate,
444 overloads.TimeGetHours,
445 overloads.TimeGetMinutes,
446 overloads.TimeGetSeconds,
447 overloads.TimeGetMilliseconds,
448 overloads.TimeGetDayOfYear,
449 overloads.TimeGetDayOfMonth,
450 overloads.TimeGetDayOfWeek:
451 return con.callExtractFromTimestamp(fun, target, args)
452 case overloads.TypeConvertBool,
453 overloads.TypeConvertBytes,
454 overloads.TypeConvertDouble,
455 overloads.TypeConvertInt,
456 overloads.TypeConvertString,
457 overloads.TypeConvertUint:
458 return con.callCasting(fun, target, args)
459 }
460 sqlFun, ok := standardSQLFunctions[fun]
461 if !ok {
462 if fun == overloads.Size {
463 argType := con.getType(args[0])
464 switch {
465 case argType.GetPrimitive() == exprpb.Type_STRING:
466 sqlFun = "LENGTH"
467 case argType.GetPrimitive() == exprpb.Type_BYTES:
468 sqlFun = "LENGTH"
469 case isListType(argType):
470 sqlFun = "ARRAY_LENGTH"
471 default:
472 return fmt.Errorf("unsupported type: %v", argType)
473 }
474 } else {
475 sqlFun = strings.ToUpper(fun)
476 }
477 }
478 con.str.WriteString(sqlFun)
479 con.str.WriteString("(")
480 if target != nil {
481 nested := isBinaryOrTernaryOperator(target)
482 err := con.visitMaybeNested(target, nested)
483 if err != nil {
484 return err
485 }
486 con.str.WriteString(", ")

Callers 1

visitCallMethod · 0.95

Calls 10

callContainsMethod · 0.95
callDurationMethod · 0.95
callIntervalMethod · 0.95
callCastingMethod · 0.95
getTypeMethod · 0.95
visitMaybeNestedMethod · 0.95
visitMethod · 0.95
isListTypeFunction · 0.85

Tested by

no test coverage detected