Skip to content

Commit a9d7fa5

Browse files
committed
Use String.Create.
1 parent 1491e53 commit a9d7fa5

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

src/MySqlConnector/Core/ServerSession.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,34 @@ public async Task PrepareAsync(IMySqlCommand command, IOBehavior ioBehavior, Can
161161
}
162162

163163
var parameterCount = cachedProcedure.Parameters.Count;
164+
#if NETCOREAPP2_1 || NETCOREAPP3_1 || NETSTANDARD2_1 || NET5_0
165+
commandToPrepare = string.Create(commandText.Length + 7 + parameterCount * 2 + (parameterCount == 0 ? 1 : 0), (commandText, parameterCount), static (buffer, state) =>
166+
{
167+
buffer[0] = 'C';
168+
buffer[1] = 'A';
169+
buffer[2] = 'L';
170+
buffer[3] = 'L';
171+
buffer[4] = ' ';
172+
buffer = buffer.Slice(5);
173+
state.commandText.AsSpan().CopyTo(buffer);
174+
buffer = buffer.Slice(state.commandText.Length);
175+
buffer[0] = '(';
176+
buffer = buffer.Slice(1);
177+
if (state.parameterCount > 0)
178+
{
179+
buffer[0] = '?';
180+
buffer = buffer.Slice(1);
181+
for (var i = 1; i < state.parameterCount; i++)
182+
{
183+
buffer[0] = ',';
184+
buffer[1] = '?';
185+
buffer = buffer.Slice(2);
186+
}
187+
}
188+
buffer[0] = ')';
189+
buffer[1] = ';';
190+
});
191+
#else
164192
var callStatement = new StringBuilder("CALL ", commandText.Length + 8 + parameterCount * 2);
165193
callStatement.Append(commandText);
166194
callStatement.Append('(');
@@ -172,6 +200,7 @@ public async Task PrepareAsync(IMySqlCommand command, IOBehavior ioBehavior, Can
172200
callStatement[callStatement.Length - 1] = ')';
173201
callStatement.Append(';');
174202
commandToPrepare = callStatement.ToString();
203+
#endif
175204
}
176205
else
177206
{

0 commit comments

Comments
 (0)