Exemplo n.º 1
0
        private Common.DataReader.ReaderResultSet ConvertToReaderResult(Common.Protobuf.ReaderResultSet readerResultSetProto)
        {
            if (readerResultSetProto == null)
            {
                return(null);
            }
            Common.DataReader.ReaderResultSet readerResultSet = new Common.DataReader.ReaderResultSet();
            readerResultSet.IsGrouped   = readerResultSetProto.isGrouped;
            readerResultSet.NodeAddress = readerResultSetProto.nodeAddress;
            readerResultSet.NextIndex   = readerResultSetProto.nextIndex;
            readerResultSet.ReaderID    = readerResultSetProto.readerId;

            Common.DataReader.RecordSet recordSet = null;
            if (readerResultSetProto.recordSet != null)
            {
                recordSet = new Common.DataReader.RecordSet();
                RecordSet recordSetProto = readerResultSetProto.recordSet;
                foreach (RecordColumn columnProto in recordSetProto.columns)
                {
                    Common.DataReader.RecordColumn column = new Common.DataReader.RecordColumn(columnProto.name);
                    column.AggregateFunctionType = (Common.Enum.AggregateFunctionType)Convert.ToInt32(columnProto.aggregateFunctionType);
                    column.ColumnType            = (Common.Enum.ColumnType)Convert.ToInt32(columnProto.columnType);
                    column.DataType = (Common.Enum.ColumnDataType)Convert.ToInt32(columnProto.dataType);
                    column.IsFilled = columnProto.isFilled;
                    column.IsHidden = columnProto.isHidden;
                    recordSet.AddColumn(column);
                }

                PopulateRows(recordSet, recordSetProto.rows);
            }
            readerResultSet.RecordSet = recordSet;
            return(readerResultSet);
        }
Exemplo n.º 2
0
        private Common.DataReader.ReaderResultSet ConvertToReaderResult(
            Common.Protobuf.ReaderResultSet readerResultSetProto)
        {
            if (readerResultSetProto == null)
            {
                return(null);
            }
            Common.DataReader.ReaderResultSet readerResultSet = new Common.DataReader.ReaderResultSet();
            readerResultSet.IsGrouped   = readerResultSetProto.isGrouped;
            readerResultSet.NodeAddress = readerResultSetProto.nodeAddress;
            readerResultSet.NextIndex   = readerResultSetProto.nextIndex;
            readerResultSet.ReaderID    = readerResultSetProto.readerId;

            List <Common.Queries.OrderByArgument> orderByArgs = new List <Common.Queries.OrderByArgument>();

            foreach (Common.Protobuf.OrderByArgument obaProto in readerResultSetProto.orderByArguments)
            {
                Common.Queries.OrderByArgument arg = new Common.Queries.OrderByArgument();
                arg.AttributeName = obaProto.attributeName;
                arg.Order         = (Common.Queries.Order)Convert.ToInt32(obaProto.order);
                orderByArgs.Add(arg);
            }

            readerResultSet.OrderByArguments = orderByArgs;
            Common.DataReader.RecordSet recordSet = null;
            if (readerResultSetProto.recordSet != null)
            {
                recordSet = new Common.DataReader.RecordSet();
                Common.Protobuf.RecordSet recordSetProto = readerResultSetProto.recordSet;
                foreach (Common.Protobuf.RecordColumn columnProto in recordSetProto.columns)
                {
                    Common.DataReader.RecordColumn column = new Common.DataReader.RecordColumn(columnProto.name);
                    column.AggregateFunctionType =
                        (Common.Enum.AggregateFunctionType)Convert.ToInt32(columnProto.aggregateFunctionType);
                    column.ColumnType = (Common.Enum.ColumnType)Convert.ToInt32(columnProto.columnType);
                    column.DataType   = (Common.Enum.ColumnDataType)Convert.ToInt32(columnProto.dataType);
                    column.IsFilled   = columnProto.isFilled;
                    column.IsHidden   = columnProto.isHidden;
                    recordSet.AddColumn(column);
                }

                PopulateRows(recordSet, recordSetProto.rows);
            }

            readerResultSet.RecordSet = recordSet;
            return(readerResultSet);
        }
