Exemple #1
0
 private static bool IsExpressionIdentifierStart(char c)
 {
     return(SqlTokenHelper.IsIdentifierStartCharacter(c) || char.IsWhiteSpace(c) ||
            c == '"' || c == '\'' || c == '@');
 }
Exemple #2
0
        private ExpressionWrapper ReadParameter()
        {
            var parameter            = "";
            var doubleQuotationCount = 0;

            while (true)
            {
                if (_current == '\0')
                {
                    break;
                }


                if (char.IsLetterOrDigit(_current) || _current == '_' || _current == '"')
                {
                    if (_current == '"')
                    {
                        doubleQuotationCount++;
                    }
                    parameter += _current;
                    if (IsCharBreak())
                    {
                        break;
                    }
                    NextChar();
                }
                else if (_current == '.' && SqlTokenHelper.IsIdentifierStartCharacter(parameter[0]))
                {
                    NextChar();
                    if (_propertyValues.ContainsKey(parameter))
                    {
                        var instance  = CreateParameterExpression(parameter);
                        var param     = _propertyValues[parameter];
                        var paramType = param.Type;
                        var prop      = ReadProperty(instance.Expression, paramType);
                        return(prop);
                    }

                    throw new ExpressionEvaluateException(ExceptionMessageId.EspA011, _expressionText, parameter);
                }
                else
                {
                    break;
                }
            }

            if (doubleQuotationCount == 1 || doubleQuotationCount > 2)
            {
                throw new ExpressionEvaluateException(ExceptionMessageId.EspA014, _expressionText, parameter);
            }

            if (char.IsDigit(parameter[0]))
            {
                return(CreateNumericExpression(parameter));
            }

            if (parameter == "null")
            {
                return(CreateNullExpression(parameter));
            }

            if (parameter == "true" || parameter == "false")
            {
                return(CreateBooleanExpression(parameter));
            }

            if (parameter == "\"\"")
            {
                return(CreateEmptyStringExpression(parameter));
            }

            if (_propertyValues.ContainsKey(parameter))
            {
                return(CreateParameterExpression(parameter));
            }

            if (Regex.IsMatch(parameter, @"\"".*\"""))
            {
                return(CreateLiteralStringExpression(parameter));
            }
            throw new ExpressionEvaluateException(ExceptionMessageId.EspA011, _expressionText, parameter);
        }