From babef3bfdf7527a35c7ca86596fca35a2b171400 Mon Sep 17 00:00:00 2001 From: Bradley Grainger Date: Sun, 14 Jan 2024 06:08:48 -0800 Subject: [PATCH] Fix whitespace and indentation formatting errors. --- src/MySqlConnector/Core/MetricsReporter.cs | 2 +- .../Protocol/Serialization/ByteArrayReader.cs | 2 +- tests/Conformance.Tests/DbFactoryFixture.cs | 14 +- tests/IntegrationTests/BulkLoaderSync.cs | 42 ++-- tests/IntegrationTests/CommandTests.cs | 2 +- tests/IntegrationTests/DataTypes.cs | 26 +-- tests/IntegrationTests/InsertTests.cs | 2 +- tests/IntegrationTests/LoadDataInfileAsync.cs | 3 +- tests/IntegrationTests/LoadDataInfileSync.cs | 6 +- .../IntegrationTests/MySqlDataSourceTests.cs | 18 +- .../IntegrationTests/PreparedCommandTests.cs | 2 +- tests/IntegrationTests/SchemaProviderTests.cs | 18 +- .../IntegrationTests/StoredProcedureTests.cs | 22 +- tests/IntegrationTests/TestUtilities.cs | 18 +- tests/IntegrationTests/Transaction.cs | 2 +- .../MySqlConnector.Tests/CancellationTests.cs | 2 +- .../FakeMySqlServerConnection.cs | 194 +++++++++--------- .../Metrics/ConnectionsUsageTests.cs | 22 +- .../Metrics/IConnectionCreator.cs | 10 +- .../MySqlConnector.Tests/MySqlDecimalTests.cs | 2 +- tests/MySqlConnector.Tests/TypeMapperTests.cs | 24 +-- 21 files changed, 218 insertions(+), 215 deletions(-) diff --git a/src/MySqlConnector/Core/MetricsReporter.cs b/src/MySqlConnector/Core/MetricsReporter.cs index 800b43a2e..f5556b614 100644 --- a/src/MySqlConnector/Core/MetricsReporter.cs +++ b/src/MySqlConnector/Core/MetricsReporter.cs @@ -50,7 +50,7 @@ static IEnumerable> GetMinimumConnections() => private static readonly UpDownCounter s_pendingRequestsCounter = ActivitySourceHelper.Meter.CreateUpDownCounter("db.client.connections.pending_requests", unit: "{request}", description: "The number of pending requests for an open connection, cumulative for the entire pool."); private static readonly Counter s_connectionTimeouts = ActivitySourceHelper.Meter.CreateCounter("db.client.connections.timeouts", - unit: "{timeout}", description: "The number of connection timeouts that have occurred trying to obtain a connection from the pool."); + unit: "{timeout}", description: "The number of connection timeouts that have occurred trying to obtain a connection from the pool."); private static readonly Histogram s_createTimeHistory = ActivitySourceHelper.Meter.CreateHistogram("db.client.connections.create_time", unit: "s", description: "The time it took to create a new connection."); private static readonly Histogram s_useTimeHistory = ActivitySourceHelper.Meter.CreateHistogram("db.client.connections.use_time", diff --git a/src/MySqlConnector/Protocol/Serialization/ByteArrayReader.cs b/src/MySqlConnector/Protocol/Serialization/ByteArrayReader.cs index 5d15150ec..080cb8555 100644 --- a/src/MySqlConnector/Protocol/Serialization/ByteArrayReader.cs +++ b/src/MySqlConnector/Protocol/Serialization/ByteArrayReader.cs @@ -23,7 +23,7 @@ public int Offset if (value < 0 || value > m_maxOffset) throw new ArgumentOutOfRangeException(nameof(value), $"value must be between 0 and {m_maxOffset:d}"); #endif - m_offset = value; + m_offset = value; } } diff --git a/tests/Conformance.Tests/DbFactoryFixture.cs b/tests/Conformance.Tests/DbFactoryFixture.cs index d52ea741b..4ecaaa8af 100644 --- a/tests/Conformance.Tests/DbFactoryFixture.cs +++ b/tests/Conformance.Tests/DbFactoryFixture.cs @@ -6,12 +6,12 @@ namespace Conformance.Tests; public class DbFactoryFixture : IDbFactoryFixture +{ + public DbFactoryFixture() { - public DbFactoryFixture() - { - ConnectionString = Environment.GetEnvironmentVariable("CONNECTION_STRING") ?? "Server=localhost;User Id=mysqltest;Password=test;SSL Mode=None;AllowPublicKeyRetrieval=true"; - } - - public string ConnectionString { get; } - public DbProviderFactory Factory => MySqlConnectorFactory.Instance; + ConnectionString = Environment.GetEnvironmentVariable("CONNECTION_STRING") ?? "Server=localhost;User Id=mysqltest;Password=test;SSL Mode=None;AllowPublicKeyRetrieval=true"; } + + public string ConnectionString { get; } + public DbProviderFactory Factory => MySqlConnectorFactory.Instance; +} diff --git a/tests/IntegrationTests/BulkLoaderSync.cs b/tests/IntegrationTests/BulkLoaderSync.cs index 7c40a36bc..73b81bce7 100644 --- a/tests/IntegrationTests/BulkLoaderSync.cs +++ b/tests/IntegrationTests/BulkLoaderSync.cs @@ -1243,26 +1243,26 @@ public void BulkCopyDataTableConflictOption(MySqlBulkLoaderConflictOption confli switch (conflictOption) { - case MySqlBulkLoaderConflictOption.None: - var exception = Assert.Throws(() => bulkCopy.WriteToServer(dataTable)); - Assert.Equal(MySqlErrorCode.BulkCopyFailed, exception.ErrorCode); - break; - - case MySqlBulkLoaderConflictOption.Replace: - var replaceResult = bulkCopy.WriteToServer(dataTable); - Assert.Equal(expectedRowsInserted, replaceResult.RowsInserted); - Assert.Empty(replaceResult.Warnings); - break; - - case MySqlBulkLoaderConflictOption.Ignore: - var ignoreResult = bulkCopy.WriteToServer(dataTable); - Assert.Equal(expectedRowsInserted, ignoreResult.RowsInserted); - if (!connection.ServerVersion.StartsWith("5.6.", StringComparison.Ordinal)) - { - var error = Assert.Single(ignoreResult.Warnings); - Assert.Equal(MySqlErrorCode.DuplicateKeyEntry, error.ErrorCode); - } - break; + case MySqlBulkLoaderConflictOption.None: + var exception = Assert.Throws(() => bulkCopy.WriteToServer(dataTable)); + Assert.Equal(MySqlErrorCode.BulkCopyFailed, exception.ErrorCode); + break; + + case MySqlBulkLoaderConflictOption.Replace: + var replaceResult = bulkCopy.WriteToServer(dataTable); + Assert.Equal(expectedRowsInserted, replaceResult.RowsInserted); + Assert.Empty(replaceResult.Warnings); + break; + + case MySqlBulkLoaderConflictOption.Ignore: + var ignoreResult = bulkCopy.WriteToServer(dataTable); + Assert.Equal(expectedRowsInserted, ignoreResult.RowsInserted); + if (!connection.ServerVersion.StartsWith("5.6.", StringComparison.Ordinal)) + { + var error = Assert.Single(ignoreResult.Warnings); + Assert.Equal(MySqlErrorCode.DuplicateKeyEntry, error.ErrorCode); + } + break; } using (var cmd = new MySqlCommand("select b from bulk_load_data_table;", connection)) @@ -1270,7 +1270,7 @@ public void BulkCopyDataTableConflictOption(MySqlBulkLoaderConflictOption confli } #endif - internal static string GetConnectionString() => AppConfig.ConnectionString; + internal static string GetConnectionString() => AppConfig.ConnectionString; internal static string GetLocalConnectionString() { diff --git a/tests/IntegrationTests/CommandTests.cs b/tests/IntegrationTests/CommandTests.cs index bec7385d9..c3f0556d3 100644 --- a/tests/IntegrationTests/CommandTests.cs +++ b/tests/IntegrationTests/CommandTests.cs @@ -226,7 +226,7 @@ public void ExecuteNonQueryForSelectReturnsNegativeOne() Assert.Equal(-1, command.ExecuteNonQuery()); } -[Fact] + [Fact] public async Task ExecuteNonQueryReturnValue() { using var connection = new MySqlConnection(m_database.Connection.ConnectionString); diff --git a/tests/IntegrationTests/DataTypes.cs b/tests/IntegrationTests/DataTypes.cs index 9569d1b7e..a25cdb9a6 100644 --- a/tests/IntegrationTests/DataTypes.cs +++ b/tests/IntegrationTests/DataTypes.cs @@ -155,19 +155,19 @@ private async Task DoGetValue(string column, Func ge Assert.True(await reader.ReadAsync().ConfigureAwait(false)); switch (flags[i]) { - case 0: // normal - Assert.Equal(values[i], getInt(reader, 0)); - Assert.Equal(values[i], getIntByName(reader, column)); - break; - - case 1: // null - Assert.True(await reader.IsDBNullAsync(0).ConfigureAwait(false)); - break; - - case 2: // overflow - Assert.Throws(() => getInt(reader, 0)); - Assert.Throws(() => getIntByName(reader, column)); - break; + case 0: // normal + Assert.Equal(values[i], getInt(reader, 0)); + Assert.Equal(values[i], getIntByName(reader, column)); + break; + + case 1: // null + Assert.True(await reader.IsDBNullAsync(0).ConfigureAwait(false)); + break; + + case 2: // overflow + Assert.Throws(() => getInt(reader, 0)); + Assert.Throws(() => getIntByName(reader, column)); + break; } } Assert.False(await reader.ReadAsync().ConfigureAwait(false)); diff --git a/tests/IntegrationTests/InsertTests.cs b/tests/IntegrationTests/InsertTests.cs index 573d63962..8669836db 100644 --- a/tests/IntegrationTests/InsertTests.cs +++ b/tests/IntegrationTests/InsertTests.cs @@ -778,7 +778,7 @@ value mediumblob null cmd.Prepare(); cmd.ExecuteNonQuery(); } - Assert.Equal(new byte[] { 1, 0, 2, 39, 3, 92, 4, 34, 5, 6 }, connection.Query(@"select value from insert_mysql_blob;").Single()); + Assert.Equal(new byte[] { 1, 0, 2, 39, 3, 92, 4, 34, 5, 6 }, connection.Query(@"select value from insert_mysql_blob;").Single()); } public static IEnumerable GetBlobs() diff --git a/tests/IntegrationTests/LoadDataInfileAsync.cs b/tests/IntegrationTests/LoadDataInfileAsync.cs index 52bd089f0..5d88d032b 100644 --- a/tests/IntegrationTests/LoadDataInfileAsync.cs +++ b/tests/IntegrationTests/LoadDataInfileAsync.cs @@ -30,7 +30,8 @@ public async Task CommandLoadCsvFile() { var insertInlineCommand = string.Format(m_loadDataInfileCommand, "", AppConfig.MySqlBulkLoaderCsvFile.Replace("\\", "\\\\")); using var command = new MySqlCommand(insertInlineCommand, m_database.Connection); - if (m_database.Connection.State != ConnectionState.Open) await m_database.Connection.OpenAsync(); + if (m_database.Connection.State != ConnectionState.Open) + await m_database.Connection.OpenAsync(); var rowCount = await command.ExecuteNonQueryAsync(); m_database.Connection.Close(); Assert.Equal(20, rowCount); diff --git a/tests/IntegrationTests/LoadDataInfileSync.cs b/tests/IntegrationTests/LoadDataInfileSync.cs index 2eee12ffe..e59e7b1d1 100644 --- a/tests/IntegrationTests/LoadDataInfileSync.cs +++ b/tests/IntegrationTests/LoadDataInfileSync.cs @@ -30,7 +30,8 @@ public void CommandLoadCsvFile() { var insertInlineCommand = string.Format(m_loadDataInfileCommand, "", AppConfig.MySqlBulkLoaderCsvFile.Replace("\\", "\\\\")); using var command = new MySqlCommand(insertInlineCommand, m_database.Connection); - if (m_database.Connection.State != ConnectionState.Open) m_database.Connection.Open(); + if (m_database.Connection.State != ConnectionState.Open) + m_database.Connection.Open(); var rowCount = command.ExecuteNonQuery(); m_database.Connection.Close(); Assert.Equal(20, rowCount); @@ -41,7 +42,8 @@ public void CommandLoadLocalCsvFile() { var insertInlineCommand = string.Format(m_loadDataInfileCommand, " LOCAL", AppConfig.MySqlBulkLoaderLocalCsvFile.Replace("\\", "\\\\")); using var command = new MySqlCommand(insertInlineCommand, m_database.Connection); - if (m_database.Connection.State != ConnectionState.Open) m_database.Connection.Open(); + if (m_database.Connection.State != ConnectionState.Open) + m_database.Connection.Open(); var rowCount = command.ExecuteNonQuery(); m_database.Connection.Close(); Assert.Equal(20, rowCount); diff --git a/tests/IntegrationTests/MySqlDataSourceTests.cs b/tests/IntegrationTests/MySqlDataSourceTests.cs index af881033b..dcd8d7f2e 100644 --- a/tests/IntegrationTests/MySqlDataSourceTests.cs +++ b/tests/IntegrationTests/MySqlDataSourceTests.cs @@ -25,17 +25,17 @@ public void OpenConnection() Assert.Equal(ConnectionState.Open, connection.State); } - [Fact] - public void DoubleDispose() - { - using var dbSource = new MySqlDataSource(AppConfig.ConnectionString); + [Fact] + public void DoubleDispose() + { + using var dbSource = new MySqlDataSource(AppConfig.ConnectionString); using (var connection = dbSource.OpenConnection()) { - Assert.Equal(ConnectionState.Open, connection.State); - } + Assert.Equal(ConnectionState.Open, connection.State); + } dbSource.Dispose(); - } - + } + [Fact] public async Task OpenConnectionAsync() { @@ -224,7 +224,7 @@ public void PasswordProviderFailureIsRetried() var exception = Assert.Throws(dataSource.OpenConnection); // Failed to obtain password via ProvidePasswordCallback Assert.IsType(exception.InnerException); // The periodic password provider failed Assert.IsType(exception.InnerException.InnerException); // First-time failure - + // succeeds after failure retry barrier.SignalAndWait(); Thread.Sleep(10); diff --git a/tests/IntegrationTests/PreparedCommandTests.cs b/tests/IntegrationTests/PreparedCommandTests.cs index 0cdbee401..d087072ad 100644 --- a/tests/IntegrationTests/PreparedCommandTests.cs +++ b/tests/IntegrationTests/PreparedCommandTests.cs @@ -488,7 +488,7 @@ private enum TwoByteEnum : short { Value = 111, } - + private static MySqlConnection CreateConnection() { diff --git a/tests/IntegrationTests/SchemaProviderTests.cs b/tests/IntegrationTests/SchemaProviderTests.cs index f17687585..023dcd363 100644 --- a/tests/IntegrationTests/SchemaProviderTests.cs +++ b/tests/IntegrationTests/SchemaProviderTests.cs @@ -183,12 +183,12 @@ public void GetCollationsSchema() [Fact] public void ForeignKeys() - { - var schemaName = m_database.Connection.Database; - var table = m_database.Connection.GetSchema("Foreign Keys", new[] { null, schemaName, "fk_test" }); - var row = table.Rows.Cast().Single(); - foreach (var (column, value) in new[] - { + { + var schemaName = m_database.Connection.Database; + var table = m_database.Connection.GetSchema("Foreign Keys", new[] { null, schemaName, "fk_test" }); + var row = table.Rows.Cast().Single(); + foreach (var (column, value) in new[] + { ("CONSTRAINT_CATALOG", "def"), ("CONSTRAINT_SCHEMA", schemaName), ("CONSTRAINT_NAME", "fk_test_fk"), @@ -200,10 +200,10 @@ public void ForeignKeys() ("REFERENCED_TABLE_SCHEMA", schemaName), ("REFERENCED_TABLE_NAME", "pk_test"), }) - { + { Assert.Equal(value, row[column] is DBNull ? null : (string?) row[column]); - } - } + } + } [Fact] public void Indexes() diff --git a/tests/IntegrationTests/StoredProcedureTests.cs b/tests/IntegrationTests/StoredProcedureTests.cs index e74e1defb..68b7f4b1f 100644 --- a/tests/IntegrationTests/StoredProcedureTests.cs +++ b/tests/IntegrationTests/StoredProcedureTests.cs @@ -443,18 +443,18 @@ private async Task ExecuteCommandAsync(DbCommand cmd, string executorTyp { switch (executorType) { - case "NonQuery": - await cmd.ExecuteNonQueryAsync(); - return null; - case "Scalar": - return await cmd.ExecuteScalarAsync(); - default: - using (var reader = await cmd.ExecuteReaderAsync()) - { - if (await reader.ReadAsync()) - return reader.GetValue(0); + case "NonQuery": + await cmd.ExecuteNonQueryAsync(); return null; - } + case "Scalar": + return await cmd.ExecuteScalarAsync(); + default: + using (var reader = await cmd.ExecuteReaderAsync()) + { + if (await reader.ReadAsync()) + return reader.GetValue(0); + return null; + } } } diff --git a/tests/IntegrationTests/TestUtilities.cs b/tests/IntegrationTests/TestUtilities.cs index 91bf89c9b..737c9a9a4 100644 --- a/tests/IntegrationTests/TestUtilities.cs +++ b/tests/IntegrationTests/TestUtilities.cs @@ -24,17 +24,17 @@ public static void AssertIsOne(object value) { switch (value) { - case int intValue: - Assert.Equal(1, intValue); - break; + case int intValue: + Assert.Equal(1, intValue); + break; - case long longValue: - Assert.Equal(1L, longValue); - break; + case long longValue: + Assert.Equal(1L, longValue); + break; - default: - Assert.Equal(1L, value); - break; + default: + Assert.Equal(1L, value); + break; } } diff --git a/tests/IntegrationTests/Transaction.cs b/tests/IntegrationTests/Transaction.cs index f1f2abdcf..7a22b96f5 100644 --- a/tests/IntegrationTests/Transaction.cs +++ b/tests/IntegrationTests/Transaction.cs @@ -399,7 +399,7 @@ public void TransactionHoldsLocks() """; command.ExecuteNonQuery(); } - + using var barrier = new Barrier(2); using var barrier2 = new Barrier(2); diff --git a/tests/MySqlConnector.Tests/CancellationTests.cs b/tests/MySqlConnector.Tests/CancellationTests.cs index aa5bc8af2..3e2c16ed7 100644 --- a/tests/MySqlConnector.Tests/CancellationTests.cs +++ b/tests/MySqlConnector.Tests/CancellationTests.cs @@ -400,7 +400,7 @@ public async Task ExecuteAsync(int step, int method) public static IEnumerable GetSyncMethodSteps() { - for (var step = 1; step <= 12; step++) + for (var step = 1; step <= 12; step++) { for (var method = 0; method < s_executeMethods.Length; method++) { diff --git a/tests/MySqlConnector.Tests/FakeMySqlServerConnection.cs b/tests/MySqlConnector.Tests/FakeMySqlServerConnection.cs index cf7441dd0..cb57cfb3d 100644 --- a/tests/MySqlConnector.Tests/FakeMySqlServerConnection.cs +++ b/tests/MySqlConnector.Tests/FakeMySqlServerConnection.cs @@ -54,59 +54,59 @@ public async Task RunAsync(TcpClient client, CancellationToken token) switch ((CommandKind) bytes[0]) { - case CommandKind.Quit: - await SendAsync(stream, 1, WriteOk); - keepRunning = false; - break; - - case CommandKind.Ping: - await SendAsync(stream, 1, WriteOk); - break; + case CommandKind.Quit: + await SendAsync(stream, 1, WriteOk); + keepRunning = false; + break; - case CommandKind.ResetConnection: - if (m_server.ResetDelay is { } resetDelay) - await Task.Delay(resetDelay); - await SendAsync(stream, 1, WriteOk); - break; + case CommandKind.Ping: + await SendAsync(stream, 1, WriteOk); + break; - case CommandKind.Query: - var query = Encoding.UTF8.GetString(bytes, 1, bytes.Length - 1); - Match match; - if (query == "SET NAMES utf8mb4;") - { + case CommandKind.ResetConnection: + if (m_server.ResetDelay is { } resetDelay) + await Task.Delay(resetDelay); await SendAsync(stream, 1, WriteOk); - } - else if ((match = Regex.Match(query, @"^SELECT ([0-9])(;|$)")).Success) - { - var number = match.Groups[1].Value; - var data = new byte[number.Length + 1]; - data[0] = (byte) number.Length; - Encoding.UTF8.GetBytes(number, 0, number.Length, data, 1); + break; - await SendAsync(stream, 1, x => x.Write((byte) 1)); // one column - await SendAsync(stream, 2, x => x.Write(new byte[] { 3, 0x64, 0x65, 0x66, 0, 0, 0, 1, 0x5F, 0, 0x0c, 0x3f, 0, 1, 0, 0, 0, 3, 0x81, 0, 0, 0, 0 })); // column definition - await SendAsync(stream, 3, x => x.Write(new byte[] { 0xFE, 0, 0, 2, 0 })); // EOF - await SendAsync(stream, 4, x => x.Write(data)); - await SendAsync(stream, 5, x => x.Write(new byte[] { 0xFE, 0, 0, 2, 0 })); // EOF - } - else if ((match = Regex.Match(query, @"^SELECT ([0-9]+), ([0-9]+), ([0-9-]+), ([0-9]+)(;|$)")).Success) - { - // command is "SELECT {value}, {delay}, {pauseStep}, {flags}" - var number = match.Groups[1].Value; - var value = int.Parse(number); - var delay = int.Parse(match.Groups[2].Value); - var pauseStep = int.Parse(match.Groups[3].Value); - var flags = int.Parse(match.Groups[4].Value); - var ignoreCancellation = (flags & 1) == 1; - var bufferOutput = (flags & 2) == 2; + case CommandKind.Query: + var query = Encoding.UTF8.GetString(bytes, 1, bytes.Length - 1); + Match match; + if (query == "SET NAMES utf8mb4;") + { + await SendAsync(stream, 1, WriteOk); + } + else if ((match = Regex.Match(query, @"^SELECT ([0-9])(;|$)")).Success) + { + var number = match.Groups[1].Value; + var data = new byte[number.Length + 1]; + data[0] = (byte) number.Length; + Encoding.UTF8.GetBytes(number, 0, number.Length, data, 1); - var data = new byte[number.Length + 1]; - data[0] = (byte) number.Length; - Encoding.UTF8.GetBytes(number, 0, number.Length, data, 1); - - var negativeOne = new byte[] { 2, 0x2D, 0x31 }; - var packets = new[] + await SendAsync(stream, 1, x => x.Write((byte) 1)); // one column + await SendAsync(stream, 2, x => x.Write(new byte[] { 3, 0x64, 0x65, 0x66, 0, 0, 0, 1, 0x5F, 0, 0x0c, 0x3f, 0, 1, 0, 0, 0, 3, 0x81, 0, 0, 0, 0 })); // column definition + await SendAsync(stream, 3, x => x.Write(new byte[] { 0xFE, 0, 0, 2, 0 })); // EOF + await SendAsync(stream, 4, x => x.Write(data)); + await SendAsync(stream, 5, x => x.Write(new byte[] { 0xFE, 0, 0, 2, 0 })); // EOF + } + else if ((match = Regex.Match(query, @"^SELECT ([0-9]+), ([0-9]+), ([0-9-]+), ([0-9]+)(;|$)")).Success) { + // command is "SELECT {value}, {delay}, {pauseStep}, {flags}" + var number = match.Groups[1].Value; + var value = int.Parse(number); + var delay = int.Parse(match.Groups[2].Value); + var pauseStep = int.Parse(match.Groups[3].Value); + var flags = int.Parse(match.Groups[4].Value); + var ignoreCancellation = (flags & 1) == 1; + var bufferOutput = (flags & 2) == 2; + + var data = new byte[number.Length + 1]; + data[0] = (byte) number.Length; + Encoding.UTF8.GetBytes(number, 0, number.Length, data, 1); + + var negativeOne = new byte[] { 2, 0x2D, 0x31 }; + var packets = new[] + { new byte[] { 0xFF, 0x25, 0x05, 0x23, 0x37, 0x30, 0x31, 0x30, 0x30 }.Concat(Encoding.ASCII.GetBytes("Query execution was interrupted")).ToArray(), // error new byte[] { 1 }, // one column new byte[] { 3, 0x64, 0x65, 0x66, 0, 0, 0, 1, 0x5F, 0, 0x0c, 0x3f, 0, 1, 0, 0, 0, 3, 0x81, 0, 0, 0, 0 }, // column definition @@ -122,51 +122,51 @@ public async Task RunAsync(TcpClient client, CancellationToken token) new byte[] { 0xFE, 0, 0, 2, 0 }, // EOF }; - if (bufferOutput) - { - // if 'bufferOutput' is set, perform the delay immediately then send all the output afterwards, as though it were buffered on the server - var queryInterrupted = false; - if (ignoreCancellation) - await Task.Delay(delay, token); - else - queryInterrupted = CancelQueryEvent.Wait(delay, token); + if (bufferOutput) + { + // if 'bufferOutput' is set, perform the delay immediately then send all the output afterwards, as though it were buffered on the server + var queryInterrupted = false; + if (ignoreCancellation) + await Task.Delay(delay, token); + else + queryInterrupted = CancelQueryEvent.Wait(delay, token); - for (var step = 1; step < pauseStep; step++) - await SendAsync(stream, step, x => x.Write(packets[step])); - await SendAsync(stream, pauseStep, x => x.Write(packets[queryInterrupted ? 0 : pauseStep])); - } - else - { - var queryInterrupted = false; - for (var step = 1; step < packets.Length && !queryInterrupted; step++) + for (var step = 1; step < pauseStep; step++) + await SendAsync(stream, step, x => x.Write(packets[step])); + await SendAsync(stream, pauseStep, x => x.Write(packets[queryInterrupted ? 0 : pauseStep])); + } + else { - if (pauseStep == step || pauseStep == -1) + var queryInterrupted = false; + for (var step = 1; step < packets.Length && !queryInterrupted; step++) { - if (ignoreCancellation) - await Task.Delay(delay, token); - else - queryInterrupted = CancelQueryEvent.Wait(delay, token); - } + if (pauseStep == step || pauseStep == -1) + { + if (ignoreCancellation) + await Task.Delay(delay, token); + else + queryInterrupted = CancelQueryEvent.Wait(delay, token); + } - await SendAsync(stream, step, x => x.Write(packets[queryInterrupted ? 0 : step])); + await SendAsync(stream, step, x => x.Write(packets[queryInterrupted ? 0 : step])); + } } } - } - else if ((match = Regex.Match(query, @"^KILL QUERY ([0-9]+)(;|$)", RegexOptions.IgnoreCase)).Success) - { - var connectionId = int.Parse(match.Groups[1].Value); - m_server.CancelQuery(connectionId); - await SendAsync(stream, 1, WriteOk); - } - else if (query == "SELECT SLEEP(0) INTO @\uE001MySqlConnector\uE001Sleep;") - { - var wasSet = CancelQueryEvent.Wait(0, token); - await SendAsync(stream, 1, WriteOk); - } - else if (query == "select infinity") - { - var packets = new[] + else if ((match = Regex.Match(query, @"^KILL QUERY ([0-9]+)(;|$)", RegexOptions.IgnoreCase)).Success) + { + var connectionId = int.Parse(match.Groups[1].Value); + m_server.CancelQuery(connectionId); + await SendAsync(stream, 1, WriteOk); + } + else if (query == "SELECT SLEEP(0) INTO @\uE001MySqlConnector\uE001Sleep;") { + var wasSet = CancelQueryEvent.Wait(0, token); + await SendAsync(stream, 1, WriteOk); + } + else if (query == "select infinity") + { + var packets = new[] + { new byte[] { 2 }, // two columns new byte[] { 3, 0x64, 0x65, 0x66, 0, 0, 0, 1, 0x46, 0, 0x0c, 0x3f, 0, 1, 0, 0, 0, 4, 0x01, 0, 0x1F, 0, 0 }, // column definition (float) new byte[] { 3, 0x64, 0x65, 0x66, 0, 0, 0, 1, 0x44, 0, 0x0c, 0x3f, 0, 1, 0, 0, 0, 5, 0x01, 0, 0x1F, 0, 0 }, // column definition (double) @@ -176,19 +176,19 @@ public async Task RunAsync(TcpClient client, CancellationToken token) new byte[] { 4, 0x2d, 0x69, 0x6e, 0x66, 4, 0x2d, 0x69, 0x6e, 0x66 }, // -inf new byte[] { 0xFE, 0, 0, 2, 0 }, // EOF }; - for (var packetIndex = 0; packetIndex < packets.Length; packetIndex++) - await SendAsync(stream, packetIndex + 1, x => x.Write(packets[packetIndex])); - } - else - { - await SendAsync(stream, 1, x => WriteError(x, "Unhandled query: " + query)); - } - break; + for (var packetIndex = 0; packetIndex < packets.Length; packetIndex++) + await SendAsync(stream, packetIndex + 1, x => x.Write(packets[packetIndex])); + } + else + { + await SendAsync(stream, 1, x => WriteError(x, "Unhandled query: " + query)); + } + break; - default: - Console.WriteLine("** UNHANDLED ** {0}", (CommandKind) bytes[0]); - await SendAsync(stream, 1, x => WriteError(x)); - break; + default: + Console.WriteLine("** UNHANDLED ** {0}", (CommandKind) bytes[0]); + await SendAsync(stream, 1, x => WriteError(x)); + break; } } } diff --git a/tests/MySqlConnector.Tests/Metrics/ConnectionsUsageTests.cs b/tests/MySqlConnector.Tests/Metrics/ConnectionsUsageTests.cs index f42020906..a0e6bd8f2 100644 --- a/tests/MySqlConnector.Tests/Metrics/ConnectionsUsageTests.cs +++ b/tests/MySqlConnector.Tests/Metrics/ConnectionsUsageTests.cs @@ -4,15 +4,15 @@ namespace MySqlConnector.Tests.Metrics; public class ConnectionsUsageTests : MetricsTestsBase { - [Theory(Skip = MetricsSkip)] + [Theory(Skip = MetricsSkip)] [InlineData("DataSource|true||")] [InlineData("DataSource|true||app-name")] - [InlineData("DataSource|true|pool-name|")] - [InlineData("DataSource|true|pool-name|app-name")] + [InlineData("DataSource|true|pool-name|")] + [InlineData("DataSource|true|pool-name|app-name")] [InlineData("Plain|true|")] [InlineData("Plain|true|app-name")] public void ConnectionsWithPoolsHaveMetrics(string connectionCreatorSpec) - { + { using var connectionCreator = CreateConnectionCreator(connectionCreatorSpec, CreateConnectionStringBuilder()); PoolName = connectionCreator.PoolName; @@ -63,13 +63,13 @@ public void ConnectionsWithPoolsHaveMetrics(string connectionCreatorSpec) } [Theory(Skip = MetricsSkip)] - [InlineData("DataSource|false||")] - [InlineData("DataSource|false||app-name")] - [InlineData("DataSource|false|pool-name|")] - [InlineData("DataSource|false|pool-name|app-name")] - [InlineData("Plain|false|")] - [InlineData("Plain|false|app-name")] - public void ConnectionsWithoutPoolsHaveNoMetrics(string connectionCreatorSpec) + [InlineData("DataSource|false||")] + [InlineData("DataSource|false||app-name")] + [InlineData("DataSource|false|pool-name|")] + [InlineData("DataSource|false|pool-name|app-name")] + [InlineData("Plain|false|")] + [InlineData("Plain|false|app-name")] + public void ConnectionsWithoutPoolsHaveNoMetrics(string connectionCreatorSpec) { using var connectionCreator = CreateConnectionCreator(connectionCreatorSpec, CreateConnectionStringBuilder()); PoolName = connectionCreator.PoolName; diff --git a/tests/MySqlConnector.Tests/Metrics/IConnectionCreator.cs b/tests/MySqlConnector.Tests/Metrics/IConnectionCreator.cs index 56d941650..43874f90c 100644 --- a/tests/MySqlConnector.Tests/Metrics/IConnectionCreator.cs +++ b/tests/MySqlConnector.Tests/Metrics/IConnectionCreator.cs @@ -12,15 +12,15 @@ internal sealed class DataSourceConnectionCreator : IConnectionCreator { public DataSourceConnectionCreator(bool usePooling, string? poolName, string? applicationName, MySqlConnectionStringBuilder connectionStringBuilder) { - connectionStringBuilder.Pooling = usePooling; + connectionStringBuilder.Pooling = usePooling; connectionStringBuilder.ApplicationName = applicationName; m_dataSource = new MySqlDataSourceBuilder(connectionStringBuilder.ConnectionString) .UseName(poolName) .Build(); - PoolName = poolName ?? applicationName ?? connectionStringBuilder!.GetConnectionString(includePassword: false); - } + PoolName = poolName ?? applicationName ?? connectionStringBuilder!.GetConnectionString(includePassword: false); + } - public MySqlConnection OpenConnection() => m_dataSource!.OpenConnection(); + public MySqlConnection OpenConnection() => m_dataSource!.OpenConnection(); public string PoolName { get; } public void Dispose() => m_dataSource!.Dispose(); @@ -35,7 +35,7 @@ public PlainConnectionCreator(bool usePooling, string? applicationName, MySqlCon connectionStringBuilder.ApplicationName = applicationName; m_connectionString = connectionStringBuilder.ConnectionString; PoolName = applicationName ?? connectionStringBuilder.GetConnectionString(includePassword: false); - } + } public MySqlConnection OpenConnection() { diff --git a/tests/MySqlConnector.Tests/MySqlDecimalTests.cs b/tests/MySqlConnector.Tests/MySqlDecimalTests.cs index 2df97f8a7..2d4bdc093 100644 --- a/tests/MySqlConnector.Tests/MySqlDecimalTests.cs +++ b/tests/MySqlConnector.Tests/MySqlDecimalTests.cs @@ -24,7 +24,7 @@ public void TestToDouble() [Fact] public void TestToDecimal() { - decimal doubleVal = 1.2M ; + decimal doubleVal = 1.2M; string stringVal = "1.2"; MySqlDecimal mySqlDecimal = new MySqlDecimal(stringVal); Assert.Equal(doubleVal, mySqlDecimal.Value); diff --git a/tests/MySqlConnector.Tests/TypeMapperTests.cs b/tests/MySqlConnector.Tests/TypeMapperTests.cs index 02713033e..6aa1ad6b9 100644 --- a/tests/MySqlConnector.Tests/TypeMapperTests.cs +++ b/tests/MySqlConnector.Tests/TypeMapperTests.cs @@ -31,18 +31,18 @@ public void DbTypeMappingTest(Type clrType, DbType dbType) [Theory] [InlineData(1, DbType.Boolean, true)] - [InlineData(true, DbType.SByte, (sbyte)1)] - [InlineData((sbyte)1, DbType.Byte, (byte)1)] - [InlineData((byte)1, DbType.Int16, (short)1)] - [InlineData((short)1, DbType.UInt16, (ushort)1)] - [InlineData((ushort)1, DbType.Int32, 1)] - [InlineData(1, DbType.UInt32, (uint)1)] - [InlineData((uint)1, DbType.Int64, (long)1)] - [InlineData((long)1, DbType.UInt64, (ulong)1)] - [InlineData((ulong)1, DbType.String, "1")] - [InlineData((ulong)1, DbType.StringFixedLength, "1")] - [InlineData((ulong)1, DbType.AnsiString, "1")] - [InlineData((ulong)1, DbType.AnsiStringFixedLength, "1")] + [InlineData(true, DbType.SByte, (sbyte) 1)] + [InlineData((sbyte) 1, DbType.Byte, (byte) 1)] + [InlineData((byte) 1, DbType.Int16, (short) 1)] + [InlineData((short) 1, DbType.UInt16, (ushort) 1)] + [InlineData((ushort) 1, DbType.Int32, 1)] + [InlineData(1, DbType.UInt32, (uint) 1)] + [InlineData((uint) 1, DbType.Int64, (long) 1)] + [InlineData((long) 1, DbType.UInt64, (ulong) 1)] + [InlineData((ulong) 1, DbType.String, "1")] + [InlineData((ulong) 1, DbType.StringFixedLength, "1")] + [InlineData((ulong) 1, DbType.AnsiString, "1")] + [InlineData((ulong) 1, DbType.AnsiStringFixedLength, "1")] public void ConversionTest(object original, DbType dbType, object expected) { Assert.Equal(expected, TypeMapper.Instance.GetDbTypeMapping(dbType).DoConversion(original));