/// <summary>
        /// Performs the query override.
        /// </summary>
        /// <param name="indexTypeMapping">The index type mapping.</param>
        /// <param name="query">The query.</param>
        /// <param name="messageContext">The message context.</param>
        private void PerformQueryOverride(IndexTypeMapping indexTypeMapping, BaseMultiIndexIdQuery <PagedIndexQueryResult> query, MessageContext messageContext)
        {
            PagedIndexQuery pagedQuery = query as PagedIndexQuery;

            if (indexTypeMapping.QueryOverrideSettings != null)
            {
                // override MaxItemsPerIndexThreshold if required
                if (indexTypeMapping.QueryOverrideSettings.MaxItemsPerIndexThreshold != 0 &&
                    pagedQuery.IndexIdList.Count > 1 &&
                    pagedQuery.PageNum == 0 &&
                    (pagedQuery.IndexIdParamsMapping == null || pagedQuery.IndexIdParamsMapping.Count == 0) &&
                    pagedQuery.MaxItemsPerIndex == 0 &&
                    pagedQuery.Filter == null)
                {
                    LoggingUtil.Log.ErrorFormat(
                        "Encountered Potentially Bad Paged Query.  Overriding MaxItemsPerIndex to {0}.  AddressHistory {1}.  Original Query Info: {2}",
                        indexTypeMapping.QueryOverrideSettings.MaxItemsPerIndexThreshold,
                        IndexServerUtils.FormatAddressHistory(messageContext.AddressHistory),
                        FormatQueryInfo(pagedQuery));
                    pagedQuery.MaxItemsPerIndex = indexTypeMapping.QueryOverrideSettings.MaxItemsPerIndexThreshold;
                }

                // override PageNum if required
                if (indexTypeMapping.QueryOverrideSettings.DisableFullPageQuery && pagedQuery.PageNum == 0 && pagedQuery.PageSize != 0)
                {
                    LoggingUtil.Log.InfoFormat(
                        "Configuration rules require overriding PageNum to 1.  AddressHistory {0}.  Original Query Info: {1}",
                        IndexServerUtils.FormatAddressHistory(messageContext.AddressHistory),
                        FormatQueryInfo(pagedQuery));
                    pagedQuery.PageNum = 1;
                }
            }
        }
        /// <summary>
        /// Processes the subsets.
        /// </summary>
        /// <param name="query">The query.</param>
        /// <param name="resultItemList">The result item list.</param>
        /// <param name="groupByResult">The GroupByResult</param>
        /// <param name="baseComparer">The BaseComparer</param>
        protected override void ProcessSubsets(BaseMultiIndexIdQuery <PagedIndexQueryResult> query,
                                               ref List <ResultItem> resultItemList,
                                               ref GroupByResult groupByResult,
                                               BaseComparer baseComparer)
        {
            PagedIndexQuery pagedQuery = query as PagedIndexQuery;

            if (!pagedQuery.ClientSideSubsetProcessingRequired && pagedQuery.PageNum != 0)
            {
                int pageSize = pagedQuery.PageSize;
                int start    = (pagedQuery.PageNum - 1) * pageSize;
                int end      = pagedQuery.PageNum * pageSize;
                if (pagedQuery.GroupBy == null)
                {
                    List <ResultItem> pageFilteredResultItemList = new List <ResultItem>();
                    for (int i = start; i < end && i < resultItemList.Count; i++)
                    {
                        pageFilteredResultItemList.Add(resultItemList[i]);
                    }
                    resultItemList = pageFilteredResultItemList;
                }
                else
                {
                    GroupByResult pageGroupByResult = new GroupByResult(baseComparer);
                    for (int i = start; i < end && i < groupByResult.Count; i++)
                    {
                        pageGroupByResult.Add(groupByResult[i].CompositeKey, groupByResult[i]);
                    }
                    groupByResult = pageGroupByResult;
                }
            }
        }
示例#3
0
        /// <summary>
        /// Formats the query info.
        /// </summary>
        /// <param name="query">The query.</param>
        /// <returns>String containing formatted QueryInfo</returns>
        protected override string FormatQueryInfo(BaseMultiIndexIdQuery <PagedIndexQueryResult> query)
        {
            PagedIndexQuery pagedQuery = query as PagedIndexQuery;
            StringBuilder   stb        = new StringBuilder(base.FormatQueryInfo(query));

            stb.Append("PageNum: ").Append(pagedQuery.PageNum).Append(", ");
            stb.Append("PageSize: ").Append(pagedQuery.PageSize);
            return(stb.ToString());
        }
示例#4
0
        /// <summary>
        /// Processes the subsets.
        /// </summary>
        /// <param name="query">The query.</param>
        /// <param name="resultItemList">The result item list.</param>
        protected override void ProcessSubsets(BaseMultiIndexIdQuery <PagedIndexQueryResult> query, ref List <ResultItem> resultItemList)
        {
            PagedIndexQuery pagedQuery = query as PagedIndexQuery;

            if (!pagedQuery.ClientSideSubsetProcessingRequired && pagedQuery.PageNum != 0)
            {
                List <ResultItem> pageFilteredResultItemList = new List <ResultItem>();
                int pageSize = pagedQuery.PageSize;
                int start    = (pagedQuery.PageNum - 1) * pageSize;
                int end      = pagedQuery.PageNum * pageSize;
                for (int i = start; i < end && i < resultItemList.Count; i++)
                {
                    pageFilteredResultItemList.Add(resultItemList[i]);
                }
                resultItemList = pageFilteredResultItemList;
            }
        }
 // copy ctor
 public VirtualPagedIndexQuery(PagedIndexQuery query)
     : base(query)
 {
 }
        /// <summary>
        /// Formats the query info.
        /// </summary>
        /// <param name="query">The query.</param>
        /// <returns>String containing formatted QueryInfo</returns>
        protected override string FormatQueryInfo(BaseMultiIndexIdQuery <PagedIndexQueryResult> query)
        {
            PagedIndexQuery pagedQuery = query as PagedIndexQuery;

            return(pagedQuery.ToString());
        }