arel_toolkit 0.4.0 → 0.4.5

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 (69) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/coverage.yml +48 -0
  3. data/.github/workflows/test.yml +65 -0
  4. data/.gitignore +6 -1
  5. data/Appraisals +4 -0
  6. data/CHANGELOG.md +87 -7
  7. data/Gemfile.lock +50 -39
  8. data/Guardfile +4 -0
  9. data/README.md +25 -11
  10. data/Rakefile +11 -1
  11. data/arel_toolkit.gemspec +10 -5
  12. data/benchmark.rb +54 -0
  13. data/ext/pg_result_init/extconf.rb +52 -0
  14. data/ext/pg_result_init/pg_result_init.c +138 -0
  15. data/ext/pg_result_init/pg_result_init.h +6 -0
  16. data/gemfiles/active_record_6.gemfile +7 -0
  17. data/gemfiles/active_record_6.gemfile.lock +210 -0
  18. data/gemfiles/arel_gems.gemfile.lock +28 -18
  19. data/gemfiles/default.gemfile.lock +30 -20
  20. data/lib/arel/enhance.rb +1 -0
  21. data/lib/arel/enhance/context_enhancer/arel_table.rb +18 -1
  22. data/lib/arel/enhance/node.rb +71 -28
  23. data/lib/arel/enhance/query.rb +2 -0
  24. data/lib/arel/enhance/query_methods.rb +23 -0
  25. data/lib/arel/enhance/visitor.rb +19 -3
  26. data/lib/arel/extensions.rb +8 -2
  27. data/lib/arel/extensions/active_model_attribute_with_cast_value.rb +22 -0
  28. data/lib/arel/extensions/active_record_relation_query_attribute.rb +22 -0
  29. data/lib/arel/extensions/active_record_type_caster_connection.rb +7 -0
  30. data/lib/arel/extensions/attributes_attribute.rb +47 -0
  31. data/lib/arel/extensions/bind_param.rb +15 -0
  32. data/lib/arel/extensions/coalesce.rb +17 -3
  33. data/lib/arel/extensions/delete_statement.rb +20 -15
  34. data/lib/arel/extensions/exists.rb +59 -0
  35. data/lib/arel/extensions/function.rb +3 -2
  36. data/lib/arel/extensions/greatest.rb +17 -3
  37. data/lib/arel/extensions/infer.rb +1 -1
  38. data/lib/arel/extensions/insert_statement.rb +3 -3
  39. data/lib/arel/extensions/least.rb +17 -3
  40. data/lib/arel/extensions/node.rb +10 -0
  41. data/lib/arel/extensions/range_function.rb +10 -2
  42. data/lib/arel/extensions/select_core.rb +22 -7
  43. data/lib/arel/extensions/top.rb +8 -0
  44. data/lib/arel/extensions/tree_manager.rb +5 -0
  45. data/lib/arel/extensions/update_statement.rb +9 -23
  46. data/lib/arel/middleware.rb +5 -1
  47. data/lib/arel/middleware/active_record_extension.rb +13 -0
  48. data/lib/arel/middleware/cache_accessor.rb +35 -0
  49. data/lib/arel/middleware/chain.rb +110 -31
  50. data/lib/arel/middleware/database_executor.rb +77 -0
  51. data/lib/arel/middleware/no_op_cache.rb +9 -0
  52. data/lib/arel/middleware/postgresql_adapter.rb +41 -5
  53. data/lib/arel/middleware/railtie.rb +6 -2
  54. data/lib/arel/middleware/result.rb +170 -0
  55. data/lib/arel/middleware/to_sql_executor.rb +15 -0
  56. data/lib/arel/middleware/to_sql_middleware.rb +33 -0
  57. data/lib/arel/sql_to_arel/pg_query_visitor.rb +34 -33
  58. data/lib/arel/sql_to_arel/result.rb +19 -2
  59. data/lib/arel/transformer.rb +2 -1
  60. data/lib/arel/transformer/prefix_schema_name.rb +183 -0
  61. data/lib/arel/transformer/remove_active_record_info.rb +2 -4
  62. data/lib/arel/transformer/replace_table_with_subquery.rb +31 -0
  63. data/lib/arel_toolkit.rb +7 -1
  64. data/lib/arel_toolkit/version.rb +1 -1
  65. metadata +101 -37
  66. data/.travis.yml +0 -34
  67. data/lib/arel/extensions/generate_series.rb +0 -9
  68. data/lib/arel/extensions/rank.rb +0 -9
  69. data/lib/arel/transformer/add_schema_to_table.rb +0 -26
