Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge | Align Task usage / ArrayPool / IsColumnEncryptionSupported netcore/netfx #2982

Merged
merged 14 commits into from
Nov 26, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -12807,119 +12807,127 @@ private async Task WriteXmlFeed(XmlDataFeed feed, TdsParserStateObject stateObj,
private async Task WriteTextFeed(TextDataFeed feed, Encoding encoding, bool needBom, TdsParserStateObject stateObj, int size, bool useReadBlock)
{
Debug.Assert(encoding == null || !needBom);
char[] inBuff = new char[constTextBufferSize];
char[] inBuff = ArrayPool<char>.Shared.Rent(constTextBufferSize);
MichelZ marked this conversation as resolved.
Show resolved Hide resolved

encoding = encoding ?? new UnicodeEncoding(false, false);
ConstrainedTextWriter writer = new ConstrainedTextWriter(new StreamWriter(new TdsOutputStream(this, stateObj, null), encoding), size);

if (needBom)

using (ConstrainedTextWriter writer = new ConstrainedTextWriter(new StreamWriter(new TdsOutputStream(this, stateObj, null), encoding), size))
{
if (_asyncWrite)
{
await writer.WriteAsync((char)TdsEnums.XMLUNICODEBOM).ConfigureAwait(false);
}
else
if (needBom)
{
writer.Write((char)TdsEnums.XMLUNICODEBOM);
if (_asyncWrite)
{
await writer.WriteAsync((char)TdsEnums.XMLUNICODEBOM).ConfigureAwait(false);
}
else
{
writer.Write((char)TdsEnums.XMLUNICODEBOM);
}
}
}

int nWritten = 0;
do
{
int nRead = 0;

if (_asyncWrite)
int nWritten = 0;
do
{
if (useReadBlock)
int nRead = 0;

if (_asyncWrite)
{
nRead = await feed._source.ReadBlockAsync(inBuff, 0, constTextBufferSize).ConfigureAwait(false);
if (useReadBlock)
{
nRead = await feed._source.ReadBlockAsync(inBuff, 0, constTextBufferSize).ConfigureAwait(false);
}
else
{
nRead = await feed._source.ReadAsync(inBuff, 0, constTextBufferSize).ConfigureAwait(false);
}
}
else
{
nRead = await feed._source.ReadAsync(inBuff, 0, constTextBufferSize).ConfigureAwait(false);
if (useReadBlock)
{
nRead = feed._source.ReadBlock(inBuff, 0, constTextBufferSize);
}
else
{
nRead = feed._source.Read(inBuff, 0, constTextBufferSize);
}
}
}
else
{
if (useReadBlock)

if (nRead == 0)
{
break;
}

if (_asyncWrite)
{
nRead = feed._source.ReadBlock(inBuff, 0, constTextBufferSize);
await writer.WriteAsync(inBuff, 0, nRead).ConfigureAwait(false);
}
else
{
nRead = feed._source.Read(inBuff, 0, constTextBufferSize);
writer.Write(inBuff, 0, nRead);
}
}

if (nRead == 0)
{
break;
}
nWritten += nRead;
} while (!writer.IsComplete);

if (_asyncWrite)
{
await writer.WriteAsync(inBuff, 0, nRead).ConfigureAwait(false);
await writer.FlushAsync().ConfigureAwait(false);
}
else
{
writer.Write(inBuff, 0, nRead);
writer.Flush();
}

nWritten += nRead;
} while (!writer.IsComplete);

if (_asyncWrite)
{
await writer.FlushAsync().ConfigureAwait(false);
}
else
{
writer.Flush();
}
ArrayPool<char>.Shared.Return(inBuff, clearArray: true);
}

private async Task WriteStreamFeed(StreamDataFeed feed, TdsParserStateObject stateObj, int len)
{
TdsOutputStream output = new TdsOutputStream(this, stateObj, null);
byte[] buff = new byte[constBinBufferSize];
int nWritten = 0;
do
byte[] buff = ArrayPool<byte>.Shared.Rent(constBinBufferSize);
MichelZ marked this conversation as resolved.
Show resolved Hide resolved

using (TdsOutputStream output = new TdsOutputStream(this, stateObj, null))
{
int nRead = 0;
int readSize = constBinBufferSize;
if (len > 0 && nWritten + readSize > len)
int nWritten = 0;
do
{
readSize = len - nWritten;
}
int nRead = 0;
int readSize = constBinBufferSize;
if (len > 0 && nWritten + readSize > len)
{
readSize = len - nWritten;
}

Debug.Assert(readSize >= 0);
Debug.Assert(readSize >= 0);

if (_asyncWrite)
{
nRead = await feed._source.ReadAsync(buff, 0, readSize).ConfigureAwait(false);
}
else
{
nRead = feed._source.Read(buff, 0, readSize);
}
if (_asyncWrite)
{
nRead = await feed._source.ReadAsync(buff, 0, readSize).ConfigureAwait(false);
}
else
{
nRead = feed._source.Read(buff, 0, readSize);
}

if (nRead == 0)
{
return;
}
if (nRead == 0)
{
return;
}

if (_asyncWrite)
{
await output.WriteAsync(buff, 0, nRead).ConfigureAwait(false);
}
else
{
output.Write(buff, 0, nRead);
}
if (_asyncWrite)
{
await output.WriteAsync(buff, 0, nRead).ConfigureAwait(false);
}
else
{
output.Write(buff, 0, nRead);
}

nWritten += nRead;
} while (len <= 0 || nWritten < len);
}

nWritten += nRead;
} while (len <= 0 || nWritten < len);
ArrayPool<byte>.Shared.Return(buff, clearArray: true);
}

private Task NullIfCompletedWriteTask(Task task)
Expand Down
Loading