flydata 0.3.16 → 0.3.17

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.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/flydata-core/lib/flydata-core/record/record.rb +13 -0
  4. data/flydata-core/lib/flydata-core/table_def/mysql_table_def.rb +107 -5
  5. data/flydata-core/lib/flydata-core/table_def/redshift_table_def.rb +62 -11
  6. data/flydata-core/spec/table_def/mysql_table_def_spec.rb +37 -1
  7. data/flydata-core/spec/table_def/mysql_to_redshift_table_def_spec.rb +120 -0
  8. data/flydata-core/spec/table_def/mysqldump_test_column_charset.dump +45 -0
  9. data/flydata-core/spec/table_def/redshift_table_def_spec.rb +70 -88
  10. data/flydata.gemspec +13 -8
  11. data/lib/flydata/command/setup.rb +4 -4
  12. data/lib/flydata/command/sync.rb +18 -29
  13. data/lib/flydata/compatibility_check.rb +2 -2
  14. data/lib/flydata/fluent-plugins/in_mysql_binlog_flydata.rb +15 -10
  15. data/lib/flydata/fluent-plugins/mysql/binlog_record_handler.rb +6 -3
  16. data/lib/flydata/fluent-plugins/mysql/dml_record_handler.rb +15 -8
  17. data/lib/flydata/fluent-plugins/mysql/table_meta.rb +6 -34
  18. data/lib/flydata/{fluent-plugins/mysql → mysql}/binlog_position.rb +2 -0
  19. data/lib/flydata/{util → mysql}/mysql_util.rb +34 -1
  20. data/lib/flydata/mysql/table_ddl.rb +118 -0
  21. data/lib/flydata/parser/mysql/dump_parser.rb +5 -5
  22. data/lib/flydata/parser/mysql/mysql_alter_table.treetop +29 -5
  23. data/lib/flydata/sync_file_manager.rb +15 -2
  24. data/spec/flydata/command/sync_spec.rb +22 -1
  25. data/spec/flydata/fluent-plugins/in_mysql_binlog_flydata_spec.rb +7 -2
  26. data/spec/flydata/fluent-plugins/mysql/dml_record_handler_spec.rb +130 -0
  27. data/spec/flydata/fluent-plugins/mysql/shared_query_handler_context.rb +1 -0
  28. data/spec/flydata/fluent-plugins/mysql/table_meta_spec.rb +14 -8
  29. data/spec/flydata/fluent-plugins/mysql/truncate_query_handler_spec.rb +2 -1
  30. data/spec/flydata/{fluent-plugins/mysql → mysql}/binlog_position_spec.rb +3 -2
  31. data/spec/flydata/{util → mysql}/mysql_util_spec.rb +2 -2
  32. data/spec/flydata/mysql/table_ddl_spec.rb +193 -0
  33. data/spec/flydata/parser/mysql/alter_table_parser_spec.rb +37 -9
  34. data/spec/flydata/sync_file_manager_spec.rb +102 -27
  35. metadata +12 -7
@@ -421,6 +421,24 @@ describe 'MysqlAlterTableParser' do
421
421
  })
422
422
  end
423
423
  end
424
+ context 'with charset option' do
425
+ let(:length) { 45 }
426
+ let(:query) { "alter table `test_schema`.`test_table` add column `extra` varchar(#{length}) character set 'sjis' collate 'sjis_japanese_ci'" }
427
+ it do
428
+ expect(subject).to eq(
429
+ type: :alter_table,
430
+ schema_name: "test_schema",
431
+ table_name: "test_table",
432
+ actions: [{
433
+ action: :add_column,
434
+ column: "extra",
435
+ type: "varchar(#{length * 3})",
436
+ cs: "SHIFT_JIS",
437
+ query: "add column `extra` varchar(#{length}) character set 'sjis' collate 'sjis_japanese_ci'"
438
+ }])
439
+ end
440
+ end
441
+
424
442
  end
