activerecord 6.1.4.7 → 6.1.5
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 +96 -12
- data/MIT-LICENSE +1 -1
- data/lib/active_record/associations/collection_association.rb +16 -8
- data/lib/active_record/associations/preloader/association.rb +1 -3
- data/lib/active_record/connection_adapters/abstract/connection_pool.rb +1 -1
- data/lib/active_record/connection_adapters/abstract/quoting.rb +3 -3
- data/lib/active_record/connection_adapters/mysql/database_statements.rb +2 -0
- data/lib/active_record/connection_adapters/mysql/schema_statements.rb +4 -1
- data/lib/active_record/connection_adapters/postgresql/database_statements.rb +2 -0
- data/lib/active_record/connection_adapters/schema_cache.rb +34 -10
- data/lib/active_record/connection_adapters/sqlite3/database_statements.rb +2 -0
- data/lib/active_record/connection_handling.rb +2 -2
- data/lib/active_record/core.rb +2 -2
- data/lib/active_record/database_configurations/connection_url_resolver.rb +1 -0
- data/lib/active_record/database_configurations/hash_config.rb +1 -1
- data/lib/active_record/database_configurations.rb +2 -1
- data/lib/active_record/gem_version.rb +2 -2
- data/lib/active_record/internal_metadata.rb +2 -0
- data/lib/active_record/legacy_yaml_adapter.rb +1 -1
- data/lib/active_record/migration/compatibility.rb +24 -2
- data/lib/active_record/model_schema.rb +1 -1
- data/lib/active_record/railties/databases.rake +8 -8
- data/lib/active_record/relation/calculations.rb +2 -2
- data/lib/active_record/relation/finder_methods.rb +1 -1
- data/lib/active_record/relation/query_methods.rb +2 -2
- data/lib/active_record/relation/where_clause.rb +2 -2
- data/lib/active_record/tasks/database_tasks.rb +1 -1
- data/lib/active_record.rb +1 -1
- metadata +14 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 726b98d501c1bb19481f8961894653a362e7ee0bd9993c35ef25e9ad4d76ccf4
|
4
|
+
data.tar.gz: f479e8a86f16437cf977c04a0bb6f69783281176eeedb955348634114876b6c4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 917b3e5292fa4e7927994fcab3f6b6c07d9615c8c755e1f4950a55bcf5d9232c53f116ceee41ba63d7f6bdf23bc9b3f0e778edfd102aa6327808374fdb8e1ba0
|
7
|
+
data.tar.gz: e772cf960f0a2c361cd2701b7ac765cefc86336bcf353741dc8dd4c56937db0392ba41b762ca9d26879702fbf74f2ff10197235715b0b7aa3b69e83e2fba1ca8
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,87 @@
|
|
1
|
+
## Rails 6.1.5 (March 09, 2022) ##
|
2
|
+
|
3
|
+
* Fix `ActiveRecord::ConnectionAdapters::SchemaCache#deep_deduplicate` for Ruby 2.6.
|
4
|
+
|
5
|
+
Ruby 2.6 and 2.7 have slightly different implementations of the `String#@-` method.
|
6
|
+
In Ruby 2.6, the receiver of the `String#@-` method is modified under certain circumstances.
|
7
|
+
This was later identified as a bug (https://bugs.ruby-lang.org/issues/15926) and only
|
8
|
+
fixed in Ruby 2.7.
|
9
|
+
|
10
|
+
Before the changes in this commit, the
|
11
|
+
`ActiveRecord::ConnectionAdapters::SchemaCache#deep_deduplicate` method, which internally
|
12
|
+
calls the `String#@-` method, could also modify an input string argument in Ruby 2.6 --
|
13
|
+
changing a tainted, unfrozen string into a tainted, frozen string.
|
14
|
+
|
15
|
+
Fixes #43056
|
16
|
+
|
17
|
+
*Eric O'Hanlon*
|
18
|
+
|
19
|
+
* Fix migration compatibility to create SQLite references/belongs_to column as integer when
|
20
|
+
migration version is 6.0.
|
21
|
+
|
22
|
+
`reference`/`belongs_to` in migrations with version 6.0 were creating columns as
|
23
|
+
bigint instead of integer for the SQLite Adapter.
|
24
|
+
|
25
|
+
*Marcelo Lauxen*
|
26
|
+
|
27
|
+
* Fix dbconsole for 3-tier config.
|
28
|
+
|
29
|
+
*Eileen M. Uchitelle*
|
30
|
+
|
31
|
+
* Better handle SQL queries with invalid encoding.
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
Post.create(name: "broken \xC8 UTF-8")
|
35
|
+
```
|
36
|
+
|
37
|
+
Would cause all adapters to fail in a non controlled way in the code
|
38
|
+
responsible to detect write queries.
|
39
|
+
|
40
|
+
The query is now properly passed to the database connection, which might or might
|
41
|
+
not be able to handle it, but will either succeed or failed in a more correct way.
|
42
|
+
|
43
|
+
*Jean Boussier*
|
44
|
+
|
45
|
+
* Ignore persisted in-memory records when merging target lists.
|
46
|
+
|
47
|
+
*Kevin Sjöberg*
|
48
|
+
|
49
|
+
* Fix regression bug that caused ignoring additional conditions for preloading
|
50
|
+
`has_many` through relations.
|
51
|
+
|
52
|
+
Fixes #43132
|
53
|
+
|
54
|
+
*Alexander Pauly*
|
55
|
+
|
56
|
+
* Fix `ActiveRecord::InternalMetadata` to not be broken by
|
57
|
+
`config.active_record.record_timestamps = false`
|
58
|
+
|
59
|
+
Since the model always create the timestamp columns, it has to set them, otherwise it breaks
|
60
|
+
various DB management tasks.
|
61
|
+
|
62
|
+
Fixes #42983
|
63
|
+
|
64
|
+
*Jean Boussier*
|
65
|
+
|
66
|
+
* Fix duplicate active record objects on `inverse_of`.
|
67
|
+
|
68
|
+
*Justin Carvalho*
|
69
|
+
|
70
|
+
* Fix duplicate objects stored in has many association after save.
|
71
|
+
|
72
|
+
Fixes #42549.
|
73
|
+
|
74
|
+
*Alex Ghiculescu*
|
75
|
+
|
76
|
+
* Fix performance regression in `CollectionAssocation#build`.
|
77
|
+
|
78
|
+
*Alex Ghiculescu*
|
79
|
+
|
80
|
+
* Fix retrieving default value for text column for MariaDB.
|
81
|
+
|
82
|
+
*fatkodima*
|
83
|
+
|
84
|
+
|
1
85
|
## Rails 6.1.4.7 (March 08, 2022) ##
|
2
86
|
|
3
87
|
* No changes.
|
@@ -102,10 +186,10 @@
|
|
102
186
|
```
|
103
187
|
|
104
188
|
In the example, `dog.treats` would still raise even though
|
105
|
-
`strict_loading` was set to false. This is a bug
|
106
|
-
Active Storage which is why I made this PR
|
189
|
+
`strict_loading` was set to false. This is a bug affecting more than
|
190
|
+
Active Storage which is why I made this PR superseding #41461. We need
|
107
191
|
to fix this for all applications since the behavior is a little
|
108
|
-
surprising. I took the test from
|
192
|
+
surprising. I took the test from #41461 and the code suggestion from #41453
|
109
193
|
with some additions.
|
110
194
|
|
111
195
|
*Eileen M. Uchitelle*, *Radamés Roriz*
|
@@ -607,7 +691,7 @@
|
|
607
691
|
|
608
692
|
attribute :duration, :interval
|
609
693
|
|
610
|
-
To keep old behavior until
|
694
|
+
To keep old behavior until 7.0 is released:
|
611
695
|
|
612
696
|
attribute :duration, :string
|
613
697
|
|
@@ -779,8 +863,8 @@
|
|
779
863
|
*Ryuta Kamizono*
|
780
864
|
|
781
865
|
* Merging conditions on the same column no longer maintain both conditions,
|
782
|
-
and will be consistently replaced by the latter condition in Rails
|
783
|
-
To migrate to Rails
|
866
|
+
and will be consistently replaced by the latter condition in Rails 7.0.
|
867
|
+
To migrate to Rails 7.0's behavior, use `relation.merge(other, rewhere: true)`.
|
784
868
|
|
785
869
|
```ruby
|
786
870
|
# Rails 6.1 (IN clause is replaced by merger side equality condition)
|
@@ -789,10 +873,10 @@
|
|
789
873
|
# Rails 6.1 (both conflict conditions exists, deprecated)
|
790
874
|
Author.where(id: david.id..mary.id).merge(Author.where(id: bob)) # => []
|
791
875
|
|
792
|
-
# Rails 6.1 with rewhere to migrate to Rails
|
876
|
+
# Rails 6.1 with rewhere to migrate to Rails 7.0's behavior
|
793
877
|
Author.where(id: david.id..mary.id).merge(Author.where(id: bob), rewhere: true) # => [bob]
|
794
878
|
|
795
|
-
# Rails
|
879
|
+
# Rails 7.0 (same behavior with IN clause, mergee side condition is consistently replaced)
|
796
880
|
Author.where(id: [david.id, mary.id]).merge(Author.where(id: bob)) # => [bob]
|
797
881
|
Author.where(id: david.id..mary.id).merge(Author.where(id: bob)) # => [bob]
|
798
882
|
```
|
@@ -884,7 +968,7 @@
|
|
884
968
|
|
885
969
|
* Deprecate aggregations with group by duplicated fields.
|
886
970
|
|
887
|
-
To migrate to Rails
|
971
|
+
To migrate to Rails 7.0's behavior, use `uniq!(:group)` to deduplicate group fields.
|
888
972
|
|
889
973
|
```ruby
|
890
974
|
accounts = Account.group(:firm_id)
|
@@ -908,7 +992,7 @@
|
|
908
992
|
|
909
993
|
* Deprecate duplicated query annotations.
|
910
994
|
|
911
|
-
To migrate to Rails
|
995
|
+
To migrate to Rails 7.0's behavior, use `uniq!(:annotate)` to deduplicate query annotations.
|
912
996
|
|
913
997
|
```ruby
|
914
998
|
accounts = Account.where(id: [1, 2]).annotate("david and mary")
|
@@ -1329,13 +1413,13 @@
|
|
1329
1413
|
|
1330
1414
|
* Deprecate `#remove_connection` in favor of `#remove_connection_pool` when called on the handler.
|
1331
1415
|
|
1332
|
-
`#remove_connection` is deprecated in order to support returning a `DatabaseConfig` object instead of a `Hash`. Use `#remove_connection_pool`, `#remove_connection` will be removed in
|
1416
|
+
`#remove_connection` is deprecated in order to support returning a `DatabaseConfig` object instead of a `Hash`. Use `#remove_connection_pool`, `#remove_connection` will be removed in Rails 7.0.
|
1333
1417
|
|
1334
1418
|
*Eileen M. Uchitelle*, *John Crepezzi*
|
1335
1419
|
|
1336
1420
|
* Deprecate `#default_hash` and it's alias `#[]` on database configurations.
|
1337
1421
|
|
1338
|
-
Applications should use `configs_for`. `#default_hash` and `#[]` will be removed in
|
1422
|
+
Applications should use `configs_for`. `#default_hash` and `#[]` will be removed in Rails 7.0.
|
1339
1423
|
|
1340
1424
|
*Eileen M. Uchitelle*, *John Crepezzi*
|
1341
1425
|
|
data/MIT-LICENSE
CHANGED
@@ -75,6 +75,7 @@ module ActiveRecord
|
|
75
75
|
def reset
|
76
76
|
super
|
77
77
|
@target = []
|
78
|
+
@replaced_or_added_targets = Set.new
|
78
79
|
@association_ids = nil
|
79
80
|
end
|
80
81
|
|
@@ -279,10 +280,7 @@ module ActiveRecord
|
|
279
280
|
end
|
280
281
|
|
281
282
|
def add_to_target(record, skip_callbacks: false, replace: false, &block)
|
282
|
-
|
283
|
-
index = @target.index(record)
|
284
|
-
end
|
285
|
-
replace_on_target(record, index, skip_callbacks, &block)
|
283
|
+
replace_on_target(record, skip_callbacks, replace: replace || association_scope.distinct_value, &block)
|
286
284
|
end
|
287
285
|
|
288
286
|
def target=(record)
|
@@ -292,7 +290,7 @@ module ActiveRecord
|
|
292
290
|
when Array
|
293
291
|
super
|
294
292
|
else
|
295
|
-
|
293
|
+
replace_on_target(record, true, replace: true, inversing: true)
|
296
294
|
end
|
297
295
|
end
|
298
296
|
|
@@ -342,7 +340,7 @@ module ActiveRecord
|
|
342
340
|
end
|
343
341
|
end
|
344
342
|
|
345
|
-
persisted + memory
|
343
|
+
persisted + memory.reject(&:persisted?)
|
346
344
|
end
|
347
345
|
|
348
346
|
def _create_record(attributes, raise = false, &block)
|
@@ -425,7 +423,7 @@ module ActiveRecord
|
|
425
423
|
common_records = intersection(new_target, original_target)
|
426
424
|
common_records.each do |record|
|
427
425
|
skip_callbacks = true
|
428
|
-
replace_on_target(record,
|
426
|
+
replace_on_target(record, skip_callbacks, replace: true)
|
429
427
|
end
|
430
428
|
end
|
431
429
|
|
@@ -448,7 +446,11 @@ module ActiveRecord
|
|
448
446
|
records
|
449
447
|
end
|
450
448
|
|
451
|
-
def replace_on_target(record,
|
449
|
+
def replace_on_target(record, skip_callbacks, replace:, inversing: false)
|
450
|
+
if replace && (!record.new_record? || @replaced_or_added_targets.include?(record))
|
451
|
+
index = @target.index(record)
|
452
|
+
end
|
453
|
+
|
452
454
|
catch(:abort) do
|
453
455
|
callback(:before_add, record)
|
454
456
|
end || return unless skip_callbacks
|
@@ -459,6 +461,12 @@ module ActiveRecord
|
|
459
461
|
|
460
462
|
yield(record) if block_given?
|
461
463
|
|
464
|
+
if !index && @replaced_or_added_targets.include?(record)
|
465
|
+
index = @target.index(record)
|
466
|
+
end
|
467
|
+
|
468
|
+
@replaced_or_added_targets << record if inversing || index || record.new_record?
|
469
|
+
|
462
470
|
if index
|
463
471
|
target[index] = record
|
464
472
|
elsif @_was_loaded || !loaded?
|
@@ -129,9 +129,7 @@ module ActiveRecord
|
|
129
129
|
end
|
130
130
|
|
131
131
|
def reflection_scope
|
132
|
-
@reflection_scope ||=
|
133
|
-
reflection.join_scopes(klass.arel_table, klass.predicate_builder, klass).inject(&:merge!) || klass.unscoped
|
134
|
-
end
|
132
|
+
@reflection_scope ||= reflection.join_scopes(klass.arel_table, klass.predicate_builder, klass).inject(klass.unscoped, &:merge!)
|
135
133
|
end
|
136
134
|
|
137
135
|
def build_scope
|
@@ -1177,7 +1177,7 @@ module ActiveRecord
|
|
1177
1177
|
return owner_to_pool_manager[owner] if owner_to_pool_manager.key?(owner)
|
1178
1178
|
|
1179
1179
|
if owner == "primary"
|
1180
|
-
ActiveSupport::Deprecation.warn("Using `\"primary\"` as a `connection_specification_name` is deprecated and will be removed in Rails
|
1180
|
+
ActiveSupport::Deprecation.warn("Using `\"primary\"` as a `connection_specification_name` is deprecated and will be removed in Rails 7.0.0. Please use `ActiveRecord::Base`.")
|
1181
1181
|
owner_to_pool_manager[Base.name]
|
1182
1182
|
end
|
1183
1183
|
end
|
@@ -12,7 +12,7 @@ module ActiveRecord
|
|
12
12
|
if value.is_a?(Base)
|
13
13
|
ActiveSupport::Deprecation.warn(<<~MSG)
|
14
14
|
Passing an Active Record object to `quote` directly is deprecated
|
15
|
-
and will be no longer quoted as id value in Rails
|
15
|
+
and will be no longer quoted as id value in Rails 7.0.
|
16
16
|
MSG
|
17
17
|
value = value.id_for_database
|
18
18
|
end
|
@@ -27,14 +27,14 @@ module ActiveRecord
|
|
27
27
|
if value.is_a?(Base)
|
28
28
|
ActiveSupport::Deprecation.warn(<<~MSG)
|
29
29
|
Passing an Active Record object to `type_cast` directly is deprecated
|
30
|
-
and will be no longer type casted as id value in Rails
|
30
|
+
and will be no longer type casted as id value in Rails 7.0.
|
31
31
|
MSG
|
32
32
|
value = value.id_for_database
|
33
33
|
end
|
34
34
|
|
35
35
|
if column
|
36
36
|
ActiveSupport::Deprecation.warn(<<~MSG)
|
37
|
-
Passing a column to `type_cast` is deprecated and will be removed in Rails
|
37
|
+
Passing a column to `type_cast` is deprecated and will be removed in Rails 7.0.
|
38
38
|
MSG
|
39
39
|
type = lookup_cast_type_from_column(column)
|
40
40
|
value = type.serialize(value)
|
@@ -167,6 +167,9 @@ module ActiveRecord
|
|
167
167
|
elsif type_metadata.extra == "DEFAULT_GENERATED"
|
168
168
|
default = +"(#{default})" unless default.start_with?("(")
|
169
169
|
default, default_function = nil, default
|
170
|
+
elsif type_metadata.type == :text && default
|
171
|
+
# strip and unescape quotes
|
172
|
+
default = default[1...-1].gsub("\\'", "'")
|
170
173
|
end
|
171
174
|
|
172
175
|
MySQL::Column.new(
|
@@ -203,7 +206,7 @@ module ActiveRecord
|
|
203
206
|
def data_source_sql(name = nil, type: nil)
|
204
207
|
scope = quoted_scope(name, type: type)
|
205
208
|
|
206
|
-
sql = +"SELECT table_name FROM (SELECT
|
209
|
+
sql = +"SELECT table_name FROM (SELECT table_name, table_type FROM information_schema.tables "
|
207
210
|
sql << " WHERE table_schema = #{scope[:schema]}) _subquery"
|
208
211
|
if scope[:type] || scope[:name]
|
209
212
|
conditions = []
|
@@ -198,16 +198,40 @@ module ActiveRecord
|
|
198
198
|
@indexes = deep_deduplicate(@indexes)
|
199
199
|
end
|
200
200
|
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
201
|
+
if RUBY_VERSION < "2.7"
|
202
|
+
def deep_deduplicate(value)
|
203
|
+
case value
|
204
|
+
when Hash
|
205
|
+
value.transform_keys { |k| deep_deduplicate(k) }.transform_values { |v| deep_deduplicate(v) }
|
206
|
+
when Array
|
207
|
+
value.map { |i| deep_deduplicate(i) }
|
208
|
+
when String
|
209
|
+
if value.tainted?
|
210
|
+
# Ruby 2.6 and 2.7 have slightly different implementations of the String#@- method.
|
211
|
+
# In Ruby 2.6, the receiver of the String#@- method is modified under certain
|
212
|
+
# circumstances, and this was later identified as a bug
|
213
|
+
# (https://bugs.ruby-lang.org/issues/15926) and only fixed in Ruby 2.7.
|
214
|
+
value = value.dup
|
215
|
+
end
|
216
|
+
-value
|
217
|
+
when Deduplicable
|
218
|
+
-value
|
219
|
+
else
|
220
|
+
value
|
221
|
+
end
|
222
|
+
end
|
223
|
+
else
|
224
|
+
def deep_deduplicate(value)
|
225
|
+
case value
|
226
|
+
when Hash
|
227
|
+
value.transform_keys { |k| deep_deduplicate(k) }.transform_values { |v| deep_deduplicate(v) }
|
228
|
+
when Array
|
229
|
+
value.map { |i| deep_deduplicate(i) }
|
230
|
+
when String, Deduplicable
|
231
|
+
-value
|
232
|
+
else
|
233
|
+
value
|
234
|
+
end
|
211
235
|
end
|
212
236
|
end
|
213
237
|
|
@@ -135,7 +135,7 @@ module ActiveRecord
|
|
135
135
|
# Dog.first # finds first Dog record stored on the shard one replica
|
136
136
|
# end
|
137
137
|
#
|
138
|
-
# The database kwarg is deprecated and will be removed in
|
138
|
+
# The database kwarg is deprecated and will be removed in Rails 7.0.0 without replacement.
|
139
139
|
def connected_to(database: nil, role: nil, shard: nil, prevent_writes: false, &blk)
|
140
140
|
if legacy_connection_handling
|
141
141
|
if self != Base
|
@@ -154,7 +154,7 @@ module ActiveRecord
|
|
154
154
|
if database && (role || shard)
|
155
155
|
raise ArgumentError, "`connected_to` cannot accept a `database` argument with any other arguments."
|
156
156
|
elsif database
|
157
|
-
ActiveSupport::Deprecation.warn("The database key in `connected_to` is deprecated. It will be removed in Rails
|
157
|
+
ActiveSupport::Deprecation.warn("The database key in `connected_to` is deprecated. It will be removed in Rails 7.0.0 without replacement.")
|
158
158
|
|
159
159
|
if database.is_a?(Hash)
|
160
160
|
role, database = database.first
|
data/lib/active_record/core.rb
CHANGED
@@ -278,11 +278,11 @@ module ActiveRecord
|
|
278
278
|
end
|
279
279
|
|
280
280
|
def self.allow_unsafe_raw_sql # :nodoc:
|
281
|
-
ActiveSupport::Deprecation.warn("ActiveRecord::Base.allow_unsafe_raw_sql is deprecated and will be removed in Rails
|
281
|
+
ActiveSupport::Deprecation.warn("ActiveRecord::Base.allow_unsafe_raw_sql is deprecated and will be removed in Rails 7.0")
|
282
282
|
end
|
283
283
|
|
284
284
|
def self.allow_unsafe_raw_sql=(value) # :nodoc:
|
285
|
-
ActiveSupport::Deprecation.warn("ActiveRecord::Base.allow_unsafe_raw_sql= is deprecated and will be removed in Rails
|
285
|
+
ActiveSupport::Deprecation.warn("ActiveRecord::Base.allow_unsafe_raw_sql= is deprecated and will be removed in Rails 7.0")
|
286
286
|
end
|
287
287
|
|
288
288
|
self.default_connection_handler = ConnectionAdapters::ConnectionHandler.new
|
@@ -32,7 +32,7 @@ module ActiveRecord
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def config
|
35
|
-
ActiveSupport::Deprecation.warn("DatabaseConfig#config will be removed in
|
35
|
+
ActiveSupport::Deprecation.warn("DatabaseConfig#config will be removed in 7.0.0 in favor of DatabaseConfig#configuration_hash which returns a hash with symbol keys")
|
36
36
|
configuration_hash.stringify_keys
|
37
37
|
end
|
38
38
|
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "uri"
|
3
4
|
require "active_record/database_configurations/database_config"
|
4
5
|
require "active_record/database_configurations/hash_config"
|
5
6
|
require "active_record/database_configurations/url_config"
|
@@ -40,7 +41,7 @@ module ActiveRecord
|
|
40
41
|
def configs_for(env_name: nil, spec_name: nil, name: nil, include_replicas: false)
|
41
42
|
if spec_name
|
42
43
|
name = spec_name
|
43
|
-
ActiveSupport::Deprecation.warn("The kwarg `spec_name` is deprecated in favor of `name`. `spec_name` will be removed in Rails
|
44
|
+
ActiveSupport::Deprecation.warn("The kwarg `spec_name` is deprecated in favor of `name`. `spec_name` will be removed in Rails 7.0")
|
44
45
|
end
|
45
46
|
|
46
47
|
env_name ||= default_env if name
|
@@ -10,6 +10,8 @@ module ActiveRecord
|
|
10
10
|
# This is enabled by default. To disable this functionality set
|
11
11
|
# `use_metadata_table` to false in your database configuration.
|
12
12
|
class InternalMetadata < ActiveRecord::Base # :nodoc:
|
13
|
+
self.record_timestamps = true
|
14
|
+
|
13
15
|
class << self
|
14
16
|
def enabled?
|
15
17
|
ActiveRecord::Base.connection.use_metadata_table?
|
@@ -10,7 +10,7 @@ module ActiveRecord
|
|
10
10
|
else
|
11
11
|
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
12
12
|
YAML loading from legacy format older than Rails 5.0 is deprecated
|
13
|
-
and will be removed in Rails
|
13
|
+
and will be removed in Rails 7.0.
|
14
14
|
MSG
|
15
15
|
if coder["attributes"].is_a?(ActiveModel::AttributeSet)
|
16
16
|
Rails420.convert(klass, coder)
|
@@ -22,6 +22,22 @@ module ActiveRecord
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
+
module SQLite3
|
26
|
+
module TableDefinition
|
27
|
+
def references(*args, **options)
|
28
|
+
args.each do |ref_name|
|
29
|
+
ReferenceDefinition.new(ref_name, type: :integer, **options).add_to(self)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
alias :belongs_to :references
|
33
|
+
|
34
|
+
def column(name, type, index: nil, **options)
|
35
|
+
options[:precision] ||= nil
|
36
|
+
super
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
25
41
|
module TableDefinition
|
26
42
|
def references(*args, **options)
|
27
43
|
args.each do |ref_name|
|
@@ -56,8 +72,13 @@ module ActiveRecord
|
|
56
72
|
end
|
57
73
|
|
58
74
|
def add_reference(table_name, ref_name, **options)
|
59
|
-
|
60
|
-
.
|
75
|
+
if connection.adapter_name == "SQLite"
|
76
|
+
reference_definition = ReferenceDefinition.new(ref_name, type: :integer, **options)
|
77
|
+
else
|
78
|
+
reference_definition = ReferenceDefinition.new(ref_name, **options)
|
79
|
+
end
|
80
|
+
|
81
|
+
reference_definition.add_to(connection.update_table_definition(table_name, self))
|
61
82
|
end
|
62
83
|
alias :add_belongs_to :add_reference
|
63
84
|
|
@@ -65,6 +86,7 @@ module ActiveRecord
|
|
65
86
|
def compatible_table_definition(t)
|
66
87
|
class << t
|
67
88
|
prepend TableDefinition
|
89
|
+
prepend SQLite3::TableDefinition
|
68
90
|
end
|
69
91
|
t
|
70
92
|
end
|
@@ -630,7 +630,7 @@ module ActiveRecord
|
|
630
630
|
if column.sql_type.start_with?("interval")
|
631
631
|
precision_arguments = column.precision.presence && ", precision: #{column.precision}"
|
632
632
|
ActiveSupport::Deprecation.warn(<<~WARNING)
|
633
|
-
The behavior of the `:interval` type will be changing in Rails
|
633
|
+
The behavior of the `:interval` type will be changing in Rails 7.0
|
634
634
|
to return an `ActiveSupport::Duration` object. If you'd like to keep
|
635
635
|
the old behavior, you can add this line to #{self.name} model:
|
636
636
|
|
@@ -464,7 +464,7 @@ db_namespace = namespace :db do
|
|
464
464
|
|
465
465
|
task load_if_ruby: ["db:create", :environment] do
|
466
466
|
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
467
|
-
Using `bin/rails db:schema:load_if_ruby` is deprecated and will be removed in Rails
|
467
|
+
Using `bin/rails db:schema:load_if_ruby` is deprecated and will be removed in Rails 7.0.
|
468
468
|
Configure the format using `config.active_record.schema_format = :ruby` to use `schema.rb` and run `bin/rails db:schema:load` instead.
|
469
469
|
MSG
|
470
470
|
db_namespace["schema:load"].invoke if ActiveRecord::Base.schema_format == :ruby
|
@@ -527,7 +527,7 @@ db_namespace = namespace :db do
|
|
527
527
|
desc "Dumps the database structure to db/structure.sql. Specify another file with SCHEMA=db/my_structure.sql"
|
528
528
|
task dump: :load_config do
|
529
529
|
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
530
|
-
Using `bin/rails db:structure:dump` is deprecated and will be removed in Rails
|
530
|
+
Using `bin/rails db:structure:dump` is deprecated and will be removed in Rails 7.0.
|
531
531
|
Configure the format using `config.active_record.schema_format = :sql` to use `structure.sql` and run `bin/rails db:schema:dump` instead.
|
532
532
|
MSG
|
533
533
|
|
@@ -538,7 +538,7 @@ db_namespace = namespace :db do
|
|
538
538
|
desc "Recreates the databases from the structure.sql file"
|
539
539
|
task load: [:load_config, :check_protected_environments] do
|
540
540
|
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
541
|
-
Using `bin/rails db:structure:load` is deprecated and will be removed in Rails
|
541
|
+
Using `bin/rails db:structure:load` is deprecated and will be removed in Rails 7.0.
|
542
542
|
Configure the format using `config.active_record.schema_format = :sql` to use `structure.sql` and run `bin/rails db:schema:load` instead.
|
543
543
|
MSG
|
544
544
|
db_namespace["schema:load"].invoke
|
@@ -546,7 +546,7 @@ db_namespace = namespace :db do
|
|
546
546
|
|
547
547
|
task load_if_sql: ["db:create", :environment] do
|
548
548
|
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
549
|
-
Using `bin/rails db:structure:load_if_sql` is deprecated and will be removed in Rails
|
549
|
+
Using `bin/rails db:structure:load_if_sql` is deprecated and will be removed in Rails 7.0.
|
550
550
|
Configure the format using `config.active_record.schema_format = :sql` to use `structure.sql` and run `bin/rails db:schema:load` instead.
|
551
551
|
MSG
|
552
552
|
db_namespace["schema:load"].invoke if ActiveRecord::Base.schema_format == :sql
|
@@ -557,7 +557,7 @@ db_namespace = namespace :db do
|
|
557
557
|
desc "Dumps the #{name} database structure to db/structure.sql. Specify another file with SCHEMA=db/my_structure.sql"
|
558
558
|
task name => :load_config do
|
559
559
|
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
560
|
-
Using `bin/rails db:structure:dump:#{name}` is deprecated and will be removed in Rails
|
560
|
+
Using `bin/rails db:structure:dump:#{name}` is deprecated and will be removed in Rails 7.0.
|
561
561
|
Configure the format using `config.active_record.schema_format = :sql` to use `structure.sql` and run `bin/rails db:schema:dump:#{name}` instead.
|
562
562
|
MSG
|
563
563
|
db_namespace["schema:dump:#{name}"].invoke
|
@@ -571,7 +571,7 @@ db_namespace = namespace :db do
|
|
571
571
|
desc "Recreates the #{name} database from the structure.sql file"
|
572
572
|
task name => :load_config do
|
573
573
|
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
574
|
-
Using `bin/rails db:structure:load:#{name}` is deprecated and will be removed in Rails
|
574
|
+
Using `bin/rails db:structure:load:#{name}` is deprecated and will be removed in Rails 7.0.
|
575
575
|
Configure the format using `config.active_record.schema_format = :sql` to use `structure.sql` and run `bin/rails db:schema:load:#{name}` instead.
|
576
576
|
MSG
|
577
577
|
db_namespace["schema:load:#{name}"].invoke
|
@@ -603,7 +603,7 @@ db_namespace = namespace :db do
|
|
603
603
|
# desc "Recreate the test database from an existent structure.sql file"
|
604
604
|
task load_structure: %w(db:test:purge) do
|
605
605
|
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
606
|
-
Using `bin/rails db:test:load_structure` is deprecated and will be removed in Rails
|
606
|
+
Using `bin/rails db:test:load_structure` is deprecated and will be removed in Rails 7.0.
|
607
607
|
Configure the format using `config.active_record.schema_format = :sql` to use `structure.sql` and run `bin/rails db:test:load_schema` instead.
|
608
608
|
MSG
|
609
609
|
db_namespace["test:load_schema"].invoke
|
@@ -650,7 +650,7 @@ db_namespace = namespace :db do
|
|
650
650
|
namespace :load_structure do
|
651
651
|
task name => "db:test:purge:#{name}" do
|
652
652
|
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
653
|
-
Using `bin/rails db:test:load_structure:#{name}` is deprecated and will be removed in Rails
|
653
|
+
Using `bin/rails db:test:load_structure:#{name}` is deprecated and will be removed in Rails 7.0.
|
654
654
|
Configure the format using `config.active_record.schema_format = :sql` to use `structure.sql` and run `bin/rails db:test:load_structure:#{name}` instead.
|
655
655
|
MSG
|
656
656
|
db_namespace["test:load_schema:#{name}"].invoke
|
@@ -321,8 +321,8 @@ module ActiveRecord
|
|
321
321
|
|
322
322
|
unless group_fields == group_values
|
323
323
|
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
324
|
-
`#{operation}` with group by duplicated fields does no longer affect to result in Rails
|
325
|
-
To migrate to Rails
|
324
|
+
`#{operation}` with group by duplicated fields does no longer affect to result in Rails 7.0.
|
325
|
+
To migrate to Rails 7.0's behavior, use `uniq!(:group)` to deduplicate group fields
|
326
326
|
(`#{klass.name&.tableize || klass.table_name}.uniq!(:group).#{operation}(#{column_name.inspect})`).
|
327
327
|
MSG
|
328
328
|
group_fields = group_values
|
@@ -369,7 +369,7 @@ module ActiveRecord
|
|
369
369
|
blank_value = order_values.first
|
370
370
|
ActiveSupport::Deprecation.warn(<<~MSG.squish)
|
371
371
|
`.reorder(#{blank_value.inspect})` with `.first` / `.first!` no longer
|
372
|
-
takes non-deterministic result in Rails
|
372
|
+
takes non-deterministic result in Rails 7.0.
|
373
373
|
To continue taking non-deterministic result, use `.take` / `.take!` instead.
|
374
374
|
MSG
|
375
375
|
end
|
@@ -1157,8 +1157,8 @@ module ActiveRecord
|
|
1157
1157
|
annotates = annotates.uniq if annotates.size > 1
|
1158
1158
|
unless annotates == annotate_values
|
1159
1159
|
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
1160
|
-
Duplicated query annotations are no longer shown in queries in Rails
|
1161
|
-
To migrate to Rails
|
1160
|
+
Duplicated query annotations are no longer shown in queries in Rails 7.0.
|
1161
|
+
To migrate to Rails 7.0's behavior, use `uniq!(:annotate)` to deduplicate query annotations
|
1162
1162
|
(`#{klass.name&.tableize || klass.table_name}.uniq!(:annotate)`).
|
1163
1163
|
MSG
|
1164
1164
|
annotates = annotate_values
|
@@ -168,8 +168,8 @@ module ActiveRecord
|
|
168
168
|
else
|
169
169
|
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
170
170
|
Merging (#{node.to_sql}) and (#{ref.to_sql}) no longer maintain
|
171
|
-
both conditions, and will be replaced by the latter in Rails
|
172
|
-
To migrate to Rails
|
171
|
+
both conditions, and will be replaced by the latter in Rails 7.0.
|
172
|
+
To migrate to Rails 7.0's behavior, use `relation.merge(other, rewhere: true)`.
|
173
173
|
MSG
|
174
174
|
false
|
175
175
|
end
|
@@ -340,7 +340,7 @@ module ActiveRecord
|
|
340
340
|
db_config = resolve_configuration(configuration)
|
341
341
|
|
342
342
|
if environment || name
|
343
|
-
ActiveSupport::Deprecation.warn("`environment` and `name` will be removed as parameters in
|
343
|
+
ActiveSupport::Deprecation.warn("`environment` and `name` will be removed as parameters in 7.0.0, you may now pass an ActiveRecord::DatabaseConfigurations::DatabaseConfig as `configuration` instead.")
|
344
344
|
end
|
345
345
|
|
346
346
|
name ||= db_config.name
|
data/lib/active_record.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
#--
|
4
|
-
# Copyright (c) 2004-
|
4
|
+
# Copyright (c) 2004-2022 David Heinemeier Hansson
|
5
5
|
#
|
6
6
|
# Permission is hereby granted, free of charge, to any person obtaining
|
7
7
|
# a copy of this software and associated documentation files (the
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.1.
|
4
|
+
version: 6.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-03-
|
11
|
+
date: 2022-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 6.1.
|
19
|
+
version: 6.1.5
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 6.1.
|
26
|
+
version: 6.1.5
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activemodel
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 6.1.
|
33
|
+
version: 6.1.5
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 6.1.
|
40
|
+
version: 6.1.5
|
41
41
|
description: Databases on Rails. Build a persistent domain model by mapping database
|
42
42
|
tables to Ruby classes. Strong conventions for associations, validations, aggregations,
|
43
43
|
migrations, and testing come baked-in.
|
@@ -390,11 +390,12 @@ licenses:
|
|
390
390
|
- MIT
|
391
391
|
metadata:
|
392
392
|
bug_tracker_uri: https://github.com/rails/rails/issues
|
393
|
-
changelog_uri: https://github.com/rails/rails/blob/v6.1.
|
394
|
-
documentation_uri: https://api.rubyonrails.org/v6.1.
|
393
|
+
changelog_uri: https://github.com/rails/rails/blob/v6.1.5/activerecord/CHANGELOG.md
|
394
|
+
documentation_uri: https://api.rubyonrails.org/v6.1.5/
|
395
395
|
mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
|
396
|
-
source_code_uri: https://github.com/rails/rails/tree/v6.1.
|
397
|
-
|
396
|
+
source_code_uri: https://github.com/rails/rails/tree/v6.1.5/activerecord
|
397
|
+
rubygems_mfa_required: 'true'
|
398
|
+
post_install_message:
|
398
399
|
rdoc_options:
|
399
400
|
- "--main"
|
400
401
|
- README.rdoc
|
@@ -411,8 +412,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
411
412
|
- !ruby/object:Gem::Version
|
412
413
|
version: '0'
|
413
414
|
requirements: []
|
414
|
-
rubygems_version: 3.
|
415
|
-
signing_key:
|
415
|
+
rubygems_version: 3.3.7
|
416
|
+
signing_key:
|
416
417
|
specification_version: 4
|
417
418
|
summary: Object-relational mapper framework (part of Rails).
|
418
419
|
test_files: []
|