@@ -13,8 +13,6 @@ import (
13
13
"fmt"
14
14
"strconv"
15
15
"strings"
16
-
17
- version "github.com/mcuadros/go-version"
18
16
)
19
17
20
18
type MySQLVersion struct {
@@ -24,11 +22,15 @@ type MySQLVersion struct {
24
22
Release int `json:"release"`
25
23
}
26
24
27
- func NewMySQLVersion (version string , versionComment string ) * MySQLVersion {
25
+ /*
26
+ Create new MySQLVersion object from string
27
+ */
28
+ func NewMySQLVersion (version string , versionComment string ) (* MySQLVersion , int ) {
29
+ var tokens []string
28
30
mv := new (MySQLVersion )
29
- if strings .Contains (version , "MariaDB" ) {
31
+ if strings .Contains (version , "MariaDB" ) || strings . Contains ( versionComment , "MariaDB" ) {
30
32
mv .Flavor = "MariaDB"
31
- } else if strings .Contains (version , "PostgreSQL" ) {
33
+ } else if strings .Contains (version , "PostgreSQL" ) || strings . Contains ( versionComment , "PostgreSQL" ) {
32
34
mv .Flavor = "PostgreSQL"
33
35
} else if strings .Contains (versionComment , "Percona" ) {
34
36
mv .Flavor = "Percona"
@@ -38,38 +40,73 @@ func NewMySQLVersion(version string, versionComment string) *MySQLVersion {
38
40
if mv .Flavor == "PostgreSQL" {
39
41
infos := strings .Split (version , " " )
40
42
version = infos [1 ]
41
- tokens : = strings .Split (version , "." )
43
+ tokens = strings .Split (version , "." )
42
44
mv .Major , _ = strconv .Atoi (tokens [0 ])
43
- mv .Minor , _ = strconv .Atoi (tokens [1 ])
45
+ if len (tokens ) >= 2 {
46
+ mv .Minor , _ = strconv .Atoi (tokens [1 ])
47
+ }
48
+ if len (tokens ) >= 3 {
49
+ mv .Release , _ = strconv .Atoi (tokens [2 ])
50
+ }
44
51
} else {
45
52
infos := strings .Split (version , "-" )
46
53
version = infos [0 ]
47
- tokens := strings .Split (version , "." )
54
+ tokens = strings .Split (version , "." )
55
+ mv .Major , _ = strconv .Atoi (tokens [0 ])
48
56
if len (tokens ) >= 2 {
49
- mv .Major , _ = strconv .Atoi (tokens [0 ])
50
57
mv .Minor , _ = strconv .Atoi (tokens [1 ])
58
+ }
59
+ if len (tokens ) >= 3 {
51
60
mv .Release , _ = strconv .Atoi (tokens [2 ])
52
61
}
53
62
}
54
- return mv
63
+ return mv , len ( tokens )
55
64
}
56
65
57
- func (mv * MySQLVersion ) Between (Min MySQLVersion , Max MySQLVersion ) bool {
58
- ver := "1" + fmt .Sprintf ("%03d" , mv .Major ) + fmt .Sprintf ("%03d" , mv .Minor ) + fmt .Sprintf ("%03d" , mv .Release )
59
- ver_min := "1" + fmt .Sprintf ("%03d" , Min .Major ) + fmt .Sprintf ("%03d" , Min .Minor ) + fmt .Sprintf ("%03d" , Min .Release )
60
- ver_max := "1" + fmt .Sprintf ("%03d" , Max .Major ) + fmt .Sprintf ("%03d" , Max .Minor ) + fmt .Sprintf ("%03d" , Max .Release )
61
- sup := version .Compare (ver , ver_min , ">" )
62
- inf := version .Compare (ver_max , ver , ">" )
63
- if sup && inf {
64
- return true
66
+ func (mv * MySQLVersion ) ToInt (tokens int ) int {
67
+ //Major
68
+ if tokens == 1 {
69
+ return mv .Major * 1000000
65
70
}
66
- return false
71
+ //Minor
72
+ if tokens == 2 {
73
+ return (mv .Major * 1000000 ) + (mv .Minor * 1000 )
74
+ }
75
+
76
+ return (mv .Major * 1000000 ) + (mv .Minor * 1000 ) + mv .Release
77
+ }
78
+
79
+ func (mv * MySQLVersion ) ToString () string {
80
+ return fmt .Sprintf ("%d.%d.%d" , mv .Major , mv .Minor , mv .Release )
81
+ }
82
+
83
+ func (mv * MySQLVersion ) Greater (vstring string ) bool {
84
+ v , tokens := NewMySQLVersion (vstring , mv .Flavor )
85
+ return mv .ToInt (tokens ) > v .ToInt (tokens )
86
+ }
87
+
88
+ func (mv * MySQLVersion ) GreaterEqual (vstring string ) bool {
89
+ v , tokens := NewMySQLVersion (vstring , mv .Flavor )
90
+ return mv .ToInt (tokens ) >= v .ToInt (tokens )
91
+ }
92
+
93
+ func (mv * MySQLVersion ) Lower (vstring string ) bool {
94
+ v , tokens := NewMySQLVersion (vstring , mv .Flavor )
95
+ return mv .ToInt (tokens ) < v .ToInt (tokens )
96
+ }
97
+
98
+ func (mv * MySQLVersion ) LowerEqual (vstring string ) bool {
99
+ v , tokens := NewMySQLVersion (vstring , mv .Flavor )
100
+ return mv .ToInt (tokens ) <= v .ToInt (tokens )
101
+ }
102
+
103
+ func (mv * MySQLVersion ) Equal (vstring string ) bool {
104
+ v , tokens := NewMySQLVersion (vstring , mv .Flavor )
105
+ return mv .ToInt (tokens ) == v .ToInt (tokens )
67
106
}
68
107
69
- func (mv * MySQLVersion ) Greater (Min MySQLVersion ) bool {
70
- ver := "1" + fmt .Sprintf ("%03d" , mv .Major ) + fmt .Sprintf ("%03d" , mv .Minor ) + fmt .Sprintf ("%03d" , mv .Release )
71
- ver_min := "1" + fmt .Sprintf ("%03d" , Min .Major ) + fmt .Sprintf ("%03d" , Min .Minor ) + fmt .Sprintf ("%03d" , Min .Release )
72
- return version .Compare (ver , ver_min , ">" )
108
+ func (mv * MySQLVersion ) Between (minvstring string , maxvstring string ) bool {
109
+ return mv .GreaterEqual (minvstring ) && mv .LowerEqual (maxvstring )
73
110
}
74
111
75
112
func (mv * MySQLVersion ) IsMySQL () bool {
0 commit comments