Exemplo n.º 1
0
        private void ParseOpaque(ref PacketReader reader)
        {
            var customType = (ColumnType)reader.ReadByte();
            int length     = ReadDataLength(ref reader);

            // In JSON fractional seconds part always has 3 bytes
            // Format is the same as ParseDateTime2 but data is in little-endian order
            // TIMESTAMP is converted to DATETIME by the server
            // DATETIME2 dates have ColumnType.DATETIME marker which is confusing
            switch (customType)
            {
            case ColumnType.DECIMAL:
            case ColumnType.NEWDECIMAL:
                int metadata = reader.ReadUInt16LittleEndian();
                var number   = ColumnParser.ParseNewDecimal(ref reader, metadata);
                _writer.WriteValue((string)number);
                break;

            case ColumnType.DATE:
                _writer.WriteDate(ReadDateTime(ref reader));
                break;

            case ColumnType.TIME:
            case ColumnType.TIME2:
                _writer.WriteTime(ReadTime(ref reader));
                break;

            case ColumnType.DATETIME:
            case ColumnType.DATETIME2:
            case ColumnType.TIMESTAMP:
            case ColumnType.TIMESTAMP2:
                _writer.WriteDateTime(ReadDateTime(ref reader));
                break;

            default:
                var opaque = reader.ReadByteArraySlow(length);
                _writer.WriteOpaque(customType, opaque);
                break;
            }
        }