arel_toolkit 0.3.0 → 0.4.4

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 (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: []