Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions ext/extconf.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
require 'mkmf'

dir_config('replication')
dir_config('mysql')

if have_library('stdc++') and have_library('replication')
create_makefile('binlog')
end
25 changes: 9 additions & 16 deletions ext/ruby_binlog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace binlog {

struct Client {
Binary_log *m_binlog;
std::map<boost::uint64_t, VALUE> *m_table_maps;
std::map<uint64_t, VALUE> *m_table_maps;

static void free(Client *p) {
if (p->m_binlog) {
Expand All @@ -35,7 +35,7 @@ struct Client {

static void mark(Client *p) {
if (p->m_table_maps) {
std::map<boost::uint64_t, VALUE>::iterator itor;
std::map<uint64_t, VALUE>::iterator itor;
for (itor = p->m_table_maps->begin(); itor != p->m_table_maps->end(); ++itor) {
rb_gc_mark(itor->second);
}
Expand All @@ -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<boost::uint64_t, VALUE>;
p->m_table_maps = new std::map<uint64_t, VALUE>;

return Qnil;
}
Expand Down Expand Up @@ -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;
}
Expand All @@ -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);
Expand All @@ -175,6 +167,7 @@ struct Client {
}
}
}
*/
#ifndef RUBY_UBF_IO
TRAP_END;
#endif
Expand Down Expand Up @@ -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<boost::uint64_t, VALUE>(static_cast<Table_map_event*>(event)->table_id, retval));
p->m_table_maps->insert(std::pair<uint64_t, VALUE>(static_cast<Table_map_event*>(event)->table_id, retval));
break;

// XXX: Is it right?
Expand Down
4 changes: 2 additions & 2 deletions ext/ruby_binlog.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
#define private public

#include <string>
#include <binlog_api.h>
#include <ruby.h>
#include <binlog_api.h>

#ifndef RUBY_UBF_IO
#include <rubysig.h>
Expand Down Expand Up @@ -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
Expand Down
56 changes: 28 additions & 28 deletions ext/ruby_binlog_get_field_type_str.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
8 changes: 4 additions & 4 deletions ext/ruby_binlog_row_event.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ VALUE RowEvent::get_column_types(VALUE self) {

for (std::vector<uint8_t>::iterator itor = tme->m_event->columns.begin();
itor != tme->m_event->columns.end(); itor++) {
const char *colname = get_field_type_str(static_cast<mysql::system::enum_field_types>(*itor));
const char *colname = get_field_type_str(static_cast<enum_field_types>(*itor));
rb_ary_push(retval, (colname ? rb_str_new2(colname) : Qnil));
}
}
Expand Down Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion ext/ruby_binlog_table_map_event.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ VALUE TableMapEvent::get_column_types(VALUE self) {

for (std::vector<uint8_t>::iterator itor = p->m_event->columns.begin();
itor != p->m_event->columns.end(); itor++) {
const char *colname = get_field_type_str(static_cast<mysql::system::enum_field_types>(*itor));
const char *colname = get_field_type_str(static_cast<enum_field_types>(*itor));
rb_ary_push(retval, (colname ? rb_str_new2(colname) : Qnil));
}

Expand Down