activerecord 6.1.3.2 → 7.0.0.alpha2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activerecord might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +734 -1058
- data/MIT-LICENSE +1 -1
- data/README.rdoc +1 -1
- data/lib/active_record/aggregations.rb +1 -1
- data/lib/active_record/association_relation.rb +0 -10
- data/lib/active_record/associations/association.rb +35 -7
- data/lib/active_record/associations/association_scope.rb +1 -3
- data/lib/active_record/associations/belongs_to_association.rb +16 -6
- data/lib/active_record/associations/belongs_to_polymorphic_association.rb +10 -2
- data/lib/active_record/associations/builder/association.rb +8 -2
- data/lib/active_record/associations/builder/belongs_to.rb +19 -6
- data/lib/active_record/associations/builder/collection_association.rb +1 -1
- data/lib/active_record/associations/builder/has_many.rb +3 -2
- data/lib/active_record/associations/builder/has_one.rb +2 -1
- data/lib/active_record/associations/builder/singular_association.rb +2 -2
- data/lib/active_record/associations/collection_association.rb +24 -25
- data/lib/active_record/associations/collection_proxy.rb +8 -3
- data/lib/active_record/associations/disable_joins_association_scope.rb +59 -0
- data/lib/active_record/associations/has_many_association.rb +1 -1
- data/lib/active_record/associations/has_many_through_association.rb +2 -1
- data/lib/active_record/associations/has_one_association.rb +10 -7
- data/lib/active_record/associations/has_one_through_association.rb +1 -1
- data/lib/active_record/associations/preloader/association.rb +161 -49
- data/lib/active_record/associations/preloader/batch.rb +51 -0
- data/lib/active_record/associations/preloader/branch.rb +147 -0
- data/lib/active_record/associations/preloader/through_association.rb +37 -11
- data/lib/active_record/associations/preloader.rb +46 -110
- data/lib/active_record/associations/singular_association.rb +8 -2
- data/lib/active_record/associations/through_association.rb +1 -1
- data/lib/active_record/associations.rb +76 -81
- data/lib/active_record/asynchronous_queries_tracker.rb +57 -0
- data/lib/active_record/attribute_assignment.rb +1 -1
- data/lib/active_record/attribute_methods/before_type_cast.rb +7 -2
- data/lib/active_record/attribute_methods/dirty.rb +41 -16
- data/lib/active_record/attribute_methods/primary_key.rb +2 -2
- data/lib/active_record/attribute_methods/query.rb +2 -2
- data/lib/active_record/attribute_methods/read.rb +7 -5
- data/lib/active_record/attribute_methods/serialization.rb +66 -12
- data/lib/active_record/attribute_methods/time_zone_conversion.rb +4 -3
- data/lib/active_record/attribute_methods/write.rb +7 -10
- data/lib/active_record/attribute_methods.rb +6 -9
- data/lib/active_record/attributes.rb +24 -35
- data/lib/active_record/autosave_association.rb +3 -18
- data/lib/active_record/base.rb +19 -1
- data/lib/active_record/callbacks.rb +2 -2
- data/lib/active_record/coders/yaml_column.rb +11 -1
- data/lib/active_record/connection_adapters/abstract/connection_handler.rb +312 -0
- data/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb +209 -0
- data/lib/active_record/connection_adapters/abstract/connection_pool/reaper.rb +76 -0
- data/lib/active_record/connection_adapters/abstract/connection_pool.rb +31 -558
- data/lib/active_record/connection_adapters/abstract/database_statements.rb +45 -21
- data/lib/active_record/connection_adapters/abstract/query_cache.rb +24 -12
- data/lib/active_record/connection_adapters/abstract/quoting.rb +14 -7
- data/lib/active_record/connection_adapters/abstract/schema_creation.rb +5 -18
- data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +30 -9
- data/lib/active_record/connection_adapters/abstract/schema_statements.rb +60 -16
- data/lib/active_record/connection_adapters/abstract/transaction.rb +17 -6
- data/lib/active_record/connection_adapters/abstract_adapter.rb +115 -69
- data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +96 -81
- data/lib/active_record/connection_adapters/legacy_pool_manager.rb +6 -2
- data/lib/active_record/connection_adapters/mysql/database_statements.rb +33 -21
- data/lib/active_record/connection_adapters/mysql/quoting.rb +16 -1
- data/lib/active_record/connection_adapters/mysql/schema_statements.rb +3 -0
- data/lib/active_record/connection_adapters/mysql2_adapter.rb +12 -6
- data/lib/active_record/connection_adapters/pool_config.rb +1 -3
- data/lib/active_record/connection_adapters/pool_manager.rb +5 -1
- data/lib/active_record/connection_adapters/postgresql/database_statements.rb +19 -12
- data/lib/active_record/connection_adapters/postgresql/oid/date.rb +8 -0
- data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +5 -0
- data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +53 -14
- data/lib/active_record/connection_adapters/postgresql/oid/range.rb +1 -1
- data/lib/active_record/connection_adapters/postgresql/oid/timestamp.rb +15 -0
- data/lib/active_record/connection_adapters/postgresql/oid/timestamp_with_time_zone.rb +28 -0
- data/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +18 -6
- data/lib/active_record/connection_adapters/postgresql/oid.rb +2 -0
- data/lib/active_record/connection_adapters/postgresql/quoting.rb +6 -6
- data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +32 -0
- data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +5 -1
- data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +12 -12
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +157 -100
- data/lib/active_record/connection_adapters/schema_cache.rb +35 -4
- data/lib/active_record/connection_adapters/sql_type_metadata.rb +0 -2
- data/lib/active_record/connection_adapters/sqlite3/database_statements.rb +23 -17
- data/lib/active_record/connection_adapters/sqlite3/schema_statements.rb +4 -2
- data/lib/active_record/connection_adapters/sqlite3_adapter.rb +61 -30
- data/lib/active_record/connection_adapters.rb +8 -5
- data/lib/active_record/connection_handling.rb +20 -38
- data/lib/active_record/core.rb +129 -117
- data/lib/active_record/database_configurations/database_config.rb +12 -0
- data/lib/active_record/database_configurations/hash_config.rb +27 -1
- data/lib/active_record/database_configurations/url_config.rb +2 -2
- data/lib/active_record/database_configurations.rb +18 -9
- data/lib/active_record/delegated_type.rb +33 -11
- data/lib/active_record/destroy_association_async_job.rb +1 -1
- data/lib/active_record/disable_joins_association_relation.rb +39 -0
- data/lib/active_record/dynamic_matchers.rb +1 -1
- data/lib/active_record/encryption/cipher/aes256_gcm.rb +98 -0
- data/lib/active_record/encryption/cipher.rb +53 -0
- data/lib/active_record/encryption/config.rb +44 -0
- data/lib/active_record/encryption/configurable.rb +61 -0
- data/lib/active_record/encryption/context.rb +35 -0
- data/lib/active_record/encryption/contexts.rb +72 -0
- data/lib/active_record/encryption/derived_secret_key_provider.rb +12 -0
- data/lib/active_record/encryption/deterministic_key_provider.rb +14 -0
- data/lib/active_record/encryption/encryptable_record.rb +208 -0
- data/lib/active_record/encryption/encrypted_attribute_type.rb +140 -0
- data/lib/active_record/encryption/encrypted_fixtures.rb +38 -0
- data/lib/active_record/encryption/encrypting_only_encryptor.rb +12 -0
- data/lib/active_record/encryption/encryptor.rb +155 -0
- data/lib/active_record/encryption/envelope_encryption_key_provider.rb +55 -0
- data/lib/active_record/encryption/errors.rb +15 -0
- data/lib/active_record/encryption/extended_deterministic_queries.rb +160 -0
- data/lib/active_record/encryption/extended_deterministic_uniqueness_validator.rb +29 -0
- data/lib/active_record/encryption/key.rb +28 -0
- data/lib/active_record/encryption/key_generator.rb +42 -0
- data/lib/active_record/encryption/key_provider.rb +46 -0
- data/lib/active_record/encryption/message.rb +33 -0
- data/lib/active_record/encryption/message_serializer.rb +80 -0
- data/lib/active_record/encryption/null_encryptor.rb +21 -0
- data/lib/active_record/encryption/properties.rb +76 -0
- data/lib/active_record/encryption/read_only_null_encryptor.rb +24 -0
- data/lib/active_record/encryption/scheme.rb +99 -0
- data/lib/active_record/encryption.rb +55 -0
- data/lib/active_record/enum.rb +44 -46
- data/lib/active_record/errors.rb +66 -3
- data/lib/active_record/fixture_set/file.rb +15 -1
- data/lib/active_record/fixture_set/table_row.rb +40 -5
- data/lib/active_record/fixture_set/table_rows.rb +4 -4
- data/lib/active_record/fixtures.rb +16 -11
- data/lib/active_record/future_result.rb +139 -0
- data/lib/active_record/gem_version.rb +4 -4
- data/lib/active_record/inheritance.rb +55 -17
- data/lib/active_record/insert_all.rb +39 -6
- data/lib/active_record/integration.rb +1 -1
- data/lib/active_record/internal_metadata.rb +3 -5
- data/lib/active_record/legacy_yaml_adapter.rb +1 -1
- data/lib/active_record/locking/optimistic.rb +10 -9
- data/lib/active_record/log_subscriber.rb +6 -2
- data/lib/active_record/middleware/database_selector/resolver.rb +6 -10
- data/lib/active_record/middleware/database_selector.rb +8 -3
- data/lib/active_record/migration/command_recorder.rb +4 -4
- data/lib/active_record/migration/compatibility.rb +83 -1
- data/lib/active_record/migration/join_table.rb +1 -1
- data/lib/active_record/migration.rb +109 -79
- data/lib/active_record/model_schema.rb +46 -32
- data/lib/active_record/nested_attributes.rb +3 -3
- data/lib/active_record/no_touching.rb +2 -2
- data/lib/active_record/null_relation.rb +2 -6
- data/lib/active_record/persistence.rb +134 -45
- data/lib/active_record/query_cache.rb +2 -2
- data/lib/active_record/query_logs.rb +203 -0
- data/lib/active_record/querying.rb +15 -5
- data/lib/active_record/railtie.rb +117 -17
- data/lib/active_record/railties/controller_runtime.rb +1 -1
- data/lib/active_record/railties/databases.rake +83 -58
- data/lib/active_record/readonly_attributes.rb +11 -0
- data/lib/active_record/reflection.rb +45 -44
- data/lib/active_record/relation/batches/batch_enumerator.rb +19 -5
- data/lib/active_record/relation/batches.rb +3 -3
- data/lib/active_record/relation/calculations.rb +42 -25
- data/lib/active_record/relation/delegation.rb +6 -6
- data/lib/active_record/relation/finder_methods.rb +32 -23
- data/lib/active_record/relation/merger.rb +20 -13
- data/lib/active_record/relation/predicate_builder.rb +1 -6
- data/lib/active_record/relation/query_attribute.rb +5 -11
- data/lib/active_record/relation/query_methods.rb +233 -50
- data/lib/active_record/relation/record_fetch_warning.rb +2 -2
- data/lib/active_record/relation/spawn_methods.rb +2 -2
- data/lib/active_record/relation/where_clause.rb +22 -15
- data/lib/active_record/relation.rb +170 -87
- data/lib/active_record/result.rb +17 -2
- data/lib/active_record/runtime_registry.rb +2 -4
- data/lib/active_record/sanitization.rb +11 -7
- data/lib/active_record/schema_dumper.rb +3 -3
- data/lib/active_record/schema_migration.rb +0 -4
- data/lib/active_record/scoping/default.rb +62 -15
- data/lib/active_record/scoping/named.rb +3 -11
- data/lib/active_record/scoping.rb +40 -22
- data/lib/active_record/serialization.rb +1 -1
- data/lib/active_record/signed_id.rb +1 -1
- data/lib/active_record/statement_cache.rb +2 -2
- data/lib/active_record/tasks/database_tasks.rb +107 -23
- data/lib/active_record/tasks/mysql_database_tasks.rb +1 -1
- data/lib/active_record/tasks/postgresql_database_tasks.rb +14 -11
- data/lib/active_record/test_databases.rb +1 -1
- data/lib/active_record/test_fixtures.rb +45 -4
- data/lib/active_record/timestamp.rb +3 -4
- data/lib/active_record/transactions.rb +9 -14
- data/lib/active_record/translation.rb +2 -2
- data/lib/active_record/type/adapter_specific_registry.rb +32 -7
- data/lib/active_record/type/hash_lookup_type_map.rb +34 -1
- data/lib/active_record/type/internal/timezone.rb +2 -2
- data/lib/active_record/type/serialized.rb +1 -1
- data/lib/active_record/type/type_map.rb +17 -20
- data/lib/active_record/type.rb +1 -2
- data/lib/active_record/validations/associated.rb +1 -1
- data/lib/active_record/validations/numericality.rb +1 -1
- data/lib/active_record.rb +170 -2
- data/lib/arel/attributes/attribute.rb +0 -8
- data/lib/arel/collectors/bind.rb +2 -2
- data/lib/arel/collectors/composite.rb +3 -3
- data/lib/arel/collectors/sql_string.rb +1 -1
- data/lib/arel/collectors/substitute_binds.rb +1 -1
- data/lib/arel/crud.rb +18 -22
- data/lib/arel/delete_manager.rb +2 -4
- data/lib/arel/insert_manager.rb +2 -3
- data/lib/arel/nodes/casted.rb +1 -1
- data/lib/arel/nodes/delete_statement.rb +8 -13
- data/lib/arel/nodes/homogeneous_in.rb +4 -0
- data/lib/arel/nodes/insert_statement.rb +2 -2
- data/lib/arel/nodes/select_core.rb +2 -2
- data/lib/arel/nodes/select_statement.rb +2 -2
- data/lib/arel/nodes/update_statement.rb +3 -2
- data/lib/arel/predications.rb +3 -3
- data/lib/arel/select_manager.rb +10 -4
- data/lib/arel/table.rb +0 -1
- data/lib/arel/tree_manager.rb +0 -12
- data/lib/arel/update_manager.rb +2 -4
- data/lib/arel/visitors/dot.rb +80 -90
- data/lib/arel/visitors/mysql.rb +6 -1
- data/lib/arel/visitors/postgresql.rb +0 -10
- data/lib/arel/visitors/to_sql.rb +44 -3
- data/lib/arel.rb +1 -1
- data/lib/rails/generators/active_record/application_record/templates/application_record.rb.tt +1 -1
- data/lib/rails/generators/active_record/model/templates/abstract_base_class.rb.tt +1 -1
- data/lib/rails/generators/active_record/model/templates/model.rb.tt +1 -1
- data/lib/rails/generators/active_record/model/templates/module.rb.tt +2 -2
- metadata +55 -16
@@ -5,9 +5,9 @@ module Arel # :nodoc: all
|
|
5
5
|
class InsertStatement < Arel::Nodes::Node
|
6
6
|
attr_accessor :relation, :columns, :values, :select
|
7
7
|
|
8
|
-
def initialize
|
8
|
+
def initialize(relation = nil)
|
9
9
|
super()
|
10
|
-
@relation =
|
10
|
+
@relation = relation
|
11
11
|
@columns = []
|
12
12
|
@values = nil
|
13
13
|
@select = nil
|
@@ -6,9 +6,9 @@ module Arel # :nodoc: all
|
|
6
6
|
attr_accessor :projections, :wheres, :groups, :windows, :comment
|
7
7
|
attr_accessor :havings, :source, :set_quantifier, :optimizer_hints
|
8
8
|
|
9
|
-
def initialize
|
9
|
+
def initialize(relation = nil)
|
10
10
|
super()
|
11
|
-
@source = JoinSource.new
|
11
|
+
@source = JoinSource.new(relation)
|
12
12
|
|
13
13
|
# https://ronsavage.github.io/SQL/sql-92.bnf.html#set%20quantifier
|
14
14
|
@set_quantifier = nil
|
@@ -6,9 +6,9 @@ module Arel # :nodoc: all
|
|
6
6
|
attr_reader :cores
|
7
7
|
attr_accessor :limit, :orders, :lock, :offset, :with
|
8
8
|
|
9
|
-
def initialize(
|
9
|
+
def initialize(relation = nil)
|
10
10
|
super()
|
11
|
-
@cores =
|
11
|
+
@cores = [SelectCore.new(relation)]
|
12
12
|
@orders = []
|
13
13
|
@limit = nil
|
14
14
|
@lock = nil
|
@@ -5,8 +5,9 @@ module Arel # :nodoc: all
|
|
5
5
|
class UpdateStatement < Arel::Nodes::Node
|
6
6
|
attr_accessor :relation, :wheres, :values, :orders, :limit, :offset, :key
|
7
7
|
|
8
|
-
def initialize
|
9
|
-
|
8
|
+
def initialize(relation = nil)
|
9
|
+
super()
|
10
|
+
@relation = relation
|
10
11
|
@wheres = []
|
11
12
|
@values = []
|
12
13
|
@orders = []
|
data/lib/arel/predications.rb
CHANGED
@@ -52,7 +52,7 @@ module Arel # :nodoc: all
|
|
52
52
|
else
|
53
53
|
left = quoted_node(other.begin)
|
54
54
|
right = quoted_node(other.end)
|
55
|
-
Nodes::Between.new(self,
|
55
|
+
Nodes::Between.new(self, Nodes::And.new([left, right]))
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
@@ -207,11 +207,11 @@ module Arel # :nodoc: all
|
|
207
207
|
end
|
208
208
|
|
209
209
|
def contains(other)
|
210
|
-
Arel::Nodes::Contains.new
|
210
|
+
Arel::Nodes::Contains.new self, quoted_node(other)
|
211
211
|
end
|
212
212
|
|
213
213
|
def overlaps(other)
|
214
|
-
Arel::Nodes::Overlaps.new
|
214
|
+
Arel::Nodes::Overlaps.new self, quoted_node(other)
|
215
215
|
end
|
216
216
|
|
217
217
|
def quoted_array(others)
|
data/lib/arel/select_manager.rb
CHANGED
@@ -7,10 +7,8 @@ module Arel # :nodoc: all
|
|
7
7
|
STRING_OR_SYMBOL_CLASS = [Symbol, String]
|
8
8
|
|
9
9
|
def initialize(table = nil)
|
10
|
-
|
11
|
-
@ast = Nodes::SelectStatement.new
|
10
|
+
@ast = Nodes::SelectStatement.new(table)
|
12
11
|
@ctx = @ast.cores.last
|
13
|
-
from table
|
14
12
|
end
|
15
13
|
|
16
14
|
def initialize_copy(other)
|
@@ -98,7 +96,7 @@ module Arel # :nodoc: all
|
|
98
96
|
end
|
99
97
|
|
100
98
|
def froms
|
101
|
-
@ast.cores.
|
99
|
+
@ast.cores.filter_map { |x| x.from }
|
102
100
|
end
|
103
101
|
|
104
102
|
def join(relation, klass = Nodes::InnerJoin)
|
@@ -183,6 +181,14 @@ module Arel # :nodoc: all
|
|
183
181
|
@ast.orders
|
184
182
|
end
|
185
183
|
|
184
|
+
def where(expr)
|
185
|
+
if Arel::TreeManager === expr
|
186
|
+
expr = expr.ast
|
187
|
+
end
|
188
|
+
@ctx.wheres << expr
|
189
|
+
self
|
190
|
+
end
|
191
|
+
|
186
192
|
def where_sql(engine = Table.engine)
|
187
193
|
return if @ctx.wheres.empty?
|
188
194
|
|
data/lib/arel/table.rb
CHANGED
data/lib/arel/tree_manager.rb
CHANGED
@@ -40,10 +40,6 @@ module Arel # :nodoc: all
|
|
40
40
|
|
41
41
|
attr_reader :ast
|
42
42
|
|
43
|
-
def initialize
|
44
|
-
@ctx = nil
|
45
|
-
end
|
46
|
-
|
47
43
|
def to_dot
|
48
44
|
collector = Arel::Collectors::PlainString.new
|
49
45
|
collector = Visitors::Dot.new.accept @ast, collector
|
@@ -60,13 +56,5 @@ module Arel # :nodoc: all
|
|
60
56
|
super
|
61
57
|
@ast = @ast.clone
|
62
58
|
end
|
63
|
-
|
64
|
-
def where(expr)
|
65
|
-
if Arel::TreeManager === expr
|
66
|
-
expr = expr.ast
|
67
|
-
end
|
68
|
-
@ctx.wheres << expr
|
69
|
-
self
|
70
|
-
end
|
71
59
|
end
|
72
60
|
end
|
data/lib/arel/update_manager.rb
CHANGED
@@ -4,10 +4,8 @@ module Arel # :nodoc: all
|
|
4
4
|
class UpdateManager < Arel::TreeManager
|
5
5
|
include TreeManager::StatementMethods
|
6
6
|
|
7
|
-
def initialize
|
8
|
-
|
9
|
-
@ast = Nodes::UpdateStatement.new
|
10
|
-
@ctx = @ast
|
7
|
+
def initialize(table = nil)
|
8
|
+
@ast = Nodes::UpdateStatement.new(table)
|
11
9
|
end
|
12
10
|
|
13
11
|
###
|
data/lib/arel/visitors/dot.rb
CHANGED
@@ -31,6 +31,40 @@ module Arel # :nodoc: all
|
|
31
31
|
end
|
32
32
|
|
33
33
|
private
|
34
|
+
def visit_Arel_Nodes_Function(o)
|
35
|
+
visit_edge o, "expressions"
|
36
|
+
visit_edge o, "distinct"
|
37
|
+
visit_edge o, "alias"
|
38
|
+
end
|
39
|
+
|
40
|
+
def visit_Arel_Nodes_Unary(o)
|
41
|
+
visit_edge o, "expr"
|
42
|
+
end
|
43
|
+
|
44
|
+
def visit_Arel_Nodes_Binary(o)
|
45
|
+
visit_edge o, "left"
|
46
|
+
visit_edge o, "right"
|
47
|
+
end
|
48
|
+
|
49
|
+
def visit_Arel_Nodes_UnaryOperation(o)
|
50
|
+
visit_edge o, "operator"
|
51
|
+
visit_edge o, "expr"
|
52
|
+
end
|
53
|
+
|
54
|
+
def visit_Arel_Nodes_InfixOperation(o)
|
55
|
+
visit_edge o, "operator"
|
56
|
+
visit_edge o, "left"
|
57
|
+
visit_edge o, "right"
|
58
|
+
end
|
59
|
+
|
60
|
+
def visit__regexp(o)
|
61
|
+
visit_edge o, "left"
|
62
|
+
visit_edge o, "right"
|
63
|
+
visit_edge o, "case_sensitive"
|
64
|
+
end
|
65
|
+
alias :visit_Arel_Nodes_Regexp :visit__regexp
|
66
|
+
alias :visit_Arel_Nodes_NotRegexp :visit__regexp
|
67
|
+
|
34
68
|
def visit_Arel_Nodes_Ordering(o)
|
35
69
|
visit_edge o, "expr"
|
36
70
|
end
|
@@ -53,71 +87,29 @@ module Arel # :nodoc: all
|
|
53
87
|
visit_edge o, "left"
|
54
88
|
end
|
55
89
|
|
56
|
-
def
|
57
|
-
visit_edge o, "left"
|
58
|
-
visit_edge o, "right"
|
59
|
-
end
|
60
|
-
alias :visit_Arel_Nodes_FullOuterJoin :visit_Arel_Nodes_InnerJoin
|
61
|
-
alias :visit_Arel_Nodes_OuterJoin :visit_Arel_Nodes_InnerJoin
|
62
|
-
alias :visit_Arel_Nodes_RightOuterJoin :visit_Arel_Nodes_InnerJoin
|
63
|
-
|
64
|
-
def visit_Arel_Nodes_DeleteStatement(o)
|
65
|
-
visit_edge o, "relation"
|
66
|
-
visit_edge o, "wheres"
|
67
|
-
end
|
68
|
-
|
69
|
-
def unary(o)
|
70
|
-
visit_edge o, "expr"
|
71
|
-
end
|
72
|
-
alias :visit_Arel_Nodes_Group :unary
|
73
|
-
alias :visit_Arel_Nodes_Cube :unary
|
74
|
-
alias :visit_Arel_Nodes_RollUp :unary
|
75
|
-
alias :visit_Arel_Nodes_GroupingSet :unary
|
76
|
-
alias :visit_Arel_Nodes_GroupingElement :unary
|
77
|
-
alias :visit_Arel_Nodes_Grouping :unary
|
78
|
-
alias :visit_Arel_Nodes_Having :unary
|
79
|
-
alias :visit_Arel_Nodes_Limit :unary
|
80
|
-
alias :visit_Arel_Nodes_Not :unary
|
81
|
-
alias :visit_Arel_Nodes_Offset :unary
|
82
|
-
alias :visit_Arel_Nodes_On :unary
|
83
|
-
alias :visit_Arel_Nodes_UnqualifiedColumn :unary
|
84
|
-
alias :visit_Arel_Nodes_OptimizerHints :unary
|
85
|
-
alias :visit_Arel_Nodes_Preceding :unary
|
86
|
-
alias :visit_Arel_Nodes_Following :unary
|
87
|
-
alias :visit_Arel_Nodes_Rows :unary
|
88
|
-
alias :visit_Arel_Nodes_Range :unary
|
89
|
-
|
90
|
-
def window(o)
|
90
|
+
def visit_Arel_Nodes_Window(o)
|
91
91
|
visit_edge o, "partitions"
|
92
92
|
visit_edge o, "orders"
|
93
93
|
visit_edge o, "framing"
|
94
94
|
end
|
95
|
-
alias :visit_Arel_Nodes_Window :window
|
96
95
|
|
97
|
-
def
|
96
|
+
def visit_Arel_Nodes_NamedWindow(o)
|
98
97
|
visit_edge o, "partitions"
|
99
98
|
visit_edge o, "orders"
|
100
99
|
visit_edge o, "framing"
|
101
100
|
visit_edge o, "name"
|
102
101
|
end
|
103
|
-
alias :visit_Arel_Nodes_NamedWindow :named_window
|
104
102
|
|
105
|
-
def
|
106
|
-
|
107
|
-
visit_edge o, "distinct"
|
108
|
-
visit_edge o, "alias"
|
103
|
+
def visit__no_edges(o)
|
104
|
+
# intentionally left blank
|
109
105
|
end
|
110
|
-
alias :
|
111
|
-
alias :
|
112
|
-
alias :visit_Arel_Nodes_Max :function
|
113
|
-
alias :visit_Arel_Nodes_Avg :function
|
114
|
-
alias :visit_Arel_Nodes_Sum :function
|
106
|
+
alias :visit_Arel_Nodes_CurrentRow :visit__no_edges
|
107
|
+
alias :visit_Arel_Nodes_Distinct :visit__no_edges
|
115
108
|
|
116
|
-
def
|
109
|
+
def visit_Arel_Nodes_Extract(o)
|
117
110
|
visit_edge o, "expressions"
|
118
111
|
visit_edge o, "alias"
|
119
112
|
end
|
120
|
-
alias :visit_Arel_Nodes_Extract :extract
|
121
113
|
|
122
114
|
def visit_Arel_Nodes_NamedFunction(o)
|
123
115
|
visit_edge o, "name"
|
@@ -130,13 +122,19 @@ module Arel # :nodoc: all
|
|
130
122
|
visit_edge o, "relation"
|
131
123
|
visit_edge o, "columns"
|
132
124
|
visit_edge o, "values"
|
125
|
+
visit_edge o, "select"
|
133
126
|
end
|
134
127
|
|
135
128
|
def visit_Arel_Nodes_SelectCore(o)
|
136
129
|
visit_edge o, "source"
|
137
130
|
visit_edge o, "projections"
|
138
131
|
visit_edge o, "wheres"
|
139
|
-
visit_edge o,
|
132
|
+
visit_edge o, "windows"
|
133
|
+
visit_edge o, "groups"
|
134
|
+
visit_edge o, "comment"
|
135
|
+
visit_edge o, "havings"
|
136
|
+
visit_edge o, "set_quantifier"
|
137
|
+
visit_edge o, "optimizer_hints"
|
140
138
|
end
|
141
139
|
|
142
140
|
def visit_Arel_Nodes_SelectStatement(o)
|
@@ -144,12 +142,27 @@ module Arel # :nodoc: all
|
|
144
142
|
visit_edge o, "limit"
|
145
143
|
visit_edge o, "orders"
|
146
144
|
visit_edge o, "offset"
|
145
|
+
visit_edge o, "lock"
|
146
|
+
visit_edge o, "with"
|
147
147
|
end
|
148
148
|
|
149
149
|
def visit_Arel_Nodes_UpdateStatement(o)
|
150
150
|
visit_edge o, "relation"
|
151
151
|
visit_edge o, "wheres"
|
152
152
|
visit_edge o, "values"
|
153
|
+
visit_edge o, "orders"
|
154
|
+
visit_edge o, "limit"
|
155
|
+
visit_edge o, "offset"
|
156
|
+
visit_edge o, "key"
|
157
|
+
end
|
158
|
+
|
159
|
+
def visit_Arel_Nodes_DeleteStatement(o)
|
160
|
+
visit_edge o, "relation"
|
161
|
+
visit_edge o, "wheres"
|
162
|
+
visit_edge o, "orders"
|
163
|
+
visit_edge o, "limit"
|
164
|
+
visit_edge o, "offset"
|
165
|
+
visit_edge o, "key"
|
153
166
|
end
|
154
167
|
|
155
168
|
def visit_Arel_Table(o)
|
@@ -167,47 +180,18 @@ module Arel # :nodoc: all
|
|
167
180
|
visit_edge o, "attribute"
|
168
181
|
end
|
169
182
|
|
170
|
-
def
|
183
|
+
def visit_Arel_Attributes_Attribute(o)
|
171
184
|
visit_edge o, "relation"
|
172
185
|
visit_edge o, "name"
|
173
186
|
end
|
174
|
-
alias :visit_Arel_Attributes_Integer :visit_Arel_Attribute
|
175
|
-
alias :visit_Arel_Attributes_Float :visit_Arel_Attribute
|
176
|
-
alias :visit_Arel_Attributes_String :visit_Arel_Attribute
|
177
|
-
alias :visit_Arel_Attributes_Time :visit_Arel_Attribute
|
178
|
-
alias :visit_Arel_Attributes_Boolean :visit_Arel_Attribute
|
179
|
-
alias :visit_Arel_Attributes_Attribute :visit_Arel_Attribute
|
180
187
|
|
181
|
-
def
|
182
|
-
o.children.each_with_index do |
|
183
|
-
edge(i) { visit
|
188
|
+
def visit__children(o)
|
189
|
+
o.children.each_with_index do |child, i|
|
190
|
+
edge(i) { visit child }
|
184
191
|
end
|
185
192
|
end
|
186
|
-
alias :visit_Arel_Nodes_And :
|
187
|
-
|
188
|
-
def binary(o)
|
189
|
-
visit_edge o, "left"
|
190
|
-
visit_edge o, "right"
|
191
|
-
end
|
192
|
-
alias :visit_Arel_Nodes_As :binary
|
193
|
-
alias :visit_Arel_Nodes_Assignment :binary
|
194
|
-
alias :visit_Arel_Nodes_Between :binary
|
195
|
-
alias :visit_Arel_Nodes_Concat :binary
|
196
|
-
alias :visit_Arel_Nodes_DoesNotMatch :binary
|
197
|
-
alias :visit_Arel_Nodes_Equality :binary
|
198
|
-
alias :visit_Arel_Nodes_GreaterThan :binary
|
199
|
-
alias :visit_Arel_Nodes_GreaterThanOrEqual :binary
|
200
|
-
alias :visit_Arel_Nodes_In :binary
|
201
|
-
alias :visit_Arel_Nodes_JoinSource :binary
|
202
|
-
alias :visit_Arel_Nodes_LessThan :binary
|
203
|
-
alias :visit_Arel_Nodes_LessThanOrEqual :binary
|
204
|
-
alias :visit_Arel_Nodes_IsNotDistinctFrom :binary
|
205
|
-
alias :visit_Arel_Nodes_IsDistinctFrom :binary
|
206
|
-
alias :visit_Arel_Nodes_Matches :binary
|
207
|
-
alias :visit_Arel_Nodes_NotEqual :binary
|
208
|
-
alias :visit_Arel_Nodes_NotIn :binary
|
209
|
-
alias :visit_Arel_Nodes_Or :binary
|
210
|
-
alias :visit_Arel_Nodes_Over :binary
|
193
|
+
alias :visit_Arel_Nodes_And :visit__children
|
194
|
+
alias :visit_Arel_Nodes_With :visit__children
|
211
195
|
|
212
196
|
def visit_String(o)
|
213
197
|
@node_stack.last.fields << o
|
@@ -225,22 +209,22 @@ module Arel # :nodoc: all
|
|
225
209
|
alias :visit_Arel_Nodes_SqlLiteral :visit_String
|
226
210
|
|
227
211
|
def visit_Arel_Nodes_BindParam(o)
|
228
|
-
|
212
|
+
visit_edge(o, "value")
|
229
213
|
end
|
230
214
|
|
231
215
|
def visit_ActiveModel_Attribute(o)
|
232
|
-
|
216
|
+
visit_edge(o, "value_before_type_cast")
|
233
217
|
end
|
234
218
|
|
235
219
|
def visit_Hash(o)
|
236
220
|
o.each_with_index do |pair, i|
|
237
|
-
edge("pair_#{i}")
|
221
|
+
edge("pair_#{i}") { visit pair }
|
238
222
|
end
|
239
223
|
end
|
240
224
|
|
241
225
|
def visit_Array(o)
|
242
|
-
o.each_with_index do |
|
243
|
-
edge(i) { visit
|
226
|
+
o.each_with_index do |member, i|
|
227
|
+
edge(i) { visit member }
|
244
228
|
end
|
245
229
|
end
|
246
230
|
alias :visit_Set :visit_Array
|
@@ -249,6 +233,12 @@ module Arel # :nodoc: all
|
|
249
233
|
visit_edge(o, "values")
|
250
234
|
end
|
251
235
|
|
236
|
+
def visit_Arel_Nodes_Case(o)
|
237
|
+
visit_edge(o, "case")
|
238
|
+
visit_edge(o, "conditions")
|
239
|
+
visit_edge(o, "default")
|
240
|
+
end
|
241
|
+
|
252
242
|
def visit_edge(o, method)
|
253
243
|
edge(method) { visit o.send(method) }
|
254
244
|
end
|
data/lib/arel/visitors/mysql.rb
CHANGED
@@ -58,6 +58,11 @@ module Arel # :nodoc: all
|
|
58
58
|
infix_value o, collector, " NOT REGEXP "
|
59
59
|
end
|
60
60
|
|
61
|
+
# no-op
|
62
|
+
def visit_Arel_Nodes_NullsFirst(o, collector)
|
63
|
+
visit o.expr, collector
|
64
|
+
end
|
65
|
+
|
61
66
|
# In the simple case, MySQL allows us to place JOINs directly into the UPDATE
|
62
67
|
# query. However, this does not allow for LIMIT, OFFSET and ORDER. To support
|
63
68
|
# these, we must use a subquery.
|
@@ -70,7 +75,7 @@ module Arel # :nodoc: all
|
|
70
75
|
end
|
71
76
|
alias :prepare_delete_statement :prepare_update_statement
|
72
77
|
|
73
|
-
# MySQL
|
78
|
+
# MySQL doesn't automatically create a temporary table for use subquery, so we have
|
74
79
|
# to give it some prompting in the form of a subsubquery.
|
75
80
|
def build_subselect(key, o)
|
76
81
|
subselect = super
|