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.
- checksums.yaml +4 -4
- data/.codeclimate.yml +3 -0
- data/.github/workflows/develop.yml +90 -0
- data/.github/workflows/master.yml +67 -0
- data/.gitignore +8 -0
- data/.rubocop.yml +13 -5
- data/Appraisals +13 -0
- data/CHANGELOG.md +94 -5
- data/Gemfile +5 -0
- data/Gemfile.lock +62 -33
- data/Guardfile +4 -0
- data/README.md +67 -23
- data/Rakefile +11 -1
- data/arel_toolkit.gemspec +15 -6
- data/benchmark.rb +54 -0
- data/ext/pg_result_init/extconf.rb +52 -0
- data/ext/pg_result_init/pg_result_init.c +138 -0
- data/ext/pg_result_init/pg_result_init.h +6 -0
- data/gemfiles/active_record_6.gemfile +7 -0
- data/gemfiles/active_record_6.gemfile.lock +210 -0
- data/gemfiles/arel_gems.gemfile +10 -0
- data/gemfiles/arel_gems.gemfile.lock +284 -0
- data/gemfiles/default.gemfile +5 -0
- data/gemfiles/default.gemfile.lock +208 -0
- data/lib/arel/enhance.rb +17 -0
- data/lib/arel/enhance/context_enhancer/arel_table.rb +92 -0
- data/lib/arel/enhance/node.rb +232 -0
- data/lib/arel/enhance/path.rb +38 -0
- data/lib/arel/enhance/path_node.rb +26 -0
- data/lib/arel/enhance/query.rb +38 -0
- data/lib/arel/enhance/query_methods.rb +23 -0
- data/lib/arel/enhance/visitor.rb +97 -0
- data/lib/arel/extensions.rb +32 -6
- data/lib/arel/extensions/active_model_attribute_with_cast_value.rb +22 -0
- data/lib/arel/extensions/active_record_relation_query_attribute.rb +22 -0
- data/lib/arel/extensions/active_record_type_caster_connection.rb +7 -0
- data/lib/arel/extensions/active_record_type_caster_map.rb +7 -0
- data/lib/arel/extensions/array.rb +2 -9
- data/lib/arel/extensions/at_time_zone.rb +10 -3
- data/lib/arel/extensions/attributes_attribute.rb +47 -0
- data/lib/arel/extensions/binary.rb +7 -0
- data/lib/arel/extensions/bind_param.rb +15 -0
- data/lib/arel/extensions/bit_string.rb +2 -9
- data/lib/arel/extensions/case.rb +17 -0
- data/lib/arel/extensions/coalesce.rb +17 -3
- data/lib/arel/extensions/conflict.rb +9 -0
- data/lib/arel/extensions/contains.rb +27 -5
- data/lib/arel/extensions/current_catalog.rb +4 -0
- data/lib/arel/extensions/current_date.rb +4 -0
- data/lib/arel/extensions/current_of_expression.rb +2 -9
- data/lib/arel/extensions/current_role.rb +4 -0
- data/lib/arel/extensions/current_row.rb +7 -0
- data/lib/arel/extensions/current_schema.rb +4 -0
- data/lib/arel/extensions/current_user.rb +4 -0
- data/lib/arel/extensions/dealocate.rb +31 -0
- data/lib/arel/extensions/default_values.rb +4 -0
- data/lib/arel/extensions/delete_manager.rb +22 -6
- data/lib/arel/extensions/delete_statement.rb +46 -24
- data/lib/arel/extensions/dot.rb +11 -0
- data/lib/arel/extensions/exists.rb +59 -0
- data/lib/arel/extensions/extract_from.rb +3 -10
- data/lib/arel/extensions/factorial.rb +10 -2
- data/lib/arel/extensions/false.rb +7 -0
- data/lib/arel/extensions/function.rb +44 -14
- data/lib/arel/extensions/greatest.rb +17 -3
- data/lib/arel/extensions/indirection.rb +3 -12
- data/lib/arel/extensions/infer.rb +7 -7
- data/lib/arel/extensions/infix_operation.rb +17 -0
- data/lib/arel/extensions/insert_manager.rb +19 -3
- data/lib/arel/extensions/insert_statement.rb +31 -12
- data/lib/arel/extensions/into.rb +21 -0
- data/lib/arel/extensions/least.rb +17 -3
- data/lib/arel/extensions/named_argument.rb +3 -8
- data/lib/arel/extensions/named_function.rb +7 -0
- data/lib/arel/extensions/node.rb +10 -0
- data/lib/arel/extensions/ordering.rb +21 -6
- data/lib/arel/extensions/overlaps.rb +9 -0
- data/lib/arel/extensions/overlay.rb +9 -0
- data/lib/arel/extensions/position.rb +3 -8
- data/lib/arel/extensions/prepare.rb +39 -0
- data/lib/arel/extensions/range_function.rb +10 -2
- data/lib/arel/extensions/row.rb +3 -8
- data/lib/arel/extensions/select_core.rb +73 -0
- data/lib/arel/extensions/select_manager.rb +22 -6
- data/lib/arel/extensions/select_statement.rb +31 -9
- data/lib/arel/extensions/session_user.rb +4 -0
- data/lib/arel/extensions/set_to_default.rb +4 -0
- data/lib/arel/extensions/substring.rb +8 -0
- data/lib/arel/extensions/table.rb +43 -10
- data/lib/arel/extensions/time_with_precision.rb +6 -0
- data/lib/arel/extensions/to_sql.rb +27 -0
- data/lib/arel/extensions/top.rb +8 -0
- data/lib/arel/extensions/transaction.rb +3 -8
- data/lib/arel/extensions/tree_manager.rb +15 -0
- data/lib/arel/extensions/trim.rb +8 -0
- data/lib/arel/extensions/true.rb +7 -0
- data/lib/arel/extensions/type_cast.rb +7 -0
- data/lib/arel/extensions/unary.rb +7 -0
- data/lib/arel/extensions/unary_operation.rb +16 -0
- data/lib/arel/extensions/unknown.rb +4 -0
- data/lib/arel/extensions/update_manager.rb +22 -6
- data/lib/arel/extensions/update_statement.rb +36 -33
- data/lib/arel/extensions/user.rb +4 -0
- data/lib/arel/extensions/values_list.rb +15 -0
- data/lib/arel/extensions/variable_set.rb +9 -0
- data/lib/arel/extensions/variable_show.rb +3 -8
- data/lib/arel/middleware.rb +5 -1
- data/lib/arel/middleware/active_record_extension.rb +13 -0
- data/lib/arel/middleware/cache_accessor.rb +35 -0
- data/lib/arel/middleware/chain.rb +108 -33
- data/lib/arel/middleware/database_executor.rb +77 -0
- data/lib/arel/middleware/no_op_cache.rb +9 -0
- data/lib/arel/middleware/postgresql_adapter.rb +41 -5
- data/lib/arel/middleware/railtie.rb +15 -1
- data/lib/arel/middleware/result.rb +170 -0
- data/lib/arel/middleware/to_sql_executor.rb +15 -0
- data/lib/arel/middleware/to_sql_middleware.rb +33 -0
- data/lib/arel/sql_to_arel.rb +6 -3
- data/lib/arel/sql_to_arel/pg_query_visitor.rb +67 -38
- data/lib/arel/sql_to_arel/pg_query_visitor/frame_options.rb +1 -1
- data/lib/arel/sql_to_arel/result.rb +17 -4
- data/lib/arel/transformer.rb +8 -0
- data/lib/arel/transformer/prefix_schema_name.rb +183 -0
- data/lib/arel/transformer/remove_active_record_info.rb +40 -0
- data/lib/arel/transformer/replace_table_with_subquery.rb +31 -0
- data/lib/arel_toolkit.rb +15 -2
- data/lib/arel_toolkit/version.rb +1 -1
- metadata +179 -42
- data/.travis.yml +0 -29
- data/lib/arel/extensions/generate_series.rb +0 -9
- data/lib/arel/extensions/rank.rb +0 -9
- data/lib/arel/extensions/unbound_column_reference.rb +0 -5
- 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
|
-
|
|
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
|
|
9
|
-
|
|
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,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
|
-
|
|
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/
|
|
18
|
+
require 'arel/enhance'
|
|
19
|
+
require 'arel/transformer'
|
|
7
20
|
|
|
8
21
|
module ArelToolkit
|
|
9
22
|
end
|
data/lib/arel_toolkit/version.rb
CHANGED
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
|
+
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:
|
|
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:
|
|
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:
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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: '
|
|
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: '
|
|
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:
|
|
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:
|
|
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
|
-
-
|
|
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/
|
|
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/
|
|
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
|
-
|
|
459
|
-
|
|
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: []
|