@@ -1,8 +1,25 @@
1
1
  module Arel
2
2
  module SqlToArel
3
3
  class Result < Array
4
- def to_sql
5
- map(&:to_sql).join('; ')
4
+ def to_sql(engine = Arel::Table.engine)
5
+ sql, _binds = to_sql_and_binds(engine)
6
+ sql
7
+ end
8
+
9
+ def to_sql_and_binds(engine = Arel::Table.engine)
10
+ sql_collection = []
11
+ binds_collection = []
12
+
13
+ each do |item|
14
+ sql, binds = item.to_sql_and_binds(engine)
15
+ sql_collection << sql
16
+ binds_collection.concat(binds)
17
+ end
18
+
19
+ [
20
+ sql_collection.join('; '),
21
+ binds_collection,
22
+ ]
6
23
  end
7
24
 
8
25
  def map(&block)
@@ -1,4 +1,5 @@
1
- require_relative './transformer/add_schema_to_table'
1
+ require_relative './transformer/prefix_schema_name'
2
+ require_relative './transformer/replace_table_with_subquery'
2
3
  require_relative './transformer/remove_active_record_info'
3
4
 
4
5
  module Arel
@@ -0,0 +1,183 @@
1
+ module Arel
2
+ module Transformer
3
+ class PrefixSchemaName
4
+ PG_CATALOG = 'pg_catalog'.freeze
5
+ DEFAULT_SCHEMA_PRIORITY = ['public', PG_CATALOG].freeze
6
+
7
+ attr_reader :object_mapping
8
+ attr_reader :schema_priority
9
+
10
+ def initialize(
11
+ schema_priority = DEFAULT_SCHEMA_PRIORITY,
12
+ override_object_mapping = {}
13
+ )
14
+ @schema_priority = schema_priority
15
+ @object_mapping = database_object_mapping.merge(override_object_mapping)
16
+ end
17
+
18
+ def call(arel, next_middleware)
19
+ tree = Arel.enhance(arel)
20
+ update_arel_tables(tree)
21
+ update_typecasts(tree)
22
+ update_functions(tree)
23
+
24
+ next_middleware.call tree
25
+ end
26
+
27
+ private
28
+
29
+ def update_arel_tables(tree)
30
+ tree.query(
31
+ class: Arel::Table,
32
+ schema_name: nil,
33
+ context: { range_variable: true },
34
+ ).each do |node|
35
+ schema_name = schema_name_from_object_name(node['name'].object.to_s)
36
+ node['schema_name'].replace(schema_name)
37
+ end
38
+ end
39
+
40
+ def update_typecasts(tree)
41
+ tree.query(
42
+ class: Arel::Nodes::TypeCast,
43
+ type_name: 'regclass',
44
+ ).each do |node|
45
+ update_typecast_node(node)
46
+ end
47
+ end
48
+
49
+ def update_typecast_node(node)
50
+ table_name = table_name_from_arel_node(node['arg'].object)
51
+ reference_parts = table_name.split('.')
52
+
53
+ case reference_parts.length
54
+ when 1
55
+ schema_name = schema_name_from_object_name(table_name)
56
+ reference_parts.unshift(schema_name)
57
+ node['arg']['expr'].replace(reference_parts.join('.'))
58
+ when 2
59
+ node # Do nothing
60
+ else
61
+ raise "Don't know how to handle `#{reference_parts.length}` parts in " \
62
+ "`#{reference_parts}` for sql `#{node.to_sql}`"
63
+ end
64
+ end
65
+
66
+ def update_functions(tree)
67
+ tree.query(
68
+ class: Arel::Enhance::QueryMethods.in_ancestors?(Arel::Nodes::Function),
69
+ schema_name: nil,
70
+ ).each do |node|
71
+ update_function_node(node)
72
+ end
73
+ end
74
+
75
+ def update_function_node(node)
76
+ object_name = if node.object.is_a?(Arel::Nodes::NamedFunction)
77
+ node['name'].object.downcase
78
+ else
79
+ node.object.class.to_s.demodulize.underscore
80
+ end
81
+
82
+ schema_name = schema_name_from_object_name(object_name)
83
+ node['schema_name'].replace(schema_name)
84
+ end
85
+
86
+ def table_name_from_arel_node(arel_node)
87
+ case arel_node
88
+ when Arel::Nodes::Quoted
89
+ arel_node.expr
90
+ else
91
+ raise "Unknown node `#{table_name}` for `#{node.inspect}`"
92
+ end
93
+ end
94
+
95
+ def schema_name_from_object_name(table_name)
96
+ table_name = unquote_string(table_name)
97
+ possible_schemas = object_mapping[table_name]
98
+
99
+ if possible_schemas.nil?
100
+ raise "Object `#{table_name}` does not exist in the object_mapping and cannot be prefixed"
101
+ end
102
+
103
+ schema_name = schema_priority.find do |possible_schema_name|
104
+ possible_schemas.include?(possible_schema_name)
105
+ end
106
+
107
+ if schema_name.nil?
108
+ raise "Could not find a schema name for table `#{table_name}`.\n" \
109
+ "Current schema priority is `#{schema_priority}`.\n" \
110
+ "Possible schemas are `#{possible_schemas}`."
111
+ end
112
+
113
+ # We don't need to prefix nodes with `pg_catalog`, because that's the default
114
+ # even if the search_path does not include `pg_catalog`.
115
+ return nil if schema_name == PG_CATALOG
116
+
117
+ schema_name
118
+ end
119
+
120
+ # https://www.rubydoc.info/github/rubyworks/facets/String:unquote
121
+ def unquote_string(string)
122
+ case string[0, 1]
123
+ when "'", '"', '`'
124
+ string[0] = ''
125
+ end
126
+
127
+ case string[-1, 1]
128
+ when "'", '"', '`'
129
+ string[-1] = ''
130
+ end
131
+
132
+ string
133
+ end
134
+
135
+ def database_object_mapping
136
+ mapping = {}
137
+ update_mapping mapping, database_tables
138
+ update_mapping mapping, database_views
139
+ update_mapping mapping, database_materialized_views
140
+ update_mapping mapping, database_functions
141
+
142
+ mapping
143
+ end
144
+
145
+ def update_mapping(mapping, objects)
146
+ objects.each do |object|
147
+ name = object.fetch('object_name').to_s.downcase
148
+ mapping[name] ||= []
149
+ mapping[name] << object.fetch('schema_name').to_s
150
+ end
151
+ end
152
+
153
+ def database_tables
154
+ connection.execute(
155
+ 'SELECT tablename AS object_name, schemaname AS schema_name FROM pg_tables',
156
+ )
157
+ end
158
+
159
+ def database_views
160
+ connection.execute(
161
+ 'SELECT viewname AS object_name, schemaname AS schema_name FROM pg_views',
162
+ )
163
+ end
164
+
165
+ def database_materialized_views
166
+ connection.execute(
167
+ 'SELECT matviewname AS object_name, schemaname AS schema_name FROM pg_matviews',
168
+ )
169
+ end
170
+
171
+ def database_functions
172
+ connection.execute(
173
+ 'SELECT pg_proc.proname AS object_name, pg_namespace.nspname AS schema_name ' \
174
+ 'FROM pg_proc INNER JOIN pg_namespace ON pg_proc.pronamespace = pg_namespace.oid',
175
+ )
176
+ end
177
+
178
+ def connection
179
+ Arel::Table.engine.connection
180
+ end
181
+ end
182
+ end
183
+ end
@@ -2,7 +2,7 @@ module Arel
2
2
  module Transformer
