flydata 0.3.16 → 0.3.17

Sign up to get free protection for your applications and to get access to all the features.
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