Skip to content

Commit e35e59f

Browse files
committed
Move text protocol deserialization to TextRow.
This lays the groundwork for a BinaryRow derived class (that handles the binary protocol) to be added for prepared statements.
1 parent 01b7e5c commit e35e59f

File tree

3 files changed

+265
-262
lines changed

3 files changed

+265
-262
lines changed

src/MySqlConnector/Core/ResultSet.cs

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@ public async Task<ResultSet> ReadResultSetHeaderAsync(IOBehavior ioBehavior)
3030
RecordsAffected = null;
3131
State = ResultSetState.None;
3232
m_columnDefinitionPayloadUsedBytes = 0;
33-
m_dataLengths = null;
34-
m_dataOffsets = null;
3533
m_readBuffer.Clear();
3634
m_row = null;
3735
m_rowBuffered = null;
@@ -106,8 +104,6 @@ int ReadColumnCount(ArraySegment<byte> arraySegment)
106104

107105
ColumnDefinitions = new ColumnDefinitionPayload[columnCount];
108106
ColumnTypes = new MySqlDbType[columnCount];
109-
m_dataOffsets = new int[columnCount];
110-
m_dataLengths = new int[columnCount];
111107

112108
for (var column = 0; column < ColumnDefinitions.Length; column++)
113109
{
@@ -171,7 +167,6 @@ public Task<bool> ReadAsync(CancellationToken cancellationToken) =>
171167

172168
public async Task<bool> ReadAsync(IOBehavior ioBehavior, CancellationToken cancellationToken)
173169
{
174-
m_row?.ClearData();
175170
m_row = m_readBuffer.Count > 0
176171
? m_readBuffer.Dequeue()
177172
: await ScanRowAsync(ioBehavior, m_row, cancellationToken).ConfigureAwait(false);
@@ -187,7 +182,7 @@ public async Task<bool> ReadAsync(IOBehavior ioBehavior, CancellationToken cance
187182

188183
public async Task<Row> BufferReadAsync(IOBehavior ioBehavior, CancellationToken cancellationToken)
189184
{
190-
m_rowBuffered?.BufferData();
185+
m_rowBuffered = m_rowBuffered?.Clone();
191186
// ScanRowAsync sets m_rowBuffered to the next row if there is one
192187
if (await ScanRowAsync(ioBehavior, null, cancellationToken).ConfigureAwait(false) == null)
193188
return null;
@@ -246,18 +241,9 @@ Row ScanRowAsyncRemainder(PayloadData payload, Row row_)
246241
}
247242
}
248243

249-
var reader = new ByteArrayReader(payload.ArraySegment);
250-
for (var column = 0; column < m_dataOffsets.Length; column++)
251-
{
252-
var length = reader.ReadLengthEncodedIntegerOrNull();
253-
m_dataLengths[column] = length == -1 ? 0 : length;
254-
m_dataOffsets[column] = length == -1 ? -1 : reader.Offset + payload.ArraySegment.Offset;
255-
reader.Offset += m_dataLengths[column];
256-
}
257-
258244
if (row_ == null)
259-
row_ = new Row(this);
260-
row_.SetData(m_dataLengths, m_dataOffsets, payload.ArraySegment);
245+
row_ = new TextRow(this);
246+
row_.SetData(payload.ArraySegment);
261247
m_rowBuffered = row_;
262248
m_hasRows = true;
263249
BufferState = ResultSetState.ReadingRows;
@@ -346,8 +332,6 @@ public Row GetCurrentRow()
346332

347333
ResizableArray<byte> m_columnDefinitionPayloads;
348334
int m_columnDefinitionPayloadUsedBytes;
349-
int[] m_dataLengths;
350-
int[] m_dataOffsets;
351335
readonly Queue<Row> m_readBuffer = new Queue<Row>();
352336
Row m_row;
353337
Row m_rowBuffered;

0 commit comments

Comments
 (0)