From cf647d55c73b326fe40e713c79d5d3247d0ab836 Mon Sep 17 00:00:00 2001 From: Julien Duponchelle Date: Sat, 27 Sep 2014 16:26:01 +0200 Subject: [PATCH 1/2] It's offer a very small performance gain The original implementation from PyMySQL test instance type before. https://github.com/PyMySQL/PyMySQL/blob/3be54819ee6b09710be892a2b86f4592eaabf412/pymysql/util.py It's not require and by dropping it's a little faster. --- pymysqlreplication/event.py | 2 +- pymysqlreplication/packet.py | 2 +- pymysqlreplication/row_event.py | 5 ++--- pymysqlreplication/util.py | 7 +++++++ 4 files changed, 11 insertions(+), 5 deletions(-) create mode 100644 pymysqlreplication/util.py diff --git a/pymysqlreplication/event.py b/pymysqlreplication/event.py index 4f05bd1a..7db9f3dd 100644 --- a/pymysqlreplication/event.py +++ b/pymysqlreplication/event.py @@ -3,7 +3,7 @@ import struct import datetime -from pymysql.util import byte2int, int2byte +from .util import byte2int, int2byte class BinLogEvent(object): diff --git a/pymysqlreplication/packet.py b/pymysqlreplication/packet.py index df12ddf4..7dc2e1f1 100644 --- a/pymysqlreplication/packet.py +++ b/pymysqlreplication/packet.py @@ -2,9 +2,9 @@ import struct -from pymysql.util import byte2int from pymysqlreplication import constants, event, row_event +from .util import byte2int # Constants from PyMYSQL source code NULL_COLUMN = 251 diff --git a/pymysqlreplication/row_event.py b/pymysqlreplication/row_event.py index 88a5b285..afe61d4f 100644 --- a/pymysqlreplication/row_event.py +++ b/pymysqlreplication/row_event.py @@ -4,8 +4,7 @@ import decimal import datetime -from pymysql.util import byte2int - +from .util import byte2int from .event import BinLogEvent from .constants import FIELD_TYPE from .constants import BINLOG @@ -497,7 +496,7 @@ def __init__(self, from_packet, event_size, table_map, ctl_connection): for i in range(0, len(column_types)): column_type = column_types[i] column_schema = self.column_schemas[i] - col = Column(byte2int(column_type), column_schema, from_packet) + col = Column(column_type, column_schema, from_packet) self.columns.append(col) self.table_obj = Table(self.column_schemas, self.table_id, self.schema, diff --git a/pymysqlreplication/util.py b/pymysqlreplication/util.py new file mode 100644 index 00000000..45ee3ec9 --- /dev/null +++ b/pymysqlreplication/util.py @@ -0,0 +1,7 @@ +import struct + +def byte2int(b): + return struct.unpack("!B", b)[0] + +def int2byte(i): + return struct.pack("!B", i) From bb1f552b2edb27641cefe929701bd22d7421e499 Mon Sep 17 00:00:00 2001 From: Julien Duponchelle Date: Sat, 27 Sep 2014 20:18:31 +0200 Subject: [PATCH 2/2] Fix python2/3 compatibility --- pymysqlreplication/row_event.py | 2 +- pymysqlreplication/util.py | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/pymysqlreplication/row_event.py b/pymysqlreplication/row_event.py index afe61d4f..43d74484 100644 --- a/pymysqlreplication/row_event.py +++ b/pymysqlreplication/row_event.py @@ -496,7 +496,7 @@ def __init__(self, from_packet, event_size, table_map, ctl_connection): for i in range(0, len(column_types)): column_type = column_types[i] column_schema = self.column_schemas[i] - col = Column(column_type, column_schema, from_packet) + col = Column(byte2int(column_type), column_schema, from_packet) self.columns.append(col) self.table_obj = Table(self.column_schemas, self.table_id, self.schema, diff --git a/pymysqlreplication/util.py b/pymysqlreplication/util.py index 45ee3ec9..25100521 100644 --- a/pymysqlreplication/util.py +++ b/pymysqlreplication/util.py @@ -1,7 +1,10 @@ import struct def byte2int(b): - return struct.unpack("!B", b)[0] + try: + return struct.unpack("!B", b)[0] + except TypeError: #With python 3 some read return int + return b def int2byte(i): return struct.pack("!B", i)