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