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.

Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +96 -12
  3. data/MIT-LICENSE +1 -1
  4. data/lib/active_record/associations/collection_association.rb +16 -8
  5. data/lib/active_record/associations/preloader/association.rb +1 -3
  6. data/lib/active_record/connection_adapters/abstract/connection_pool.rb +1 -1
  7. data/lib/active_record/connection_adapters/abstract/quoting.rb +3 -3
  8. data/lib/active_record/connection_adapters/mysql/database_statements.rb +2 -0
  9. data/lib/active_record/connection_adapters/mysql/schema_statements.rb +4 -1
  10. data/lib/active_record/connection_adapters/postgresql/database_statements.rb +2 -0
  11. data/lib/active_record/connection_adapters/schema_cache.rb +34 -10
  12. data/lib/active_record/connection_adapters/sqlite3/database_statements.rb +2 -0
  13. data/lib/active_record/connection_handling.rb +2 -2
  14. data/lib/active_record/core.rb +2 -2
  15. data/lib/active_record/database_configurations/connection_url_resolver.rb +1 -0
  16. data/lib/active_record/database_configurations/hash_config.rb +1 -1
  17. data/lib/active_record/database_configurations.rb +2 -1
  18. data/lib/active_record/gem_version.rb +2 -2
  19. data/lib/active_record/internal_metadata.rb +2 -0
  20. data/lib/active_record/legacy_yaml_adapter.rb +1 -1
  21. data/lib/active_record/migration/compatibility.rb +24 -2
  22. data/lib/active_record/model_schema.rb +1 -1
  23. data/lib/active_record/railties/databases.rake +8 -8
  24. data/lib/active_record/relation/calculations.rb +2 -2
  25. data/lib/active_record/relation/finder_methods.rb +1 -1
  26. data/lib/active_record/relation/query_methods.rb +2 -2
  27. data/lib/active_record/relation/where_clause.rb +2 -2
  28. data/lib/active_record/tasks/database_tasks.rb +1 -1
  29. data/lib/active_record.rb +1 -1
  30. metadata +14 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6f94e41ee3dad511c9bd2fd67fa6527edc7097afc47ed29c8dfcf35f85d30b93
4
- data.tar.gz: 60b172857703fad8ec944dc0c7015935caae5b3f794eccf9658693270883af6d
3
+ metadata.gz: 726b98d501c1bb19481f8961894653a362e7ee0bd9993c35ef25e9ad4d76ccf4
4
+ data.tar.gz: f479e8a86f16437cf977c04a0bb6f69783281176eeedb955348634114876b6c4
5
5
  SHA512:
6
- metadata.gz: 631129932dee2df2645c38ee17a8b6d5064b45ef0acb48d73cce6a2d66f8e233c5c351ef10ba398dcc712d7ec6570d15bf57a552fd66967c41e748b6c22782ea
7
- data.tar.gz: b79336dec7a85e5a52d2ad93e620081bd81e548b9730a1ffa2b543c4f67c6b7079410cac808c98a18271a3ac0fa510d8ce4df6b14b010da13bdcf370fef0e494
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 effecting more than
106
- Active Storage which is why I made this PR superceeding #41461. We need
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 ##41461 and the code suggestion from #41453
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 6.2 is released:
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 6.2.
783
- To migrate to Rails 6.2's behavior, use `relation.merge(other, rewhere: true)`.
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 6.2's behavior
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 6.2 (same behavior with IN clause, mergee side condition is consistently replaced)
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 6.2's behavior, use `uniq!(:group)` to deduplicate group fields.
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 6.2's behavior, use `uniq!(:annotate)` to deduplicate query annotations.
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 6.2.
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 6.2.
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
@@ -1,4 +1,4 @@
1
- Copyright (c) 2004-2020 David Heinemeier Hansson
1
+ Copyright (c) 2004-2022 David Heinemeier Hansson
2
2
 
3
3
  Arel originally copyright (c) 2007-2016 Nick Kallen, Bryan Helmkamp, Emilio Tagua, Aaron Patterson
