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++
}