Skip to content

Commit 7641f70

Browse files
committed
Perform UTF-8 conversion at compile time.
1 parent 2e2f63c commit 7641f70

File tree

2 files changed

+11
-12
lines changed

2 files changed

+11
-12
lines changed

src/MySqlConnector/Core/ServerSession.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1921,14 +1921,14 @@ protected override void OnStatementBegin(int index)
19211921

19221922
private static ReadOnlySpan<byte> BeginCertificateBytes => "-----BEGIN CERTIFICATE-----"u8;
19231923
private static readonly IMySqlConnectorLogger Log = MySqlConnectorLogManager.CreateLogger(nameof(ServerSession));
1924-
private static readonly PayloadData s_setNamesUtf8NoAttributesPayload = QueryPayload.Create(false, "SET NAMES utf8;");
1925-
private static readonly PayloadData s_setNamesUtf8mb4NoAttributesPayload = QueryPayload.Create(false, "SET NAMES utf8mb4;");
1926-
private static readonly PayloadData s_setNamesUtf8WithAttributesPayload = QueryPayload.Create(true, "SET NAMES utf8;");
1927-
private static readonly PayloadData s_setNamesUtf8mb4WithAttributesPayload = QueryPayload.Create(true, "SET NAMES utf8mb4;");
1928-
private static readonly PayloadData s_sleepNoAttributesPayload = QueryPayload.Create(false, "SELECT SLEEP(0) INTO @\uE001MySqlConnector\uE001Sleep;");
1929-
private static readonly PayloadData s_sleepWithAttributesPayload = QueryPayload.Create(true, "SELECT SLEEP(0) INTO @\uE001MySqlConnector\uE001Sleep;");
1930-
private static readonly PayloadData s_selectConnectionIdVersionNoAttributesPayload = QueryPayload.Create(false, "SELECT CONNECTION_ID(), VERSION();");
1931-
private static readonly PayloadData s_selectConnectionIdVersionWithAttributesPayload = QueryPayload.Create(true, "SELECT CONNECTION_ID(), VERSION();");
1924+
private static readonly PayloadData s_setNamesUtf8NoAttributesPayload = QueryPayload.Create(false, "SET NAMES utf8;"u8);
1925+
private static readonly PayloadData s_setNamesUtf8mb4NoAttributesPayload = QueryPayload.Create(false, "SET NAMES utf8mb4;"u8);
1926+
private static readonly PayloadData s_setNamesUtf8WithAttributesPayload = QueryPayload.Create(true, "SET NAMES utf8;"u8);
1927+
private static readonly PayloadData s_setNamesUtf8mb4WithAttributesPayload = QueryPayload.Create(true, "SET NAMES utf8mb4;"u8);
1928+
private static readonly PayloadData s_sleepNoAttributesPayload = QueryPayload.Create(false, "SELECT SLEEP(0) INTO @\uE001MySqlConnector\uE001Sleep;"u8);
1929+
private static readonly PayloadData s_sleepWithAttributesPayload = QueryPayload.Create(true, "SELECT SLEEP(0) INTO @\uE001MySqlConnector\uE001Sleep;"u8);
1930+
private static readonly PayloadData s_selectConnectionIdVersionNoAttributesPayload = QueryPayload.Create(false, "SELECT CONNECTION_ID(), VERSION();"u8);
1931+
private static readonly PayloadData s_selectConnectionIdVersionWithAttributesPayload = QueryPayload.Create(true, "SELECT CONNECTION_ID(), VERSION();"u8);
19321932
private static int s_lastId;
19331933

19341934
private readonly object m_lock;

src/MySqlConnector/Protocol/Payloads/QueryPayload.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,13 @@ namespace MySqlConnector.Protocol.Payloads;
44

55
internal static class QueryPayload
66
{
7-
public static PayloadData Create(bool supportsQueryAttributes, string query)
7+
public static PayloadData Create(bool supportsQueryAttributes, ReadOnlySpan<byte> query)
88
{
9-
var length = Encoding.UTF8.GetByteCount(query);
10-
var payload = new byte[length + 1 + (supportsQueryAttributes ? 2 : 0)];
9+
var payload = new byte[query.Length + 1 + (supportsQueryAttributes ? 2 : 0)];
1110
payload[0] = (byte) CommandKind.Query;
1211
if (supportsQueryAttributes)
1312
payload[2] = 1;
14-
Encoding.UTF8.GetBytes(query, 0, query.Length, payload, supportsQueryAttributes ? 3 : 1);
13+
query.CopyTo(payload.AsSpan(supportsQueryAttributes ? 3 : 1));
1514
return new PayloadData(payload);
1615
}
1716
}

0 commit comments

Comments
 (0)