activerecord 6.1.4.2 → 6.1.7.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +238 -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/coders/yaml_column.rb +14 -2
- data/lib/active_record/connection_adapters/abstract/connection_pool.rb +1 -1
- data/lib/active_record/connection_adapters/abstract/quoting.rb +13 -4
- data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +4 -0
- 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/postgresql/quoting.rb +26 -0
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +2 -2
- 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 +17 -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 +9 -6
- 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 +4 -2
- data/lib/active_record/relation/where_clause.rb +2 -2
- data/lib/active_record/store.rb +6 -1
- data/lib/active_record/tasks/database_tasks.rb +1 -1
- data/lib/active_record/test_fixtures.rb +9 -5
- data/lib/active_record.rb +1 -1
- metadata +11 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4210c6bb4e56ba5e01d289f5c2ef10a3cb75a87fdbf221d264ce1cff8a6de48e
|
4
|
+
data.tar.gz: 68fce96400cf56e66f2fc1900f6f88d077fc1272f5492a4bfa6b72244677af4e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8157ef3f7abe6813ba3f30af3993a21ac16205844fb86b001b3a3fcb2786d301785a190964cbefa7b6426ead62549fb4e4ef4c7a3b8d007cfaa770f8e5c0fc06
|
7
|
+
data.tar.gz: e35574ea93a13ce49f9621318a9c2a136f9ec628cf4ab92b6fa0e12d6b9a39e3afc506443a52512bffcfd30b9741606314d28940e55dce139da033a1182656b0
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,229 @@
|
|
1
|
+
## Rails 6.1.7.7 (February 21, 2024) ##
|
2
|
+
|
3
|
+
* No changes.
|
4
|
+
|
5
|
+
|
6
|
+
## Rails 6.1.7.6 (August 22, 2023) ##
|
7
|
+
|
8
|
+
* No changes.
|
9
|
+
|
10
|
+
|
11
|
+
## Rails 6.1.7.5 (August 22, 2023) ##
|
12
|
+
|
13
|
+
* No changes.
|
14
|
+
|
15
|
+
|
16
|
+
## Rails 6.1.7.4 (June 26, 2023) ##
|
17
|
+
|
18
|
+
* No changes.
|
19
|
+
|
20
|
+
|
21
|
+
## Rails 6.1.7.3 (March 13, 2023) ##
|
22
|
+
|
23
|
+
* No changes.
|
24
|
+
|
25
|
+
|
26
|
+
## Rails 6.1.7.2 (January 24, 2023) ##
|
27
|
+
|
28
|
+
* No changes.
|
29
|
+
|
30
|
+
|
31
|
+
## Rails 6.1.7.1 (January 17, 2023) ##
|
32
|
+
|
33
|
+
* Make sanitize_as_sql_comment more strict
|
34
|
+
|
35
|
+
Though this method was likely never meant to take user input, it was
|
36
|
+
attempting sanitization. That sanitization could be bypassed with
|
37
|
+
carefully crafted input.
|
38
|
+
|
39
|
+
This commit makes the sanitization more robust by replacing any
|
40
|
+
occurrances of "/*" or "*/" with "/ *" or "* /". It also performs a
|
41
|
+
first pass to remove one surrounding comment to avoid compatibility
|
42
|
+
issues for users relying on the existing removal.
|
43
|
+
|
44
|
+
This also clarifies in the documentation of annotate that it should not
|
45
|
+
be provided user input.
|
46
|
+
|
47
|
+
[CVE-2023-22794]
|
48
|
+
|
49
|
+
* Added integer width check to PostgreSQL::Quoting
|
50
|
+
|
51
|
+
Given a value outside the range for a 64bit signed integer type
|
52
|
+
PostgreSQL will treat the column type as numeric. Comparing
|
53
|
+
integer values against numeric values can result in a slow
|
54
|
+
sequential scan.
|
55
|
+
|
56
|
+
This behavior is configurable via
|
57
|
+
ActiveRecord::Base.raise_int_wider_than_64bit which defaults to true.
|
58
|
+
|
59
|
+
[CVE-2022-44566]
|
60
|
+
|
61
|
+
## Rails 6.1.7 (September 09, 2022) ##
|
62
|
+
|
63
|
+
* Symbol is allowed by default for YAML columns
|
64
|
+
|
65
|
+
*Étienne Barrié*
|
66
|
+
|
67
|
+
* Fix `ActiveRecord::Store` to serialize as a regular Hash
|
68
|
+
|
69
|
+
Previously it would serialize as an `ActiveSupport::HashWithIndifferentAccess`
|
70
|
+
which is wasteful and cause problem with YAML safe_load.
|
71
|
+
|
72
|
+
*Jean Boussier*
|
73
|
+
|
74
|
+
* Fix PG.connect keyword arguments deprecation warning on ruby 2.7
|
75
|
+
|
76
|
+
Fixes #44307.
|
77
|
+
|
78
|
+
*Nikita Vasilevsky*
|
79
|
+
|
80
|
+
## Rails 6.1.6.1 (July 12, 2022) ##
|
81
|
+
|
82
|
+
* Change ActiveRecord::Coders::YAMLColumn default to safe_load
|
83
|
+
|
84
|
+
This adds two new configuration options The configuration options are as
|
85
|
+
follows:
|
86
|
+
|
87
|
+
* `config.active_storage.use_yaml_unsafe_load`
|
88
|
+
|
89
|
+
When set to true, this configuration option tells Rails to use the old
|
90
|
+
"unsafe" YAML loading strategy, maintaining the existing behavior but leaving
|
91
|
+
the possible escalation vulnerability in place. Setting this option to true
|
92
|
+
is *not* recommended, but can aid in upgrading.
|
93
|
+
|
94
|
+
* `config.active_record.yaml_column_permitted_classes`
|
95
|
+
|
96
|
+
The "safe YAML" loading method does not allow all classes to be deserialized
|
97
|
+
by default. This option allows you to specify classes deemed "safe" in your
|
98
|
+
application. For example, if your application uses Symbol and Time in
|
99
|
+
serialized data, you can add Symbol and Time to the allowed list as follows:
|
100
|
+
|
101
|
+
```
|
102
|
+
config.active_record.yaml_column_permitted_classes = [Symbol, Date, Time]
|
103
|
+
```
|
104
|
+
|
105
|
+
[CVE-2022-32224]
|
106
|
+
|
107
|
+
|
108
|
+
## Rails 6.1.6 (May 09, 2022) ##
|
109
|
+
|
110
|
+
* No changes.
|
111
|
+
|
112
|
+
|
113
|
+
## Rails 6.1.5.1 (April 26, 2022) ##
|
114
|
+
|
115
|
+
* No changes.
|
116
|
+
|
117
|
+
|
118
|
+
## Rails 6.1.5 (March 09, 2022) ##
|
119
|
+
|
120
|
+
* Fix `ActiveRecord::ConnectionAdapters::SchemaCache#deep_deduplicate` for Ruby 2.6.
|
121
|
+
|
122
|
+
Ruby 2.6 and 2.7 have slightly different implementations of the `String#-@` method.
|
123
|
+
In Ruby 2.6, the receiver of the `String#-@` method is modified under certain circumstances.
|
124
|
+
This was later identified as a bug (https://bugs.ruby-lang.org/issues/15926) and only
|
125
|
+
fixed in Ruby 2.7.
|
126
|
+
|
127
|
+
Before the changes in this commit, the
|
128
|
+
`ActiveRecord::ConnectionAdapters::SchemaCache#deep_deduplicate` method, which internally
|
129
|
+
calls the `String#-@` method, could also modify an input string argument in Ruby 2.6 --
|
130
|
+
changing a tainted, unfrozen string into a tainted, frozen string.
|
131
|
+
|
132
|
+
Fixes #43056
|
133
|
+
|
134
|
+
*Eric O'Hanlon*
|
135
|
+
|
136
|
+
* Fix migration compatibility to create SQLite references/belongs_to column as integer when
|
137
|
+
migration version is 6.0.
|
138
|
+
|
139
|
+
`reference`/`belongs_to` in migrations with version 6.0 were creating columns as
|
140
|
+
bigint instead of integer for the SQLite Adapter.
|
141
|
+
|
142
|
+
*Marcelo Lauxen*
|
143
|
+
|
144
|
+
* Fix dbconsole for 3-tier config.
|
145
|
+
|
146
|
+
*Eileen M. Uchitelle*
|
147
|
+
|
148
|
+
* Better handle SQL queries with invalid encoding.
|
149
|
+
|
150
|
+
```ruby
|
151
|
+
Post.create(name: "broken \xC8 UTF-8")
|
152
|
+
```
|
153
|
+
|
154
|
+
Would cause all adapters to fail in a non controlled way in the code
|
155
|
+
responsible to detect write queries.
|
156
|
+
|
157
|
+
The query is now properly passed to the database connection, which might or might
|
158
|
+
not be able to handle it, but will either succeed or failed in a more correct way.
|
159
|
+
|
160
|
+
*Jean Boussier*
|
161
|
+
|
162
|
+
* Ignore persisted in-memory records when merging target lists.
|
163
|
+
|
164
|
+
*Kevin Sjöberg*
|
165
|
+
|
166
|
+
* Fix regression bug that caused ignoring additional conditions for preloading
|
167
|
+
`has_many` through relations.
|
168
|
+
|
169
|
+
Fixes #43132
|
170
|
+
|
171
|
+
*Alexander Pauly*
|
172
|
+
|
173
|
+
* Fix `ActiveRecord::InternalMetadata` to not be broken by
|
174
|
+
`config.active_record.record_timestamps = false`
|
175
|
+
|
176
|
+
Since the model always create the timestamp columns, it has to set them, otherwise it breaks
|
177
|
+
various DB management tasks.
|
178
|
+
|
179
|
+
Fixes #42983
|
180
|
+
|
181
|
+
*Jean Boussier*
|
182
|
+
|
183
|
+
* Fix duplicate active record objects on `inverse_of`.
|
184
|
+
|
185
|
+
*Justin Carvalho*
|
186
|
+
|
187
|
+
* Fix duplicate objects stored in has many association after save.
|
188
|
+
|
189
|
+
Fixes #42549.
|
190
|
+
|
191
|
+
*Alex Ghiculescu*
|
192
|
+
|
193
|
+
* Fix performance regression in `CollectionAssocation#build`.
|
194
|
+
|
195
|
+
*Alex Ghiculescu*
|
196
|
+
|
197
|
+
* Fix retrieving default value for text column for MariaDB.
|
198
|
+
|
199
|
+
*fatkodima*
|
200
|
+
|
201
|
+
|
202
|
+
## Rails 6.1.4.7 (March 08, 2022) ##
|
203
|
+
|
204
|
+
* No changes.
|
205
|
+
|
206
|
+
|
207
|
+
## Rails 6.1.4.6 (February 11, 2022) ##
|
208
|
+
|
209
|
+
* No changes.
|
210
|
+
|
211
|
+
|
212
|
+
## Rails 6.1.4.5 (February 11, 2022) ##
|
213
|
+
|
214
|
+
* No changes.
|
215
|
+
|
216
|
+
|
217
|
+
## Rails 6.1.4.4 (December 15, 2021) ##
|
218
|
+
|
219
|
+
* No changes.
|
220
|
+
|
221
|
+
|
222
|
+
## Rails 6.1.4.3 (December 14, 2021) ##
|
223
|
+
|
224
|
+
* No changes.
|
225
|
+
|
226
|
+
|
1
227
|
## Rails 6.1.4.2 (December 14, 2021) ##
|
2
228
|
|
3
229
|
* No changes.
|
@@ -77,10 +303,10 @@
|
|
77
303
|
```
|
78
304
|
|
79
305
|
In the example, `dog.treats` would still raise even though
|
80
|
-
`strict_loading` was set to false. This is a bug
|
81
|
-
Active Storage which is why I made this PR
|
306
|
+
`strict_loading` was set to false. This is a bug affecting more than
|
307
|
+
Active Storage which is why I made this PR superseding #41461. We need
|
82
308
|
to fix this for all applications since the behavior is a little
|
83
|
-
surprising. I took the test from
|
309
|
+
surprising. I took the test from #41461 and the code suggestion from #41453
|
84
310
|
with some additions.
|
85
311
|
|
86
312
|
*Eileen M. Uchitelle*, *Radamés Roriz*
|
@@ -582,7 +808,7 @@
|
|
582
808
|
|
583
809
|
attribute :duration, :interval
|
584
810
|
|
585
|
-
To keep old behavior until
|
811
|
+
To keep old behavior until 7.0 is released:
|
586
812
|
|
587
813
|
attribute :duration, :string
|
588
814
|
|
@@ -754,8 +980,8 @@
|
|
754
980
|
*Ryuta Kamizono*
|
755
981
|
|
756
982
|
* Merging conditions on the same column no longer maintain both conditions,
|
757
|
-
and will be consistently replaced by the latter condition in Rails
|
758
|
-
To migrate to Rails
|
983
|
+
and will be consistently replaced by the latter condition in Rails 7.0.
|
984
|
+
To migrate to Rails 7.0's behavior, use `relation.merge(other, rewhere: true)`.
|
759
985
|
|
760
986
|
```ruby
|
761
987
|
# Rails 6.1 (IN clause is replaced by merger side equality condition)
|
@@ -764,10 +990,10 @@
|
|
764
990
|
# Rails 6.1 (both conflict conditions exists, deprecated)
|
765
991
|
Author.where(id: david.id..mary.id).merge(Author.where(id: bob)) # => []
|
766
992
|
|
767
|
-
# Rails 6.1 with rewhere to migrate to Rails
|
993
|
+
# Rails 6.1 with rewhere to migrate to Rails 7.0's behavior
|
768
994
|
Author.where(id: david.id..mary.id).merge(Author.where(id: bob), rewhere: true) # => [bob]
|
769
995
|
|
770
|
-
# Rails
|
996
|
+
# Rails 7.0 (same behavior with IN clause, mergee side condition is consistently replaced)
|
771
997
|
Author.where(id: [david.id, mary.id]).merge(Author.where(id: bob)) # => [bob]
|
772
998
|
Author.where(id: david.id..mary.id).merge(Author.where(id: bob)) # => [bob]
|
773
999
|
```
|
@@ -859,7 +1085,7 @@
|
|
859
1085
|
|
860
1086
|
* Deprecate aggregations with group by duplicated fields.
|
861
1087
|
|
862
|
-
To migrate to Rails
|
1088
|
+
To migrate to Rails 7.0's behavior, use `uniq!(:group)` to deduplicate group fields.
|
863
1089
|
|
864
1090
|
```ruby
|
865
1091
|
accounts = Account.group(:firm_id)
|
@@ -883,7 +1109,7 @@
|
|
883
1109
|
|
884
1110
|
* Deprecate duplicated query annotations.
|
885
1111
|
|
886
|
-
To migrate to Rails
|
1112
|
+
To migrate to Rails 7.0's behavior, use `uniq!(:annotate)` to deduplicate query annotations.
|
887
1113
|
|
888
1114
|
```ruby
|
889
1115
|
accounts = Account.where(id: [1, 2]).annotate("david and mary")
|
@@ -1304,13 +1530,13 @@
|
|
1304
1530
|
|
1305
1531
|
* Deprecate `#remove_connection` in favor of `#remove_connection_pool` when called on the handler.
|
1306
1532
|
|
1307
|
-
`#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
|
1533
|
+
`#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.
|
1308
1534
|
|
1309
1535
|
*Eileen M. Uchitelle*, *John Crepezzi*
|
1310
1536
|
|
1311
1537
|
* Deprecate `#default_hash` and it's alias `#[]` on database configurations.
|
1312
1538
|
|
1313
|
-
Applications should use `configs_for`. `#default_hash` and `#[]` will be removed in
|
1539
|
+
Applications should use `configs_for`. `#default_hash` and `#[]` will be removed in Rails 7.0.
|
1314
1540
|
|
1315
1541
|
*Eileen M. Uchitelle*, *John Crepezzi*
|
1316
1542
|
|
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
|
@@ -47,11 +47,23 @@ module ActiveRecord
|
|
47
47
|
|
48
48
|
if YAML.respond_to?(:unsafe_load)
|
49
49
|
def yaml_load(payload)
|
50
|
-
|
50
|
+
if ActiveRecord::Base.use_yaml_unsafe_load
|
51
|
+
YAML.unsafe_load(payload)
|
52
|
+
elsif YAML.method(:safe_load).parameters.include?([:key, :permitted_classes])
|
53
|
+
YAML.safe_load(payload, permitted_classes: ActiveRecord::Base.yaml_column_permitted_classes, aliases: true)
|
54
|
+
else
|
55
|
+
YAML.safe_load(payload, ActiveRecord::Base.yaml_column_permitted_classes, [], true)
|
56
|
+
end
|
51
57
|
end
|
52
58
|
else
|
53
59
|
def yaml_load(payload)
|
54
|
-
|
60
|
+
if ActiveRecord::Base.use_yaml_unsafe_load
|
61
|
+
YAML.load(payload)
|
62
|
+
elsif YAML.method(:safe_load).parameters.include?([:key, :permitted_classes])
|
63
|
+
YAML.safe_load(payload, permitted_classes: ActiveRecord::Base.yaml_column_permitted_classes, aliases: true)
|
64
|
+
else
|
65
|
+
YAML.safe_load(payload, ActiveRecord::Base.yaml_column_permitted_classes, [], true)
|
66
|
+
end
|
55
67
|
end
|
56
68
|
end
|
57
69
|
end
|
@@ -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)
|
@@ -138,7 +138,16 @@ module ActiveRecord
|
|
138
138
|
end
|
139
139
|
|
140
140
|
def sanitize_as_sql_comment(value) # :nodoc:
|
141
|
-
|
141
|
+
# Sanitize a string to appear within a SQL comment
|
142
|
+
# For compatibility, this also surrounding "/*+", "/*", and "*/"
|
143
|
+
# charcacters, possibly with single surrounding space.
|
144
|
+
# Then follows that by replacing any internal "*/" or "/ *" with
|
145
|
+
# "* /" or "/ *"
|
146
|
+
comment = value.to_s.dup
|
147
|
+
comment.gsub!(%r{\A\s*/\*\+?\s?|\s?\*/\s*\Z}, "")
|
148
|
+
comment.gsub!("*/", "* /")
|
149
|
+
comment.gsub!("/*", "/ *")
|
150
|
+
comment
|
142
151
|
end
|
143
152
|
|
144
153
|
def column_name_matcher # :nodoc:
|
@@ -198,6 +198,10 @@ module ActiveRecord
|
|
198
198
|
|
199
199
|
def index_options(table_name)
|
200
200
|
index_options = as_options(index)
|
201
|
+
|
202
|
+
# legacy reference index names are used on versions 6.0 and earlier
|
203
|
+
return index_options if options[:_uses_legacy_reference_index_name]
|
204
|
+
|
201
205
|
index_options[:name] ||= polymorphic_index_name(table_name) if polymorphic
|
202
206
|
index_options
|
203
207
|
end
|
@@ -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 = []
|
@@ -4,6 +4,12 @@ module ActiveRecord
|
|
4
4
|
module ConnectionAdapters
|
5
5
|
module PostgreSQL
|
6
6
|
module Quoting
|
7
|
+
class IntegerOutOf64BitRange < StandardError
|
8
|
+
def initialize(msg)
|
9
|
+
super(msg)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
7
13
|
# Escapes binary strings for bytea input to the database.
|
8
14
|
def escape_bytea(value)
|
9
15
|
@connection.escape_bytea(value) if value
|
@@ -120,7 +126,27 @@ module ActiveRecord
|
|
120
126
|
super(query_value("SELECT #{quote(sql_type)}::regtype::oid", "SCHEMA").to_i)
|
121
127
|
end
|
122
128
|
|
129
|
+
def check_int_in_range(value)
|
130
|
+
if value.to_int > 9223372036854775807 || value.to_int < -9223372036854775808
|
131
|
+
exception = <<~ERROR
|
132
|
+
Provided value outside of the range of a signed 64bit integer.
|
133
|
+
|
134
|
+
PostgreSQL will treat the column type in question as a numeric.
|
135
|
+
This may result in a slow sequential scan due to a comparison
|
136
|
+
being performed between an integer or bigint value and a numeric value.
|
137
|
+
|
138
|
+
To allow for this potentially unwanted behavior, set
|
139
|
+
ActiveRecord::Base.raise_int_wider_than_64bit to false.
|
140
|
+
ERROR
|
141
|
+
raise IntegerOutOf64BitRange.new exception
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
123
145
|
def _quote(value)
|
146
|
+
if ActiveRecord::Base.raise_int_wider_than_64bit && value.is_a?(Integer)
|
147
|
+
check_int_in_range(value)
|
148
|
+
end
|
149
|
+
|
124
150
|
case value
|
125
151
|
when OID::Xml::Data
|
126
152
|
"xml '#{quote_string(value.to_s)}'"
|
@@ -75,7 +75,7 @@ module ActiveRecord
|
|
75
75
|
|
76
76
|
class << self
|
77
77
|
def new_client(conn_params)
|
78
|
-
PG.connect(conn_params)
|
78
|
+
PG.connect(**conn_params)
|
79
79
|
rescue ::PG::Error => error
|
80
80
|
if conn_params && conn_params[:dbname] && error.message.include?(conn_params[:dbname])
|
81
81
|
raise ActiveRecord::NoDatabaseError
|
@@ -247,7 +247,7 @@ module ActiveRecord
|
|
247
247
|
def initialize(connection, logger, connection_parameters, config)
|
248
248
|
super(connection, logger, config)
|
249
249
|
|
250
|
-
@connection_parameters = connection_parameters
|
250
|
+
@connection_parameters = connection_parameters || {}
|
251
251
|
|
252
252
|
# @local_tz is initialized as nil to avoid warnings when connect tries to use it
|
253
253
|
@local_tz = nil
|
@@ -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
@@ -155,6 +155,21 @@ module ActiveRecord
|
|
155
155
|
|
156
156
|
mattr_accessor :legacy_connection_handling, instance_writer: false, default: true
|
157
157
|
|
158
|
+
# Application configurable boolean that instructs the YAML Coder to use
|
159
|
+
# an unsafe load if set to true.
|
160
|
+
mattr_accessor :use_yaml_unsafe_load, instance_writer: false, default: false
|
161
|
+
|
162
|
+
# Application configurable array that provides additional permitted classes
|
163
|
+
# to Psych safe_load in the YAML Coder
|
164
|
+
mattr_accessor :yaml_column_permitted_classes, instance_writer: false, default: [Symbol]
|
165
|
+
|
166
|
+
##
|
167
|
+
# :singleton-method:
|
168
|
+
# Application configurable boolean that denotes whether or not to raise
|
169
|
+
# an exception when the PostgreSQLAdapter is provided with an integer that is
|
170
|
+
# wider than signed 64bit representation
|
171
|
+
mattr_accessor :raise_int_wider_than_64bit, instance_writer: false, default: true
|
172
|
+
|
158
173
|
self.filter_attributes = []
|
159
174
|
|
160
175
|
def self.connection_handler
|
@@ -278,11 +293,11 @@ module ActiveRecord
|
|
278
293
|
end
|
279
294
|
|
280
295
|
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
|
296
|
+
ActiveSupport::Deprecation.warn("ActiveRecord::Base.allow_unsafe_raw_sql is deprecated and will be removed in Rails 7.0")
|
282
297
|
end
|
283
298
|
|
284
299
|
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
|
300
|
+
ActiveSupport::Deprecation.warn("ActiveRecord::Base.allow_unsafe_raw_sql= is deprecated and will be removed in Rails 7.0")
|
286
301
|
end
|
287
302
|
|
288
303
|
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)
|
@@ -24,9 +24,8 @@ module ActiveRecord
|
|
24
24
|
|
25
25
|
module TableDefinition
|
26
26
|
def references(*args, **options)
|
27
|
-
|
28
|
-
|
29
|
-
end
|
27
|
+
options[:_uses_legacy_reference_index_name] = true
|
28
|
+
super
|
30
29
|
end
|
31
30
|
alias :belongs_to :references
|
32
31
|
end
|
@@ -56,8 +55,12 @@ module ActiveRecord
|
|
56
55
|
end
|
57
56
|
|
58
57
|
def add_reference(table_name, ref_name, **options)
|
59
|
-
|
60
|
-
|
58
|
+
if connection.adapter_name == "SQLite"
|
59
|
+
options[:type] = :integer
|
60
|
+
end
|
61
|
+
|
62
|
+
options[:_uses_legacy_reference_index_name] = true
|
63
|
+
super
|
61
64
|
end
|
62
65
|
alias :add_belongs_to :add_reference
|
63
66
|
|
@@ -126,7 +129,7 @@ module ActiveRecord
|
|
126
129
|
class << t
|
127
130
|
prepend TableDefinition
|
128
131
|
end
|
129
|
-
|
132
|
+
super
|
130
133
|
end
|
131
134
|
|
132
135
|
def command_recorder
|
@@ -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
|
@@ -1035,6 +1035,8 @@ module ActiveRecord
|
|
1035
1035
|
# # SELECT "users"."name" FROM "users" /* selecting */ /* user */ /* names */
|
1036
1036
|
#
|
1037
1037
|
# The SQL block comment delimiters, "/*" and "*/", will be added automatically.
|
1038
|
+
#
|
1039
|
+
# Some escaping is performed, however untrusted user input should not be used.
|
1038
1040
|
def annotate(*args)
|
1039
1041
|
check_if_method_has_arguments!(:annotate, args)
|
1040
1042
|
spawn.annotate!(*args)
|
@@ -1157,8 +1159,8 @@ module ActiveRecord
|
|
1157
1159
|
annotates = annotates.uniq if annotates.size > 1
|
1158
1160
|
unless annotates == annotate_values
|
1159
1161
|
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
1160
|
-
Duplicated query annotations are no longer shown in queries in Rails
|
1161
|
-
To migrate to Rails
|
1162
|
+
Duplicated query annotations are no longer shown in queries in Rails 7.0.
|
1163
|
+
To migrate to Rails 7.0's behavior, use `uniq!(:annotate)` to deduplicate query annotations
|
1162
1164
|
(`#{klass.name&.tableize || klass.table_name}.uniq!(:annotate)`).
|
1163
1165
|
MSG
|
1164
1166
|
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
|
data/lib/active_record/store.rb
CHANGED
@@ -268,7 +268,7 @@ module ActiveRecord
|
|
268
268
|
end
|
269
269
|
|
270
270
|
def dump(obj)
|
271
|
-
@coder.dump
|
271
|
+
@coder.dump as_regular_hash(obj)
|
272
272
|
end
|
273
273
|
|
274
274
|
def load(yaml)
|
@@ -285,6 +285,11 @@ module ActiveRecord
|
|
285
285
|
ActiveSupport::HashWithIndifferentAccess.new
|
286
286
|
end
|
287
287
|
end
|
288
|
+
|
289
|
+
private
|
290
|
+
def as_regular_hash(obj)
|
291
|
+
obj.respond_to?(:to_hash) ? obj.to_hash : {}
|
292
|
+
end
|
288
293
|
end
|
289
294
|
end
|
290
295
|
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
|
@@ -134,7 +134,7 @@ module ActiveRecord
|
|
134
134
|
@connection_subscriber = ActiveSupport::Notifications.subscribe("!connection.active_record") do |_, _, _, _, payload|
|
135
135
|
spec_name = payload[:spec_name] if payload.key?(:spec_name)
|
136
136
|
shard = payload[:shard] if payload.key?(:shard)
|
137
|
-
setup_shared_connection_pool
|
137
|
+
setup_shared_connection_pool if ActiveRecord::Base.legacy_connection_handling
|
138
138
|
|
139
139
|
if spec_name
|
140
140
|
begin
|
@@ -143,10 +143,14 @@ module ActiveRecord
|
|
143
143
|
connection = nil
|
144
144
|
end
|
145
145
|
|
146
|
-
if connection
|
147
|
-
|
148
|
-
|
149
|
-
|
146
|
+
if connection
|
147
|
+
setup_shared_connection_pool unless ActiveRecord::Base.legacy_connection_handling
|
148
|
+
|
149
|
+
if !@fixture_connections.include?(connection)
|
150
|
+
connection.begin_transaction joinable: false, _lazy: false
|
151
|
+
connection.pool.lock_thread = true if lock_threads
|
152
|
+
@fixture_connections << connection
|
153
|
+
end
|
150
154
|
end
|
151
155
|
end
|
152
156
|
end
|
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.7.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-02-21 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.7.7
|
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.7.7
|
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.7.7
|
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.7.7
|
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,10 +390,11 @@ 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.7.7/activerecord/CHANGELOG.md
|
394
|
+
documentation_uri: https://api.rubyonrails.org/v6.1.7.7/
|
395
395
|
mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
|
396
|
-
source_code_uri: https://github.com/rails/rails/tree/v6.1.
|
396
|
+
source_code_uri: https://github.com/rails/rails/tree/v6.1.7.7/activerecord
|
397
|
+
rubygems_mfa_required: 'true'
|
397
398
|
post_install_message:
|
398
399
|
rdoc_options:
|
399
400
|
- "--main"
|
@@ -411,7 +412,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
411
412
|
- !ruby/object:Gem::Version
|
412
413
|
version: '0'
|
413
414
|
requirements: []
|
414
|
-
rubygems_version: 3.2.
|
415
|
+
rubygems_version: 3.2.22
|
415
416
|
signing_key:
|
416
417
|
specification_version: 4
|
417
418
|
summary: Object-relational mapper framework (part of Rails).
|