-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbinlog.go
179 lines (160 loc) · 3.95 KB
/
binlog.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
package flag
import "strings"
type BinlogDumpFlag uint16
const (
BinlogDumpFlagNonBlock BinlogDumpFlag = 1 << iota
BinlogDumpFlagThroughPosition
BinlogDumpFlagThroughGTID
)
func (b BinlogDumpFlag) String() string {
switch b {
case BinlogDumpFlagNonBlock:
return "BINLOG_DUMP_NON_BLOCK"
case BinlogDumpFlagThroughPosition:
return "BINLOG_THROUGH_POSITION"
case BinlogDumpFlagThroughGTID:
return "BINLOG_THROUGH_GTID"
default:
return "unknown binlog flag"
}
}
type EventFlag uint16
//https://dev.mysql.com/doc/internals/en/binlog-event-flag.html
const (
EventFlagBinlogInUse EventFlag = 1 << iota
EventFlagForcedRotate
EventFlagThreadSpecific
EventFlagSuppressUse
EventFlagUpdateTableMapVersion
EventFlagArtificial
EventFlagRelayLog
EventFlagIgnorable
EventFlagNoFilter
EventFlagMtsIsolate
)
func (be EventFlag) String() string {
var bes []EventFlag
be.confirm(EventFlagBinlogInUse, &bes)
be.confirm(EventFlagForcedRotate, &bes)
be.confirm(EventFlagThreadSpecific, &bes)
be.confirm(EventFlagSuppressUse, &bes)
be.confirm(EventFlagUpdateTableMapVersion, &bes)
be.confirm(EventFlagArtificial, &bes)
be.confirm(EventFlagRelayLog, &bes)
be.confirm(EventFlagIgnorable, &bes)
be.confirm(EventFlagNoFilter, &bes)
be.confirm(EventFlagMtsIsolate, &bes)
sb := new(strings.Builder)
sb.WriteByte('[')
for i, status := range bes {
if i != 0 {
sb.WriteByte(' ')
}
sb.WriteString(status.string())
}
sb.WriteByte(']')
return sb.String()
}
func (be EventFlag) string() string {
switch be {
case EventFlagBinlogInUse:
return "LOG_EVENT_BINLOG_IN_USE"
case EventFlagForcedRotate:
return "LOG_EVENT_FORCED_ROTATE"
case EventFlagThreadSpecific:
return "LOG_EVENT_THREAD_SPECIFIC"
case EventFlagSuppressUse:
return "LOG_EVENT_SUPPRESS_USE"
case EventFlagUpdateTableMapVersion:
return "LOG_EVENT_UPDATE_TABLE_MAP_VERSION"
case EventFlagArtificial:
return "LOG_EVENT_ARTIFICIAL"
case EventFlagRelayLog:
return "LOG_EVENT_RELAY_LOG"
case EventFlagIgnorable:
return "LOG_EVENT_IGNORABLE"
case EventFlagNoFilter:
return "LOG_EVENT_NO_FILTER"
case EventFlagMtsIsolate:
return "LOG_EVENT_MTS_ISOLATE"
default:
return "unknown binlog event flag"
}
}
func (s EventFlag) confirm(o EventFlag, t *[]EventFlag) {
if s&o != 0 {
*t = append(*t, o)
}
}
type QueryEventStatusVars uint8
const (
QueryStatusVarsFlags2 QueryEventStatusVars = iota
QueryStatusVarsSQLMode
QueryStatusVarsCatalog
QueryStatusVarsAutoIncrement
QueryStatusVarsCharset
QueryStatusVarsTimeZone
QueryStatusVarsCatalogNz
QueryStatusVarsLcTimeNames
QueryStatusVarsCharsetDatabase
QueryStatusVarsTableMapForUpdate
QueryStatusVarsMasterDataWritten
QueryStatusVarsInvoker
QueryStatusVarsUpdatedDBNames
QueryStatusVarsMicroseconds
QueryStatusVarsCommitTS
QueryStatusVarsCommitTS2
QueryStatusVarsExplicitDefaultsForTimestamp
QueryStatusVarsDDLLoggedWithXid
QueryStatusVarsDefaultCollationForUtf8mb4
QueryStatusVarsSQLRequirePrimaryKey
QueryStatusVarsDefaultTableEncryption
)
type Ternary uint8
const (
TernaryUnset Ternary = iota
TernaryOff
TernaryOn
)
type Option uint32
const (
OptionAutoIsNull Option = 1 << 14
OptionNotAutocommit Option = 1 << 19
OptionNoForeignKeyChecks Option = 1 << 26
OptionRelaxedUniqueChecks Option = 1 << 27
)
type SQLMode uint64
const (
SQLModeRealAsFloat = 1 << iota
SQLModePipesAsConcat
SQLModeANSIQuotes
SQLModeIgnoreSpace
SQLModeNotUsed
SQLModeOnlyFullGroupBy
SQLModeNoUnsignedSubtraction
SQLModeNoDirInCreate
SQLModePostgreSQL
SQLModeOracle
SQLModeMSSQL
SQLModeDB2
SQLModeMaxDB
SQLModeNoKeyOptions
SQLModeNoTableOptions
SQLModeNoFieldOptions
SQLModeMySQL323
SQLModeMySQL40
SQLModeANSI
SQLModeNoAutoValueOnZero
SQLModeNoBackslashEscapes
SQLModeStrictTransTables
SQLModeStrictAllTables
SQLModeNoZeroInDate
SQLModeNoZeroDate
SQLModeInvalidDates
SQLModeErrorForDivisionByZero
SQLModeTraditional
SQLModeNoAutoCreateUser
SQLModeHighNotPrecedence
SQLModeNoEngineSubstitution
SQLModePadCharToFullLength
)