Example #1
0
        /// <summary>
        /// Binds a literal value to a ConstantNode
        /// </summary>
        /// <param name="literalToken">Literal token to bind.</param>
        /// <returns>Bound query node.</returns>
        internal static QueryNode BindLiteral(LiteralToken literalToken)
        {
            ExceptionUtils.CheckArgumentNotNull(literalToken, "literalToken");

            if (!string.IsNullOrEmpty(literalToken.OriginalText))
            {
                if (literalToken.ExpectedEdmTypeReference != null)
                {
                    OData.Edm.IEdmCollectionTypeReference collectionReference =
                        literalToken.ExpectedEdmTypeReference as OData.Edm.IEdmCollectionTypeReference;
                    if (collectionReference != null && literalToken.OriginalText[0] == '(')
                    {
                        // CollectionConstantNode currently supports only parenthesis-based literals.
                        // See https://github.com/OData/odata.net/issues/1164. When we are ready to move bracket-based
                        // literals to CollectionConstantNode, simply remove the '(' check in the if-statement.
                        ODataCollectionValue collectionValue = literalToken.Value as ODataCollectionValue;
                        if (collectionValue != null)
                        {
                            return(new CollectionConstantNode(collectionValue.Items, literalToken.OriginalText, collectionReference));
                        }

                        Debug.Assert(collectionValue != null,
                                     "Literal token creates ODataCollectionValue. If this is not the case anymore, update the code path.");
                    }

                    return(new ConstantNode(literalToken.Value, literalToken.OriginalText, literalToken.ExpectedEdmTypeReference));
                }

                return(new ConstantNode(literalToken.Value, literalToken.OriginalText));
            }

            return(new ConstantNode(literalToken.Value));
        }
Example #2
0
        /// <summary>
        /// Binds a literal value to a ConstantNode
        /// </summary>
        /// <param name="literalToken">Literal token to bind.</param>
        /// <returns>Bound query node.</returns>
        internal static QueryNode BindInLiteral(LiteralToken literalToken)
        {
            ExceptionUtils.CheckArgumentNotNull(literalToken, "literalToken");

            if (!string.IsNullOrEmpty(literalToken.OriginalText))
            {
                if (literalToken.ExpectedEdmTypeReference != null)
                {
                    OData.Edm.IEdmCollectionTypeReference collectionReference =
                        literalToken.ExpectedEdmTypeReference as OData.Edm.IEdmCollectionTypeReference;
                    if (collectionReference != null)
                    {
                        ODataCollectionValue collectionValue = literalToken.Value as ODataCollectionValue;
                        if (collectionValue != null)
                        {
                            return(new CollectionConstantNode(collectionValue.Items, literalToken.OriginalText, collectionReference));
                        }
                    }

                    return(new ConstantNode(literalToken.Value, literalToken.OriginalText, literalToken.ExpectedEdmTypeReference));
                }

                return(new ConstantNode(literalToken.Value, literalToken.OriginalText));
            }

            return(new ConstantNode(literalToken.Value));
        }