private static bool IsExpressionIdentifierStart(char c) { return(SqlTokenHelper.IsIdentifierStartCharacter(c) || char.IsWhiteSpace(c) || c == '"' || c == '\'' || c == '@'); }
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); }