425
443
 
426
444
  context 'with alter table drop column syntax' do
@@ -830,10 +848,11 @@ describe 'MysqlAlterTableParser' do
830
848
  end
831
849
  end
832
850
  shared_examples "test charsetname" do |*examples|
833
- ["default","binary","utf8","latin1"].each do |charsetname|
851
+ {"default"=>"DEFAULT","binary"=>"ASCII_8BIT","utf8"=>"UTF_8","latin1"=>"ISO_8859_1"}.each do |charsetname, flydata_charset|
834
852
  context "charsetname is #{charsetname}" do
835
853
  it_behaves_like *examples do
836
854
  let(:charsetname){"#{charsetname}"}
855
+ let(:flydata_charset){flydata_charset}
837
856
  end
838
857
  end
839
858
  end
@@ -1327,35 +1346,44 @@ describe 'MysqlAlterTableParser' do
1327
1346
  it_behaves_like "test simple identifier", "test order", "a parser parsing a breaking query"
1328
1347
  end
1329
1348
  end
1349
+ let(:charset_action_hash) {
1350
+ {
1351
+ action: action,
1352
+ query: alter_table_action,
1353
+ cs: flydata_charset,
1354
+ }
1355
+ }
1330
1356
  context "convert to charset" do
1331
1357
  let(:action) { :convert_charset }
1358
+ let(:action_hash) { [charset_action_hash] }
1332
1359
  context "test with collate" do
1333
1360
  let(:alter_table_action) { "convert to #{charset} #{charsetname} #{collate}" }
1334
- it_behaves_like "test charset", "test charsetname", "test collate", "a parser parsing a breaking query"
1361
+ it_behaves_like "test charset", "test charsetname", "test collate", "a parser parsing a single action alter table query"
1335
1362
  end
1336
1363
  context "test without collate" do
1337
1364
  let(:alter_table_action) { "convert to #{charset} #{charsetname}" }
1338
- it_behaves_like "test charset", "test charsetname", "a parser parsing a breaking query"
1365
+ it_behaves_like "test charset", "test charsetname", "a parser parsing a single action alter table query"
1339
1366
  end
1340
1367
  end
1341
1368
  context "table options" do
1342
1369
  context "default charset" do
1370
+ let(:action) { :default_charset }
1343
1371
  context "with collate" do
1344
- let(:action) { [:default_charset, :default_collate] }
1345
1372
  let(:alter_table_action) { "#{default}#{charset}=#{charsetname} #{collate}" }
1346
- it_behaves_like "test optional default", "test charset", "test charsetname", "test collate", "a parser parsing a breaking query"
1347
- it_behaves_like "test optional default", "test charset", "test charsetname", "test collate with equals", "a parser parsing a breaking query"
1373
+ let(:action_hash) { [charset_action_hash, {action: :default_collate, query: alter_table_action}] }
1374
+ it_behaves_like "test optional default", "test charset", "test charsetname", "test collate", "a parser parsing a single action alter table query"
1375
+ it_behaves_like "test optional default", "test charset", "test charsetname", "test collate with equals", "a parser parsing a single action alter table query"
1348
1376
  end
1349
1377
  context "without collate" do
1350
- let(:action) { :default_charset }
1351
1378
  let(:alter_table_action) { "#{default}#{charset} #{charsetname}" }
1352
- it_behaves_like "test optional default", "test charset", "test charsetname", "a parser parsing a breaking query"
1379
+ let(:action_hash) { [charset_action_hash] }
1380
+ it_behaves_like "test optional default", "test charset", "test charsetname", "a parser parsing a single action alter table query"
1353
1381
  end
1354
1382
  context "without charset" do
1355
1383
  #The doc at http://dev.mysql.com/doc/refman/5.6/en/alter-table.html does not indicate that
1356
1384
  #charset is optional. But this works (tested on mysql 5.5.38)
