fx 0.8.0 → 0.10.0
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/.github/workflows/ci.yml +2 -7
- data/CHANGELOG.md +150 -0
- data/CONTRIBUTING.md +3 -3
- data/Gemfile +11 -1
- data/README.md +2 -0
- data/bin/rake +2 -3
- data/bin/rspec +13 -3
- data/bin/standardrb +27 -0
- data/bin/yard +13 -3
- data/fx.gemspec +10 -15
- data/lib/fx/adapters/postgres/connection.rb +20 -0
- data/lib/fx/adapters/postgres/functions.rb +11 -28
- data/lib/fx/adapters/postgres/query_executor.rb +34 -0
- data/lib/fx/adapters/postgres/triggers.rb +14 -29
- data/lib/fx/adapters/postgres.rb +16 -24
- data/lib/fx/command_recorder.rb +87 -6
- data/lib/fx/configuration.rb +2 -27
- data/lib/fx/definition.rb +16 -6
- data/lib/fx/function.rb +3 -3
- data/lib/fx/schema_dumper.rb +37 -5
- data/lib/fx/statements.rb +231 -6
- data/lib/fx/trigger.rb +3 -3
- data/lib/fx/version.rb +1 -1
- data/lib/fx.rb +30 -12
- data/lib/generators/fx/function/function_generator.rb +50 -53
- data/lib/generators/fx/function/templates/db/migrate/create_function.erb +1 -1
- data/lib/generators/fx/function/templates/db/migrate/update_function.erb +1 -1
- data/lib/generators/fx/migration_helper.rb +53 -0
- data/lib/generators/fx/name_helper.rb +33 -0
- data/lib/generators/fx/trigger/templates/db/migrate/create_trigger.erb +1 -1
- data/lib/generators/fx/trigger/templates/db/migrate/update_trigger.erb +1 -1
- data/lib/generators/fx/trigger/trigger_generator.rb +44 -67
- data/lib/generators/fx/version_helper.rb +55 -0
- data/spec/acceptance/user_manages_functions_spec.rb +7 -7
- data/spec/acceptance/user_manages_triggers_spec.rb +11 -11
- data/spec/acceptance_helper.rb +4 -4
- data/spec/dummy/config/application.rb +5 -1
- data/spec/features/functions/migrations_spec.rb +5 -5
- data/spec/features/functions/revert_spec.rb +5 -5
- data/spec/features/triggers/migrations_spec.rb +7 -7
- data/spec/features/triggers/revert_spec.rb +9 -9
- data/spec/fx/adapters/postgres/functions_spec.rb +33 -30
- data/spec/fx/adapters/postgres/query_executor_spec.rb +75 -0
- data/spec/fx/adapters/postgres/triggers_spec.rb +41 -38
- data/spec/fx/adapters/postgres_spec.rb +155 -115
- data/spec/fx/command_recorder_spec.rb +27 -25
- data/spec/fx/configuration_spec.rb +20 -9
- data/spec/fx/definition_spec.rb +31 -39
- data/spec/fx/function_spec.rb +45 -48
- data/spec/fx/schema_dumper_spec.rb +169 -0
- data/spec/fx/statements_spec.rb +217 -0
- data/spec/fx/trigger_spec.rb +37 -40
- data/spec/fx_spec.rb +28 -0
- data/spec/generators/fx/function/function_generator_spec.rb +11 -11
- data/spec/generators/fx/migration_helper_spec.rb +133 -0
- data/spec/generators/fx/name_helper_spec.rb +114 -0
- data/spec/generators/fx/trigger/trigger_generator_spec.rb +45 -22
- data/spec/generators/fx/version_helper_spec.rb +157 -0
- data/spec/spec_helper.rb +7 -0
- data/spec/support/definition_helpers.rb +2 -6
- data/spec/support/generator_setup.rb +46 -5
- data/spec/support/warning_helper.rb +5 -0
- metadata +40 -165
- data/lib/fx/command_recorder/arguments.rb +0 -43
- data/lib/fx/command_recorder/function.rb +0 -30
- data/lib/fx/command_recorder/trigger.rb +0 -30
- data/lib/fx/schema_dumper/function.rb +0 -38
- data/lib/fx/schema_dumper/trigger.rb +0 -29
- data/lib/fx/statements/function.rb +0 -113
- data/lib/fx/statements/trigger.rb +0 -144
- data/spec/fx/command_recorder/arguments_spec.rb +0 -41
- data/spec/fx/schema_dumper/function_spec.rb +0 -78
- data/spec/fx/schema_dumper/trigger_spec.rb +0 -40
- data/spec/fx/statements/function_spec.rb +0 -103
- data/spec/fx/statements/trigger_spec.rb +0 -132
metadata
CHANGED
|
@@ -1,186 +1,57 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: fx
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.10.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Teo Ljungberg
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
10
|
date: 1980-01-01 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name:
|
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
|
16
|
-
requirements:
|
|
17
|
-
- - ">="
|
|
18
|
-
- !ruby/object:Gem::Version
|
|
19
|
-
version: 1.1.3
|
|
20
|
-
type: :development
|
|
21
|
-
prerelease: false
|
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
-
requirements:
|
|
24
|
-
- - ">="
|
|
25
|
-
- !ruby/object:Gem::Version
|
|
26
|
-
version: 1.1.3
|
|
27
|
-
- !ruby/object:Gem::Dependency
|
|
28
|
-
name: bundler
|
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
|
30
|
-
requirements:
|
|
31
|
-
- - ">="
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: '1.5'
|
|
34
|
-
type: :development
|
|
35
|
-
prerelease: false
|
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - ">="
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: '1.5'
|
|
41
|
-
- !ruby/object:Gem::Dependency
|
|
42
|
-
name: database_cleaner
|
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
|
44
|
-
requirements:
|
|
45
|
-
- - ">="
|
|
46
|
-
- !ruby/object:Gem::Version
|
|
47
|
-
version: '0'
|
|
48
|
-
type: :development
|
|
49
|
-
prerelease: false
|
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
-
requirements:
|
|
52
|
-
- - ">="
|
|
53
|
-
- !ruby/object:Gem::Version
|
|
54
|
-
version: '0'
|
|
55
|
-
- !ruby/object:Gem::Dependency
|
|
56
|
-
name: pg
|
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
|
58
|
-
requirements:
|
|
59
|
-
- - ">="
|
|
60
|
-
- !ruby/object:Gem::Version
|
|
61
|
-
version: '0'
|
|
62
|
-
type: :development
|
|
63
|
-
prerelease: false
|
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
-
requirements:
|
|
66
|
-
- - ">="
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: '0'
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: pry
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - ">="
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
version: '0'
|
|
76
|
-
type: :development
|
|
77
|
-
prerelease: false
|
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
-
requirements:
|
|
80
|
-
- - ">="
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: '0'
|
|
83
|
-
- !ruby/object:Gem::Dependency
|
|
84
|
-
name: rake
|
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
|
86
|
-
requirements:
|
|
87
|
-
- - ">="
|
|
88
|
-
- !ruby/object:Gem::Version
|
|
89
|
-
version: '0'
|
|
90
|
-
type: :development
|
|
91
|
-
prerelease: false
|
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
-
requirements:
|
|
94
|
-
- - ">="
|
|
95
|
-
- !ruby/object:Gem::Version
|
|
96
|
-
version: '0'
|
|
97
|
-
- !ruby/object:Gem::Dependency
|
|
98
|
-
name: redcarpet
|
|
13
|
+
name: activerecord
|
|
99
14
|
requirement: !ruby/object:Gem::Requirement
|
|
100
15
|
requirements:
|
|
101
16
|
- - ">="
|
|
102
17
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: '
|
|
104
|
-
|
|
105
|
-
prerelease: false
|
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
-
requirements:
|
|
108
|
-
- - ">="
|
|
109
|
-
- !ruby/object:Gem::Version
|
|
110
|
-
version: '0'
|
|
111
|
-
- !ruby/object:Gem::Dependency
|
|
112
|
-
name: rspec
|
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
|
114
|
-
requirements:
|
|
115
|
-
- - ">="
|
|
18
|
+
version: '7.2'
|
|
19
|
+
- - "<"
|
|
116
20
|
- !ruby/object:Gem::Version
|
|
117
|
-
version: '
|
|
118
|
-
type: :
|
|
21
|
+
version: '8.2'
|
|
22
|
+
type: :runtime
|
|
119
23
|
prerelease: false
|
|
120
24
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
25
|
requirements:
|
|
122
26
|
- - ">="
|
|
123
27
|
- !ruby/object:Gem::Version
|
|
124
|
-
version: '
|
|
125
|
-
-
|
|
126
|
-
name: standardrb
|
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
|
128
|
-
requirements:
|
|
129
|
-
- - ">="
|
|
28
|
+
version: '7.2'
|
|
29
|
+
- - "<"
|
|
130
30
|
- !ruby/object:Gem::Version
|
|
131
|
-
version: '
|
|
132
|
-
type: :development
|
|
133
|
-
prerelease: false
|
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
-
requirements:
|
|
136
|
-
- - ">="
|
|
137
|
-
- !ruby/object:Gem::Version
|
|
138
|
-
version: '0'
|
|
31
|
+
version: '8.2'
|
|
139
32
|
- !ruby/object:Gem::Dependency
|
|
140
|
-
name:
|
|
33
|
+
name: railties
|
|
141
34
|
requirement: !ruby/object:Gem::Requirement
|
|
142
35
|
requirements:
|
|
143
36
|
- - ">="
|
|
144
37
|
- !ruby/object:Gem::Version
|
|
145
|
-
version: '
|
|
146
|
-
|
|
147
|
-
prerelease: false
|
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
-
requirements:
|
|
150
|
-
- - ">="
|
|
38
|
+
version: '7.2'
|
|
39
|
+
- - "<"
|
|
151
40
|
- !ruby/object:Gem::Version
|
|
152
|
-
version: '
|
|
153
|
-
- !ruby/object:Gem::Dependency
|
|
154
|
-
name: activerecord
|
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
|
156
|
-
requirements:
|
|
157
|
-
- - ">="
|
|
158
|
-
- !ruby/object:Gem::Version
|
|
159
|
-
version: 6.0.0
|
|
41
|
+
version: '8.2'
|
|
160
42
|
type: :runtime
|
|
161
43
|
prerelease: false
|
|
162
44
|
version_requirements: !ruby/object:Gem::Requirement
|
|
163
45
|
requirements:
|
|
164
46
|
- - ">="
|
|
165
47
|
- !ruby/object:Gem::Version
|
|
166
|
-
version:
|
|
167
|
-
-
|
|
168
|
-
name: railties
|
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
|
170
|
-
requirements:
|
|
171
|
-
- - ">="
|
|
172
|
-
- !ruby/object:Gem::Version
|
|
173
|
-
version: 6.0.0
|
|
174
|
-
type: :runtime
|
|
175
|
-
prerelease: false
|
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
177
|
-
requirements:
|
|
178
|
-
- - ">="
|
|
48
|
+
version: '7.2'
|
|
49
|
+
- - "<"
|
|
179
50
|
- !ruby/object:Gem::Version
|
|
180
|
-
version:
|
|
181
|
-
description: |
|
|
182
|
-
|
|
183
|
-
|
|
51
|
+
version: '8.2'
|
|
52
|
+
description: |
|
|
53
|
+
Adds methods to ActiveRecord::Migration to create and manage database functions
|
|
54
|
+
and triggers in Rails
|
|
184
55
|
email:
|
|
185
56
|
- teo@teoljungberg.com
|
|
186
57
|
executables: []
|
|
@@ -192,6 +63,7 @@ files:
|
|
|
192
63
|
- ".rspec"
|
|
193
64
|
- ".standard.yml"
|
|
194
65
|
- ".yardopts"
|
|
66
|
+
- CHANGELOG.md
|
|
195
67
|
- CONTRIBUTING.md
|
|
196
68
|
- Gemfile
|
|
197
69
|
- LICENSE
|
|
@@ -201,27 +73,22 @@ files:
|
|
|
201
73
|
- bin/rake
|
|
202
74
|
- bin/rspec
|
|
203
75
|
- bin/setup
|
|
76
|
+
- bin/standardrb
|
|
204
77
|
- bin/yard
|
|
205
78
|
- fx.gemspec
|
|
206
79
|
- lib/fx.rb
|
|
207
80
|
- lib/fx/adapters/postgres.rb
|
|
208
81
|
- lib/fx/adapters/postgres/connection.rb
|
|
209
82
|
- lib/fx/adapters/postgres/functions.rb
|
|
83
|
+
- lib/fx/adapters/postgres/query_executor.rb
|
|
210
84
|
- lib/fx/adapters/postgres/triggers.rb
|
|
211
85
|
- lib/fx/command_recorder.rb
|
|
212
|
-
- lib/fx/command_recorder/arguments.rb
|
|
213
|
-
- lib/fx/command_recorder/function.rb
|
|
214
|
-
- lib/fx/command_recorder/trigger.rb
|
|
215
86
|
- lib/fx/configuration.rb
|
|
216
87
|
- lib/fx/definition.rb
|
|
217
88
|
- lib/fx/function.rb
|
|
218
89
|
- lib/fx/railtie.rb
|
|
219
90
|
- lib/fx/schema_dumper.rb
|
|
220
|
-
- lib/fx/schema_dumper/function.rb
|
|
221
|
-
- lib/fx/schema_dumper/trigger.rb
|
|
222
91
|
- lib/fx/statements.rb
|
|
223
|
-
- lib/fx/statements/function.rb
|
|
224
|
-
- lib/fx/statements/trigger.rb
|
|
225
92
|
- lib/fx/trigger.rb
|
|
226
93
|
- lib/fx/version.rb
|
|
227
94
|
- lib/generators.rb
|
|
@@ -229,10 +96,13 @@ files:
|
|
|
229
96
|
- lib/generators/fx/function/function_generator.rb
|
|
230
97
|
- lib/generators/fx/function/templates/db/migrate/create_function.erb
|
|
231
98
|
- lib/generators/fx/function/templates/db/migrate/update_function.erb
|
|
99
|
+
- lib/generators/fx/migration_helper.rb
|
|
100
|
+
- lib/generators/fx/name_helper.rb
|
|
232
101
|
- lib/generators/fx/trigger/USAGE
|
|
233
102
|
- lib/generators/fx/trigger/templates/db/migrate/create_trigger.erb
|
|
234
103
|
- lib/generators/fx/trigger/templates/db/migrate/update_trigger.erb
|
|
235
104
|
- lib/generators/fx/trigger/trigger_generator.rb
|
|
105
|
+
- lib/generators/fx/version_helper.rb
|
|
236
106
|
- spec/acceptance/user_manages_functions_spec.rb
|
|
237
107
|
- spec/acceptance/user_manages_triggers_spec.rb
|
|
238
108
|
- spec/acceptance_helper.rb
|
|
@@ -252,29 +122,35 @@ files:
|
|
|
252
122
|
- spec/features/triggers/migrations_spec.rb
|
|
253
123
|
- spec/features/triggers/revert_spec.rb
|
|
254
124
|
- spec/fx/adapters/postgres/functions_spec.rb
|
|
125
|
+
- spec/fx/adapters/postgres/query_executor_spec.rb
|
|
255
126
|
- spec/fx/adapters/postgres/triggers_spec.rb
|
|
256
127
|
- spec/fx/adapters/postgres_spec.rb
|
|
257
|
-
- spec/fx/command_recorder/arguments_spec.rb
|
|
258
128
|
- spec/fx/command_recorder_spec.rb
|
|
259
129
|
- spec/fx/configuration_spec.rb
|
|
260
130
|
- spec/fx/definition_spec.rb
|
|
261
131
|
- spec/fx/function_spec.rb
|
|
262
|
-
- spec/fx/
|
|
263
|
-
- spec/fx/
|
|
264
|
-
- spec/fx/statements/function_spec.rb
|
|
265
|
-
- spec/fx/statements/trigger_spec.rb
|
|
132
|
+
- spec/fx/schema_dumper_spec.rb
|
|
133
|
+
- spec/fx/statements_spec.rb
|
|
266
134
|
- spec/fx/trigger_spec.rb
|
|
135
|
+
- spec/fx_spec.rb
|
|
267
136
|
- spec/generators/fx/function/function_generator_spec.rb
|
|
137
|
+
- spec/generators/fx/migration_helper_spec.rb
|
|
138
|
+
- spec/generators/fx/name_helper_spec.rb
|
|
268
139
|
- spec/generators/fx/trigger/trigger_generator_spec.rb
|
|
140
|
+
- spec/generators/fx/version_helper_spec.rb
|
|
269
141
|
- spec/spec_helper.rb
|
|
270
142
|
- spec/support/definition_helpers.rb
|
|
271
143
|
- spec/support/generator_setup.rb
|
|
272
144
|
- spec/support/migration_helpers.rb
|
|
145
|
+
- spec/support/warning_helper.rb
|
|
273
146
|
homepage: https://github.com/teoljungberg/fx
|
|
274
147
|
licenses:
|
|
275
148
|
- MIT
|
|
276
|
-
metadata:
|
|
277
|
-
|
|
149
|
+
metadata:
|
|
150
|
+
bug_tracker_uri: https://github.com/teoljungberg/fx/issues
|
|
151
|
+
changelog_uri: https://github.com/teoljungberg/fx/blob/v0.10.0/CHANGELOG.md
|
|
152
|
+
homepage_uri: https://github.com/teoljungberg/fx
|
|
153
|
+
source_code_uri: https://github.com/teoljungberg/fx
|
|
278
154
|
rdoc_options: []
|
|
279
155
|
require_paths:
|
|
280
156
|
- lib
|
|
@@ -282,15 +158,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
282
158
|
requirements:
|
|
283
159
|
- - ">="
|
|
284
160
|
- !ruby/object:Gem::Version
|
|
285
|
-
version: '2
|
|
161
|
+
version: '3.2'
|
|
286
162
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
287
163
|
requirements:
|
|
288
164
|
- - ">="
|
|
289
165
|
- !ruby/object:Gem::Version
|
|
290
166
|
version: '0'
|
|
291
167
|
requirements: []
|
|
292
|
-
rubygems_version: 3.
|
|
293
|
-
signing_key:
|
|
168
|
+
rubygems_version: 3.6.9
|
|
294
169
|
specification_version: 4
|
|
295
170
|
summary: Support for database functions and triggers in Rails migrations
|
|
296
171
|
test_files: []
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
module Fx
|
|
2
|
-
module CommandRecorder
|
|
3
|
-
# @api private
|
|
4
|
-
class Arguments
|
|
5
|
-
def initialize(args)
|
|
6
|
-
@args = args.freeze
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def function
|
|
10
|
-
@args[0]
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def version
|
|
14
|
-
options[:version]
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def revert_to_version
|
|
18
|
-
options[:revert_to_version]
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def invert_version
|
|
22
|
-
Arguments.new([function, options_for_revert])
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def to_a
|
|
26
|
-
@args.to_a
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
private
|
|
30
|
-
|
|
31
|
-
def options
|
|
32
|
-
@options ||= @args[1] || {}
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def options_for_revert
|
|
36
|
-
options.clone.tap do |revert_options|
|
|
37
|
-
revert_options[:version] = revert_to_version
|
|
38
|
-
revert_options.delete(:revert_to_version)
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
module Fx
|
|
2
|
-
module CommandRecorder
|
|
3
|
-
# @api private
|
|
4
|
-
module Function
|
|
5
|
-
def create_function(*args)
|
|
6
|
-
record(:create_function, args)
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def drop_function(*args)
|
|
10
|
-
record(:drop_function, args)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def update_function(*args)
|
|
14
|
-
record(:update_function, args)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def invert_create_function(args)
|
|
18
|
-
[:drop_function, args]
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def invert_drop_function(args)
|
|
22
|
-
perform_inversion(:create_function, args)
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def invert_update_function(args)
|
|
26
|
-
perform_inversion(:update_function, args)
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
module Fx
|
|
2
|
-
module CommandRecorder
|
|
3
|
-
# @api private
|
|
4
|
-
module Trigger
|
|
5
|
-
def create_trigger(*args)
|
|
6
|
-
record(:create_trigger, args)
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def drop_trigger(*args)
|
|
10
|
-
record(:drop_trigger, args)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def update_trigger(*args)
|
|
14
|
-
record(:update_trigger, args)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def invert_create_trigger(args)
|
|
18
|
-
[:drop_trigger, args]
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def invert_drop_trigger(args)
|
|
22
|
-
perform_inversion(:create_trigger, args)
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def invert_update_trigger(args)
|
|
26
|
-
perform_inversion(:update_trigger, args)
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
require "rails"
|
|
2
|
-
|
|
3
|
-
module Fx
|
|
4
|
-
module SchemaDumper
|
|
5
|
-
# @api private
|
|
6
|
-
module Function
|
|
7
|
-
def tables(stream)
|
|
8
|
-
if Fx.configuration.dump_functions_at_beginning_of_schema
|
|
9
|
-
functions(stream)
|
|
10
|
-
empty_line(stream)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
super
|
|
14
|
-
|
|
15
|
-
unless Fx.configuration.dump_functions_at_beginning_of_schema
|
|
16
|
-
functions(stream)
|
|
17
|
-
empty_line(stream)
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def empty_line(stream)
|
|
22
|
-
stream.puts if dumpable_functions_in_database.any?
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def functions(stream)
|
|
26
|
-
dumpable_functions_in_database.each do |function|
|
|
27
|
-
stream.puts(function.to_schema)
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
private
|
|
32
|
-
|
|
33
|
-
def dumpable_functions_in_database
|
|
34
|
-
@_dumpable_functions_in_database ||= Fx.database.functions
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
require "rails"
|
|
2
|
-
|
|
3
|
-
module Fx
|
|
4
|
-
module SchemaDumper
|
|
5
|
-
# @api private
|
|
6
|
-
module Trigger
|
|
7
|
-
def tables(stream)
|
|
8
|
-
super
|
|
9
|
-
triggers(stream)
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def triggers(stream)
|
|
13
|
-
if dumpable_triggers_in_database.any?
|
|
14
|
-
stream.puts
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
dumpable_triggers_in_database.each do |trigger|
|
|
18
|
-
stream.puts(trigger.to_schema)
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
private
|
|
23
|
-
|
|
24
|
-
def dumpable_triggers_in_database
|
|
25
|
-
@_dumpable_triggers_in_database ||= Fx.database.triggers
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
require "rails"
|
|
2
|
-
|
|
3
|
-
module Fx
|
|
4
|
-
module Statements
|
|
5
|
-
# Methods that are made available in migrations for managing Fx functions.
|
|
6
|
-
module Function
|
|
7
|
-
# Create a new database function.
|
|
8
|
-
#
|
|
9
|
-
# @param name [String, Symbol] The name of the database function.
|
|
10
|
-
# @param version [Fixnum] The version number of the function, used to
|
|
11
|
-
# find the definition file in `db/functions`. This defaults to `1` if
|
|
12
|
-
# not provided.
|
|
13
|
-
# @param sql_definition [String] The SQL query for the function schema.
|
|
14
|
-
# If both `sql_definition` and `version` are provided,
|
|
15
|
-
# `sql_definition` takes prescedence.
|
|
16
|
-
# @return The database response from executing the create statement.
|
|
17
|
-
#
|
|
18
|
-
# @example Create from `db/functions/uppercase_users_name_v02.sql`
|
|
19
|
-
# create_function(:uppercase_users_name, version: 2)
|
|
20
|
-
#
|
|
21
|
-
# @example Create from provided SQL string
|
|
22
|
-
# create_function(:uppercase_users_name, sql_definition: <<-SQL)
|
|
23
|
-
# CREATE OR REPLACE FUNCTION uppercase_users_name()
|
|
24
|
-
# RETURNS trigger AS $$
|
|
25
|
-
# BEGIN
|
|
26
|
-
# NEW.upper_name = UPPER(NEW.name);
|
|
27
|
-
# RETURN NEW;
|
|
28
|
-
# END;
|
|
29
|
-
# $$ LANGUAGE plpgsql;
|
|
30
|
-
# SQL
|
|
31
|
-
#
|
|
32
|
-
def create_function(name, options = {})
|
|
33
|
-
version = options.fetch(:version, 1)
|
|
34
|
-
sql_definition = options[:sql_definition]
|
|
35
|
-
|
|
36
|
-
if version.nil? && sql_definition.nil?
|
|
37
|
-
raise(
|
|
38
|
-
ArgumentError,
|
|
39
|
-
"version or sql_definition must be specified"
|
|
40
|
-
)
|
|
41
|
-
end
|
|
42
|
-
sql_definition = sql_definition.strip_heredoc if sql_definition
|
|
43
|
-
sql_definition ||= Fx::Definition.new(name: name, version: version).to_sql
|
|
44
|
-
|
|
45
|
-
Fx.database.create_function(sql_definition)
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
# Drop a database function by name.
|
|
49
|
-
#
|
|
50
|
-
# @param name [String, Symbol] The name of the database function.
|
|
51
|
-
# @param revert_to_version [Fixnum] Used to reverse the `drop_function`
|
|
52
|
-
# command on `rake db:rollback`. The provided version will be passed as
|
|
53
|
-
# the `version` argument to {#create_function}.
|
|
54
|
-
# @return The database response from executing the drop statement.
|
|
55
|
-
#
|
|
56
|
-
# @example Drop a function, rolling back to version 2 on rollback
|
|
57
|
-
# drop_function(:uppercase_users_name, revert_to_version: 2)
|
|
58
|
-
#
|
|
59
|
-
def drop_function(name, options = {})
|
|
60
|
-
Fx.database.drop_function(name)
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
# Update a database function.
|
|
64
|
-
#
|
|
65
|
-
# @param name [String, Symbol] The name of the database function.
|
|
66
|
-
# @param version [Fixnum] The version number of the function, used to
|
|
67
|
-
# find the definition file in `db/functions`. This defaults to `1` if
|
|
68
|
-
# not provided.
|
|
69
|
-
# @param sql_definition [String] The SQL query for the function schema.
|
|
70
|
-
# If both `sql_definition` and `version` are provided,
|
|
71
|
-
# `sql_definition` takes prescedence.
|
|
72
|
-
# @return The database response from executing the create statement.
|
|
73
|
-
#
|
|
74
|
-
# @example Update function to a given version
|
|
75
|
-
# update_function(
|
|
76
|
-
# :uppercase_users_name,
|
|
77
|
-
# version: 3,
|
|
78
|
-
# revert_to_version: 2,
|
|
79
|
-
# )
|
|
80
|
-
#
|
|
81
|
-
# @example Update function from provided SQL string
|
|
82
|
-
# update_function(:uppercase_users_name, sql_definition: <<-SQL)
|
|
83
|
-
# CREATE OR REPLACE FUNCTION uppercase_users_name()
|
|
84
|
-
# RETURNS trigger AS $$
|
|
85
|
-
# BEGIN
|
|
86
|
-
# NEW.upper_name = UPPER(NEW.name);
|
|
87
|
-
# RETURN NEW;
|
|
88
|
-
# END;
|
|
89
|
-
# $$ LANGUAGE plpgsql;
|
|
90
|
-
# SQL
|
|
91
|
-
#
|
|
92
|
-
def update_function(name, options = {})
|
|
93
|
-
version = options[:version]
|
|
94
|
-
sql_definition = options[:sql_definition]
|
|
95
|
-
|
|
96
|
-
if version.nil? && sql_definition.nil?
|
|
97
|
-
raise(
|
|
98
|
-
ArgumentError,
|
|
99
|
-
"version or sql_definition must be specified"
|
|
100
|
-
)
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
sql_definition = sql_definition.strip_heredoc if sql_definition
|
|
104
|
-
sql_definition ||= Fx::Definition.new(
|
|
105
|
-
name: name,
|
|
106
|
-
version: version
|
|
107
|
-
).to_sql
|
|
108
|
-
|
|
109
|
-
Fx.database.update_function(name, sql_definition)
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
end
|