Example #1
0
        /// <summary>
        /// Create an expand item, using a navigationProperty, its entity set, and any expand options.
        /// </summary>
        /// <param name="pathToNavigationProperty">the path to the navigation property for this expand item, including any type segments</param>
        /// <param name="navigationSource">the navigation source for this expand level.</param>
        /// <param name="filterOption">A filter clause for this expand (can be null)</param>
        /// <param name="orderByOption">An Orderby clause for this expand (can be null)</param>
        /// <param name="topOption">A top clause for this expand (can be null)</param>
        /// <param name="skipOption">A skip clause for this expand (can be null)</param>
        /// <param name="countOption">An query count clause for this expand (can be null)</param>
        /// <param name="levelsOption">An levels clause for this expand (can be null)</param>
        /// <param name="searchOption">An levels clause for this expand (can be null)</param>
        /// <param name="selectAndExpand">This level select and any sub expands for this expand item.</param>
        /// <exception cref="System.ArgumentNullException">Throws if input pathToNavigationProperty is null.</exception>
        internal ExpandedNavigationSelectItem(
            ODataExpandPath pathToNavigationProperty,
            IEdmNavigationSource navigationSource,
            FilterClause filterOption,
            OrderByClause orderByOption,
            long?topOption,
            long?skipOption,
            bool?countOption,
            LevelsClause levelsOption,
            SearchClause searchOption,
            SelectExpandClause selectAndExpand)
        {
            ExceptionUtils.CheckArgumentNotNull(pathToNavigationProperty, "navigationProperty");

            this.pathToNavigationProperty = pathToNavigationProperty;
            this.navigationSource         = navigationSource;
            this.filterOption             = filterOption;
            this.orderByOption            = orderByOption;
            this.topOption       = topOption;
            this.skipOption      = skipOption;
            this.countOption     = countOption;
            this.levelsOption    = levelsOption;
            this.searchOption    = searchOption;
            this.selectAndExpand = selectAndExpand;
        }
Example #2
0
 /// <summary>
 /// Create a new ODataUri. This contains the semantic meaning of the 
 /// entire uri.
 /// </summary>
 /// <param name="parameterAliasValueAccessor">The ParameterAliasValueAccessor.</param>
 /// <param name="path">The top level path for this uri.</param>
 /// <param name="customQueryOptions">Any custom query options for this uri. Can be null.</param>
 /// <param name="selectAndExpand">Any $select or $expand option for this uri. Can be null.</param>
 /// <param name="filter">Any $filter option for this uri. Can be null.</param>
 /// <param name="orderby">Any $orderby option for this uri. Can be null</param>
 /// <param name="search">Any $search option for this uri. Can be null</param>
 /// <param name="apply">Any $apply option for this uri. Can be null</param>
 /// <param name="skip">Any $skip option for this uri. Can be null.</param>
 /// <param name="top">Any $top option for this uri. Can be null.</param>
 /// <param name="queryCount">Any query $count option for this uri. Can be null.</param>
 internal ODataUri(
     ParameterAliasValueAccessor parameterAliasValueAccessor,
     ODataPath path,
     IEnumerable<QueryNode> customQueryOptions,
     SelectExpandClause selectAndExpand,
     FilterClause filter,
     OrderByClause orderby,
     SearchClause search,
     ApplyClause apply,
     long? skip,
     long? top,
     bool? queryCount)
 {
     this.ParameterAliasValueAccessor = parameterAliasValueAccessor;
     this.Path = path;
     this.CustomQueryOptions = new ReadOnlyCollection<QueryNode>(customQueryOptions.ToList());
     this.SelectAndExpand = selectAndExpand;
     this.Filter = filter;
     this.OrderBy = orderby;
     this.Search = search;
     this.Apply = apply;
     this.Skip = skip;
     this.Top = top;
     this.QueryCount = queryCount;
 }
Example #3
0
        /// <summary>
        /// Binds the given filter token.
        /// </summary>
        /// <param name="search">The search token to bind.</param>
        /// <returns>A SearchClause with for given Token.</returns>
        internal SearchClause BindSearch(QueryToken search)
        {
            ExceptionUtils.CheckArgumentNotNull(search, "filter");

            QueryNode expressionNode = this.bindMethod(search);

            SingleValueNode expressionResultNode = expressionNode as SingleValueNode;

            SearchClause searchClause = new SearchClause(expressionResultNode);

            return searchClause;
        }
        /// <summary>
        /// Create an expand item, using a navigationProperty, its entity set, and any expand options.
        /// </summary>
        /// <param name="pathToNavigationProperty">the path to the navigation property for this expand item, including any type segments</param>
        /// <param name="navigationSource">the navigation source for this expand level.</param>
        /// <param name="selectAndExpand">This level select and any sub expands for this expand item.</param>
        /// <param name="filterOption">A filter clause for this expand (can be null)</param>
        /// <param name="orderByOption">An Orderby clause for this expand (can be null)</param>
        /// <param name="topOption">A top clause for this expand (can be null)</param>
        /// <param name="skipOption">A skip clause for this expand (can be null)</param>
        /// <param name="countOption">An query count clause for this expand (can be null)</param>
        /// <param name="searchOption">An levels clause for this expand (can be null)</param>
        /// <param name="levelsOption">An levels clause for this expand (can be null)</param>
        /// <exception cref="System.ArgumentNullException">Throws if input pathToNavigationProperty is null.</exception>
        public ExpandedNavigationSelectItem(
            ODataExpandPath pathToNavigationProperty,
            IEdmNavigationSource navigationSource,
            SelectExpandClause selectAndExpand,
            FilterClause filterOption,
            OrderByClause orderByOption,
            long?topOption,
            long?skipOption,
            bool?countOption,
            SearchClause searchOption,
            LevelsClause levelsOption)
            : base(pathToNavigationProperty, navigationSource, filterOption, orderByOption, topOption, skipOption, countOption, searchOption)
        {
            ExceptionUtils.CheckArgumentNotNull(pathToNavigationProperty, "pathToNavigationProperty");

            this.SelectAndExpand = selectAndExpand;
            this.LevelsOption    = levelsOption;
        }
