Skip to content

Commit f5056b8

Browse files
committed
wildcard behavior, extend tests
1 parent 07fee42 commit f5056b8

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

mysql/util.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,10 @@ func ErrorEqual(err1, err2 error) bool {
454454
}
455455

456456
func compareSubVersion(typ, a, b, aFull, bFull string) (int, error) {
457+
if a == "" || b == "" {
458+
return 0, nil
459+
}
460+
457461
var aNum, bNum int
458462
var err error
459463

@@ -467,6 +471,9 @@ func compareSubVersion(typ, a, b, aFull, bFull string) (int, error) {
467471
return cmp.Compare(aNum, bNum), nil
468472
}
469473

474+
// Compares version triplet strings, ignoring anything past `-` in version.
475+
// A version string like 8.0 will compare as if third triplet were a wildcard.
476+
// A version string like 8 will compare as if second & third triplets were wildcards.
470477
func CompareServerVersions(a, b string) (int, error) {
471478
aNumbers, _, _ := strings.Cut(a, "-")
472479
bNumbers, _, _ := strings.Cut(b, "-")

mysql/util_test.go

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,29 @@ func TestCompareServerVersions(t *testing.T) {
1515
}{
1616
{A: "1.2.3", B: "1.2.3", Expect: 0},
1717
{A: "5.6-999", B: "8.0", Expect: -1},
18+
{A: "5.6.3-999", B: "5.6", Expect: 0},
19+
{A: "5.6.3-999", B: "5.5-tag", Expect: 1},
1820
{A: "8.0.32-0ubuntu0.20.04.2", B: "8.0.28", Expect: 1},
21+
{A: "a.b.c", B: "8.0", Expect: 2},
1922
}
2023

2124
for _, test := range tests {
2225
got, err := CompareServerVersions(test.A, test.B)
23-
require.NoError(t, err)
24-
require.Equal(t, test.Expect, got)
26+
if test.Expect == 2 {
27+
require.Error(t, err)
28+
} else {
29+
require.NoError(t, err)
30+
require.Equal(t, test.Expect, got)
31+
}
32+
33+
// test logic is commutative
34+
got, err = CompareServerVersions(test.B, test.A)
35+
if test.Expect == 2 {
36+
require.Error(t, err)
37+
} else {
38+
require.NoError(t, err)
39+
require.Equal(t, -test.Expect, got)
40+
}
2541
}
2642
}
2743

0 commit comments

Comments
 (0)