|
1 | 1 | using System;
|
2 | 2 | using System.Data;
|
3 | 3 | using System.Diagnostics;
|
| 4 | +using System.Linq; |
4 | 5 | using System.Text.RegularExpressions;
|
| 6 | +using Dapper; |
5 | 7 | using MySql.Data.MySqlClient;
|
6 | 8 | using Xunit;
|
7 | 9 |
|
@@ -342,6 +344,46 @@ public void UseDatabase()
|
342 | 344 | Assert.Equal(AppConfig.SecondaryDatabase, QueryCurrentDatabase(connection));
|
343 | 345 | }
|
344 | 346 |
|
| 347 | + [SkippableFact(ConfigSettings.SecondaryDatabase)] |
| 348 | + public void ChangeDatabaseInTransaction() |
| 349 | + { |
| 350 | + var csb = AppConfig.CreateConnectionStringBuilder(); |
| 351 | + using var connection = new MySqlConnection(csb.ConnectionString); |
| 352 | + connection.Open(); |
| 353 | + connection.Execute($@"drop table if exists changedb1; |
| 354 | +create table changedb1(value int not null); |
| 355 | +drop table if exists `{AppConfig.SecondaryDatabase}`.changedb2; |
| 356 | +create table `{AppConfig.SecondaryDatabase}`.changedb2(value int not null);"); |
| 357 | + |
| 358 | + using var transaction = connection.BeginTransaction(); |
| 359 | + |
| 360 | +#if !BASELINE |
| 361 | + Assert.Equal(transaction, connection.CurrentTransaction); |
| 362 | +#endif |
| 363 | + using (var command = new MySqlCommand("SELECT 'abc';", connection, transaction)) |
| 364 | + Assert.Equal("abc", command.ExecuteScalar()); |
| 365 | + using (var command = new MySqlCommand("INSERT INTO changedb1(value) values(1),(2);", connection, transaction)) |
| 366 | + command.ExecuteNonQuery(); |
| 367 | + |
| 368 | + connection.ChangeDatabase(AppConfig.SecondaryDatabase); |
| 369 | + |
| 370 | +#if !BASELINE |
| 371 | + Assert.Equal(transaction, connection.CurrentTransaction); |
| 372 | +#endif |
| 373 | + |
| 374 | + using (var command = new MySqlCommand("SELECT 'abc';", connection, transaction)) |
| 375 | + Assert.Equal("abc", command.ExecuteScalar()); |
| 376 | + using (var command = new MySqlCommand("INSERT INTO changedb2(value) values(3),(4);", connection, transaction)) |
| 377 | + command.ExecuteNonQuery(); |
| 378 | + |
| 379 | + transaction.Commit(); |
| 380 | + |
| 381 | + using var connection2 = new MySqlConnection(csb.ConnectionString); |
| 382 | + connection2.Open(); |
| 383 | + var values = connection2.Query<int>($@"SELECT value FROM changedb1 UNION SELECT value FROM `{AppConfig.SecondaryDatabase}`.changedb2", connection2).OrderBy(x => x).ToList(); |
| 384 | + Assert.Equal(new[] { 1, 2, 3, 4 }, values); |
| 385 | + } |
| 386 | + |
345 | 387 | private static string QueryCurrentDatabase(MySqlConnection connection)
|
346 | 388 | {
|
347 | 389 | using var cmd = connection.CreateCommand();
|
|
0 commit comments