3
3
  class RemoveActiveRecordInfo
4
4
  class << self
5
- def call(arel, _context)
5
+ def call(arel, next_middleware)
6
6
  tree = Arel.enhance(arel)
7
7
 
8
8
  tree.query(class: Arel::Table).each do |node|
@@ -15,7 +15,7 @@ module Arel
15
15
  )
16
16
  end
17
17
 
18
- tree.object
18
+ next_middleware.call tree.object
19
19
  end
20
20
 
21
21
  private
@@ -30,8 +30,6 @@ module Arel
30
30
  Arel::Nodes::TypeCast.new(Arel::Nodes::Quoted.new('t'), 'bool')
31
31
  when FalseClass
32
32
  Arel::Nodes::TypeCast.new(Arel::Nodes::Quoted.new('f'), 'bool')
33
- when Float
34
- value
35
33
  else
36
34
  raise "Unknown value cast `#{value}` with class `#{value.class}`"
37
35
  end
@@ -0,0 +1,31 @@
1
+ module Arel
2
+ module Transformer
3
+ class ReplaceTableWithSubquery
4
+ attr_reader :subquery_for_table
5
+
6
+ def initialize(subquery_for_table)
7
+ @subquery_for_table = subquery_for_table
8
+ end
9
+
10
+ def call(arel, next_middleware)
11
+ tree = Arel.enhance(arel)
12
+ update_arel_tables(tree)
13
+ next_middleware.call tree
14
+ end
15
+
16
+ private
17
+
18
+ def update_arel_tables(tree)
19
+ tree.query(
20
+ class: Arel::Table,
21
+ context: { range_variable: true },
22
+ schema_name: nil,
23
+ ).each do |node|
24
+ if (subquery = subquery_for_table.call(node.name.value))
25
+ node.replace subquery.as(node.name.value)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
data/lib/arel_toolkit.rb CHANGED
@@ -3,9 +3,15 @@ require 'postgres_ext' if Gem.loaded_specs.key?('postgres_ext')
3
3
  require 'active_record_upsert' if Gem.loaded_specs.key?('active_record_upsert')
