Пример #1
0
        /// <summary>
        /// Instantiate a Table by directly deserializing byte data from the given Deserializer.
        /// </summary>
        /// <param name="input">The Deserializer providing the data for the table.</param>
        internal SingleRowTable(Deserializer input)
            : base(input)
        {
            // Validate row count.
            if (this.RowCount > 1)
            {
                throw new VoltInvalidDataException(Resources.InvalidRowCount, this.RowCount);
            }
            else if (this.RowCount == 0)
            {
                return;
            }

            // Total byte length of the row (ignored).
            int rowLength = input.ReadInt32();

            // Read data and push in storage.
            for (short c = 0; c < this.ColumnCount; c++)
            {
                switch (ColumnType[c])
                {
                case DBType.TINYINT:
                    Column.SetValue(input.ReadSByteN(), c);
                    break;

                case DBType.SMALLINT:
                    Column.SetValue(input.ReadInt16N(), c);
                    break;

                case DBType.INTEGER:
                    Column.SetValue(input.ReadInt32N(), c);
                    break;

                case DBType.BIGINT:
                    Column.SetValue(input.ReadInt64N(), c);
                    break;

                case DBType.FLOAT:
                    Column.SetValue(input.ReadDoubleN(), c);
                    break;

                case DBType.DECIMAL:
                    Column.SetValue(input.ReadVoltDecimalN(), c);
                    break;

                case DBType.TIMESTAMP:
                    Column.SetValue(input.ReadDateTimeN(), c);
                    break;

                case DBType.VARBINARY:
                    Column.SetValue(input.ReadByteArray(), c);
                    break;

                default:
                    Column.SetValue(input.ReadString(), c);
                    break;
                }
            }
        }
        /// <summary>
        /// Instantiate a Table by directly deserializing byte data from the given Deserializer.
        /// </summary>
        /// <param name="input">The Deserializer providing the data for the table.</param>
        internal SingleRowTable(Deserializer input)
            : base(input)
        {
            // Validate row count.
            if (this.RowCount > 1)
                throw new VoltInvalidDataException(Resources.InvalidRowCount, this.RowCount);
            else if (this.RowCount == 0)
                return;

            // Total byte length of the row (ignored).
            int rowLength = input.ReadInt32();

            // Read data and push in storage.
            for (short c = 0; c < this.ColumnCount; c++)
            {
                switch (ColumnType[c])
                {
                    case DBType.TINYINT:
                        Column.SetValue(input.ReadSByteN(), c);
                        break;
                    case DBType.SMALLINT:
                        Column.SetValue(input.ReadInt16N(), c);
                        break;
                    case DBType.INTEGER:
                        Column.SetValue(input.ReadInt32N(), c);
                        break;
                    case DBType.BIGINT:
                        Column.SetValue(input.ReadInt64N(), c);
                        break;
                    case DBType.FLOAT:
                        Column.SetValue(input.ReadDoubleN(), c);
                        break;
                    case DBType.DECIMAL:
                        Column.SetValue(input.ReadVoltDecimalN(), c);
                        break;
                    case DBType.TIMESTAMP:
                        Column.SetValue(input.ReadDateTimeN(), c);
                        break;
                    case DBType.VARBINARY:
                        Column.SetValue(input.ReadByteArray(), c);
                        break;
                    default:
                        Column.SetValue(input.ReadString(), c);
                        break;
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Instantiate a Table by directly deserializing byte data from the given Deserializer.
        /// </summary>
        /// <param name="input">The Deserializer providing the data for the table.</param>
        internal Table(Deserializer input)
            : base(input)
        {
            // Allocate column-based data storage.
            for (short c = 0; c < this.ColumnCount; c++)
            {
                switch (ColumnType[c])
                {
                case DBType.TINYINT:
                    Column[c] = new sbyte?[this.RowCount];
                    break;

                case DBType.SMALLINT:
                    Column[c] = new short?[this.RowCount];
                    break;

                case DBType.INTEGER:
                    Column[c] = new int?[this.RowCount];
                    break;

                case DBType.BIGINT:
                    Column[c] = new long?[this.RowCount];
                    break;

                case DBType.FLOAT:
                    Column[c] = new double?[this.RowCount];
                    break;

                case DBType.DECIMAL:
                    Column[c] = new VoltDecimal?[this.RowCount];
                    break;

                case DBType.TIMESTAMP:
                    Column[c] = new DateTime?[this.RowCount];
                    break;

                case DBType.STRING:
                    Column[c] = new string[this.RowCount];
                    break;

                case DBType.VARBINARY:
                    Column[c] = new byte[this.RowCount][];
                    break;

                default:
                    throw new VoltUnsupportedTypeException(Resources.UnsupportedDBType, ColumnType[c]);
                }
            }

            // Get data and push to storage.
            for (int r = 0; r < this.RowCount; r++)
            {
                // Total byte length of the row (ignored).
                input.Skip(4);
                // Read data and push in storage.
                for (short c = 0; c < this.ColumnCount; c++)
                {
                    switch (ColumnType[c])
                    {
                    case DBType.TINYINT:
                        (Column[c] as sbyte?[])[r] = input.ReadSByteN();
                        break;

                    case DBType.SMALLINT:
                        (Column[c] as short?[])[r] = input.ReadInt16N();
                        break;

                    case DBType.INTEGER:
                        (Column[c] as int?[])[r] = input.ReadInt32N();
                        break;

                    case DBType.BIGINT:
                        (Column[c] as long?[])[r] = input.ReadInt64N();
                        break;

                    case DBType.FLOAT:
                        (Column[c] as double?[])[r] = input.ReadDoubleN();
                        break;

                    case DBType.DECIMAL:
                        (Column[c] as VoltDecimal?[])[r] = input.ReadVoltDecimalN();
                        break;

                    case DBType.TIMESTAMP:
                        (Column[c] as DateTime?[])[r] = input.ReadDateTimeN();
                        break;

                    case DBType.VARBINARY:
                        (Column[c] as byte[][])[r] = input.ReadByteArray();
                        break;

                    default:
                        (Column[c] as string[])[r] = input.ReadString();
                        break;
                    }
                }
            }

            // Attach the enumerable row collection.
            this._Rows = new RowCollection(this);
        }
Пример #4
0
        /// <summary>
        /// Instantiate a Table by directly deserializing byte data from the given Deserializer.
        /// </summary>
        /// <param name="input">The Deserializer providing the data for the table.</param>
        internal Table(Deserializer input)
            : base(input)
        {
            // Allocate column-based data storage.
            for (short c = 0; c < this.ColumnCount; c++)
            {
                switch (ColumnType[c])
                {
                    case DBType.TINYINT:
                        Column[c] = new sbyte?[this.RowCount];
                        break;
                    case DBType.SMALLINT:
                        Column[c] = new short?[this.RowCount];
                        break;
                    case DBType.INTEGER:
                        Column[c] = new int?[this.RowCount];
                        break;
                    case DBType.BIGINT:
                        Column[c] = new long?[this.RowCount];
                        break;
                    case DBType.FLOAT:
                        Column[c] = new double?[this.RowCount];
                        break;
                    case DBType.DECIMAL:
                        Column[c] = new VoltDecimal?[this.RowCount];
                        break;
                    case DBType.TIMESTAMP:
                        Column[c] = new DateTime?[this.RowCount];
                        break;
                    case DBType.STRING:
                        Column[c] = new string[this.RowCount];
                        break;
                    case DBType.VARBINARY:
                        Column[c] = new byte[this.RowCount][];
                        break;
                    default:
                        throw new VoltUnsupportedTypeException(Resources.UnsupportedDBType, ColumnType[c]);
                }
            }

            // Get data and push to storage.
            for (int r = 0; r < this.RowCount; r++)
            {
                // Total byte length of the row (ignored).
                input.Skip(4);
                // Read data and push in storage.
                for (short c = 0; c < this.ColumnCount; c++)
                {
                    switch (ColumnType[c])
                    {
                        case DBType.TINYINT:
                            (Column[c] as sbyte?[])[r] = input.ReadSByteN();
                            break;
                        case DBType.SMALLINT:
                            (Column[c] as short?[])[r] = input.ReadInt16N();
                            break;
                        case DBType.INTEGER:
                            (Column[c] as int?[])[r] = input.ReadInt32N();
                            break;
                        case DBType.BIGINT:
                            (Column[c] as long?[])[r] = input.ReadInt64N();
                            break;
                        case DBType.FLOAT:
                            (Column[c] as double?[])[r] = input.ReadDoubleN();
                            break;
                        case DBType.DECIMAL:
                            (Column[c] as VoltDecimal?[])[r] = input.ReadVoltDecimalN();
                            break;
                        case DBType.TIMESTAMP:
                            (Column[c] as DateTime?[])[r] = input.ReadDateTimeN();
                            break;
                        case DBType.VARBINARY:
                            (Column[c] as byte[][])[r] = input.ReadByteArray();
                            break;
                        default:
                            (Column[c] as string[])[r] = input.ReadString();
                            break;
                    }
                }
            }

            // Attach the enumerable row collection.
            this._Rows = new RowCollection(this);
        }