public List <IPrimaryRelayMessageQuery> SplitQuery( int numClustersInGroup, int localClusterPosition, out IPrimaryRelayMessageQuery localQuery) { throw new NotImplementedException(); }
public override List <IPrimaryRelayMessageQuery> SplitQuery(int numClustersInGroup, int localClusterPosition, out IPrimaryRelayMessageQuery localQuery) { this.numClustersInGroup = numClustersInGroup; return(base.SplitQuery(numClustersInGroup, localClusterPosition, out localQuery)); }
public virtual List <IPrimaryRelayMessageQuery> SplitQuery(int numClustersInGroup, int localClusterPosition, out IPrimaryRelayMessageQuery localQuery) { BaseMultiIndexIdQuery <TQueryResult> query; List <IPrimaryRelayMessageQuery> queryList = new List <IPrimaryRelayMessageQuery>(); Dictionary <int /*cluster number*/, Triple <List <byte[]>, List <int>, Dictionary <byte[], IndexIdParams> > > clusterParamsMapping; localQuery = null; IndexCacheUtils.SplitIndexIdsByCluster( IndexIdList, PrimaryIdList, IndexIdParamsMapping, numClustersInGroup, out clusterParamsMapping); int mappingClusterCount = clusterParamsMapping.Count; int queryCount = 0; ClientSideSubsetProcessingRequired = (numClustersInGroup > 1 && IndexIdList.Count > 1 && mappingClusterCount > 1); Triple <List <byte[]> /*index id list*/, List <int> /*primary id list*/, Dictionary <byte[], IndexIdParams> /*index id parms*/> value; for (int i = 0; i < numClustersInGroup; i++) { if (clusterParamsMapping.TryGetValue(i, out value) == false) { continue; } query = (BaseMultiIndexIdQuery <TQueryResult>)Clone(); query.PrimaryId = i; query.IndexIdList = value.First; query.PrimaryIdList = value.Second; query.IndexIdParamsMapping = value.Third; query.ExcludeData = true; // dont retrieve data in these split queries for now if (query.PrimaryId == localClusterPosition) { localQuery = query; } else { queryList.Add(query); } if (++queryCount == mappingClusterCount) { break; } } return(queryList); }
public List <IPrimaryRelayMessageQuery> SplitQuery( int numClustersInGroup, int localClusterPosition, out IPrimaryRelayMessageQuery localQuery) { IntersectionQuery intersectionQuery; List <IPrimaryRelayMessageQuery> queryList = new List <IPrimaryRelayMessageQuery>(); Dictionary <int, Triple <List <byte[]>, List <int>, Dictionary <byte[], IntersectionQueryParams> > > clusterParamsMapping; localQuery = null; IndexCacheUtils.SplitIndexIdsByCluster(IndexIdList, PrimaryIdList, intersectionQueryParamsMapping, numClustersInGroup, out clusterParamsMapping); if (clusterParamsMapping.Count == 1) { //This means that the query is not spilt across more than multiple clusters and the MaxResultItems criteria can be applied on the server IsSingleClusterQuery = true; } foreach (KeyValuePair <int, Triple <List <byte[]>, List <int>, Dictionary <byte[], IntersectionQueryParams> > > clusterParam in clusterParamsMapping) { intersectionQuery = new IntersectionQuery(this) { primaryId = clusterParam.Key, IndexIdList = clusterParam.Value.First, PrimaryIdList = clusterParam.Value.Second, intersectionQueryParamsMapping = clusterParam.Value.Third }; if (clusterParam.Key == localClusterPosition) { localQuery = intersectionQuery; } else { queryList.Add(intersectionQuery); } } return(queryList); }