arel_toolkit 0.3.0 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (133) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +3 -0
  3. data/.github/workflows/develop.yml +90 -0
  4. data/.github/workflows/master.yml +67 -0
  5. data/.gitignore +8 -0
  6. data/.rubocop.yml +13 -5
  7. data/Appraisals +13 -0
  8. data/CHANGELOG.md +94 -5
  9. data/Gemfile +5 -0
  10. data/Gemfile.lock +62 -33
  11. data/Guardfile +4 -0
  12. data/README.md +67 -23
  13. data/Rakefile +11 -1
  14. data/arel_toolkit.gemspec +15 -6
  15. data/benchmark.rb +54 -0
  16. data/ext/pg_result_init/extconf.rb +52 -0
  17. data/ext/pg_result_init/pg_result_init.c +138 -0
  18. data/ext/pg_result_init/pg_result_init.h +6 -0
  19. data/gemfiles/active_record_6.gemfile +7 -0
  20. data/gemfiles/active_record_6.gemfile.lock +210 -0
  21. data/gemfiles/arel_gems.gemfile +10 -0
  22. data/gemfiles/arel_gems.gemfile.lock +284 -0
  23. data/gemfiles/default.gemfile +5 -0
  24. data/gemfiles/default.gemfile.lock +208 -0
  25. data/lib/arel/enhance.rb +17 -0
  26. data/lib/arel/enhance/context_enhancer/arel_table.rb +92 -0
  27. data/lib/arel/enhance/node.rb +232 -0
  28. data/lib/arel/enhance/path.rb +38 -0
  29. data/lib/arel/enhance/path_node.rb +26 -0
  30. data/lib/arel/enhance/query.rb +38 -0
  31. data/lib/arel/enhance/query_methods.rb +23 -0
  32. data/lib/arel/enhance/visitor.rb +97 -0
  33. data/lib/arel/extensions.rb +32 -6
  34. data/lib/arel/extensions/active_model_attribute_with_cast_value.rb +22 -0
  35. data/lib/arel/extensions/active_record_relation_query_attribute.rb +22 -0
  36. data/lib/arel/extensions/active_record_type_caster_connection.rb +7 -0
  37. data/lib/arel/extensions/active_record_type_caster_map.rb +7 -0
  38. data/lib/arel/extensions/array.rb +2 -9
  39. data/lib/arel/extensions/at_time_zone.rb +10 -3
  40. data/lib/arel/extensions/attributes_attribute.rb +47 -0
  41. data/lib/arel/extensions/binary.rb +7 -0
  42. data/lib/arel/extensions/bind_param.rb +15 -0
  43. data/lib/arel/extensions/bit_string.rb +2 -9
  44. data/lib/arel/extensions/case.rb +17 -0
  45. data/lib/arel/extensions/coalesce.rb +17 -3
  46. data/lib/arel/extensions/conflict.rb +9 -0
  47. data/lib/arel/extensions/contains.rb +27 -5
  48. data/lib/arel/extensions/current_catalog.rb +4 -0
  49. data/lib/arel/extensions/current_date.rb +4 -0
  50. data/lib/arel/extensions/current_of_expression.rb +2 -9
  51. data/lib/arel/extensions/current_role.rb +4 -0
  52. data/lib/arel/extensions/current_row.rb +7 -0
  53. data/lib/arel/extensions/current_schema.rb +4 -0
  54. data/lib/arel/extensions/current_user.rb +4 -0
  55. data/lib/arel/extensions/dealocate.rb +31 -0
  56. data/lib/arel/extensions/default_values.rb +4 -0
  57. data/lib/arel/extensions/delete_manager.rb +22 -6
  58. data/lib/arel/extensions/delete_statement.rb +46 -24
  59. data/lib/arel/extensions/dot.rb +11 -0
  60. data/lib/arel/extensions/exists.rb +59 -0
  61. data/lib/arel/extensions/extract_from.rb +3 -10
  62. data/lib/arel/extensions/factorial.rb +10 -2
  63. data/lib/arel/extensions/false.rb +7 -0
  64. data/lib/arel/extensions/function.rb +44 -14
  65. data/lib/arel/extensions/greatest.rb +17 -3
  66. data/lib/arel/extensions/indirection.rb +3 -12
  67. data/lib/arel/extensions/infer.rb +7 -7
  68. data/lib/arel/extensions/infix_operation.rb +17 -0
  69. data/lib/arel/extensions/insert_manager.rb +19 -3
  70. data/lib/arel/extensions/insert_statement.rb +31 -12
  71. data/lib/arel/extensions/into.rb +21 -0
  72. data/lib/arel/extensions/least.rb +17 -3
  73. data/lib/arel/extensions/named_argument.rb +3 -8
  74. data/lib/arel/extensions/named_function.rb +7 -0
  75. data/lib/arel/extensions/node.rb +10 -0
  76. data/lib/arel/extensions/ordering.rb +21 -6
  77. data/lib/arel/extensions/overlaps.rb +9 -0
  78. data/lib/arel/extensions/overlay.rb +9 -0
  79. data/lib/arel/extensions/position.rb +3 -8
  80. data/lib/arel/extensions/prepare.rb +39 -0
  81. data/lib/arel/extensions/range_function.rb +10 -2
  82. data/lib/arel/extensions/row.rb +3 -8
  83. data/lib/arel/extensions/select_core.rb +73 -0
  84. data/lib/arel/extensions/select_manager.rb +22 -6
  85. data/lib/arel/extensions/select_statement.rb +31 -9
  86. data/lib/arel/extensions/session_user.rb +4 -0
  87. data/lib/arel/extensions/set_to_default.rb +4 -0
  88. data/lib/arel/extensions/substring.rb +8 -0
  89. data/lib/arel/extensions/table.rb +43 -10
  90. data/lib/arel/extensions/time_with_precision.rb +6 -0
  91. data/lib/arel/extensions/to_sql.rb +27 -0
  92. data/lib/arel/extensions/top.rb +8 -0
  93. data/lib/arel/extensions/transaction.rb +3 -8
  94. data/lib/arel/extensions/tree_manager.rb +15 -0
  95. data/lib/arel/extensions/trim.rb +8 -0
  96. data/lib/arel/extensions/true.rb +7 -0
  97. data/lib/arel/extensions/type_cast.rb +7 -0
  98. data/lib/arel/extensions/unary.rb +7 -0
  99. data/lib/arel/extensions/unary_operation.rb +16 -0
  100. data/lib/arel/extensions/unknown.rb +4 -0
  101. data/lib/arel/extensions/update_manager.rb +22 -6
  102. data/lib/arel/extensions/update_statement.rb +36 -33
  103. data/lib/arel/extensions/user.rb +4 -0
  104. data/lib/arel/extensions/values_list.rb +15 -0
  105. data/lib/arel/extensions/variable_set.rb +9 -0
  106. data/lib/arel/extensions/variable_show.rb +3 -8
  107. data/lib/arel/middleware.rb +5 -1
  108. data/lib/arel/middleware/active_record_extension.rb +13 -0
  109. data/lib/arel/middleware/cache_accessor.rb +35 -0
  110. data/lib/arel/middleware/chain.rb +108 -33
  111. data/lib/arel/middleware/database_executor.rb +77 -0
  112. data/lib/arel/middleware/no_op_cache.rb +9 -0
  113. data/lib/arel/middleware/postgresql_adapter.rb +41 -5
  114. data/lib/arel/middleware/railtie.rb +15 -1
  115. data/lib/arel/middleware/result.rb +170 -0
  116. data/lib/arel/middleware/to_sql_executor.rb +15 -0
  117. data/lib/arel/middleware/to_sql_middleware.rb +33 -0
  118. data/lib/arel/sql_to_arel.rb +6 -3
  119. data/lib/arel/sql_to_arel/pg_query_visitor.rb +67 -38
  120. data/lib/arel/sql_to_arel/pg_query_visitor/frame_options.rb +1 -1
  121. data/lib/arel/sql_to_arel/result.rb +17 -4
  122. data/lib/arel/transformer.rb +8 -0
  123. data/lib/arel/transformer/prefix_schema_name.rb +183 -0
  124. data/lib/arel/transformer/remove_active_record_info.rb +40 -0
  125. data/lib/arel/transformer/replace_table_with_subquery.rb +31 -0
  126. data/lib/arel_toolkit.rb +15 -2
  127. data/lib/arel_toolkit/version.rb +1 -1
  128. metadata +179 -42
  129. data/.travis.yml +0 -29
  130. data/lib/arel/extensions/generate_series.rb +0 -9
  131. data/lib/arel/extensions/rank.rb +0 -9
  132. data/lib/arel/extensions/unbound_column_reference.rb +0 -5
  133. data/lib/arel/sql_formatter.rb +0 -59
