arel_toolkit 0.4.2 → 0.4.6
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/coverage.yml +48 -0
- data/.github/workflows/test.yml +68 -0
- data/.gitignore +3 -1
- data/.rubocop.yml +1 -0
- data/.ruby-version +1 -1
- data/.tool-versions +1 -0
- data/Appraisals +4 -0
- data/CHANGELOG.md +52 -3
- data/Gemfile.lock +129 -81
- data/README.md +20 -3
- data/arel_toolkit.gemspec +4 -7
- data/bin/console +2 -1
- data/bin/setup +23 -2
- data/docker-compose.yml +11 -0
- data/gemfiles/active_record_6.gemfile +7 -0
- data/gemfiles/active_record_6.gemfile.lock +212 -0
- data/gemfiles/arel_gems.gemfile.lock +11 -10
- data/gemfiles/default.gemfile.lock +11 -10
- data/lib/arel/enhance/node.rb +18 -12
- data/lib/arel/extensions.rb +1 -0
- data/lib/arel/extensions/conflict.rb +3 -3
- data/lib/arel/extensions/delete_statement.rb +20 -15
- data/lib/arel/extensions/function.rb +1 -1
- data/lib/arel/extensions/infer.rb +3 -3
- data/lib/arel/extensions/insert_statement.rb +4 -4
- data/lib/arel/extensions/select_core.rb +21 -7
- data/lib/arel/extensions/top.rb +8 -0
- data/lib/arel/extensions/transaction.rb +9 -9
- data/lib/arel/extensions/update_statement.rb +9 -23
- data/lib/arel/middleware/cache_accessor.rb +35 -0
- data/lib/arel/middleware/chain.rb +53 -29
- data/lib/arel/middleware/database_executor.rb +11 -2
- data/lib/arel/middleware/no_op_cache.rb +9 -0
- 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.rb +1 -0
- data/lib/arel_toolkit/version.rb +1 -1
- metadata +31 -32
- data/.github/workflows/develop.yml +0 -88
- data/.github/workflows/master.yml +0 -67
@@ -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.rb
CHANGED
data/lib/arel_toolkit/version.rb
CHANGED
metadata
CHANGED
@@ -1,43 +1,35 @@
|
|
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
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-07-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: arel
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 9.0.0
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 9.0.0
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: activerecord
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
30
16
|
requirements:
|
31
|
-
- - "
|
17
|
+
- - ">="
|
32
18
|
- !ruby/object:Gem::Version
|
33
|
-
version: 5.
|
19
|
+
version: 5.0.0
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 6.0.4
|
34
23
|
type: :runtime
|
35
24
|
prerelease: false
|
36
25
|
version_requirements: !ruby/object:Gem::Requirement
|
37
26
|
requirements:
|
38
|
-
- - "
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 5.0.0
|
30
|
+
- - "<"
|
39
31
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
32
|
+
version: 6.0.4
|
41
33
|
- !ruby/object:Gem::Dependency
|
42
34
|
name: pg
|
43
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,14 +50,14 @@ dependencies:
|
|
58
50
|
requirements:
|
59
51
|
- - "~>"
|
60
52
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
53
|
+
version: '2.1'
|
62
54
|
type: :runtime
|
63
55
|
prerelease: false
|
64
56
|
version_requirements: !ruby/object:Gem::Requirement
|
65
57
|
requirements:
|
66
58
|
- - "~>"
|
67
59
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
60
|
+
version: '2.1'
|
69
61
|
- !ruby/object:Gem::Dependency
|
70
62
|
name: bundler
|
71
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,14 +106,14 @@ dependencies:
|
|
114
106
|
requirements:
|
115
107
|
- - "~>"
|
116
108
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
109
|
+
version: '13.0'
|
118
110
|
type: :development
|
119
111
|
prerelease: false
|
120
112
|
version_requirements: !ruby/object:Gem::Requirement
|
121
113
|
requirements:
|
122
114
|
- - "~>"
|
123
115
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
116
|
+
version: '13.0'
|
125
117
|
- !ruby/object:Gem::Dependency
|
126
118
|
name: rake-compiler
|
127
119
|
requirement: !ruby/object:Gem::Requirement
|
@@ -170,14 +162,14 @@ dependencies:
|
|
170
162
|
requirements:
|
171
163
|
- - "~>"
|
172
164
|
- !ruby/object:Gem::Version
|
173
|
-
version: 2.
|
165
|
+
version: 2.4.1
|
174
166
|
type: :development
|
175
167
|
prerelease: false
|
176
168
|
version_requirements: !ruby/object:Gem::Requirement
|
177
169
|
requirements:
|
178
170
|
- - "~>"
|
179
171
|
- !ruby/object:Gem::Version
|
180
|
-
version: 2.
|
172
|
+
version: 2.4.1
|
181
173
|
- !ruby/object:Gem::Dependency
|
182
174
|
name: database_cleaner
|
183
175
|
requirement: !ruby/object:Gem::Requirement
|
@@ -414,12 +406,13 @@ extensions:
|
|
414
406
|
extra_rdoc_files: []
|
415
407
|
files:
|
416
408
|
- ".codeclimate.yml"
|
417
|
-
- ".github/workflows/
|
418
|
-
- ".github/workflows/
|
409
|
+
- ".github/workflows/coverage.yml"
|
410
|
+
- ".github/workflows/test.yml"
|
419
411
|
- ".gitignore"
|
420
412
|
- ".rspec"
|
421
413
|
- ".rubocop.yml"
|
422
414
|
- ".ruby-version"
|
415
|
+
- ".tool-versions"
|
423
416
|
- Appraisals
|
424
417
|
- CHANGELOG.md
|
425
418
|
- CODE_OF_CONDUCT.md
|
@@ -433,10 +426,13 @@ files:
|
|
433
426
|
- benchmark.rb
|
434
427
|
- bin/console
|
435
428
|
- bin/setup
|
429
|
+
- docker-compose.yml
|
436
430
|
- ext/pg_result_init/extconf.rb
|
437
431
|
- ext/pg_result_init/pg_result_init.c
|
438
432
|
- ext/pg_result_init/pg_result_init.h
|
439
433
|
- gemfiles/.bundle/config
|
434
|
+
- gemfiles/active_record_6.gemfile
|
435
|
+
- gemfiles/active_record_6.gemfile.lock
|
440
436
|
- gemfiles/arel_gems.gemfile
|
441
437
|
- gemfiles/arel_gems.gemfile.lock
|
442
438
|
- gemfiles/default.gemfile
|
@@ -548,6 +544,7 @@ files:
|
|
548
544
|
- lib/arel/extensions/table.rb
|
549
545
|
- lib/arel/extensions/time_with_precision.rb
|
550
546
|
- lib/arel/extensions/to_sql.rb
|
547
|
+
- lib/arel/extensions/top.rb
|
551
548
|
- lib/arel/extensions/transaction.rb
|
552
549
|
- lib/arel/extensions/tree_manager.rb
|
553
550
|
- lib/arel/extensions/trim.rb
|
@@ -565,8 +562,10 @@ files:
|
|
565
562
|
- lib/arel/extensions/with_ordinality.rb
|
566
563
|
- lib/arel/middleware.rb
|
567
564
|
- lib/arel/middleware/active_record_extension.rb
|
565
|
+
- lib/arel/middleware/cache_accessor.rb
|
568
566
|
- lib/arel/middleware/chain.rb
|
569
567
|
- lib/arel/middleware/database_executor.rb
|
568
|
+
- lib/arel/middleware/no_op_cache.rb
|
570
569
|
- lib/arel/middleware/postgresql_adapter.rb
|
571
570
|
- lib/arel/middleware/railtie.rb
|
572
571
|
- lib/arel/middleware/result.rb
|
@@ -587,7 +586,7 @@ homepage: https://github.com/mvgijssel/arel_toolkit
|
|
587
586
|
licenses:
|
588
587
|
- MIT
|
589
588
|
metadata: {}
|
590
|
-
post_install_message:
|
589
|
+
post_install_message:
|
591
590
|
rdoc_options: []
|
592
591
|
require_paths:
|
593
592
|
- lib
|
@@ -602,8 +601,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
602
601
|
- !ruby/object:Gem::Version
|
603
602
|
version: '0'
|
604
603
|
requirements: []
|
605
|
-
rubygems_version: 3.
|
606
|
-
signing_key:
|
604
|
+
rubygems_version: 3.1.6
|
605
|
+
signing_key:
|
607
606
|
specification_version: 4
|
608
607
|
summary: Collection of tools for Arel
|
609
608
|
test_files: []
|
@@ -1,88 +0,0 @@
|
|
1
|
-
name: CI - develop
|
2
|
-
on:
|
3
|
-
push:
|
4
|
-
branches-ignore:
|
5
|
-
- master
|
6
|
-
|
7
|
-
jobs:
|
8
|
-
rspec:
|
9
|
-
name: RSpec - ${{ matrix.title }}
|
10
|
-
runs-on: ubuntu-latest
|
11
|
-
strategy:
|
12
|
-
fail-fast: false
|
13
|
-
matrix:
|
14
|
-
checkout: [branch, master]
|
15
|
-
include:
|
16
|
-
- checkout: branch
|
17
|
-
ref: null
|
18
|
-
title: current branch
|
19
|
-
rebase: false
|
20
|
-
codeclimate: true
|
21
|
-
- checkout: master
|
22
|
-
ref: master
|
23
|
-
title: merge with master
|
24
|
-
rebase: true
|
25
|
-
codeclimate: false
|
26
|
-
|
27
|
-
services:
|
28
|
-
postgres:
|
29
|
-
options: >-
|
30
|
-
--health-cmd pg_isready
|
31
|
-
--health-interval 10s
|
32
|
-
--health-timeout 5s
|
33
|
-
--health-retries 5
|
34
|
-
image: postgres:10.10
|
35
|
-
ports:
|
36
|
-
- 5432:5432
|
37
|
-
env:
|
38
|
-
POSTGRES_DB: arel_toolkit_test
|
39
|
-
POSTGRES_USER: postgres
|
40
|
-
steps:
|
41
|
-
- uses: actions/checkout@v1
|
42
|
-
with:
|
43
|
-
ref: ${{ matrix.ref }}
|
44
|
-
|
45
|
-
# Based on
|
46
|
-
# https://discourse.drone.io/t/planned-change-to-git-clone-logic/1165
|
47
|
-
- name: Rebase
|
48
|
-
if: matrix.rebase
|
49
|
-
run: |
|
50
|
-
git config --global user.email "ci@github.com"
|
51
|
-
git config --global user.name "GitHub CI"
|
52
|
-
git fetch origin $GITHUB_REF
|
53
|
-
git rebase $GITHUB_SHA
|
54
|
-
|
55
|
-
- name: Set up Ruby 2.5.x
|
56
|
-
uses: actions/setup-ruby@v1
|
57
|
-
with:
|
58
|
-
ruby-version: 2.5.x
|
59
|
-
|
60
|
-
- name: Setup
|
61
|
-
run: |
|
62
|
-
curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
63
|
-
chmod +x ./cc-test-reporter
|
64
|
-
./cc-test-reporter before-build
|
65
|
-
|
66
|
-
sudo apt-get install -y libpq-dev
|
67
|
-
|
68
|
-
gem install bundler
|
69
|
-
|
70
|
-
bundle install --jobs 4 --retry 3
|
71
|
-
bundle exec appraisal install
|
72
|
-
|
73
|
-
bundle exec rake clean
|
74
|
-
bundle exec rake compile
|
75
|
-
|
76
|
-
- name: RSpec
|
77
|
-
run: |
|
78
|
-
bundle exec appraisal rspec --force-color
|
79
|
-
|
80
|
-
- name: Report to codeclimate
|
81
|
-
if: always() && matrix.codeclimate
|
82
|
-
shell: bash
|
83
|
-
env:
|
84
|
-
JOB_STATUS: ${{ job.status == 'Success' }}
|
85
|
-
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
86
|
-
run: |
|
87
|
-
EXIT_CODE=$([[ "$JOB_STATUS" == true ]] && echo 0 || echo 1)
|
88
|
-
./cc-test-reporter after-build --exit-code $EXIT_CODE
|
@@ -1,67 +0,0 @@
|
|
1
|
-
name: CI - master
|
2
|
-
on:
|
3
|
-
push:
|
4
|
-
branches:
|
5
|
-
- master
|
6
|
-
|
7
|
-
jobs:
|
8
|
-
rspec:
|
9
|
-
name: RSpec - master
|
10
|
-
runs-on: ubuntu-latest
|
11
|
-
|
12
|
-
services:
|
13
|
-
postgres:
|
14
|
-
options: >-
|
15
|
-
--health-cmd pg_isready
|
16
|
-
--health-interval 10s
|
17
|
-
--health-timeout 5s
|
18
|
-
--health-retries 5
|
19
|
-
image: postgres:10.10
|
20
|
-
ports:
|
21
|
-
- 5432:5432
|
22
|
-
env:
|
23
|
-
POSTGRES_DB: arel_toolkit_test
|
24
|
-
POSTGRES_USER: postgres
|
25
|
-
steps:
|
26
|
-
- uses: actions/checkout@v1
|
27
|
-
|
28
|
-
- name: Set up Ruby 2.5.x
|
29
|
-
uses: actions/setup-ruby@v1
|
30
|
-
with:
|
31
|
-
ruby-version: 2.5.x
|
32
|
-
|
33
|
-
- name: Setup
|
34
|
-
run: |
|
35
|
-
curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
36
|
-
chmod +x ./cc-test-reporter
|
37
|
-
./cc-test-reporter before-build
|
38
|
-
|
39
|
-
sudo apt-get install -y libpq-dev
|
40
|
-
|
41
|
-
gem install bundler
|
42
|
-
|
43
|
-
bundle install --jobs 4 --retry 3
|
44
|
-
bundle exec appraisal install
|
45
|
-
|
46
|
-
bundle exec rake clean
|
47
|
-
bundle exec rake compile
|
48
|
-
|
49
|
-
- name: RSpec
|
50
|
-
run: |
|
51
|
-
bundle exec appraisal rspec --force-color
|
52
|
-
|
53
|
-
- name: Report to codeclimate
|
54
|
-
if: always()
|
55
|
-
shell: bash
|
56
|
-
env:
|
57
|
-
JOB_STATUS: ${{ job.status == 'Success' }}
|
58
|
-
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
59
|
-
run: |
|
60
|
-
EXIT_CODE=$([[ "$JOB_STATUS" == true ]] && echo 0 || echo 1)
|
61
|
-
./cc-test-reporter after-build --exit-code $EXIT_CODE
|
62
|
-
|
63
|
-
- name: Upload coverage to GitHub pages
|
64
|
-
uses: maxheld83/ghpages@v0.2.1
|
65
|
-
env:
|
66
|
-
BUILD_DIR: ./coverage
|
67
|
-
GH_PAT: ${{ secrets.GH_PAT }}
|