flydata 0.2.17 → 0.2.18
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.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/flydata-core/.gitignore +16 -0
- data/flydata-core/.rspec +1 -0
- data/flydata-core/.travis.yml +6 -0
- data/flydata-core/Gemfile +11 -0
- data/flydata-core/Gemfile.lock +51 -0
- data/flydata-core/lib/flydata-core/core_ext/module/include.rb +5 -0
- data/flydata-core/lib/flydata-core/core_ext/module.rb +1 -0
- data/flydata-core/lib/flydata-core/core_ext/object/prepend.rb +17 -0
- data/flydata-core/lib/flydata-core/core_ext/object.rb +1 -0
- data/flydata-core/lib/flydata-core/core_ext.rb +3 -0
- data/flydata-core/lib/flydata-core/errors.rb +334 -0
- data/flydata-core/lib/flydata-core/logger.rb +205 -0
- data/{lib/flydata → flydata-core/lib/flydata-core}/table_def/mysql_table_def.rb +6 -8
- data/{lib/flydata → flydata-core/lib/flydata-core}/table_def/redshift_table_def.rb +17 -2
- data/flydata-core/lib/flydata-core/table_def.rb +2 -0
- data/flydata-core/lib/flydata-core/thread_context.rb +31 -0
- data/flydata-core/lib/flydata-core.rb +1 -0
- data/flydata-core/spec/spec_helper.rb +2 -0
- data/{spec/flydata → flydata-core/spec}/table_def/mysql_table_def_spec.rb +22 -8
- data/flydata-core/spec/table_def/mysql_to_redshift_table_def_spec.rb +428 -0
- data/flydata-core/spec/table_def/mysqldump_test_bit_table.dump +51 -0
- data/{spec/flydata → flydata-core/spec}/table_def/mysqldump_test_foreign_key.dump +0 -0
- data/{spec/flydata → flydata-core/spec}/table_def/mysqldump_test_table_all.dump +0 -0
- data/{spec/flydata → flydata-core/spec}/table_def/mysqldump_test_table_column_comment.dump +0 -0
- data/{spec/flydata → flydata-core/spec}/table_def/mysqldump_test_table_enum.dump +0 -0
- data/{spec/flydata → flydata-core/spec}/table_def/mysqldump_test_table_multi_pk.dump +0 -0
- data/{spec/flydata → flydata-core/spec}/table_def/mysqldump_test_table_no_pk.dump +0 -0
- data/{spec/flydata → flydata-core/spec}/table_def/mysqldump_test_unique_key.dump +0 -0
- data/{spec/flydata → flydata-core/spec}/table_def/mysqldump_test_unique_key2.dump +0 -0
- data/{spec/flydata → flydata-core/spec}/table_def/mysqldump_test_unique_key3.dump +0 -0
- data/{spec/flydata → flydata-core/spec}/table_def/mysqldump_test_unsigned.dump +0 -0
- data/{spec/flydata → flydata-core/spec}/table_def/redshift_table_def_spec.rb +63 -16
- data/flydata.gemspec +34 -18
- data/lib/flydata/command/sync.rb +11 -8
- data/lib/flydata/parser/mysql/mysql_alter_table.treetop +128 -18
- data/lib/flydata/parser_provider.rb +1 -1
- data/lib/flydata.rb +11 -1
- data/spec/flydata/parser/mysql/alter_table_parser_spec.rb +173 -2
- data/spec/spec_helper.rb +3 -1
- metadata +34 -18
- data/.gitignore +0 -49
- data/lib/flydata/table_def.rb +0 -2
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'flydata/table_def'
|
2
|
+
require 'flydata-core/table_def'
|
3
3
|
|
4
|
-
module
|
4
|
+
module FlydataCore
|
5
5
|
module TableDef
|
6
6
|
|
7
7
|
describe RedshiftTableDef do
|
@@ -233,7 +233,7 @@ EOT
|
|
233
233
|
it_behaves_like *examples
|
234
234
|
end
|
235
235
|
end
|
236
|
-
|
236
|
+
|
237
237
|
context 'with medium blob column def' do
|
238
238
|
context 'when size exceeds max size' do
|
239
239
|
let(:default_value) { "something" }
|
@@ -246,9 +246,9 @@ EOT
|
|
246
246
|
let(:type_sql) { %Q|"col_medium_blob" varchar(65535)| }
|
247
247
|
|
248
248
|
it_behaves_like *examples
|
249
|
-
end
|
249
|
+
end
|
250
250
|
end
|
251
|
-
|
251
|
+
|
252
252
|
context 'with unsigned column def' do
|
253
253
|
let(:default_value) { 4 }
|
254
254
|
let(:default_value_sql) { "'#{default_value}'" }
|
@@ -312,8 +312,8 @@ EOT
|
|
312
312
|
|
313
313
|
context 'with decimal column def' do
|
314
314
|
context 'when precision exceeds max allowed' do
|
315
|
-
let(:default_value) { 4 }
|
316
|
-
let(:default_value_sql) {
|
315
|
+
let(:default_value) { "'4'" }
|
316
|
+
let(:default_value_sql) { default_value }
|
317
317
|
let(:not_null_default_sql) { " DEFAULT '0'" }
|
318
318
|
before do
|
319
319
|
column[:column] = "value"
|
@@ -324,8 +324,8 @@ EOT
|
|
324
324
|
it_behaves_like *examples
|
325
325
|
end
|
326
326
|
context 'when scale exceeds max allowed' do #not possible
|
327
|
-
let(:default_value) { 4 }
|
328
|
-
let(:default_value_sql) {
|
327
|
+
let(:default_value) { "'4'" }
|
328
|
+
let(:default_value_sql) { default_value }
|
329
329
|
let(:not_null_default_sql) { " DEFAULT '0'" }
|
330
330
|
before do
|
331
331
|
column[:column] = "value"
|
@@ -337,8 +337,8 @@ EOT
|
|
337
337
|
end
|
338
338
|
|
339
339
|
context 'when precision and scale exceeds max allowed (for unsigned)' do
|
340
|
-
let(:default_value) { 4 }
|
341
|
-
let(:default_value_sql) {
|
340
|
+
let(:default_value) { "'4'" }
|
341
|
+
let(:default_value_sql) { default_value }
|
342
342
|
let(:not_null_default_sql) { " DEFAULT '0'" }
|
343
343
|
before do
|
344
344
|
column[:column] = "value"
|
@@ -350,8 +350,8 @@ EOT
|
|
350
350
|
end
|
351
351
|
|
352
352
|
context 'when precision and scale are within limit (for unsigned)' do
|
353
|
-
let(:default_value) { 4 }
|
354
|
-
let(:default_value_sql) {
|
353
|
+
let(:default_value) { "'4'" }
|
354
|
+
let(:default_value_sql) { default_value }
|
355
355
|
let(:not_null_default_sql) { " DEFAULT '0'" }
|
356
356
|
before do
|
357
357
|
column[:column] = "value"
|
@@ -362,6 +362,52 @@ EOT
|
|
362
362
|
it_behaves_like *examples
|
363
363
|
end
|
364
364
|
end
|
365
|
+
|
366
|
+
context 'with bit column def' do
|
367
|
+
before do
|
368
|
+
column[:column] = "value_bit"
|
369
|
+
column[:type] = "bit(1)"
|
370
|
+
end
|
371
|
+
let(:type_sql) { %Q|"value_bit" bigint| }
|
372
|
+
let(:not_null_default_sql) { " DEFAULT '0'" }
|
373
|
+
|
374
|
+
context 'when default_value is small bit' do
|
375
|
+
let(:default_value) { "b'1'" }
|
376
|
+
let(:default_value_sql) { "1" }
|
377
|
+
it_behaves_like *examples
|
378
|
+
end
|
379
|
+
|
380
|
+
context 'when default_value is large bit' do
|
381
|
+
let(:default_value) { "b'10110'" }
|
382
|
+
let(:default_value_sql) { "22" }
|
383
|
+
it_behaves_like *examples
|
384
|
+
end
|
385
|
+
|
386
|
+
# it's not real case
|
387
|
+
context "when default_value is x'' format" do
|
388
|
+
let(:default_value) { "x'12'" }
|
389
|
+
let(:default_value_sql) { "18" }
|
390
|
+
it_behaves_like *examples
|
391
|
+
end
|
392
|
+
|
393
|
+
context "when default_value is X'' format" do
|
394
|
+
let(:default_value) { "X'2a'" }
|
395
|
+
let(:default_value_sql) { "42" }
|
396
|
+
it_behaves_like *examples
|
397
|
+
end
|
398
|
+
|
399
|
+
context 'when default_value is 0x format' do
|
400
|
+
let(:default_value) { "0x0013" }
|
401
|
+
let(:default_value_sql) { "19" }
|
402
|
+
it_behaves_like *examples
|
403
|
+
end
|
404
|
+
|
405
|
+
context 'when default_value is 0b format' do
|
406
|
+
let(:default_value) { "0b1011" }
|
407
|
+
let(:default_value_sql) { "11" }
|
408
|
+
it_behaves_like *examples
|
409
|
+
end
|
410
|
+
end
|
365
411
|
end
|
366
412
|
|
367
413
|
context 'for create table' do
|
@@ -378,7 +424,7 @@ EOT
|
|
378
424
|
context "without not null" do
|
379
425
|
let(:expected_query) { %Q| #{type_sql}#{default_sql}| }
|
380
426
|
let(:no_default_sql) { "" }
|
381
|
-
|
427
|
+
|
382
428
|
it_behaves_like "test column types", "default values", "test generated Redshift SQL for column"
|
383
429
|
end
|
384
430
|
context "with not null false" do
|
@@ -387,16 +433,17 @@ EOT
|
|
387
433
|
column[:not_null] = false
|
388
434
|
end
|
389
435
|
let(:no_default_sql) { "" }
|
390
|
-
|
436
|
+
|
391
437
|
it_behaves_like "test column types", "default values", "test generated Redshift SQL for column"
|
392
438
|
end
|
439
|
+
|
393
440
|
context "with not null true" do
|
394
441
|
let(:expected_query) { %Q| #{type_sql} NOT NULL#{default_sql}| }
|
395
442
|
before do
|
396
443
|
column[:not_null] = true
|
397
444
|
end
|
398
445
|
let(:no_default_sql) { not_null_default_sql }
|
399
|
-
|
446
|
+
|
400
447
|
it_behaves_like "test column types", "default values", "test generated Redshift SQL for column"
|
401
448
|
end
|
402
449
|
end
|
data/flydata.gemspec
CHANGED
@@ -5,16 +5,15 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "flydata"
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.18"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Koichi Fujikawa", "Masashi Miyazaki", "Matthew Luu", "Mak Inada", "Sriram NS"]
|
12
|
-
s.date = "2014-11-
|
12
|
+
s.date = "2014-11-27"
|
13
13
|
s.description = "FlyData Agent"
|
14
14
|
s.email = "sysadmin@flydata.com"
|
15
15
|
s.executables = ["fdmysqldump", "flydata", "serverinfo"]
|
16
16
|
s.files = [
|
17
|
-
".gitignore",
|
18
17
|
".rspec",
|
19
18
|
"Gemfile",
|
20
19
|
"Gemfile.lock",
|
@@ -28,6 +27,38 @@ Gem::Specification.new do |s|
|
|
28
27
|
"bin/fdmysqldump",
|
29
28
|
"bin/flydata",
|
30
29
|
"bin/serverinfo",
|
30
|
+
"flydata-core/.gitignore",
|
31
|
+
"flydata-core/.rspec",
|
32
|
+
"flydata-core/.travis.yml",
|
33
|
+
"flydata-core/Gemfile",
|
34
|
+
"flydata-core/Gemfile.lock",
|
35
|
+
"flydata-core/lib/flydata-core.rb",
|
36
|
+
"flydata-core/lib/flydata-core/core_ext.rb",
|
37
|
+
"flydata-core/lib/flydata-core/core_ext/module.rb",
|
38
|
+
"flydata-core/lib/flydata-core/core_ext/module/include.rb",
|
39
|
+
"flydata-core/lib/flydata-core/core_ext/object.rb",
|
40
|
+
"flydata-core/lib/flydata-core/core_ext/object/prepend.rb",
|
41
|
+
"flydata-core/lib/flydata-core/errors.rb",
|
42
|
+
"flydata-core/lib/flydata-core/logger.rb",
|
43
|
+
"flydata-core/lib/flydata-core/table_def.rb",
|
44
|
+
"flydata-core/lib/flydata-core/table_def/mysql_table_def.rb",
|
45
|
+
"flydata-core/lib/flydata-core/table_def/redshift_table_def.rb",
|
46
|
+
"flydata-core/lib/flydata-core/thread_context.rb",
|
47
|
+
"flydata-core/spec/spec_helper.rb",
|
48
|
+
"flydata-core/spec/table_def/mysql_table_def_spec.rb",
|
49
|
+
"flydata-core/spec/table_def/mysql_to_redshift_table_def_spec.rb",
|
50
|
+
"flydata-core/spec/table_def/mysqldump_test_bit_table.dump",
|
51
|
+
"flydata-core/spec/table_def/mysqldump_test_foreign_key.dump",
|
52
|
+
"flydata-core/spec/table_def/mysqldump_test_table_all.dump",
|
53
|
+
"flydata-core/spec/table_def/mysqldump_test_table_column_comment.dump",
|
54
|
+
"flydata-core/spec/table_def/mysqldump_test_table_enum.dump",
|
55
|
+
"flydata-core/spec/table_def/mysqldump_test_table_multi_pk.dump",
|
56
|
+
"flydata-core/spec/table_def/mysqldump_test_table_no_pk.dump",
|
57
|
+
"flydata-core/spec/table_def/mysqldump_test_unique_key.dump",
|
58
|
+
"flydata-core/spec/table_def/mysqldump_test_unique_key2.dump",
|
59
|
+
"flydata-core/spec/table_def/mysqldump_test_unique_key3.dump",
|
60
|
+
"flydata-core/spec/table_def/mysqldump_test_unsigned.dump",
|
61
|
+
"flydata-core/spec/table_def/redshift_table_def_spec.rb",
|
31
62
|
"flydata.gemspec",
|
32
63
|
"lib/fly_data_model.rb",
|
33
64
|
"lib/flydata.rb",
|
@@ -83,9 +114,6 @@ Gem::Specification.new do |s|
|
|
83
114
|
"lib/flydata/preference/data_entry_preference.rb",
|
84
115
|
"lib/flydata/proxy.rb",
|
85
116
|
"lib/flydata/sync_file_manager.rb",
|
86
|
-
"lib/flydata/table_def.rb",
|
87
|
-
"lib/flydata/table_def/mysql_table_def.rb",
|
88
|
-
"lib/flydata/table_def/redshift_table_def.rb",
|
89
117
|
"lib/flydata/util/encryptor.rb",
|
90
118
|
"spec/fluent_plugins_spec_helper.rb",
|
91
119
|
"spec/fly_data_model_spec.rb",
|
@@ -103,18 +131,6 @@ Gem::Specification.new do |s|
|
|
103
131
|
"spec/flydata/parser/mysql/alter_table_parser_spec.rb",
|
104
132
|
"spec/flydata/parser/mysql/dump_parser_spec.rb",
|
105
133
|
"spec/flydata/sync_file_manager_spec.rb",
|
106
|
-
"spec/flydata/table_def/mysql_table_def_spec.rb",
|
107
|
-
"spec/flydata/table_def/mysqldump_test_foreign_key.dump",
|
108
|
-
"spec/flydata/table_def/mysqldump_test_table_all.dump",
|
109
|
-
"spec/flydata/table_def/mysqldump_test_table_column_comment.dump",
|
110
|
-
"spec/flydata/table_def/mysqldump_test_table_enum.dump",
|
111
|
-
"spec/flydata/table_def/mysqldump_test_table_multi_pk.dump",
|
112
|
-
"spec/flydata/table_def/mysqldump_test_table_no_pk.dump",
|
113
|
-
"spec/flydata/table_def/mysqldump_test_unique_key.dump",
|
114
|
-
"spec/flydata/table_def/mysqldump_test_unique_key2.dump",
|
115
|
-
"spec/flydata/table_def/mysqldump_test_unique_key3.dump",
|
116
|
-
"spec/flydata/table_def/mysqldump_test_unsigned.dump",
|
117
|
-
"spec/flydata/table_def/redshift_table_def_spec.rb",
|
118
134
|
"spec/flydata/util/encryptor_spec.rb",
|
119
135
|
"spec/flydata_spec.rb",
|
120
136
|
"spec/spec_helper.rb",
|
data/lib/flydata/command/sync.rb
CHANGED
@@ -5,9 +5,9 @@ require 'mysql2'
|
|
5
5
|
require 'flydata/sync_file_manager'
|
6
6
|
require 'flydata/agent_errors'
|
7
7
|
require 'flydata/compatibility_check'
|
8
|
-
require 'flydata/table_def'
|
9
8
|
require 'flydata/output/forwarder'
|
10
9
|
require 'flydata/parser/mysql/dump_parser'
|
10
|
+
require 'flydata-core/table_def'
|
11
11
|
#require 'ruby-prof'
|
12
12
|
|
13
13
|
module Flydata
|
@@ -26,6 +26,7 @@ module Flydata
|
|
26
26
|
on 'c', 'skip-cleanup', 'Skip server cleanup'
|
27
27
|
on 'y', 'yes', 'Skip command prompt assuming yes to all questions. Use this for batch operation.'
|
28
28
|
on 'd', 'dump-file', 'Dump mysqldump into a file. Use this for debugging after making sure the free space.'
|
29
|
+
on 'n', 'no-flydata-start', 'Don\'t start the flydata agent after initial sync.'
|
29
30
|
end
|
30
31
|
end
|
31
32
|
|
@@ -150,6 +151,7 @@ module Flydata
|
|
150
151
|
Slop.new do
|
151
152
|
on 'c', 'ctl-only', 'Only generate FlyData Control definitions'
|
152
153
|
on 'y', 'yes', 'Skip command prompt assuming yes to all questions. Use this for batch operation.'
|
154
|
+
on 's', 'skip-primary-key-check', 'Skip primary key check when generating DDL'
|
153
155
|
end
|
154
156
|
end
|
155
157
|
|
@@ -241,14 +243,14 @@ module Flydata
|
|
241
243
|
create_flydata_ctl_table = mp['initial_sync']
|
242
244
|
while !stdout.eof?
|
243
245
|
begin
|
244
|
-
mysql_tabledef =
|
246
|
+
mysql_tabledef = FlydataCore::TableDef::MysqlTableDef.create(stdout, skip_primary_key_check: opts.skip_primary_key_check?)
|
245
247
|
if mysql_tabledef.nil?
|
246
248
|
# stream had no more create table definition
|
247
249
|
break
|
248
250
|
end
|
249
251
|
flydata_tabledef = mysql_tabledef.to_flydata_tabledef
|
250
|
-
puts
|
251
|
-
rescue TableDefError=> e
|
252
|
+
puts FlydataCore::TableDef::RedshiftTableDef.from_flydata_tabledef(flydata_tabledef, flydata_ctl_table: create_flydata_ctl_table, schema_name: schema_name, ctl_only: opts.ctl_only?)
|
253
|
+
rescue FlydataCore::TableDefError=> e
|
252
254
|
error_list << e.err_hash
|
253
255
|
next
|
254
256
|
end
|
@@ -515,16 +517,17 @@ Thank you for using FlyData!
|
|
515
517
|
sync_fm = Flydata::FileUtil::SyncFileManager.new(de)
|
516
518
|
info = sync_fm.load_dump_pos
|
517
519
|
if info[:status] == STATUS_COMPLETE
|
518
|
-
puts "Starting FlyData Agent..."
|
519
520
|
if de['mysql_data_entry_preference']['initial_sync']
|
520
521
|
sync_fm.save_binlog(info[:binlog_pos])
|
521
522
|
end
|
522
523
|
sync_fm.move_table_binlog_files(de['mysql_data_entry_preference']['tables'].split(','))
|
523
524
|
sync_fm.reset_table_position_files(de['mysql_data_entry_preference']['tables'].split(','))
|
524
525
|
sync_fm.backup_dump_dir
|
525
|
-
|
526
|
-
|
527
|
-
|
526
|
+
unless opts.no_flydata_start?
|
527
|
+
puts "Starting FlyData Agent..."
|
528
|
+
Flydata::Command::Sender.new.start(quiet: true)
|
529
|
+
puts " -> Done"
|
530
|
+
end
|
528
531
|
dashboard_url = "#{flydata.flydata_api_host}/dashboard"
|
529
532
|
redshift_console_url = "#{flydata.flydata_api_host}/redshift_clusters/query/new"
|
530
533
|
last_message = ALL_DONE_MESSAGE_TEMPLATE % [redshift_console_url, dashboard_url]
|
@@ -10,7 +10,7 @@
|
|
10
10
|
# - ADD COLUMN (col_name, col_def, ...)
|
11
11
|
# - DROP COLUMN col_name
|
12
12
|
|
13
|
-
require 'flydata/table_def/mysql_table_def'
|
13
|
+
require 'flydata-core/table_def/mysql_table_def'
|
14
14
|
|
15
15
|
grammar MysqlAlterTable
|
16
16
|
|
@@ -182,6 +182,20 @@ grammar MysqlAlterTable
|
|
182
182
|
}
|
183
183
|
end
|
184
184
|
}
|
185
|
+
/ alter_sym opt_column sp field_ident sp set_sym sp default_sym sp signed_literal {
|
186
|
+
def action
|
187
|
+
{ action: :alter_column,
|
188
|
+
support_level: :nonbreaking,
|
189
|
+
}
|
190
|
+
end
|
191
|
+
}
|
192
|
+
/ alter_sym opt_column sp field_ident sp drop_sym sp default_sym {
|
193
|
+
def action
|
194
|
+
{ action: :alter_column,
|
195
|
+
support_level: :nonbreaking,
|
196
|
+
}
|
197
|
+
end
|
198
|
+
}
|
185
199
|
/ rename_sym opt_to nsp table_ident {
|
186
200
|
def action
|
187
201
|
{ action: :rename_table }
|
@@ -202,13 +216,27 @@ grammar MysqlAlterTable
|
|
202
216
|
{ action: :default_charset }
|
203
217
|
end
|
204
218
|
}
|
205
|
-
/force_sym {
|
219
|
+
/ force_sym {
|
206
220
|
def action
|
207
221
|
{ action: :force,
|
208
222
|
support_level: :nonbreaking,
|
209
223
|
}
|
210
224
|
end
|
211
225
|
}
|
226
|
+
/ alter_algorithm_option {
|
227
|
+
def action
|
228
|
+
{ action: :algorithm,
|
229
|
+
support_level: :nonbreaking
|
230
|
+
}
|
231
|
+
end
|
232
|
+
}
|
233
|
+
/ alter_lock_option {
|
234
|
+
def action
|
235
|
+
{ action: :lock,
|
236
|
+
support_level: :nonbreaking
|
237
|
+
}
|
238
|
+
end
|
239
|
+
}
|
212
240
|
/ [^,]+ {
|
213
241
|
def action
|
214
242
|
raise "unsupported ALTER TABLE query. Contact FlyData Support"
|
@@ -309,7 +337,20 @@ grammar MysqlAlterTable
|
|
309
337
|
end
|
310
338
|
end
|
311
339
|
}
|
312
|
-
/
|
340
|
+
/ constraint_sym sp foreign_sym sp key_sym opt_ident nsp '(' key_list ')' sp references {
|
341
|
+
def action
|
342
|
+
{ action: :add_foreign_key_constraint,
|
343
|
+
support_level: :nonbreaking,
|
344
|
+
}
|
345
|
+
end
|
346
|
+
}
|
347
|
+
/ opt_constraint foreign_sym sp key_sym opt_ident nsp '(' key_list ')' sp references {
|
348
|
+
def action
|
349
|
+
{ action: :add_foreign_key_constraint,
|
350
|
+
support_level: :nonbreaking,
|
351
|
+
}
|
352
|
+
end
|
353
|
+
}
|
313
354
|
/ constraint_sym sp check_constraint {
|
314
355
|
def action
|
315
356
|
{ action: :add_check_constraint,
|
@@ -335,7 +376,7 @@ grammar MysqlAlterTable
|
|
335
376
|
end
|
336
377
|
|
337
378
|
rule references
|
338
|
-
|
379
|
+
references_sym sp table_ident opt_ref_list opt_match_clause opt_on_update_delete
|
339
380
|
end
|
340
381
|
|
341
382
|
rule table_ident
|
@@ -354,25 +395,25 @@ grammar MysqlAlterTable
|
|
354
395
|
end
|
355
396
|
|
356
397
|
rule opt_match_clause
|
357
|
-
( sp (
|
398
|
+
( sp ( match_sym sp full_sym / match_sym sp partial_sym / match_sym sp simple_sym ) )?
|
358
399
|
end
|
359
400
|
|
360
401
|
rule opt_on_update_delete
|
361
402
|
( sp (
|
362
|
-
|
363
|
-
/
|
364
|
-
/
|
365
|
-
/
|
403
|
+
on_sym sp update_sym sp delete_option sp on_sym sp delete_sym sp delete_option
|
404
|
+
/ on_sym sp delete_sym sp delete_option sp on_sym sp update_sym sp delete_option
|
405
|
+
/ on_sym sp update_sym sp delete_option
|
406
|
+
/ on_sym sp delete_sym sp delete_option
|
366
407
|
)
|
367
408
|
)?
|
368
409
|
end
|
369
410
|
|
370
411
|
rule delete_option
|
371
|
-
|
372
|
-
/
|
373
|
-
/
|
374
|
-
/
|
375
|
-
/
|
412
|
+
restrict_sym
|
413
|
+
/ cascade_sym
|
414
|
+
/ set_sym sp null_sym
|
415
|
+
/ no_sym sp action_sym
|
416
|
+
/ set_sym sp default_sym
|
376
417
|
end
|
377
418
|
|
378
419
|
rule opt_constraint
|
@@ -384,7 +425,7 @@ grammar MysqlAlterTable
|
|
384
425
|
end
|
385
426
|
|
386
427
|
rule constraint_sym
|
387
|
-
'constraint'i
|
428
|
+
'constraint'i ![A-Za-z0-9_]
|
388
429
|
end
|
389
430
|
|
390
431
|
rule constraint_key_type
|
@@ -407,7 +448,7 @@ grammar MysqlAlterTable
|
|
407
448
|
end
|
408
449
|
|
409
450
|
rule key_sym
|
410
|
-
'key'i
|
451
|
+
'key'i ![A-Za-z0-9_]
|
411
452
|
end
|
412
453
|
|
413
454
|
rule keys_sym
|
@@ -431,7 +472,55 @@ grammar MysqlAlterTable
|
|
431
472
|
end
|
432
473
|
|
433
474
|
rule foreign_sym
|
434
|
-
'foreign'i
|
475
|
+
'foreign'i ![A-Za-z0-9_]
|
476
|
+
end
|
477
|
+
|
478
|
+
rule references_sym
|
479
|
+
'references'i ![A-Za-z0-9_]
|
480
|
+
end
|
481
|
+
|
482
|
+
rule on_sym
|
483
|
+
'on'i ![A-Za-z0-9_]
|
484
|
+
end
|
485
|
+
|
486
|
+
rule match_sym
|
487
|
+
'match'i ![A-Za-z0-9_]
|
488
|
+
end
|
489
|
+
|
490
|
+
rule full_sym
|
491
|
+
'full'i ![A-Za-z0-9_]
|
492
|
+
end
|
493
|
+
|
494
|
+
rule partial_sym
|
495
|
+
'partial'i ![A-Za-z0-9_]
|
496
|
+
end
|
497
|
+
|
498
|
+
rule simple_sym
|
499
|
+
'simple'i ![A-Za-z0-9_]
|
500
|
+
end
|
501
|
+
|
502
|
+
rule update_sym
|
503
|
+
'update'i ![A-Za-z0-9_]
|
504
|
+
end
|
505
|
+
|
506
|
+
rule delete_sym
|
507
|
+
'delete'i ![A-Za-z0-9_]
|
508
|
+
end
|
509
|
+
|
510
|
+
rule restrict_sym
|
511
|
+
'restrict'i ![A-Za-z0-9_]
|
512
|
+
end
|
513
|
+
|
514
|
+
rule cascade_sym
|
515
|
+
'cascade'i ![A-Za-z0-9_]
|
516
|
+
end
|
517
|
+
|
518
|
+
rule no_sym
|
519
|
+
'no'i ![A-Za-z0-9_]
|
520
|
+
end
|
521
|
+
|
522
|
+
rule action_sym
|
523
|
+
'action'i ![A-Za-z0-9_]
|
435
524
|
end
|
436
525
|
|
437
526
|
rule fulltext
|
@@ -649,7 +738,7 @@ grammar MysqlAlterTable
|
|
649
738
|
def data_type
|
650
739
|
meta = (meta_text.text_value.size > 1) ? meta_text.text_value : ''
|
651
740
|
type = data_type_name.text_value.downcase + meta
|
652
|
-
type =
|
741
|
+
type = FlydataCore::TableDef::MysqlTableDef.convert_to_flydata_type(type)
|
653
742
|
type << " unsigned" if !unsigned.terminal?
|
654
743
|
ret = { type: type }
|
655
744
|
ret[:zefofill] = true if !zerofill.terminal?
|
@@ -1357,4 +1446,25 @@ grammar MysqlAlterTable
|
|
1357
1446
|
( sp column_sym )?
|
1358
1447
|
end
|
1359
1448
|
|
1449
|
+
rule alter_algorithm_option
|
1450
|
+
algorithm_sym opt_equal nsp default_sym
|
1451
|
+
/ algorithm_sym opt_equal nsp ident
|
1452
|
+
end
|
1453
|
+
|
1454
|
+
rule algorithm_sym
|
1455
|
+
'algorithm'i ![A-Za-z0-9_]
|
1456
|
+
end
|
1457
|
+
|
1458
|
+
rule alter_sym
|
1459
|
+
'alter'i ![A-Za-z0-9_]
|
1460
|
+
end
|
1461
|
+
|
1462
|
+
rule lock_sym
|
1463
|
+
'lock'i ![A-Za-z0-9_]
|
1464
|
+
end
|
1465
|
+
|
1466
|
+
rule alter_lock_option
|
1467
|
+
lock_sym opt_equal nsp default_sym
|
1468
|
+
/ lock_sym opt_equal nsp ident
|
1469
|
+
end
|
1360
1470
|
end
|
data/lib/flydata.rb
CHANGED
@@ -1,4 +1,14 @@
|
|
1
|
-
#
|
1
|
+
# load_path settings
|
2
|
+
def append_load_path_if_not_exist(new_lib_path)
|
3
|
+
absolute_path = File.realpath(new_lib_path)
|
4
|
+
$LOAD_PATH.unshift absolute_path unless $LOAD_PATH.include? absolute_path
|
5
|
+
end
|
6
|
+
flydata_top_dir = File.realpath('../../', __FILE__)
|
7
|
+
flydata_core_dir = File.join(flydata_top_dir, 'flydata-core')
|
8
|
+
flydata_core_lib_dir = File.realpath('lib', flydata_core_dir)
|
9
|
+
append_load_path_if_not_exist(flydata_core_lib_dir)
|
10
|
+
|
11
|
+
# require common libs
|
2
12
|
require 'active_support/core_ext/string'
|
3
13
|
require 'active_support/dependencies'
|
4
14
|
require 'active_support/time'
|