@@ -56,7 +56,7 @@ module Arel
56
56
  'FRAMEOPTION_START_VALUE_PRECEDING' => 0x00400,
57
57
  'FRAMEOPTION_END_VALUE_PRECEDING' => 0x00800,
58
58
  'FRAMEOPTION_START_VALUE_FOLLOWING' => 0x01000,
59
- 'FRAMEOPTION_END_VALUE_FOLLOWING' => 0x02000
59
+ 'FRAMEOPTION_END_VALUE_FOLLOWING' => 0x02000,
60
60
  }.freeze
61
61
 
62
62
  def biggest_detractable_number(number, candidates)
@@ -1,12 +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
6
7
  end
7
8
 
8
- def to_formatted_sql
9
- map(&:to_formatted_sql).join('; ')
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
+ ]
10
23
  end
11
24
 
12
25
  def map(&block)
@@ -0,0 +1,8 @@
1
+ require_relative './transformer/prefix_schema_name'
2
+ require_relative './transformer/replace_table_with_subquery'
3
+ require_relative './transformer/remove_active_record_info'
4
+
5
+ module Arel
6
+ module Transformer
7
+ end
8
+ end
@@ -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
@@ -0,0 +1,40 @@
1
+ module Arel
2
+ module Transformer
3
+ class RemoveActiveRecordInfo
4
+ class << self
5
+ def call(arel, next_middleware)
6
+ tree = Arel.enhance(arel)
7
+
8
+ tree.query(class: Arel::Table).each do |node|
9
+ node['type_caster'].remove
10
+ end
11
+
12
+ tree.query(class: Arel::Nodes::BindParam).each do |node|
13
+ node.replace(
14
+ cast_for_database(node.object.value.value_for_database),
15
+ )
16
+ end
17
+
18
+ next_middleware.call tree.object
19
+ end
20
+
21
+ private
22
+
23
+ def cast_for_database(value)
24
+ case value
25
+ when String
26
+ Arel::Nodes.build_quoted(value)
27
+ when Integer
28
+ value
29
+ when TrueClass
30
+ Arel::Nodes::TypeCast.new(Arel::Nodes::Quoted.new('t'), 'bool')
31
+ when FalseClass
32
+ Arel::Nodes::TypeCast.new(Arel::Nodes::Quoted.new('f'), 'bool')
33
+ else
34
+ raise "Unknown value cast `#{value}` with class `#{value.class}`"
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ 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
@@ -1,9 +1,22 @@
1
- require 'arel_toolkit/version'
1
+ # Make sure the gems are loaded before ArelToolkit
2
+ require 'postgres_ext' if Gem.loaded_specs.key?('postgres_ext')
3
+ require 'active_record_upsert' if Gem.loaded_specs.key?('active_record_upsert')
4
+ require 'pg_search' if Gem.loaded_specs.key?('pg_search')
5
+ require 'rails/railtie' if Gem.loaded_specs.key?('railties')
2
6
  require 'arel'
