Skip to content

Commit 8a2f873

Browse files
committed
simplify collation tests
1 parent f433f1f commit 8a2f873

File tree

1 file changed

+14
-50
lines changed

1 file changed

+14
-50
lines changed

‎driver_test.go‎

Lines changed: 14 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1610,68 +1610,32 @@ func TestCollation(t *testing.T){
16101610
t.Skipf("MySQL server not running on %s", netAddr)
16111611
}
16121612

1613-
defaultCollation:="utf8mb4_general_ci"
1613+
// MariaDB may override collation specified by handshake with `character_set_collations` variable.
1614+
// https://mariadb.com/kb/en/setting-character-sets-and-collations/#changing-default-collation
1615+
// https://mariadb.com/kb/en/server-system-variables/#character_set_collations
1616+
// utf8mb4_general_ci, utf8mb3_general_ci will be overridden by default MariaDB.
1617+
// Collations other than charasets default are not overridden. So utf8mb4_unicode_ci is safe.
16141618
testCollations:= []string{
1615-
"", // do not set
1616-
defaultCollation, // driver default
16171619
"latin1_general_ci",
16181620
"binary",
16191621
"utf8mb4_unicode_ci",
16201622
"cp1257_bin",
16211623
}
16221624

16231625
for_, collation:=rangetestCollations{
1624-
varexpected, tdsnstring
1625-
ifcollation!=""{
1626-
tdsn=dsn+"&collation="+collation
1627-
expected=collation
1628-
} else{
1629-
tdsn=dsn
1630-
expected=defaultCollation
1631-
}
1632-
1633-
runTests(t, tdsn, func(dbt*DBTest){
1634-
// see https://mariadb.com/kb/en/setting-character-sets-and-collations/#changing-default-collation
1635-
// when character_set_collations is set for the charset, it overrides the default collation
1636-
// so we need to check if the default collation is overridden
1637-
forceExpected:=expected
1638-
vardefaultCollationsstring
1639-
err:=dbt.db.QueryRow("SELECT @@character_set_collations").Scan(&defaultCollations)
1640-
iferr==nil{
1641-
// Query succeeded, need to check if we should override expected collation
1642-
collationMap:=make(map[string]string)
1643-
pairs:=strings.Split(defaultCollations, ",")
1644-
for_, pair:=rangepairs{
1645-
parts:=strings.Split(pair, "=")
1646-
iflen(parts) ==2{
1647-
collationMap[parts[0]] =parts[1]
1648-
}
1649-
}
1626+
t.Run(collation, func(t*testing.T){
1627+
tdsn:=dsn+"&collation="+collation
1628+
expected:=collation
16501629

1651-
// Get charset prefix from expected collation
1652-
parts:=strings.Split(expected, "_")
1653-
iflen(parts) >0{
1654-
charset:=parts[0]
1655-
ifnewCollation, ok:=collationMap[charset]; ok{
1656-
forceExpected=newCollation
1657-
}
1630+
runTests(t, tdsn, func(dbt*DBTest){
1631+
vargotstring
1632+
iferr:=dbt.db.QueryRow("SELECT @@collation_connection").Scan(&got); err!=nil{
1633+
dbt.Fatal(err)
16581634
}
1659-
}
1660-
1661-
vargotstring
1662-
iferr:=dbt.db.QueryRow("SELECT @@collation_connection").Scan(&got); err!=nil{
1663-
dbt.Fatal(err)
1664-
}
1665-
1666-
ifgot!=expected{
1667-
ifforceExpected!=expected{
1668-
ifgot!=forceExpected{
1669-
dbt.Fatalf("expected forced connection collation %s but got %s", forceExpected, got)
1670-
}
1671-
} else{
1635+
ifgot!=expected{
16721636
dbt.Fatalf("expected connection collation %s but got %s", expected, got)
16731637
}
1674-
}
1638+
})
16751639
})
16761640
}
16771641
}

0 commit comments

Comments
(0)