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
@@ -621,7 +621,7 @@ describe 'MysqlAlterTableParser' do
|
|
621
621
|
end
|
622
622
|
end
|
623
623
|
end
|
624
|
-
shared_examples "test key list" do |*examples|
|
624
|
+
shared_examples "test key list without order" do |*examples|
|
625
625
|
context "with a single key" do
|
626
626
|
it_behaves_like *examples do
|
627
627
|
let(:key_list) { " testKey" }
|
@@ -634,6 +634,15 @@ describe 'MysqlAlterTableParser' do
|
|
634
634
|
let(:expected_key_list) { [ "testKey" ] }
|
635
635
|
end
|
636
636
|
end
|
637
|
+
context "with multiple keys" do
|
638
|
+
it_behaves_like *examples do
|
639
|
+
let(:key_list) { " testKey1, testKey2" }
|
640
|
+
let(:expected_key_list) { [ "testKey1", "testKey2" ] }
|
641
|
+
end
|
642
|
+
end
|
643
|
+
end
|
644
|
+
shared_examples "test key list" do |*examples|
|
645
|
+
include_examples "test key list without order", *examples
|
637
646
|
context "with multiple keys with order" do
|
638
647
|
it_behaves_like *examples do
|
639
648
|
let(:key_list) { " testKey1 ASC, testKey2 desc" }
|
@@ -644,11 +653,16 @@ describe 'MysqlAlterTableParser' do
|
|
644
653
|
|
645
654
|
shared_examples "test constraint keyword" do |*examples|
|
646
655
|
context "with constraint keyword" do
|
647
|
-
context "with constraint name" do
|
656
|
+
context "with backticked constraint name" do
|
648
657
|
it_behaves_like *examples do
|
649
658
|
let(:constraint_keyword) { " CONSTRAINT `chkName`" }
|
650
659
|
end
|
651
660
|
end
|
661
|
+
context "with constraint name" do
|
662
|
+
it_behaves_like *examples do
|
663
|
+
let(:constraint_keyword) { " CONSTRAINT chkName" }
|
664
|
+
end
|
665
|
+
end
|
652
666
|
context "without constraint name" do
|
653
667
|
it_behaves_like *examples do
|
654
668
|
let(:constraint_keyword) { " CONSTRAINT" }
|
@@ -944,6 +958,123 @@ describe 'MysqlAlterTableParser' do
|
|
944
958
|
end
|
945
959
|
end
|
946
960
|
end
|
961
|
+
shared_examples "test optional equal" do |*examples|
|
962
|
+
context "with EQ" do
|
963
|
+
it_behaves_like *examples do
|
964
|
+
let(:equal){"="}
|
965
|
+
end
|
966
|
+
end
|
967
|
+
context "with EQ and a space before it" do
|
968
|
+
it_behaves_like *examples do
|
969
|
+
let(:equal){" ="}
|
970
|
+
end
|
971
|
+
end
|
972
|
+
context "with SET_VAR" do
|
973
|
+
it_behaves_like *examples do
|
974
|
+
let(:equal){":="}
|
975
|
+
end
|
976
|
+
end
|
977
|
+
context "with none" do
|
978
|
+
it_behaves_like *examples do
|
979
|
+
let(:equal){""}
|
980
|
+
end
|
981
|
+
end
|
982
|
+
end
|
983
|
+
shared_examples "test signed literal" do |*examples|
|
984
|
+
context "number literal" do
|
985
|
+
it_behaves_like *examples do
|
986
|
+
let(:signed_literal){"100"}
|
987
|
+
end
|
988
|
+
end
|
989
|
+
context "signed number literal" do
|
990
|
+
it_behaves_like *examples do
|
991
|
+
let(:signed_literal){"100"}
|
992
|
+
end
|
993
|
+
end
|
994
|
+
context "signed number literal within quotes" do
|
995
|
+
it_behaves_like *examples do
|
996
|
+
let(:signed_literal){"'+100'"}
|
997
|
+
end
|
998
|
+
end
|
999
|
+
context "null" do
|
1000
|
+
it_behaves_like *examples do
|
1001
|
+
let(:signed_literal){"NULL"}
|
1002
|
+
end
|
1003
|
+
end
|
1004
|
+
context "boolean" do
|
1005
|
+
it_behaves_like *examples do
|
1006
|
+
let(:signed_literal){"TRUE"}
|
1007
|
+
end
|
1008
|
+
end
|
1009
|
+
context "quoted string" do
|
1010
|
+
it_behaves_like *examples do
|
1011
|
+
let(:signed_literal){"'Hello World!'"}
|
1012
|
+
end
|
1013
|
+
end
|
1014
|
+
end
|
1015
|
+
shared_examples "test optional reference list" do |*examples|
|
1016
|
+
context "with no references" do
|
1017
|
+
it_behaves_like *examples do
|
1018
|
+
let(:opt_ref_list) {""}
|
1019
|
+
end
|
1020
|
+
end
|
1021
|
+
context "with single reference" do
|
1022
|
+
it_behaves_like *examples do
|
1023
|
+
let(:opt_ref_list) {"(id)"}
|
1024
|
+
end
|
1025
|
+
end
|
1026
|
+
context "with multiple references" do
|
1027
|
+
it_behaves_like *examples do
|
1028
|
+
let(:opt_ref_list) {" (id_1, id2)"}
|
1029
|
+
end
|
1030
|
+
end
|
1031
|
+
end
|
1032
|
+
shared_examples "test optional match clause" do |*examples|
|
1033
|
+
context "no match clause" do
|
1034
|
+
it_behaves_like *examples do
|
1035
|
+
let(:opt_match_clause) {""}
|
1036
|
+
end
|
1037
|
+
end
|
1038
|
+
context "match full" do
|
1039
|
+
it_behaves_like *examples do
|
1040
|
+
let(:opt_match_clause) {" MATCH FULL"}
|
1041
|
+
end
|
1042
|
+
end
|
1043
|
+
context "match partial" do
|
1044
|
+
it_behaves_like *examples do
|
1045
|
+
let(:opt_match_clause) {" match PARTIAL"}
|
1046
|
+
end
|
1047
|
+
end
|
1048
|
+
end
|
1049
|
+
shared_examples "test optional on update delete" do |*examples|
|
1050
|
+
context "no on update delete clause" do
|
1051
|
+
it_behaves_like *examples do
|
1052
|
+
let(:opt_on_update_delete) {""}
|
1053
|
+
end
|
1054
|
+
end
|
1055
|
+
context "on update and on delete" do
|
1056
|
+
it_behaves_like "test delete option", *examples do
|
1057
|
+
let(:opt_on_update_delete) {" on update #{delete_option} on delete #{delete_option}"}
|
1058
|
+
end
|
1059
|
+
end
|
1060
|
+
context "on update only" do
|
1061
|
+
it_behaves_like "test delete option", *examples do
|
1062
|
+
let(:opt_on_update_delete) {" ON UPDATE #{delete_option}"}
|
1063
|
+
end
|
1064
|
+
end
|
1065
|
+
end
|
1066
|
+
shared_examples "test delete option" do |*examples|
|
1067
|
+
context "restrict" do
|
1068
|
+
it_behaves_like *examples do
|
1069
|
+
let(:delete_option) {"restrict"}
|
1070
|
+
end
|
1071
|
+
end
|
1072
|
+
context "set null" do
|
1073
|
+
it_behaves_like *examples do
|
1074
|
+
let(:delete_option) {"SET NULL"}
|
1075
|
+
end
|
1076
|
+
end
|
1077
|
+
end
|
947
1078
|
context 'add index' do
|
948
1079
|
let(:action) { :add_index }
|
949
1080
|
context "with a simple add index" do
|
@@ -1112,6 +1243,16 @@ describe 'MysqlAlterTableParser' do
|
|
1112
1243
|
# "a debug parser"
|
1113
1244
|
"a parser parsing a single action alter table query"
|
1114
1245
|
end
|
1246
|
+
context 'add foreign key' do
|
1247
|
+
let(:action) { :add_foreign_key_constraint }
|
1248
|
+
let(:alter_table_action) { "add#{constraint_keyword} foreign key#{key_name}(#{key_list}) references employees#{opt_ref_list}#{opt_match_clause}#{opt_on_update_delete}"}
|
1249
|
+
it_behaves_like "test constraint keyword",
|
1250
|
+
"test key name", "test key list without order",
|
1251
|
+
"test optional reference list",
|
1252
|
+
"test optional match clause",
|
1253
|
+
"test optional on update delete",
|
1254
|
+
"a parser parsing a nonbreaking query"
|
1255
|
+
end
|
1115
1256
|
context "enable keys" do
|
1116
1257
|
let(:alter_table_action) { "ENABLE KEYS" }
|
1117
1258
|
let(:action) { :enable_keys }
|
@@ -1589,5 +1730,35 @@ describe 'MysqlAlterTableParser' do
|
|
1589
1730
|
}
|
1590
1731
|
it_behaves_like "test optional column", "test column definition", "test position", "test parser parsing a change column"
|
1591
1732
|
end
|
1733
|
+
context 'algorithm and lock option' do
|
1734
|
+
["ALGORITHM", "LOCK"].each do |op|
|
1735
|
+
context "#{op}" do
|
1736
|
+
let(:action) { op.downcase.to_sym }
|
1737
|
+
context "with default #{op}" do
|
1738
|
+
let(:alter_table_action) { "#{op}#{equal} DEFAULT" }
|
1739
|
+
it_behaves_like "test optional equal", "a parser parsing a nonbreaking query"
|
1740
|
+
end
|
1741
|
+
context "with any #{op}" do
|
1742
|
+
let(:alter_table_action) { "#{op.downcase}#{equal} #{ident}" }
|
1743
|
+
it_behaves_like "test optional equal", "test identifier", "a parser parsing a nonbreaking query"
|
1744
|
+
end
|
1745
|
+
context "without spaces between eq and #{op}" do
|
1746
|
+
let(:alter_table_action) { "#{op}=#{ident}" }
|
1747
|
+
it_behaves_like "test identifier", "a parser parsing a nonbreaking query"
|
1748
|
+
end
|
1749
|
+
end
|
1750
|
+
end
|
1751
|
+
end
|
1752
|
+
context 'alter column' do
|
1753
|
+
let(:action) { :alter_column }
|
1754
|
+
context 'set default' do
|
1755
|
+
let(:alter_table_action) { "alter#{column} #{ident} set DEFAULT #{signed_literal}" }
|
1756
|
+
it_behaves_like "test optional column", "test field identifier", "test signed literal", "a parser parsing a nonbreaking query"
|
1757
|
+
end
|
1758
|
+
context 'drop default' do
|
1759
|
+
let(:alter_table_action) { "alter#{column} #{ident} DROP default" }
|
1760
|
+
it_behaves_like "test optional column", "test field identifier", "a parser parsing a nonbreaking query"
|
1761
|
+
end
|
1762
|
+
end
|
1592
1763
|
end
|
1593
1764
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
-
|
2
|
+
|
3
3
|
require 'rspec'
|
4
4
|
require 'active_record' # for Flydata::Heroku
|
5
5
|
require 'protected_attributes'
|
@@ -30,6 +30,8 @@ RSpec.configure do |config|
|
|
30
30
|
example.run
|
31
31
|
raise ActiveRecord::Rollback
|
32
32
|
end
|
33
|
+
else
|
34
|
+
example.run
|
33
35
|
end
|
34
36
|
end
|
35
37
|
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.2.
|
4
|
+
version: 0.2.18
|
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: 2014-11-
|
15
|
+
date: 2014-11-27 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: rest-client
|
@@ -399,7 +399,6 @@ executables:
|
|
399
399
|
extensions: []
|
400
400
|
extra_rdoc_files: []
|
401
401
|
files:
|
402
|
-
- .gitignore
|
403
402
|
- .rspec
|
404
403
|
- Gemfile
|
405
404
|
- Gemfile.lock
|
@@ -413,6 +412,38 @@ files:
|
|
413
412
|
- bin/fdmysqldump
|
414
413
|
- bin/flydata
|
415
414
|
- bin/serverinfo
|
415
|
+
- flydata-core/.gitignore
|
416
|
+
- flydata-core/.rspec
|
417
|
+
- flydata-core/.travis.yml
|
418
|
+
- flydata-core/Gemfile
|
419
|
+
- flydata-core/Gemfile.lock
|
420
|
+
- flydata-core/lib/flydata-core.rb
|
421
|
+
- flydata-core/lib/flydata-core/core_ext.rb
|
422
|
+
- flydata-core/lib/flydata-core/core_ext/module.rb
|
423
|
+
- flydata-core/lib/flydata-core/core_ext/module/include.rb
|
424
|
+
- flydata-core/lib/flydata-core/core_ext/object.rb
|
425
|
+
- flydata-core/lib/flydata-core/core_ext/object/prepend.rb
|
426
|
+
- flydata-core/lib/flydata-core/errors.rb
|
427
|
+
- flydata-core/lib/flydata-core/logger.rb
|
428
|
+
- flydata-core/lib/flydata-core/table_def.rb
|
429
|
+
- flydata-core/lib/flydata-core/table_def/mysql_table_def.rb
|
430
|
+
- flydata-core/lib/flydata-core/table_def/redshift_table_def.rb
|
431
|
+
- flydata-core/lib/flydata-core/thread_context.rb
|
432
|
+
- flydata-core/spec/spec_helper.rb
|
433
|
+
- flydata-core/spec/table_def/mysql_table_def_spec.rb
|
434
|
+
- flydata-core/spec/table_def/mysql_to_redshift_table_def_spec.rb
|
435
|
+
- flydata-core/spec/table_def/mysqldump_test_bit_table.dump
|
436
|
+
- flydata-core/spec/table_def/mysqldump_test_foreign_key.dump
|
437
|
+
- flydata-core/spec/table_def/mysqldump_test_table_all.dump
|
438
|
+
- flydata-core/spec/table_def/mysqldump_test_table_column_comment.dump
|
439
|
+
- flydata-core/spec/table_def/mysqldump_test_table_enum.dump
|
440
|
+
- flydata-core/spec/table_def/mysqldump_test_table_multi_pk.dump
|
441
|
+
- flydata-core/spec/table_def/mysqldump_test_table_no_pk.dump
|
442
|
+
- flydata-core/spec/table_def/mysqldump_test_unique_key.dump
|
443
|
+
- flydata-core/spec/table_def/mysqldump_test_unique_key2.dump
|
444
|
+
- flydata-core/spec/table_def/mysqldump_test_unique_key3.dump
|
445
|
+
- flydata-core/spec/table_def/mysqldump_test_unsigned.dump
|
446
|
+
- flydata-core/spec/table_def/redshift_table_def_spec.rb
|
416
447
|
- flydata.gemspec
|
417
448
|
- lib/fly_data_model.rb
|
418
449
|
- lib/flydata.rb
|
@@ -468,9 +499,6 @@ files:
|
|
468
499
|
- lib/flydata/preference/data_entry_preference.rb
|
469
500
|
- lib/flydata/proxy.rb
|
470
501
|
- lib/flydata/sync_file_manager.rb
|
471
|
-
- lib/flydata/table_def.rb
|
472
|
-
- lib/flydata/table_def/mysql_table_def.rb
|
473
|
-
- lib/flydata/table_def/redshift_table_def.rb
|
474
502
|
- lib/flydata/util/encryptor.rb
|
475
503
|
- spec/fluent_plugins_spec_helper.rb
|
476
504
|
- spec/fly_data_model_spec.rb
|
@@ -488,18 +516,6 @@ files:
|
|
488
516
|
- spec/flydata/parser/mysql/alter_table_parser_spec.rb
|
489
517
|
- spec/flydata/parser/mysql/dump_parser_spec.rb
|
490
518
|
- spec/flydata/sync_file_manager_spec.rb
|
491
|
-
- spec/flydata/table_def/mysql_table_def_spec.rb
|
492
|
-
- spec/flydata/table_def/mysqldump_test_foreign_key.dump
|
493
|
-
- spec/flydata/table_def/mysqldump_test_table_all.dump
|
494
|
-
- spec/flydata/table_def/mysqldump_test_table_column_comment.dump
|
495
|
-
- spec/flydata/table_def/mysqldump_test_table_enum.dump
|
496
|
-
- spec/flydata/table_def/mysqldump_test_table_multi_pk.dump
|
497
|
-
- spec/flydata/table_def/mysqldump_test_table_no_pk.dump
|
498
|
-
- spec/flydata/table_def/mysqldump_test_unique_key.dump
|
499
|
-
- spec/flydata/table_def/mysqldump_test_unique_key2.dump
|
500
|
-
- spec/flydata/table_def/mysqldump_test_unique_key3.dump
|
501
|
-
- spec/flydata/table_def/mysqldump_test_unsigned.dump
|
502
|
-
- spec/flydata/table_def/redshift_table_def_spec.rb
|
503
519
|
- spec/flydata/util/encryptor_spec.rb
|
504
520
|
- spec/flydata_spec.rb
|
505
521
|
- spec/spec_helper.rb
|
data/.gitignore
DELETED
@@ -1,49 +0,0 @@
|
|
1
|
-
# rcov generated
|
2
|
-
coverage
|
3
|
-
coverage.data
|
4
|
-
|
5
|
-
# rdoc generated
|
6
|
-
rdoc
|
7
|
-
|
8
|
-
# yard generated
|
9
|
-
doc
|
10
|
-
.yardoc
|
11
|
-
|
12
|
-
# bundler
|
13
|
-
.bundle
|
14
|
-
|
15
|
-
# jeweler generated
|
16
|
-
pkg
|
17
|
-
|
18
|
-
# Have editor/IDE/OS specific files you need to ignore? Consider using a global gitignore:
|
19
|
-
#
|
20
|
-
# * Create a file at ~/.gitignore
|
21
|
-
# * Include files you want ignored
|
22
|
-
# * Run: git config --global core.excludesfile ~/.gitignore
|
23
|
-
#
|
24
|
-
# After doing this, these files will be ignored in all your git projects,
|
25
|
-
# saving you from having to 'pollute' every project you touch with them
|
26
|
-
#
|
27
|
-
# Not sure what to needs to be ignored for particular editors/OSes? Here's some ideas to get you started. (Remember, remove the leading # of the line)
|
28
|
-
#
|
29
|
-
# For MacOS:
|
30
|
-
#
|
31
|
-
#.DS_Store
|
32
|
-
|
33
|
-
# For TextMate
|
34
|
-
#*.tmproj
|
35
|
-
#tmtags
|
36
|
-
|
37
|
-
# For emacs:
|
38
|
-
#*~
|
39
|
-
#\#*
|
40
|
-
#.\#*
|
41
|
-
|
42
|
-
# For vim:
|
43
|
-
#*.swp
|
44
|
-
|
45
|
-
# For redcar:
|
46
|
-
#.redcar
|
47
|
-
|
48
|
-
# For rubinius:
|
49
|
-
#*.rbc
|
data/lib/flydata/table_def.rb
DELETED