4
4
 
@@ -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
- if replace || association_scope.distinct_value
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
- add_to_target(record, skip_callbacks: true, replace: true)
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, @target.index(record), skip_callbacks)
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, index, skip_callbacks)
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 ||= begin
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 6.2.0. Please use `ActiveRecord::Base`.")
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 6.2.
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 6.2.
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 6.2.
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)
@@ -26,6 +26,8 @@ module ActiveRecord
26
26
 
27
27
  def write_query?(sql) # :nodoc:
28
28
  !READ_QUERY.match?(sql)
29
+ rescue ArgumentError # Invalid encoding
30
+ !READ_QUERY.match?(sql.b)
29
31
  end
30
32
 
31
33
  def explain(arel, binds = [])
@@ -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 * FROM information_schema.tables "
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 = []
@@ -28,6 +28,8 @@ module ActiveRecord
28
28
 
29
29
  def write_query?(sql) # :nodoc:
30
30
  !READ_QUERY.match?(sql)
31
+ rescue ArgumentError # Invalid encoding
32
+ !READ_QUERY.match?(sql.b)
31
33
  end
32
34
 
33
35
  # Executes an SQL statement, returning a PG::Result object on success
@@ -198,16 +198,40 @@ module ActiveRecord
198
198
  @indexes = deep_deduplicate(@indexes)
199
199
  end
200
200
 
201
- def deep_deduplicate(value)
202
- case value
203
- when Hash
204
- value.transform_keys { |k| deep_deduplicate(k) }.transform_values { |v| deep_deduplicate(v) }
205
- when Array
206
- value.map { |i| deep_deduplicate(i) }
207
- when String, Deduplicable
208
- -value
209
- else
210
- value
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
 
@@ -11,6 +11,8 @@ module ActiveRecord
11
11
 
12
12
  def write_query?(sql) # :nodoc:
13
13
  !READ_QUERY.match?(sql)
14
+ rescue ArgumentError # Invalid encoding
15
+ !READ_QUERY.match?(sql.b)
14
16
  end
15
17
 
16
18
  def explain(arel, binds = [])
@@ -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 6.2.0 without replacement.
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 6.2.0 without replacement.")
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
@@ -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 6.2")
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 6.2")
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
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "uri"
3
4
  require "active_support/core_ext/enumerable"
4
5
 
5
6
  module ActiveRecord
@@ -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 6.2.0 in favor of DatabaseConfigurations#configuration_hash which returns a hash with symbol keys")
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 6.2")
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
@@ -9,8 +9,8 @@ module ActiveRecord
9
9
  module VERSION
10
10
  MAJOR = 6
11
11
  MINOR = 1
12
- TINY = 4
13
- PRE = "7"
12
+ TINY = 5
13
+ PRE = nil
14
14
 
15
15
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
16
16
  end
@@ -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 6.2.
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
- ReferenceDefinition.new(ref_name, **options)
60
- .add_to(connection.update_table_definition(table_name, self))
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 6.2
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 6.2.
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 6.2.
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 6.2.
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 6.2.
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 6.2.
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 6.2.
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 6.2.
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 6.2.
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 6.2.
325
- To migrate to Rails 6.2's behavior, use `uniq!(:group)` to deduplicate group fields
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 6.2.
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 6.2.
1161
- To migrate to Rails 6.2's behavior, use `uniq!(:annotate)` to deduplicate query annotations
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 6.2.
172
- To migrate to Rails 6.2's behavior, use `relation.merge(other, rewhere: true)`.
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 6.2.0, you may now pass an ActiveRecord::DatabaseConfigurations::DatabaseConfig as `configuration` instead.")
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-2020 David Heinemeier Hansson
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.7
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-08 00:00:00.000000000 Z
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.4.7
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.4.7
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.4.7
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.4.7
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.4.7/activerecord/CHANGELOG.md
394
- documentation_uri: https://api.rubyonrails.org/v6.1.4.7/
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.4.7/activerecord
397
- post_install_message:
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.1.6
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: []