Exemplo n.º 3
0
        private static IList ToProtobufReaderResultSet(Common.DataReader.ReaderResultSet resultSet, Boolean isOldClient)
        {
            if (resultSet == null)
            {
                return(null);
            }
            IList resultSetList = new ClusteredArrayList();

            if (isOldClient && !string.IsNullOrEmpty(resultSet.NodeAddress))
            {
                resultSet.NodeAddress = GetIP(resultSet.NodeAddress);
            }

            Common.Protobuf.ReaderResultSet resultSetProto = new Common.Protobuf.ReaderResultSet();
            resultSetProto.readerId    = resultSet.ReaderID;
            resultSetProto.isGrouped   = resultSet.IsGrouped;
            resultSetProto.nodeAddress = resultSet.NodeAddress;
            resultSetProto.nextIndex   = resultSet.NextIndex;

            if (resultSet.OrderByArguments != null)
            {
                foreach (Common.Queries.OrderByArgument oba in resultSet.OrderByArguments)
                {
                    Common.Protobuf.OrderByArgument arg = new Common.Protobuf.OrderByArgument();
                    arg.attributeName = oba.AttributeName;
                    arg.order         = (Common.Protobuf.Order)Convert.ToInt32(oba.Order);
                    resultSetProto.orderByArguments.Add(arg);
                }
            }
            Alachisoft.NCache.Common.Protobuf.RecordSet responseRecordSet = null;
            if (resultSet.RecordSet != null)
            {
                responseRecordSet = new Common.Protobuf.RecordSet();
                Alachisoft.NCache.Common.DataReader.IRecordSet recordSet = resultSet.RecordSet;

                Common.DataReader.ColumnCollection columns = recordSet.GetColumnMetaData();

                for (int i = 0; i < columns.Count; i++)
                {
                    if (columns[i].IsFilled)
                    {
                        Common.Protobuf.RecordColumn responseColumn = new Common.Protobuf.RecordColumn();
                        responseColumn.aggregateFunctionType = (Common.Protobuf.AggregateFunctionType)Convert.ToInt32(columns[i].AggregateFunctionType);
                        responseColumn.columnType            = (Common.Protobuf.ColumnType)Convert.ToInt32(columns[i].ColumnType);
                        responseColumn.dataType = (Common.Protobuf.ColumnDataType)Convert.ToInt32(columns[i].DataType);
                        responseColumn.isFilled = columns[i].IsFilled;
                        responseColumn.isHidden = columns[i].IsHidden;
                        responseColumn.name     = columns[i].ColumnName;
                        responseRecordSet.columns.Add(responseColumn);
                    }
                }

                int chunkSize = 0;

                for (int i = 0; i < recordSet.RowCount; i++)
                {
                    Common.DataReader.RecordRow row         = recordSet.GetRow(i);
                    Common.Protobuf.RecordRow   responseRow = new Common.Protobuf.RecordRow();

                    for (int j = 0; j < row.Columns.Count; j++)
                    {
                        if (!row.Columns[j].IsFilled)
                        {
                            continue;
                        }

                        Common.Protobuf.RecordSetValue rsValue = null;
                        if (row[j] != null)
                        {
                            rsValue = new Common.Protobuf.RecordSetValue();
                            switch (row.Columns[j].DataType)
                            {
                            case Common.Enum.ColumnDataType.AverageResult:
                                Alachisoft.NCache.Common.Queries.AverageResult avgResult = (Alachisoft.NCache.Common.Queries.AverageResult)row[j];
                                Common.Protobuf.AverageResult ar = new Common.Protobuf.AverageResult();
                                ar.sum            = avgResult.Sum.ToString();
                                ar.count          = avgResult.Count.ToString();
                                rsValue.avgResult = ar;

                                chunkSize += ar.sum.Length + ar.count.Length;

                                break;

                            case Common.Enum.ColumnDataType.CompressedValueEntry:
                                Alachisoft.NCache.Common.Protobuf.Value value = new Alachisoft.NCache.Common.Protobuf.Value();
                                if (row[j] != null)
                                {
                                    object        actualCachedItem = ((CompressedValueEntry)row[j]).Value;
                                    Common.BitSet flag             = ((CompressedValueEntry)row[j]).Flag;

                                    UserBinaryObject ubObject = null;
                                    if (actualCachedItem is UserBinaryObject)
                                    {
                                        ubObject = (UserBinaryObject)actualCachedItem;
                                    }
                                    else
                                    {
                                        ubObject = (UserBinaryObject)Cache.SocketServerDataService.GetClientData(actualCachedItem, ref flag, Common.Util.LanguageContext.DOTNET);
                                    }

                                    chunkSize += ubObject.Size;
                                    value.data.AddRange(((UserBinaryObject)ubObject).DataList);
                                    rsValue.binaryObject = value;
                                    rsValue.flag         = flag.Data;
                                }
                                break;

                            default:
                                rsValue.stringValue = Common.DataReader.RecordSet.GetString(row[j], row.Columns[j].DataType);
                                chunkSize          += rsValue.stringValue != null ? rsValue.stringValue.Length : 0;
                                break;
                            }
                        }
                        responseRow.values.Add(rsValue);
                    }
                    // Also some logic to check if chunk is greater than threshold size
                    // Right now, it is going to make chunks for each row.
                    responseRecordSet.rows.Add(responseRow);
                    resultSetProto.recordSet = responseRecordSet;

                    if (chunkSize > Alachisoft.NCache.Common.Util.ServiceConfiguration.ResponseDataSize || i == (recordSet.RowCount - 1))
                    {
                        resultSetList.Add(resultSetProto);
                        chunkSize = 0;

                        if (i < (recordSet.RowCount - 1))
                        {
                            resultSetProto             = new Common.Protobuf.ReaderResultSet();
                            responseRecordSet          = new Common.Protobuf.RecordSet();
                            resultSetProto.readerId    = resultSet.ReaderID;
                            resultSetProto.nodeAddress = resultSet.NodeAddress;
                        }
                    }
                }
            }
            return(resultSetList);
        }
Exemplo n.º 4
0
        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;
                    }
                }
            }
        }
Exemplo n.º 5
0
        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;
                    }
                }
            }
        }