public string RegisterReader(string clientId, ReaderResultSet resultset) { string readerId = Guid.NewGuid().ToString(); HashVector recordsets = new HashVector(StringComparer.InvariantCultureIgnoreCase); resultset.ClientID = clientId; lock (_syncRoot) { if (!string.IsNullOrEmpty(clientId)) { if (!_readersList.ContainsKey(clientId)) { recordsets[readerId] = resultset; } else { recordsets = _readersList[clientId]; recordsets[readerId] = null; } _readersList[clientId] = recordsets; } _readers[readerId] = resultset; } return(readerId); }
public static void BuildReaderChunkResponse(ReaderResultSet resultSet, string RequestId, IList <byte[]> _serializedResponse) { long requestId = Convert.ToInt64(RequestId); Alachisoft.NCache.Common.Protobuf.Response response = new Alachisoft.NCache.Common.Protobuf.Response(); response.requestId = requestId; response.responseType = Common.Protobuf.Response.Type.GET_READER_CHUNK; Alachisoft.NCache.Common.Protobuf.GetReaderChunkResponse getReaderChunkResponse = new Common.Protobuf.GetReaderChunkResponse(); IList chunkedResponses = ToProtobufReaderResultSet(resultSet); if (chunkedResponses != null) { int sequence = 1; foreach (Alachisoft.NCache.Common.Protobuf.ReaderResultSet readerResult in chunkedResponses) { response.sequenceId = sequence++; response.numberOfChuncks = chunkedResponses.Count; getReaderChunkResponse.readerResultSets = readerResult; response.getReaderChunkResponse = getReaderChunkResponse; _serializedResponse.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeResponse(response)); } } else { response.getReaderChunkResponse = getReaderChunkResponse; _serializedResponse.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeResponse(response)); } }
public void DisposeReader(string readerId) { lock (_syncRoot) { if (_readers.ContainsKey(readerId)) { int count = _readers.Count; ReaderResultSet resultset = _readers[readerId]; _readers.Remove(readerId); if (resultset != null) { if (_readersList.Count > 0 && resultset.ClientID != null) { if (_readersList.ContainsKey(resultset.ClientID)) { HashVector clientReaders = _readersList[resultset.ClientID]; if (clientReaders != null) { clientReaders.Remove(readerId); } } } } } } }
public string RegisterReader(string clientId, ReaderResultSet resultset) { string readerId = Guid.NewGuid().ToString(); HashVector recordsets = new HashVector(StringComparer.InvariantCultureIgnoreCase); resultset.ClientID = clientId; resultset.LastAccessTime = DateTime.Now; lock (_syncRoot) { if (!string.IsNullOrEmpty(clientId)) { if (!_readersList.ContainsKey(clientId)) { recordsets[readerId] = resultset; } else { recordsets = _readersList[clientId]; recordsets[readerId] = null; } _readersList[clientId] = recordsets; } if (!_readers.ContainsKey(readerId) && _context != null && _context.PerfStatsColl != null) { _context.PerfStatsColl.IncrementRunningReaders(); } _readers[readerId] = resultset; } return(readerId); }
public void DisposeReader(string readerId) { lock (_syncRoot) { if (_readers.ContainsKey(readerId)) { int count = _readers.Count; ReaderResultSet resultset = _readers[readerId]; _readers.Remove(readerId); if (resultset != null) { if (_readersList.Count > 0 && resultset.ClientID != null) { if (_readersList.ContainsKey(resultset.ClientID)) { HashVector clientReaders = _readersList[resultset.ClientID]; if (clientReaders != null) { clientReaders.Remove(readerId); } } } } if (_context != null && _context.PerfStatsColl != null) { _context.PerfStatsColl.DecrementRunningReaders(); } } } }
public override void ExecuteCommand(ClientManager clientManager, Alachisoft.NCache.Common.Protobuf.Command command) { CommandInfo cmdInfo; try { cmdInfo = ParseCommand(command, clientManager); } catch (Exception exc) { if (!base.immatureId.Equals("-2")) { _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeExceptionResponse(exc, command.requestID)); } return; } try { NCache nCache = clientManager.CmdExecuter as NCache; ReaderResultSet reader = nCache.Cache.GetReaderChunk(cmdInfo.ReaderId, cmdInfo.nextIndex, false, cmdInfo.OperationContext); ReaderResponseBuilder.BuildReaderChunkResponse(reader, cmdInfo.RequestId, _serializedResponsePackets); } catch (Exception exc) { _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeExceptionResponse(exc, command.requestID)); } }
public virtual ClusteredList <ReaderResultSet> ExecuteReader(string query, IDictionary values, bool getData, int chunkSize, bool isInproc, OperationContext operationContext) { ReaderResultSet result = InternalCache.Local_ExecuteReader(query, values, getData, chunkSize, isInproc, operationContext); ClusteredList <ReaderResultSet> resultList = new ClusteredList <ReaderResultSet>(); if (result != null) { resultList.Add(result); } return(resultList); }
public override void ExecuteCommand(ClientManager clientManager, Alachisoft.NCache.Common.Protobuf.Command command) { CommandInfo cmdInfo; int overload; int count = 0; string exception = null; Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); try { overload = 1; cmdInfo = ParseCommand(command, clientManager); } catch (Exception exc) { if (!base.immatureId.Equals("-2")) { _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeExceptionResponse(exc, command.requestID, command.commandID)); } return; } try { NCache nCache = clientManager.CmdExecuter as NCache; ReaderResultSet reader = nCache.Cache.GetReaderChunk(cmdInfo.ReaderId, cmdInfo.nextIndex, false, cmdInfo.OperationContext); stopWatch.Stop(); ReaderResponseBuilder.BuildReaderChunkResponse(reader, cmdInfo.RequestId, _serializedResponsePackets, command.commandID, clientManager.ClientVersion < 4620, out count); } catch (Exception exc) { exception = exc.ToString(); _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeExceptionResponse(exc, command.requestID, command.commandID)); } finally { TimeSpan executionTime = stopWatch.Elapsed; try { if (Alachisoft.NCache.Management.APILogging.APILogManager.APILogManger != null && Alachisoft.NCache.Management.APILogging.APILogManager.EnableLogging) { APILogItemBuilder log = new APILogItemBuilder(MethodsName.GetReaderChunkCommand.ToLower()); log.GenerateGetReaderChunkCommand(cmdInfo.ReaderId, count, overload, exception, executionTime, clientManager.ClientID, clientManager.ClientSocketId.ToString()); } } catch { } } }
public static IList BuildReaderChunkResponse(ReaderResultSet resultSet, string RequestId, IList _serializedResponse, int commandId, Boolean isOldClient, out int count) { count = 0; long requestId = Convert.ToInt64(RequestId); Alachisoft.NCache.Common.Protobuf.Response response = new Alachisoft.NCache.Common.Protobuf.Response(); response.requestId = requestId; response.commandID = commandId; response.responseType = Common.Protobuf.Response.Type.GET_READER_CHUNK; Alachisoft.NCache.Common.Protobuf.GetReaderChunkResponse getReaderChunkResponse = new Common.Protobuf.GetReaderChunkResponse(); if (resultSet != null && resultSet.RecordSet != null) { count = resultSet.RecordSet.RowCount; } IList chunkedResponses = ToProtobufReaderResultSet(resultSet, isOldClient); if (chunkedResponses != null && chunkedResponses.Count > 0) { int sequence = 1; foreach (Alachisoft.NCache.Common.Protobuf.ReaderResultSet readerResult in chunkedResponses) { response.sequenceId = sequence++; response.numberOfChuncks = chunkedResponses.Count; getReaderChunkResponse.readerResultSets = readerResult; response.getReaderChunkResponse = getReaderChunkResponse; _serializedResponse.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeResponse(response)); } } else { response.getReaderChunkResponse = getReaderChunkResponse; _serializedResponse.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeResponse(response)); } return(_serializedResponse); }
public ReaderResultSet GetRecordSet(string readerId, int nextIndex, bool inproc, OperationContext context) { ReaderResultSet readerChunk = null; IRecordSet partialRecordSet = null; ReaderResultSet reader = null; RecordRow row = null; CacheEntry entry = null; CompressedValueEntry cmpEntry = null; int size = 0; try { if (!string.IsNullOrEmpty(readerId)) { if (_readers.ContainsKey(readerId)) { reader = _readers[readerId]; } } if (reader != null) { if (nextIndex != 0 && reader.RecordSet.SubsetInfo.LastAccessedRowID == nextIndex) { reader.RecordSet.RemoveRows(reader.RecordSet.SubsetInfo.StartIndex, nextIndex - reader.RecordSet.SubsetInfo.StartIndex); } if (reader.RecordSet.RowCount > 0) { readerChunk = new ReaderResultSet(); partialRecordSet = new RecordSet(reader.RecordSet.GetColumnMetaData()); int chunkSize = reader.ChunkSize; reader.RecordSet.SubsetInfo.StartIndex = nextIndex; int nextRowID = nextIndex; while (size <= chunkSize) { row = reader.RecordSet.GetRow(nextRowID++); if (row == null) { break; } row = row.Clone() as RecordRow; if (reader.GetData && !reader.IsGrouped) { entry = _context.CacheImpl.Get(row.GetColumnValue(QueryKeyWords.KeyColumn), context); if (entry != null) { if (inproc) { row.SetColumnValue(QueryKeyWords.ValueColumn, entry.Value); } else { cmpEntry = new CompressedValueEntry(); cmpEntry.Value = entry.Value; if (cmpEntry.Value is CallbackEntry) { cmpEntry.Value = ((CallbackEntry)cmpEntry.Value).Value; } cmpEntry.Flag = ((CacheEntry)entry).Flag; row.SetColumnValue(QueryKeyWords.ValueColumn, cmpEntry); } size += entry.Size; } if (entry != null) { partialRecordSet.AddRow(row); size += row.GetSize(); } } else { partialRecordSet.AddRow(row); size += row.GetSize(); } } //Value column has been filled if getData is true if (reader.GetData && !reader.IsGrouped) { reader.RecordSet.GetColumnMetaData()[QueryKeyWords.ValueColumn].IsFilled = true; } reader.RecordSet.SubsetInfo.LastAccessedRowID += partialRecordSet.RowCount; readerChunk.RecordSet = partialRecordSet; readerChunk.NextIndex = reader.RecordSet.SubsetInfo.LastAccessedRowID; if (!inproc && _context.Render != null) { readerChunk.NodeAddress = _context.Render.IPAddress.ToString(); //server address } readerChunk.OrderByArguments = reader.OrderByArguments; readerChunk.IsGrouped = reader.IsGrouped; readerChunk.ReaderID = reader.ReaderID; } else { DisposeReader(reader.ReaderID); } } return(readerChunk); } catch (Exception ex) { if (ex is InvalidReaderException) { DisposeReader(reader.ReaderID); } throw; } }
internal override void Execute(QueryContext queryContext, Predicate nextPredicate) { ChildPredicate.Execute(queryContext, nextPredicate); RecordSet resultRecordSet = new RecordSet(); RecordColumn keyColumn = new RecordColumn(QueryKeyWords.KeyColumn); keyColumn.ColumnType = ColumnType.KeyColumn; keyColumn.AggregateFunctionType = AggregateFunctionType.NOTAPPLICABLE; keyColumn.DataType = ColumnDataType.String; keyColumn.IsHidden = false; keyColumn.IsFilled = true; resultRecordSet.Columns.Add(keyColumn); RecordColumn valueColumn = new RecordColumn(QueryKeyWords.ValueColumn); valueColumn.ColumnType = ColumnType.ValueColumn; valueColumn.AggregateFunctionType = AggregateFunctionType.NOTAPPLICABLE; valueColumn.DataType = ColumnDataType.CompressedValueEntry; valueColumn.IsHidden = true; valueColumn.IsFilled = false; resultRecordSet.Columns.Add(valueColumn); foreach (OrderByArgument orderBy in _orderByArguments) { RecordColumn column = new RecordColumn(orderBy.AttributeName); column.AggregateFunctionType = AggregateFunctionType.NOTAPPLICABLE; column.ColumnType = ColumnType.AttributeColumn; column.IsFilled = true; column.IsHidden = true; resultRecordSet.Columns.Add(column); } MultiRootTree sortingTree = new MultiRootTree(_orderByArguments, false); if (queryContext.InternalQueryResult.Count > 0) { foreach (string key in queryContext.InternalQueryResult) { if (queryContext.CancellationToken != null && queryContext.CancellationToken.IsCancellationRequested) { throw new OperationCanceledException(ExceptionsResource.OperationFailed); } KeyValuesContainer keyValues = new KeyValuesContainer(); keyValues.Key = key; bool invalidGroupKey = false; for (int i = 0; i < _orderByArguments.Count; i++) { if (queryContext.CancellationToken != null && queryContext.CancellationToken.IsCancellationRequested) { throw new OperationCanceledException(ExceptionsResource.OperationFailed); } string attribute = _orderByArguments[i].AttributeName; CacheEntry cacheentry = queryContext.Cache.GetEntryInternal(key, false); if (cacheentry == null) { invalidGroupKey = true; break; } object attribValue = queryContext.Index.GetAttributeValue(key, attribute, cacheentry.IndexInfo); if (attribValue == null) { invalidGroupKey = true; break; } keyValues.Values[attribute] = attribValue; } if (!invalidGroupKey) { sortingTree.Add(keyValues); } } } //generates RecordSet from tree. sortingTree.ToRecordSet(resultRecordSet); ReaderResultSet readerResult = new ReaderResultSet(); readerResult.IsGrouped = false; readerResult.OrderByArguments = _orderByArguments; readerResult.RecordSet = resultRecordSet; queryContext.ResultSet.Type = QueryType.OrderByQuery; queryContext.ResultSet.ReaderResult = readerResult; }
internal void MergeResponse(Common.Net.Address address, CommandResponse response) { if (_finalResponse == null && response.Type != Alachisoft.NCache.Common.Protobuf.Response.Type.GET_NEXT_CHUNK && response.Type != Alachisoft.NCache.Common.Protobuf.Response.Type.GET_READER_CHUNK && response.Type != Alachisoft.NCache.Common.Protobuf.Response.Type.EXECUTE_READER) { _finalResponse = response; if (response.IsBrokerReset) { MergeFailedResponse(response); } } else { if (response.IsBrokerReset) { MergeFailedResponse(response); } else { IDictionaryEnumerator ide = null; switch (response.Type) { case Alachisoft.NCache.Common.Protobuf.Response.Type.ADD_BULK: case Alachisoft.NCache.Common.Protobuf.Response.Type.INSERT_BULK: case Alachisoft.NCache.Common.Protobuf.Response.Type.GET_BULK: case Alachisoft.NCache.Common.Protobuf.Response.Type.REMOVE_BULK: ide = response.KeyValueDic.GetEnumerator(); while (ide.MoveNext()) { _finalResponse.KeyValueDic[ide.Key] = ide.Value; } break; case Alachisoft.NCache.Common.Protobuf.Response.Type.SEARCH: if ((_finalResponse.ExceptionType == Alachisoft.NCache.Common.Enum.ExceptionType.TYPE_INDEX_NOT_FOUND) || (_finalResponse.ExceptionType == Alachisoft.NCache.Common.Enum.ExceptionType.ATTRIBUTE_INDEX_NOT_FOUND)) { _finalResponse = response; break; } switch (response.ResultSet.AggregateFunctionType) { case Alachisoft.NCache.Common.Enum.AggregateFunctionType.NOTAPPLICABLE: _finalResponse.KeyList.AddRange(response.KeyList); break; default: if (!_finalResponse.ResultSet.IsInitialized) { SetAggregateFunctionResult(); _finalResponse.ResultSet.Initialize(_finalResponse.ResultSet); } _finalResponse.ResultSet.Compile(response.ResultSet); break; } break; case Alachisoft.NCache.Common.Protobuf.Response.Type.SEARCH_ENTRIES: if ((_finalResponse.ExceptionType == Alachisoft.NCache.Common.Enum.ExceptionType.TYPE_INDEX_NOT_FOUND) || (_finalResponse.ExceptionType == Alachisoft.NCache.Common.Enum.ExceptionType.ATTRIBUTE_INDEX_NOT_FOUND)) { _finalResponse = response; break; } switch (response.ResultSet.AggregateFunctionType) { case Alachisoft.NCache.Common.Enum.AggregateFunctionType.NOTAPPLICABLE: ide = response.KeyValueDic.GetEnumerator(); while (ide.MoveNext()) { _finalResponse.KeyValueDic[ide.Key] = ide.Value; } break; default: if (!_finalResponse.ResultSet.IsInitialized) { SetAggregateFunctionResult(); _finalResponse.ResultSet.Initialize(_finalResponse.ResultSet); } _finalResponse.ResultSet.Compile(response.ResultSet); break; } break; case Alachisoft.NCache.Common.Protobuf.Response.Type.GET_NEXT_CHUNK: if (_finalResponse == null) { _finalResponse = response; } EnumerationDataChunk chunk = null; if (_chunks.ContainsKey(address)) { chunk = _chunks[address]; } else { chunk = new EnumerationDataChunk(); chunk.Data = new List <string>(); _chunks.Add(address, chunk); } for (int i = 0; i < response.NextChunk.Count; i++) { chunk.Data.AddRange(response.NextChunk[i].Data); chunk.Pointer = response.NextChunk[i].Pointer; if (chunk.Pointer.NodeIpAddress == null) { chunk.Pointer.NodeIpAddress = address; } } _finalResponse.NextChunk = new List <EnumerationDataChunk>(_chunks.Values); break; case Alachisoft.NCache.Common.Protobuf.Response.Type.EXECUTE_READER: if (_finalResponse == null) { _finalResponse = response; } if ((_finalResponse.ExceptionType == Alachisoft.NCache.Common.Enum.ExceptionType.TYPE_INDEX_NOT_FOUND) || (_finalResponse.ExceptionType == Alachisoft.NCache.Common.Enum.ExceptionType.ATTRIBUTE_INDEX_NOT_FOUND)) { _finalResponse = response; break; } List <ReaderResultSet> protoReaders = response.ProtobufResponse.executeReaderResponse.readerResultSets; if (protoReaders != null && protoReaders.Count > 0) { foreach (ReaderResultSet protoReaderResultSet in protoReaders) { Common.DataReader.ReaderResultSet readerResultSet = null; foreach (Common.DataReader.ReaderResultSet set in _finalResponse.ReaderResultSets) { if (protoReaderResultSet.readerId == set.ReaderID && protoReaderResultSet.nodeAddress == set.NodeAddress) { readerResultSet = set; break; } } if (readerResultSet != null) { PopulateRows((Common.DataReader.RecordSet)readerResultSet.RecordSet, protoReaderResultSet.recordSet.rows); } else { readerResultSet = ConvertToReaderResult(protoReaderResultSet); _finalResponse.ReaderResultSets.Add(readerResultSet); } } } break; case Common.Protobuf.Response.Type.GET_READER_CHUNK: if (_finalResponse == null) { _finalResponse = response; } ReaderResultSet protoReaderChunkResultSet = response.ProtobufResponse.getReaderChunkResponse.readerResultSets; Common.DataReader.ReaderResultSet readerChunkResultSet = _finalResponse.ReaderNextChunk; if (readerChunkResultSet != null) { PopulateRows((Common.DataReader.RecordSet)readerChunkResultSet.RecordSet, protoReaderChunkResultSet.recordSet.rows); } else { readerChunkResultSet = ConvertToReaderResult(protoReaderChunkResultSet); _finalResponse.ReaderNextChunk = readerChunkResultSet; } break; case Alachisoft.NCache.Common.Protobuf.Response.Type.EXCEPTION: if (response.ExceptionType == Common.Enum.ExceptionType.STATE_TRANSFER_EXCEPTION) { _finalResponse = response; } break; default: break; } } } }
internal override void Execute(QueryContext queryContext, Predicate nextPredicate) { RecordSet resultRecordSet = new RecordSet(); foreach (string columnName in _groupByValueList.ObjectAttributes) { RecordColumn column = new RecordColumn(columnName); column.AggregateFunctionType = AggregateFunctionType.NOTAPPLICABLE; column.ColumnType = ColumnType.AttributeColumn; column.IsFilled = true; column.IsHidden = false; resultRecordSet.Columns.Add(column); } foreach (AggregateFunctionPredicate afp in _groupByValueList.AggregateFunctions) { string columnName = afp.GetFunctionType().ToString() + "(" + afp.AttributeName + ")"; if (resultRecordSet.Columns.Contains(columnName)) { throw new ArgumentException("Invalid query. Same value cannot be selected twice."); } RecordColumn column = new RecordColumn(columnName); column.IsHidden = false; column.ColumnType = ColumnType.AggregateResultColumn; column.AggregateFunctionType = afp.GetFunctionType(); column.IsFilled = true; resultRecordSet.Columns.Add(column); afp.ChildPredicate = null; } ChildPredicate.Execute(queryContext, nextPredicate); if (_orderingAttributes == null) { _orderingAttributes = new List <OrderByArgument>(_groupingAttributes.Count); foreach (string groupby in _groupingAttributes) { OrderByArgument oba = new OrderByArgument(); oba.AttributeName = groupby; _orderingAttributes.Add(oba); } } MultiRootTree groupTree = new MultiRootTree(_orderingAttributes, true); if (queryContext.InternalQueryResult.Count > 0) { foreach (string key in queryContext.InternalQueryResult) { if (queryContext.CancellationToken != null && queryContext.CancellationToken.IsCancellationRequested) { throw new OperationCanceledException(ExceptionsResource.OperationFailed); } KeyValuesContainer keyValues = new KeyValuesContainer(); keyValues.Key = key; bool invalidGroupKey = false; for (int i = 0; i < _orderingAttributes.Count; i++) { if (queryContext.CancellationToken != null && queryContext.CancellationToken.IsCancellationRequested) { throw new OperationCanceledException(ExceptionsResource.OperationFailed); } string attribute = _orderingAttributes[i].AttributeName; CacheEntry cacheentry = queryContext.Cache.GetEntryInternal(key, false); object attribValue = queryContext.Index.GetAttributeValue(key, attribute, cacheentry.IndexInfo); if (attribValue == null) { invalidGroupKey = true; break; } keyValues.Values[attribute] = attribValue; } if (!invalidGroupKey) { groupTree.Add(keyValues); } } } //add remaining attributes in Group By clause as hidden columns foreach (string attribute in _groupingAttributes) { if (!resultRecordSet.Columns.Contains(attribute)) { RecordColumn column = new RecordColumn(attribute); column.AggregateFunctionType = AggregateFunctionType.NOTAPPLICABLE; column.ColumnType = ColumnType.AttributeColumn; column.IsHidden = true; column.IsFilled = true; resultRecordSet.Columns.Add(column); } } //generates RecordSet from tree. groupTree.ToRecordSet(resultRecordSet); for (int rowID = 0; rowID < resultRecordSet.Rows.Count; rowID++) { if (queryContext.CancellationToken != null && queryContext.CancellationToken.IsCancellationRequested) { throw new OperationCanceledException(ExceptionsResource.OperationFailed); } List <string> keysList = resultRecordSet.Rows[rowID].Tag as List <string>; int j = 0; queryContext.InternalQueryResult = new Common.Queries.ListQueryResult(queryContext.KeyFilter, queryContext.CompoundFilter, keysList);//Union(keysList as IEnumerable<string>); foreach (AggregateFunctionPredicate afp in this._groupByValueList.AggregateFunctions) { if (queryContext.CancellationToken != null && queryContext.CancellationToken.IsCancellationRequested) { throw new OperationCanceledException(ExceptionsResource.OperationFailed); } afp.Execute(queryContext, null); int columnId = _groupByValueList.ObjectAttributes.Count + j++; if (resultRecordSet.Columns[columnId].DataType == ColumnDataType.Object) { resultRecordSet.Columns[columnId].DataType = RecordSet.ToColumnDataType(queryContext.ResultSet.AggregateFunctionResult.Value); } resultRecordSet.Rows[rowID][columnId] = queryContext.ResultSet.AggregateFunctionResult.Value; } } ReaderResultSet readerResult = new ReaderResultSet(); readerResult.IsGrouped = true; readerResult.OrderByArguments = _orderingAttributes; readerResult.RecordSet = resultRecordSet; queryContext.ResultSet.Type = QueryType.GroupByAggregateFunction; queryContext.ResultSet.ReaderResult = readerResult; }
internal void MergeResponse(Common.Net.Address address, CommandResponse response) { if (_finalResponse == null && (response.Type != Alachisoft.NCache.Common.Protobuf.Response.Type.GET_NEXT_CHUNK && response.Type != Alachisoft.NCache.Common.Protobuf.Response.Type.GET_READER_CHUNK && response.Type != Alachisoft.NCache.Common.Protobuf.Response.Type.EXECUTE_READER && response.Type != Alachisoft.NCache.Common.Protobuf.Response.Type.EXECUTE_READER_CQ)) { _finalResponse = response; if (response.IsBrokerReset) { MergeFailedResponse(response); } } else { if (response.IsBrokerReset) { MergeFailedResponse(response); } else { IDictionaryEnumerator ide = null; switch (response.Type) { case Common.Protobuf.Response.Type.POLL: _finalResponse.PollingResult.RemovedKeys.AddRange(response.PollingResult.RemovedKeys); _finalResponse.PollingResult.UpdatedKeys.AddRange(response.PollingResult.UpdatedKeys); break; case Common.Protobuf.Response.Type.ADD_BULK: case Common.Protobuf.Response.Type.INSERT_BULK: case Common.Protobuf.Response.Type.GET_BULK: case Common.Protobuf.Response.Type.REMOVE_BULK: case Common.Protobuf.Response.Type.GET_GROUP_DATA: case Common.Protobuf.Response.Type.GET_TAG: case Common.Protobuf.Response.Type.HYBRID_BULK: case Common.Protobuf.Response.Type.INVOKE_ENTRY_PROCESSOR: case Common.Protobuf.Response.Type.MESSAGE_ACKNOWLEDGEMENT: ide = response.KeyValueDic.GetEnumerator(); while (ide.MoveNext()) { _finalResponse.KeyValueDic[ide.Key] = ide.Value; } ide = response.KeyVersionDic.GetEnumerator(); while (ide.MoveNext()) { _finalResponse.KeyVersionDic[ide.Key] = ide.Value; } break; case Common.Protobuf.Response.Type.GET_MESSAGE: foreach (var item in response.MessageDic) { if (!_finalResponse.MessageDic.ContainsKey(item.Key)) { _finalResponse.MessageDic.Add(item.Key, item.Value); } else { foreach (var message in item.Value) { _finalResponse.MessageDic[item.Key].Add(message); } } } break; case Common.Protobuf.Response.Type.GET_GROUP_KEYS: case Common.Protobuf.Response.Type.GET_KEYS_TAG: _finalResponse.KeyList.AddRange(response.KeyList); break; case Common.Protobuf.Response.Type.EXECUTE_READER: case Common.Protobuf.Response.Type.EXECUTE_READER_CQ: if (_finalResponse == null) { _finalResponse = response; } if ((_finalResponse.ExceptionType == Common.Enum.ExceptionType.TYPE_INDEX_NOT_FOUND) || (_finalResponse.ExceptionType == Common.Enum.ExceptionType.ATTRIBUTE_INDEX_NOT_FOUND)) { _finalResponse = response; break; } List <ReaderResultSet> protoReaders = response.Type == Common.Protobuf.Response.Type.EXECUTE_READER ? response.ProtobufResponse.executeReaderResponse.readerResultSets : response.ProtobufResponse.executeReaderCQResponse.readerResultSets; if (protoReaders != null && protoReaders.Count > 0) { foreach (ReaderResultSet protoReaderResultSet in protoReaders) { Common.DataReader.ReaderResultSet readerResultSet = null; foreach (Common.DataReader.ReaderResultSet set in _finalResponse.ReaderResultSets) { if (protoReaderResultSet.readerId == set.ReaderID && protoReaderResultSet.nodeAddress == set.NodeAddress) { readerResultSet = set; break; } } if (readerResultSet != null) { PopulateRows((Common.DataReader.RecordSet)readerResultSet.RecordSet, protoReaderResultSet.recordSet.rows); } else { readerResultSet = ConvertToReaderResult(protoReaderResultSet); _finalResponse.ReaderResultSets.Add(readerResultSet); } } } break; case Common.Protobuf.Response.Type.GET_READER_CHUNK: if (_finalResponse == null) { _finalResponse = response; } ReaderResultSet protoReaderChunkResultSet = response.ProtobufResponse.getReaderChunkResponse.readerResultSets; Common.DataReader.ReaderResultSet readerChunkResultSet = _finalResponse.ReaderNextChunk; if (readerChunkResultSet != null) { PopulateRows((Common.DataReader.RecordSet)readerChunkResultSet.RecordSet, protoReaderChunkResultSet.recordSet.rows); } else { readerChunkResultSet = ConvertToReaderResult(protoReaderChunkResultSet); _finalResponse.ReaderNextChunk = readerChunkResultSet; } break; case Common.Protobuf.Response.Type.DELETE_QUERY: case Common.Protobuf.Response.Type.REMOVE_QUERY: if ((_finalResponse.ExceptionType == Common.Enum.ExceptionType.TYPE_INDEX_NOT_FOUND) || (_finalResponse.ExceptionType == Alachisoft.NCache.Common.Enum.ExceptionType .ATTRIBUTE_INDEX_NOT_FOUND)) { if ((response.ExceptionType != Common.Enum.ExceptionType.ATTRIBUTE_INDEX_NOT_FOUND) || (response.ExceptionType != Common.Enum.ExceptionType.TYPE_INDEX_NOT_FOUND)) { _finalResponse = response; } } else if (_finalResponse != null && (response.ExceptionType != Common.Enum.ExceptionType.ATTRIBUTE_INDEX_NOT_FOUND) || (response.ExceptionType != Common.Enum.ExceptionType.TYPE_INDEX_NOT_FOUND)) { _finalResponse.RemovedKeyCount += response.RemovedKeyCount; } break; case Common.Protobuf.Response.Type.SEARCH_CQ: _finalResponse.KeyList.AddRange(response.KeyList); if (response.ResultSet != null && !string.IsNullOrEmpty(response.ResultSet.CQUniqueId)) { string uniqueID = response.ResultSet.CQUniqueId; if (!string.IsNullOrEmpty(uniqueID) && uniqueID != "-1") { if (_finalResponse.ResultSet != null && string.IsNullOrEmpty(_finalResponse.ResultSet.CQUniqueId)) { _finalResponse.ResultSet.CQUniqueId = uniqueID; } } } break; case Common.Protobuf.Response.Type.SEARCH_ENTRIES: if ((_finalResponse.ExceptionType == Common.Enum.ExceptionType.TYPE_INDEX_NOT_FOUND) || (_finalResponse.ExceptionType == Common.Enum.ExceptionType.ATTRIBUTE_INDEX_NOT_FOUND)) { _finalResponse = response; break; } switch (response.ResultSet.Type) { case NCache.Caching.Queries.QueryType.GroupByAggregateFunction: break; default: switch (response.ResultSet.AggregateFunctionType) { case Alachisoft.NCache.Common.Enum.AggregateFunctionType.NOTAPPLICABLE: ide = response.KeyValueDic.GetEnumerator(); while (ide.MoveNext()) { _finalResponse.KeyValueDic[ide.Key] = ide.Value; } break; default: if (!_finalResponse.ResultSet.IsInitialized) { SetAggregateFunctionResult(); _finalResponse.ResultSet.Initialize(_finalResponse.ResultSet); } _finalResponse.ResultSet.Compile(response.ResultSet); break; } break; } break; case Alachisoft.NCache.Common.Protobuf.Response.Type.SEARCH: if ((_finalResponse.ExceptionType == Alachisoft.NCache.Common.Enum.ExceptionType.TYPE_INDEX_NOT_FOUND) || (_finalResponse.ExceptionType == Alachisoft.NCache.Common.Enum.ExceptionType .ATTRIBUTE_INDEX_NOT_FOUND)) { _finalResponse = response; break; } switch (response.ResultSet.AggregateFunctionType) { case Alachisoft.NCache.Common.Enum.AggregateFunctionType.NOTAPPLICABLE: _finalResponse.KeyList.AddRange(response.KeyList); break; default: if (!_finalResponse.ResultSet.IsInitialized) { SetAggregateFunctionResult(); _finalResponse.ResultSet.Initialize(_finalResponse.ResultSet); } _finalResponse.ResultSet.Compile(response.ResultSet); break; } break; case Alachisoft.NCache.Common.Protobuf.Response.Type.GET_SERVER_MAPPING: _finalResponse.ServerMappingList = response.ServerMappingList; break; case Alachisoft.NCache.Common.Protobuf.Response.Type.SEARCH_ENTRIES_CQ: ide = response.KeyValueDic.GetEnumerator(); while (ide.MoveNext()) { _finalResponse.KeyValueDic[ide.Key] = ide.Value; } if (response.ResultSet != null && response.ResultSet.CQUniqueId != null) { string uniqueID = response.ResultSet.CQUniqueId; if (!string.IsNullOrEmpty(uniqueID) && uniqueID != null) { if (_finalResponse.ResultSet != null && string.IsNullOrEmpty(_finalResponse.ResultSet.CQUniqueId)) { _finalResponse.ResultSet.CQUniqueId = response.ResultSet.CQUniqueId; } } } break; case Alachisoft.NCache.Common.Protobuf.Response.Type.GET_NEXT_CHUNK: if (_finalResponse == null) { _finalResponse = response; } EnumerationDataChunk chunk = null; if (_chunks.ContainsKey(address)) { chunk = _chunks[address]; } else { chunk = new EnumerationDataChunk(); chunk.Data = new List <string>(); _chunks.Add(address, chunk); } for (int i = 0; i < response.NextChunk.Count; i++) { chunk.Data.AddRange(response.NextChunk[i].Data); chunk.Pointer = response.NextChunk[i].Pointer; if (chunk.Pointer.NodeIpAddress == null) { chunk.Pointer.NodeIpAddress = address; } } _finalResponse.NextChunk = new List <EnumerationDataChunk>(_chunks.Values); break; case Common.Protobuf.Response.Type.TASK_ENUMERATOR: _finalResponse.TaskEnumerator.AddRange(response.TaskEnumerator); break; case Alachisoft.NCache.Common.Protobuf.Response.Type.EXCEPTION: if (response.ExceptionType == Common.Enum.ExceptionType.STATE_TRANSFER_EXCEPTION) { _finalResponse = response; } break; default: break; } } } }