7
+ require 'active_record'
8
+ require 'active_record/connection_adapters/postgresql_adapter'
9
+
10
+ require 'arel_toolkit/version'
11
+
12
+ require 'pg'
13
+ require 'arel_toolkit/pg_result_init'
14
+
3
15
  require 'arel/extensions'
4
16
  require 'arel/sql_to_arel'
5
17
  require 'arel/middleware'
6
- require 'arel/sql_formatter'
18
+ require 'arel/enhance'
19
+ require 'arel/transformer'
7
20
 
8
21
  module ArelToolkit
9
22
  end
@@ -1,3 +1,3 @@
1
1
  module ArelToolkit
2
- VERSION = '0.3.0'.freeze
2
+ VERSION = '0.4.4'.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.3.0
4
+ version: 0.4.4
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-01 00:00:00.000000000 Z
11
+ date: 2021-02-11 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
@@ -136,6 +136,34 @@ dependencies:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: '3.8'
139
+ - !ruby/object:Gem::Dependency
140
+ name: approvals
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: 0.0.24
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: 0.0.24
153
+ - !ruby/object:Gem::Dependency
154
+ name: appraisal
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: 2.2.0
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: 2.2.0
139
167
  - !ruby/object:Gem::Dependency
140
168
  name: database_cleaner
