@@ -17,6 +17,7 @@ limitations under the License.
17
17
package transactions
18
18
19
19
import (
20
+ "io"
20
21
"strings"
21
22
22
23
"github.com/vitessio/vt/go/data"
@@ -40,53 +41,10 @@ type (
40
41
)
41
42
42
43
func Run (cfg Config ) {
43
- // Figure out if autocommit is enabled
44
- // If we see:
45
- // 1. BEGIN we can assume autocommit is disabled
46
- // 2. COMMIT and no BEGIN we can assume autocommit is enabled
47
- // 3. ROLLBACK and no BEGIN we can assume autocommit is enabled
48
- // 4. SET autocommit = 1/0
49
- count := 1000
50
- defaultAutocommit := true
51
- loader := cfg .Loader .Load (cfg .FileName )
52
- for {
53
- count --
54
- if count == 0 {
55
- // enough already. we'll assume autocommit is enabled because that is the default
56
- break
57
- }
58
- query , kontinue := loader .Next ()
59
- if ! kontinue {
60
- break
61
- }
62
-
63
- switch query .Type {
64
- case data .Skip , data .Error , data .VExplain , data .Unknown :
65
- panic ("unexpected query type" )
66
- case data .Comment , data .CommentWithCommand , data .EmptyLine , data .WaitForAuthoritative , data .SkipIfBelowVersion :
67
- // no-op for keys
68
- case data .QueryT :
69
- stmt , err := sqlparser .NewTestParser ().Parse (query .Query )
70
- if err != nil {
71
- continue
72
- }
73
- switch stmt .(type ) {
74
- case * sqlparser.Begin :
75
- defaultAutocommit = false
76
- break
77
- case * sqlparser.Commit :
78
- break
79
- }
80
- }
81
- }
82
- err := loader .Close ()
83
- if err != nil {
84
- panic (err .Error ())
85
- }
86
-
44
+ defaultAutocommit := GetAutocommitGuess (cfg )
87
45
transactions := map [int ]* Connection {}
88
46
89
- loader = cfg .Loader .Load (cfg .FileName )
47
+ loader : = cfg .Loader .Load (cfg .FileName )
90
48
ch := make (chan []data.Query , 1000 )
91
49
92
50
for {
@@ -100,7 +58,7 @@ func Run(cfg Config) {
100
58
panic ("unexpected query type" )
101
59
case data .Comment , data .CommentWithCommand , data .EmptyLine , data .WaitForAuthoritative , data .SkipIfBelowVersion :
102
60
// no-op for keys
103
- case data .QueryT :
61
+ case data .SQLQuery :
104
62
stmt , err := sqlparser .NewTestParser ().Parse (query .Query )
105
63
if err != nil {
106
64
continue
@@ -144,3 +102,46 @@ func Run(cfg Config) {
144
102
}
145
103
}
146
104
}
105
+
106
+ func GetAutocommitGuess (cfg Config ) bool {
107
+ // Figure out if autocommit is enabled
108
+ // If we see:
109
+ // 1. BEGIN we can assume autocommit is disabled
110
+ // 2. COMMIT and no BEGIN we can assume autocommit is enabled
111
+ // 3. ROLLBACK and no BEGIN we can assume autocommit is enabled
112
+ // 4. SET autocommit = 1/0
113
+ count := 1000
114
+ defaultAutocommit := true
115
+ loader := cfg .Loader .Load (cfg .FileName )
116
+ defer func () {
117
+ err := loader .Close ()
118
+ if err != nil {
119
+ panic (err .Error ())
120
+ }
121
+ }()
122
+ _ = data .ForeachSQLQuery (loader , func (query data.Query ) error {
123
+ count --
124
+ if count == 0 {
125
+ // enough already. we'll assume autocommit is enabled because that is the default
126
+ return io .EOF
127
+ }
128
+
129
+ stmt , err := sqlparser .NewTestParser ().Parse (query .Query )
130
+ if err != nil {
131
+ return nil
132
+ }
133
+
134
+ switch stmt .(type ) {
135
+ case * sqlparser.Begin :
136
+ // BEGIN seen, so autocommit is disabled
137
+ return io .EOF
138
+ case * sqlparser.Commit :
139
+ defaultAutocommit = false
140
+ // no BEGIN seen, so autocommit is disabled
141
+ return io .EOF
142
+ }
143
+
144
+ return nil
145
+ })
146
+ return defaultAutocommit
147
+ }
0 commit comments