private bool IsQueryOperatorParameterKind()

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