141
169
  requirement: !ruby/object:Gem::Requirement
@@ -182,16 +210,16 @@ dependencies:
182
210
  name: rubocop
183
211
  requirement: !ruby/object:Gem::Requirement
184
212
  requirements:
185
- - - "~>"
213
+ - - '='
186
214
  - !ruby/object:Gem::Version
187
- version: '0.69'
215
+ version: 0.71.0
188
216
  type: :development
189
217
  prerelease: false
190
218
  version_requirements: !ruby/object:Gem::Requirement
191
219
  requirements:
192
- - - "~>"
220
+ - - '='
193
221
  - !ruby/object:Gem::Version
194
- version: '0.69'
222
+ version: 0.71.0
195
223
  - !ruby/object:Gem::Dependency
196
224
  name: guard
197
225
  requirement: !ruby/object:Gem::Requirement
@@ -234,6 +262,48 @@ dependencies:
234
262
  - - "~>"
235
263
  - !ruby/object:Gem::Version
236
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'
237
307
  - !ruby/object:Gem::Dependency
238
308
  name: pry
239
309
  requirement: !ruby/object:Gem::Requirement
@@ -262,6 +332,20 @@ dependencies:
262
332
  - - ">="
263
333
  - !ruby/object:Gem::Version
264
334
  version: '0'
335
+ - !ruby/object:Gem::Dependency
336
+ name: pry-doc
337
+ requirement: !ruby/object:Gem::Requirement
338
+ requirements:
339
+ - - ">="
340
+ - !ruby/object:Gem::Version
341
+ version: '0'
342
+ type: :development
343
+ prerelease: false
344
+ version_requirements: !ruby/object:Gem::Requirement
345
+ requirements:
346
+ - - ">="
347
+ - !ruby/object:Gem::Version
348
+ version: '0'
265
349
  - !ruby/object:Gem::Dependency
266
350
  name: pry-rescue
267
351
  requirement: !ruby/object:Gem::Requirement
@@ -307,19 +391,22 @@ dependencies:
307
391
  description: 'ArelToolkit contains parsing, querying, modifying, optimisations, extensions
308
392
  and more for Arel.
309
393
 
310
- '
394
+ '
311
395
  email:
312
396
  - maarten@vgijssel.nl
313
397
  executables: []
314
- extensions: []
398
+ extensions:
399
+ - ext/pg_result_init/extconf.rb
315
400
  extra_rdoc_files: []
316
401
  files:
317
402
  - ".codeclimate.yml"
403
+ - ".github/workflows/develop.yml"
404
+ - ".github/workflows/master.yml"
318
405
  - ".gitignore"
319
406
  - ".rspec"
320
407
  - ".rubocop.yml"
321
408
  - ".ruby-version"
322
- - ".travis.yml"
409
+ - Appraisals
323
410
  - CHANGELOG.md
324
411
  - CODE_OF_CONDUCT.md
325
412
  - Gemfile
@@ -329,19 +416,46 @@ files:
329
416
  - README.md
330
417
  - Rakefile
331
418
  - arel_toolkit.gemspec
419
+ - benchmark.rb
332
420
  - bin/console
