public static T Deserialize <T>(Stream stream, IFormatterResolver resolver, bool readStrict)
        {
            if (resolver == null)
            {
                resolver = DefaultResolver;
            }
            var formatter = resolver.GetFormatterWithVerify <T>();

            if (!readStrict)
            {
#if NETSTANDARD && !NET45
                var ms = stream as MemoryStream;
                if (ms != null)
                {
                    // optimize for MemoryStream
                    ArraySegment <byte> buffer;
                    if (ms.TryGetBuffer(out buffer))
                    {
                        int readSize;
                        return(formatter.Deserialize(buffer.Array, buffer.Offset, resolver, out readSize));
                    }
                }
#endif

                // no else.
                {
                    var buffer = InternalMemoryPool.GetBuffer();

                    FillFromStream(stream, ref buffer);

                    int readSize;
                    return(formatter.Deserialize(buffer, 0, resolver, out readSize));
                }
            }

            {
                int _;
                var bytes = MessagePackBinary.ReadMessageBlockFromStreamUnsafe(stream, false, out _);
                int readSize;
                return(formatter.Deserialize(bytes, 0, resolver, out readSize));
            }
        }
Exemple #2
0
        public BinaryResultSet Execute(int statementId, params object[] parameters) // how to avoid boxing?
        {
            var stream = client.GetStream();

            var readWriteBuffer = InternalMemoryPool.GetBuffer();
            var writer          = PacketWriter.Create(readWriteBuffer);

            ProtocolWriter.WriteExecuteStatement(ref writer, statementId, parameters);

            var reader = SyncWriteAndRead(ref writer, 0, stream);

            // COM_STMT_PREPARE_OK on success, ERR_Packet otherwise
            if (reader.IsErrorPacket())
            {
                throw ErrorPacket.Parse(ref reader).ToMySqlException();
            }

            // TODO: Ok or ResultSet?
            var set = ProtocolReader.ReadBinaryResultSet(ref reader);

            return(set);
        }
Exemple #3
0
        public TextResultSet Query(FormattableString query)
        {
            if (query.ArgumentCount == 0)
            {
                return(Query(query.Format));
            }

            var stream = client.GetStream();

            var readWriteBuffer = InternalMemoryPool.GetBuffer();
            var writer          = PacketWriter.Create(readWriteBuffer);

            var charBuffer  = InternalMemoryPool.GetCharBuffer();
            var stringCount = FastQueryParser.Parse(ref charBuffer, query);

            ProtocolWriter.WriteQuery(ref writer, charBuffer, stringCount);

            var reader = SyncWriteAndRead(ref writer, 0, stream);

            // TODO: Ok or ResultSet?
            var set = ProtocolReader.ReadTextResultSet(ref reader);

            return(set);
        }