Skip to content

Commit 54e84af

Browse files
idop-aloomabaloo
authored andcommitted
added empty string support for enum, added test
1 parent 04a7bd3 commit 54e84af

File tree

3 files changed

+14
-2
lines changed

3 files changed

+14
-2
lines changed

Diff for: pymysqlreplication/column.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ def __read_string_metadata(self, packet, column_schema):
7272
def __read_enum_metadata(self, column_schema):
7373
enums = column_schema["COLUMN_TYPE"]
7474
if self.type == FIELD_TYPE.ENUM:
75-
self.enum_values = enums.replace('enum(', '')\
75+
self.enum_values = [''] + enums.replace('enum(', '')\
7676
.replace(')', '').replace('\'', '').split(',')
7777
else:
7878
self.set_values = enums.replace('set(', '')\

Diff for: pymysqlreplication/row_event.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ def _read_column_data(self, cols_bitmap):
162162
values[name] = self.packet.read_uint8() + 1900
163163
elif column.type == FIELD_TYPE.ENUM:
164164
values[name] = column.enum_values[
165-
self.packet.read_uint_by_size(column.size) - 1]
165+
self.packet.read_uint_by_size(column.size)]
166166
elif column.type == FIELD_TYPE.SET:
167167
# We read set columns as a bitmap telling us which options
168168
# are enabled

Diff for: pymysqlreplication/tests/test_data_type.py

+12
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,18 @@ def test_enum(self):
378378
self.assertEqual(event.rows[0]["values"]["test"], 'ba')
379379
self.assertEqual(event.rows[0]["values"]["test2"], 'a')
380380

381+
def test_enum_empty_string(self):
382+
create_query = "CREATE TABLE test (test ENUM('a', 'ba', 'c'), test2 ENUM('a', 'ba', 'c')) CHARACTER SET latin1 COLLATE latin1_bin;"
383+
insert_query = "INSERT INTO test VALUES('ba', 'asdf')"
384+
last_sql_mode = self.execute("SELECT @@SESSION.sql_mode;"). \
385+
fetchall()[0][0]
386+
self.execute("SET SESSION sql_mode = 'ANSI';")
387+
event = self.create_and_insert_value(create_query, insert_query)
388+
self.execute("SET SESSION sql_mode = '%s';" % last_sql_mode)
389+
390+
self.assertEqual(event.rows[0]["values"]["test"], 'ba')
391+
self.assertEqual(event.rows[0]["values"]["test2"], '')
392+
381393
def test_set(self):
382394
create_query = "CREATE TABLE test (test SET('a', 'ba', 'c'), test2 SET('a', 'ba', 'c')) CHARACTER SET latin1 COLLATE latin1_bin;"
383395
insert_query = "INSERT INTO test VALUES('ba,a,c', 'a,c')"

0 commit comments

Comments
 (0)