/// <summary> /// Create a new NamedValue lookup given name and value. /// </summary> /// <param name="name">The name of the value. Or null if the name was not used for this value.</param> /// <param name="value">The value - a literal.</param> public NamedValue(string name, LiteralQueryToken value) { ExceptionUtils.CheckArgumentNotNull(value, "value"); this.name = name; this.value = value; }
/// <summary> /// Parses typed literals. /// </summary> /// <param name="lexer">The lexer to use.</param> /// <param name="targetType">Expected type to be parsed.</param> /// <param name="targetTypeName">The EDM type name of the expected type to be parsed.</param> /// <returns>The literal token produced by building the given literal.</returns> private static LiteralQueryToken ParseTypedLiteral(ExpressionLexer lexer, Type targetType, string targetTypeName) { Debug.Assert(lexer != null, "lexer != null"); object targetValue; if (!UriPrimitiveTypeParser.TryUriStringToPrimitive(lexer.CurrentToken.Text, targetType, out targetValue)) { string message = Strings.UriQueryExpressionParser_UnrecognizedLiteral( targetTypeName, lexer.CurrentToken.Text, lexer.CurrentToken.Position, lexer.ExpressionText); throw ParseError(message); } LiteralQueryToken result = new LiteralQueryToken() { Value = targetValue, OriginalText = lexer.CurrentToken.Text }; lexer.NextToken(); return(result); }
/// <summary> /// Parses null literals. /// </summary> /// <param name="lexer">The lexer to use.</param> /// <returns>The literal token produced by building the given literal.</returns> private static LiteralQueryToken ParseNullLiteral(ExpressionLexer lexer) { Debug.Assert(lexer != null, "lexer != null"); Debug.Assert(lexer.CurrentToken.Kind == ExpressionTokenKind.NullLiteral, "this.lexer.CurrentToken.Kind == ExpressionTokenKind.NullLiteral"); LiteralQueryToken result = new LiteralQueryToken(null, lexer.CurrentToken.Text); lexer.NextToken(); return(result); }
/// <summary> /// Parses the key value literal. /// </summary> /// <param name="lexer">The lexer positioned on the key value.</param> /// <returns>The literal query token.</returns> private static LiteralQueryToken ParseKeyValueLiteral(ExpressionLexer lexer) { Debug.Assert(lexer != null, "lexer != null"); LiteralQueryToken result = UriQueryExpressionParser.TryParseLiteral(lexer); if (result == null) { throw new ODataException(Strings.UriQueryPathParser_InvalidKeyValueLiteral(lexer.CurrentToken.Text)); } return(result); }
/// <summary> /// Binds a literal token. /// </summary> /// <param name="literalToken">The literal token to bind.</param> /// <returns>The bound literal token.</returns> protected virtual QueryNode BindLiteral(LiteralQueryToken literalToken) { ExceptionUtils.CheckArgumentNotNull(literalToken, "literalToken"); return new ConstantQueryNode() { Value = literalToken.Value }; }
/// <summary> /// Write the literal token as URI part to this builder. /// </summary> /// <param name="literal">To write as URI part.</param> protected virtual void WriteLiteral(LiteralQueryToken literal) { ExceptionUtils.CheckArgumentNotNull(literal, "literal"); WriteClrLiteral(this.builder, literal.Value); }
/// <summary> /// Parses null literals. /// </summary> /// <param name="lexer">The lexer to use.</param> /// <returns>The literal token produced by building the given literal.</returns> private static LiteralQueryToken ParseNullLiteral(ExpressionLexer lexer) { Debug.Assert(lexer != null, "lexer != null"); Debug.Assert(lexer.CurrentToken.Kind == ExpressionTokenKind.NullLiteral, "this.lexer.CurrentToken.Kind == ExpressionTokenKind.NullLiteral"); LiteralQueryToken result = new LiteralQueryToken() { Value = null, OriginalText = lexer.CurrentToken.Text }; lexer.NextToken(); return result; }
/// <summary> /// Parses typed literals. /// </summary> /// <param name="lexer">The lexer to use.</param> /// <param name="targetType">Expected type to be parsed.</param> /// <param name="targetTypeName">The EDM type name of the expected type to be parsed.</param> /// <returns>The literal token produced by building the given literal.</returns> private static LiteralQueryToken ParseTypedLiteral(ExpressionLexer lexer, Type targetType, string targetTypeName) { Debug.Assert(lexer != null, "lexer != null"); object targetValue; if (!UriPrimitiveTypeParser.TryUriStringToPrimitive(lexer.CurrentToken.Text, targetType, out targetValue)) { string message = Strings.UriQueryExpressionParser_UnrecognizedLiteral( targetTypeName, lexer.CurrentToken.Text, lexer.CurrentToken.Position, lexer.ExpressionText); throw ParseError(message); } LiteralQueryToken result = new LiteralQueryToken() { Value = targetValue, OriginalText = lexer.CurrentToken.Text }; lexer.NextToken(); return result; }