in src/Kusto.Language/Binder/Binder.cs [5536:5593]
private bool IsQueryOperatorParameterKind(NamedParameter parameter, QueryOperatorParameter qop)
{
var type = GetResultTypeOrError(parameter.Expression);
switch (qop.ValueKind)
{
case QueryOperatorParameterValueKind.IntegerLiteral:
if (!(parameter.Expression.IsLiteral && IsInteger(type)))
return false;
break;
case QueryOperatorParameterValueKind.NumericLiteral:
case QueryOperatorParameterValueKind.ForcedRealLiteral:
if (!(parameter.Expression.IsLiteral && IsNumber(type)))
return false;
break;
case QueryOperatorParameterValueKind.ScalarLiteral:
if (!(parameter.Expression.IsLiteral && type.IsScalar))
return false;
break;
case QueryOperatorParameterValueKind.SummableLiteral:
if (!(parameter.Expression.IsLiteral && IsSummable(type)))
return false;
break;
case QueryOperatorParameterValueKind.StringLiteral:
if (!(parameter.Expression.IsLiteral && IsType(parameter.Expression, ScalarTypes.String)))
return false;
break;
case QueryOperatorParameterValueKind.BoolLiteral:
if (!(parameter.Expression.IsLiteral && IsType(parameter.Expression, ScalarTypes.Bool)))
return false;
break;
case QueryOperatorParameterValueKind.Column:
if (!(GetReferencedSymbol(parameter.Expression) is ColumnSymbol))
return false;
break;
case QueryOperatorParameterValueKind.Word:
if (!IsTokenLiteral(parameter.Expression, qop.Values, qop.IsCaseSensitive))
return false;
break;
case QueryOperatorParameterValueKind.WordOrNumber:
if (!IsNumber(type) && !IsTokenLiteral(parameter.Expression, qop.Values, qop.IsCaseSensitive))
return false;
break;
}
if (qop.ValueKind != QueryOperatorParameterValueKind.Word
&& qop.ValueKind != QueryOperatorParameterValueKind.WordOrNumber
&& qop.Values != null
&& qop.Values.Count > 0)
{
if (!parameter.Expression.IsLiteral)
return false;
if (!IsLiteralValue(parameter.Expression, qop.Values, qop.IsCaseSensitive))
return false;
}
return true;
}