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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/coverage.yml +48 -0
  3. data/.github/workflows/test.yml +68 -0
  4. data/.gitignore +3 -1
  5. data/.rubocop.yml +1 -0
  6. data/.ruby-version +1 -1
  7. data/.tool-versions +1 -0
  8. data/Appraisals +4 -0
  9. data/CHANGELOG.md +52 -3
  10. data/Gemfile.lock +129 -81
  11. data/README.md +20 -3
  12. data/arel_toolkit.gemspec +4 -7
  13. data/bin/console +2 -1
  14. data/bin/setup +23 -2
  15. data/docker-compose.yml +11 -0
  16. data/gemfiles/active_record_6.gemfile +7 -0
  17. data/gemfiles/active_record_6.gemfile.lock +212 -0
  18. data/gemfiles/arel_gems.gemfile.lock +11 -10
  19. data/gemfiles/default.gemfile.lock +11 -10
  20. data/lib/arel/enhance/node.rb +18 -12
  21. data/lib/arel/extensions.rb +1 -0
  22. data/lib/arel/extensions/conflict.rb +3 -3
  23. data/lib/arel/extensions/delete_statement.rb +20 -15
  24. data/lib/arel/extensions/function.rb +1 -1
  25. data/lib/arel/extensions/infer.rb +3 -3
  26. data/lib/arel/extensions/insert_statement.rb +4 -4
  27. data/lib/arel/extensions/select_core.rb +21 -7
  28. data/lib/arel/extensions/top.rb +8 -0
  29. data/lib/arel/extensions/transaction.rb +9 -9
  30. data/lib/arel/extensions/update_statement.rb +9 -23
  31. data/lib/arel/middleware/cache_accessor.rb +35 -0
  32. data/lib/arel/middleware/chain.rb +53 -29
  33. data/lib/arel/middleware/database_executor.rb +11 -2
  34. data/lib/arel/middleware/no_op_cache.rb +9 -0
  35. data/lib/arel/sql_to_arel/pg_query_visitor.rb +430 -521
  36. data/lib/arel/sql_to_arel/pg_query_visitor/frame_options.rb +37 -5
  37. data/lib/arel/transformer/prefix_schema_name.rb +5 -3
  38. data/lib/arel_toolkit.rb +1 -0
  39. data/lib/arel_toolkit/version.rb +1 -1
  40. metadata +31 -32
  41. data/.github/workflows/develop.yml +0 -88
  42. 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
- FRAMEOPTIONS = {
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, FRAMEOPTIONS.values)
73
- name = FRAMEOPTIONS.key(number)
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
- string[0] = ''
126
+ s[0] = ''
125
127
  end
126
128
 
127
129
  case string[-1, 1]
128
130
  when "'", '"', '`'
129
- string[-1] = ''
131
+ s[-1] = ''
130
132
  end
131
133
 
132
- string
134
+ s
133
135
  end
134
136
 
135
137
  def database_object_mapping
data/lib/arel_toolkit.rb CHANGED
@@ -5,6 +5,7 @@ require 'pg_search' if Gem.loaded_specs.key?('pg_search')
5
5
  require 'rails/railtie' if Gem.loaded_specs.key?('railties')
6
6
  require 'arel'
7
7
  require 'active_record'
8
+ require 'active_record/connection_adapters/postgresql_adapter'
8
9
 
9
10
  require 'arel_toolkit/version'
10
11
 
@@ -1,3 +1,3 @@
1
1
  module ArelToolkit
2
- VERSION = '0.4.2'.freeze
2
+ VERSION = '0.4.6'.freeze
3
3
  end
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.2
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: 2020-01-08 00:00:00.000000000 Z
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.2.0
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: 5.2.0
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: 1.1.0
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: 1.1.0
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: '10.0'
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: '10.0'
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.2.0
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.2.0
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/develop.yml"
418
- - ".github/workflows/master.yml"
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.0.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 }}