Implementation of the ADO.NET batching API (#3860) · npgsql/npgsql@0d8dd34 · GitHub
Skip to content

Commit 0d8dd34

Browse files
authored
Implementation of the ADO.NET batching API (#3860)
Closes #2317
1 parent b9b0efb commit 0d8dd34

37 files changed

Lines changed: 1867 additions & 775 deletions

‎.github/workflows/build.yml‎

Lines changed: 1 addition & 1 deletion

‎.github/workflows/rich-code-nav.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ on:
99
- '*'
1010

1111
env:
12-
dotnet_sdk_version: '6.0.100-preview.4.21255.9'
12+
dotnet_sdk_version: '6.0.100-preview.7.21379.14'
1313
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
1414

1515
jobs:

‎global.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"sdk": {
3-
"version": "6.0.100-preview.5.21302.13",
3+
"version": "6.0.100-preview.7.21379.14",
44
"rollForward": "latestMajor",
55
"allowPrerelease": "true"
66
}

‎src/Npgsql/Internal/NpgsqlConnector.FrontendMessages.cs‎

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ internal async Task WriteParse(string sql, string statementName, List<NpgsqlPara
146146
}
147147

148148
internal async Task WriteBind(
149-
List<NpgsqlParameter> inputParameters,
149+
List<NpgsqlParameter> parameters,
150150
string portal,
151151
string statement,
152152
bool allResultTypesAreUnknown,
@@ -172,20 +172,20 @@ internal async Task WriteBind(
172172

173173
var formatCodesSum = 0;
174174
var paramsLength = 0;
175-
for (var paramIndex = 0; paramIndex < inputParameters.Count; paramIndex++)
175+
for (var paramIndex = 0; paramIndex < parameters.Count; paramIndex++)
176176
{
177-
var param = inputParameters[paramIndex];
177+
var param = parameters[paramIndex];
178178
formatCodesSum += (int)param.FormatCode;
179179
param.LengthCache?.Rewind();
180180
paramsLength += param.ValidateAndGetLength();
181181
}
182182

183-
var formatCodeListLength = formatCodesSum == 0 ? 0 : formatCodesSum == inputParameters.Count ? 1 : inputParameters.Count;
183+
var formatCodeListLength = formatCodesSum == 0 ? 0 : formatCodesSum == parameters.Count ? 1 : parameters.Count;
184184

185185
var messageLength = headerLength +
186186
sizeof(short) * formatCodeListLength + // List of format codes
187187
sizeof(short) + // Number of parameters
188-
sizeof(int) * inputParameters.Count + // Parameter lengths
188+
sizeof(int) * parameters.Count + // Parameter lengths
189189
paramsLength + // Parameter values
190190
sizeof(short) + // Number of result format codes
191191
sizeof(short) * (unknownResultTypeList?.Length ?? 1); // Result format codes
@@ -207,22 +207,22 @@ internal async Task WriteBind(
207207
}
208208
else if (formatCodeListLength > 1)
209209
{
210-
for (var paramIndex = 0; paramIndex < inputParameters.Count; paramIndex++)
210+
for (var paramIndex = 0; paramIndex < parameters.Count; paramIndex++)
211211
{
212212
if (WriteBuffer.WriteSpaceLeft < 2)
213213
await Flush(async, cancellationToken);
214-
WriteBuffer.WriteInt16((short)inputParameters[paramIndex].FormatCode);
214+
WriteBuffer.WriteInt16((short)parameters[paramIndex].FormatCode);
215215
}
216216
}
217217

218218
if (WriteBuffer.WriteSpaceLeft < 2)
219219
await Flush(async, cancellationToken);
220220

221-
WriteBuffer.WriteUInt16((ushort)inputParameters.Count);
221+
WriteBuffer.WriteUInt16((ushort)parameters.Count);
222222

223-
for (var paramIndex = 0; paramIndex < inputParameters.Count; paramIndex++)
223+
for (var paramIndex = 0; paramIndex < parameters.Count; paramIndex++)
224224
{
225-
var param = inputParameters[paramIndex];
225+
var param = parameters[paramIndex];
226226
param.LengthCache?.Rewind();
227227
await param.WriteWithLength(WriteBuffer, async, cancellationToken);
228228
}

‎src/Npgsql/Internal/TypeHandlers/TextHandler.cs‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ namespace Npgsql.Internal.TypeHandlers
2222
/// should be considered somewhat unstable, and may change in breaking ways, including in non-major releases.
2323
/// Use it at your own risk.
2424
/// </remarks>
25-
2625
public class TextHandlerFactory : NpgsqlTypeHandlerFactory<string>
2726
{
2827
/// <inheritdoc />

‎src/Npgsql/MultiplexingConnectorPool.cs‎

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -261,24 +261,11 @@ bool WriteCommand(NpgsqlConnector connector, NpgsqlCommand command, ref Multiple
261261
// but the main thread continues to handle other commands on other connectors.
262262
if (_autoPrepare)
263263
{
264+
// TODO: Need to log based on numPrepared like in non-multiplexing mode...
264265
var numPrepared = 0;
265-
for (var statementIndex = 0; statementIndex < command._statements.Count; statementIndex++)
266-
{
267-
var statement = command._statements[statementIndex];
268-
// If this statement isn't prepared, see if it gets implicitly prepared.
269-
// Note that this may return null (not enough usages for automatic preparation).
270-
if (!statement.IsPrepared)
271-
statement.PreparedStatement = connector.PreparedStatementManager.TryGetAutoPrepared(statement);
272-
if (statement.PreparedStatement is PreparedStatement pStatement)
273-
{
266+
for (var i = 0; i < command.InternalBatchCommands.Count; i++)
267+
if (command.InternalBatchCommands[i].TryAutoPrepare(connector))
274268
numPrepared++;
275-
if (pStatement?.State == PreparedState.NotPrepared)
276-
{
277-
pStatement.State = PreparedState.BeingPrepared;
278-
statement.IsPreparing = true;
279-
}
280-
}
281-
}
282269
}
283270

284271
var written = connector.CommandsInFlightWriter!.TryWrite(command);

‎src/Npgsql/Netstandard20/CodeAnalysis.cs‎

Lines changed: 0 additions & 74 deletions
This file was deleted.

‎src/Npgsql/NpgsqlBatch.cs‎

Lines changed: 125 additions & 0 deletions

0 commit comments

Comments
 (0)