-
Notifications
You must be signed in to change notification settings - Fork 339
/
Copy pathCharacterSetTests.cs
88 lines (77 loc) · 2.42 KB
/
CharacterSetTests.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#if !MYSQL_DATA
using MySqlConnector.Protocol;
using MySqlConnector.Protocol.Serialization;
#endif
namespace IntegrationTests;
public class CharacterSetTests : IClassFixture<DatabaseFixture>
{
public CharacterSetTests(DatabaseFixture database)
{
m_database = database;
}
#if !MYSQL_DATA
[Fact]
public void MaxLength()
{
using var reader = m_database.Connection.ExecuteReader(@"select coll.ID, cs.MAXLEN from information_schema.collations coll inner join information_schema.character_sets cs using(CHARACTER_SET_NAME);");
while (reader.Read())
{
var characterSet = (CharacterSet) reader.GetInt32(0);
var maxLength = reader.GetInt32(1);
Assert.Equal(maxLength, ProtocolUtility.GetBytesPerCharacter(characterSet));
}
}
#endif
[Theory]
[InlineData(false)]
[InlineData(true)]
public void IllegalMixOfCollations(bool reopenConnection)
{
var csb = AppConfig.CreateConnectionStringBuilder();
csb.AllowUserVariables = true;
using var connection = new MySqlConnection(csb.ConnectionString);
connection.Open();
connection.Execute(@"
DROP TABLE IF EXISTS mix_collations;
CREATE TABLE mix_collations (
id int(11) NOT NULL AUTO_INCREMENT,
test_col varchar(10) DEFAULT NULL,
PRIMARY KEY (id),
KEY ix_test (test_col)
);
INSERT INTO mix_collations (test_col)
VALUES ('a'), ('b'), ('c'), ('d'), ('e'), ('f'), ('g'), ('h'), ('i'), ('j');");
if (reopenConnection)
{
connection.Close();
connection.Open();
}
using var reader = connection.ExecuteReader(@"
SET @param = 'B';
SELECT * FROM mix_collations a WHERE a.test_col = @param");
Assert.True(reader.Read());
}
[Theory]
[InlineData(false)]
[InlineData(true)]
public void CollationConnection(bool reopenConnection)
{
var csb = AppConfig.CreateConnectionStringBuilder();
#if MYSQL_DATA
csb.CharacterSet = "utf8mb4";
#endif
using var connection = new MySqlConnection(csb.ConnectionString);
connection.Open();
if (reopenConnection)
{
connection.Close();
connection.Open();
}
var collation = connection.Query<string>(@"select @@collation_connection;").Single();
var expected = connection.ServerVersion.Substring(0, 2) is "8." or "9." ? "utf8mb4_0900_ai_ci" :
connection.ServerVersion.StartsWith("11.4.", StringComparison.Ordinal) || connection.ServerVersion.StartsWith("11.7.", StringComparison.Ordinal) ? "utf8mb4_uca1400_ai_ci" :
"utf8mb4_general_ci";
Assert.Equal(expected, collation);
}
private readonly DatabaseFixture m_database;
}