@@ -2,6 +2,7 @@ package mysql
2
2
3
3
import (
4
4
"bytes"
5
+ "cmp"
5
6
"compress/zlib"
6
7
"crypto/rand"
7
8
"crypto/rsa"
@@ -13,11 +14,11 @@ import (
13
14
"io"
14
15
mrand "math/rand"
15
16
"runtime"
17
+ "strconv"
16
18
"strings"
17
19
"time"
18
20
19
21
"filippo.io/edwards25519"
20
- "github.com/Masterminds/semver/v3"
21
22
"github.com/go-mysql-org/go-mysql/utils"
22
23
"github.com/pingcap/errors"
23
24
)
@@ -452,21 +453,43 @@ func ErrorEqual(err1, err2 error) bool {
452
453
return e1 .Error () == e2 .Error ()
453
454
}
454
455
456
+ func compareSubVersion (typ , a , b , aFull , bFull string ) (int , error ) {
457
+ var aNum , bNum int
458
+ var err error
459
+
460
+ if aNum , err = strconv .Atoi (a ); err != nil {
461
+ return 0 , fmt .Errorf ("cannot parse %s version %s of %s" , typ , a , aFull )
462
+ }
463
+ if bNum , err = strconv .Atoi (b ); err != nil {
464
+ return 0 , fmt .Errorf ("cannot parse %s version %s of %s" , typ , b , bFull )
465
+ }
466
+
467
+ return cmp .Compare (aNum , bNum ), nil
468
+ }
469
+
455
470
func CompareServerVersions (a , b string ) (int , error ) {
456
- var (
457
- aVer , bVer * semver.Version
458
- err error
459
- )
471
+ aNumbers , _ , _ := strings .Cut (a , "-" )
472
+ bNumbers , _ , _ := strings .Cut (b , "-" )
473
+
474
+ aMajor , aRest , _ := strings .Cut (aNumbers , "." )
475
+ bMajor , bRest , _ := strings .Cut (bNumbers , "." )
476
+
477
+ if majorCompare , err := compareSubVersion ("major" , aMajor , bMajor , a , b ); err != nil || majorCompare != 0 {
478
+ return majorCompare , err
479
+ }
480
+
481
+ aMinor , aPatch , _ := strings .Cut (aRest , "." )
482
+ bMinor , bPatch , _ := strings .Cut (bRest , "." )
460
483
461
- if aVer , err = semver . NewVersion ( a ); err != nil {
462
- return 0 , fmt . Errorf ( "cannot parse %q as semver: %w" , a , err )
484
+ if minorCompare , err := compareSubVersion ( "minor" , aMinor , bMinor , a , b ); err != nil || minorCompare != 0 {
485
+ return minorCompare , err
463
486
}
464
487
465
- if bVer , err = semver . NewVersion ( b ); err != nil {
466
- return 0 , fmt . Errorf ( "cannot parse %q as semver: %w" , b , err )
488
+ if patchCompare , err := compareSubVersion ( "patch" , aPatch , bPatch , a , b ); err != nil || patchCompare != 0 {
489
+ return patchCompare , err
467
490
}
468
491
469
- return aVer . Compare ( bVer ) , nil
492
+ return 0 , nil
470
493
}
471
494
472
495
var encodeRef = map [byte ]byte {
0 commit comments