flydata 0.3.16 → 0.3.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/flydata-core/lib/flydata-core/record/record.rb +13 -0
- data/flydata-core/lib/flydata-core/table_def/mysql_table_def.rb +107 -5
- data/flydata-core/lib/flydata-core/table_def/redshift_table_def.rb +62 -11
- data/flydata-core/spec/table_def/mysql_table_def_spec.rb +37 -1
- data/flydata-core/spec/table_def/mysql_to_redshift_table_def_spec.rb +120 -0
- data/flydata-core/spec/table_def/mysqldump_test_column_charset.dump +45 -0
- data/flydata-core/spec/table_def/redshift_table_def_spec.rb +70 -88
- data/flydata.gemspec +13 -8
- data/lib/flydata/command/setup.rb +4 -4
- data/lib/flydata/command/sync.rb +18 -29
- data/lib/flydata/compatibility_check.rb +2 -2
- data/lib/flydata/fluent-plugins/in_mysql_binlog_flydata.rb +15 -10
- data/lib/flydata/fluent-plugins/mysql/binlog_record_handler.rb +6 -3
- data/lib/flydata/fluent-plugins/mysql/dml_record_handler.rb +15 -8
- data/lib/flydata/fluent-plugins/mysql/table_meta.rb +6 -34
- data/lib/flydata/{fluent-plugins/mysql → mysql}/binlog_position.rb +2 -0
- data/lib/flydata/{util → mysql}/mysql_util.rb +34 -1
- data/lib/flydata/mysql/table_ddl.rb +118 -0
- data/lib/flydata/parser/mysql/dump_parser.rb +5 -5
- data/lib/flydata/parser/mysql/mysql_alter_table.treetop +29 -5
- data/lib/flydata/sync_file_manager.rb +15 -2
- data/spec/flydata/command/sync_spec.rb +22 -1
- data/spec/flydata/fluent-plugins/in_mysql_binlog_flydata_spec.rb +7 -2
- data/spec/flydata/fluent-plugins/mysql/dml_record_handler_spec.rb +130 -0
- data/spec/flydata/fluent-plugins/mysql/shared_query_handler_context.rb +1 -0
- data/spec/flydata/fluent-plugins/mysql/table_meta_spec.rb +14 -8
- data/spec/flydata/fluent-plugins/mysql/truncate_query_handler_spec.rb +2 -1
- data/spec/flydata/{fluent-plugins/mysql → mysql}/binlog_position_spec.rb +3 -2
- data/spec/flydata/{util → mysql}/mysql_util_spec.rb +2 -2
- data/spec/flydata/mysql/table_ddl_spec.rb +193 -0
- data/spec/flydata/parser/mysql/alter_table_parser_spec.rb +37 -9
- data/spec/flydata/sync_file_manager_spec.rb +102 -27
- 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
|
-
|
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
|
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
|
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
|
-
|
1347
|
-
it_behaves_like "test optional default",
|
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
|
-
|
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(
|
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{
|
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(
|
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(
|
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(
|
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(
|
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{
|
109
|
+
expect{subject_object.save_dump_pos(
|
108
110
|
status, table_name, last_pos, binlog_pos, state, substate)}.not_to raise_error
|
109
|
-
expect(
|
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
|
-
|
128
|
-
|
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 =
|
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
|
-
|
152
|
-
expect(`cat #{
|
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 {
|
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(
|
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
|
-
|
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(
|
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 {
|
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 {
|
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 {
|
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 {
|
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 {
|
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 {
|
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) {
|
215
|
+
let(:ssl_ca_path) { subject_object.ssl_ca_path }
|
214
216
|
let(:ssl_ca_content) { 'aaaaabbbbbccccc' }
|
215
|
-
subject {
|
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 {
|
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.
|
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-
|
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.
|
622
|
+
rubygems_version: 2.4.3
|
618
623
|
signing_key:
|
619
624
|
specification_version: 4
|
620
625
|
summary: FlyData Agent
|