internal Task WriteClose(StatementOrPortal type, string name, bool async, CancellationToken cancellationToken = default) { var len = sizeof(byte) + // Message code sizeof(int) + // Length sizeof(byte) + // Statement or portal name.Length + sizeof(byte); // Statement or portal name plus null terminator if (WriteBuffer.WriteSpaceLeft < 10) { return(FlushAndWrite(len, type, name, async, cancellationToken)); } Write(len, type, name); return(Task.CompletedTask); async Task FlushAndWrite(int len, StatementOrPortal type, string name, bool async, CancellationToken cancellationToken) { await Flush(async, cancellationToken); Debug.Assert(len <= WriteBuffer.WriteSpaceLeft, $"Message of type {GetType().Name} has length {len} which is bigger than the buffer ({WriteBuffer.WriteSpaceLeft})"); Write(len, type, name); } void Write(int len, StatementOrPortal type, string name) { WriteBuffer.WriteByte(FrontendMessageCode.Close); WriteBuffer.WriteInt32(len - 1); WriteBuffer.WriteByte((byte)type); WriteBuffer.WriteNullTerminatedString(name); } }
internal Task WriteDescribe(StatementOrPortal statementOrPortal, string name, bool async) { Debug.Assert(name.All(c => c < 128)); var len = sizeof(byte) + // Message code sizeof(int) + // Length sizeof(byte) + // Statement or portal (name.Length + 1); // Statement/portal name if (WriteBuffer.WriteSpaceLeft < len) { return(FlushAndWrite(len, statementOrPortal, name, async)); } Write(len, statementOrPortal, name); return(Task.CompletedTask); async Task FlushAndWrite(int len, StatementOrPortal statementOrPortal, string name, bool async) { await Flush(async); Debug.Assert(len <= WriteBuffer.WriteSpaceLeft, $"Message of type {GetType().Name} has length {len} which is bigger than the buffer ({WriteBuffer.WriteSpaceLeft})"); Write(len, statementOrPortal, name); } void Write(int len, StatementOrPortal statementOrPortal, string name) { WriteBuffer.WriteByte(FrontendMessageCode.Describe); WriteBuffer.WriteInt32(len - 1); WriteBuffer.WriteByte((byte)statementOrPortal); WriteBuffer.WriteNullTerminatedString(name); } }
internal CloseMessage(StatementOrPortal type, string name="") { StatementOrPortal = type; Name = name; }
internal CloseMessage(StatementOrPortal type, string name = "") { StatementOrPortal = type; Name = name; }
internal DescribeMessage Populate(StatementOrPortal type, string name = null) { StatementOrPortal = type; Name = name ?? ""; return this; }
internal DescribeMessage Populate(StatementOrPortal type, string name = null) { StatementOrPortal = type; Name = name ?? ""; return(this); }
internal CloseMessage Populate(StatementOrPortal type, string name = "") { StatementOrPortal = type; Name = name; return(this); }