1357
- let(:alter_table_action) { "#{default}#{collate}" }
1358
1385
  let(:action) { :default_collate }
1386
+ let(:alter_table_action) { "#{default}#{collate}" }
1359
1387
  it_behaves_like "test optional default","test collate", "a parser parsing a breaking query"
1360
1388
  it_behaves_like "test optional default","test collate with equals", "a parser parsing a breaking query"
1361
1389
  end
@@ -5,6 +5,8 @@ require 'flydata/parser/mysql/dump_parser'
5
5
 
6
6
  module Flydata
7
7
  describe SyncFileManager do
8
+ let(:subject_object) { described_class.new(default_data_entry) }
9
+
8
10
  let(:default_mysqldump_dir) do
9
11
  File.join('/tmp', "sync_dump_#{Time.now.to_i}")
10
12
  end
@@ -35,10 +37,10 @@ module Flydata
35
37
  "data_servers"=>"localhost:9905" }
36
38
  }
37
39
  end
38
- let(:default_sfm) { SyncFileManager.new(default_data_entry) }
39
40
 
40
41
  let (:status) { 'PARSING' }
41
42
  let (:table_name) { 'test_table' }
43
+ let (:table_name2) { 'test_table2' }
42
44
  let (:last_pos) { 9999 }
43
45
  let (:binlog_pos) { {binfile: 'mysqlbin.00001', pos: 111} }
44
46
  let (:state) { 'CREATE_TABLE' }
@@ -60,28 +62,28 @@ module Flydata
60
62
  end
61
63
  it do
62
64
  stub_const('Flydata::FileUtil::SyncFileManager::DUMP_DIR', File.join(Flydata::FLYDATA_HOME, 'dump'))