333
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
425
+ - gemfiles/.bundle/config
426
+ - gemfiles/active_record_6.gemfile
427
+ - gemfiles/active_record_6.gemfile.lock
428
+ - gemfiles/arel_gems.gemfile
429
+ - gemfiles/arel_gems.gemfile.lock
430
+ - gemfiles/default.gemfile
431
+ - gemfiles/default.gemfile.lock
432
+ - lib/arel/enhance.rb
433
+ - lib/arel/enhance/context_enhancer/arel_table.rb
434
+ - lib/arel/enhance/node.rb
435
+ - lib/arel/enhance/path.rb
436
+ - lib/arel/enhance/path_node.rb
437
+ - lib/arel/enhance/query.rb
438
+ - lib/arel/enhance/query_methods.rb
439
+ - lib/arel/enhance/visitor.rb
334
440
  - lib/arel/extensions.rb
335
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
445
+ - lib/arel/extensions/active_record_type_caster_map.rb
336
446
  - lib/arel/extensions/all.rb
337
447
  - lib/arel/extensions/any.rb
338
448
  - lib/arel/extensions/array.rb
339
449
  - lib/arel/extensions/array_subselect.rb
340
450
  - lib/arel/extensions/assignment.rb
341
451
  - lib/arel/extensions/at_time_zone.rb
452
+ - lib/arel/extensions/attributes_attribute.rb
342
453
  - lib/arel/extensions/between_symmetric.rb
454
+ - lib/arel/extensions/binary.rb
455
+ - lib/arel/extensions/bind_param.rb
343
456
  - lib/arel/extensions/bit_string.rb
344
457
  - lib/arel/extensions/bitwise_xor.rb
458
+ - lib/arel/extensions/case.rb
345
459
  - lib/arel/extensions/coalesce.rb
346
460
  - lib/arel/extensions/conflict.rb
347
461
  - lib/arel/extensions/contained_by.rb
@@ -354,27 +468,33 @@ files:
354
468
  - lib/arel/extensions/current_date.rb
355
469
  - lib/arel/extensions/current_of_expression.rb
356
470
  - lib/arel/extensions/current_role.rb
471
+ - lib/arel/extensions/current_row.rb
357
472
  - lib/arel/extensions/current_schema.rb
358
473
  - lib/arel/extensions/current_time.rb
359
474
  - lib/arel/extensions/current_timestamp.rb
360
475
  - lib/arel/extensions/current_user.rb
476
+ - lib/arel/extensions/dealocate.rb
361
477
  - lib/arel/extensions/default_values.rb
362
478
  - lib/arel/extensions/delete_manager.rb
363
479
  - lib/arel/extensions/delete_statement.rb
364
480
  - lib/arel/extensions/distinct_from.rb
481
+ - lib/arel/extensions/dot.rb
365
482
  - lib/arel/extensions/equality.rb
366
483
  - lib/arel/extensions/except_all.rb
484
+ - lib/arel/extensions/exists.rb
367
485
  - lib/arel/extensions/exponentiation.rb
368
486
  - lib/arel/extensions/extract_from.rb
369
487
  - lib/arel/extensions/factorial.rb
488
+ - lib/arel/extensions/false.rb
370
489
  - lib/arel/extensions/function.rb
371
- - lib/arel/extensions/generate_series.rb
372
490
  - lib/arel/extensions/greatest.rb
373
491
  - lib/arel/extensions/indirection.rb
374
492
  - lib/arel/extensions/infer.rb
493
+ - lib/arel/extensions/infix_operation.rb
375
494
  - lib/arel/extensions/insert_manager.rb
376
495
  - lib/arel/extensions/insert_statement.rb
377
496
  - lib/arel/extensions/intersect_all.rb
497
+ - lib/arel/extensions/into.rb
378
498
  - lib/arel/extensions/json_get_field.rb
379
499
  - lib/arel/extensions/json_get_object.rb
380
500
  - lib/arel/extensions/json_path_get_field.rb
@@ -390,6 +510,7 @@ files:
390
510
  - lib/arel/extensions/named_argument.rb
391
511
  - lib/arel/extensions/named_function.rb
392
512
  - lib/arel/extensions/natural_join.rb
513
+ - lib/arel/extensions/node.rb
393
514
  - lib/arel/extensions/not_between.rb
394
515
  - lib/arel/extensions/not_between_symmetric.rb
