activerecord 4.1.8 → 4.2.11.3

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 (186) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +1165 -1591
  3. data/README.rdoc +15 -10
  4. data/lib/active_record/aggregations.rb +15 -8
  5. data/lib/active_record/association_relation.rb +13 -0
  6. data/lib/active_record/associations/alias_tracker.rb +3 -12
  7. data/lib/active_record/associations/association.rb +16 -4
  8. data/lib/active_record/associations/association_scope.rb +84 -43
  9. data/lib/active_record/associations/belongs_to_association.rb +28 -10
  10. data/lib/active_record/associations/builder/association.rb +16 -5
  11. data/lib/active_record/associations/builder/belongs_to.rb +7 -29
  12. data/lib/active_record/associations/builder/collection_association.rb +5 -1
  13. data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +9 -14
  14. data/lib/active_record/associations/builder/has_many.rb +1 -1
  15. data/lib/active_record/associations/builder/has_one.rb +2 -2
  16. data/lib/active_record/associations/builder/singular_association.rb +8 -1
  17. data/lib/active_record/associations/collection_association.rb +87 -30
  18. data/lib/active_record/associations/collection_proxy.rb +33 -35
  19. data/lib/active_record/associations/foreign_association.rb +11 -0
  20. data/lib/active_record/associations/has_many_association.rb +83 -22
  21. data/lib/active_record/associations/has_many_through_association.rb +49 -26
  22. data/lib/active_record/associations/has_one_association.rb +1 -1
  23. data/lib/active_record/associations/join_dependency/join_association.rb +25 -15
  24. data/lib/active_record/associations/join_dependency/join_part.rb +0 -1
  25. data/lib/active_record/associations/join_dependency.rb +26 -12
  26. data/lib/active_record/associations/preloader/association.rb +14 -10
  27. data/lib/active_record/associations/preloader/through_association.rb +4 -3
  28. data/lib/active_record/associations/preloader.rb +37 -26
  29. data/lib/active_record/associations/singular_association.rb +17 -2
  30. data/lib/active_record/associations/through_association.rb +16 -12
  31. data/lib/active_record/associations.rb +158 -49
  32. data/lib/active_record/attribute.rb +163 -0
  33. data/lib/active_record/attribute_assignment.rb +20 -12
  34. data/lib/active_record/attribute_decorators.rb +66 -0
  35. data/lib/active_record/attribute_methods/before_type_cast.rb +7 -2
  36. data/lib/active_record/attribute_methods/dirty.rb +107 -43
  37. data/lib/active_record/attribute_methods/primary_key.rb +7 -8
  38. data/lib/active_record/attribute_methods/query.rb +1 -1
  39. data/lib/active_record/attribute_methods/read.rb +22 -59
  40. data/lib/active_record/attribute_methods/serialization.rb +16 -150
  41. data/lib/active_record/attribute_methods/time_zone_conversion.rb +38 -28
  42. data/lib/active_record/attribute_methods/write.rb +9 -24
  43. data/lib/active_record/attribute_methods.rb +57 -95
  44. data/lib/active_record/attribute_set/builder.rb +106 -0
  45. data/lib/active_record/attribute_set.rb +81 -0
  46. data/lib/active_record/attributes.rb +147 -0
  47. data/lib/active_record/autosave_association.rb +30 -12
  48. data/lib/active_record/base.rb +13 -24
  49. data/lib/active_record/callbacks.rb +6 -6
  50. data/lib/active_record/connection_adapters/abstract/connection_pool.rb +85 -53
  51. data/lib/active_record/connection_adapters/abstract/database_statements.rb +52 -50
  52. data/lib/active_record/connection_adapters/abstract/query_cache.rb +1 -1
  53. data/lib/active_record/connection_adapters/abstract/quoting.rb +60 -60
  54. data/lib/active_record/connection_adapters/abstract/savepoints.rb +1 -1
  55. data/lib/active_record/connection_adapters/abstract/schema_creation.rb +39 -4
  56. data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +139 -57
  57. data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +14 -34
  58. data/lib/active_record/connection_adapters/abstract/schema_statements.rb +271 -74
  59. data/lib/active_record/connection_adapters/abstract/transaction.rb +125 -118
  60. data/lib/active_record/connection_adapters/abstract_adapter.rb +177 -60
  61. data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +295 -141
  62. data/lib/active_record/connection_adapters/column.rb +29 -240
  63. data/lib/active_record/connection_adapters/connection_specification.rb +15 -24
  64. data/lib/active_record/connection_adapters/mysql2_adapter.rb +17 -33
  65. data/lib/active_record/connection_adapters/mysql_adapter.rb +68 -145
  66. data/lib/active_record/connection_adapters/postgresql/array_parser.rb +15 -27
  67. data/lib/active_record/connection_adapters/postgresql/column.rb +20 -0
  68. data/lib/active_record/connection_adapters/postgresql/database_statements.rb +40 -25
  69. data/lib/active_record/connection_adapters/postgresql/oid/array.rb +100 -0
  70. data/lib/active_record/connection_adapters/postgresql/oid/bit.rb +52 -0
  71. data/lib/active_record/connection_adapters/postgresql/oid/bit_varying.rb +13 -0
  72. data/lib/active_record/connection_adapters/postgresql/oid/bytea.rb +15 -0
  73. data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +46 -0
  74. data/lib/active_record/connection_adapters/postgresql/oid/date.rb +11 -0
  75. data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +36 -0
  76. data/lib/active_record/connection_adapters/postgresql/oid/decimal.rb +13 -0
  77. data/lib/active_record/connection_adapters/postgresql/oid/enum.rb +19 -0
  78. data/lib/active_record/connection_adapters/postgresql/oid/float.rb +21 -0
  79. data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +59 -0
  80. data/lib/active_record/connection_adapters/postgresql/oid/inet.rb +13 -0
  81. data/lib/active_record/connection_adapters/postgresql/oid/infinity.rb +13 -0
  82. data/lib/active_record/connection_adapters/postgresql/oid/integer.rb +11 -0
  83. data/lib/active_record/connection_adapters/postgresql/oid/json.rb +35 -0
  84. data/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +23 -0
  85. data/lib/active_record/connection_adapters/postgresql/oid/money.rb +43 -0
  86. data/lib/active_record/connection_adapters/postgresql/oid/point.rb +43 -0
  87. data/lib/active_record/connection_adapters/postgresql/oid/range.rb +79 -0
  88. data/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb +19 -0
  89. data/lib/active_record/connection_adapters/postgresql/oid/time.rb +11 -0
  90. data/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +109 -0
  91. data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +21 -0
  92. data/lib/active_record/connection_adapters/postgresql/oid/vector.rb +26 -0
  93. data/lib/active_record/connection_adapters/postgresql/oid/xml.rb +28 -0
  94. data/lib/active_record/connection_adapters/postgresql/oid.rb +29 -385
  95. data/lib/active_record/connection_adapters/postgresql/quoting.rb +46 -136
  96. data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +4 -4
  97. data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +152 -0
  98. data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +134 -43
  99. data/lib/active_record/connection_adapters/postgresql/utils.rb +77 -0
  100. data/lib/active_record/connection_adapters/postgresql_adapter.rb +224 -477
  101. data/lib/active_record/connection_adapters/schema_cache.rb +14 -28
  102. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +61 -75
  103. data/lib/active_record/connection_handling.rb +1 -1
  104. data/lib/active_record/core.rb +163 -40
  105. data/lib/active_record/counter_cache.rb +60 -6
  106. data/lib/active_record/enum.rb +10 -12
  107. data/lib/active_record/errors.rb +53 -30
  108. data/lib/active_record/explain.rb +1 -1
  109. data/lib/active_record/explain_subscriber.rb +1 -1
  110. data/lib/active_record/fixtures.rb +62 -74
  111. data/lib/active_record/gem_version.rb +4 -4
  112. data/lib/active_record/inheritance.rb +35 -10
  113. data/lib/active_record/integration.rb +4 -4
  114. data/lib/active_record/legacy_yaml_adapter.rb +30 -0
  115. data/lib/active_record/locking/optimistic.rb +46 -26
  116. data/lib/active_record/migration/command_recorder.rb +19 -2
  117. data/lib/active_record/migration/join_table.rb +1 -1
  118. data/lib/active_record/migration.rb +79 -47
  119. data/lib/active_record/model_schema.rb +52 -58
  120. data/lib/active_record/nested_attributes.rb +18 -8
  121. data/lib/active_record/no_touching.rb +1 -1
  122. data/lib/active_record/persistence.rb +48 -27
  123. data/lib/active_record/query_cache.rb +3 -3
  124. data/lib/active_record/querying.rb +10 -7
  125. data/lib/active_record/railtie.rb +19 -14
  126. data/lib/active_record/railties/databases.rake +55 -56
  127. data/lib/active_record/readonly_attributes.rb +0 -1
  128. data/lib/active_record/reflection.rb +281 -117
  129. data/lib/active_record/relation/batches.rb +0 -1
  130. data/lib/active_record/relation/calculations.rb +41 -37
  131. data/lib/active_record/relation/delegation.rb +1 -1
  132. data/lib/active_record/relation/finder_methods.rb +71 -48
  133. data/lib/active_record/relation/merger.rb +39 -29
  134. data/lib/active_record/relation/predicate_builder/array_handler.rb +32 -13
  135. data/lib/active_record/relation/predicate_builder/relation_handler.rb +1 -1
  136. data/lib/active_record/relation/predicate_builder.rb +42 -12
  137. data/lib/active_record/relation/query_methods.rb +130 -73
  138. data/lib/active_record/relation/spawn_methods.rb +10 -3
  139. data/lib/active_record/relation.rb +57 -25
  140. data/lib/active_record/result.rb +18 -7
  141. data/lib/active_record/sanitization.rb +12 -2
  142. data/lib/active_record/schema.rb +0 -1
  143. data/lib/active_record/schema_dumper.rb +59 -28
  144. data/lib/active_record/schema_migration.rb +5 -4
  145. data/lib/active_record/scoping/default.rb +6 -4
  146. data/lib/active_record/scoping/named.rb +4 -0
  147. data/lib/active_record/serializers/xml_serializer.rb +3 -7
  148. data/lib/active_record/statement_cache.rb +95 -10
  149. data/lib/active_record/store.rb +5 -5
  150. data/lib/active_record/tasks/database_tasks.rb +61 -8
  151. data/lib/active_record/tasks/mysql_database_tasks.rb +32 -17
  152. data/lib/active_record/tasks/postgresql_database_tasks.rb +20 -9
  153. data/lib/active_record/timestamp.rb +9 -7
  154. data/lib/active_record/transactions.rb +54 -28
  155. data/lib/active_record/type/big_integer.rb +13 -0
  156. data/lib/active_record/type/binary.rb +50 -0
  157. data/lib/active_record/type/boolean.rb +31 -0
  158. data/lib/active_record/type/date.rb +50 -0
  159. data/lib/active_record/type/date_time.rb +54 -0
  160. data/lib/active_record/type/decimal.rb +64 -0
  161. data/lib/active_record/type/decimal_without_scale.rb +11 -0
  162. data/lib/active_record/type/decorator.rb +14 -0
  163. data/lib/active_record/type/float.rb +19 -0
  164. data/lib/active_record/type/hash_lookup_type_map.rb +23 -0
  165. data/lib/active_record/type/integer.rb +59 -0
  166. data/lib/active_record/type/mutable.rb +16 -0
  167. data/lib/active_record/type/numeric.rb +36 -0
  168. data/lib/active_record/type/serialized.rb +62 -0
  169. data/lib/active_record/type/string.rb +40 -0
  170. data/lib/active_record/type/text.rb +11 -0
  171. data/lib/active_record/type/time.rb +26 -0
  172. data/lib/active_record/type/time_value.rb +38 -0
  173. data/lib/active_record/type/type_map.rb +64 -0
  174. data/lib/active_record/type/unsigned_integer.rb +15 -0
  175. data/lib/active_record/type/value.rb +110 -0
  176. data/lib/active_record/type.rb +23 -0
  177. data/lib/active_record/validations/associated.rb +5 -3
  178. data/lib/active_record/validations/presence.rb +5 -3
  179. data/lib/active_record/validations/uniqueness.rb +24 -20
  180. data/lib/active_record/validations.rb +25 -19
  181. data/lib/active_record.rb +5 -0
  182. data/lib/rails/generators/active_record/migration/migration_generator.rb +8 -4
  183. data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb +1 -1
  184. data/lib/rails/generators/active_record/model/templates/model.rb +1 -1
  185. metadata +66 -11
  186. data/lib/active_record/connection_adapters/postgresql/cast.rb +0 -168
data/CHANGELOG.md CHANGED
@@ -1,2469 +1,2043 @@
1
- * Do not use `RENAME INDEX` syntax for MariaDB 10.0.
2
-
3
- Fixes #15931.
4
-
5
- *Jeff Browning*
6
-
7
- * Allow included modules to override association methods.
1
+ ## Rails 4.2.11.3 (May 15, 2020) ##
8
2
 
9
- Fixes #16684.
10
-
11
- *Yves Senn*
12
-
13
- * Schema loading rake tasks (like `db:schema:load` and `db:setup`) maintain
14
- the database connection to the current environment.
3
+ * No changes.
15
4
 
16
- Fixes #16757.
17
5
 
18
- *Joshua Cody*, *Yves Senn*
6
+ ## Rails 4.2.11.2 (May 15, 2020) ##
19
7
 
20
- * `db:purge` with MySQL respects `Rails.env`.
8
+ * No changes.
21
9
 
22
- *Yves Senn*
23
10
 
24
- * Fixed automatic maintaining test schema to properly handle sql structure
25
- schema format.
11
+ ## Rails 4.2.11.1 (March 11, 2019) ##
26
12
 
27
- Fixes #15394.
13
+ * No changes.
28
14
 
29
- *Wojciech Wnętrzak*
30
15
 
31
- * Fix has_many :through relation merging failing when dynamic conditions are
32
- passed as a lambda with an arity of one.
16
+ ## Rails 4.2.11 (November 27, 2018) ##
33
17
 
34
- Fixes #16128.
18
+ * No changes.
35
19
 
36
- *Agis Anastasopoulos*
37
20
 
21
+ ## Rails 4.2.10 (September 27, 2017) ##
38
22
 
39
- ## Rails 4.1.6 (September 11, 2014) ##
23
+ * `Relation#joins` is no longer affected by the target model's
24
+ `current_scope`, with the exception of `unscoped`.
40
25
 
41
- * Fixed a regression where whitespaces were stripped from DISTINCT queries in
42
- PostgreSQL.
26
+ Fixes #29338.
43
27
 
44
- *Agis Anastasopoulos*
28
+ *Sean Griffin*
45
29
 
46
- Fixes #16623.
30
+ ## Rails 4.2.9 (June 26, 2017) ##
47
31
 
48
- * Fixed an issue where custom accessor methods (such as those generated by
49
- `enum`) with the same name as a global method are incorrectly overridden
50
- when subclassing.
32
+ * Fix regression caused by `collection_singular_ids=` ignoring different primary key on relationship.
51
33
 
52
- Fixes #16288.
34
+ *Nick Pezza*
53
35
 
54
- * Baseclass becomes! subclass.
36
+ * Fix `rake db:schema:load` with subdirectories.
55
37
 
56
- Before this change, a record which changed its STI type, could not be found when updated.
57
- Setting update_record to the base class, ensures the record can be found.
38
+ *Ryuta Kamizono*
58
39
 
59
- Fixes #14785.
40
+ * Fix `rake db:migrate:status` with subdirectories.
60
41
 
61
- *Matthew Draper*, *Earl St Sauver*, *Edo Balvers*
42
+ *Ryuta Kamizono*
62
43
 
63
- * Fix regression on after_commit that didnt fire when having nested transactions.
44
+ * Fix regression of #1969 with SELECT aliases in HAVING clause.
64
45
 
65
- Fixes #16425.
46
+ *Eugene Kenny*
66
47
 
67
- *arthurnn*
48
+ * Fix `wait_timeout` to configurable for mysql2 adapter.
68
49
 
69
- * Define `id_was` to get the previous value of the primary key.
50
+ Fixes #26556.
70
51
 
71
- Currently when we call id_was and we have a custom primary key name
72
- Active Record will return the current value of the primary key. This
73
- make impossible to correctly do an update operation if you change the
74
- id.
52
+ *Ryuta Kamizono*
75
53
 
76
- Fixes #16413.
54
+ * Make `table_name=` reset current statement cache,
55
+ so queries are not run against the previous table name.
77
56
 
78
- *Rafael Mendonça França*
57
+ *namusyaka*
79
58
 
80
- * Fix the schema dump generated for tables without constraints and with
81
- primary key with default value of custom PostgreSQL function result.
82
59
 
83
- Fixes #16111.
60
+ ## Rails 4.2.8 (February 21, 2017) ##
84
61
 
85
- *Andrey Novikov*
62
+ * Using a mysql2 connection after it fails to reconnect will now have an error message
63
+ saying the connection is closed rather than an undefined method error message.
86
64
 
87
- * Restore 4.0 behavior for using serialize attributes with `JSON` as coder.
88
-
89
- With 4.1.x, `serialize` started returning a string when `JSON` was passed as
90
- the second attribute. It will now return a hash as per previous versions.
91
-
92
- Example:
93
-
94
- class Post < ActiveRecord::Base
95
- serialize :comment, JSON
96
- end
97
-
98
- class Comment
99
- include ActiveModel::Model
100
- attr_accessor :category, :text
101
- end
102
-
103
- post = Post.create!
104
- post.comment = Comment.new(category: "Animals", text: "This is a comment about squirrels.")
105
- post.save!
106
-
107
- # 4.0
108
- post.comment # => {"category"=>"Animals", "text"=>"This is a comment about squirrels."}
109
-
110
- # 4.1 before
111
- post.comment # => "#<Comment:0x007f80ab48ff98>"
112
-
113
- # 4.1 after
114
- post.comment # => {"category"=>"Animals", "text"=>"This is a comment about squirrels."}
65
+ *Dylan Thacker-Smith*
115
66
 
116
- When using `JSON` as the coder in `serialize`, Active Record will use the
117
- new `ActiveRecord::Coders::JSON` coder which delegates its `dump/load` to
118
- `ActiveSupport::JSON.encode/decode`. This ensures special objects are dumped
119
- correctly using the `#as_json` hook.
67
+ * Bust Model.attribute_names cache when resetting column information
120
68
 
