arel_toolkit 0.4.5 → 0.4.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/test.yml +3 -0
- data/.gitignore +3 -1
- data/.rubocop.yml +1 -0
- data/.ruby-version +1 -1
- data/.tool-versions +1 -0
- data/CHANGELOG.md +17 -3
- data/Gemfile.lock +126 -78
- data/README.md +7 -1
- data/arel_toolkit.gemspec +3 -5
- data/bin/console +2 -1
- data/bin/setup +23 -2
- data/docker-compose.yml +11 -0
- data/gemfiles/active_record_6.gemfile +3 -3
- data/gemfiles/active_record_6.gemfile.lock +9 -7
- data/gemfiles/arel_gems.gemfile.lock +9 -7
- data/gemfiles/default.gemfile.lock +9 -7
- data/lib/arel/enhance/node.rb +18 -12
- data/lib/arel/extensions/conflict.rb +3 -3
- data/lib/arel/extensions/infer.rb +2 -2
- data/lib/arel/extensions/insert_statement.rb +3 -3
- data/lib/arel/extensions/transaction.rb +9 -9
- data/lib/arel/sql_to_arel/pg_query_visitor.rb +430 -521
- data/lib/arel/sql_to_arel/pg_query_visitor/frame_options.rb +37 -5
- data/lib/arel/transformer/prefix_schema_name.rb +5 -3
- data/lib/arel_toolkit/version.rb +1 -1
- metadata +17 -9
@@ -42,7 +42,7 @@ module Arel
|
|
42
42
|
# RANGE only unbounded
|
43
43
|
# ROWS all
|
44
44
|
# https://github.com/postgres/postgres/blob/REL_10_1/src/include/nodes/parsenodes.h
|
45
|
-
|
45
|
+
FRAMEOPTIONS_V10 = {
|
46
46
|
'FRAMEOPTION_NONDEFAULT' => 0x00001,
|
47
47
|
'FRAMEOPTION_RANGE' => 0x00002,
|
48
48
|
'FRAMEOPTION_ROWS' => 0x00004,
|
@@ -59,6 +59,38 @@ module Arel
|
|
59
59
|
'FRAMEOPTION_END_VALUE_FOLLOWING' => 0x02000,
|
60
60
|
}.freeze
|
61
61
|
|
62
|
+
FRAMEOPTIONS_V11_AND_UP = {
|
63
|
+
'FRAMEOPTION_NONDEFAULT' => 0x00001, # any specified? */
|
64
|
+
'FRAMEOPTION_RANGE' => 0x00002, # RANGE behavior */
|
65
|
+
'FRAMEOPTION_ROWS' => 0x00004, # ROWS behavior */
|
66
|
+
'FRAMEOPTION_GROUPS' => 0x00008, # GROUPS behavior */
|
67
|
+
'FRAMEOPTION_BETWEEN' => 0x00010, # BETWEEN given? */
|
68
|
+
'FRAMEOPTION_START_UNBOUNDED_PRECEDING' => 0x00020, # start is U. P. */
|
69
|
+
'FRAMEOPTION_END_UNBOUNDED_PRECEDING' => 0x00040, # (disallowed) */
|
70
|
+
'FRAMEOPTION_START_UNBOUNDED_FOLLOWING' => 0x00080, # (disallowed) */
|
71
|
+
'FRAMEOPTION_END_UNBOUNDED_FOLLOWING' => 0x00100, # end is U. F. */
|
72
|
+
'FRAMEOPTION_START_CURRENT_ROW' => 0x00200, # start is C. R. */
|
73
|
+
'FRAMEOPTION_END_CURRENT_ROW' => 0x00400, # end is C. R. */
|
74
|
+
'FRAMEOPTION_START_OFFSET_PRECEDING' => 0x00800, # start is O. P. */
|
75
|
+
'FRAMEOPTION_END_OFFSET_PRECEDING' => 0x01000, # end is O. P. */
|
76
|
+
'FRAMEOPTION_START_OFFSET_FOLLOWING' => 0x02000, # start is O. F. */
|
77
|
+
'FRAMEOPTION_END_OFFSET_FOLLOWING' => 0x04000, # end is O. F. */
|
78
|
+
'FRAMEOPTION_EXCLUDE_CURRENT_ROW' => 0x08000, # omit C.R. */
|
79
|
+
'FRAMEOPTION_EXCLUDE_GROUP' => 0x10000, # omit C.R. & peers */
|
80
|
+
'FRAMEOPTION_EXCLUDE_TIES' => 0x20000, # omit C.R.'s peers */
|
81
|
+
}.freeze
|
82
|
+
|
83
|
+
def frameoptions
|
84
|
+
case PG.library_version.to_s[0, 2]
|
85
|
+
when '09', '10'
|
86
|
+
FRAMEOPTIONS_V10
|
87
|
+
when '11', '12', '13', '14'
|
88
|
+
FRAMEOPTIONS_V11_AND_UP
|
89
|
+
else
|
90
|
+
boom "Version #{PG.library_version.to_s[0, 2]} not supported"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
62
94
|
def biggest_detractable_number(number, candidates)
|
63
95
|
high_to_low_candidates = candidates.sort { |a, b| b <=> a }
|
64
96
|
high_to_low_candidates.find do |candidate|
|
@@ -69,8 +101,8 @@ module Arel
|
|
69
101
|
def calculate_frame_option_names(frame_options, names = [])
|
70
102
|
return names if frame_options.zero?
|
71
103
|
|
72
|
-
number = biggest_detractable_number(frame_options,
|
73
|
-
name =
|
104
|
+
number = biggest_detractable_number(frame_options, frameoptions.values)
|
105
|
+
name = frameoptions.key(number)
|
74
106
|
calculate_frame_option_names(
|
75
107
|
frame_options - number, names + [name]
|
76
108
|
)
|
@@ -95,10 +127,10 @@ module Arel
|
|
95
127
|
when 'CURRENT_ROW'
|
96
128
|
Arel::Nodes::CurrentRow.new
|
97
129
|
|
98
|
-
when 'VALUE_PRECEDING'
|
130
|
+
when 'VALUE_PRECEDING', 'OFFSET_PRECEDING'
|
99
131
|
Arel::Nodes::Preceding.new offset
|
100
132
|
|
101
|
-
when 'VALUE_FOLLOWING'
|
133
|
+
when 'VALUE_FOLLOWING', 'OFFSET_FOLLOWING'
|
102
134
|
Arel::Nodes::Following.new offset
|
103
135
|
|
104
136
|
else
|
@@ -119,17 +119,19 @@ module Arel
|
|
119
119
|
|
120
120
|
# https://www.rubydoc.info/github/rubyworks/facets/String:unquote
|
121
121
|
def unquote_string(string)
|
122
|
+
s = string.dup
|
123
|
+
|
122
124
|
case string[0, 1]
|
123
125
|
when "'", '"', '`'
|
124
|
-
|
126
|
+
s[0] = ''
|
125
127
|
end
|
126
128
|
|
127
129
|
case string[-1, 1]
|
128
130
|
when "'", '"', '`'
|
129
|
-
|
131
|
+
s[-1] = ''
|
130
132
|
end
|
131
133
|
|
132
|
-
|
134
|
+
s
|
133
135
|
end
|
134
136
|
|
135
137
|
def database_object_mapping
|
data/lib/arel_toolkit/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arel_toolkit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- maarten
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-07-
|
11
|
+
date: 2021-07-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -16,14 +16,20 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 5.0.0
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 6.0.4
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
27
|
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
29
|
+
version: 5.0.0
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 6.0.4
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: pg
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,14 +50,14 @@ dependencies:
|
|
44
50
|
requirements:
|
45
51
|
- - "~>"
|
46
52
|
- !ruby/object:Gem::Version
|
47
|
-
version: '1
|
53
|
+
version: '2.1'
|
48
54
|
type: :runtime
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
51
57
|
requirements:
|
52
58
|
- - "~>"
|
53
59
|
- !ruby/object:Gem::Version
|
54
|
-
version: '1
|
60
|
+
version: '2.1'
|
55
61
|
- !ruby/object:Gem::Dependency
|
56
62
|
name: bundler
|
57
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -156,14 +162,14 @@ dependencies:
|
|
156
162
|
requirements:
|
157
163
|
- - "~>"
|
158
164
|
- !ruby/object:Gem::Version
|
159
|
-
version: 2.
|
165
|
+
version: 2.4.1
|
160
166
|
type: :development
|
161
167
|
prerelease: false
|
162
168
|
version_requirements: !ruby/object:Gem::Requirement
|
163
169
|
requirements:
|
164
170
|
- - "~>"
|
165
171
|
- !ruby/object:Gem::Version
|
166
|
-
version: 2.
|
172
|
+
version: 2.4.1
|
167
173
|
- !ruby/object:Gem::Dependency
|
168
174
|
name: database_cleaner
|
169
175
|
requirement: !ruby/object:Gem::Requirement
|
@@ -406,6 +412,7 @@ files:
|
|
406
412
|
- ".rspec"
|
407
413
|
- ".rubocop.yml"
|
408
414
|
- ".ruby-version"
|
415
|
+
- ".tool-versions"
|
409
416
|
- Appraisals
|
410
417
|
- CHANGELOG.md
|
411
418
|
- CODE_OF_CONDUCT.md
|
@@ -419,6 +426,7 @@ files:
|
|
419
426
|
- benchmark.rb
|
420
427
|
- bin/console
|
421
428
|
- bin/setup
|
429
|
+
- docker-compose.yml
|
422
430
|
- ext/pg_result_init/extconf.rb
|
423
431
|
- ext/pg_result_init/pg_result_init.c
|
424
432
|
- ext/pg_result_init/pg_result_init.h
|
@@ -593,7 +601,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
593
601
|
- !ruby/object:Gem::Version
|
594
602
|
version: '0'
|
595
603
|
requirements: []
|
596
|
-
rubygems_version: 3.
|
604
|
+
rubygems_version: 3.1.6
|
597
605
|
signing_key:
|
598
606
|
specification_version: 4
|
599
607
|
summary: Collection of tools for Arel
|