diff --git a/ext/extconf.rb b/ext/extconf.rb index 97c32cc..1bea65c 100644 --- a/ext/extconf.rb +++ b/ext/extconf.rb @@ -1,5 +1,8 @@ require 'mkmf' +dir_config('replication') +dir_config('mysql') + if have_library('stdc++') and have_library('replication') create_makefile('binlog') end diff --git a/ext/ruby_binlog.cpp b/ext/ruby_binlog.cpp index 6f1cf9f..724b317 100644 --- a/ext/ruby_binlog.cpp +++ b/ext/ruby_binlog.cpp @@ -16,7 +16,7 @@ namespace binlog { struct Client { Binary_log *m_binlog; - std::map *m_table_maps; + std::map *m_table_maps; static void free(Client *p) { if (p->m_binlog) { @@ -35,7 +35,7 @@ struct Client { static void mark(Client *p) { if (p->m_table_maps) { - std::map::iterator itor; + std::map::iterator itor; for (itor = p->m_table_maps->begin(); itor != p->m_table_maps->end(); ++itor) { rb_gc_mark(itor->second); } @@ -56,7 +56,7 @@ struct Client { Data_Get_Struct(self, Client, p); p->m_binlog = new mysql::Binary_log( mysql::system::create_transport(StringValuePtr(uri))); - p->m_table_maps = new std::map; + p->m_table_maps = new std::map; return Qnil; } @@ -126,18 +126,8 @@ struct Client { return Qfalse; } - if (driver->m_socket) { - bool socket_is_open; - -#ifndef RUBY_UBF_IO - TRAP_BEG; -#endif - socket_is_open = driver->m_socket->is_open(); -#ifndef RUBY_UBF_IO - TRAP_END; -#endif - - return socket_is_open ? Qfalse : Qtrue; + if (driver->connected()) { + return Qfalse; } else { return Qtrue; } @@ -160,6 +150,8 @@ struct Client { #ifndef RUBY_UBF_IO TRAP_BEG; #endif + result = p->m_binlog->wait_for_next_event(&event); + /* while (1) { if (driver->m_event_queue->is_not_empty()) { result = p->m_binlog->wait_for_next_event(&event); @@ -175,6 +167,7 @@ struct Client { } } } + */ #ifndef RUBY_UBF_IO TRAP_END; #endif @@ -229,7 +222,7 @@ struct Client { case TABLE_MAP_EVENT: retval = rb_funcall(rb_cBinlogTableMapEvent, rb_intern("new"), 0); TableMapEvent::set_event(retval, event); - p->m_table_maps->insert(std::pair(static_cast(event)->table_id, retval)); + p->m_table_maps->insert(std::pair(static_cast(event)->table_id, retval)); break; // XXX: Is it right? diff --git a/ext/ruby_binlog.h b/ext/ruby_binlog.h index d130cf4..bccba53 100644 --- a/ext/ruby_binlog.h +++ b/ext/ruby_binlog.h @@ -5,8 +5,8 @@ #define private public #include -#include #include +#include #ifndef RUBY_UBF_IO #include @@ -34,7 +34,7 @@ extern VALUE rb_eBinlogError; namespace ruby { namespace binlog { -const char* get_field_type_str(mysql::system::enum_field_types type); +const char* get_field_type_str(enum_field_types type); mysql::system::Binlog_tcp_driver *cast_to_tcp_driver(mysql::system::Binary_log_driver *driver); } // namespace binlog } // namespace ruby diff --git a/ext/ruby_binlog_get_field_type_str.cpp b/ext/ruby_binlog_get_field_type_str.cpp index 5f91dbc..22678be 100644 --- a/ext/ruby_binlog_get_field_type_str.cpp +++ b/ext/ruby_binlog_get_field_type_str.cpp @@ -3,35 +3,35 @@ namespace ruby { namespace binlog { -const char* get_field_type_str(mysql::system::enum_field_types type) { +const char* get_field_type_str(enum_field_types type) { switch(type) { - case mysql::system::MYSQL_TYPE_DECIMAL: return "DECIMAL"; break; - case mysql::system::MYSQL_TYPE_TINY: return "TINY"; break; - case mysql::system::MYSQL_TYPE_SHORT: return "SHORT"; break; - case mysql::system::MYSQL_TYPE_LONG: return "LONG"; break; - case mysql::system::MYSQL_TYPE_FLOAT: return "FLOAT"; break; - case mysql::system::MYSQL_TYPE_DOUBLE: return "DOUBLE"; break; - case mysql::system::MYSQL_TYPE_NULL: return "NULL"; break; - case mysql::system::MYSQL_TYPE_TIMESTAMP: return "TIMESTAMP"; break; - case mysql::system::MYSQL_TYPE_LONGLONG: return "LONGLONG"; break; - case mysql::system::MYSQL_TYPE_INT24: return "INT24"; break; - case mysql::system::MYSQL_TYPE_DATE: return "DATE"; break; - case mysql::system::MYSQL_TYPE_TIME: return "TIME"; break; - case mysql::system::MYSQL_TYPE_DATETIME: return "DATETIME"; break; - case mysql::system::MYSQL_TYPE_YEAR: return "YEAR"; break; - case mysql::system::MYSQL_TYPE_NEWDATE: return "NEWDATE"; break; - case mysql::system::MYSQL_TYPE_VARCHAR: return "VARCHAR"; break; - case mysql::system::MYSQL_TYPE_BIT: return "BIT"; break; - case mysql::system::MYSQL_TYPE_NEWDECIMAL: return "NEWDECIMAL"; break; - case mysql::system::MYSQL_TYPE_ENUM: return "ENUM"; break; - case mysql::system::MYSQL_TYPE_SET: return "SET"; break; - case mysql::system::MYSQL_TYPE_TINY_BLOB: return "TINY_BLOB"; break; - case mysql::system::MYSQL_TYPE_MEDIUM_BLOB: return "MEDIUM_BLOB"; break; - case mysql::system::MYSQL_TYPE_LONG_BLOB: return "LONG_BLOB"; break; - case mysql::system::MYSQL_TYPE_BLOB: return "BLOB"; break; - case mysql::system::MYSQL_TYPE_VAR_STRING: return "VAR_STRING"; break; - case mysql::system::MYSQL_TYPE_STRING: return "STRING"; break; - case mysql::system::MYSQL_TYPE_GEOMETRY: return "GEOMETRY"; break; + case MYSQL_TYPE_DECIMAL: return "DECIMAL"; break; + case MYSQL_TYPE_TINY: return "TINY"; break; + case MYSQL_TYPE_SHORT: return "SHORT"; break; + case MYSQL_TYPE_LONG: return "LONG"; break; + case MYSQL_TYPE_FLOAT: return "FLOAT"; break; + case MYSQL_TYPE_DOUBLE: return "DOUBLE"; break; + case MYSQL_TYPE_NULL: return "NULL"; break; + case MYSQL_TYPE_TIMESTAMP: return "TIMESTAMP"; break; + case MYSQL_TYPE_LONGLONG: return "LONGLONG"; break; + case MYSQL_TYPE_INT24: return "INT24"; break; + case MYSQL_TYPE_DATE: return "DATE"; break; + case MYSQL_TYPE_TIME: return "TIME"; break; + case MYSQL_TYPE_DATETIME: return "DATETIME"; break; + case MYSQL_TYPE_YEAR: return "YEAR"; break; + case MYSQL_TYPE_NEWDATE: return "NEWDATE"; break; + case MYSQL_TYPE_VARCHAR: return "VARCHAR"; break; + case MYSQL_TYPE_BIT: return "BIT"; break; + case MYSQL_TYPE_NEWDECIMAL: return "NEWDECIMAL"; break; + case MYSQL_TYPE_ENUM: return "ENUM"; break; + case MYSQL_TYPE_SET: return "SET"; break; + case MYSQL_TYPE_TINY_BLOB: return "TINY_BLOB"; break; + case MYSQL_TYPE_MEDIUM_BLOB: return "MEDIUM_BLOB"; break; + case MYSQL_TYPE_LONG_BLOB: return "LONG_BLOB"; break; + case MYSQL_TYPE_BLOB: return "BLOB"; break; + case MYSQL_TYPE_VAR_STRING: return "VAR_STRING"; break; + case MYSQL_TYPE_STRING: return "STRING"; break; + case MYSQL_TYPE_GEOMETRY: return "GEOMETRY"; break; } return 0; diff --git a/ext/ruby_binlog_row_event.cpp b/ext/ruby_binlog_row_event.cpp index b7c7856..478d31d 100644 --- a/ext/ruby_binlog_row_event.cpp +++ b/ext/ruby_binlog_row_event.cpp @@ -107,7 +107,7 @@ VALUE RowEvent::get_column_types(VALUE self) { for (std::vector::iterator itor = tme->m_event->columns.begin(); itor != tme->m_event->columns.end(); itor++) { - const char *colname = get_field_type_str(static_cast(*itor)); + const char *colname = get_field_type_str(static_cast(*itor)); rb_ary_push(retval, (colname ? rb_str_new2(colname) : Qnil)); } } @@ -218,13 +218,13 @@ void RowEvent::proc0(mysql::Row_of_fields &fields, VALUE rb_fields) { do { VALUE rval = Qnil; - mysql::system::enum_field_types type = itor->type(); + enum_field_types type = itor->type(); if (itor->is_null()) { rval = Qnil; - } else if (type == mysql::system::MYSQL_TYPE_FLOAT) { + } else if (type == MYSQL_TYPE_FLOAT) { rval = rb_float_new(itor->as_float()); - } else if (type == mysql::system::MYSQL_TYPE_DOUBLE) { + } else if (type == MYSQL_TYPE_DOUBLE) { rval = rb_float_new(itor->as_double()); } else { std::string out; diff --git a/ext/ruby_binlog_table_map_event.cpp b/ext/ruby_binlog_table_map_event.cpp index 2d5254b..3f739dc 100644 --- a/ext/ruby_binlog_table_map_event.cpp +++ b/ext/ruby_binlog_table_map_event.cpp @@ -96,7 +96,7 @@ VALUE TableMapEvent::get_column_types(VALUE self) { for (std::vector::iterator itor = p->m_event->columns.begin(); itor != p->m_event->columns.end(); itor++) { - const char *colname = get_field_type_str(static_cast(*itor)); + const char *colname = get_field_type_str(static_cast(*itor)); rb_ary_push(retval, (colname ? rb_str_new2(colname) : Qnil)); }