/// <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; } } }
/// <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()); }
/// <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()); }