4
4
  require 'pg_search' if Gem.loaded_specs.key?('pg_search')
5
5
  require 'rails/railtie' if Gem.loaded_specs.key?('railties')
6
+ require 'arel'
7
+ require 'active_record'
8
+ require 'active_record/connection_adapters/postgresql_adapter'
6
9
 
7
10
  require 'arel_toolkit/version'
8
- require 'arel'
11
+
12
+ require 'pg'
13
+ require 'arel_toolkit/pg_result_init'
14
+
9
15
  require 'arel/extensions'
10
16
  require 'arel/sql_to_arel'
11
17
  require 'arel/middleware'
@@ -1,3 +1,3 @@
1
1
  module ArelToolkit
2
- VERSION = '0.4.0'.freeze
2
+ VERSION = '0.4.5'.freeze
3
3
  end
metadata CHANGED
@@ -1,43 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arel_toolkit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - maarten
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-07-31 00:00:00.000000000 Z
11
+ date: 2021-07-08 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: '0'
34
20
  type: :runtime
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
- - - "~>"
24
+ - - ">="
39
25
  - !ruby/object:Gem::Version
40
- version: 5.2.0
26
+ version: '0'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: pg
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -58,14 +44,14 @@ dependencies:
58
44
  requirements:
59
45
  - - "~>"
60
46
  - !ruby/object:Gem::Version
61
- version: 1.1.0
47
+ version: '1.3'
62
48
  type: :runtime
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
52
  - - "~>"
67
53
  - !ruby/object:Gem::Version
68
- version: 1.1.0
54
+ version: '1.3'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: bundler
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -100,28 +86,42 @@ dependencies:
100
86
  requirements:
101
87
  - - "~>"
102
88
  - !ruby/object:Gem::Version
103
- version: 1.14.3
89
+ version: '1.15'
104
90
  type: :development
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
94
  - - "~>"
109
95
  - !ruby/object:Gem::Version
110
- version: 1.14.3
96
+ version: '1.15'
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: rake
113
99
  requirement: !ruby/object:Gem::Requirement
114
100
  requirements:
115
101
  - - "~>"
116
102
  - !ruby/object:Gem::Version
117
- version: '10.0'
103
+ version: '13.0'
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
107
  requirements:
122
108
  - - "~>"
123
109
  - !ruby/object:Gem::Version
124
- version: '10.0'
110
+ version: '13.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rake-compiler
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.0'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: rspec
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -262,6 +262,48 @@ dependencies:
262
262
  - - "~>"
263
263
  - !ruby/object:Gem::Version
264
264
  version: 1.3.0
