@@ -2,6 +2,7 @@ package mysql
22
33import (
44 "bytes"
5+ "cmp"
56 "compress/zlib"
67 "crypto/rand"
78 "crypto/rsa"
@@ -13,11 +14,11 @@ import (
1314 "io"
1415 mrand "math/rand"
1516 "runtime"
17+ "strconv"
1618 "strings"
1719 "time"
1820
1921 "filippo.io/edwards25519"
20- "github.com/Masterminds/semver/v3"
2122 "github.com/go-mysql-org/go-mysql/utils"
2223 "github.com/pingcap/errors"
2324)
@@ -452,21 +453,43 @@ func ErrorEqual(err1, err2 error) bool {
452453 return e1 .Error () == e2 .Error ()
453454}
454455
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+
455470func 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 , "." )
460483
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
463486 }
464487
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
467490 }
468491
469- return aVer . Compare ( bVer ) , nil
492+ return 0 , nil
470493}
471494
472495var encodeRef = map [byte ]byte {
0 commit comments