masamune 0.13.0 → 0.13.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/masamune/actions/date_parse.rb +1 -1
- data/lib/masamune/commands/postgres_admin.rb +19 -3
- data/lib/masamune/data_plan/rule.rb +14 -5
- data/lib/masamune/schema/fact.rb +14 -3
- data/lib/masamune/schema/table.rb +7 -2
- data/lib/masamune/tasks/dump_thor.rb +12 -5
- data/lib/masamune/template.rb +1 -1
- data/lib/masamune/transform/define_inheritance.psql.erb +28 -0
- data/lib/masamune/transform/define_schema.rb +5 -2
- data/lib/masamune/transform/define_table.psql.erb +23 -8
- data/lib/masamune/transform/define_table.rb +95 -4
- data/lib/masamune/transform/denormalize_table.rb +3 -0
- data/lib/masamune/transform/operator.rb +10 -1
- data/lib/masamune/transform/replace_table.psql.erb +2 -6
- data/lib/masamune/version.rb +1 -1
- data/spec/masamune/commands/postgres_admin_spec.rb +16 -1
- data/spec/masamune/data_plan/engine_spec.rb +2 -2
- data/spec/masamune/data_plan/rule_spec.rb +25 -10
- data/spec/masamune/schema/fact_spec.rb +84 -44
- data/spec/masamune/tasks/dump_thor_spec.rb +46 -6
- data/spec/masamune/thor_spec.rb +12 -27
- data/spec/masamune/transform/define_schema_spec.rb +30 -6
- data/spec/masamune/transform/define_table.fact_spec.rb +11 -0
- data/spec/masamune/transform/define_table.table_spec.rb +106 -18
- data/spec/masamune/transform/denormalize_table_spec.rb +71 -2
- data/spec/masamune/transform/rollup_fact_spec.rb +3 -0
- data/spec/masamune/transform/stage_fact_spec.rb +1 -0
- data/spec/support/rspec/example/task_example_group.rb +17 -0
- metadata +3 -2
@@ -38,6 +38,12 @@ describe Masamune::Transform::DefineSchema do
|
|
38
38
|
column 'preferences', type: :key_value, null: true
|
39
39
|
end
|
40
40
|
|
41
|
+
fact 'visits', partition: 'y%Ym%m' do
|
42
|
+
partition :y
|
43
|
+
partition :m
|
44
|
+
measure 'total', type: :integer
|
45
|
+
end
|
46
|
+
|
41
47
|
file 'user' do
|
42
48
|
column 'tenant_id', type: :integer
|
43
49
|
column 'user_id', type: :integer
|
@@ -50,13 +56,31 @@ describe Masamune::Transform::DefineSchema do
|
|
50
56
|
end
|
51
57
|
end
|
52
58
|
|
53
|
-
|
59
|
+
context 'without options' do
|
60
|
+
subject(:result) { transform.define_schema(catalog, :postgres).to_s }
|
54
61
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
62
|
+
it 'should render combined template' do
|
63
|
+
is_expected.to eq Masamune::Template.combine \
|
64
|
+
Masamune::Transform::Operator.new('define_schema', source: catalog.postgres),
|
65
|
+
transform.define_table(catalog.postgres.dimensions['user_account_state']),
|
66
|
+
transform.define_table(catalog.postgres.dimensions['user']),
|
67
|
+
transform.define_table(catalog.postgres.facts['visits'])
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
context 'without start_date and stop_date' do
|
72
|
+
subject(:result) { transform.define_schema(catalog, :postgres, start_date: Date.civil(2015, 01, 01), stop_date: Date.civil(2015, 03, 15)).to_s }
|
73
|
+
|
74
|
+
it 'should render combined template' do
|
75
|
+
is_expected.to eq Masamune::Template.combine \
|
76
|
+
Masamune::Transform::Operator.new('define_schema', source: catalog.postgres),
|
77
|
+
transform.define_table(catalog.postgres.dimensions['user_account_state']),
|
78
|
+
transform.define_table(catalog.postgres.dimensions['user']),
|
79
|
+
transform.define_table(catalog.postgres.facts['visits']),
|
80
|
+
transform.define_table(catalog.postgres.facts['visits'].partition_table(Date.civil(2015, 01, 01))),
|
81
|
+
transform.define_table(catalog.postgres.facts['visits'].partition_table(Date.civil(2015, 02, 01))),
|
82
|
+
transform.define_table(catalog.postgres.facts['visits'].partition_table(Date.civil(2015, 03, 01)))
|
83
|
+
end
|
60
84
|
end
|
61
85
|
end
|
62
86
|
|
@@ -148,6 +148,17 @@ describe Masamune::Transform::DefineTable do
|
|
148
148
|
end
|
149
149
|
end
|
150
150
|
|
151
|
+
context 'for postgres fact partition with :post' do
|
152
|
+
let(:target) { catalog.postgres.visits_fact.partition_table(Date.civil(2015, 01, 01)) }
|
153
|
+
|
154
|
+
subject(:result) { transform.define_table(target, [], :post).to_s }
|
155
|
+
|
156
|
+
it 'should eq render table template' do
|
157
|
+
is_expected.to match /ALTER TABLE visits_fact_y2015m01 INHERIT visits_fact;/
|
158
|
+
is_expected.to match /ALTER TABLE visits_fact_y2015m01 ADD CONSTRAINT visits_fact_y2015m01_time_key_check CHECK \(time_key >= 1420070400 AND time_key < 1422748800\);/
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
151
162
|
describe 'for fact table from file with sources files' do
|
152
163
|
let(:files) { (1..3).map { |i| double(path: "output_#{i}.csv") } }
|
153
164
|
let(:target) { catalog.postgres.visits_fact }
|
@@ -24,9 +24,9 @@ require 'spec_helper'
|
|
24
24
|
|
25
25
|
describe Masamune::Transform::DefineTable do
|
26
26
|
let(:files) { [] }
|
27
|
-
let(:
|
27
|
+
let(:section) { :all }
|
28
28
|
|
29
|
-
subject { transform.define_table(target, files,
|
29
|
+
subject { transform.define_table(target, files, section).to_s }
|
30
30
|
|
31
31
|
context 'for postgres table with columns' do
|
32
32
|
before do
|
@@ -794,7 +794,7 @@ describe Masamune::Transform::DefineTable do
|
|
794
794
|
end
|
795
795
|
end
|
796
796
|
|
797
|
-
context 'for postgres table with index columns and
|
797
|
+
context 'for postgres table with index columns and section :pre' do
|
798
798
|
before do
|
799
799
|
catalog.schema :postgres do
|
800
800
|
table 'user' do
|
@@ -804,7 +804,7 @@ describe Masamune::Transform::DefineTable do
|
|
804
804
|
end
|
805
805
|
end
|
806
806
|
|
807
|
-
let(:
|
807
|
+
let(:section) { :pre }
|
808
808
|
let(:target) { catalog.postgres.user_table }
|
809
809
|
|
810
810
|
it 'should render table template' do
|
@@ -815,16 +815,11 @@ describe Masamune::Transform::DefineTable do
|
|
815
815
|
tenant_id INTEGER NOT NULL,
|
816
816
|
user_id INTEGER NOT NULL
|
817
817
|
);
|
818
|
-
|
819
|
-
DO $$ BEGIN
|
820
|
-
IF NOT EXISTS (SELECT 1 FROM pg_class c WHERE c.relname = 'user_table_pkey') THEN
|
821
|
-
ALTER TABLE user_table ADD PRIMARY KEY (id);
|
822
|
-
END IF; END $$;
|
823
818
|
EOS
|
824
819
|
end
|
825
820
|
end
|
826
821
|
|
827
|
-
context 'for postgres table with referenced tables and
|
822
|
+
context 'for postgres table with referenced tables and section :pre' do
|
828
823
|
before do
|
829
824
|
catalog.schema :postgres do
|
830
825
|
table 'user_account_state' do
|
@@ -842,7 +837,7 @@ describe Masamune::Transform::DefineTable do
|
|
842
837
|
end
|
843
838
|
end
|
844
839
|
|
845
|
-
let(:
|
840
|
+
let(:section) { :pre }
|
846
841
|
let(:target) { catalog.postgres.user_table }
|
847
842
|
|
848
843
|
it 'should render table template' do
|
@@ -853,16 +848,11 @@ describe Masamune::Transform::DefineTable do
|
|
853
848
|
user_account_state_table_id INTEGER NOT NULL DEFAULT default_user_account_state_table_id(),
|
854
849
|
name VARCHAR NOT NULL
|
855
850
|
);
|
856
|
-
|
857
|
-
DO $$ BEGIN
|
858
|
-
IF NOT EXISTS (SELECT 1 FROM pg_class c WHERE c.relname = 'user_table_pkey') THEN
|
859
|
-
ALTER TABLE user_table ADD PRIMARY KEY (id);
|
860
|
-
END IF; END $$;
|
861
851
|
EOS
|
862
852
|
end
|
863
853
|
end
|
864
854
|
|
865
|
-
context 'for postgres table with unique columns and
|
855
|
+
context 'for postgres table with unique columns and section :pre' do
|
866
856
|
before do
|
867
857
|
catalog.schema :postgres do
|
868
858
|
table 'user' do
|
@@ -872,7 +862,7 @@ describe Masamune::Transform::DefineTable do
|
|
872
862
|
end
|
873
863
|
end
|
874
864
|
|
875
|
-
let(:
|
865
|
+
let(:section) { :pre }
|
876
866
|
let(:target) { catalog.postgres.user_table }
|
877
867
|
|
878
868
|
it 'should render table template' do
|
@@ -883,11 +873,109 @@ describe Masamune::Transform::DefineTable do
|
|
883
873
|
tenant_id INTEGER NOT NULL,
|
884
874
|
user_id INTEGER NOT NULL
|
885
875
|
);
|
876
|
+
EOS
|
877
|
+
end
|
878
|
+
end
|
879
|
+
|
880
|
+
context 'for postgres table with unique columns and section :post' do
|
881
|
+
before do
|
882
|
+
catalog.schema :postgres do
|
883
|
+
table 'user' do
|
884
|
+
column 'tenant_id', unique: true
|
885
|
+
column 'user_id'
|
886
|
+
end
|
887
|
+
end
|
888
|
+
end
|
889
|
+
|
890
|
+
let(:section) { :post }
|
891
|
+
let(:target) { catalog.postgres.user_table }
|
892
|
+
|
893
|
+
it 'should render table template' do
|
894
|
+
is_expected.to eq <<-EOS.strip_heredoc
|
895
|
+
DO $$ BEGIN
|
896
|
+
IF NOT EXISTS (SELECT 1 FROM pg_class c WHERE c.relname = 'user_table_pkey') THEN
|
897
|
+
ALTER TABLE user_table ADD PRIMARY KEY (id);
|
898
|
+
END IF; END $$;
|
899
|
+
|
900
|
+
DO $$ BEGIN
|
901
|
+
IF NOT EXISTS (SELECT 1 FROM pg_class c WHERE c.relname = 'user_table_3854361_key') THEN
|
902
|
+
ALTER TABLE user_table ADD CONSTRAINT user_table_3854361_key UNIQUE(tenant_id);
|
903
|
+
END IF; END $$;
|
904
|
+
|
905
|
+
ANALYZE user_table;
|
906
|
+
EOS
|
907
|
+
end
|
908
|
+
end
|
909
|
+
|
910
|
+
context 'for postgres table with index columns and section :post' do
|
911
|
+
before do
|
912
|
+
catalog.schema :postgres do
|
913
|
+
table 'user' do
|
914
|
+
column 'tenant_id', index: true
|
915
|
+
column 'user_id', index: true
|
916
|
+
end
|
917
|
+
end
|
918
|
+
end
|
919
|
+
|
920
|
+
let(:section) { :post }
|
921
|
+
let(:target) { catalog.postgres.user_table }
|
886
922
|
|
923
|
+
it 'should render table template' do
|
924
|
+
is_expected.to eq <<-EOS.strip_heredoc
|
925
|
+
DO $$ BEGIN
|
926
|
+
IF NOT EXISTS (SELECT 1 FROM pg_class c WHERE c.relname = 'user_table_pkey') THEN
|
927
|
+
ALTER TABLE user_table ADD PRIMARY KEY (id);
|
928
|
+
END IF; END $$;
|
929
|
+
|
930
|
+
DO $$ BEGIN
|
931
|
+
IF NOT EXISTS (SELECT 1 FROM pg_class c WHERE c.relname = 'user_table_3854361_index') THEN
|
932
|
+
CREATE INDEX user_table_3854361_index ON user_table (tenant_id);
|
933
|
+
END IF; END $$;
|
934
|
+
|
935
|
+
DO $$ BEGIN
|
936
|
+
IF NOT EXISTS (SELECT 1 FROM pg_class c WHERE c.relname = 'user_table_e8701ad_index') THEN
|
937
|
+
CREATE INDEX user_table_e8701ad_index ON user_table (user_id);
|
938
|
+
END IF; END $$;
|
939
|
+
|
940
|
+
ANALYZE user_table;
|
941
|
+
EOS
|
942
|
+
end
|
943
|
+
end
|
944
|
+
|
945
|
+
context 'for postgres table with referenced tables and section :post' do
|
946
|
+
before do
|
947
|
+
catalog.schema :postgres do
|
948
|
+
table 'user_account_state' do
|
949
|
+
column 'name', type: :string, unique: true
|
950
|
+
column 'description', type: :string
|
951
|
+
row name: 'registered', description: 'Registered'
|
952
|
+
row name: 'active', description: 'Active', attributes: { default: true }
|
953
|
+
row name: 'inactive', description: 'Inactive'
|
954
|
+
end
|
955
|
+
|
956
|
+
table 'user' do
|
957
|
+
references :user_account_state
|
958
|
+
column 'name', type: :string
|
959
|
+
end
|
960
|
+
end
|
961
|
+
end
|
962
|
+
|
963
|
+
let(:section) { :post }
|
964
|
+
let(:target) { catalog.postgres.user_table }
|
965
|
+
|
966
|
+
it 'should render table template' do
|
967
|
+
is_expected.to eq <<-EOS.strip_heredoc
|
887
968
|
DO $$ BEGIN
|
888
969
|
IF NOT EXISTS (SELECT 1 FROM pg_class c WHERE c.relname = 'user_table_pkey') THEN
|
889
970
|
ALTER TABLE user_table ADD PRIMARY KEY (id);
|
890
971
|
END IF; END $$;
|
972
|
+
|
973
|
+
DO $$ BEGIN
|
974
|
+
IF NOT EXISTS (SELECT 1 FROM pg_constraint c WHERE c.conname = 'user_table_bd2027e_fkey') THEN
|
975
|
+
ALTER TABLE user_table ADD CONSTRAINT user_table_bd2027e_fkey FOREIGN KEY (user_account_state_table_id) REFERENCES user_account_state_table(id);
|
976
|
+
END IF; END $$;
|
977
|
+
|
978
|
+
ANALYZE user_table;
|
891
979
|
EOS
|
892
980
|
end
|
893
981
|
end
|
@@ -37,16 +37,19 @@ describe Masamune::Transform::DenormalizeTable do
|
|
37
37
|
end
|
38
38
|
|
39
39
|
dimension 'tenant', type: :two do
|
40
|
+
references :cluster, natural_key: true
|
40
41
|
column 'tenant_id', type: :integer, index: true, natural_key: true
|
41
42
|
end
|
42
43
|
|
43
44
|
dimension 'user', type: :two do
|
45
|
+
references :cluster
|
44
46
|
column 'tenant_id', type: :integer, index: true, natural_key: true
|
45
47
|
column 'user_id', type: :integer, index: true, natural_key: true
|
46
48
|
column 'name', type: :string
|
47
49
|
end
|
48
50
|
|
49
51
|
dimension 'user_agent', type: :mini do
|
52
|
+
references :cluster
|
50
53
|
column 'name', type: :string, unique: true, index: 'shared'
|
51
54
|
column 'version', type: :string, unique: true, index: 'shared', default: 'Unknown'
|
52
55
|
column 'mobile', type: :boolean, unique: true, index: 'shared', default: false
|
@@ -60,6 +63,7 @@ describe Masamune::Transform::DenormalizeTable do
|
|
60
63
|
references :user, label: 'manager'
|
61
64
|
references :user
|
62
65
|
references :user_agent
|
66
|
+
references :session, degenerate: true
|
63
67
|
measure 'total', type: :integer
|
64
68
|
end
|
65
69
|
end
|
@@ -69,6 +73,70 @@ describe Masamune::Transform::DenormalizeTable do
|
|
69
73
|
|
70
74
|
subject(:result) { transform.denormalize_table(target, options).to_s }
|
71
75
|
|
76
|
+
context 'with postgres fact without :columns' do
|
77
|
+
let(:target) { catalog.postgres.visits_fact }
|
78
|
+
let(:options) { { } }
|
79
|
+
|
80
|
+
it 'should eq render denormalize_table template' do
|
81
|
+
is_expected.to eq <<-EOS.strip_heredoc
|
82
|
+
SELECT
|
83
|
+
cluster_type.name AS cluster_type_name,
|
84
|
+
date_dimension.date_id AS date_dimension_date_id,
|
85
|
+
tenant_dimension.tenant_id AS tenant_dimension_tenant_id,
|
86
|
+
manager_user_dimension.tenant_id AS manager_user_dimension_tenant_id,
|
87
|
+
manager_user_dimension.user_id AS manager_user_dimension_user_id,
|
88
|
+
user_dimension.tenant_id AS user_dimension_tenant_id,
|
89
|
+
user_dimension.user_id AS user_dimension_user_id,
|
90
|
+
user_agent_type.name AS user_agent_type_name,
|
91
|
+
user_agent_type.version AS user_agent_type_version,
|
92
|
+
user_agent_type.mobile AS user_agent_type_mobile,
|
93
|
+
session_type_id AS session_type_id,
|
94
|
+
visits_fact.total,
|
95
|
+
visits_fact.time_key
|
96
|
+
FROM
|
97
|
+
visits_fact
|
98
|
+
LEFT JOIN
|
99
|
+
cluster_type
|
100
|
+
ON
|
101
|
+
cluster_type.id = visits_fact.cluster_type_id
|
102
|
+
LEFT JOIN
|
103
|
+
date_dimension
|
104
|
+
ON
|
105
|
+
date_dimension.id = visits_fact.date_dimension_id
|
106
|
+
LEFT JOIN
|
107
|
+
tenant_dimension
|
108
|
+
ON
|
109
|
+
tenant_dimension.id = visits_fact.tenant_dimension_id
|
110
|
+
LEFT JOIN
|
111
|
+
user_dimension AS manager_user_dimension
|
112
|
+
ON
|
113
|
+
manager_user_dimension.id = visits_fact.manager_user_dimension_id
|
114
|
+
LEFT JOIN
|
115
|
+
user_dimension
|
116
|
+
ON
|
117
|
+
user_dimension.id = visits_fact.user_dimension_id
|
118
|
+
LEFT JOIN
|
119
|
+
user_agent_type
|
120
|
+
ON
|
121
|
+
user_agent_type.id = visits_fact.user_agent_type_id
|
122
|
+
ORDER BY
|
123
|
+
cluster_type_name,
|
124
|
+
date_dimension_date_id,
|
125
|
+
tenant_dimension_tenant_id,
|
126
|
+
manager_user_dimension_tenant_id,
|
127
|
+
manager_user_dimension_user_id,
|
128
|
+
user_dimension_tenant_id,
|
129
|
+
user_dimension_user_id,
|
130
|
+
user_agent_type_name,
|
131
|
+
user_agent_type_version,
|
132
|
+
user_agent_type_mobile,
|
133
|
+
session_type_id,
|
134
|
+
total,
|
135
|
+
time_key
|
136
|
+
;
|
137
|
+
EOS
|
138
|
+
end
|
139
|
+
end
|
72
140
|
context 'with postgres fact with :columns' do
|
73
141
|
let(:target) { catalog.postgres.visits_fact }
|
74
142
|
let(:options) do
|
@@ -144,8 +212,7 @@ describe Masamune::Transform::DenormalizeTable do
|
|
144
212
|
let(:options) do
|
145
213
|
{
|
146
214
|
except: [
|
147
|
-
'cluster.name'
|
148
|
-
'last_modified_at'
|
215
|
+
'cluster.name'
|
149
216
|
]
|
150
217
|
}
|
151
218
|
end
|
@@ -162,6 +229,7 @@ describe Masamune::Transform::DenormalizeTable do
|
|
162
229
|
user_agent_type.name AS user_agent_type_name,
|
163
230
|
user_agent_type.version AS user_agent_type_version,
|
164
231
|
user_agent_type.mobile AS user_agent_type_mobile,
|
232
|
+
session_type_id AS session_type_id,
|
165
233
|
visits_fact.total,
|
166
234
|
visits_fact.time_key
|
167
235
|
FROM
|
@@ -196,6 +264,7 @@ describe Masamune::Transform::DenormalizeTable do
|
|
196
264
|
user_agent_type_name,
|
197
265
|
user_agent_type_version,
|
198
266
|
user_agent_type_mobile,
|
267
|
+
session_type_id,
|
199
268
|
total,
|
200
269
|
time_key
|
201
270
|
;
|
@@ -156,6 +156,7 @@ describe Masamune::Transform::RollupFact do
|
|
156
156
|
|
157
157
|
ALTER TABLE visits_hourly_fact_y2014m08 INHERIT visits_hourly_fact;
|
158
158
|
ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_time_key_check CHECK (time_key >= 1406851200 AND time_key < 1409529600);
|
159
|
+
|
159
160
|
ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_d6b9b38_fkey FOREIGN KEY (cluster_type_id) REFERENCES cluster_type(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
|
160
161
|
ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_0a531a8_fkey FOREIGN KEY (date_dimension_id) REFERENCES date_dimension(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
|
161
162
|
ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_d3950d9_fkey FOREIGN KEY (tenant_dimension_id) REFERENCES tenant_dimension(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
|
@@ -257,6 +258,7 @@ describe Masamune::Transform::RollupFact do
|
|
257
258
|
|
258
259
|
ALTER TABLE visits_daily_fact_y2014m08 INHERIT visits_daily_fact;
|
259
260
|
ALTER TABLE visits_daily_fact_y2014m08 ADD CONSTRAINT visits_daily_fact_y2014m08_time_key_check CHECK (time_key >= 1406851200 AND time_key < 1409529600);
|
261
|
+
|
260
262
|
ALTER TABLE visits_daily_fact_y2014m08 ADD CONSTRAINT visits_daily_fact_y2014m08_d6b9b38_fkey FOREIGN KEY (cluster_type_id) REFERENCES cluster_type(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
|
261
263
|
ALTER TABLE visits_daily_fact_y2014m08 ADD CONSTRAINT visits_daily_fact_y2014m08_0a531a8_fkey FOREIGN KEY (date_dimension_id) REFERENCES date_dimension(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
|
262
264
|
ALTER TABLE visits_daily_fact_y2014m08 ADD CONSTRAINT visits_daily_fact_y2014m08_d3950d9_fkey FOREIGN KEY (tenant_dimension_id) REFERENCES tenant_dimension(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
|
@@ -358,6 +360,7 @@ describe Masamune::Transform::RollupFact do
|
|
358
360
|
|
359
361
|
ALTER TABLE visits_monthly_fact_y2014m08 INHERIT visits_monthly_fact;
|
360
362
|
ALTER TABLE visits_monthly_fact_y2014m08 ADD CONSTRAINT visits_monthly_fact_y2014m08_time_key_check CHECK (time_key >= 1406851200 AND time_key < 1409529600);
|
363
|
+
|
361
364
|
ALTER TABLE visits_monthly_fact_y2014m08 ADD CONSTRAINT visits_monthly_fact_y2014m08_d6b9b38_fkey FOREIGN KEY (cluster_type_id) REFERENCES cluster_type(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
|
362
365
|
ALTER TABLE visits_monthly_fact_y2014m08 ADD CONSTRAINT visits_monthly_fact_y2014m08_0a531a8_fkey FOREIGN KEY (date_dimension_id) REFERENCES date_dimension(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
|
363
366
|
ALTER TABLE visits_monthly_fact_y2014m08 ADD CONSTRAINT visits_monthly_fact_y2014m08_d3950d9_fkey FOREIGN KEY (tenant_dimension_id) REFERENCES tenant_dimension(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
|
@@ -211,6 +211,7 @@ describe Masamune::Transform::StageFact do
|
|
211
211
|
|
212
212
|
ALTER TABLE visits_hourly_fact_y2014m08 INHERIT visits_hourly_fact;
|
213
213
|
ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_time_key_check CHECK (time_key >= 1406851200 AND time_key < 1409529600);
|
214
|
+
|
214
215
|
ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_d6b9b38_fkey FOREIGN KEY (cluster_type_id) REFERENCES cluster_type(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
|
215
216
|
ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_0a531a8_fkey FOREIGN KEY (date_dimension_id) REFERENCES date_dimension(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
|
216
217
|
ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_ff74c56_fkey FOREIGN KEY (cluster_type_id, tenant_dimension_id) REFERENCES tenant_dimension(cluster_type_id, id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
|
@@ -52,6 +52,23 @@ module TaskExampleGroup
|
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
+
shared_examples 'executes with success' do
|
56
|
+
it 'exits with status code 0' do
|
57
|
+
expect { cli_invocation }.to raise_error { |e|
|
58
|
+
expect(e).to be_a(SystemExit)
|
59
|
+
expect(e.status).to eq(0)
|
60
|
+
}
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
shared_examples 'raises Thor::MalformattedArgumentError' do |message|
|
65
|
+
it { expect { cli_invocation }.to raise_error Thor::MalformattedArgumentError, message }
|
66
|
+
end
|
67
|
+
|
68
|
+
shared_examples 'raises Thor::RequiredArgumentMissingError' do |message|
|
69
|
+
it { expect { cli_invocation }.to raise_error Thor::RequiredArgumentMissingError, message }
|
70
|
+
end
|
71
|
+
|
55
72
|
def self.included(base)
|
56
73
|
base.before :all do
|
57
74
|
ENV['THOR_DEBUG'] = '1'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: masamune
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.13.
|
4
|
+
version: 0.13.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Andrews
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-09-
|
11
|
+
date: 2015-09-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -272,6 +272,7 @@ files:
|
|
272
272
|
- lib/masamune/transform/deduplicate_dimension.rb
|
273
273
|
- lib/masamune/transform/define_foreign_key.psql.erb
|
274
274
|
- lib/masamune/transform/define_index.psql.erb
|
275
|
+
- lib/masamune/transform/define_inheritance.psql.erb
|
275
276
|
- lib/masamune/transform/define_schema.hql.erb
|
276
277
|
- lib/masamune/transform/define_schema.psql.erb
|
277
278
|
- lib/masamune/transform/define_schema.rb
|