63
- expect(default_sfm.dump_file_path).to eq(
65
+ expect(subject_object.dump_file_path).to eq(
64
66
  File.join(Flydata::FLYDATA_HOME, 'dump', 'flydata_sync_mysql.dump'))
65
67
  end
66
68
  end
67
69
  context 'when file exists' do
68
70
  before { `touch #{default_mysqldump_dir}`}
69
71
  it do
70
- expect{default_sfm.dump_file_path}.to raise_error
72
+ expect{subject_object.dump_file_path}.to raise_error
71
73
  end
72
74
  end
73
75
  context 'when directory exists' do
74
76
  before { `mkdir -p #{default_mysqldump_dir}`}
75
77
  it do
76
78
  expect(FileUtils).to receive(:mkdir_p).with(default_mysqldump_dir).never
77
- expect(default_sfm.dump_file_path).to eq(
79
+ expect(subject_object.dump_file_path).to eq(
78
80
  File.join(default_mysqldump_dir, 'flydata_sync_mysql.dump'))
79
81
  end
80
82
  end
81
83
  context 'when directory or file does not exist' do
82
84
  it do
83
85
  expect(FileUtils).to receive(:mkdir_p).with(default_mysqldump_dir).once
84
- expect(default_sfm.dump_file_path).to eq(
86
+ expect(subject_object.dump_file_path).to eq(
85
87
  File.join(default_mysqldump_dir, 'flydata_sync_mysql.dump'))
86
88
  end
87
89
  end
@@ -90,23 +92,23 @@ module Flydata
90
92
  it do
91
93
  expected_dir = File.join(ENV['HOME'], default_mysqldump_dir[1..-1])
92
94
  expect(FileUtils).to receive(:mkdir_p).with(expected_dir).once
93
- expect(default_sfm.dump_file_path).to eq(
95
+ expect(subject_object.dump_file_path).to eq(
94
96
  File.join(expected_dir, 'flydata_sync_mysql.dump'))
95
97
  end
96
98
  end
97
99
  end
98
100
 
99
101
  describe '#dump_pos_path' do
100
- it { expect(default_sfm.dump_pos_path).to eq(
102
+ it { expect(subject_object.dump_pos_path).to eq(
101
103
  File.join(default_mysqldump_dir, 'flydata_sync_mysql.dump.pos')) }
102
104
  end
103
105
 
104
106
  describe '#save_dump_pos' do
105
107
  context 'without mysql marshal data' do
106
108
  it do
107
- expect{default_sfm.save_dump_pos(
109
+ expect{subject_object.save_dump_pos(
108
110
  status, table_name, last_pos, binlog_pos, state, substate)}.not_to raise_error
109
- expect(default_sfm.load_dump_pos).to eq({
111
+ expect(subject_object.load_dump_pos).to eq({
110
112
  status: status, table_name: table_name, last_pos: last_pos,
111
113
  binlog_pos: binlog_pos, state: state, substate: substate,
112
114
  mysql_table: nil
@@ -124,11 +126,11 @@ module Flydata
124
126
 
125
127
  context 'with mysql marshal data' do
126
128
  before do
127
- default_sfm.save_mysql_table_marshal_dump(mysql_table)
128
- default_sfm.save_dump_pos(status, table_name, last_pos, binlog_pos, state, substate)
129
+ subject_object.save_mysql_table_marshal_dump(mysql_table)
130
+ subject_object.save_dump_pos(status, table_name, last_pos, binlog_pos, state, substate)
129
131
  end
130
132
  it do
131
- ret = default_sfm.load_dump_pos
133
+ ret = subject_object.load_dump_pos
132
134
  mt = ret.delete(:mysql_table)
133
135
  expect(ret).to eq({
134
136
  status: status, table_name: table_name, last_pos: last_pos,
@@ -148,8 +150,8 @@ module Flydata
148
150
  let(:pos) { 107 }
149
151
  let(:binlog_pos) { {binfile: binfile, pos: pos} }
150
152
  it do
151
- default_sfm.save_binlog(binlog_pos)
152
- expect(`cat #{default_sfm.binlog_path}`).to eq("#{binfile}\t#{pos}")
153
+ subject_object.save_binlog(binlog_pos)
154
+ expect(`cat #{subject_object.binlog_path}`).to eq("#{binfile}\t#{pos}")
153
155
  end
154
156
  end
155
157
 
@@ -158,61 +160,61 @@ module Flydata
158
160
  let(:pos) { 107 }
159
161
  let(:binlog_pos) { {binfile: binfile, pos: pos} }
160
162
 
161
- subject { default_sfm.load_binlog }
163
+ subject { subject_object.load_binlog }
162
164
 
163
165
  context 'when binlog pos does not exist' do
164
166
  before do
165
- File.delete(default_sfm.binlog_path) if File.exist?(default_sfm.binlog_path)
167
+ File.delete(subject_object.binlog_path) if File.exist?(subject_object.binlog_path)
166
168
  end
167
169
  it { is_expected.to be_nil }
168
170
  end
169
171
 
170
172
  context 'when binlog pos exists' do
171
173
  before do
172
- default_sfm.save_binlog(binlog_pos)
174
+ subject_object.save_binlog(binlog_pos)
173
175
  end
174
176
  it { is_expected.to eq(binlog_pos) }
175
177
  end
176
178
  end
177
179
 
178
180
  describe '#binlog_path' do
179
- it { expect(default_sfm.binlog_path).to eq("#{FLYDATA_HOME}/flydata_sync_mysql.binlog.pos") }
181
+ it { expect(subject_object.binlog_path).to eq("#{FLYDATA_HOME}/flydata_sync_mysql.binlog.pos") }
180
182
  end
181
183
 
182
184
  describe '#sent_binlog_path' do
183
185
  context 'with no args' do
184
- subject { default_sfm.sent_binlog_path }
186
+ subject { subject_object.sent_binlog_path }
185
187
  it { is_expected.to eq("#{FLYDATA_HOME}/flydata_sync_mysql.binlog.sent.pos") }
186
188
  end
187
189
  context 'with invalid args' do
188
- subject { default_sfm.sent_binlog_path('/home/ec2-user/.flydata/flydata_sync.pos') }
190
+ subject { subject_object.sent_binlog_path('/home/ec2-user/.flydata/flydata_sync.pos') }
189
191
  it { expect{subject}.to raise_error(ArgumentError) }
190
192
  end
191
193
  context 'with valid args' do
192
- subject { default_sfm.sent_binlog_path('/home/ec2-user/.flydata/flydata_sync.binlog.pos') }
194
+ subject { subject_object.sent_binlog_path('/home/ec2-user/.flydata/flydata_sync.binlog.pos') }
193
195
  it { is_expected.to eq('/home/ec2-user/.flydata/flydata_sync.binlog.sent.pos') }
194
196
  end
195
197
  end
196
198
 
197
199
  describe '#ssl_ca_path' do
198
200
  context 'with no args' do
199
- subject { default_sfm.ssl_ca_path }
201
+ subject { subject_object.ssl_ca_path }
200
202
  it { is_expected.to eq("#{FLYDATA_HOME}/flydata_sync_mysql.ssl_ca.pem") }
201
203
  end
202
204
  context 'with invalid args' do
203
- subject { default_sfm.ssl_ca_path('/home/ec2-user/.flydata/flydata_sync.pos') }
205
+ subject { subject_object.ssl_ca_path('/home/ec2-user/.flydata/flydata_sync.pos') }
204
206
  it { expect{subject}.to raise_error(ArgumentError) }
205
207
  end
206
208
  context 'with valid args' do
207
- subject { default_sfm.ssl_ca_path('/home/ec2-user/.flydata/flydata_sync.binlog.pos') }
209
+ subject { subject_object.ssl_ca_path('/home/ec2-user/.flydata/flydata_sync.binlog.pos') }
208
210
  it { is_expected.to eq('/home/ec2-user/.flydata/flydata_sync.ssl_ca.pem') }
209
211
  end
210
212
  end
211
213
 
212
214
  describe '#save_ssl_ca_path' do
213
- let(:ssl_ca_path) { default_sfm.ssl_ca_path }
215
+ let(:ssl_ca_path) { subject_object.ssl_ca_path }
214
216
  let(:ssl_ca_content) { 'aaaaabbbbbccccc' }
215
- subject { default_sfm.save_ssl_ca(ssl_ca_content) }
217
+ subject { subject_object.save_ssl_ca(ssl_ca_content) }
216
218
 
217
219
  after do
218
220
  File.delete(ssl_ca_path)
@@ -232,7 +234,7 @@ module Flydata
232
234
  table_pos_file = "#{table_pos_dir}/#{test_table}.pos"
233
235
  FileUtils.rm(table_pos_file) if File.exist?(table_pos_file)
234
236
  end
235
- subject { default_sfm }
237
+ subject { subject_object }
236
238
  context 'when an exception happens in the block' do
237
239
  let(:first_pos) { 1 }
238
240
  let(:last_pos) { first_pos + 1 }
@@ -254,5 +256,78 @@ module Flydata
254
256
  end
255
257
  end
256
258
  end
259
+ describe '#save_generated_ddl' do
260
+ subject { subject_object.save_generated_ddl(table_names, contents) }
261
+
262
+ let(:contents) { '2' }
263
+ let(:io) { double('io') }
264
+
265
+ shared_examples 'writing to per-table .generated_ddl files in positions directory' do
266
+ it do
267
+ table_name_array.each do |tn|
268
+ expect(File).to receive(:open).with("#{FLYDATA_HOME}/positions/#{tn}.generated_ddl", 'w').and_yield(io)
269
+ expect(io).to receive(:write).with(contents)
270
+ end
271
+
272
+ subject
273
+ end
274
+ end
275
+
276
+ context 'single table name' do
277
+ let(:table_names) { table_name }
278
+ let(:table_name_array) { [ table_name ] }
279
+
280
+ it_behaves_like 'writing to per-table .generated_ddl files in positions directory'
281
+ end
282
+ context 'multiple table names' do
283
+ let(:table_names) { [ table_name, table_name2 ] }
284
+ let(:table_name_array) { table_names }
285
+
286
+ it_behaves_like 'writing to per-table .generated_ddl files in positions directory'
287
+ end
288
+ end
289
+ describe "#load_generated_ddl" do
290
+ subject { subject_object.load_generated_ddl(table_names) }
291
+
292
+ let(:contents) { { table_name => '2', table_name2 => '3' } }
293
+ let(:io) { double('io') }
294
+ let(:expected_result) { table_name_array.collect{|tn| contents[tn] } }
295
+
296
+ shared_examples 'reading from per-table .generated_ddl files in positions directory' do
297
+ it do
298
+ table_name_array.each do |tn|
299
+ expect(File).to receive(:open).with("#{FLYDATA_HOME}/positions/#{tn}.generated_ddl").and_yield(io)
300
+ expect(io).to receive(:read).and_return(contents[tn])
301
+ end
302
+
303
+ is_expected.to eq expected_result
304
+ end
305
+ end
306
+
307
+ context 'single table name' do
308
+ let(:table_names) { table_name }
309
+ let(:table_name_array) { [ table_name ] }
310
+
311
+ it_behaves_like 'reading from per-table .generated_ddl files in positions directory'
312
+ end
313
+ context 'multiple table names' do
314
+ let(:table_names) { [ table_name, table_name2 ] }
315
+ let(:table_name_array) { table_names }
316
+
317
+ context 'normal case' do
318
+ it_behaves_like 'reading from per-table .generated_ddl files in positions directory'
319
+ end
320
+ context 'first file is missing' do
321
+ let(:table_name_array) { [ table_name2 ] }
322
+ let(:expected_result) { [nil, contents[table_name2]] }
323
+
324
+ let(:file_path) { "#{FLYDATA_HOME}/positions/#{table_name}.generated_ddl" }
325
+ before do
326
+ expect(File).to receive(:open).with(file_path).and_raise(Errno::ENOENT.new(file_path))
327
+ end
328
+ it_behaves_like 'reading from per-table .generated_ddl files in positions directory'
329
+ end
330
+ end
331
+ end
257
332
  end
258
333
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flydata
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.16
4
+ version: 0.3.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Koichi Fujikawa
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2015-04-21 00:00:00.000000000 Z
15
+ date: 2015-04-22 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: rest-client
@@ -470,6 +470,7 @@ files:
470
470
  - flydata-core/lib/flydata-core/fluent-plugins/multi_buffer.rb
471
471
  - flydata-core/lib/flydata-core/fluent/config_helper.rb
472
472
  - flydata-core/lib/flydata-core/logger.rb
473
+ - flydata-core/lib/flydata-core/record/record.rb
473
474
  - flydata-core/lib/flydata-core/table_def.rb
474
475
  - flydata-core/lib/flydata-core/table_def/mysql_table_def.rb
475
476
  - flydata-core/lib/flydata-core/table_def/redshift_table_def.rb
@@ -481,6 +482,7 @@ files:
481
482
  - flydata-core/spec/table_def/mysql_table_def_spec.rb
482
483
  - flydata-core/spec/table_def/mysql_to_redshift_table_def_spec.rb
483
484
  - flydata-core/spec/table_def/mysqldump_test_bit_table.dump
485
+ - flydata-core/spec/table_def/mysqldump_test_column_charset.dump
484
486
  - flydata-core/spec/table_def/mysqldump_test_foreign_key.dump
485
487
  - flydata-core/spec/table_def/mysqldump_test_table_all.dump
486
488
  - flydata-core/spec/table_def/mysqldump_test_table_column_comment.dump
@@ -525,7 +527,6 @@ files:
525
527
  - lib/flydata/fluent-plugins/idle_event_detector.rb
526
528
  - lib/flydata/fluent-plugins/in_mysql_binlog_flydata.rb
527
529
  - lib/flydata/fluent-plugins/mysql/alter_table_query_handler.rb
528
- - lib/flydata/fluent-plugins/mysql/binlog_position.rb
529
530
  - lib/flydata/fluent-plugins/mysql/binlog_position_file.rb
530
531
  - lib/flydata/fluent-plugins/mysql/binlog_query_dispatcher.rb
531
532
  - lib/flydata/fluent-plugins/mysql/binlog_query_handler.rb
@@ -544,6 +545,9 @@ files:
544
545
  - lib/flydata/heroku/configuration_methods.rb
545
546
  - lib/flydata/heroku/instance_methods.rb
546
547
  - lib/flydata/log_monitor.rb
548
+ - lib/flydata/mysql/binlog_position.rb
549
+ - lib/flydata/mysql/mysql_util.rb
550
+ - lib/flydata/mysql/table_ddl.rb
547
551
  - lib/flydata/output/forwarder.rb
548
552
  - lib/flydata/parser/mysql/dump_parser.rb
549
553
  - lib/flydata/parser/mysql/mysql_alter_table.treetop
@@ -552,7 +556,6 @@ files:
552
556
  - lib/flydata/proxy.rb
553
557
  - lib/flydata/sync_file_manager.rb
554
558
  - lib/flydata/util/encryptor.rb
555
- - lib/flydata/util/mysql_util.rb
556
559
  - spec/fluent_plugins_spec_helper.rb
557
560
  - spec/fly_data_model_spec.rb
558
561
  - spec/flydata/api/data_entry_spec.rb
@@ -578,19 +581,21 @@ files:
578
581
  - spec/flydata/fluent-plugins/idle_event_detector_spec.rb
579
582
  - spec/flydata/fluent-plugins/in_mysql_binlog_flydata_spec.rb
580
583
  - spec/flydata/fluent-plugins/mysql/alter_table_query_handler_spec.rb
581
- - spec/flydata/fluent-plugins/mysql/binlog_position_spec.rb
582
584
  - spec/flydata/fluent-plugins/mysql/binlog_query_dispatcher_spec.rb
583
585
  - spec/flydata/fluent-plugins/mysql/ddl_query_handler_spec.rb
586
+ - spec/flydata/fluent-plugins/mysql/dml_record_handler_spec.rb
584
587
  - spec/flydata/fluent-plugins/mysql/shared_query_handler_context.rb
585
588
  - spec/flydata/fluent-plugins/mysql/table_meta_spec.rb
586
589
  - spec/flydata/fluent-plugins/mysql/truncate_query_handler_spec.rb
587
590
  - spec/flydata/heroku_spec.rb
591
+ - spec/flydata/mysql/binlog_position_spec.rb
592
+ - spec/flydata/mysql/mysql_util_spec.rb
593
+ - spec/flydata/mysql/table_ddl_spec.rb
588
594
  - spec/flydata/output/forwarder_spec.rb
589
595
  - spec/flydata/parser/mysql/alter_table_parser_spec.rb
590
596
  - spec/flydata/parser/mysql/dump_parser_spec.rb
591
597
  - spec/flydata/sync_file_manager_spec.rb
592
598
  - spec/flydata/util/encryptor_spec.rb
593
- - spec/flydata/util/mysql_util_spec.rb
594
599
  - spec/flydata_spec.rb
595
600
  - spec/spec_helper.rb
596
601
  - tmpl/redshift_mysql_data_entry.conf.tmpl
@@ -614,7 +619,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
614
619
  version: '0'
615
620
  requirements: []
616
621
  rubyforge_project:
617
- rubygems_version: 2.4.6
622
+ rubygems_version: 2.4.3
618
623
  signing_key:
619
624
  specification_version: 4
620
625
  summary: FlyData Agent