265
+ - !ruby/object:Gem::Dependency
266
+ name: guard-rake
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - "~>"
270
+ - !ruby/object:Gem::Version
271
+ version: 1.0.0
272
+ type: :development
273
+ prerelease: false
274
+ version_requirements: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - "~>"
277
+ - !ruby/object:Gem::Version
278
+ version: 1.0.0
279
+ - !ruby/object:Gem::Dependency
280
+ name: stackprof
281
+ requirement: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - "~>"
284
+ - !ruby/object:Gem::Version
285
+ version: '0.2'
286
+ type: :development
287
+ prerelease: false
288
+ version_requirements: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - "~>"
291
+ - !ruby/object:Gem::Version
292
+ version: '0.2'
293
+ - !ruby/object:Gem::Dependency
294
+ name: memory_profiler
295
+ requirement: !ruby/object:Gem::Requirement
296
+ requirements:
297
+ - - "~>"
298
+ - !ruby/object:Gem::Version
299
+ version: '0.9'
300
+ type: :development
301
+ prerelease: false
302
+ version_requirements: !ruby/object:Gem::Requirement
303
+ requirements:
304
+ - - "~>"
305
+ - !ruby/object:Gem::Version
306
+ version: '0.9'
265
307
  - !ruby/object:Gem::Dependency
266
308
  name: pry
267
309
  requirement: !ruby/object:Gem::Requirement
@@ -349,19 +391,21 @@ dependencies:
349
391
  description: 'ArelToolkit contains parsing, querying, modifying, optimisations, extensions
350
392
  and more for Arel.
351
393
 
352
- '
394
+ '
353
395
  email:
354
396
  - maarten@vgijssel.nl
355
397
  executables: []
356
- extensions: []
398
+ extensions:
399
+ - ext/pg_result_init/extconf.rb
357
400
  extra_rdoc_files: []
358
401
  files:
359
402
  - ".codeclimate.yml"
403
+ - ".github/workflows/coverage.yml"
404
+ - ".github/workflows/test.yml"
360
405
  - ".gitignore"
361
406
  - ".rspec"
362
407
  - ".rubocop.yml"
363
408
  - ".ruby-version"
364
- - ".travis.yml"
365
409
  - Appraisals
366
410
  - CHANGELOG.md
367
411
  - CODE_OF_CONDUCT.md
@@ -372,9 +416,15 @@ files:
372
416
  - README.md
373
417
  - Rakefile
374
418
  - arel_toolkit.gemspec
419
+ - benchmark.rb
375
420
  - bin/console
376
421
  - bin/setup
422
+ - ext/pg_result_init/extconf.rb
423
+ - ext/pg_result_init/pg_result_init.c
424
+ - ext/pg_result_init/pg_result_init.h
377
425
  - gemfiles/.bundle/config
426
+ - gemfiles/active_record_6.gemfile
427
+ - gemfiles/active_record_6.gemfile.lock
378
428
  - gemfiles/arel_gems.gemfile
379
429
  - gemfiles/arel_gems.gemfile.lock
380
430
  - gemfiles/default.gemfile
@@ -385,9 +435,13 @@ files:
385
435
  - lib/arel/enhance/path.rb
386
436
  - lib/arel/enhance/path_node.rb
387
437
  - lib/arel/enhance/query.rb
438
+ - lib/arel/enhance/query_methods.rb
388
439
  - lib/arel/enhance/visitor.rb
389
440
  - lib/arel/extensions.rb
390
441
  - lib/arel/extensions/absolute.rb
442
+ - lib/arel/extensions/active_model_attribute_with_cast_value.rb
443
+ - lib/arel/extensions/active_record_relation_query_attribute.rb
444
+ - lib/arel/extensions/active_record_type_caster_connection.rb
391
445
  - lib/arel/extensions/active_record_type_caster_map.rb
392
446
  - lib/arel/extensions/all.rb
393
447
  - lib/arel/extensions/any.rb
@@ -395,8 +449,10 @@ files:
395
449
  - lib/arel/extensions/array_subselect.rb
396
450
  - lib/arel/extensions/assignment.rb
397
451
  - lib/arel/extensions/at_time_zone.rb
452
+ - lib/arel/extensions/attributes_attribute.rb
398
453
  - lib/arel/extensions/between_symmetric.rb
399
454
  - lib/arel/extensions/binary.rb
455
+ - lib/arel/extensions/bind_param.rb
400
456
  - lib/arel/extensions/bit_string.rb
401
457
  - lib/arel/extensions/bitwise_xor.rb
402
458
  - lib/arel/extensions/case.rb
@@ -425,12 +481,12 @@ files:
425
481
  - lib/arel/extensions/dot.rb
426
482
  - lib/arel/extensions/equality.rb
