ruby-binlog 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README ADDED
@@ -0,0 +1,28 @@
1
+ = ruby-binlog
2
+
3
+ == Description
4
+
5
+ ruby-binlog is Ruby binding for MySQL Binary log API.
6
+
7
+ see http://www.oscon.com/oscon2011/public/schedule/detail/18785
8
+
9
+ == Install
10
+
11
+ gem install ruby-binlog
12
+
13
+ == Example
14
+
15
+ require "binlog"
16
+
17
+ client = Binlog::Client.new("mysql://repl:repl@nyarlathotep")
18
+ client.connect
19
+ client.position = 4
20
+
21
+ while event = client.wait_for_next_event
22
+ case event
23
+ when Binlog::QueryEvent
24
+ puts event.query
25
+ else
26
+ puts "(#{event.event_type})"
27
+ end
28
+ end
data/ext/Makefile ADDED
@@ -0,0 +1,157 @@
1
+
2
+ SHELL = /bin/sh
3
+
4
+ #### Start of system configuration section. ####
5
+
6
+ srcdir = .
7
+ topdir = /usr/lib64/ruby/1.8/x86_64-linux
8
+ hdrdir = $(topdir)
9
+ VPATH = $(srcdir):$(topdir):$(hdrdir)
10
+ prefix = $(DESTDIR)/usr
11
+ exec_prefix = $(DESTDIR)/usr
12
+ vendorarchdir = $(libdir)/ruby/$(ruby_version)/$(sitearch)
13
+ vendordir = $(DESTDIR)/usr/lib/ruby
14
+ sitearchdir = $(libdir)/ruby/site_ruby/$(ruby_version)/$(sitearch)
15
+ localedir = $(datarootdir)/locale
16
+ dvidir = $(docdir)
17
+ datadir = $(DESTDIR)/usr/share
18
+ rubylibdir = $(vendordir)/$(ruby_version)
19
+ bindir = $(DESTDIR)/usr/bin
20
+ sharedstatedir = $(DESTDIR)/var/lib
21
+ libexecdir = $(DESTDIR)/usr/libexec
22
+ vendorlibdir = $(vendordir)/$(ruby_version)
23
+ oldincludedir = $(DESTDIR)/usr/include
24
+ sitedir = $(DESTDIR)/usr/lib/ruby/site_ruby
25
+ mandir = $(DESTDIR)/usr/share/man
26
+ datarootdir = $(prefix)/share
27
+ htmldir = $(docdir)
28
+ pdfdir = $(docdir)
29
+ localstatedir = $(DESTDIR)/var
30
+ includedir = $(DESTDIR)/usr/include
31
+ sitelibdir = $(sitedir)/$(ruby_version)
32
+ sysconfdir = $(DESTDIR)/etc
33
+ psdir = $(docdir)
34
+ libdir = $(DESTDIR)/usr/lib64
35
+ docdir = $(datarootdir)/doc/$(PACKAGE)
36
+ archdir = $(libdir)/ruby/$(ruby_version)/$(sitearch)
37
+ infodir = $(DESTDIR)/usr/share/info
38
+ sbindir = $(DESTDIR)/usr/sbin
39
+
40
+ CC = gcc
41
+ LIBRUBY = $(LIBRUBY_SO)
42
+ LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
43
+ LIBRUBYARG_SHARED = -l$(RUBY_SO_NAME)
44
+ LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static
45
+
46
+ RUBY_EXTCONF_H =
47
+ CFLAGS = -fPIC -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fno-strict-aliasing -fno-stack-protector -fPIC $(cflags)
48
+ INCFLAGS = -I. -I. -I/usr/lib64/ruby/1.8/x86_64-linux -I.
49
+ DEFS =
50
+ CPPFLAGS =
51
+ CXXFLAGS = $(CFLAGS)
52
+ ldflags = -L. -rdynamic -Wl,-export-dynamic
53
+ dldflags =
54
+ archflag =
55
+ DLDFLAGS = $(ldflags) $(dldflags) $(archflag)
56
+ LDSHARED = $(CC) -shared
57
+ AR = ar
58
+ EXEEXT =
59
+
60
+ RUBY_INSTALL_NAME = ruby
61
+ RUBY_SO_NAME = ruby
62
+ arch = x86_64-linux
63
+ sitearch = x86_64-linux
64
+ ruby_version = 1.8
65
+ ruby = /usr/bin/ruby
66
+ RUBY = $(ruby)
67
+ RM = rm -f
68
+ MAKEDIRS = mkdir -p
69
+ INSTALL = /usr/bin/install -c
70
+ INSTALL_PROG = $(INSTALL) -m 0755
71
+ INSTALL_DATA = $(INSTALL) -m 644
72
+ COPY = cp
73
+
74
+ #### End of system configuration section. ####
75
+
76
+ preload =
77
+
78
+ libpath = . $(libdir)
79
+ LIBPATH = -L. -L$(libdir)
80
+ DEFFILE =
81
+
82
+ CLEANFILES = mkmf.log
83
+ DISTCLEANFILES =
84
+
85
+ extout =
86
+ extout_prefix =
87
+ target_prefix =
88
+ LOCAL_LIBS =
89
+ LIBS = $(LIBRUBYARG_SHARED) -lreplication -lstdc++ -lpthread -lrt -ldl -lcrypt -lm -lc
90
+ SRCS = ruby_binlog_xid_event.cpp ruby_binlog_rotate_event.cpp ruby_binlog_format_event.cpp ruby_binlog_user_var_event.cpp ruby_binlog.cpp ruby_binlog_table_map_event.cpp ruby_binlog_row_event.cpp ruby_binlog_event.cpp ruby_binlog_query_event.cpp ruby_binlog_unimplemented_event.cpp ruby_binlog_int_var_event.cpp ruby_binlog_incident_event.cpp
91
+ OBJS = ruby_binlog_xid_event.o ruby_binlog_rotate_event.o ruby_binlog_format_event.o ruby_binlog_user_var_event.o ruby_binlog.o ruby_binlog_table_map_event.o ruby_binlog_row_event.o ruby_binlog_event.o ruby_binlog_query_event.o ruby_binlog_unimplemented_event.o ruby_binlog_int_var_event.o ruby_binlog_incident_event.o
92
+ TARGET = binlog
93
+ DLLIB = $(TARGET).so
94
+ EXTSTATIC =
95
+ STATIC_LIB =
96
+
97
+ BINDIR = $(bindir)
98
+ RUBYCOMMONDIR = $(sitedir)$(target_prefix)
99
+ RUBYLIBDIR = $(sitelibdir)$(target_prefix)
100
+ RUBYARCHDIR = $(sitearchdir)$(target_prefix)
101
+
102
+ TARGET_SO = $(DLLIB)
103
+ CLEANLIBS = $(TARGET).so $(TARGET).il? $(TARGET).tds $(TARGET).map
104
+ CLEANOBJS = *.o *.a *.s[ol] *.pdb *.exp *.bak
105
+
106
+ all: $(DLLIB)
107
+ static: $(STATIC_LIB)
108
+
109
+ clean:
110
+ @-$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES)
111
+
112
+ distclean: clean
113
+ @-$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
114
+ @-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
115
+
116
+ realclean: distclean
117
+ install: install-so install-rb
118
+
119
+ install-so: $(RUBYARCHDIR)
120
+ install-so: $(RUBYARCHDIR)/$(DLLIB)
121
+ $(RUBYARCHDIR)/$(DLLIB): $(DLLIB)
122
+ $(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR)
123
+ install-rb: pre-install-rb install-rb-default
124
+ install-rb-default: pre-install-rb-default
125
+ pre-install-rb: Makefile
126
+ pre-install-rb-default: Makefile
127
+ $(RUBYARCHDIR):
128
+ $(MAKEDIRS) $@
129
+
130
+ site-install: site-install-so site-install-rb
131
+ site-install-so: install-so
132
+ site-install-rb: install-rb
133
+
134
+ .SUFFIXES: .c .m .cc .cxx .cpp .C .o
135
+
136
+ .cc.o:
137
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
138
+
139
+ .cxx.o:
140
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
141
+
142
+ .cpp.o:
143
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
144
+
145
+ .C.o:
146
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
147
+
148
+ .c.o:
149
+ $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) -c $<
150
+
151
+ $(DLLIB): $(OBJS) Makefile
152
+ @-$(RM) $@
153
+ $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS)
154
+
155
+
156
+
157
+ $(OBJS): ruby.h defines.h
data/ext/binlog.so ADDED
Binary file
data/ext/extconf.rb ADDED
@@ -0,0 +1,5 @@
1
+ require 'mkmf'
2
+
3
+ if have_library('stdc++') and have_library('replication')
4
+ create_makefile('binlog')
5
+ end
data/ext/mkmf.log ADDED
@@ -0,0 +1,24 @@
1
+ have_library: checking for main() in -lstdc++... -------------------- yes
2
+
3
+ "gcc -o conftest -I. -I/usr/lib64/ruby/1.8/x86_64-linux -I. -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fno-strict-aliasing -fno-stack-protector -fPIC conftest.c -L. -L/usr/lib64 -L. -rdynamic -Wl,-export-dynamic -lruby -lstdc++ -lpthread -lrt -ldl -lcrypt -lm -lc"
4
+ checked program was:
5
+ /* begin */
6
+ 1: /*top*/
7
+ 2: int main() { return 0; }
8
+ 3: int t() { void ((*volatile p)()); p = (void ((*)()))main; return 0; }
9
+ /* end */
10
+
11
+ --------------------
12
+
13
+ have_library: checking for main() in -lreplication... -------------------- yes
14
+
15
+ "gcc -o conftest -I. -I/usr/lib64/ruby/1.8/x86_64-linux -I. -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fno-strict-aliasing -fno-stack-protector -fPIC conftest.c -L. -L/usr/lib64 -L. -rdynamic -Wl,-export-dynamic -lstdc++ -lruby -lreplication -lstdc++ -lpthread -lrt -ldl -lcrypt -lm -lc"
16
+ checked program was:
17
+ /* begin */
18
+ 1: /*top*/
19
+ 2: int main() { return 0; }
20
+ 3: int t() { void ((*volatile p)()); p = (void ((*)()))main; return 0; }
21
+ /* end */
22
+
23
+ --------------------
24
+
@@ -0,0 +1,276 @@
1
+ #include "ruby_binlog.h"
2
+
3
+ extern VALUE rb_cBinlogQueryEvent;
4
+ extern VALUE rb_cBinlogRotateEvent;
5
+ extern VALUE rb_cBinlogFormatEvent;
6
+ extern VALUE rb_cBinlogUserVarEvent;
7
+ extern VALUE rb_cBinlogTableMapEvent;
8
+ extern VALUE rb_cBinlogRowEvent;
9
+ extern VALUE rb_cBinlogIntVarEvent;
10
+ extern VALUE rb_cBinlogIncidentEvent;
11
+ extern VALUE rb_cBinlogXid;
12
+ extern VALUE rb_cBinlogUnimplementedEvent;
13
+
14
+ namespace ruby {
15
+ namespace binlog {
16
+
17
+ struct Client {
18
+ Binary_log *m_binlog;
19
+
20
+ static void free(Client *p) {
21
+ if (p->m_binlog) {
22
+ delete p->m_binlog;
23
+ p->m_binlog = 0;
24
+ }
25
+
26
+ delete p;
27
+ }
28
+
29
+ static VALUE alloc(VALUE klass) {
30
+ Client *p = new Client();
31
+ return Data_Wrap_Struct(klass, 0, &free, p);
32
+ }
33
+
34
+ static VALUE initialize(VALUE self, VALUE uri) {
35
+ Client *p;
36
+
37
+ Check_Type(uri, T_STRING);
38
+ Data_Get_Struct(self, Client, p);
39
+ p->m_binlog = new mysql::Binary_log(
40
+ mysql::system::create_transport(StringValuePtr(uri)));
41
+
42
+ return Qnil;
43
+ }
44
+
45
+ static VALUE connect(VALUE self) {
46
+ Client *p;
47
+ int result;
48
+
49
+ Data_Get_Struct(self, Client, p);
50
+ result = p->m_binlog->connect();
51
+
52
+ return (result == 0) ? Qtrue : Qfalse;
53
+ }
54
+
55
+ static VALUE wait_for_next_event(VALUE self) {
56
+ Client *p;
57
+ Binary_log_event *event;
58
+ int result;
59
+ VALUE retval = Qnil;
60
+
61
+ Data_Get_Struct(self, Client, p);
62
+
63
+ TRAP_BEG;
64
+ result = p->m_binlog->wait_for_next_event(&event);
65
+ TRAP_END;
66
+
67
+ if (result == ERR_EOF) {
68
+ return Qfalse;
69
+ }
70
+
71
+ switch (event->get_event_type()) {
72
+ case QUERY_EVENT:
73
+ retval = rb_funcall(rb_cBinlogQueryEvent, rb_intern("new"), 0);
74
+ QueryEvent::set_event(retval, event);
75
+ break;
76
+
77
+ case ROTATE_EVENT:
78
+ retval = rb_funcall(rb_cBinlogRotateEvent, rb_intern("new"), 0);
79
+ RotateEvent::set_event(retval, event);
80
+ break;
81
+
82
+ case FORMAT_DESCRIPTION_EVENT: // XXX: Is it right?
83
+ retval = rb_funcall(rb_cBinlogFormatEvent, rb_intern("new"), 0);
84
+ FormatEvent::set_event(retval, event);
85
+ break;
86
+
87
+ case USER_VAR_EVENT:
88
+ retval = rb_funcall(rb_cBinlogUserVarEvent, rb_intern("new"), 0);
89
+ UserVarEvent::set_event(retval, event);
90
+ break;
91
+
92
+ case TABLE_MAP_EVENT:
93
+ retval = rb_funcall(rb_cBinlogTableMapEvent, rb_intern("new"), 0);
94
+ TableMapEvent::set_event(retval, event);
95
+ break;
96
+
97
+ // XXX: Is it right?
98
+ case PRE_GA_WRITE_ROWS_EVENT:
99
+ case PRE_GA_UPDATE_ROWS_EVENT:
100
+ case PRE_GA_DELETE_ROWS_EVENT:
101
+ case WRITE_ROWS_EVENT:
102
+ case UPDATE_ROWS_EVENT:
103
+ case DELETE_ROWS_EVENT:
104
+ retval = rb_funcall(rb_cBinlogRowEvent, rb_intern("new"), 0);
105
+ RowEvent::set_event(retval, event);
106
+ break;
107
+
108
+ case INTVAR_EVENT:
109
+ retval = rb_funcall(rb_cBinlogIntVarEvent, rb_intern("new"), 0);
110
+ IntVarEvent::set_event(retval, event);
111
+ break;
112
+
113
+ case INCIDENT_EVENT:
114
+ retval = rb_funcall(rb_cBinlogIncidentEvent, rb_intern("new"), 0);
115
+ IncidentEvent::set_event(retval, event);
116
+ break;
117
+
118
+ case XID_EVENT:
119
+ retval = rb_funcall(rb_cBinlogXid, rb_intern("new"), 0);
120
+ XidEvent::set_event(retval, event);
121
+ break;
122
+
123
+ default:
124
+ retval = rb_funcall(rb_cBinlogUnimplementedEvent, rb_intern("new"), 0);
125
+ UnimplementedEvent::set_event(retval, event);
126
+ break;
127
+ }
128
+
129
+ return retval;
130
+ }
131
+
132
+ static VALUE set_position(int argc, VALUE *argv, VALUE self) {
133
+ Client *p;
134
+ VALUE filename, position, retval = Qnil;
135
+ int result;
136
+
137
+ Data_Get_Struct(self, Client, p);
138
+ rb_scan_args(argc, argv, "11", &filename, &position);
139
+
140
+ if (NIL_P(position)) {
141
+ unsigned long i_position;
142
+ i_position = NUM2ULONG(filename);
143
+ result = p->m_binlog->set_position(i_position);
144
+ } else {
145
+ unsigned long i_position;
146
+ Check_Type(filename, T_STRING);
147
+ i_position = NUM2ULONG(position);
148
+ std::string s_filename(StringValuePtr(filename));
149
+ result = p->m_binlog->set_position(s_filename, i_position);
150
+ }
151
+
152
+ switch (result) {
153
+ case ERR_OK:
154
+ retval = Qtrue;
155
+ break;
156
+ case ERR_EOF:
157
+ retval = Qfalse;
158
+ default:
159
+ rb_raise(rb_eRuntimeError, "An unspecified error occurred (%d)", result);
160
+ break;
161
+ }
162
+
163
+ return retval;
164
+ }
165
+
166
+ static VALUE set_position2(VALUE self, VALUE position) {
167
+ Client *p;
168
+ VALUE retval = Qnil;
169
+ int result;
170
+
171
+ Data_Get_Struct(self, Client, p);
172
+ result = p->m_binlog->set_position(NUM2ULONG(position));
173
+
174
+ switch (result) {
175
+ case ERR_OK:
176
+ retval = Qtrue;
177
+ break;
178
+ case ERR_EOF:
179
+ retval = Qfalse;
180
+ default:
181
+ rb_raise(rb_eRuntimeError, "An unspecified error occurred (%d)", result);
182
+ break;
183
+ }
184
+
185
+ return retval;
186
+ }
187
+
188
+ static VALUE get_position(int argc, VALUE *argv, VALUE self) {
189
+ Client *p;
190
+ VALUE filename;
191
+ unsigned long position;
192
+
193
+ Data_Get_Struct(self, Client, p);
194
+ rb_scan_args(argc, argv, "01", &filename);
195
+
196
+ if (NIL_P(filename)) {
197
+ position = p->m_binlog->get_position();
198
+ } else {
199
+ Check_Type(filename, T_STRING);
200
+ std::string s_filename(StringValuePtr(filename));
201
+ position = p->m_binlog->get_position(s_filename);
202
+ }
203
+
204
+ return ULONG2NUM(position);
205
+ }
206
+
207
+ static VALUE get_position2(VALUE self) {
208
+ Client *p;
209
+ Data_Get_Struct(self, Client, p);
210
+ return ULONG2NUM(p->m_binlog->get_position());
211
+ }
212
+
213
+ static void init() {
214
+ VALUE rb_cBinlogClient = rb_define_class_under(rb_mBinlog, "Client", rb_cObject);
215
+ rb_define_alloc_func(rb_cBinlogClient, &alloc);
216
+ rb_define_private_method(rb_cBinlogClient, "initialize", __F(&initialize), 1);
217
+ rb_define_method(rb_cBinlogClient, "connect", __F(&connect), 0);
218
+ rb_define_method(rb_cBinlogClient, "wait_for_next_event", __F(&wait_for_next_event), 0);
219
+ rb_define_method(rb_cBinlogClient, "set_position", __F(&set_position), -1);
220
+ rb_define_method(rb_cBinlogClient, "position=", __F(&set_position2), 1);
221
+ rb_define_method(rb_cBinlogClient, "get_position", __F(&get_position), -1);
222
+ rb_define_method(rb_cBinlogClient, "position", __F(&get_position2), 0);
223
+ }
224
+ };
225
+
226
+ } // namespace binlog
227
+ } // namespace ruby
228
+
229
+ VALUE rb_mBinlog;
230
+ VALUE rb_cBinlogEvent;
231
+
232
+ void Init_binlog() {
233
+ rb_mBinlog = rb_define_module("Binlog");
234
+ rb_cBinlogEvent = rb_define_class_under(rb_mBinlog, "Event", rb_cObject);
235
+
236
+ rb_define_const(rb_cBinlogEvent, "UNKNOWN_EVENT", INT2NUM(0));
237
+ rb_define_const(rb_cBinlogEvent, "START_EVENT_V3", INT2NUM(1));
238
+ rb_define_const(rb_cBinlogEvent, "QUERY_EVENT", INT2NUM(2));
239
+ rb_define_const(rb_cBinlogEvent, "STOP_EVENT", INT2NUM(3));
240
+ rb_define_const(rb_cBinlogEvent, "ROTATE_EVENT", INT2NUM(4));
241
+ rb_define_const(rb_cBinlogEvent, "INTVAR_EVENT", INT2NUM(5));
242
+ rb_define_const(rb_cBinlogEvent, "LOAD_EVENT", INT2NUM(6));
243
+ rb_define_const(rb_cBinlogEvent, "SLAVE_EVENT", INT2NUM(7));
244
+ rb_define_const(rb_cBinlogEvent, "CREATE_FILE_EVENT", INT2NUM(8));
245
+ rb_define_const(rb_cBinlogEvent, "APPEND_BLOCK_EVENT", INT2NUM(9));
246
+ rb_define_const(rb_cBinlogEvent, "EXEC_LOAD_EVENT", INT2NUM(10));
247
+ rb_define_const(rb_cBinlogEvent, "DELETE_FILE_EVENT", INT2NUM(11));
248
+ rb_define_const(rb_cBinlogEvent, "NEW_LOAD_EVENT", INT2NUM(12));
249
+ rb_define_const(rb_cBinlogEvent, "RAND_EVENT", INT2NUM(13));
250
+ rb_define_const(rb_cBinlogEvent, "USER_VAR_EVENT", INT2NUM(14));
251
+ rb_define_const(rb_cBinlogEvent, "FORMAT_DESCRIPTION_EVENT", INT2NUM(15));
252
+ rb_define_const(rb_cBinlogEvent, "XID_EVENT", INT2NUM(16));
253
+ rb_define_const(rb_cBinlogEvent, "BEGIN_LOAD_QUERY_EVENT", INT2NUM(17));
254
+ rb_define_const(rb_cBinlogEvent, "EXECUTE_LOAD_QUERY_EVENT", INT2NUM(18));
255
+ rb_define_const(rb_cBinlogEvent, "TABLE_MAP_EVENT", INT2NUM(19));
256
+ rb_define_const(rb_cBinlogEvent, "PRE_GA_WRITE_ROWS_EVENT", INT2NUM(20));
257
+ rb_define_const(rb_cBinlogEvent, "PRE_GA_UPDATE_ROWS_EVENT", INT2NUM(21));
258
+ rb_define_const(rb_cBinlogEvent, "PRE_GA_DELETE_ROWS_EVENT", INT2NUM(22));
259
+ rb_define_const(rb_cBinlogEvent, "WRITE_ROWS_EVENT", INT2NUM(23));
260
+ rb_define_const(rb_cBinlogEvent, "UPDATE_ROWS_EVENT", INT2NUM(24));
261
+ rb_define_const(rb_cBinlogEvent, "DELETE_ROWS_EVENT", INT2NUM(25));
262
+ rb_define_const(rb_cBinlogEvent, "INCIDENT_EVENT", INT2NUM(26));
263
+ rb_define_const(rb_cBinlogEvent, "USER_DEFINED", INT2NUM(27));
264
+
265
+ ruby::binlog::Client::init();
266
+ ruby::binlog::QueryEvent::init();
267
+ ruby::binlog::RotateEvent::init();
268
+ ruby::binlog::FormatEvent::init();
269
+ ruby::binlog::UserVarEvent::init();
270
+ ruby::binlog::TableMapEvent::init();
271
+ ruby::binlog::RowEvent::init();
272
+ ruby::binlog::IntVarEvent::init();
273
+ ruby::binlog::IncidentEvent::init();
274
+ ruby::binlog::XidEvent::init();
275
+ ruby::binlog::UnimplementedEvent::init();
276
+ }