activerecord 6.1.4.2 → 6.1.7.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/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).
|