427
483
  - lib/arel/extensions/except_all.rb
484
+ - lib/arel/extensions/exists.rb
428
485
  - lib/arel/extensions/exponentiation.rb
429
486
  - lib/arel/extensions/extract_from.rb
430
487
  - lib/arel/extensions/factorial.rb
431
488
  - lib/arel/extensions/false.rb
432
489
  - lib/arel/extensions/function.rb
433
- - lib/arel/extensions/generate_series.rb
434
490
  - lib/arel/extensions/greatest.rb
435
491
  - lib/arel/extensions/indirection.rb
436
492
  - lib/arel/extensions/infer.rb
@@ -454,6 +510,7 @@ files:
454
510
  - lib/arel/extensions/named_argument.rb
455
511
  - lib/arel/extensions/named_function.rb
456
512
  - lib/arel/extensions/natural_join.rb
513
+ - lib/arel/extensions/node.rb
457
514
  - lib/arel/extensions/not_between.rb
458
515
  - lib/arel/extensions/not_between_symmetric.rb
459
516
  - lib/arel/extensions/not_distinct_from.rb
@@ -467,7 +524,6 @@ files:
467
524
  - lib/arel/extensions/position.rb
468
525
  - lib/arel/extensions/prepare.rb
469
526
  - lib/arel/extensions/range_function.rb
470
- - lib/arel/extensions/rank.rb
471
527
  - lib/arel/extensions/row.rb
472
528
  - lib/arel/extensions/select_core.rb
473
529
  - lib/arel/extensions/select_manager.rb
@@ -480,6 +536,7 @@ files:
480
536
  - lib/arel/extensions/table.rb
481
537
  - lib/arel/extensions/time_with_precision.rb
482
538
  - lib/arel/extensions/to_sql.rb
539
+ - lib/arel/extensions/top.rb
483
540
  - lib/arel/extensions/transaction.rb
484
541
  - lib/arel/extensions/tree_manager.rb
485
542
  - lib/arel/extensions/trim.rb
@@ -496,24 +553,32 @@ files:
496
553
  - lib/arel/extensions/variable_show.rb
497
554
  - lib/arel/extensions/with_ordinality.rb
498
555
  - lib/arel/middleware.rb
556
+ - lib/arel/middleware/active_record_extension.rb
557
+ - lib/arel/middleware/cache_accessor.rb
499
558
  - lib/arel/middleware/chain.rb
559
+ - lib/arel/middleware/database_executor.rb
560
+ - lib/arel/middleware/no_op_cache.rb
500
561
  - lib/arel/middleware/postgresql_adapter.rb
501
562
  - lib/arel/middleware/railtie.rb
563
+ - lib/arel/middleware/result.rb
564
+ - lib/arel/middleware/to_sql_executor.rb
565
+ - lib/arel/middleware/to_sql_middleware.rb
502
566
  - lib/arel/sql_to_arel.rb
503
567
  - lib/arel/sql_to_arel/error.rb
504
568
  - lib/arel/sql_to_arel/pg_query_visitor.rb
505
569
  - lib/arel/sql_to_arel/pg_query_visitor/frame_options.rb
506
570
  - lib/arel/sql_to_arel/result.rb
507
571
  - lib/arel/transformer.rb
508
- - lib/arel/transformer/add_schema_to_table.rb
572
+ - lib/arel/transformer/prefix_schema_name.rb
509
573
  - lib/arel/transformer/remove_active_record_info.rb
574
+ - lib/arel/transformer/replace_table_with_subquery.rb
510
575
  - lib/arel_toolkit.rb
511
576
  - lib/arel_toolkit/version.rb
512
577
  homepage: https://github.com/mvgijssel/arel_toolkit
513
578
  licenses:
514
579
  - MIT
515
580
  metadata: {}
516
- post_install_message:
581
+ post_install_message:
517
582
  rdoc_options: []
518
583
  require_paths:
519
584
  - lib
@@ -528,9 +593,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
528
593
  - !ruby/object:Gem::Version
529
594
  version: '0'
530
595
  requirements: []
531
- rubyforge_project:
532
- rubygems_version: 2.7.6
533
- signing_key:
596
+ rubygems_version: 3.0.3
597
+ signing_key:
534
598
  specification_version: 4
535
599
  summary: Collection of tools for Arel
536
600
  test_files: []