Example #5
0
        /// <summary>
        /// Create an expand item, using a navigationProperty, its entity set, and any expand options.
        /// </summary>
        /// <param name="pathToNavigationProperty">the path to the navigation property for this expand item, including any type segments</param>
        /// <param name="navigationSource">the navigation source for this expand level.</param>
        /// <param name="filterOption">A filter clause for this expand (can be null)</param>
        /// <param name="orderByOption">An Orderby clause for this expand (can be null)</param>
        /// <param name="topOption">A top clause for this expand (can be null)</param>
        /// <param name="skipOption">A skip clause for this expand (can be null)</param>
        /// <param name="countOption">An query count clause for this expand (can be null)</param>
        /// <param name="searchOption">An levels clause for this expand (can be null)</param>
        /// <exception cref="System.ArgumentNullException">Throws if input pathToNavigationProperty is null.</exception>
        public ExpandedReferenceSelectItem(
            ODataExpandPath pathToNavigationProperty,
            IEdmNavigationSource navigationSource,
            FilterClause filterOption,
            OrderByClause orderByOption,
            long?topOption,
            long?skipOption,
            bool?countOption,
            SearchClause searchOption)
        {
            ExceptionUtils.CheckArgumentNotNull(pathToNavigationProperty, "pathToNavigationProperty");

            this.PathToNavigationProperty = pathToNavigationProperty;
            this.NavigationSource         = navigationSource;
            this.FilterOption             = filterOption;
            this.OrderByOption            = orderByOption;
            this.TopOption    = topOption;
            this.SkipOption   = skipOption;
            this.CountOption  = countOption;
            this.SearchOption = searchOption;
        }
        /// <summary>
        /// Parses the $search.
        /// </summary>
        /// <returns>SearchClause representing $search.</returns>
        public SearchClause ParseSearch()
        {
            if (this.searchClause != null)
            {
                return this.searchClause;
            }

            string searchQuery;
            if (!this.TryGetQueryOption(UriQueryConstants.SearchQueryOption, out searchQuery)
                || searchQuery == null)
            {
                return null;
            }

            this.searchClause = ParseSearchImplementation(searchQuery, this.Configuration);
            return searchClause;
        }
        /// <summary>
        /// Apply search to the given resouce expression
        /// </summary>
        /// <param name="rootExpression"></param>
        /// <param name="entityInstanceType"></param>
        /// <param name="uriParser"></param>
        /// <param name="searchClause"></param>
        /// <returns></returns>
        public static Expression ApplySearch(this Expression rootExpression, Type entityInstanceType, ODataUriParser uriParser, SearchClause searchClause)
        {
            ParameterExpression parameter = Expression.Parameter(entityInstanceType, "it");
            NodeToExpressionTranslator nodeToExpressionTranslator = new NodeToExpressionTranslator()
            {
                ImplicitVariableParameterExpression = parameter,
                UriParser = uriParser,
            };

            Expression searchNodeExpression = nodeToExpressionTranslator.TranslateNode(searchClause.Expression);

            // IQueryable<TSource> Where<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate);
            // translate to rootExpression.Where(searchNodeExpression)
            return Expression.Call(
                typeof(Enumerable),
                "Where",
                new Type[] { entityInstanceType },
                rootExpression,
                Expression.Lambda(searchNodeExpression, parameter));
        }
 public void SearchOptionSetCorrectly()
 {
     SearchClause search = new SearchClause(new SearchTermNode("SearchMe"));
     ExpandedNavigationSelectItem expansion = new ExpandedNavigationSelectItem(new ODataExpandPath(new NavigationPropertySegment(ModelBuildingHelpers.BuildValidNavigationProperty(), null)), HardCodedTestModel.GetPeopleSet(), null, null, null, null, null, null, search, null);
     expansion.SearchOption.Expression.ShouldBeSearchTermNode("SearchMe");
 }
        /// <summary>
        /// Writes an ODataPath to string
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public static string ToString(SearchClause node)
        {
            if (node != null)
            {
                return tabHelper.Prefix + "SearchQueryOption" +
                    tabHelper.Indent(() =>
                        tabHelper.Prefix + "Expression = " + ToString(node.Expression)
                     );
            }

            return String.Empty;
        }
 /// <summary>
 /// Writes a test case for baselining.
 /// </summary>
 /// <param name="node">Node to write to string</param>
 /// <param name="originalSearch">Original $search string.</param>
 /// <returns>String representation of the output from the URI Parser.</returns>
 internal static string GetTestCaseAndResultString(SearchClause node, string originalSearch)
 {
     return "$search = " + originalSearch + "\n\n" + ToString(node);
 }