121
- To keep the previous behaviour, supply a custom coder instead
122
- ([example](https://gist.github.com/jenncoop/8c4142bbe59da77daa63)).
69
+ *James Coleman*
123
70
 
124
- Fixes #15594.
71
+ * Fix query caching when type information is reset
125
72
 
126
- *Jenn Cooper*
73
+ Backports ancillary fix in 5.0.
127
74
 
128
- * Fixed error in `reset_counters` when associations have `select` scope.
129
- (Call to `count` generates invalid SQL.)
75
+ *James Coleman*
130
76
 
131
- *Cade Truitt*
77
+ * Allow `joins` to be unscoped.
132
78
 
133
- * After a successful `reload`, `new_record?` is always false.
79
+ Fixes #13775.
134
80
 
135
- Fixes #12101.
81
+ *Takashi Kokubun*
136
82
 
137
- *Matthew Draper*
83
+ * Hashes can once again be passed to setters of `composed_of`, if all of the
84
+ mapping methods are methods implemented on `Hash`.
138
85
 
139
- * Correctly extract IPv6 addresses from `DATABASE_URI`: the square brackets
140
- are part of the URI structure, not the actual host.
86
+ Fixes #25978.
141
87
 
142
- Fixes #15705.
88
+ *Sean Griffin*
143
89
 
144
- *Andy Bakun*, *Aaron Stone*
145
90
 
146
- * Don't error when quoting user defined types in PostgreSQL.
91
+ ## Rails 4.2.7 (July 12, 2016) ##
147
92
 
148
- Fixes #15697.
93
+ * Inspecting an object with an associated array of over 10 elements no longer
94
+ truncates the array, preventing `inspect` from looping infinitely in some
95
+ cases.
149
96
 
150
- *Sean Griffin*
97
+ *Kevin McPhillips*
151
98
 
152
- * Ensure both parent IDs are set on join records when both sides of a
153
- through association are new.
99
+ * Ensure hashes can be assigned to attributes created using `composed_of`.
100
+ Fixes #25210.
154
101
 
155
102
  *Sean Griffin*
156
103
 
157
- * Pluck now works when selecting columns from different tables with the same
158
- name.
104
+ * Queries such as `Computer.joins(:monitor).group(:status).count` will now be
105
+ interpreted as `Computer.joins(:monitor).group('computers.status').count`
106
+ so that when `Computer` and `Monitor` have both `status` columns we don't
107
+ have conflicts in projection.
159
108
 
160
- Fixes #15649.
109
+ *Rafael Sales*
161
110
 
162
- *Sean Griffin*
111
+ * ActiveRecord::Relation#count: raise an ArgumentError when finder options
112
+ are specified or an ActiveRecord::StatementInvalid when an invalid type
113
+ is provided for a column name (e.g. a Hash).
163
114
 
164
- * `ActiveRecord::FinderMethods.find` with block can handle proc parameter as
165
- `Enumerable#find` does.
115
+ Fixes #20434
166
116
 
167
- Fixes #15382.
117
+ *Konstantinos Rousis*
168
118
 
169
- *James Yang*
119
+ * Correctly pass MySQL options when using structure_dump or structure_load
170
120
 
171
- * `ActiveRecord::SchemaMigration` has no primary key regardless of the
172
- `primary_key_prefix_type` configuration.
121
+ Specifically, it fixes an issue when using SSL authentication.
173
122
 
174
- Fixes #15051.
123
+ *Alex Coomans*
175
124
 
176
- *JoseLuis Torres*, *Yves Senn*
177
125
 
178
- * `rake db:migrate:status` works with legacy migration numbers like `00018_xyz.rb`.
126
+ ## Rails 4.2.6 (March 07, 2016) ##
179
127
 
180
- Fixes #15538.
128
+ * Fix a bug where using `t.foreign_key` twice with the same `to_table` within
129
+ the same table definition would only create one foreign key.
181
130
 
182
- *Yves Senn*
131
+ *George Millo*
183
132
 
184
- * Fixed `columns_for_distinct` of postgresql adapter to work correctly
185
- with orders without sort direction modifiers.
133
+ * Fix regression in dirty attribute tracking after #dup. Changes to the
134
+ clone no longer show as changed attributes in the original object.
186
135
 
187
- *Nikolay Kondratyev*
136
+ *Dominic Cleal*
188
137
 
189
- * Keep PostgreSQL `hstore` and `json` attributes as `Hash` in `@attributes`.
190
- Fixes duplication in combination with `store_accessor`.
138
+ * Fix regression when loading fixture files with symbol keys.
191
139
 
192
- Fixes #15369.
140
+ Closes #22584.
193
141
 
194
142
  *Yves Senn*
195
143
 
196
- * `rake railties:install:migrations` respects the order of railties.
197
-
198
- *Arun Agrawal*
199
-
200
-
201
- ## Rails 4.1.5 (August 18, 2014) ##
144
+ * Fix `rake db:structure:dump` on Postgres when multiple schemas are used.
202
145
 
203
- * No changes.
204
-
205
-
206
- ## Rails 4.1.4 (July 2, 2014) ##
207
-
208
- * Fix regression added from the latest security fix.
146
+ Fixes #22346.
209
147
 
210
- *Sean Griffin*, *Matthew Draper*
148
+ *Nick Muerdter*, *ckoenig*
211
149
 
150
+ * Introduce `connection.data_sources` and `connection.data_source_exists?`.
151
+ These methods determine what relations can be used to back Active Record
152
+ models (usually tables and views).
212
153
 
213
- ## Rails 4.1.3 (July 2, 2014) ##
154
+ *Yves Senn*, *Matthew Draper*
214
155
 
215
- * Fix SQL Injection Vulnerability in 'range' quoting.
216
-
217
- Fixes CVE-2014-3483
218
-
219
- *Rafael Mendonça França*
220
156
 
157
+ ## Rails 4.2.5.2 (February 26, 2016) ##
221
158
 
222
- ## Rails 4.1.2 (June 26, 2014) ##
223
-
224
- * Fix regression on eager loading association based on SQL query rather than
225
- existing column.
226
-
227
- Fixes #15480.
228
-
229
- *Lauro Caetano*, *Carlos Antonio da Silva*
230
-
231
- * Fix redefine a has_and_belongs_to_many inside inherited class
232
- Fixing regression case, where redefining the same has_an_belongs_to_many
233
- definition into a subclass would raise.
234
-
235
- Fixes #14983.
236
-
237
- *arthurnn*
238
-
239
- * Fix has_and_belongs_to_many public reflection.
240
- When defining a has_and_belongs_to_many, internally we convert that to two has_many.
241
- But as `reflections` is a public API, people expect to see the right macro.
242
-
243
- Fixes #14682.
244
-
245
- *arthurnn*
159
+ * No changes.
246
160
 
247
- * Fixed serialization for records with an attribute named `format`.
248
161
 
249
- Fixes #15188.
162
+ ## Rails 4.2.5.1 (January 25, 2015) ##
250
163
 
251
- *Godfrey Chan*
164
+ * No changes.
252
165
 
253
- * Fixed serialized fields returning serialized data after being updated with
254
- `update_column`.
255
166
 
256
- *Simon Hørup Eskildsen*
167
+ ## Rails 4.2.5 (November 12, 2015) ##
257
168
 
258
- * When a `group` is set, `sum`, `size`, `average`, `minimum` and `maximum`
259
- on a NullRelation should return a Hash.
169
+ * No longer pass deprecated option `-i` to `pg_dump`.
260
170
 
261
- *Kuldeep Aggarwal*
171
+ *Paul Sadauskas*
262
172
 
263
- * Fixed polymorphic eager loading when using a String as foreign key.
173
+ * Set `scope.reordering_value` to `true` if :reordering values are specified.
264
174
 
265
- Fixes #14734.
175
+ Fixes #21886.
266
176
 
267
- *Lauro Caetano*
177
+ *Hiroaki Izu*
268
178
 
269
- * Fixed the inferred table name of a has_and_belongs_to_many auxiliar
270
- table inside a schema.
179
+ * Avoid disabling errors on the PostgreSQL connection when enabling the
180
+ standard_conforming_strings setting. Errors were previously disabled because
181
+ the setting wasn't writable in Postgres 8.1 and didn't exist in earlier
182
+ versions. Now Rails only supports Postgres 8.2+ we're fine to assume the
183
+ setting exists. Disabling errors caused problems when using a connection
184
+ pooling tool like PgBouncer because it's not guaranteed to have the same
185
+ connection between calls to `execute` and it could leave the connection
186
+ with errors disabled.
271
187
 
272
- Fixes #14824
188
+ Fixes #22101.
273
189
 
274
- *Eric Chahin*
275
-
276
- * Fix bug that added `table_name_prefix` and `table_name_suffix` to
277
- extension names in PostgreSQL when migrating.
278
-
279
- *Joao Carlos*
190
+ *Harry Marr*
280
191
 
281
- * Floats with limit >= 25 that get turned into doubles in MySQL no longer have
282
- their limit dropped from the schema.
283
-
284
- Fixes #14135.
192
+ * Includes HABTM returns correct size now. It's caused by the join dependency
193
+ only instantiates one HABTM object because the join table hasn't a primary key.
285
194
 
286
- *Aaron Nelson*
195
+ Fixes #16032.
287
196
 
288
- * Fix how to calculate associated class name when using namespaced has_and_belongs_to_many
289
- association.
290
-
291
- Fixes #14709.
292
-
293
- *Kassio Borges*
294
-
295
- * `ActiveRecord::Relation::Merger#filter_binds` now compares equivalent symbols and
296
- strings in column names as equal.
197
+ Examples:
297
198
 
298
- This fixes a rare case in which more bind values are passed than there are
299
- placeholders for them in the generated SQL statement, which can make PostgreSQL
300
- throw a `StatementInvalid` exception.
199
+ before:
301
200
 
302
- *Nat Budin*
201
+ Project.first.salaried_developers.size # => 3
202
+ Project.includes(:salaried_developers).first.salaried_developers.size # => 1
303
203
 
304
- * Fix `stored_attributes` to correctly merge the details of stored
305
- attributes defined in parent classes.
204
+ after:
306
205
 
307
- Fixes #14672.
206
+ Project.first.salaried_developers.size # => 3
207
+ Project.includes(:salaried_developers).first.salaried_developers.size # => 3
308
208
 
309
- *Brad Bennett*, *Jessica Yao*, *Lakshmi Parthasarathy*
209
+ *Bigxiang*
310
210
 
311
- * `change_column_default` allows `[]` as argument to `change_column_default`.
211
+ * Descriptive error message when fixtures contain a missing column.
312
212
 
313
- Fixes #11586.
213
+ Closes #21201.
314
214
 
315
215
  *Yves Senn*
316
216
 
317
- * Fix `PostgreSQLAdapter::OID::Float#type_cast` to convert Infinity and
318
- NaN PostgreSQL values into a native Ruby `Float::INFINITY` and `Float::NAN`
319
-
320
- Example:
321
-
322
- # Before
323
- Point.create(value: 1.0/0)
324
- Point.last.value # => 0.0
325
-
326
- # After
327
- Point.create(value: 1.0/0)
328
- Point.last.value # => Infinity
329
-
330
- *Innokenty Mikhailov*
331
-
332
- * Allow the PostgreSQL adapter to handle bigserial primary key types again.
333
-
334
- Fixes #10410.
335
-
336
- *Patrick Robertson*
337
-
338
- * Fixed has_and_belongs_to_many's CollectionAssociation size calculation.
339
-
340
- has_and_belongs_to_many should fall back to using the normal CollectionAssociation's
341
- size calculation if the collection is not cached or loaded.
342
-
343
- Fixes #14913 and #14914.
344
-
345
- *Fred Wu*
346
-
347
- * Revert the behaviour of `ActiveRecord::Relation#join` changed through 4.0 => 4.1 to 4.0.
348
-
349
- In 4.1.0 `Relation#join` is delegated to `Arel#SelectManager`.
350
- In 4.0 series it is delegated to `Array#join`.
351
-
352
- *Bogdan Gusiev*
353
-
354
- * Log nil binary column values correctly.
355
-
356
- When an object with a binary column is updated with a nil value
357
- in that column, the SQL logger would throw an exception when trying
358
- to log that nil value. This only occurs when updating a record
359
- that already has a non-nil value in that column since an initial nil
360
- value isn't included in the SQL anyway (at least, when dirty checking
361
- is enabled.) The column's new value will now be logged as `<NULL binary data>`
362
- to parallel the existing `<N bytes of binary data>` for non-nil values.
363
-
364
- *James Coleman*
365
-
366
- * Stringify all variables keys of MySQL connection configuration.
367
-
368
- When `sql_mode` variable for MySQL adapters set in configuration as `String`
369
- was ignored and overwritten by strict mode option.
370
-
371
- Fixes #14895.
372
-
373
- *Paul Nikitochkin*
374
-
375
- * Ensure SQLite3 statements are closed on errors.
376
-
377
- Fixes #13631.
378
-
379
- *Timur Alperovich*
380
-
381
- * Fix excluding lower bounds of PostgreSQL date and int ranges.
382
-
383
- *River MacLeod*, *Yves Senn*
384
-
385
- * When using a custom `join_table` name on a `habtm`, rails was not saving it
386
- on Reflections. This causes a problem when rails loads fixtures, because it
387
- uses the reflections to set database with fixtures.
388
-
389
- Fixes #14845.
390
-
391
- *Kassio Borges*
392
-
393
- * `ActiveRecord::Base.no_touching` no longer triggers callbacks or start empty transactions.
394
-
395
- Fixes #14841.
396
-
397
- *Lucas Mazza*
398
-
399
- * Fix name collision with `Array#select!` with `Relation#select!`.
400
-
401
- Fixes #14752.
402
-
403
- *Earl St Sauver*
404
-
405
- * Fixed unexpected behavior for `has_many :through` associations going through a scoped `has_many`.
406
-
407
- If a `has_many` association is adjusted using a scope, and another `has_many :through`
408
- uses this association, then the scope adjustment is unexpectedly neglected.
409
-
410
- Fixes #14537.
411
-
412
- *Jan Habermann*
413
-
414
- * When a destroyed record is duped, the dup is not `destroyed?`.
415
-
416
- *Kuldeep Aggarwal*
417
-
418
- * Fixed has_many association to make it support irregular inflections.
419
-
420
- Fixes #8928.
421
-
422
- *arthurnn*, *Javier Goizueta*
423
-
424
- * Calling `delete_all` on an unloaded `CollectionProxy` no longer
425
- generates a SQL statement containing each id of the collection:
426
-
427
- Before:
428
-
429
- DELETE FROM `model` WHERE `model`.`parent_id` = 1
430
- AND `model`.`id` IN (1, 2, 3...)
431
-
432
- After:
433
-
434
- DELETE FROM `model` WHERE `model`.`parent_id` = 1
435
-
436
- *Eileen M. Uchitelle*, *Aaron Patterson*
437
-
438
- * Fixed a problem where count used with a grouping was not returning a Hash.
439
-
440
- Fixes #14721.
441
-
442
- *Eric Chahin*
443
-
444
- * Do not quote uuid default value on `change_column`.
445
-
446
- Fixes #14604.
447
-
448
- *Eric Chahin*
449
-
450
- * The comparison between `Relation` and `CollectionProxy` should be consistent.
451
-
452
- Example:
453
-
454
- author.posts == Post.where(author_id: author.id)
455
- # => true
456
- Post.where(author_id: author.id) == author.posts
457
- # => true
458
-
459
- Fixes #13506.
460
-
461
- *Lauro Caetano*
217
+ * `bin/rake db:migrate` uses
218
+ `ActiveRecord::Tasks::DatabaseTasks.migrations_paths` instead of
219
+ `Migrator.migrations_paths`.
462
220
 
463
- * PostgreSQL adapter only warns once for every missing OID per connection.
221
+ *Tobias Bielohlawek*
464
222
 
465
- Fixes #14275.
223
+ * Fix `rewhere` in a `has_many` association.
466
224
 
467
- *Matthew Draper*, *Yves Senn*
225
+ Fixes #21955.
468
226
 
469
- * Fixed error for aggregate methods (`empty?`, `any?`, `count`) with `select`
470
- which created invalid SQL.
227
+ *Josh Branchaud*, *Kal*
471
228
 
472
- Fixes #13648.
229
+ * Added run_cmd class method to ActiveRecord::Tasks::DatabaseTasks for
230
+ drying up Kernel.system() calls within this namespace and to avoid
231
+ shell expansion by using a paramter list instead of string as arguments
232
+ for Kernel.system(). Thanks to Nate Berkopec for supply patch to get
233
+ test units passing.
473
234
 
474
- *Simon Woker*
235
+ *Bryan Paxton*
475
236
 
476
- * Fix insertion of records via `has_many :through` association with scope.
237
+ * Avoid leaking the first relation we call `first` on, per model.
477
238
 
478
- Fixes #3548.
479
-
480
- *Ivan Antropov*
239
+ Fixes #21921.
481
240
 
482
- * Make possible to have an association called `records`.
241
+ *Matthew Draper*, *Jean Boussier*
483
242
 
484
- Fixes #11645.
243
+ * Allow deserialization of Active Record models that were YAML encoded prior
244
+ to Rails 4.2
485
245
 
486
- *prathamesh-sonpatki*
487
-
488
- * `to_sql` on an association now matches the query that is actually executed, where it
489
- could previously have incorrectly accrued additional conditions (e.g. as a result of
490
- a previous query). CollectionProxy now always defers to the association scope's
491
- `arel` method so the (incorrect) inherited one should be entirely concealed.
246
+ *Sean Griffin*
492
247
 
493
- Fixes #14003.
248
+ * Correctly apply `unscope` when preloading through associations.
494
249
 
495
- *Jefferson Lai*
250
+ *Jimmy Bourassa*
496
251
 
497
- * Fixed error when using `with_options` with lambda.
252
+ * Ensure `select` quotes aliased attributes, even when using `from`.
498
253
 
499
- Fixes #9805.
254
+ Fixes #21488
500
255
 
501
- *Lauro Caetano*
256
+ *Sean Griffin & @johanlunds*
502
257
 
503
- * Fixed error when specifying a non-empty default value on a PostgreSQL array column.
258
+ * Correct query for PostgreSQL 8.2 compatibility.
504
259
 
505
- Fixes #10613.
260
+ *Ben Murphy*, *Matthew Draper*
506
261
 
507
- *Luke Steensen*
262
+ * Uniqueness validator raises descriptive error when running on a persisted
263
+ record without primary key.
508
264
 
509
- * Fixed error where .persisted? throws SystemStackError for an unsaved model with a
510
- custom primary key that didn't save due to validation error.
511
-
512
- Fixes #14393.
513
-
514
- *Chris Finne*
515
-
516
- * `rake db:structure:dump` only dumps schema information if the schema
517
- migration table exists.
518
-
519
- Fixes #14217.
265
+ Closes #21304.
520
266
 
521
267
  *Yves Senn*
522
268
 
523
- * Add support for `Relation` be passed as parameter on `QueryCache#select_all`.
524
-
525
- Fixes #14361.
526
269
 
527
- *arthurnn*
270
+ ## Rails 4.2.4 (August 24, 2015) ##
528
271
 
529
- * Only save `has_one` associations if record has changes. Previously after save
530
- related callbacks, such as `#after_commit`, were triggered when the
531
- `has_one` object did not get saved to the db.
272
+ * Skip statement cache on through association reader.
532
273
 
533
- *Alan Kennedy*
274
+ If the through class has default scopes we should skip the statement
275
+ cache.
534
276
 
277
+ Closes #20745.
535
278
 
536
- ## Rails 4.1.1 (May 6, 2014) ##
537
-
538
- * No changes.
539
-
540
-
541
- ## Rails 4.1.0 (April 8, 2014) ##
279
+ *Rafael Mendonça França*
542
280
 
543
- * Fixed a problem where an enum would overwrite values of another enum
544
- with the same name in an unrelated class.
281
+ * Fixes #19420. When generating schema.rb using Postgres BigInt[] data type
282
+ the limit: 8 was not coming through. This caused it to become Int[] data type
283
+ after doing a rebuild off of schema.rb.
545
284
 
546
- Fixes #14607.
285
+ *Jake Waller*
547
286
 
548
- *Evan Whalen*
287
+ * Fix state being carried over from previous transaction.
549
288
 
289
+ Considering the following example where `name` is a required attribute.
290
+ Before we had `new_record?` returning `true` for a persisted record:
550
291
 
551
- * Block a few default Class methods as scope name.
292
+ author = Author.create! name: 'foo'
293
+ author.name = nil
294
+ author.save # => false
295
+ author.new_record? # => true
552
296
 
553
- For instance, this will raise:
297
+ Fixes #20824.
554
298
 
555
- scope :public, -> { where(status: 1) }
299
+ *Roque Pinel*
556
300
 
557
- *arthurnn*
301
+ * Correctly ignore `mark_for_destruction` when `autosave` isn't set to `true`
302
+ when validating associations.
558
303
 
559
- * Deprecate SQLite database URLs containing an
560
- authority.
304
+ Fixes #20882.
561
305
 
562
- The current "correct" spellings for in-memory, relative, and
563
- absolute URLs, respectively, are:
306
+ *Sean Griffin*
564
307
 
565
- sqlite3::memory:
566
- sqlite3:relative/path
567
- sqlite3:/full/path
308
+ * Fix through associations using scopes having the scope merged multiple
309
+ times.
568
310
 
569
- The previous spelling (`sqlite3:///relative/path`) continues to work
570
- as it did in Rails 4.0, but with a deprecation warning: in the next
571
- release, that spelling will instead be interpreted as an absolute
572
- path.
311
+ Fixes #20721.
312
+ Fixes #20727.
573
313
 
574
- *Matthew Draper*
314
+ *Sean Griffin*
575
315
 
576
- * `where.not` adds `references` for `includes` like normal `where` calls do.
316
+ * `ActiveRecord::Base.dump_schema_after_migration` applies migration tasks
317
+ other than `db:migrate`. (eg. `db:rollback`, `db:migrate:dup`, ...)
577
318
 
578
- Fixes #14406.
319
+ Fixes #20743.
579
320
 
580
321
  *Yves Senn*
581
322
 
582
- * `includes` is able to detect the right preloading strategy when string
583
- joins are involved.
584
-
585
- Fixes #14109.
586
-
587
- *Aaron Patterson*, *Yves Senn*
588
-
589
- * Fixed error with validation with enum fields for records where the
590
- value for any enum attribute is always evaluated as 0 during
591
- uniqueness validation.
592
-
593
- Fixes #14172.
594
-
595
- *Vilius Luneckas* *Ahmed AbouElhamayed*
323
+ * Correctly raise `ActiveRecord::AssociationTypeMismatch` when assigning
324
+ a wrong type to a namespaced association.
596
325
 
597
- * `before_add` callbacks are fired before the record is saved on
598
- `has_and_belongs_to_many` assocations *and* on `has_many :through`
599
- associations. Before this change, `before_add` callbacks would be fired
600
- before the record was saved on `has_and_belongs_to_many` associations, but
601
- *not* on `has_many :through` associations.
326
+ Fixes #20545.
602
327
 
603
- Fixes #14144.
328
+ *Diego Carrion*
604
329
 
605
- * Fixed STI classes not defining an attribute method if there is a
606
- conflicting private method defined on its ancestors.
330
+ * Prevent error when using `force_reload: true` on an unassigned polymorphic
331
+ belongs_to association.
607
332
 
608
- Fixes #11569.
333
+ Fixes #20426.
609
334
 
610
- *Godfrey Chan*
335
+ *James Dabbs*
611
336
 
612
- * Default scopes are no longer overriden by chained conditions.
613
337
 
614
- Before this change when you defined a `default_scope` in a model
615
- it was overriden by chained conditions in the same field. Now it
616
- is merged like any other scope.
338
+ ## Rails 4.2.3 (June 25, 2015) ##
617
339
 
618
- Before:
340
+ * Let `WITH` queries (Common Table Expressions) be explainable.
619
341
 
620
- class User < ActiveRecord::Base
621
- default_scope { where state: 'pending' }
622
- scope :active, -> { where state: 'active' }
623
- scope :inactive, -> { where state: 'inactive' }
624
- end
342
+ *Vladimir Kochnev*
625
343
 
626
- User.all
627
- # SELECT "users".* FROM "users" WHERE "users"."state" = 'pending'
344
+ * Fix n+1 query problem when eager loading nil associations (fixes #18312)
628
345
 
629
- User.active
630
- # SELECT "users".* FROM "users" WHERE "users"."state" = 'active'
346
+ *Sammy Larbi*
631
347
 
632
- User.where(state: 'inactive')
633
- # SELECT "users".* FROM "users" WHERE "users"."state" = 'inactive'
348
+ * Fixed an error which would occur in dirty checking when calling
349
+ `update_attributes` from a getter.
634
350
 
635
- After:
351
+ Fixes #20531.
636
352
 
637
- class User < ActiveRecord::Base
638
- default_scope { where state: 'pending' }
639
- scope :active, -> { where state: 'active' }
640
- scope :inactive, -> { where state: 'inactive' }
641
- end
353
+ *Sean Griffin*
642
354
 
643
- User.all
644
- # SELECT "users".* FROM "users" WHERE "users"."state" = 'pending'
355
+ * Ensure symbols passed to `ActiveRecord::Relation#select` are always treated
356
+ as columns.
645
357
 
646
- User.active
647
- # SELECT "users".* FROM "users" WHERE "users"."state" = 'pending' AND "users"."state" = 'active'
358
+ Fixes #20360.
648
359
 
649
- User.where(state: 'inactive')
650
- # SELECT "users".* FROM "users" WHERE "users"."state" = 'pending' AND "users"."state" = 'inactive'
360
+ *Sean Griffin*
651
361
 
652
- To get the previous behavior it is needed to explicitly remove the
653
- `default_scope` condition using `unscoped`, `unscope`, `rewhere` or
654
- `except`.
362
+ * Clear query cache when `ActiveRecord::Base#reload` is called.
655
363
 
656
- Example:
364
+ *Shane Hender*
657
365
 
658
- class User < ActiveRecord::Base
659
- default_scope { where state: 'pending' }
660
- scope :active, -> { unscope(where: :state).where(state: 'active') }
661
- scope :inactive, -> { rewhere state: 'inactive' }
662
- end
366
+ * Pass `:extend` option for `has_and_belongs_to_many` associations to the
367
+ underlying `has_many :through`.
663
368
 
664
- User.all
665
- # SELECT "users".* FROM "users" WHERE "users"."state" = 'pending'
369
+ *Jaehyun Shin*
666
370
 
667
- User.active
668
- # SELECT "users".* FROM "users" WHERE "users"."state" = 'active'
371
+ * Make `unscope` aware of "less than" and "greater than" conditions.
669
372
 
670
- User.inactive
671
- # SELECT "users".* FROM "users" WHERE "users"."state" = 'inactive'
373
+ *TAKAHASHI Kazuaki*
672
374
 
673
- * Perform necessary deeper encoding when hstore is inside an array.
375
+ * Revert behavior of `db:schema:load` back to loading the full
376
+ environment. This ensures that initializers are run.
674
377
 
675
- Fixes #11135.
378
+ Fixes #19545.
676
379
 
677
- *Josh Goodall*, *Genadi Samokovarov*
380
+ *Yves Senn*
678
381
 
679
- * Properly detect if a connection is still active before using it
680
- in multi-threaded environments.
382
+ * Fix missing index when using `timestamps` with the `index` option.
681
383
 
682
- Fixes #12867.
384
+ The `index` option used with `timestamps` should be passed to both
385
+ `column` definitions for `created_at` and `updated_at` rather than just
386
+ the first.
683
387
 
684
- *Kevin Casey*, *Matthew Draper*, *William (B.J.) Snow Orvis*
388
+ *Paul Mucur*
685
389
 
686
- * When inverting add_index use the index name if present instead of
687
- the columns.
390
+ * Rename `:class` to `:anonymous_class` in association options.
688
391
 
689
- If there are two indices with matching columns and one of them is
690
- explicitly named then reverting the migration adding the named one
691
- would instead drop the unnamed one.
392
+ Fixes #19659.
692
393
 
693
- The inversion of add_index will now drop the index by its name if
694
- it is present.
394
+ *Andrew White*
695
395
 
696
- *Hubert Dąbrowski*
396
+ * Fixed a bug where uniqueness validations would error on out of range values,
397
+ even if an validation should have prevented it from hitting the database.
697
398
 
698
- * Add flag to disable schema dump after migration.
399
+ *Andrey Voronkov*
699
400
 
700
- Add a config parameter on Active Record named `dump_schema_after_migration`
701
- which is true by default. Now schema dump does not happen at the
702
- end of migration rake task if `dump_schema_after_migration` is false.
401
+ * Foreign key related methods in the migration DSL respect
402
+ `ActiveRecord::Base.pluralize_table_names = false`.
703
403
 
704
- *Emil Soman*
404
+ Fixes #19643.
705
405
 
706
- * `find_in_batches`, `find_each`, `Result#each` and `Enumerable#index_by` now
707
- return an `Enumerator` that can calculate its size.
406
+ *Mehmet Emin İNAÇ*
708
407
 
709
- See also #13938.
408
+ * Reduce memory usage from loading types on pg.
710
409
 
711
- *Marc-André Lafortune*
410
+ Fixes #19578.
712
411
 
713
- * Make sure transaction state gets reset after a commit operation on the record.
412
+ *Sean Griffin*
714
413
 
715
- If a new transaction was open inside a callback, the record was loosing track
716
- of the transaction level state, and it was leaking that state.
414
+ * Fix referencing wrong table aliases while joining tables of has many through
415
+ association (only when calling calculation methods).
717
416
 
718
- Fixes #12566.
417
+ Fixes #19276.
719
418
 
720
- *arthurnn*
419
+ *pinglamb*
721
420
 
722
- * Pass `has_and_belongs_to_many` `:autosave` option to
723
- the underlying `has_many :through` association.
421
+ * Don't attempt to update counter caches, when the column wasn't selected.
724
422
 
725
- Fixes #13923.
423
+ Fixes #19437.
726
424
 
727
- *Yves Senn*
425
+ *Sean Griffin*
728
426
 
729
- * PostgreSQL implementation of `SchemaStatements#index_name_exists?`.
427
+ * Correctly persist a serialized attribute that has been returned to
428
+ its default value by an in-place modification.
730
429
 
731
- The database agnostic implementation does not detect with indexes that are
732
- not supported by the ActiveRecord schema dumper. For example, expressions
733
- indexes would not be detected.
430
+ Fixes #19467.
734
431
 
735
- Fixes #11018.
432
+ *Matthew Draper*
736
433
 
737
- *Jonathan Baudanza*
434
+ * Fix default `format` value in `ActiveRecord::Tasks::DatabaseTasks#schema_file`.
738
435
 
739
- * Parsing PostgreSQL arrays with empty strings now works correctly.
436
+ *James Cox*
740
437
 
741
- Previously, if you tried to parse `{"1","","2","","3"}` the result
742
- would be `["1","2","3"]`, removing the empty strings from the array,
743
- which would be incorrect. Now it will correctly produce `["1","","2","","3"]`
744
- as the result of parsing the above PostgreSQL array.
438
+ * Dont enroll records in the transaction if they dont have commit callbacks.
439
+ That was causing a memory grow problem when creating a lot of records inside a transaction.
745
440
 
746
- Fixes #13907.
441
+ Fixes #15549.
747
442
 
748
- *Maurício Linhares*
443
+ *Will Bryant*, *Aaron Patterson*
749
444
 
750
- * Associations now raise `ArgumentError` on name conflicts.
445
+ * Correctly create through records when created on a has many through
446
+ association when using `where`.
751
447
 
752
- Dangerous association names conflicts include instance or class methods already
753
- defined by `ActiveRecord::Base`.
448
+ Fixes #19073.
754
449
 
755
- Example:
450
+ *Sean Griffin*
756
451
 
757
- class Car < ActiveRecord::Base
758
- has_many :errors
759
- end
760
- # Will raise ArgumentError.
761
452
 
762
- Fixes #13217.
453
+ ## Rails 4.2.2 (June 16, 2015) ##
763
454
 
764
- *Lauro Caetano*
455
+ * No Changes *
765
456
 
766
- * Fix regressions on `select_*` methods.
767
- When `select_*` methods receive a `Relation` object, they should be able to
768
- get the arel/binds from it.
769
- Also fix regressions on `select_rows` that was ignoring the binds.
770
457
 
771
- Fixes #7538, #12017, #13731, #12056.
458
+ ## Rails 4.2.1 (March 19, 2015) ##
772
459
 
773
- *arthurnn*
460
+ * Fixed ActiveRecord::Relation#becomes! and changed_attributes issues for type column
774
461
 
775
- * Active Record objects can now be correctly dumped, loaded and dumped again
776
- without issues.
462
+ Fixes #17139.
777
463
 
778
- Previously, if you did `YAML.dump`, `YAML.load` and then `YAML.dump` again
779
- in an Active Record model that used serialization it would fail at the last
780
- dump due to the fields not being correctly serialized before being dumped
781
- to YAML. Now it is possible to dump and load the same object as many times
782
- as needed without any issues.
464
+ *Miklos Fazekas*
783
465
 
784
- Fixes #13861.
466
+ * `remove_reference` with `foreign_key: true` removes the foreign key before
467
+ removing the column. This fixes a bug where it was not possible to remove
468
+ the column on MySQL.
785
469
 
786
- *Maurício Linhares*
470
+ Fixes #18664.
787
471
 
788
- * `find_in_batches` now returns an `Enumerator` when called without a block, so that it
789
- can be chained with other `Enumerable` methods.
472
+ *Yves Senn*
790
473
 
791
- *Marc-André Lafortune*
474
+ * Add a `:foreign_key` option to `references` and associated migration
475
+ methods. The model and migration generators now use this option, rather than
476
+ the `add_foreign_key` form.
792
477
 
793
- * `enum` now raises on "dangerous" name conflicts.
478
+ *Sean Griffin*
794
479
 
795
- Dangerous name conflicts includes instance or class method conflicts
796
- with methods defined within `ActiveRecord::Base` but not its ancestors,
797
- as well as conflicts with methods generated by other enums on the same
798
- class.
480
+ * Fix rounding problem for PostgreSQL timestamp column.
799
481
 
800
- Fixes #13389.
482
+ If timestamp column have the precision, it need to format according to
483
+ the precision of timestamp column.
801
484
 
802
- *Godfrey Chan*
485
+ *Ryuta Kamizono*
803
486
 
804
- * `scope` now raises on "dangerous" name conflicts.
487
+ * Respect the database default charset for `schema_migrations` table.
805
488
 
806
- Similar to dangerous attribute methods, a scope name conflict is
807
- dangerous if it conflicts with an existing class method defined within
808
- `ActiveRecord::Base` but not its ancestors.
489
+ The charset of `version` column in `schema_migrations` table is depend
490
+ on the database default charset and collation rather than the encoding
491
+ of the connection.
809
492
 
810
- See also #13389.
493
+ *Ryuta Kamizono*
811
494
 
812
- *Godfrey Chan*, *Philippe Creux*
495
+ * Respect custom primary keys for associations when calling `Relation#where`
813
496
 
814
- * Correctly send an user provided statement to a `lock!()` call.
497
+ Fixes #18813.
815
498
 
816
- person.lock! 'FOR SHARE NOWAIT'
817
- # Before: SELECT * ... LIMIT 1 FOR UPDATE
818
- # After: SELECT * ... LIMIT 1 FOR SHARE NOWAIT
499
+ *Sean Griffin*
819
500
 
820
- Fixes #13788.
501
+ * Fixed several edge cases which could result in a counter cache updating
502
+ twice or not updating at all for `has_many` and `has_many :through`.
821
503
 
822
- *Maurício Linhares*
504
+ Fixes #10865.
823
505
 
824
- * Handle aliased attributes `select()`, `order()` and `reorder()`.
506
+ *Sean Griffin*
825
507
 
826
- *Tsutomu Kuroda*
508
+ * Foreign keys added by migrations were given random, generated names. This
509
+ meant a different `structure.sql` would be generated every time a developer
510
+ ran migrations on their machine.
827
511
 
828
- * Reset the collection association when calling `reset` on it.
512
+ The generated part of foreign key names is now a hash of the table name and
513
+ column name, which is consistent every time you run the migration.
829
514
 
830
- Before:
515
+ *Chris Sinjakli*
831
516
 
832
- post.comments.loaded? # => true
833
- post.comments.reset
834
- post.comments.loaded? # => true
517
+ * Fixed ActiveRecord::Relation#group method when argument is SQL reserved key word:
835
518
 
836
- After:
519
+ SplitTest.group(:key).count
520
+ Property.group(:value).count
837
521
 
838
- post.comments.loaded? # => true
839
- post.comments.reset
840
- post.comments.loaded? # => false
522
+ *Bogdan Gusiev*
841
523
 
842
- Fixes #13777.
524
+ * Don't define autosave association callbacks twice from
525
+ `accepts_nested_attributes_for`.
843
526
 
844
- *Kelsey Schlarman*
527
+ Fixes #18704.
845
528
 
846
- * Make enum fields work as expected with the `ActiveModel::Dirty` API.
529
+ *Sean Griffin*
847
530
 
848
- Before this change, using the dirty API would have surprising results:
531
+ * Integer types will no longer raise a `RangeError` when assigning an
532
+ attribute, but will instead raise when going to the database.
849
533
 
850
- conversation = Conversation.new
851
- conversation.status = :active
852
- conversation.status = :archived
853
- conversation.status_was # => 0
534
+ Fixes several vague issues which were never reported directly. See the
535
+ commit message from the commit which added this line for some examples.
854
536
 
855
- After this change, the same code would result in:
537
+ *Sean Griffin*
856
538
 
857
- conversation = Conversation.new
858
- conversation.status = :active
859
- conversation.status = :archived
860
- conversation.status_was # => "active"
539
+ * Values which would error while being sent to the database (such as an
540
+ ASCII-8BIT string with invalid UTF-8 bytes on Sqlite3), no longer error on
541
+ assignment. They will still error when sent to the database, but you are
542
+ given the ability to re-assign it to a valid value.
861
543
 
862
- *Rafael Mendonça França*
544
+ Fixes #18580.
863
545
 
864
- * `has_one` and `belongs_to` accessors don't add ORDER BY to the queries
865
- anymore.
546
+ *Sean Griffin*
866
547
 
867
- Since Rails 4.0, we add an ORDER BY in the `first` method to ensure
868
- consistent results among different database engines. But for singular
869
- associations this behavior is not needed since we will have one record to
870
- return. As this ORDER BY option can lead some performance issues we are
871
- removing it for singular associations accessors.
548
+ * Don't remove join dependencies in `Relation#exists?`
872
549
 
873
- Fixes #12623.
550
+ Fixes #18632.
874
551
 
875
- *Rafael Mendonça França*
552
+ *Sean Griffin*
876
553
 
877
- * Prepend table name for column names passed to `Relation#select`.
554
+ * Invalid values assigned to a JSON column are assumed to be `nil`.
878
555
 
879
- Example:
556
+ Fixes #18629.
880
557
 
881
- Post.select(:id)
882
- # Before: => SELECT id FROM "posts"
883
- # After: => SELECT "posts"."id" FROM "posts"
558
+ *Sean Griffin*
884
559
 
885
- *Yves Senn*
560
+ * No longer issue deprecation warning when including a scope with extensions.
561
+ Previously every scope with extension methods was transformed into an
562
+ instance dependent scope. Including such a scope would wrongfully issue a
563
+ deprecation warning. This is no longer the case.
886
564
 
887
- * Fail early with "Primary key not included in the custom select clause"
888
- in `find_in_batches`.
565
+ Fixes #18467.
889
566
 
890
- Before this patch, the exception was raised after the first batch was
891
- yielded to the block. This means that you only get it, when you hit the
892
- `batch_size` treshold. This could shadow the issue in development.
567
+ *Yves Senn*
893
568
 
894
- *Alexander Balashov*
569
+ * Correctly use the type provided by `serialize` when updating records using
570
+ optimistic locking.
895
571
 
896
- * Ensure `second` through `fifth` methods act like the `first` finder.
572
+ Fixes #18385.
897
573
 
898
- The famous ordinal Array instance methods defined in ActiveSupport
899
- (`first`, `second`, `third`, `fourth`, and `fifth`) are now available as
900
- full-fledged finders in ActiveRecord. The biggest benefit of this is ordering
901
- of the records returned now defaults to the table's primary key in ascending order.
574
+ *Sean Griffin*
902
575
 
903
- Fixes #13743.
576
+ * `attribute_will_change!` will no longer cause non-persistable attributes to
577
+ be sent to the database.
904
578
 
905
- Example:
579
+ Fixes #18407.
906
580
 
907
- User.all.second
581
+ *Sean Griffin*
908
582
 
909
- # Before
910
- # => 'SELECT "users".* FROM "users"'
583
+ * Format the datetime string according to the precision of the datetime field.
911
584
 
912
- # After
913
- # => SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1 OFFSET 1'
585
+ Incompatible to rounding behavior between MySQL 5.6 and earlier.
914
586
 
915
- User.offset(3).second
587
+ In 5.5, when you insert `2014-08-17 12:30:00.999999` the fractional part
588
+ is ignored. In 5.6, it's rounded to `2014-08-17 12:30:01`:
916
589
 
917
- # Before
918
- # => 'SELECT "users".* FROM "users" LIMIT -1 OFFSET 3' # sqlite3 gem
919
- # => 'SELECT "users".* FROM "users" OFFSET 3' # pg gem
920
- # => 'SELECT `users`.* FROM `users` LIMIT 18446744073709551615 OFFSET 3' # mysql2 gem
590
+ http://bugs.mysql.com/bug.php?id=68760
921
591
 
922
- # After
923
- # => SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1 OFFSET 4'
592
+ *Ryuta Kamizono*
924
593
 
925
- *Jason Meller*
594
+ * Allow precision option for MySQL datetimes.
926
595
 
927
- * ActiveRecord states are now correctly restored after a rollback for
928
- models that did not define any transactional callbacks (i.e.
929
- `after_commit`, `after_rollback` or `after_create`).
596
+ *Ryuta Kamizono*
930
597
 
931
- Fixes #13744.
598
+ * Clear query cache on rollback.
932
599
 
933
- *Godfrey Chan*
600
+ *Florian Weingarten*
934
601
 
935
- * Make `touch` fire the `after_commit` and `after_rollback` callbacks.
602
+ * Fixed setting of foreign_key for through associations while building of new record.
936
603
 
937
- *Harry Brundage*
604
+ Fixes #12698.
938
605
 
939
- * Enable partial indexes for `sqlite >= 3.8.0`.
606
+ *Ivan Antropov*
940
607
 
941
- See http://www.sqlite.org/partialindex.html
608
+ * Fixed automatic inverse_of for models nested in module.
942
609
 
943
- *Cody Cutrer*
610
+ *Andrew McCloud*
944
611
 
945
- * Don't try to get the subclass if the inheritance column doesn't exist
612
+ * Fix `reaping_frequency` option when the value is a string.
946
613
 
947
- The `subclass_from_attrs` method is called even if the column specified by
948
- the `inheritance_column` setting doesn't exist. This prevents setting associations
949
- via the attributes hash if the association name clashes with the value of the setting,
950
- typically `:type`. This worked previously in Rails 3.2.
614
+ This usually happens when it is configured using `DATABASE_URL`.
951
615
 
952
- *Ujjwal Thaakar*
616
+ *korbin*
953
617
 
954
- * Enum mappings are now exposed via class methods instead of constants.
618
+ * Fix error message when trying to create an associated record and the foreign
619
+ key is missing.
955
620
 
956
- Example:
621
+ Before this fix the following exception was being raised:
957
622
 
958
- class Conversation < ActiveRecord::Base
959
- enum status: [ :active, :archived ]
960
- end
623
+ NoMethodError: undefined method `val' for #<Arel::Nodes::BindParam:0x007fc64d19c218>
961
624
 
962
- Before:
625
+ Now the message is:
963
626
 
964
- Conversation::STATUS # => { "active" => 0, "archived" => 1 }
627
+ ActiveRecord::UnknownAttributeError: unknown attribute 'foreign_key' for Model.
965
628
 
966
- After:
629
+ *Rafael Mendonça França*
967
630
 
968
- Conversation.statuses # => { "active" => 0, "archived" => 1 }
631
+ * Fix change detection problem for PostgreSQL bytea type and
632
+ `ArgumentError: string contains null byte` exception with pg-0.18.
969
633
 
970
- *Godfrey Chan*
634
+ Fixes #17680.
971
635
 
972
- * Set `NameError#name` when STI-class-lookup fails.
636
+ *Lars Kanis*
973
637
 
974
- *Chulki Lee*
638
+ * When a table has a composite primary key, the `primary_key` method for
639
+ SQLite3 and PostgreSQL adapters was only returning the first field of the key.
640
+ Ensures that it will return nil instead, as Active Record doesn't support
641
+ composite primary keys.
975
642
 
976
- * Fix bug in `becomes!` when changing from the base model to a STI sub-class.
643
+ Fixes #18070.
977
644
 
978
- Fixes #13272.
645
+ *arthurnn*
979
646
 
980
- *the-web-dev*, *Yves Senn*
647
+ * Ensure `first!` and friends work on loaded associations.
981
648
 
982
- * Currently Active Record can be configured via the environment variable
983
- `DATABASE_URL` or by manually injecting a hash of values which is what Rails does,
984
- reading in `database.yml` and setting Active Record appropriately. Active Record
985
- expects to be able to use `DATABASE_URL` without the use of Rails, and we cannot
986
- rip out this functionality without deprecating. This presents a problem though
987
- when both config is set, and a `DATABASE_URL` is present. Currently the
988
- `DATABASE_URL` should "win" and none of the values in `database.yml` are
989
- used. This is somewhat unexpected, if one were to set values such as
990
- `pool` in the `production:` group of `database.yml` they are ignored.
649
+ Fixes #18237.
991
650
 
992
- There are many ways that Active Record initiates a connection today:
651
+ *Sean Griffin*
993
652
 
994
- - Stand Alone (without rails)
995
- - `rake db:<tasks>`
996
- - `ActiveRecord.establish_connection`
653
+ * Dump the default `nil` for PostgreSQL UUID primary key.
997
654
 
998
- - With Rails
999
- - `rake db:<tasks>`
1000
- - `rails <server> | <console>`
1001
- - `rails dbconsole`
655
+ *Ryuta Kamizono*
1002
656
 
1003
- Now all of these behave exactly the same way. The best way to do
1004
- this is to put all of this logic in one place so it is guaranteed to be used.
657
+ * Don't raise when writing an attribute with an out-of-range datetime passed
658
+ by the user.
1005
659
 
1006
- Here is the matrix of how this behavior works:
660
+ *Grey Baker*
1007
661
 
1008
- ```
1009
- No database.yml
1010
- No DATABASE_URL
1011
- => Error
1012
- ```
662
+ * Fixes bug with 'ActiveRecord::Type::Numeric' that causes negative values to
663
+ be marked as having changed when set to the same negative value.
1013
664
 
1014
- ```
1015
- database.yml present
1016
- No DATABASE_URL
1017
- => Use database.yml configuration
1018
- ```
665
+ Fixes #18161.
1019
666
 
1020
- ```
1021
- No database.yml
1022
- DATABASE_URL present
1023
- => use DATABASE_URL configuration
1024
- ```
667
+ *Daniel Fox*
1025
668
 
1026
- ```
1027
- database.yml present
1028
- DATABASE_URL present
1029
- => Merged into `url` sub key. If both specify `url` sub key, the `database.yml` `url`
1030
- sub key "wins". If other paramaters `adapter` or `database` are specified in YAML,
1031
- they are discarded as the `url` sub key "wins".
1032
- ```
1033
669
 
1034
- Current implementation uses `ActiveRecord::Base.configurations` to resolve and merge
1035
- all connection information before returning. This is achieved through a utility
1036
- class: `ActiveRecord::ConnectionHandling::MergeAndResolveDefaultUrlConfig`.
670
+ ## Rails 4.2.0 (December 20, 2014) ##
1037
671
 
1038
- To understand the exact behavior of this class, it is best to review the
1039
- behavior in `activerecord/test/cases/connection_adapters/connection_handler_test.rb`.
672
+ * Introduce `force: :cascade` option for `create_table`. Using this option
673
+ will recreate tables even if they have dependent objects (like foreign keys).
674
+ `db/schema.rb` now uses `force: :cascade`. This makes it possible to
675
+ reload the schema when foreign keys are in place.
1040
676
 
1041
- *Richard Schneeman*
677
+ *Matthew Draper*, *Yves Senn*
1042
678
 
1043
- * Make `change_column_null` revertable. Fixes #13576.
679
+ * `db:schema:load` and `db:structure:load` no longer purge the database
680
+ before loading the schema. This is left for the user to do.
681
+ `db:test:prepare` will still purge the database.
1044
682
 
1045
- *Yves Senn*, *Nishant Modak*, *Prathamesh Sonpatki*
683
+ Fixes #17945.
1046
684
 
1047
- * Don't create/drop the test database if RAILS_ENV is specified explicitly.
685
+ *Yves Senn*
1048
686
 
1049
- Previously, when the environment was development, we would always
1050
- create or drop both the test and development databases.
687
+ * Fix undesirable RangeError by Type::Integer. Add Type::UnsignedInteger.
1051
688
 
1052
- Now, if RAILS_ENV is explicitly defined as development, we don't create
1053
- the test database.
689
+ *Ryuta Kamizono*
1054
690
 
1055
- *Damien Mathieu*
691
+ * Add `foreign_type` option to `has_one` and `has_many` association macros.
1056
692
 
1057
- * Initialize version on Migration objects so that it can be used in a migration,
1058
- and it will be included in the announce message.
693
+ This option enables to define the column name of associated object's type for polymorphic associations.
1059
694
 
1060
- *Dylan Thacker-Smith*
695
+ *Ulisses Almeida, Kassio Borges*
1061
696
 
1062
- * `change_table` now uses the current adapter's `update_table_definition`
1063
- method to retrieve a specific table definition.
1064
- This ensures that `change_table` and `create_table` will use
1065
- similar objects.
697
+ * `add_timestamps` and `remove_timestamps` now properly reversible with
698
+ options.
1066
699
 
1067
- Fixes #13577, #13503.
700
+ *Noam Gagliardi-Rabinovich*
1068
701
 
1069
- *Nishant Modak*, *Prathamesh Sonpatki*, *Rafael Mendonça França*
702
+ * Bring back `db:test:prepare` to synchronize the test database schema.
1070
703
 
1071
- * Fixed ActiveRecord::Store nil conversion TypeError when using YAML coder.
1072
- In case the YAML passed as paramter is nil, uses an empty string.
704
+ Manual synchronization using `bin/rake db:test:prepare` is required
705
+ when a migration is rolled-back, edited and reapplied.
1073
706
 
1074
- Fixes #13570.
707
+ `ActiveRecord::Base.maintain_test_schema` now uses `db:test:prepare`
708
+ to synchronize the schema. Plugins can use this task as a hook to
709
+ provide custom behavior after the schema has been loaded.
1075
710
 
1076
- *Thales Oliveira*
711
+ NOTE: `test:prepare` runs before the schema is synchronized.
1077
712
 
1078
- * Deprecate unused `ActiveRecord::Base.symbolized_base_class`
1079
- and `ActiveRecord::Base.symbolized_sti_name` without replacement.
713
+ Fixes #17171, #15787.
1080
714
 
1081
715
  *Yves Senn*
1082
716
 
1083
- * Since the `test_help.rb` file in Railties now automatically maintains
1084
- your test schema, the `rake db:test:*` tasks are deprecated. This
1085
- doesn't stop you manually running other tasks on your test database
1086
- if needed:
717
+ * Change `reflections` public api to return the keys as String objects.
1087
718
 
1088
- rake db:schema:load RAILS_ENV=test
719
+ Fixes #16928.
1089
720
 
1090
- *Jon Leighton*
721
+ *arthurnn*
1091
722
 
1092
- * Fix presence validator for association when the associated record responds to `to_a`.
723
+ * Renaming a table in pg also renames the primary key index.
1093
724
 
1094
- *gmarik*
725
+ Fixes #12856
1095
726
 
1096
- * Fixed regression on preload/includes with multiple arguments failing in certain conditions,
1097
- raising a NoMethodError internally by calling `reflect_on_association` for `NilClass:Class`.
727
+ *Sean Griffin*
1098
728
 
1099
- Fixes #13437.
729
+ * Make it possible to access fixtures excluded by a `default_scope`.
1100
730
 
1101
- *Vipul A M*, *khustochka*
731
+ *Yves Senn*
1102
732
 
1103
- * Add the ability to nullify the `enum` column.
733
+ * Fix preloading of associations with a scope containing joins along with
734
+ conditions on the joined association.
1104
735
 
1105
- Example:
736
+ *Siddharth Sharma*
1106
737
 
1107
- class Conversation < ActiveRecord::Base
1108
- enum gender: [:female, :male]
1109
- end
738
+ * Add `Table#name` to match `TableDefinition#name`.
1110
739
 
1111
- Conversation::GENDER # => { female: 0, male: 1 }
740
+ *Cody Cutrer*
1112
741
 
1113
- # conversation.update! gender: 0
1114
- conversation.female!
1115
- conversation.female? # => true
1116
- conversation.gender # => "female"
742
+ * Cache `CollectionAssociation#reader` proxies separately before and after
743
+ the owner has been saved so that the proxy is not cached without the
744
+ owner's id.
1117
745
 
1118
- # conversation.update! gender: nil
1119
- conversation.gender = nil
1120
- conversation.gender.nil? # => true
1121
- conversation.gender # => nil
746
+ *Ben Woosley*
1122
747
 
1123
- *Amr Tamimi*
748
+ * `ActiveRecord::ReadOnlyRecord` now has a descriptive message.
1124
749
 
1125
- * Connection specification now accepts a "url" key. The value of this
1126
- key is expected to contain a database URL. The database URL will be
1127
- expanded into a hash and merged.
750
+ *Franky W.*
1128
751
 
1129
- *Richard Schneeman*
752
+ * Fix preloading of associations which unscope a default scope.
1130
753
 
1131
- * An `ArgumentError` is now raised on a call to `Relation#where.not(nil)`.
754
+ Fixes #11036.
1132
755
 
1133
- Example:
756
+ *Byron Bischoff*
1134
757
 
1135
- User.where.not(nil)
758
+ * Added SchemaDumper support for tables with jsonb columns.
1136
759
 
1137
- # Before
1138
- # => 'SELECT `users`.* FROM `users` WHERE (NOT (NULL))'
760
+ *Ted O'Meara*
1139
761
 
1140
- # After
1141
- # => ArgumentError, 'Invalid argument for .where.not(), got nil.'
762
+ * Deprecate `sanitize_sql_hash_for_conditions` without replacement. Using a
763
+ `Relation` for performing queries and updates is the prefered API.
1142
764
 
1143
- *Kuldeep Aggarwal*
765
+ *Sean Griffin*
1144
766
 
1145
- * Deprecated use of string argument as a configuration lookup in
1146
- `ActiveRecord::Base.establish_connection`. Instead, a symbol must be given.
767
+ * Queries now properly type cast values that are part of a join statement,
768
+ even when using type decorators such as `serialize`.
1147
769
 
1148
- *José Valim*
770
+ *Melanie Gilman & Sean Griffin*
1149
771
 
1150
- * Fixed `update_column`, `update_columns`, and `update_all` to correctly serialize
1151
- values for `array`, `hstore` and `json` column types in PostgreSQL.
772
+ * MySQL enum type lookups, with values matching another type, no longer result
773
+ in an endless loop.
1152
774
 
1153
- Fixes #12261.
775
+ Fixes #17402.
1154
776
 
1155
- *Tadas Tamosauskas*, *Carlos Antonio da Silva*
777
+ *Yves Senn*
1156
778
 
1157
- * Do not consider PostgreSQL array columns as number or text columns.
779
+ * Raise `ArgumentError` when the body of a scope is not callable.
1158
780
 
1159
- The code uses these checks in several places to know what to do with a
1160
- particular column, for instance AR attribute query methods has a branch
1161
- like this:
781
+ *Mauro George*
1162
782
 
1163
- if column.number?
1164
- !value.zero?
1165
- end
783
+ * Use type column first in multi-column indexes created with `add-reference`.
1166
784
 
1167
- This should never be true for array columns, since it would be the same
1168
- as running [].zero?, which results in a NoMethodError exception.
785
+ *Derek Prior*
1169
786
 
1170
- Fixing this by ensuring that array columns in PostgreSQL never return
1171
- true for number?/text? checks.
787
+ * Fix `Relation.rewhere` to work with Range values.
1172
788
 
1173
- *Carlos Antonio da Silva*
789
+ *Dan Olson*
1174
790
 
1175
- * When connecting to a non-existant database, the error:
1176
- `ActiveRecord::NoDatabaseError` will now be raised. When being used with Rails
1177
- the error message will include information on how to create a database:
1178
- `rake db:create`. Supported adapters: postgresql, mysql, mysql2, sqlite3
791
+ * `AR::UnknownAttributeError` now includes the class name of a record.
1179
792
 
1180
- *Richard Schneeman*
793
+ User.new(name: "Yuki Nishijima", project_attributes: {name: "kaminari"})
794
+ # => ActiveRecord::UnknownAttributeError: unknown attribute 'name' for User.
1181
795
 
1182
- * Do not raise `'cannot touch on a new record object'` exception on destroying
1183
- already destroyed `belongs_to` association with `touch: true` option.
796
+ *Yuki Nishijima*
1184
797
 
1185
- Fixes #13445.
798
+ * Fix a regression causing `after_create` callbacks to run before associated
799
+ records are autosaved.
1186
800
 
1187
- Example:
801
+ Fixes #17209.
1188
802
 
1189
- # Given Comment has belongs_to :post, touch: true
1190
- comment.post.destroy
1191
- comment.destroy # no longer raises an error
803
+ *Agis Anastasopoulos*
1192
804
 
1193
- *Paul Nikitochkin*
805
+ * Honor overridden `rack.test` in Rack environment for the connection
806
+ management middleware.
1194
807
 
1195
- * Fix a bug when assigning an array containing string numbers to a
1196
- PostgreSQL integer array column.
808
+ *Simon Eskildsen*
1197
809
 
1198
- Fixes #13444.
810
+ * Add a truncate method to the connection.
1199
811
 
1200
- Example:
812
+ *Aaron Patterson*
1201
813
 
1202
- # Given Book#ratings is of type :integer, array: true
1203
- Book.new(ratings: [1, 2]) # worked before
1204
- Book.new(ratings: ['1', '2']) # now works as well
814
+ * Don't autosave unchanged has_one through records.
1205
815
 
1206
- *Damien Mathieu*
816
+ *Alan Kennedy*, *Steve Parrington*
1207
817
 
1208
- * Fix `PostgreSQL` insert to properly extract table name from multiline string SQL.
818
+ * Do not dump foreign keys for ignored tables.
1209
819
 
1210
- Previously, executing an insert SQL in `PostgreSQL` with a command like this:
820
+ *Yves Senn*
1211
821
 
1212
- insert into articles(
1213
- number)
1214
- values(
1215
- 5152
1216
- )
822
+ * PostgreSQL adapter correctly dumps foreign keys targeting tables
823
+ outside the schema search path.
1217
824
 
1218
- would not work because the adapter was unable to extract the correct `articles`
1219
- table name.
825
+ Fixes #16907.
1220
826
 
1221
- *Kuldeep Aggarwal*
827
+ *Matthew Draper*, *Yves Senn*
1222
828
 
1223
- * Correctly escape PostgreSQL arrays.
829
+ * When a thread is killed, rollback the active transaction, instead of
830
+ committing it during the stack unwind. Previously, we could commit half-
831
+ completed work. This fix only works for Ruby 2.0+; on 1.9, we can't
832
+ distinguish a thread kill from an ordinary non-local (block) return, so must
833
+ default to committing.
1224
834
 
1225
- Fixes: CVE-2014-0080
835
+ *Chris Hanks*
1226
836
 
1227
- * `Relation` no longer has mutator methods like `#map!` and `#delete_if`. Convert
1228
- to an `Array` by calling `#to_a` before using these methods.
837
+ * A `NullRelation` should represent nothing. This fixes a bug where
838
+ `Comment.where(post_id: Post.none)` returned a non-empty result.
1229
839
 
1230
- It intends to prevent odd bugs and confusion in code that call mutator
1231
- methods directly on the `Relation`.
840
+ Fixes #15176.
1232
841
 
1233
- Example:
842
+ *Matthew Draper*, *Yves Senn*
1234
843
 
1235
- # Instead of this
1236
- Author.where(name: 'Hank Moody').compact!
844
+ * Include default column limits in schema.rb. Allows defaults to be changed
845
+ in the future without affecting old migrations that assumed old defaults.
1237
846
 
1238
- # Now you have to do this
1239
- authors = Author.where(name: 'Hank Moody').to_a
1240
- authors.compact!
847
+ *Jeremy Kemper*
1241
848
 
1242
- *Lauro Caetano*
849
+ * MySQL: schema.rb now includes TEXT and BLOB column limits.
1243
850
 
1244
- * Better support for `where()` conditions that use a `belongs_to`
1245
- association name.
851
+ *Jeremy Kemper*
1246
852
 
1247
- Using the name of an association in `where` previously worked only
1248
- if the value was a single `ActiveRecord::Base` object. e.g.
853
+ * MySQL: correct LONGTEXT and LONGBLOB limits from 2GB to their true 4GB.
1249
854
 
1250
- Post.where(author: Author.first)
855
+ *Jeremy Kemper*
1251
856
 
1252
- Any other values, including `nil`, would cause invalid SQL to be
1253
- generated. This change supports arguments in the `where` query
1254
- conditions where the key is a `belongs_to` association name and the
1255
- value is `nil`, an `Array` of `ActiveRecord::Base` objects, or an
1256
- `ActiveRecord::Relation` object.
857
+ * SQLite3Adapter now checks for views in `table_exists?`. Fixes #14041.
1257
858
 
1258
- class Post < ActiveRecord::Base
1259
- belongs_to :author
1260
- end
859
+ *Girish Sonawane*
1261
860
 
1262
- `nil` value finds records where the association is not set:
861
+ * Introduce `connection.supports_views?` to check whether the current adapter
862
+ has support for SQL views. Connection adapters should define this method.
1263
863
 
1264
- Post.where(author: nil)
1265
- # SELECT "posts".* FROM "posts" WHERE "posts"."author_id" IS NULL
864
+ *Yves Senn*
865
+
866
+ * Allow included modules to override association methods.
1266
867
 
1267
- `Array` values find records where the association foreign key
1268
- matches the ids of the passed ActiveRecord models, resulting
1269
- in the same query as `Post.where(author_id: [1,2])`:
868
+ Fixes #16684.
1270
869
 
1271
- authors_array = [Author.find(1), Author.find(2)]
1272
- Post.where(author: authors_array)
1273
- # SELECT "posts".* FROM "posts" WHERE "posts"."author_id" IN (1, 2)
870
+ *Yves Senn*
1274
871
 
1275
- `ActiveRecord::Relation` values find records using the same
1276
- query as `Post.where(author_id: Author.where(last_name: "Emde"))`
872
+ * Schema loading rake tasks (like `db:schema:load` and `db:setup`) maintain
873
+ the database connection to the current environment.
1277
874
 
1278
- Post.where(author: Author.where(last_name: "Emde"))
1279
- # SELECT "posts".* FROM "posts"
1280
- # WHERE "posts"."author_id" IN (
1281
- # SELECT "authors"."id" FROM "authors"
1282
- # WHERE "authors"."last_name" = 'Emde')
875
+ Fixes #16757.
1283
876
 
1284
- Polymorphic `belongs_to` associations will continue to be handled
1285
- appropriately, with the polymorphic `association_type` field added
1286
- to the query to match the base class of the value. This feature
1287
- previously only worked when the value was a single `ActveRecord::Base`.
877
+ *Joshua Cody*, *Yves Senn*
1288
878
 
1289
- class Post < ActiveRecord::Base
1290
- belongs_to :author, polymorphic: true
1291
- end
879
+ * MySQL: set the connection collation along with the charset.
1292
880
 
1293
- Post.where(author: Author.where(last_name: "Emde"))
1294
- # Generates a query similar to:
1295
- Post.where(author_id: Author.where(last_name: "Emde"), author_type: "Author")
881
+ Sets the connection collation to the database collation configured in
882
+ database.yml. Otherwise, `SET NAMES utf8mb4` will use the default
883
+ collation for that charset (utf8mb4_general_ci) when you may have chosen
884
+ a different collation, like utf8mb4_unicode_ci.
1296
885
 
1297
- *Martin Emde*
886
+ This only applies to literal string comparisons, not column values, so it
887
+ is unlikely to affect you.
1298
888
 
1299
- * Respect temporary option when dropping tables with MySQL.
889
+ *Jeremy Kemper*
1300
890
 
1301
- Normal DROP TABLE also works, but commits the transaction.
891
+ * `default_sequence_name` from the PostgreSQL adapter returns a `String`.
1302
892
 
1303
- drop_table :temporary_table, temporary: true
893
+ *Yves Senn*
1304
894
 
1305
- *Cody Cutrer*
895
+ * Fix a regression where whitespaces were stripped from DISTINCT queries in
896
+ PostgreSQL.
1306
897
 
1307
- * Add option to create tables from a query.
898
+ *Agis Anastasopoulos*
1308
899
 
1309
- create_table(:long_query, temporary: true,
1310
- as: "SELECT * FROM orders INNER JOIN line_items ON order_id=orders.id")
900
+ Fixes #16623.
1311
901
 
1312
- Generates:
902
+ * Fix has_many :through relation merging failing when dynamic conditions are
903
+ passed as a lambda with an arity of one.
1313
904
 
1314
- CREATE TEMPORARY TABLE long_query AS
1315
- SELECT * FROM orders INNER JOIN line_items ON order_id=orders.id
905
+ Fixes #16128.
1316
906
 
1317
- *Cody Cutrer*
907
+ *Agis Anastasopoulos*
1318
908
 
1319
- * `db:test:clone` and `db:test:prepare` must load Rails environment.
909
+ * Fix `Relation#exists?` to work with polymorphic associations.
1320
910
 
1321
- `db:test:clone` and `db:test:prepare` use `ActiveRecord::Base`. configurations,
1322
- so we need to load the Rails environment, otherwise the config wont be in place.
911
+ Fixes #15821.
1323
912
 
1324
- *arthurnn*
913
+ *Kassio Borges*
1325
914
 
1326
- * Use the right column to type cast grouped calculations with custom expressions.
915
+ * Currently, Active Record rescues any errors raised within
916
+ `after_rollback`/`after_create` callbacks and prints them to the logs.
917
+ Future versions of Rails will not rescue these errors anymore and
918
+ just bubble them up like the other callbacks.
1327
919
 
1328
- Fixes #13230.
920
+ This commit adds an opt-in flag to enable not rescuing the errors.
1329
921
 
1330
922
  Example:
1331
923
 
1332
- # Before
1333
- Account.group(:firm_name).sum('0.01 * credit_limit')
1334
- # => { '37signals' => '0.5' }
1335
-
1336
- # After
1337
- Account.group(:firm_name).sum('0.01 * credit_limit')
1338
- # => { '37signals' => 0.5 }
924
+ # Do not swallow errors in after_commit/after_rollback callbacks.
925
+ config.active_record.raise_in_transactional_callbacks = true
1339
926
 
1340
- *Paul Nikitochkin*
927
+ Fixes #13460.
1341
928
 
1342
- * Polymorphic `belongs_to` associations with the `touch: true` option set update the timestamps of
1343
- the old and new owner correctly when moved between owners of different types.
929
+ *arthurnn*
1344
930
 
1345
- Example:
931
+ * Fix an issue where custom accessor methods (such as those generated by
932
+ `enum`) with the same name as a global method are incorrectly overridden
933
+ when subclassing.
1346
934
 
1347
- class Rating < ActiveRecord::Base
1348
- belongs_to :rateable, polymorphic: true, touch: true
1349
- end
935
+ Fixes #16288.
1350
936
 
1351
- rating = Rating.create rateable: Song.find(1)
1352
- rating.update_attributes rateable: Book.find(2) # => timestamps of Song(1) and Book(2) are updated
937
+ *Godfrey Chan*
1353
938
 
1354
- *Severin Schoepke*
939
+ * `*_was` and `changes` now work correctly for in-place attribute changes as
940
+ well.
1355
941
 
1356
- * Improve formatting of migration exception messages: make them easier to read
1357
- with line breaks before/after, and improve the error for pending migrations.
942
+ *Sean Griffin*
1358
943
 
1359
- *John Bachir*
944
+ * Fix regression on `after_commit` that did not fire with nested transactions.
1360
945
 
1361
- * Fix `last` with `offset` to return the proper record instead of always the last one.
946
+ Fixes #16425.
1362
947
 
1363
- Example:
948
+ *arthurnn*
1364
949
 
1365
- Model.offset(4).last
1366
- # => returns the 4th record from the end.
950
+ * Do not try to write timestamps when a table has no timestamps columns.
1367
951
 
1368
- Fixes #7441.
952
+ Fixes #8813.
1369
953
 
1370
- *kostya*, *Lauro Caetano*
954
+ *Sergey Potapov*
1371
955
 
1372
- * `type_to_sql` returns a `String` for unmapped columns. This fixes an error
1373
- when using unmapped PostgreSQL array types.
956
+ * `index_exists?` with `:name` option does verify specified columns.
1374
957
 
1375
958
  Example:
1376
959
 
1377
- change_colum :table, :column, :bigint, array: true
960
+ add_index :articles, :title, name: "idx_title"
1378
961
 
1379
- Fixes #13146.
962
+ # Before:
963
+ index_exists? :articles, :title, name: "idx_title" # => `true`
964
+ index_exists? :articles, :body, name: "idx_title" # => `true`
1380
965
 
1381
- *Jens Fahnenbruck*, *Yves Senn*
966
+ # After:
967
+ index_exists? :articles, :title, name: "idx_title" # => `true`
968
+ index_exists? :articles, :body, name: "idx_title" # => `false`
1382
969
 
1383
- * Fix `QueryCache` to work with nested blocks, so that it will only clear the existing cache
1384
- after leaving the outer block instead of clearing it right after the inner block is finished.
970
+ *Yves Senn*, *Matthew Draper*
1385
971
 
1386
- *Vipul A M*
972
+ * `add_timestamps` and `t.timestamps` now require you to pass the `:null` option.
973
+ Not passing the option is deprecated but the default is still `null: true`.
974
+ With Rails 5 this will change to `null: false`.
1387
975
 
1388
- * The ERB in fixture files is no longer evaluated in the context of the main
1389
- object. Helper methods used by multiple fixtures should be defined on the
1390
- class object returned by `ActiveRecord::FixtureSet.context_class`.
976
+ *Sean Griffin*
1391
977
 
1392
- *Victor Costan*
978
+ * When calling `update_columns` on a record that is not persisted, the error
979
+ message now reflects whether that object is a new record or has been
980
+ destroyed.
1393
981
 
1394
- * Previously, the `has_one` macro incorrectly accepted the `counter_cache`
1395
- option, but never actually supported it. Now it will raise an `ArgumentError`
1396
- when using `has_one` with `counter_cache`.
982
+ *Lachlan Sylvester*
1397
983
 
1398
- *Godfrey Chan*
984
+ * Define `id_was` to get the previous value of the primary key.
1399
985
 
1400
- * Implement `rename_index` natively for MySQL >= 5.7.
986
+ Currently when we call `id_was` and we have a custom primary key name,
987
+ Active Record will return the current value of the primary key. This
988
+ makes it impossible to correctly do an update operation if you change the
989
+ id.
1401
990
 
1402
- *Cody Cutrer*
991
+ Fixes #16413.
1403
992
 
1404
- * Fix bug when validating the uniqueness of an aliased attribute.
993
+ *Rafael Mendonça França*
1405
994
 
1406
- Fixes #12402.
995
+ * Deprecate `DatabaseTasks.load_schema` to act on the current connection.
996
+ Use `.load_schema_current` instead. In the future `load_schema` will
997
+ require the `configuration` to act on as an argument.
1407
998
 
1408
- *Lauro Caetano*
999
+ *Yves Senn*
1000
+
1001
+ * Fix automatic maintaining test schema to properly handle sql structure
1002
+ schema format.
1003
+
1004
+ Fixes #15394.
1409
1005
 
1410
- * Update counter cache on a `has_many` relationship regardless of default scope.
1006
+ *Wojciech Wnętrzak*
1411
1007
 
1412
- Fixes #12952.
1008
+ * Fix type casting to Decimal from Float with large precision.
1413
1009
 
1414
- *Uku Taht*
1010
+ *Tomohiro Hashidate*
1415
1011
 
1416
- * `rename_index` adds the new index before removing the old one. This allows to
1417
- rename indexes on columns with a foreign key and prevents the following error:
1012
+ * Deprecate `Reflection#source_macro`
1418
1013
 
1419
- Cannot drop index 'index_engines_on_car_id': needed in a foreign key constraint
1014
+ `Reflection#source_macro` is no longer needed in Active Record
1015
+ source so it has been deprecated. Code that used `source_macro`
1016
+ was removed in #16353.
1420
1017
 
1421
- *Cody Cutrer*, *Yves Senn*
1018
+ *Eileen M. Uchtitelle*, *Aaron Patterson*
1422
1019
 
1423
- * Raise `ActiveRecord::RecordNotDestroyed` when a replaced child
1424
- marked with `dependent: destroy` fails to be destroyed.
1020
+ * No verbose backtrace by `db:drop` when database does not exist.
1425
1021
 
1426
- Fixes #12812.
1022
+ Fixes #16295.
1427
1023
 
1428
- *Brian Thomas Storti*
1024
+ *Kenn Ejima*
1429
1025
 
1430
- * Fix validation on uniqueness of empty association.
1026
+ * Add support for PostgreSQL JSONB.
1431
1027
 
1432
- *Evgeny Li*
1028
+ Example:
1433
1029
 
1434
- * Make `ActiveRecord::Relation#unscope` affect relations it is merged in to.
1030
+ create_table :posts do |t|
1031
+ t.jsonb :meta_data
1032
+ end
1435
1033
 
1436
- *Jon Leighton*
1034
+ *Philippe Creux*, *Chris Teague*
1437
1035
 
1438
- * Use strings to represent non-string `order_values`.
1036
+ * `db:purge` with MySQL respects `Rails.env`.
1439
1037
 
1440
1038
  *Yves Senn*
1441
1039
 
1442
- * Checks to see if the record contains the foreign key to set the inverse automatically.
1040
+ * `change_column_default :table, :column, nil` with PostgreSQL will issue a
1041
+ `DROP DEFAULT` instead of a `DEFAULT NULL` query.
1443
1042
 
1444
- *Edo Balvers*
1043
+ Fixes #16261.
1445
1044
 
1446
- * Added `ActiveRecord::Base.to_param` for convenient "pretty" URLs derived from a model's attribute or method.
1045
+ *Matthew Draper*, *Yves Senn*
1046
+
1047
+ * Allow to specify a type for the foreign key column in `references`
1048
+ and `add_reference`.
1447
1049
 
1448
1050
  Example:
1449
1051
 
1450
- class User < ActiveRecord::Base
1451
- to_param :name
1052
+ change_table :vehicle do |t|
1053
+ t.references :station, type: :uuid
1452
1054
  end
1453
1055
 
1454
- user = User.find_by(name: 'Fancy Pants')
1455
- user.id # => 123
1456
- user.to_param # => "123-fancy-pants"
1056
+ *Andrey Novikov*, *Łukasz Sarnacki*
1057
+
1058
+ * `create_join_table` removes a common prefix when generating the join table.
1059
+ This matches the existing behavior of HABTM associations.
1060
+
1061
+ Fixes #13683.
1457
1062
 
1458
- *Javan Makhmali*
1063
+ *Stefan Kanev*
1459
1064
 
1460
- * Added `ActiveRecord::Base.no_touching`, which allows ignoring touch on models.
1065
+ * Do not swallow errors on `compute_type` when having a bad `alias_method` on
1066
+ a class.
1067
+
1068
+ *arthurnn*
1069
+
1070
+ * PostgreSQL invalid `uuid` are convert to nil.
1071
+
1072
+ *Abdelkader Boudih*
1073
+
1074
+ * Restore 4.0 behavior for using serialize attributes with `JSON` as coder.
1075
+
1076
+ With 4.1.x, `serialize` started returning a string when `JSON` was passed as
1077
+ the second attribute. It will now return a hash as per previous versions.
1461
1078
 
1462
1079
  Example:
1463
1080
 
1464
- Post.no_touching do
1465
- Post.first.touch
1081
+ class Post < ActiveRecord::Base
1082
+ serialize :comment, JSON
1083
+ end
1084
+
1085
+ class Comment
1086
+ include ActiveModel::Model
1087
+ attr_accessor :category, :text
1466
1088
  end
1467
1089
 
1468
- *Sam Stephenson*, *Damien Mathieu*
1090
+ post = Post.create!
1091
+ post.comment = Comment.new(category: "Animals", text: "This is a comment about squirrels.")
1092
+ post.save!
1469
1093
 
1470
- * Prevent the counter cache from being decremented twice when destroying
1471
- a record on a `has_many :through` association.
1094
+ # 4.0
1095
+ post.comment # => {"category"=>"Animals", "text"=>"This is a comment about squirrels."}
1472
1096
 
1473
- Fixes #11079.
1097
+ # 4.1 before
1098
+ post.comment # => "#<Comment:0x007f80ab48ff98>"
1474
1099
 
1475
- *Dmitry Dedov*
1100
+ # 4.1 after
1101
+ post.comment # => {"category"=>"Animals", "text"=>"This is a comment about squirrels."}
1476
1102
 
1477
- * Unify boolean type casting for `MysqlAdapter` and `Mysql2Adapter`.
1478
- `type_cast` will return `1` for `true` and `0` for `false`.
1103
+ When using `JSON` as the coder in `serialize`, Active Record will use the
1104
+ new `ActiveRecord::Coders::JSON` coder which delegates its `dump/load` to
1105
+ `ActiveSupport::JSON.encode/decode`. This ensures special objects are dumped
1106
+ correctly using the `#as_json` hook.
1479
1107
 
1480
- Fixes #11119.
1108
+ To keep the previous behaviour, supply a custom coder instead
1109
+ ([example](https://gist.github.com/jenncoop/8c4142bbe59da77daa63)).
1481
1110
 
1482
- *Adam Williams*, *Yves Senn*
1111
+ Fixes #15594.
1483
1112
 
1484
- * Fix bug where `has_one` association record update result in crash, when replaced with itself.
1113
+ *Jenn Cooper*
1485
1114
 
1486
- Fixes #12834.
1115
+ * Do not use `RENAME INDEX` syntax for MariaDB 10.0.
1487
1116
 
1488
- *Denis Redozubov*, *Sergio Cambra*
1117
+ Fixes #15931.
1489
1118
 
1490
- * Log bind variables after they are type casted. This makes it more
1491
- transparent what values are actually sent to the database.
1119
+ *Jeff Browning*
1492
1120
 
1493
- irb(main):002:0> Event.find("im-no-integer")
1494
- # Before: ... WHERE "events"."id" = $1 LIMIT 1 [["id", "im-no-integer"]]
1495
- # After: ... WHERE "events"."id" = $1 LIMIT 1 [["id", 0]]
1121
+ * Calling `#empty?` on a `has_many` association would use the value from the
1122
+ counter cache if one exists.
1496
1123
 
1497
- *Yves Senn*
1124
+ *David Verhasselt*
1498
1125
 
1499
- * Fix uninitialized constant `TransactionState` error when `Marshall.load` is used on an Active Record result.
1126
+ * Fix the schema dump generated for tables without constraints and with
1127
+ primary key with default value of custom PostgreSQL function result.
1500
1128
 
1501
- Fixes #12790.
1129
+ Fixes #16111.
1502
1130
 
1503
- *Jason Ayre*
1131
+ *Andrey Novikov*
1504
1132
 
1505
- * `.unscope` now removes conditions specified in `default_scope`.
1133
+ * Fix the SQL generated when a `delete_all` is run on an association to not
1134
+ produce an `IN` statements.
1506
1135
 
1507
- *Jon Leighton*
1136
+ Before:
1508
1137
 
1509
- * Added `ActiveRecord::QueryMethods#rewhere` which will overwrite an existing, named where condition.
1138
+ UPDATE "categorizations" SET "category_id" = NULL WHERE
1139
+ "categorizations"."category_id" = 1 AND "categorizations"."id" IN (1, 2)
1510
1140
 
1511
- Examples:
1141
+ After:
1512
1142
 
1513
- Post.where(trashed: true).where(trashed: false) #=> WHERE `trashed` = 1 AND `trashed` = 0
1514
- Post.where(trashed: true).rewhere(trashed: false) #=> WHERE `trashed` = 0
1515
- Post.where(active: true).where(trashed: true).rewhere(trashed: false) #=> WHERE `active` = 1 AND `trashed` = 0
1143
+ UPDATE "categorizations" SET "category_id" = NULL WHERE
1144
+ "categorizations"."category_id" = 1
1516
1145
 
1517
- *DHH*
1146
+ *Eileen M. Uchitelle, Aaron Patterson*
1518
1147
 
1519
- * Extend `ActiveRecord::Base#cache_key` to take an optional list of timestamp attributes of which the highest will be used.
1148
+ * Avoid type casting boolean and `ActiveSupport::Duration` values to numeric
1149
+ values for string columns. Otherwise, in some database, the string column
1150
+ values will be coerced to a numeric allowing false or 0.seconds match any
1151
+ string starting with a non-digit.
1520
1152
 
1521
1153
  Example:
1522
1154
 
1523
- # last_reviewed_at will be used, if that's more recent than updated_at, or vice versa
1524
- Person.find(5).cache_key(:updated_at, :last_reviewed_at)
1155
+ App.where(apikey: false) # => SELECT * FROM users WHERE apikey = '0'
1525
1156
 
1526
- *DHH*
1157
+ *Dylan Thacker-Smith*
1527
1158
 
1528
- * Added `ActiveRecord::Base#enum` for declaring enum attributes where the values map to integers in the database, but can be queried by name.
1159
+ * Add a `:required` option to singular associations, providing a nicer
1160
+ API for presence validations on associations.
1529
1161
 
1530
- Example:
1162
+ *Sean Griffin*
1531
1163
 
1532
- class Conversation < ActiveRecord::Base
1533
- enum status: [:active, :archived]
1534
- end
1164
+ * Fix an error in `reset_counters` when associations have `select` scope.
1165
+ (Call to `count` generated invalid SQL.)
1535
1166
 
1536
- Conversation::STATUS # => { active: 0, archived: 1 }
1167
+ *Cade Truitt*
1537
1168
 
1538
- # conversation.update! status: 0
1539
- conversation.active!
1540
- conversation.active? # => true
1541
- conversation.status # => "active"
1169
+ * After a successful `reload`, `new_record?` is always false.
1542
1170
 
1543
- # conversation.update! status: 1
1544
- conversation.archived!
1545
- conversation.archived? # => true
1546
- conversation.status # => "archived"
1171
+ Fixes #12101.
1547
1172
 
1548
- # conversation.update! status: 1
1549
- conversation.status = :archived
1173
+ *Matthew Draper*
1550
1174
 
1551
- *DHH*
1175
+ * PostgreSQL renaming table doesn't attempt to rename non existent sequences.
1552
1176
 
1553
- * `ActiveRecord::Base#attribute_for_inspect` now truncates long arrays (more than 10 elements).
1177
+ *Abdelkader Boudih*
1554
1178
 
1555
- *Jan Bernacki*
1179
+ * Move 'dependent: :destroy' handling for `belongs_to`
1180
+ from `before_destroy` to `after_destroy` callback chain
1556
1181
 
1557
- * Allow for the name of the `schema_migrations` table to be configured.
1182
+ Fixes #12380.
1558
1183
 
1559
- *Jerad Phelps*
1184
+ *Ivan Antropov*
1560
1185
 
1561
- * Do not add to scope includes values from through associations.
1562
- Fixed bug when providing `includes` in through association scope, and fetching targets.
1186
+ * Detect in-place modifications on String attributes.
1563
1187
 
1564
- Example:
1188
+ Before this change, an attribute modified in-place had to be marked as
1189
+ changed in order for it to be persisted in the database. Now it is no longer
1190
+ required.
1565
1191
 
1566
- class Vendor < ActiveRecord::Base
1567
- has_many :relationships, -> { includes(:user) }
1568
- has_many :users, through: :relationships
1569
- end
1192
+ Before:
1570
1193
 
1571
- vendor = Vendor.first
1194
+ user = User.first
1195
+ user.name << ' Griffin'
1196
+ user.name_will_change!
1197
+ user.save
1198
+ user.reload.name # => "Sean Griffin"
1572
1199
 
1573
- # Before
1200
+ After:
1574
1201
 
1575
- vendor.users.to_a # => Raises exception: not found `:user` for `User`
1202
+ user = User.first
1203
+ user.name << ' Griffin'
1204
+ user.save
1205
+ user.reload.name # => "Sean Griffin"
1576
1206
 
1577
- # After
1207
+ *Sean Griffin*
1578
1208
 
1579
- vendor.users.to_a # => No exception is raised
1209
+ * Add `ActiveRecord::Base#validate!` that raises `RecordInvalid` if the record
1210
+ is invalid.
1580
1211
 
1581
- Fixes #12242, #9517, #10240.
1212
+ *Bogdan Gusiev*, *Marc Schütz*
1582
1213
 
1583
- *Paul Nikitochkin*
1214
+ * Support for adding and removing foreign keys. Foreign keys are now
1215
+ a part of `schema.rb`. This is supported by Mysql2Adapter, MysqlAdapter
1216
+ and PostgreSQLAdapter.
1584
1217
 
1585
- * Type cast json values on write, so that the value is consistent
1586
- with reading from the database.
1218
+ Many thanks to *Matthew Higgins* for laying the foundation with his work on
1219
+ [foreigner](https://github.com/matthuhiggins/foreigner).
1587
1220
 
1588
1221
  Example:
1589
1222
 
1590
- x = JsonDataType.new tags: {"string" => "foo", :symbol => :bar}
1223
+ # within your migrations:
1224
+ add_foreign_key :articles, :authors
1225
+ remove_foreign_key :articles, :authors
1591
1226
 
1592
- # Before:
1593
- x.tags # => {"string" => "foo", :symbol => :bar}
1227
+ *Yves Senn*
1594
1228
 
1595
- # After:
1596
- x.tags # => {"string" => "foo", "symbol" => "bar"}
1229
+ * Fix subtle bugs regarding attribute assignment on models with no primary
1230
+ key. `'id'` will no longer be part of the attributes hash.
1597
1231
 
1598
- *Severin Schoepke*
1232
+ *Sean Griffin*
1599
1233
 
1600
- * `ActiveRecord::Store` works together with PostgreSQL `hstore` columns.
1234
+ * Deprecate automatic counter caches on `has_many :through`. The behavior was
1235
+ broken and inconsistent.
1601
1236
 
1602
- Fixes #12452.
1237
+ *Sean Griffin*
1603
1238
 
1604
- *Yves Senn*
1239
+ * `preload` preserves readonly flag for associations.
1605
1240
 
1606
- * Fix bug where `ActiveRecord::Store` used a global `Hash` to keep track of
1607
- all registered `stored_attributes`. Now every subclass of
1608
- `ActiveRecord::Base` has it's own `Hash`.
1241
+ See #15853.
1609
1242
 
1610
1243
  *Yves Senn*
1611
1244
 
1612
- * Save `has_one` association when primary key is manually set.
1245
+ * Assume numeric types have changed if they were assigned to a value that
1246
+ would fail numericality validation, regardless of the old value. Previously
1247
+ this would only occur if the old value was 0.
1613
1248
 
1614
- Fixes #12302.
1249
+ Example:
1615
1250
 
1616
- *Lauro Caetano*
1251
+ model = Model.create!(number: 5)
1252
+ model.number = '5wibble'
1253
+ model.number_changed? # => true
1617
1254
 
1618
- * Allow any version of BCrypt when using `has_secure_password`.
1255
+ Fixes #14731.
1619
1256
 
1620
- *Mike Perham*
1257
+ *Sean Griffin*
1621
1258
 
1622
- * Sub-query generated for `Relation` passed as array condition did not take in account
1623
- bind values and have invalid syntax.
1259
+ * `reload` no longer merges with the existing attributes.
1260
+ The attribute hash is fully replaced. The record is put into the same state
1261
+ as it would be with `Model.find(model.id)`.
1624
1262
 
1625
- Generate sub-query with inline bind values.
1263
+ *Sean Griffin*
1626
1264
 
1627
- Fixes #12586.
1265
+ * The object returned from `select_all` must respond to `column_types`.
1266
+ If this is not the case a `NoMethodError` is raised.
1628
1267
 
1629
- *Paul Nikitochkin*
1268
+ *Sean Griffin*
1630
1269
 
1631
- * Fix a bug where rake db:structure:load crashed when the path contained
1632
- spaces.
1270
+ * Detect in-place modifications of PG array types
1633
1271
 
1634
- *Kevin Mook*
1272
+ *Sean Griffin*
1635
1273
 
1636
- * `ActiveRecord::QueryMethods#unscope` unscopes negative equality
1274
+ * Add `bin/rake db:purge` task to empty the current database.
1637
1275
 
1638
- Allows you to call `#unscope` on a relation with negative equality
1639
- operators, i.e. `Arel::Nodes::NotIn` and `Arel::Nodes::NotEqual` that have
1640
- been generated through the use of `where.not`.
1276
+ *Yves Senn*
1641
1277
 
1642
- *Eric Hankins*
1278
+ * Deprecate `serialized_attributes` without replacement.
1643
1279
 
1644
- * Raise an exception when model without primary key calls `.find_with_ids`.
1280
+ *Sean Griffin*
1645
1281
 
1646
- *Shimpei Makimoto*
1282
+ * Correctly extract IPv6 addresses from `DATABASE_URI`: the square brackets
1283
+ are part of the URI structure, not the actual host.
1647
1284
 
1648
- * Make `Relation#empty?` use `exists?` instead of `count`.
1285
+ Fixes #15705.
1649
1286
 
1650
- *Szymon Nowak*
1287
+ *Andy Bakun*, *Aaron Stone*
1651
1288
 
1652
- * `rake db:structure:dump` no longer crashes when the port was specified as `Fixnum`.
1289
+ * Ensure both parent IDs are set on join records when both sides of a
1290
+ through association are new.
1653
1291
 
1654
- *Kenta Okamoto*
1292
+ *Sean Griffin*
1655
1293
 
1656
- * `NullRelation#pluck` takes a list of columns
1294
+ * `ActiveRecord::Dirty` now detects in-place changes to mutable values.
1295
+ Serialized attributes on ActiveRecord models will no longer save when
1296
+ unchanged.
1657
1297
 
1658
- The method signature in `NullRelation` was updated to mimic that in
1659
- `Calculations`.
1298
+ Fixes #8328.
1660
1299
 
1661
- *Derek Prior*
1300
+ *Sean Griffin*
1662
1301
 
1663
- * `scope_chain` should not be mutated for other reflections.
1302
+ * `Pluck` now works when selecting columns from different tables with the same
1303
+ name.
1664
1304
 
1665
- Currently `scope_chain` uses same array for building different
1666
- `scope_chain` for different associations. During processing
1667
- these arrays are sometimes mutated and because of in-place
1668
- mutation the changed `scope_chain` impacts other reflections.
1305
+ Fixes #15649.
1669
1306
 
1670
- Fix is to dup the value before adding to the `scope_chain`.
1307
+ *Sean Griffin*
1671
1308
 
1672
- Fixes #3882.
1309
+ * Remove `cache_attributes` and friends. All attributes are cached.
1673
1310
 
1674
- *Neeraj Singh*
1311
+ *Sean Griffin*
1675
1312
 
1676
- * Prevent the inversed association from being reloaded on save.
1313
+ * Remove deprecated method `ActiveRecord::Base.quoted_locking_column`.
1677
1314
 
1678
- Fixes #9499.
1315
+ *Akshay Vishnoi*
1679
1316
 
1680
- *Dmitry Polushkin*
1317
+ * `ActiveRecord::FinderMethods.find` with block can handle proc parameter as
1318
+ `Enumerable#find` does.
1681
1319
 
1682
- * Generate subquery for `Relation` if it passed as array condition for `where`
1683
- method.
1320
+ Fixes #15382.
1684
1321
 
1685
- Example:
1322
+ *James Yang*
1686
1323
 
1687
- # Before
1688
- Blog.where('id in (?)', Blog.where(id: 1))
1689
- # => SELECT "blogs".* FROM "blogs" WHERE "blogs"."id" = 1
1690
- # => SELECT "blogs".* FROM "blogs" WHERE (id IN (1))
1324
+ * Make timezone aware attributes work with PostgreSQL array columns.
1691
1325
 
1692
- # After
1693
- Blog.where('id in (?)', Blog.where(id: 1).select(:id))
1694
- # => SELECT "blogs".* FROM "blogs"
1695
- # WHERE "blogs"."id" IN (SELECT "blogs"."id" FROM "blogs" WHERE "blogs"."id" = 1)
1326
+ Fixes #13402.
1696
1327
 
1697
- Fixes #12415.
1328
+ *Kuldeep Aggarwal*, *Sean Griffin*
1698
1329
 
1699
- *Paul Nikitochkin*
1330
+ * `ActiveRecord::SchemaMigration` has no primary key regardless of the
1331
+ `primary_key_prefix_type` configuration.
1700
1332
 
1701
- * For missed association exception message
1702
- which is raised in `ActiveRecord::Associations::Preloader` class
1703
- added owner record class name in order to simplify to find problem code.
1333
+ Fixes #15051.
1704
1334
 
1705
- *Paul Nikitochkin*
1335
+ *JoseLuis Torres*, *Yves Senn*
1706
1336
 
1707
- * `has_and_belongs_to_many` is now transparently implemented in terms of
1708
- `has_many :through`. Behavior should remain the same, if not, it is a bug.
1337
+ * `rake db:migrate:status` works with legacy migration numbers like `00018_xyz.rb`.
1709
1338
 
1710
- * `create_savepoint`, `rollback_to_savepoint` and `release_savepoint` accept
1711
- a savepoint name.
1339
+ Fixes #15538.
1712
1340
 
1713
1341
  *Yves Senn*
1714
1342
 
1715
- * Make `next_migration_number` accessible for third party generators.
1343
+ * Baseclass becomes! subclass.
1716
1344
 
1717
- *Yves Senn*
1345
+ Before this change, a record which changed its STI type, could not be
1346
+ updated.
1718
1347
 
1719
- * Objects instantiated using a null relationship will now retain the
1720
- attributes of the where clause.
1348
+ Fixes #14785.
1721
1349
 
1722
- Fixes #11676, #11675, #11376.
1350
+ *Matthew Draper*, *Earl St Sauver*, *Edo Balvers*
1723
1351
 
1724
- *Paul Nikitochkin*, *Peter Brown*, *Nthalk*
1352
+ * Remove deprecated `ActiveRecord::Migrator.proper_table_name`. Use the
1353
+ `proper_table_name` instance method on `ActiveRecord::Migration` instead.
1725
1354
 
1726
- * Fixed `ActiveRecord::Associations::CollectionAssociation#find`
1727
- when using `has_many` association with `:inverse_of` and finding an array of one element,
1728
- it should return an array of one element too.
1355
+ *Akshay Vishnoi*
1729
1356
 
1730
- *arthurnn*
1357
+ * Fix regression on eager loading association based on SQL query rather than
1358
+ existing column.
1731
1359
 
1732
- * Callbacks on has_many should access the in memory parent if a inverse_of is set.
1360
+ Fixes #15480.
1733
1361
 
1734
- *arthurnn*
1362
+ *Lauro Caetano*, *Carlos Antonio da Silva*
1735
1363
 
1736
- * `ActiveRecord::ConnectionAdapters.string_to_time` respects
1737
- string with timezone (e.g. Wed, 04 Sep 2013 20:30:00 JST).
1364
+ * Deprecate returning `nil` from `column_for_attribute` when no column exists.
1365
+ It will return a null object in Rails 5.0
1738
1366
 
1739
- Fixes #12278.
1367
+ *Sean Griffin*
1740
1368
 
1741
- *kennyj*
1369
+ * Implemented `ActiveRecord::Base#pretty_print` to work with PP.
1742
1370
 
1743
- * Calling `update_attributes` will now throw an `ArgumentError` whenever it
1744
- gets a `nil` argument. More specifically, it will throw an error if the
1745
- argument that it gets passed does not respond to to `stringify_keys`.
1371
+ *Ethan*
1746
1372
 
1747
- Example:
1373
+ * Preserve type when dumping PostgreSQL point, bit, bit varying and money
1374
+ columns.
1748
1375
 
1749
- @my_comment.update_attributes(nil) # => raises ArgumentError
1376
+ *Yves Senn*
1750
1377
 
1751
- *John Wang*
1378
+ * New records remain new after YAML serialization.
1752
1379
 
1753
- * Deprecate `quoted_locking_column` method, which isn't used anywhere.
1380
+ *Sean Griffin*
1754
1381
 
1755
- *kennyj*
1382
+ * PostgreSQL support default values for enum types. Fixes #7814.
1756
1383
 
1757
- * Migration dump UUID default functions to schema.rb.
1384
+ *Yves Senn*
1758
1385
 
1759
- Fixes #10751.
1386
+ * PostgreSQL `default_sequence_name` respects schema. Fixes #7516.
1760
1387
 
1761
- *kennyj*
1388
+ *Yves Senn*
1762
1389
 
1763
- * Fixed a bug in `ActiveRecord::Associations::CollectionAssociation#find_by_scan`
1764
- when using `has_many` association with `:inverse_of` option and UUID primary key.
1390
+ * Fix `columns_for_distinct` of PostgreSQL adapter to work correctly
1391
+ with orders without sort direction modifiers.
1765
1392
 
1766
- Fixes #10450.
1393
+ *Nikolay Kondratyev*
1767
1394
 
1768
- *kennyj*
1395
+ * PostgreSQL `reset_pk_sequence!` respects schemas. Fixes #14719.
1769
1396
 
1770
- * Fix: joins association, with defined in the scope block constraints by using several
1771
- where constraints and at least of them is not `Arel::Nodes::Equality`,
1772
- generates invalid SQL expression.
1397
+ *Yves Senn*
1773
1398
 
1774
- Fixes #11963.
1399
+ * Keep PostgreSQL `hstore` and `json` attributes as `Hash` in `@attributes`.
1400
+ Fixes duplication in combination with `store_accessor`.
1775
1401
 
1776
- *Paul Nikitochkin*
1402
+ Fixes #15369.
1777
1403
 
1778
- * `CollectionAssociation#first`/`#last` (e.g. `has_many`) use a `LIMIT`ed
1779
- query to fetch results rather than loading the entire collection.
1404
+ *Yves Senn*
1780
1405
 
1781
- *Lann Martin*
1406
+ * `rake railties:install:migrations` respects the order of railties.
1782
1407
 
1783
- * Make possible to run SQLite rake tasks without the `Rails` constant defined.
1408
+ *Arun Agrawal*
1784
1409
 
1785
- *Damien Mathieu*
1410
+ * Fix redefine a `has_and_belongs_to_many` inside inherited class
1411
+ Fixing regression case, where redefining the same `has_and_belongs_to_many`
1412
+ definition into a subclass would raise.
1786
1413
 
1787
- * Allow Relation#from to accept other relations with bind values.
1414
+ Fixes #14983.
1788
1415
 
1789
- *Ryan Wallace*
1416
+ *arthurnn*
1790
1417
 
1791
- * Fix inserts with prepared statements disabled.
1418
+ * Fix `has_and_belongs_to_many` public reflection.
1419
+ When defining a `has_and_belongs_to_many`, internally we convert that to two has_many.
1420
+ But as `reflections` is a public API, people expect to see the right macro.
1792
1421
 
1793
- Fixes #12023.
1422
+ Fixes #14682.
1794
1423
 
1795
- *Rafael Mendonça França*
1424
+ *arthurnn*
1796
1425
 
1797
- * Setting a has_one association on a new record no longer causes an empty
1798
- transaction.
1426
+ * Fix serialization for records with an attribute named `format`.
1799
1427
 
1800
- *Dylan Thacker-Smith*
1428
+ Fixes #15188.
1801
1429
 
1802
- * Fix `AR::Relation#merge` sometimes failing to preserve `readonly(false)` flag.
1430
+ *Godfrey Chan*
1803
1431
 
1804
- *thedarkone*
1432
+ * When a `group` is set, `sum`, `size`, `average`, `minimum` and `maximum`
1433
+ on a NullRelation should return a Hash.
1805
1434
 
1806
- * Re-use `order` argument pre-processing for `reorder`.
1435
+ *Kuldeep Aggarwal*
1807
1436
 
1808
- *Paul Nikitochkin*
1437
+ * Fix serialized fields returning serialized data after being updated with
1438
+ `update_column`.
1809
1439
 
1810
- * Fix PredicateBuilder so polymorphic association keys in `where` clause can
1811
- accept objects other than direct descendants of `ActiveRecord::Base` (decorated
1812
- models, for example).
1440
+ *Simon Hørup Eskildsen*
1813
1441
 
1814
- *Mikhail Dieterle*
1442
+ * Fix polymorphic eager loading when using a String as foreign key.
1815
1443
 
1816
- * PostgreSQL adapter recognizes negative money values formatted with
1817
- parentheses (eg. `($1.25) # => -1.25`)).
1818
- Fixes #11899.
1444
+ Fixes #14734.
1819
1445
 
1820
- *Yves Senn*
1446
+ *Lauro Caetano*
1821
1447
 
1822
- * Stop interpreting SQL 'string' columns as :string type because there is no
1823
- common STRING datatype in SQL.
1448
+ * Change belongs_to touch to be consistent with timestamp updates
1824
1449
 
1825
- *Ben Woosley*
1450
+ If a model is set up with a belongs_to: touch relationship the parent
1451
+ record will only be touched if the record was modified. This makes it
1452
+ consistent with timestamp updating on the record itself.
1826
1453
 
1827
- * `ActiveRecord::FinderMethods#exists?` returns `true`/`false` in all cases.
1454
+ *Brock Trappitt*
1828
1455
 
1829
- *Xavier Noria*
1456
+ * Fix the inferred table name of a `has_and_belongs_to_many` auxiliary
1457
+ table inside a schema.
1830
1458
 
1831
- * Assign inet/cidr attribute with `nil` value for invalid address.
1459
+ Fixes #14824.
1832
1460
 
1833
- Example:
1461
+ *Eric Chahin*
1834
1462
 
1835
- record = User.new
1836
- record.logged_in_from_ip # is type of an inet or a cidr
1463
+ * Remove unused `:timestamp` type. Transparently alias it to `:datetime`
1464
+ in all cases. Fixes inconsistencies when column types are sent outside of
1465
+ `ActiveRecord`, such as for XML Serialization.
1837
1466
 
1838
- # Before:
1839
- record.logged_in_from_ip = 'bad ip address' # raise exception
1467
+ *Sean Griffin*
1840
1468
 
1841
- # After:
1842
- record.logged_in_from_ip = 'bad ip address' # do not raise exception
1843
- record.logged_in_from_ip # => nil
1844
- record.logged_in_from_ip_before_type_cast # => 'bad ip address'
1469
+ * Fix bug that added `table_name_prefix` and `table_name_suffix` to
1470
+ extension names in PostgreSQL when migrating.
1845
1471
 
1846
- *Paul Nikitochkin*
1472
+ *Joao Carlos*
1847
1473
 
1848
- * `add_to_target` now accepts a second optional `skip_callbacks` argument
1474
+ * The `:index` option in migrations, which previously was only available for
1475
+ `references`, now works with any column types.
1849
1476
 
1850
- If truthy, it will skip the :before_add and :after_add callbacks.
1477
+ *Marc Schütz*
1851
1478
 
1852
- *Ben Woosley*
1479
+ * Add support for counter name to be passed as parameter on `CounterCache::ClassMethods#reset_counters`.
1853
1480
 
1854
- * Fix interactions between `:before_add` callbacks and nested attributes
1855
- assignment of `has_many` associations, when the association was not
1856
- yet loaded:
1481
+ *jnormore*
1857
1482
 
1858
- - A `:before_add` callback was being called when a nested attributes
1859
- assignment assigned to an existing record.
1483
+ * Restrict deletion of record when using `delete_all` with `uniq`, `group`, `having`
1484
+ or `offset`.
1860
1485
 
1861
- - Nested Attributes assignment did not affect the record in the
1862
- association target when a `:before_add` callback triggered the
1863
- loading of the association
1486
+ In these cases the generated query ignored them and that caused unintended
1487
+ records to be deleted.
1864
1488
 
1865
- *Jörg Schray*
1489
+ Fixes #11985.
1866
1490
 
1867
- * Allow enable_extension migration method to be revertible.
1491
+ *Leandro Facchinetti*
1868
1492
 
1869
- *Eric Tipton*
1493
+ * Floats with limit >= 25 that get turned into doubles in MySQL no longer have
1494
+ their limit dropped from the schema.
1870
1495
 
1871
- * Type cast hstore values on write, so that the value is consistent
1872
- with reading from the database.
1496
+ Fixes #14135.
1873
1497
 
1874
- Example:
1498
+ *Aaron Nelson*
1875
1499
 
1876
- x = Hstore.new tags: {"bool" => true, "number" => 5}
1500
+ * Fix how to calculate associated class name when using namespaced `has_and_belongs_to_many`
1501
+ association.
1877
1502
 
1878
- # Before:
1879
- x.tags # => {"bool" => true, "number" => 5}
1503
+ Fixes #14709.
1880
1504
 
1881
- # After:
1882
- x.tags # => {"bool" => "true", "number" => "5"}
1505
+ *Kassio Borges*
1883
1506
 
1884
- *Yves Senn* , *Severin Schoepke*
1507
+ * `ActiveRecord::Relation::Merger#filter_binds` now compares equivalent symbols and
1508
+ strings in column names as equal.
1885
1509
 
1886
- * Fix multidimensional PostgreSQL arrays containing non-string items.
1510
+ This fixes a rare case in which more bind values are passed than there are
1511
+ placeholders for them in the generated SQL statement, which can make PostgreSQL
1512
+ throw a `StatementInvalid` exception.
1887
1513
 
1888
- *Yves Senn*
1514
+ *Nat Budin*
1889
1515
 
1890
- * Fixes bug when using includes combined with select, the select statement was overwritten.
1516
+ * Fix `stored_attributes` to correctly merge the details of stored
1517
+ attributes defined in parent classes.
1891
1518
 
1892
- Fixes #11773.
1519
+ Fixes #14672.
1893
1520
 
1894
- *Edo Balvers*
1521
+ *Brad Bennett*, *Jessica Yao*, *Lakshmi Parthasarathy*
1895
1522
 
1896
- * Load fixtures from linked folders.
1523
+ * `change_column_default` allows `[]` as argument to `change_column_default`.
1897
1524
 
1898
- *Kassio Borges*
1525
+ Fixes #11586.
1899
1526
 
1900
- * Create a directory for sqlite3 file if not present on the system.
1527
+ *Yves Senn*
1901
1528
 
1902
- *Richard Schneeman*
1529
+ * Handle `name` and `"char"` column types in the PostgreSQL adapter.
1903
1530
 
1904
- * Removed redundant override of `xml` column definition for PostgreSQL,
1905
- in order to use `xml` column type instead of `text`.
1531
+ `name` and `"char"` are special character types used internally by
1532
+ PostgreSQL and are used by internal system catalogs. These field types
1533
+ can sometimes show up in structure-sniffing queries that feature internal system
1534
+ structures or with certain PostgreSQL extensions.
1906
1535
 
1907
- *Paul Nikitochkin*, *Michael Nikitochkin*
1536
+ *J Smith*, *Yves Senn*
1908
1537
 
1909
- * Revert `ActiveRecord::Relation#order` change that make new order
1910
- prepend the old one.
1538
+ * Fix `PostgreSQLAdapter::OID::Float#type_cast` to convert Infinity and
1539
+ NaN PostgreSQL values into a native Ruby `Float::INFINITY` and `Float::NAN`
1911
1540
 
1912
1541
  Before:
1913
1542
 
1914
- User.order("name asc").order("created_at desc")
1915
- # SELECT * FROM users ORDER BY created_at desc, name asc
1543
+ Point.create(value: 1.0/0)
1544
+ Point.last.value # => 0.0
1916
1545
 
1917
1546
  After:
1918
1547
 
1919
- User.order("name asc").order("created_at desc")
1920
- # SELECT * FROM users ORDER BY name asc, created_at desc
1548
+ Point.create(value: 1.0/0)
1549
+ Point.last.value # => Infinity
1921
1550
 
1922
- This also affects order defined in `default_scope` or any kind of associations.
1551
+ *Innokenty Mikhailov*
1923
1552
 
1924
- * Add ability to define how a class is converted to Arel predicates.
1925
- For example, adding a very vendor specific regex implementation:
1553
+ * Allow the PostgreSQL adapter to handle bigserial primary key types again.
1926
1554
 
1927
- regex_handler = proc do |column, value|
1928
- Arel::Nodes::InfixOperation.new('~', column, value.source)
1929
- end
1930
- ActiveRecord::PredicateBuilder.register_handler(Regexp, regex_handler)
1555
+ Fixes #10410.
1931
1556
 
1932
- *Sean Griffin & @joannecheng*
1557
+ *Patrick Robertson*
1933
1558
 
1934
- * Don't allow `quote_value` to be called without a column.
1559
+ * Deprecate joining, eager loading and preloading of instance dependent
1560
+ associations without replacement. These operations happen before instances
1561
+ are created. The current behavior is unexpected and can result in broken
1562
+ behavior.
1935
1563
 
1936
- Some adapters require column information to do their job properly.
1937
- By enforcing the provision of the column for this internal method
1938
- we ensure that those using adapters that require column information
1939
- will always get the proper behavior.
1564
+ Fixes #15024.
1940
1565
 
1941
- *Ben Woosley*
1566
+ *Yves Senn*
1942
1567
 
1943
- * When using optimistic locking, `update` was not passing the column to `quote_value`
1944
- to allow the connection adapter to properly determine how to quote the value. This was
1945
- affecting certain databases that use specific column types.
1568
+ * Fix `has_and_belongs_to_many` CollectionAssociation size calculations.
1946
1569
 
1947
- Fixes #6763.
1570
+ `has_and_belongs_to_many` should fall back to using the normal CollectionAssociation's
1571
+ size calculation if the collection is not cached or loaded.
1948
1572
 
1949
- *Alfred Wong*
1573
+ Fixes #14913, #14914.
1950
1574
 
1951
- * rescue from all exceptions in `ConnectionManagement#call`
1575
+ *Fred Wu*
1952
1576
 
1953
- Fixes #11497.
1577
+ * Return a non zero status when running `rake db:migrate:status` and migration table does
1578
+ not exist.
1954
1579
 
1955
- As `ActiveRecord::ConnectionAdapters::ConnectionManagement` middleware does
1956
- not rescue from Exception (but only from StandardError), the Connection
1957
- Pool quickly runs out of connections when multiple erroneous Requests come
1958
- in right after each other.
1580
+ *Paul B.*
1959
1581
 
1960
- Rescuing from all exceptions and not just StandardError, fixes this
1961
- behaviour.
1582
+ * Add support for module-level `table_name_suffix` in models.
1962
1583
 
1963
- *Vipul A M*
1584
+ This makes `table_name_suffix` work the same way as `table_name_prefix` when
1585
+ using namespaced models.
1964
1586
 
1965
- * `change_column` for PostgreSQL adapter respects the `:array` option.
1587
+ *Jenner LaFave*
1966
1588
 
1967
- *Yves Senn*
1589
+ * Revert the behaviour of `ActiveRecord::Relation#join` changed through 4.0 => 4.1 to 4.0.
1968
1590
 
1969
- * Remove deprecation warning from `attribute_missing` for attributes that are columns.
1591
+ In 4.1.0 `Relation#join` is delegated to `Arel#SelectManager`.
1592
+ In 4.0 series it is delegated to `Array#join`.
1970
1593
 
1971
- *Arun Agrawal*
1594
+ *Bogdan Gusiev*
1972
1595
 
1973
- * Remove extra decrement of transaction deep level.
1596
+ * Log nil binary column values correctly.
1974
1597
 
1975
- Fixes #4566.
1598
+ When an object with a binary column is updated with a nil value
1599
+ in that column, the SQL logger would throw an exception when trying
1600
+ to log that nil value. This only occurs when updating a record
1601
+ that already has a non-nil value in that column since an initial nil
1602
+ value isn't included in the SQL anyway (at least, when dirty checking
1603
+ is enabled.) The column's new value will now be logged as `<NULL binary data>`
1604
+ to parallel the existing `<N bytes of binary data>` for non-nil values.
1976
1605
 
1977
- *Paul Nikitochkin*
1606
+ *James Coleman*
1978
1607
 
1979
- * Reset @column_defaults when assigning `locking_column`.
1980
- We had a potential problem. For example:
1608
+ * Rails will now pass a custom validation context through to autosave associations
1609
+ in order to validate child associations with the same context.
1981
1610
 
1982
- class Post < ActiveRecord::Base
1983
- self.column_defaults # if we call this unintentionally before setting locking_column ...
1984
- self.locking_column = 'my_locking_column'
1985
- end
1611
+ Fixes #13854.
1986
1612
 
1987
- Post.column_defaults["my_locking_column"]
1988
- => nil # expected value is 0 !
1613
+ *Eric Chahin*, *Aaron Nelson*, *Kevin Casey*
1989
1614
 
1990
- *kennyj*
1615
+ * Stringify all variables keys of MySQL connection configuration.
1991
1616
 
1992
- * Remove extra select and update queries on save/touch/destroy ActiveRecord model
1993
- with belongs to reflection with option `touch: true`.
1617
+ When `sql_mode` variable for MySQL adapters set in configuration as `String`
1618
+ was ignored and overwritten by strict mode option.
1994
1619
 
1995
- Fixes #11288.
1620
+ Fixes #14895.
1996
1621
 
1997
1622
  *Paul Nikitochkin*
1998
1623
 
1999
- * Remove deprecated nil-passing to the following `SchemaCache` methods:
2000
- `primary_keys`, `tables`, `columns` and `columns_hash`.
1624
+ * Ensure SQLite3 statements are closed on errors.
2001
1625
 
2002
- *Yves Senn*
1626
+ Fixes #13631.
2003
1627
 
2004
- * Remove deprecated block filter from `ActiveRecord::Migrator#migrate`.
1628
+ *Timur Alperovich*
2005
1629
 
2006
- *Yves Senn*
1630
+ * Give `ActiveRecord::PredicateBuilder` private methods the privacy they deserve.
2007
1631
 
2008
- * Remove deprecated String constructor from `ActiveRecord::Migrator`.
1632
+ *Hector Satre*
2009
1633
 
2010
- *Yves Senn*
1634
+ * When using a custom `join_table` name on a `habtm`, rails was not saving it
1635
+ on Reflections. This causes a problem when rails loads fixtures, because it
1636
+ uses the reflections to set database with fixtures.
2011
1637
 
2012
- * Remove deprecated `scope` use without passing a callable object.
1638
+ Fixes #14845.
2013
1639
 
2014
- *Arun Agrawal*
1640
+ *Kassio Borges*
2015
1641
 
2016
- * Remove deprecated `transaction_joinable=` in favor of `begin_transaction`
2017
- with `:joinable` option.
1642
+ * Reset the cache when modifying a Relation with cached Arel.
1643
+ Additionally display a warning message to make the user aware.
2018
1644
 
2019
- *Arun Agrawal*
1645
+ *Yves Senn*
2020
1646
 
2021
- * Remove deprecated `decrement_open_transactions`.
1647
+ * PostgreSQL should internally use `:datetime` consistently for TimeStamp. Assures
1648
+ different spellings of timestamps are treated the same.
2022
1649
 
2023
- *Arun Agrawal*
1650
+ Example:
2024
1651
 
2025
- * Remove deprecated `increment_open_transactions`.
1652
+ mytimestamp.simplified_type('timestamp without time zone')
1653
+ # => :datetime
1654
+ mytimestamp.simplified_type('timestamp(6) without time zone')
1655
+ # => also :datetime (previously would be :timestamp)
2026
1656
 
2027
- *Arun Agrawal*
1657
+ See #14513.
2028
1658
 
2029
- * Remove deprecated `PostgreSQLAdapter#outside_transaction?`
2030
- method. You can use `#transaction_open?` instead.
1659
+ *Jefferson Lai*
2031
1660
 
2032
- *Yves Senn*
1661
+ * `ActiveRecord::Base.no_touching` no longer triggers callbacks or start empty transactions.
2033
1662
 
2034
- * Remove deprecated `ActiveRecord::Fixtures.find_table_name` in favor of
2035
- `ActiveRecord::Fixtures.default_fixture_model_name`.
1663
+ Fixes #14841.
1664
+
1665
+ *Lucas Mazza*
2036
1666
 
2037
- *Vipul A M*
1667
+ * Fix name collision with `Array#select!` with `Relation#select!`.
2038
1668
 
2039
- * Removed deprecated `columns_for_remove` from `SchemaStatements`.
1669
+ Fixes #14752.
2040
1670
 
2041
- *Neeraj Singh*
1671
+ *Earl St Sauver*
2042
1672
 
2043
- * Remove deprecated `SchemaStatements#distinct`.
1673
+ * Fix unexpected behavior for `has_many :through` associations going through
1674
+ a scoped `has_many`.
2044
1675
 
2045
- *Francesco Rodriguez*
1676
+ If a `has_many` association is adjusted using a scope, and another
1677
+ `has_many :through` uses this association, then the scope adjustment is
1678
+ unexpectedly neglected.
2046
1679
 
2047
- * Move deprecated `ActiveRecord::TestCase` into the rails test
2048
- suite. The class is no longer public and is only used for internal
2049
- Rails tests.
1680
+ Fixes #14537.
2050
1681
 
2051
- *Yves Senn*
1682
+ *Jan Habermann*
2052
1683
 
2053
- * Removed support for deprecated option `:restrict` for `:dependent`
2054
- in associations.
1684
+ * `@destroyed` should always be set to `false` when an object is duped.
2055
1685
 
2056
- *Neeraj Singh*
1686
+ *Kuldeep Aggarwal*
2057
1687
 
2058
- * Removed support for deprecated `delete_sql` in associations.
1688
+ * Enable `has_many` associations to support irregular inflections.
2059
1689
 
2060
- *Neeraj Singh*
1690
+ Fixes #8928.
2061
1691
 
2062
- * Removed support for deprecated `insert_sql` in associations.
1692
+ *arthurnn*, *Javier Goizueta*
2063
1693
 
2064
- *Neeraj Singh*
1694
+ * Fix `count` used with a grouping not returning a Hash.
2065
1695
 
2066
- * Removed support for deprecated `finder_sql` in associations.
1696
+ Fixes #14721.
2067
1697
 
2068
- *Neeraj Singh*
1698
+ *Eric Chahin*
2069
1699
 
2070
- * Support array as root element in JSON fields.
1700
+ * `sanitize_sql_like` helper method to escape a string for safe use in an SQL
1701
+ LIKE statement.
2071
1702
 
2072
- *Alexey Noskov & Francesco Rodriguez*
1703
+ Example:
2073
1704
 
2074
- * Removed support for deprecated `counter_sql` in associations.
1705
+ class Article
1706
+ def self.search(term)
1707
+ where("title LIKE ?", sanitize_sql_like(term))
1708
+ end
1709
+ end
2075
1710
 
2076
- *Neeraj Singh*
1711
+ Article.search("20% _reduction_")
1712
+ # => Query looks like "... title LIKE '20\% \_reduction\_' ..."
2077
1713
 
2078
- * Do not invoke callbacks when `delete_all` is called on collection.
1714
+ *Rob Gilson*, *Yves Senn*
2079
1715
 
2080
- Method `delete_all` should not be invoking callbacks and this
2081
- feature was deprecated in Rails 4.0. This is being removed.
2082
- `delete_all` will continue to honor the `:dependent` option. However
2083
- if `:dependent` value is `:destroy` then the `:delete_all` deletion
2084
- strategy for that collection will be applied.
1716
+ * Do not quote uuid default value on `change_column`.
2085
1717
 
2086
- User can also force a deletion strategy by passing parameter to
2087
- `delete_all`. For example you can do `@post.comments.delete_all(:nullify)`.
1718
+ Fixes #14604.
2088
1719
 
2089
- *Neeraj Singh*
1720
+ *Eric Chahin*
2090
1721
 
2091
- * Calling default_scope without a proc will now raise `ArgumentError`.
1722
+ * The comparison between `Relation` and `CollectionProxy` should be consistent.
2092
1723
 
2093
- *Neeraj Singh*
1724
+ Example:
2094
1725
 
2095
- * Removed deprecated method `type_cast_code` from Column.
1726
+ author.posts == Post.where(author_id: author.id)
1727
+ # => true
1728
+ Post.where(author_id: author.id) == author.posts
1729
+ # => true
2096
1730
 
2097
- *Neeraj Singh*
1731
+ Fixes #13506.
2098
1732
 
2099
- * Removed deprecated options `delete_sql` and `insert_sql` from HABTM
2100
- association.
1733
+ *Lauro Caetano*
2101
1734
 
2102
- Removed deprecated options `finder_sql` and `counter_sql` from
2103
- collection association.
1735
+ * Calling `delete_all` on an unloaded `CollectionProxy` no longer
1736
+ generates an SQL statement containing each id of the collection:
2104
1737
 
2105
- *Neeraj Singh*
1738
+ Before:
2106
1739
 
2107
- * Remove deprecated `ActiveRecord::Base#connection` method.
2108
- Make sure to access it via the class.
1740
+ DELETE FROM `model` WHERE `model`.`parent_id` = 1
1741
+ AND `model`.`id` IN (1, 2, 3...)
2109
1742
 
2110
- *Yves Senn*
1743
+ After:
2111
1744
 
2112
- * Remove deprecation warning for `auto_explain_threshold_in_seconds`.
1745
+ DELETE FROM `model` WHERE `model`.`parent_id` = 1
2113
1746
 
2114
- *Yves Senn*
1747
+ *Eileen M. Uchitelle*, *Aaron Patterson*
2115
1748
 
2116
- * Remove deprecated `:distinct` option from `Relation#count`.
1749
+ * Fix invalid SQL when aggregate methods (`empty?`, `any?`, `count`) used
1750
+ with `select`.
2117
1751
 
2118
- *Yves Senn*
1752
+ Fixes #13648.
2119
1753
 
2120
- * Removed deprecated methods `partial_updates`, `partial_updates?` and
2121
- `partial_updates=`.
1754
+ *Simon Woker*
2122
1755
 
2123
- *Neeraj Singh*
1756
+ * PostgreSQL adapter only warns once for every missing OID per connection.
2124
1757
 
2125
- * Removed deprecated method `scoped`.
1758
+ Fixes #14275.
2126
1759
 
2127
- *Neeraj Singh*
1760
+ *Matthew Draper*, *Yves Senn*
2128
1761
 
2129
- * Removed deprecated method `default_scopes?`.
1762
+ * PostgreSQL adapter automatically reloads it's type map when encountering
1763
+ unknown OIDs.
2130
1764
 
2131
- *Neeraj Singh*
1765
+ Fixes #14678.
2132
1766
 
2133
- * Remove implicit join references that were deprecated in 4.0.
1767
+ *Matthew Draper*, *Yves Senn*
2134
1768
 
2135
- Example:
1769
+ * Fix insertion of records via `has_many :through` association with scope.
2136
1770
 
2137
- # before with implicit joins
2138
- Comment.where('posts.author_id' => 7)
1771
+ Fixes #3548.
2139
1772
 
2140
- # after
2141
- Comment.references(:posts).where('posts.author_id' => 7)
1773
+ *Ivan Antropov*
2142
1774
 
2143
- *Yves Senn*
1775
+ * Auto-generate stable fixture UUIDs on PostgreSQL.
2144
1776
 
2145
- * Apply default scope when joining associations. For example:
1777
+ Fixes #11524.
2146
1778
 
2147
- class Post < ActiveRecord::Base
2148
- default_scope -> { where published: true }
2149
- end
1779
+ *Roderick van Domburg*
2150
1780
 
2151
- class Comment
2152
- belongs_to :post
2153
- end
1781
+ * Fix a problem where an enum would overwrite values of another enum with the
1782
+ same name in an unrelated class.
2154
1783
 
2155
- When calling `Comment.joins(:post)`, we expect to receive only
2156
- comments on published posts, since that is the default scope for
2157
- posts.
1784
+ Fixes #14607.
2158
1785
 
2159
- Before this change, the default scope from `Post` was not applied,
2160
- so we'd get comments on unpublished posts.
1786
+ *Evan Whalen*
2161
1787
 
2162
- *Jon Leighton*
1788
+ * PostgreSQL and SQLite string columns no longer have a default limit of 255.
2163
1789
 
2164
- * Remove `activerecord-deprecated_finders` as a dependency.
1790
+ Fixes #13435, #9153.
2165
1791
 
2166
- *Łukasz Strzałkowski*
1792
+ *Vladimir Sazhin*, *Toms Mikoss*, *Yves Senn*
2167
1793
 
2168
- * Remove Oracle / Sqlserver / Firebird database tasks that were deprecated in 4.0.
1794
+ * Make possible to have an association called `records`.
2169
1795
 
2170
- *kennyj*
1796
+ Fixes #11645.
2171
1797
 
2172
- * `find_each` now returns an `Enumerator` when called without a block, so that it
2173
- can be chained with other `Enumerable` methods.
1798
+ *prathamesh-sonpatki*
2174
1799
 
2175
- *Ben Woosley*
1800
+ * `to_sql` on an association now matches the query that is actually executed, where it
1801
+ could previously have incorrectly accrued additional conditions (e.g. as a result of
1802
+ a previous query). `CollectionProxy` now always defers to the association scope's
1803
+ `arel` method so the (incorrect) inherited one should be entirely concealed.
2176
1804
 
2177
- * `ActiveRecord::Result.each` now returns an `Enumerator` when called without
2178
- a block, so that it can be chained with other `Enumerable` methods.
1805
+ Fixes #14003.
2179
1806
 
2180
- *Ben Woosley*
1807
+ *Jefferson Lai*
2181
1808
 
2182
- * Flatten merged join_values before building the joins.
1809
+ * Block a few default Class methods as scope name.
2183
1810
 
2184
- While joining_values special treatment is given to string values.
2185
- By flattening the array it ensures that string values are detected
2186
- as strings and not arrays.
1811
+ For instance, this will raise:
2187
1812
 
2188
- Fixes #10669.
1813
+ scope :public, -> { where(status: 1) }
2189
1814
 
2190
- *Neeraj Singh and iwiznia*
1815
+ *arthurnn*
2191
1816
 
2192
- * Do not load all child records for inverse case.
1817
+ * Fix error when using `with_options` with lambda.
2193
1818
 
2194
- currently `post.comments.find(Comment.first.id)` would load all
2195
- comments for the given post to set the inverse association.
1819
+ Fixes #9805.
2196
1820
 
2197
- This has a huge performance penalty. Because if post has 100k
2198
- records and all these 100k records would be loaded in memory
2199
- even though the comment id was supplied.
1821
+ *Lauro Caetano*
2200
1822
 
2201
- Fix is to use in-memory records only if loaded? is true. Otherwise
2202
- load the records using full sql.
1823
+ * Switch `sqlite3:///` URLs (which were temporarily
1824
+ deprecated in 4.1) from relative to absolute.
2203
1825
 
2204
- Fixes #10509.
1826
+ If you still want the previous interpretation, you should replace
1827
+ `sqlite3:///my/path` with `sqlite3:my/path`.
2205
1828
 
2206
- *Neeraj Singh*
1829
+ *Matthew Draper*
2207
1830
 
2208
- * `inspect` on Active Record model classes does not initiate a
2209
- new connection. This means that calling `inspect`, when the
2210
- database is missing, will no longer raise an exception.
2211
- Fixes #10936.
1831
+ * Treat blank UUID values as `nil`.
2212
1832
 
2213
1833
  Example:
2214
1834
 
2215
- Author.inspect # => "Author(no database connection)"
2216
-
2217
- *Yves Senn*
1835
+ Sample.new(uuid_field: '') #=> <Sample id: nil, uuid_field: nil>
2218
1836
 
2219
- * Handle single quotes in PostgreSQL default column values.
2220
- Fixes #10881.
1837
+ *Dmitry Lavrov*
2221
1838
 
2222
- *Dylan Markow*
1839
+ * Enable support for materialized views on PostgreSQL >= 9.3.
2223
1840
 
2224
- * Log the sql that is actually sent to the database.
1841
+ *Dave Lee*
2225
1842
 
2226
- If I have a query that produces sql
2227
- `WHERE "users"."name" = 'a b'` then in the log all the
2228
- whitespace is being squeezed. So the sql that is printed in the
2229
- log is `WHERE "users"."name" = 'a b'`.
1843
+ * The PostgreSQL adapter supports custom domains. Fixes #14305.
2230
1844
 
2231
- Do not squeeze whitespace out of sql queries. Fixes #10982.
1845
+ *Yves Senn*
2232
1846
 
2233
- *Neeraj Singh*
1847
+ * PostgreSQL `Column#type` is now determined through the corresponding OID.
1848
+ The column types stay the same except for enum columns. They no longer have
1849
+ `nil` as type but `enum`.
2234
1850
 
2235
- * Fixture setup no longer depends on `ActiveRecord::Base.configurations`.
2236
- This is relevant when `ENV["DATABASE_URL"]` is used in place of a `database.yml`.
1851
+ See #7814.
2237
1852
 
2238
1853
  *Yves Senn*
2239
1854
 
2240
- * Fix mysql2 adapter raises the correct exception when executing a query on a
2241
- closed connection.
1855
+ * Fix error when specifying a non-empty default value on a PostgreSQL array
1856
+ column.
2242
1857
 
2243
- *Yves Senn*
1858
+ Fixes #10613.
2244
1859
 
2245
- * Ambiguous reflections are on :through relationships are no longer supported.
2246
- For example, you need to change this:
1860
+ *Luke Steensen*
2247
1861
 
2248
- class Author < ActiveRecord::Base
2249
- has_many :posts
2250
- has_many :taggings, through: :posts
2251
- end
1862
+ * Fix error where `.persisted?` throws SystemStackError for an unsaved model with a
1863
+ custom primary key that did not save due to validation error.
2252
1864
 
2253
- class Post < ActiveRecord::Base
2254
- has_one :tagging
2255
- has_many :taggings
2256
- end
1865
+ Fixes #14393.
2257
1866
 
2258
- class Tagging < ActiveRecord::Base
2259
- end
1867
+ *Chris Finne*
2260
1868
 
2261
- To this:
1869
+ * Introduce `validate` as an alias for `valid?`.
2262
1870
 
2263
- class Author < ActiveRecord::Base
2264
- has_many :posts
2265
- has_many :taggings, through: :posts, source: :tagging
2266
- end
1871
+ This is more intuitive when you want to run validations but don't care about the return value.
2267
1872
 
2268
- class Post < ActiveRecord::Base
2269
- has_one :tagging
2270
- has_many :taggings
2271
- end
1873
+ *Henrik Nyh*
2272
1874
 
2273
- class Tagging < ActiveRecord::Base
2274
- end
1875
+ * Create indexes inline in CREATE TABLE for MySQL.
2275
1876
 
2276
- *Aaron Patterson*
1877
+ This is important, because adding an index on a temporary table after it has been created
1878
+ would commit the transaction.
2277
1879
 
2278
- * Remove column restrictions for `count`, let the database raise if the SQL is
2279
- invalid. The previous behavior was untested and surprising for the user.
2280
- Fixes #5554.
1880
+ It also allows creating and dropping indexed tables with fewer queries and fewer permissions
1881
+ required.
2281
1882
 
2282
1883
  Example:
2283
1884
 
2284
- User.select("name, username").count
2285
- # Before => SELECT count(*) FROM users
2286
- # After => ActiveRecord::StatementInvalid
2287
-
2288
- # you can still use `count(:all)` to perform a query unrelated to the
2289
- # selected columns
2290
- User.select("name, username").count(:all) # => SELECT count(*) FROM users
2291
-
2292
- *Yves Senn*
2293
-
2294
- * Rails now automatically detects inverse associations. If you do not set the
2295
- `:inverse_of` option on the association, then Active Record will guess the
2296
- inverse association based on heuristics.
2297
-
2298
- Note that automatic inverse detection only works on `has_many`, `has_one`,
2299
- and `belongs_to` associations. Extra options on the associations will
2300
- also prevent the association's inverse from being found automatically.
2301
-
2302
- The automatic guessing of the inverse association uses a heuristic based
2303
- on the name of the class, so it may not work for all associations,
2304
- especially the ones with non-standard names.
2305
-
2306
- You can turn off the automatic detection of inverse associations by setting
2307
- the `:inverse_of` option to `false` like so:
2308
-
2309
- class Taggable < ActiveRecord::Base
2310
- belongs_to :tag, inverse_of: false
1885
+ create_table :temp, temporary: true, as: "SELECT id, name, zip FROM a_really_complicated_query" do |t|
1886
+ t.index :zip
2311
1887
  end
1888
+ # => CREATE TEMPORARY TABLE temp (INDEX (zip)) AS SELECT id, name, zip FROM a_really_complicated_query
2312
1889
 
2313
- *John Wang*
1890
+ *Cody Cutrer*, *Steve Rice*, *Rafael Mendonça Franca*
2314
1891
 
2315
- * Fix `add_column` with `array` option when using PostgreSQL. Fixes #10432.
1892
+ * Use singular table name in generated migrations when
1893
+ `ActiveRecord::Base.pluralize_table_names` is `false`.
2316
1894
 
2317
- *Adam Anderson*
1895
+ Fixes #13426.
1896
+
1897
+ *Kuldeep Aggarwal*
2318
1898
 
2319
- * Usage of `implicit_readonly` is being removed`. Please use `readonly` method
2320
- explicitly to mark records as `readonly.
2321
- Fixes #10615.
1899
+ * `touch` accepts many attributes to be touched at once.
2322
1900
 
2323
1901
  Example:
2324
1902
 
2325
- user = User.joins(:todos).select("users.*, todos.title as todos_title").readonly(true).first
2326
- user.todos_title = 'clean pet'
2327
- user.save! # will raise error
1903
+ # touches :signed_at, :sealed_at, and :updated_at/on attributes.
1904
+ Photo.last.touch(:signed_at, :sealed_at)
2328
1905
 
2329
- *Yves Senn*
1906
+ *James Pinto*
2330
1907
 
2331
- * Fix the `:primary_key` option for `has_many` associations.
1908
+ * `rake db:structure:dump` only dumps schema information if the schema
1909
+ migration table exists.
2332
1910
 
2333
- Fixes #10693.
1911
+ Fixes #14217.
2334
1912
 
2335
1913
  *Yves Senn*
2336
1914
 
2337
- * Fix bug where tiny types are incorrectly coerced as boolean when the length is more than 1.
1915
+ * Reap connections that were checked out by now-dead threads, instead
1916
+ of waiting until they disconnect by themselves. Before this change,
1917
+ a suitably constructed series of short-lived threads could starve
1918
+ the connection pool, without ever having more than a couple alive at
1919
+ the same time.
2338
1920
 
2339
- Fixes #10620.
2340
-
2341
- *Aaron Patterson*
1921
+ *Matthew Draper*
2342
1922
 
2343
- * Also support extensions in PostgreSQL 9.1. This feature has been supported since 9.1.
1923
+ * `pk_and_sequence_for` now ensures that only the pg_depend entries
1924
+ pointing to pg_class, and thus only sequence objects, are considered.
2344
1925
 
2345
- *kennyj*
1926
+ *Josh Williams*
2346
1927
 
2347
- * Deprecate `ConnectionAdapters::SchemaStatements#distinct`,
2348
- as it is no longer used by internals.
1928
+ * `where.not` adds `references` for `includes` like normal `where` calls do.
2349
1929
 
2350
- *Ben Woosley*
1930
+ Fixes #14406.
2351
1931
 
2352
- * Fix pending migrations error when loading schema and `ActiveRecord::Base.table_name_prefix`
2353
- is not blank.
1932
+ *Yves Senn*
2354
1933
 
2355
- Call `assume_migrated_upto_version` on connection to prevent it from first
2356
- being picked up in `method_missing`.
1934
+ * Extend fixture `$LABEL` replacement to allow string interpolation.
2357
1935
 
2358
- In the base class, `Migration`, `method_missing` expects the argument to be a
2359
- table name, and calls `proper_table_name` on the arguments before sending to
2360
- `connection`. If `table_name_prefix` or `table_name_suffix` is used, the schema
2361
- version changes to `prefix_version_suffix`, breaking `rake test:prepare`.
1936
+ Example:
2362
1937
 
2363
- Fixes #10411.
1938
+ martin:
1939
+ email: $LABEL@email.com
2364
1940
 
2365
- *Kyle Stevens*
1941
+ users(:martin).email # => martin@email.com
2366
1942
 
2367
- * Method `read_attribute_before_type_cast` should accept input as symbol.
1943
+ *Eric Steele*
2368
1944
 
2369
- *Neeraj Singh*
1945
+ * Add support for `Relation` be passed as parameter on `QueryCache#select_all`.
2370
1946
 
2371
- * Confirm a record has not already been destroyed before decrementing counter cache.
1947
+ Fixes #14361.
2372
1948
 
2373
- *Ben Tucker*
1949
+ *arthurnn*
2374
1950
 
2375
- * Fixed a bug in `ActiveRecord#sanitize_sql_hash_for_conditions` in which
2376
- `self.class` is an argument to `PredicateBuilder#build_from_hash`
2377
- causing `PredicateBuilder` to call non-existent method
2378
- `Class#reflect_on_association`.
1951
+ * Passing an Active Record object to `find` or `exists?` is now deprecated.
1952
+ Call `.id` on the object first.
2379
1953
 
2380
- *Zach Ohlgren*
1954
+ *Aaron Patterson*
2381
1955
 
2382
- * While removing index if column option is missing then raise IrreversibleMigration exception.
1956
+ * Only use BINARY for MySQL case sensitive uniqueness check when column
1957
+ has a case insensitive collation.
2383
1958
 
2384
- Following code should raise `IrreversibleMigration`. But the code was
2385
- failing since options is an array and not a hash.
1959
+ *Ryuta Kamizono*
2386
1960
 
2387
- def change
2388
- change_table :users do |t|
2389
- t.remove_index [:name, :email]
2390
- end
2391
- end
1961
+ * Support for MySQL 5.6 fractional seconds.
2392
1962
 
2393
- Fix was to check if the options is a Hash before operating on it.
1963
+ *arthurnn*, *Tatsuhiko Miyagawa*
2394
1964
 
2395
- Fixes #10419.
1965
+ * Support for PostgreSQL `citext` data type enabling case-insensitive
1966
+ `where` values without needing to wrap in UPPER/LOWER sql functions.
2396
1967
 
2397
- *Neeraj Singh*
1968
+ *Troy Kruthoff*, *Lachlan Sylvester*
2398
1969
 
2399
- * Do not overwrite manually built records during one-to-one nested attribute assignment
1970
+ * Only save has_one associations if record has changes.
1971
+ Previously after save related callbacks, such as `#after_commit`, were triggered when the has_one
1972
+ object did not get saved to the db.
2400
1973
 
2401
- For one-to-one nested associations, if you build the new (in-memory)
2402
- child object yourself before assignment, then the NestedAttributes
2403
- module will not overwrite it, e.g.:
1974
+ *Alan Kennedy*
2404
1975
 
2405
- class Member < ActiveRecord::Base
2406
- has_one :avatar
2407
- accepts_nested_attributes_for :avatar
1976
+ * Allow strings to specify the `#order` value.
2408
1977
 
2409
- def avatar
2410
- super || build_avatar(width: 200)
2411
- end
2412
- end
1978
+ Example:
2413
1979
 
2414
- member = Member.new
2415
- member.avatar_attributes = {icon: 'sad'}
2416
- member.avatar.width # => 200
1980
+ Model.order(id: 'asc').to_sql == Model.order(id: :asc).to_sql
2417
1981
 
2418
- *Olek Janiszewski*
1982
+ *Marcelo Casiraghi*, *Robin Dupret*
2419
1983
 
2420
- * fixes bug introduced by #3329. Now, when autosaving associations,
2421
- deletions happen before inserts and saves. This prevents a 'duplicate
2422
- unique value' database error that would occur if a record being created had
2423
- the same value on a unique indexed field as that of a record being destroyed.
1984
+ * Dynamically register PostgreSQL enum OIDs. This prevents "unknown OID"
1985
+ warnings on enum columns.
2424
1986
 
2425
- *Johnny Holton*
1987
+ *Dieter Komendera*
2426
1988
 
2427
- * Handle aliased attributes in ActiveRecord::Relation.
1989
+ * `includes` is able to detect the right preloading strategy when string
1990
+ joins are involved.
2428
1991
 
2429
- When using symbol keys, ActiveRecord will now translate aliased attribute names to the actual column name used in the database:
1992
+ Fixes #14109.
2430
1993
 
2431
- With the model
1994
+ *Aaron Patterson*, *Yves Senn*
2432
1995
 
2433
- class Topic
2434
- alias_attribute :heading, :title
2435
- end
1996
+ * Fix error with validation with enum fields for records where the value for
1997
+ any enum attribute is always evaluated as 0 during uniqueness validation.
2436
1998
 
2437
- The call
1999
+ Fixes #14172.
2438
2000
 
2439
- Topic.where(heading: 'The First Topic')
2001
+ *Vilius Luneckas* *Ahmed AbouElhamayed*
2440
2002
 
2441
- should yield the same result as
2003
+ * `before_add` callbacks are fired before the record is saved on
2004
+ `has_and_belongs_to_many` associations *and* on `has_many :through`
2005
+ associations. Before this change, `before_add` callbacks would be fired
2006
+ before the record was saved on `has_and_belongs_to_many` associations, but
2007
+ *not* on `has_many :through` associations.
2442
2008
 
2443
- Topic.where(title: 'The First Topic')
2009
+ Fixes #14144.
2444
2010
 
2445
- This also applies to ActiveRecord::Relation::Calculations calls such as `Model.sum(:aliased)` and `Model.pluck(:aliased)`.
2011
+ * Fix STI classes not defining an attribute method if there is a conflicting
2012
+ private method defined on its ancestors.
2446
2013
 
2447
- This will not work with SQL fragment strings like `Model.sum('DISTINCT aliased')`.
2014
+ Fixes #11569.
2448
2015
 
2449
2016
  *Godfrey Chan*
2450
2017
 
2451
- * Mute `psql` output when running rake db:schema:load.
2018
+ * Coerce strings when reading attributes. Fixes #10485.
2452
2019
 
2453
- *Godfrey Chan*
2020
+ Example:
2454
2021
 
2455
- * Trigger a save on `has_one association=(associate)` when the associate contents have changed.
2022
+ book = Book.new(title: 12345)
2023
+ book.save!
2024
+ book.title # => "12345"
2456
2025
 
2457
- Fixes #8856.
2026
+ *Yves Senn*
2458
2027
 
2459
- *Chris Thompson*
2028
+ * Deprecate half-baked support for PostgreSQL range values with excluding beginnings.
2029
+ We currently map PostgreSQL ranges to Ruby ranges. This conversion is not fully
2030
+ possible because the Ruby range does not support excluded beginnings.
2460
2031
 
2461
- * Abort a rake task when missing db/structure.sql like `db:schema:load` task.
2032
+ The current solution of incrementing the beginning is not correct and is now
2033
+ deprecated. For subtypes where we don't know how to increment (e.g. `#succ`
2034
+ is not defined) it will raise an `ArgumentException` for ranges with excluding
2035
+ beginnings.
2462
2036
 
2463
- *kennyj*
2037
+ *Yves Senn*
2464
2038
 
2465
- * rake:db:test:prepare falls back to original environment after execution.
2039
+ * Support for user created range types in PostgreSQL.
2466
2040
 
2467
- *Slava Markevich*
2041
+ *Yves Senn*
2468
2042
 
2469
- Please check [4-0-stable](https://github.com/rails/rails/blob/4-0-stable/activerecord/CHANGELOG.md) for previous changes.
2043
+ Please check [4-1-stable](https://github.com/rails/rails/blob/4-1-stable/activerecord/CHANGELOG.md) for previous changes.