func()

in dax/internal/parser/expression.go [361:392]


func (e *ExpressionEncoder) EnterFunctionCall(ctx *generated.FunctionCallContext) {
	if e.err != nil { // bail out
		return
	}
	fname := strings.ToLower(ctx.ID().GetText())
	eName := exprTypeString(e.exprType)
	switch e.exprType {
	case UpdateExpr:
		if !e.funcAllowedInUpdate(fname) {
			e.err = newInvalidParameterError(fmt.Sprintf("Invalid %sExpression: The function is not allowed in a %s expression", eName, strings.ToLower(eName)))
			return
		}
		if e.nestingLevel > 0 && fname != "if_not_exists" {
			e.err = newInvalidParameterError(fmt.Sprintf("Only if_not_exists() function can be nested"))
			return
		}
	case FilterExpr, ConditionExpr, KeyConditionExpr:
		if !e.funcAllowedInFilter(fname) {
			e.err = newInvalidParameterError(fmt.Sprintf("Invalid %sExpression: The function is not allowed in a %s expression", eName, strings.ToLower(eName)))
			return
		}
		if e.nestingLevel == 0 && fname == "size" {
			e.err = newInvalidParameterError(fmt.Sprintf("Invalid %sExpression: The function is not allowed in a %s expression", eName, strings.ToLower(eName)))
			return
		}
		if e.nestingLevel > 0 && fname != "size" {
			e.err = newInvalidParameterError(fmt.Sprintf("Only size() function is allowed to be nested"))
		}
	default:
	}
	e.nestingLevel++
}