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