395
516
  - lib/arel/extensions/not_distinct_from.rb
@@ -401,9 +522,10 @@ files:
401
522
  - lib/arel/extensions/overlaps.rb
402
523
  - lib/arel/extensions/overlay.rb
403
524
  - lib/arel/extensions/position.rb
525
+ - lib/arel/extensions/prepare.rb
404
526
  - lib/arel/extensions/range_function.rb
405
- - lib/arel/extensions/rank.rb
406
527
  - lib/arel/extensions/row.rb
528
+ - lib/arel/extensions/select_core.rb
407
529
  - lib/arel/extensions/select_manager.rb
408
530
  - lib/arel/extensions/select_statement.rb
409
531
  - lib/arel/extensions/session_user.rb
@@ -413,34 +535,50 @@ files:
413
535
  - lib/arel/extensions/substring.rb
414
536
  - lib/arel/extensions/table.rb
415
537
  - lib/arel/extensions/time_with_precision.rb
538
+ - lib/arel/extensions/to_sql.rb
539
+ - lib/arel/extensions/top.rb
416
540
  - lib/arel/extensions/transaction.rb
541
+ - lib/arel/extensions/tree_manager.rb
417
542
  - lib/arel/extensions/trim.rb
543
+ - lib/arel/extensions/true.rb
418
544
  - lib/arel/extensions/type_cast.rb
419
- - lib/arel/extensions/unbound_column_reference.rb
545
+ - lib/arel/extensions/unary.rb
546
+ - lib/arel/extensions/unary_operation.rb
420
547
  - lib/arel/extensions/unknown.rb
421
548
  - lib/arel/extensions/update_manager.rb
422
549
  - lib/arel/extensions/update_statement.rb
423
550
  - lib/arel/extensions/user.rb
551
+ - lib/arel/extensions/values_list.rb
424
552
  - lib/arel/extensions/variable_set.rb
425
553
  - lib/arel/extensions/variable_show.rb
426
554
  - lib/arel/extensions/with_ordinality.rb
427
555
  - lib/arel/middleware.rb
556
+ - lib/arel/middleware/active_record_extension.rb
557
+ - lib/arel/middleware/cache_accessor.rb
428
558
  - lib/arel/middleware/chain.rb
559
+ - lib/arel/middleware/database_executor.rb
560
+ - lib/arel/middleware/no_op_cache.rb
429
561
  - lib/arel/middleware/postgresql_adapter.rb
430
562
  - lib/arel/middleware/railtie.rb
431
- - lib/arel/sql_formatter.rb
563
+ - lib/arel/middleware/result.rb
564
+ - lib/arel/middleware/to_sql_executor.rb
565
+ - lib/arel/middleware/to_sql_middleware.rb
432
566
  - lib/arel/sql_to_arel.rb
433
567
  - lib/arel/sql_to_arel/error.rb
434
568
  - lib/arel/sql_to_arel/pg_query_visitor.rb
435
569
  - lib/arel/sql_to_arel/pg_query_visitor/frame_options.rb
436
570
  - lib/arel/sql_to_arel/result.rb
571
+ - lib/arel/transformer.rb
572
+ - lib/arel/transformer/prefix_schema_name.rb
573
+ - lib/arel/transformer/remove_active_record_info.rb
574
+ - lib/arel/transformer/replace_table_with_subquery.rb
437
575
  - lib/arel_toolkit.rb
438
576
  - lib/arel_toolkit/version.rb
439
577
  homepage: https://github.com/mvgijssel/arel_toolkit
440
578
  licenses:
441
579
  - MIT
442
580
  metadata: {}
443
- post_install_message:
581
+ post_install_message:
444
582
  rdoc_options: []
445
583
  require_paths:
446
584
  - lib
@@ -455,9 +593,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
455
593
  - !ruby/object:Gem::Version
456
594
  version: '0'
457
595
  requirements: []
458
- rubyforge_project:
459
- rubygems_version: 2.7.6
460
- signing_key:
596
+ rubygems_version: 3.0.3
597
+ signing_key:
461
598
  specification_version: 4
462
599
  summary: Collection of tools for Arel
463
600
  test_files: []