activerecord 4.2.11.1 → 5.2.4.5

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of activerecord might be problematic. Click here for more details.

Files changed (274) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +594 -1620
  3. data/MIT-LICENSE +2 -2
  4. data/README.rdoc +10 -11
  5. data/examples/performance.rb +32 -31
  6. data/examples/simple.rb +5 -4
  7. data/lib/active_record/aggregations.rb +263 -249
  8. data/lib/active_record/association_relation.rb +11 -6
  9. data/lib/active_record/associations/alias_tracker.rb +29 -35
  10. data/lib/active_record/associations/association.rb +77 -43
  11. data/lib/active_record/associations/association_scope.rb +106 -133
  12. data/lib/active_record/associations/belongs_to_association.rb +52 -41
  13. data/lib/active_record/associations/belongs_to_polymorphic_association.rb +8 -8
  14. data/lib/active_record/associations/builder/association.rb +29 -38
  15. data/lib/active_record/associations/builder/belongs_to.rb +77 -30
  16. data/lib/active_record/associations/builder/collection_association.rb +9 -22
  17. data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +42 -35
  18. data/lib/active_record/associations/builder/has_many.rb +6 -4
  19. data/lib/active_record/associations/builder/has_one.rb +13 -6
  20. data/lib/active_record/associations/builder/singular_association.rb +15 -11
  21. data/lib/active_record/associations/collection_association.rb +139 -280
  22. data/lib/active_record/associations/collection_proxy.rb +231 -133
  23. data/lib/active_record/associations/foreign_association.rb +3 -1
  24. data/lib/active_record/associations/has_many_association.rb +34 -89
  25. data/lib/active_record/associations/has_many_through_association.rb +49 -76
  26. data/lib/active_record/associations/has_one_association.rb +38 -24
  27. data/lib/active_record/associations/has_one_through_association.rb +18 -9
  28. data/lib/active_record/associations/join_dependency/join_association.rb +40 -87
  29. data/lib/active_record/associations/join_dependency/join_base.rb +10 -9
  30. data/lib/active_record/associations/join_dependency/join_part.rb +12 -12
  31. data/lib/active_record/associations/join_dependency.rb +133 -159
  32. data/lib/active_record/associations/preloader/association.rb +85 -120
  33. data/lib/active_record/associations/preloader/through_association.rb +85 -74
  34. data/lib/active_record/associations/preloader.rb +81 -91
  35. data/lib/active_record/associations/singular_association.rb +27 -34
  36. data/lib/active_record/associations/through_association.rb +38 -18
  37. data/lib/active_record/associations.rb +1732 -1597
  38. data/lib/active_record/attribute_assignment.rb +58 -182
  39. data/lib/active_record/attribute_decorators.rb +39 -15
  40. data/lib/active_record/attribute_methods/before_type_cast.rb +10 -8
  41. data/lib/active_record/attribute_methods/dirty.rb +94 -135
  42. data/lib/active_record/attribute_methods/primary_key.rb +86 -71
  43. data/lib/active_record/attribute_methods/query.rb +4 -2
  44. data/lib/active_record/attribute_methods/read.rb +45 -63
  45. data/lib/active_record/attribute_methods/serialization.rb +40 -20
  46. data/lib/active_record/attribute_methods/time_zone_conversion.rb +58 -36
  47. data/lib/active_record/attribute_methods/write.rb +30 -45
  48. data/lib/active_record/attribute_methods.rb +166 -109
  49. data/lib/active_record/attributes.rb +201 -82
  50. data/lib/active_record/autosave_association.rb +94 -36
  51. data/lib/active_record/base.rb +57 -44
  52. data/lib/active_record/callbacks.rb +97 -57
  53. data/lib/active_record/coders/json.rb +3 -1
  54. data/lib/active_record/coders/yaml_column.rb +24 -12
  55. data/lib/active_record/collection_cache_key.rb +53 -0
  56. data/lib/active_record/connection_adapters/abstract/connection_pool.rb +712 -290
  57. data/lib/active_record/connection_adapters/abstract/database_limits.rb +10 -5
  58. data/lib/active_record/connection_adapters/abstract/database_statements.rb +237 -90
  59. data/lib/active_record/connection_adapters/abstract/query_cache.rb +71 -21
  60. data/lib/active_record/connection_adapters/abstract/quoting.rb +118 -52
  61. data/lib/active_record/connection_adapters/abstract/savepoints.rb +5 -3
  62. data/lib/active_record/connection_adapters/abstract/schema_creation.rb +67 -46
  63. data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +318 -217
  64. data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +81 -36
  65. data/lib/active_record/connection_adapters/abstract/schema_statements.rb +570 -228
  66. data/lib/active_record/connection_adapters/abstract/transaction.rb +138 -70
  67. data/lib/active_record/connection_adapters/abstract_adapter.rb +325 -202
  68. data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +542 -601
  69. data/lib/active_record/connection_adapters/column.rb +50 -41
  70. data/lib/active_record/connection_adapters/connection_specification.rb +147 -135
  71. data/lib/active_record/connection_adapters/determine_if_preparable_visitor.rb +33 -0
  72. data/lib/active_record/connection_adapters/mysql/column.rb +27 -0
  73. data/lib/active_record/connection_adapters/mysql/database_statements.rb +140 -0
  74. data/lib/active_record/connection_adapters/mysql/explain_pretty_printer.rb +72 -0
  75. data/lib/active_record/connection_adapters/mysql/quoting.rb +44 -0
  76. data/lib/active_record/connection_adapters/mysql/schema_creation.rb +73 -0
  77. data/lib/active_record/connection_adapters/mysql/schema_definitions.rb +87 -0
  78. data/lib/active_record/connection_adapters/mysql/schema_dumper.rb +80 -0
  79. data/lib/active_record/connection_adapters/mysql/schema_statements.rb +148 -0
  80. data/lib/active_record/connection_adapters/mysql/type_metadata.rb +35 -0
  81. data/lib/active_record/connection_adapters/mysql2_adapter.rb +41 -180
  82. data/lib/active_record/connection_adapters/postgresql/column.rb +35 -11
  83. data/lib/active_record/connection_adapters/postgresql/database_statements.rb +45 -114
  84. data/lib/active_record/connection_adapters/postgresql/explain_pretty_printer.rb +44 -0
  85. data/lib/active_record/connection_adapters/postgresql/oid/array.rb +50 -58
  86. data/lib/active_record/connection_adapters/postgresql/oid/bit.rb +10 -6
  87. data/lib/active_record/connection_adapters/postgresql/oid/bit_varying.rb +2 -0
  88. data/lib/active_record/connection_adapters/postgresql/oid/bytea.rb +4 -2
  89. data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +5 -1
  90. data/lib/active_record/connection_adapters/postgresql/oid/date.rb +13 -1
  91. data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +9 -22
  92. data/lib/active_record/connection_adapters/postgresql/oid/decimal.rb +3 -1
  93. data/lib/active_record/connection_adapters/postgresql/oid/enum.rb +5 -3
  94. data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +31 -19
  95. data/lib/active_record/connection_adapters/postgresql/oid/inet.rb +2 -0
  96. data/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +3 -11
  97. data/lib/active_record/connection_adapters/postgresql/oid/legacy_point.rb +45 -0
  98. data/lib/active_record/connection_adapters/postgresql/oid/money.rb +7 -9
  99. data/lib/active_record/connection_adapters/postgresql/oid/{integer.rb → oid.rb} +6 -2
  100. data/lib/active_record/connection_adapters/postgresql/oid/point.rb +33 -11
  101. data/lib/active_record/connection_adapters/postgresql/oid/range.rb +52 -34
  102. data/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb +4 -5
  103. data/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +55 -53
  104. data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +5 -3
  105. data/lib/active_record/connection_adapters/postgresql/oid/vector.rb +3 -1
  106. data/lib/active_record/connection_adapters/postgresql/oid/xml.rb +3 -1
  107. data/lib/active_record/connection_adapters/postgresql/oid.rb +23 -25
  108. data/lib/active_record/connection_adapters/postgresql/quoting.rb +107 -47
  109. data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +27 -14
  110. data/lib/active_record/connection_adapters/postgresql/schema_creation.rb +65 -0
  111. data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +144 -90
  112. data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +50 -0
  113. data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +462 -284
  114. data/lib/active_record/connection_adapters/postgresql/type_metadata.rb +39 -0
  115. data/lib/active_record/connection_adapters/postgresql/utils.rb +12 -8
  116. data/lib/active_record/connection_adapters/postgresql_adapter.rb +432 -323
  117. data/lib/active_record/connection_adapters/schema_cache.rb +48 -24
  118. data/lib/active_record/connection_adapters/sql_type_metadata.rb +34 -0
  119. data/lib/active_record/connection_adapters/sqlite3/explain_pretty_printer.rb +21 -0
  120. data/lib/active_record/connection_adapters/sqlite3/quoting.rb +67 -0
  121. data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +17 -0
  122. data/lib/active_record/connection_adapters/sqlite3/schema_definitions.rb +19 -0
  123. data/lib/active_record/connection_adapters/sqlite3/schema_dumper.rb +18 -0
  124. data/lib/active_record/connection_adapters/sqlite3/schema_statements.rb +106 -0
  125. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +269 -308
  126. data/lib/active_record/connection_adapters/statement_pool.rb +34 -13
  127. data/lib/active_record/connection_handling.rb +40 -27
  128. data/lib/active_record/core.rb +178 -198
  129. data/lib/active_record/counter_cache.rb +79 -36
  130. data/lib/active_record/define_callbacks.rb +22 -0
  131. data/lib/active_record/dynamic_matchers.rb +87 -105
  132. data/lib/active_record/enum.rb +135 -88
  133. data/lib/active_record/errors.rb +179 -52
  134. data/lib/active_record/explain.rb +23 -11
  135. data/lib/active_record/explain_registry.rb +4 -2
  136. data/lib/active_record/explain_subscriber.rb +10 -5
  137. data/lib/active_record/fixture_set/file.rb +35 -9
  138. data/lib/active_record/fixtures.rb +188 -132
  139. data/lib/active_record/gem_version.rb +5 -3
  140. data/lib/active_record/inheritance.rb +148 -112
  141. data/lib/active_record/integration.rb +70 -28
  142. data/lib/active_record/internal_metadata.rb +45 -0
  143. data/lib/active_record/legacy_yaml_adapter.rb +21 -3
  144. data/lib/active_record/locale/en.yml +3 -2
  145. data/lib/active_record/locking/optimistic.rb +88 -96
  146. data/lib/active_record/locking/pessimistic.rb +15 -3
  147. data/lib/active_record/log_subscriber.rb +95 -33
  148. data/lib/active_record/migration/command_recorder.rb +133 -90
  149. data/lib/active_record/migration/compatibility.rb +217 -0
  150. data/lib/active_record/migration/join_table.rb +8 -6
  151. data/lib/active_record/migration.rb +581 -282
  152. data/lib/active_record/model_schema.rb +290 -111
  153. data/lib/active_record/nested_attributes.rb +264 -222
  154. data/lib/active_record/no_touching.rb +7 -1
  155. data/lib/active_record/null_relation.rb +24 -37
  156. data/lib/active_record/persistence.rb +347 -119
  157. data/lib/active_record/query_cache.rb +13 -24
  158. data/lib/active_record/querying.rb +19 -17
  159. data/lib/active_record/railtie.rb +94 -32
  160. data/lib/active_record/railties/console_sandbox.rb +2 -0
  161. data/lib/active_record/railties/controller_runtime.rb +9 -3
  162. data/lib/active_record/railties/databases.rake +149 -156
  163. data/lib/active_record/readonly_attributes.rb +5 -4
  164. data/lib/active_record/reflection.rb +414 -267
  165. data/lib/active_record/relation/batches/batch_enumerator.rb +69 -0
  166. data/lib/active_record/relation/batches.rb +204 -55
  167. data/lib/active_record/relation/calculations.rb +256 -248
  168. data/lib/active_record/relation/delegation.rb +67 -60
  169. data/lib/active_record/relation/finder_methods.rb +288 -239
  170. data/lib/active_record/relation/from_clause.rb +26 -0
  171. data/lib/active_record/relation/merger.rb +86 -86
  172. data/lib/active_record/relation/predicate_builder/array_handler.rb +24 -24
  173. data/lib/active_record/relation/predicate_builder/association_query_value.rb +46 -0
  174. data/lib/active_record/relation/predicate_builder/base_handler.rb +19 -0
  175. data/lib/active_record/relation/predicate_builder/basic_object_handler.rb +20 -0
  176. data/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb +56 -0
  177. data/lib/active_record/relation/predicate_builder/range_handler.rb +42 -0
  178. data/lib/active_record/relation/predicate_builder/relation_handler.rb +7 -1
  179. data/lib/active_record/relation/predicate_builder.rb +116 -119
  180. data/lib/active_record/relation/query_attribute.rb +45 -0
  181. data/lib/active_record/relation/query_methods.rb +448 -393
  182. data/lib/active_record/relation/record_fetch_warning.rb +51 -0
  183. data/lib/active_record/relation/spawn_methods.rb +11 -13
  184. data/lib/active_record/relation/where_clause.rb +186 -0
  185. data/lib/active_record/relation/where_clause_factory.rb +34 -0
  186. data/lib/active_record/relation.rb +287 -340
  187. data/lib/active_record/result.rb +54 -36
  188. data/lib/active_record/runtime_registry.rb +6 -4
  189. data/lib/active_record/sanitization.rb +155 -124
  190. data/lib/active_record/schema.rb +30 -24
  191. data/lib/active_record/schema_dumper.rb +91 -87
  192. data/lib/active_record/schema_migration.rb +19 -16
  193. data/lib/active_record/scoping/default.rb +102 -85
  194. data/lib/active_record/scoping/named.rb +81 -32
  195. data/lib/active_record/scoping.rb +45 -26
  196. data/lib/active_record/secure_token.rb +40 -0
  197. data/lib/active_record/serialization.rb +5 -5
  198. data/lib/active_record/statement_cache.rb +45 -35
  199. data/lib/active_record/store.rb +42 -36
  200. data/lib/active_record/suppressor.rb +61 -0
  201. data/lib/active_record/table_metadata.rb +82 -0
  202. data/lib/active_record/tasks/database_tasks.rb +134 -96
  203. data/lib/active_record/tasks/mysql_database_tasks.rb +56 -100
  204. data/lib/active_record/tasks/postgresql_database_tasks.rb +83 -41
  205. data/lib/active_record/tasks/sqlite_database_tasks.rb +44 -16
  206. data/lib/active_record/timestamp.rb +70 -38
  207. data/lib/active_record/touch_later.rb +64 -0
  208. data/lib/active_record/transactions.rb +199 -124
  209. data/lib/active_record/translation.rb +2 -0
  210. data/lib/active_record/type/adapter_specific_registry.rb +136 -0
  211. data/lib/active_record/type/date.rb +4 -45
  212. data/lib/active_record/type/date_time.rb +4 -49
  213. data/lib/active_record/type/decimal_without_scale.rb +6 -2
  214. data/lib/active_record/type/hash_lookup_type_map.rb +5 -3
  215. data/lib/active_record/type/internal/timezone.rb +17 -0
  216. data/lib/active_record/type/json.rb +30 -0
  217. data/lib/active_record/type/serialized.rb +24 -15
  218. data/lib/active_record/type/text.rb +2 -2
  219. data/lib/active_record/type/time.rb +11 -16
  220. data/lib/active_record/type/type_map.rb +15 -17
  221. data/lib/active_record/type/unsigned_integer.rb +9 -7
  222. data/lib/active_record/type.rb +79 -23
  223. data/lib/active_record/type_caster/connection.rb +33 -0
  224. data/lib/active_record/type_caster/map.rb +23 -0
  225. data/lib/active_record/type_caster.rb +9 -0
  226. data/lib/active_record/validations/absence.rb +25 -0
  227. data/lib/active_record/validations/associated.rb +13 -4
  228. data/lib/active_record/validations/length.rb +26 -0
  229. data/lib/active_record/validations/presence.rb +14 -13
  230. data/lib/active_record/validations/uniqueness.rb +40 -41
  231. data/lib/active_record/validations.rb +38 -35
  232. data/lib/active_record/version.rb +3 -1
  233. data/lib/active_record.rb +34 -22
  234. data/lib/rails/generators/active_record/application_record/application_record_generator.rb +27 -0
  235. data/lib/rails/generators/active_record/application_record/templates/application_record.rb.tt +5 -0
  236. data/lib/rails/generators/active_record/migration/migration_generator.rb +43 -35
  237. data/lib/rails/generators/active_record/migration/templates/{create_table_migration.rb → create_table_migration.rb.tt} +8 -3
  238. data/lib/rails/generators/active_record/migration/templates/{migration.rb → migration.rb.tt} +8 -1
  239. data/lib/rails/generators/active_record/migration.rb +18 -1
  240. data/lib/rails/generators/active_record/model/model_generator.rb +18 -22
  241. data/lib/rails/generators/active_record/model/templates/{model.rb → model.rb.tt} +3 -0
  242. data/lib/rails/generators/active_record/model/templates/{module.rb → module.rb.tt} +0 -0
  243. data/lib/rails/generators/active_record.rb +7 -5
  244. metadata +72 -49
  245. data/lib/active_record/associations/preloader/belongs_to.rb +0 -17
  246. data/lib/active_record/associations/preloader/collection_association.rb +0 -24
  247. data/lib/active_record/associations/preloader/has_many.rb +0 -17
  248. data/lib/active_record/associations/preloader/has_many_through.rb +0 -19
  249. data/lib/active_record/associations/preloader/has_one.rb +0 -23
  250. data/lib/active_record/associations/preloader/has_one_through.rb +0 -9
  251. data/lib/active_record/associations/preloader/singular_association.rb +0 -21
  252. data/lib/active_record/attribute.rb +0 -163
  253. data/lib/active_record/attribute_set/builder.rb +0 -106
  254. data/lib/active_record/attribute_set.rb +0 -81
  255. data/lib/active_record/connection_adapters/mysql_adapter.rb +0 -498
  256. data/lib/active_record/connection_adapters/postgresql/array_parser.rb +0 -93
  257. data/lib/active_record/connection_adapters/postgresql/oid/float.rb +0 -21
  258. data/lib/active_record/connection_adapters/postgresql/oid/infinity.rb +0 -13
  259. data/lib/active_record/connection_adapters/postgresql/oid/json.rb +0 -35
  260. data/lib/active_record/connection_adapters/postgresql/oid/time.rb +0 -11
  261. data/lib/active_record/railties/jdbcmysql_error.rb +0 -16
  262. data/lib/active_record/serializers/xml_serializer.rb +0 -193
  263. data/lib/active_record/type/big_integer.rb +0 -13
  264. data/lib/active_record/type/binary.rb +0 -50
  265. data/lib/active_record/type/boolean.rb +0 -31
  266. data/lib/active_record/type/decimal.rb +0 -64
  267. data/lib/active_record/type/decorator.rb +0 -14
  268. data/lib/active_record/type/float.rb +0 -19
  269. data/lib/active_record/type/integer.rb +0 -59
  270. data/lib/active_record/type/mutable.rb +0 -16
  271. data/lib/active_record/type/numeric.rb +0 -36
  272. data/lib/active_record/type/string.rb +0 -40
  273. data/lib/active_record/type/time_value.rb +0 -38
  274. data/lib/active_record/type/value.rb +0 -110
data/CHANGELOG.md CHANGED
@@ -1,2033 +1,1007 @@
1
- ## Rails 4.2.11.1 (March 11, 2019) ##
1
+ ## Rails 5.2.4.5 (February 10, 2021) ##
2
2
 
3
- * No changes.
4
-
5
-
6
- ## Rails 4.2.11 (November 27, 2018) ##
7
-
8
- * No changes.
9
-
10
-
11
- ## Rails 4.2.10 (September 27, 2017) ##
12
-
13
- * `Relation#joins` is no longer affected by the target model's
14
- `current_scope`, with the exception of `unscoped`.
15
-
16
- Fixes #29338.
17
-
18
- *Sean Griffin*
19
-
20
- ## Rails 4.2.9 (June 26, 2017) ##
21
-
22
- * Fix regression caused by `collection_singular_ids=` ignoring different primary key on relationship.
3
+ * Fix possible DoS vector in PostgreSQL money type
23
4
 
24
- *Nick Pezza*
5
+ Carefully crafted input can cause a DoS via the regular expressions used
6
+ for validating the money format in the PostgreSQL adapter. This patch
7
+ fixes the regexp.
25
8
 
26
- * Fix `rake db:schema:load` with subdirectories.
9
+ Thanks to @dee-see from Hackerone for this patch!
27
10
 
28
- *Ryuta Kamizono*
29
-
30
- * Fix `rake db:migrate:status` with subdirectories.
31
-
32
- *Ryuta Kamizono*
33
-
34
- * Fix regression of #1969 with SELECT aliases in HAVING clause.
35
-
36
- *Eugene Kenny*
37
-
38
- * Fix `wait_timeout` to configurable for mysql2 adapter.
39
-
40
- Fixes #26556.
41
-
42
- *Ryuta Kamizono*
43
-
44
- * Make `table_name=` reset current statement cache,
45
- so queries are not run against the previous table name.
46
-
47
- *namusyaka*
11
+ [CVE-2021-22880]
48
12
 
13
+ *Aaron Patterson*
49
14
 
50
- ## Rails 4.2.8 (February 21, 2017) ##
51
15
 
52
- * Using a mysql2 connection after it fails to reconnect will now have an error message
53
- saying the connection is closed rather than an undefined method error message.
16
+ ## Rails 5.2.4.4 (September 09, 2020) ##
54
17
 
55
- *Dylan Thacker-Smith*
18
+ * No changes.
56
19
 
57
- * Bust Model.attribute_names cache when resetting column information
58
20
 
59
- *James Coleman*
21
+ ## Rails 5.2.4.3 (May 18, 2020) ##
60
22
 
61
- * Fix query caching when type information is reset
23
+ * No changes.
62
24
 
63
- Backports ancillary fix in 5.0.
64
25
 
65
- *James Coleman*
26
+ ## Rails 5.2.4.1 (December 18, 2019) ##
66
27
 
67
- * Allow `joins` to be unscoped.
28
+ * No changes.
68
29
 
69
- Fixes #13775.
70
30
 
71
- *Takashi Kokubun*
31
+ ## Rails 5.2.4 (November 27, 2019) ##
72
32
 
73
- * Hashes can once again be passed to setters of `composed_of`, if all of the
74
- mapping methods are methods implemented on `Hash`.
33
+ * Fix circular `autosave: true` causes invalid records to be saved.
75
34
 
76
- Fixes #25978.
35
+ Prior to the fix, when there was a circular series of `autosave: true`
36
+ associations, the callback for a `has_many` association was run while
37
+ another instance of the same callback on the same association hadn't
38
+ finished running. When control returned to the first instance of the
39
+ callback, the instance variable had changed, and subsequent associated
40
+ records weren't saved correctly. Specifically, the ID field for the
41
+ `belongs_to` corresponding to the `has_many` was `nil`.
77
42
 
78
- *Sean Griffin*
43
+ Fixes #28080.
79
44
 
45
+ *Larry Reid*
80
46
 
81
- ## Rails 4.2.7 (July 12, 2016) ##
47
+ * PostgreSQL: Fix GROUP BY with ORDER BY virtual count attribute.
82
48
 
83
- * Inspecting an object with an associated array of over 10 elements no longer
84
- truncates the array, preventing `inspect` from looping infinitely in some
85
- cases.
49
+ Fixes #36022.
86
50
 
87
- *Kevin McPhillips*
51
+ *Ryuta Kamizono*
88
52
 
89
- * Ensure hashes can be assigned to attributes created using `composed_of`.
90
- Fixes #25210.
53
+ * Fix sqlite3 collation parsing when using decimal columns.
91
54
 
92
- *Sean Griffin*
55
+ *Martin R. Schuster*
93
56
 
94
- * Queries such as `Computer.joins(:monitor).group(:status).count` will now be
95
- interpreted as `Computer.joins(:monitor).group('computers.status').count`
96
- so that when `Computer` and `Monitor` have both `status` columns we don't
97
- have conflicts in projection.
57
+ * Make ActiveRecord `ConnectionPool.connections` method thread-safe.
98
58
 
99
- *Rafael Sales*
59
+ Fixes #36465.
100
60
 
101
- * ActiveRecord::Relation#count: raise an ArgumentError when finder options
102
- are specified or an ActiveRecord::StatementInvalid when an invalid type
103
- is provided for a column name (e.g. a Hash).
61
+ *Jeff Doering*
104
62
 
105
- Fixes #20434
63
+ * Assign all attributes before calling `build` to ensure the child record is visible in
64
+ `before_add` and `after_add` callbacks for `has_many :through` associations.
106
65
 
107
- *Konstantinos Rousis*
66
+ Fixes #33249.
108
67
 
109
- * Correctly pass MySQL options when using structure_dump or structure_load
68
+ *Ryan H. Kerr*
110
69
 
111
- Specifically, it fixes an issue when using SSL authentication.
112
70
 
113
- *Alex Coomans*
71
+ ## Rails 5.2.3 (March 27, 2019) ##
114
72
 
73
+ * Fix different `count` calculation when using `size` with manual `select` with DISTINCT.
115
74
 
116
- ## Rails 4.2.6 (March 07, 2016) ##
75
+ Fixes #35214.
117
76
 
118
- * Fix a bug where using `t.foreign_key` twice with the same `to_table` within
119
- the same table definition would only create one foreign key.
77
+ *Juani Villarejo*
120
78
 
121
- *George Millo*
79
+ * Fix prepared statements caching to be enabled even when query caching is enabled.
122
80
 
123
- * Fix regression in dirty attribute tracking after #dup. Changes to the
124
- clone no longer show as changed attributes in the original object.
81
+ *Ryuta Kamizono*
125
82
 
126
- *Dominic Cleal*
83
+ * Don't allow `where` with invalid value matches to nil values.
127
84
 
128
- * Fix regression when loading fixture files with symbol keys.
85
+ Fixes #33624.
129
86
 
130
- Closes #22584.
87
+ *Ryuta Kamizono*
131
88
 
132
- *Yves Senn*
89
+ * Restore an ability that class level `update` without giving ids.
133
90
 
134
- * Fix `rake db:structure:dump` on Postgres when multiple schemas are used.
91
+ Fixes #34743.
135
92
 
136
- Fixes #22346.
93
+ *Ryuta Kamizono*
137
94
 
138
- *Nick Muerdter*, *ckoenig*
95
+ * Fix join table column quoting with SQLite.
139
96
 
140
- * Introduce `connection.data_sources` and `connection.data_source_exists?`.
141
- These methods determine what relations can be used to back Active Record
142
- models (usually tables and views).
97
+ *Gannon McGibbon*
143
98
 
144
- *Yves Senn*, *Matthew Draper*
99
+ * Ensure that `delete_all` on collection proxy returns affected count.
145
100
 
101
+ *Ryuta Kamizono*
146
102
 
147
- ## Rails 4.2.5.2 (February 26, 2016) ##
103
+ * Reset scope after delete on collection association to clear stale offsets of removed records.
148
104
 
149
- * No changes.
105
+ *Gannon McGibbon*
150
106
 
151
107
 
152
- ## Rails 4.2.5.1 (January 25, 2015) ##
108
+ ## Rails 5.2.2.1 (March 11, 2019) ##
153
109
 
154
110
  * No changes.
155
111
 
156
112
 
157
- ## Rails 4.2.5 (November 12, 2015) ##
158
-
159
- * No longer pass deprecated option `-i` to `pg_dump`.
160
-
161
- *Paul Sadauskas*
162
-
163
- * Set `scope.reordering_value` to `true` if :reordering values are specified.
164
-
165
- Fixes #21886.
166
-
167
- *Hiroaki Izu*
168
-
169
- * Avoid disabling errors on the PostgreSQL connection when enabling the
170
- standard_conforming_strings setting. Errors were previously disabled because
171
- the setting wasn't writable in Postgres 8.1 and didn't exist in earlier
172
- versions. Now Rails only supports Postgres 8.2+ we're fine to assume the
173
- setting exists. Disabling errors caused problems when using a connection
174
- pooling tool like PgBouncer because it's not guaranteed to have the same
175
- connection between calls to `execute` and it could leave the connection
176
- with errors disabled.
113
+ ## Rails 5.2.2 (December 04, 2018) ##
177
114
 
178
- Fixes #22101.
115
+ * Do not ignore the scoping with query methods in the scope block.
179
116
 
180
- *Harry Marr*
181
-
182
- * Includes HABTM returns correct size now. It's caused by the join dependency
183
- only instantiates one HABTM object because the join table hasn't a primary key.
184
-
185
- Fixes #16032.
186
-
187
- Examples:
188
-
189
- before:
190
-
191
- Project.first.salaried_developers.size # => 3
192
- Project.includes(:salaried_developers).first.salaried_developers.size # => 1
117
+ *Ryuta Kamizono*
193
118
 
194
- after:
119
+ * Allow aliased attributes to be used in `#update_columns` and `#update`.
195
120
 
196
- Project.first.salaried_developers.size # => 3
197
- Project.includes(:salaried_developers).first.salaried_developers.size # => 3
121
+ *Gannon McGibbon*
198
122
 
199
- *Bigxiang*
123
+ * Allow spaces in postgres table names.
200
124
 
201
- * Descriptive error message when fixtures contain a missing column.
125
+ Fixes issue where "user post" is misinterpreted as "\"user\".\"post\"" when quoting table names with the postgres
126
+ adapter.
202
127
 
203
- Closes #21201.
128
+ *Gannon McGibbon*
204
129
 
205
- *Yves Senn*
130
+ * Cached columns_hash fields should be excluded from ResultSet#column_types
206
131
 
207
- * `bin/rake db:migrate` uses
208
- `ActiveRecord::Tasks::DatabaseTasks.migrations_paths` instead of
209
- `Migrator.migrations_paths`.
132
+ PR #34528 addresses the inconsistent behaviour when attribute is defined for an ignored column. The following test
133
+ was passing for SQLite and MySQL, but failed for PostgreSQL:
210
134
 
211
- *Tobias Bielohlawek*
135
+ ```ruby
136
+ class DeveloperName < ActiveRecord::Type::String
137
+ def deserialize(value)
138
+ "Developer: #{value}"
139
+ end
140
+ end
212
141
 
213
- * Fix `rewhere` in a `has_many` association.
142
+ class AttributedDeveloper < ActiveRecord::Base
143
+ self.table_name = "developers"
214
144
 
215
- Fixes #21955.
145
+ attribute :name, DeveloperName.new
216
146
 
217
- *Josh Branchaud*, *Kal*
147
+ self.ignored_columns += ["name"]
148
+ end
218
149
 
219
- * Added run_cmd class method to ActiveRecord::Tasks::DatabaseTasks for
220
- drying up Kernel.system() calls within this namespace and to avoid
221
- shell expansion by using a paramter list instead of string as arguments
222
- for Kernel.system(). Thanks to Nate Berkopec for supply patch to get
223
- test units passing.
150
+ developer = AttributedDeveloper.create
151
+ developer.update_column :name, "name"
224
152
 
225
- *Bryan Paxton*
153
+ loaded_developer = AttributedDeveloper.where(id: developer.id).select("*").first
154
+ puts loaded_developer.name # should be "Developer: name" but it's just "name"
155
+ ```
226
156
 
227
- * Avoid leaking the first relation we call `first` on, per model.
157
+ *Dmitry Tsepelev*
228
158
 
229
- Fixes #21921.
159
+ * Values of enum are frozen, raising an error when attempting to modify them.
230
160
 
231
- *Matthew Draper*, *Jean Boussier*
161
+ *Emmanuel Byrd*
232
162
 
233
- * Allow deserialization of Active Record models that were YAML encoded prior
234
- to Rails 4.2
163
+ * `update_columns` now correctly raises `ActiveModel::MissingAttributeError`
164
+ if the attribute does not exist.
235
165
 
236
166
  *Sean Griffin*
237
167
 
238
- * Correctly apply `unscope` when preloading through associations.
239
-
240
- *Jimmy Bourassa*
241
-
242
- * Ensure `select` quotes aliased attributes, even when using `from`.
243
-
244
- Fixes #21488
245
-
246
- *Sean Griffin & @johanlunds*
247
-
248
- * Correct query for PostgreSQL 8.2 compatibility.
249
-
250
- *Ben Murphy*, *Matthew Draper*
251
-
252
- * Uniqueness validator raises descriptive error when running on a persisted
253
- record without primary key.
254
-
255
- Closes #21304.
256
-
257
- *Yves Senn*
258
-
168
+ * Do not use prepared statement in queries that have a large number of binds.
259
169
 
260
- ## Rails 4.2.4 (August 24, 2015) ##
261
-
262
- * Skip statement cache on through association reader.
263
-
264
- If the through class has default scopes we should skip the statement
265
- cache.
266
-
267
- Closes #20745.
268
-
269
- *Rafael Mendonça França*
270
-
271
- * Fixes #19420. When generating schema.rb using Postgres BigInt[] data type
272
- the limit: 8 was not coming through. This caused it to become Int[] data type
273
- after doing a rebuild off of schema.rb.
274
-
275
- *Jake Waller*
276
-
277
- * Fix state being carried over from previous transaction.
278
-
279
- Considering the following example where `name` is a required attribute.
280
- Before we had `new_record?` returning `true` for a persisted record:
281
-
282
- author = Author.create! name: 'foo'
283
- author.name = nil
284
- author.save # => false
285
- author.new_record? # => true
286
-
287
- Fixes #20824.
288
-
289
- *Roque Pinel*
170
+ *Ryuta Kamizono*
290
171
 
291
- * Correctly ignore `mark_for_destruction` when `autosave` isn't set to `true`
292
- when validating associations.
172
+ * Fix query cache to load before first request.
293
173
 
294
- Fixes #20882.
174
+ *Eileen M. Uchitelle*
295
175
 
296
- *Sean Griffin*
176
+ * Fix collection cache key with limit and custom select to avoid ambiguous timestamp column error.
297
177
 
298
- * Fix through associations using scopes having the scope merged multiple
299
- times.
178
+ Fixes #33056.
300
179
 
301
- Fixes #20721.
302
- Fixes #20727.
180
+ *Federico Martinez*
303
181
 
304
- *Sean Griffin*
182
+ * Fix duplicated record creation when using nested attributes with `create_with`.
305
183
 
306
- * `ActiveRecord::Base.dump_schema_after_migration` applies migration tasks
307
- other than `db:migrate`. (eg. `db:rollback`, `db:migrate:dup`, ...)
184
+ *Darwin Wu*
308
185
 
309
- Fixes #20743.
186
+ * Fix regression setting children record in parent `before_save` callback.
310
187
 
311
- *Yves Senn*
188
+ *Guo Xiang Tan*
312
189
 
313
- * Correctly raise `ActiveRecord::AssociationTypeMismatch` when assigning
314
- a wrong type to a namespaced association.
190
+ * Prevent leaking of user's DB credentials on `rails db:create` failure.
315
191
 
316
- Fixes #20545.
192
+ *bogdanvlviv*
317
193
 
318
- *Diego Carrion*
194
+ * Clear mutation tracker before continuing the around callbacks.
319
195
 
320
- * Prevent error when using `force_reload: true` on an unassigned polymorphic
321
- belongs_to association.
196
+ *Yuya Tanaka*
322
197
 
323
- Fixes #20426.
198
+ * Prevent deadlocks when waiting for connection from pool.
324
199
 
325
- *James Dabbs*
200
+ *Brent Wheeldon*
326
201
 
202
+ * Avoid extra scoping when using `Relation#update` that was causing this method to change the current scope.
327
203
 
328
- ## Rails 4.2.3 (June 25, 2015) ##
204
+ *Ryuta Kamizono*
329
205
 
330
- * Let `WITH` queries (Common Table Expressions) be explainable.
206
+ * Fix numericality validator not to be affected by custom getter.
331
207
 
332
- *Vladimir Kochnev*
208
+ *Ryuta Kamizono*
333
209
 
334
- * Fix n+1 query problem when eager loading nil associations (fixes #18312)
210
+ * Fix bulk change table ignores comment option on PostgreSQL.
335
211
 
336
- *Sammy Larbi*
212
+ *Yoshiyuki Kinjo*
337
213
 
338
- * Fixed an error which would occur in dirty checking when calling
339
- `update_attributes` from a getter.
340
214
 
341
- Fixes #20531.
215
+ ## Rails 5.2.1.1 (November 27, 2018) ##
342
216
 
343
- *Sean Griffin*
217
+ * No changes.
344
218
 
345
- * Ensure symbols passed to `ActiveRecord::Relation#select` are always treated
346
- as columns.
347
219
 
348
- Fixes #20360.
220
+ ## Rails 5.2.1 (August 07, 2018) ##
349
221
 
350
- *Sean Griffin*
222
+ * PostgreSQL: Support new relkind for partitioned tables.
351
223
 
352
- * Clear query cache when `ActiveRecord::Base#reload` is called.
224
+ Fixes #33008.
353
225
 
354
- *Shane Hender*
226
+ *Yannick Schutz*
355
227
 
356
- * Pass `:extend` option for `has_and_belongs_to_many` associations to the
357
- underlying `has_many :through`.
228
+ * Rollback parent transaction when children fails to update.
358
229
 
359
- *Jaehyun Shin*
230
+ *Guillaume Malette*
360
231
 
361
- * Make `unscope` aware of "less than" and "greater than" conditions.
232
+ * Fix default value for MySQL time types with specified precision.
362
233
 
363
- *TAKAHASHI Kazuaki*
234
+ *Nikolay Kondratyev*
364
235
 
365
- * Revert behavior of `db:schema:load` back to loading the full
366
- environment. This ensures that initializers are run.
236
+ * Fix `touch` option to behave consistently with `Persistence#touch` method.
367
237
 
368
- Fixes #19545.
238
+ *Ryuta Kamizono*
369
239
 
370
- *Yves Senn*
240
+ * Fix `save` in `after_create_commit` won't invoke extra `after_create_commit`.
371
241
 
372
- * Fix missing index when using `timestamps` with the `index` option.
242
+ Fixes #32831.
373
243
 
374
- The `index` option used with `timestamps` should be passed to both
375
- `column` definitions for `created_at` and `updated_at` rather than just
376
- the first.
244
+ *Ryuta Kamizono*
377
245
 
378
- *Paul Mucur*
246
+ * Fix logic on disabling commit callbacks so they are not called unexpectedly when errors occur.
379
247
 
380
- * Rename `:class` to `:anonymous_class` in association options.
248
+ *Brian Durand*
381
249
 
382
- Fixes #19659.
250
+ * Fix parent record should not get saved with duplicate children records.
383
251
 
384
- *Andrew White*
252
+ Fixes #32940.
385
253
 
386
- * Fixed a bug where uniqueness validations would error on out of range values,
387
- even if an validation should have prevented it from hitting the database.
254
+ *Santosh Wadghule*
388
255
 
389
- *Andrey Voronkov*
256
+ * Fix that association's after_touch is not called with counter cache.
390
257
 
391
- * Foreign key related methods in the migration DSL respect
392
- `ActiveRecord::Base.pluralize_table_names = false`.
258
+ Fixes #31559.
393
259
 
394
- Fixes #19643.
260
+ *Ryuta Kamizono*
395
261
 
396
- *Mehmet Emin İNAÇ*
262
+ * `becomes` should clear the mutation tracker which is created in `after_initialize`.
397
263
 
398
- * Reduce memory usage from loading types on pg.
264
+ Fixes #32867.
399
265
 
400
- Fixes #19578.
266
+ *Ryuta Kamizono*
401
267
 
402
- *Sean Griffin*
268
+ * Allow a belonging to parent object to be created from a new record.
403
269
 
404
- * Fix referencing wrong table aliases while joining tables of has many through
405
- association (only when calling calculation methods).
270
+ *Jolyon Pawlyn*
406
271
 
407
- Fixes #19276.
272
+ * Fix that building record with assigning multiple has_one associations
273
+ wrongly persists through record.
408
274
 
409
- *pinglamb*
275
+ Fixes #32511.
410
276
 
411
- * Don't attempt to update counter caches, when the column wasn't selected.
277
+ *Sam DeCesare*
412
278
 
413
- Fixes #19437.
279
+ * Fix relation merging when one of the relations is going to skip the
280
+ query cache.
414
281
 
415
- *Sean Griffin*
282
+ *James Williams*
416
283
 
417
- * Correctly persist a serialized attribute that has been returned to
418
- its default value by an in-place modification.
419
284
 
420
- Fixes #19467.
285
+ ## Rails 5.2.0 (April 09, 2018) ##
421
286
 
422
- *Matthew Draper*
287
+ * MySQL: Support mysql2 0.5.x.
423
288
 
424
- * Fix default `format` value in `ActiveRecord::Tasks::DatabaseTasks#schema_file`.
289
+ *Aaron Stone*
425
290
 
426
- *James Cox*
291
+ * Apply time column precision on assignment.
427
292
 
428
- * Dont enroll records in the transaction if they dont have commit callbacks.
429
- That was causing a memory grow problem when creating a lot of records inside a transaction.
293
+ PR #20317 changed the behavior of datetime columns so that when they
294
+ have a specified precision then on assignment the value is rounded to
295
+ that precision. This behavior is now applied to time columns as well.
430
296
 
431
- Fixes #15549.
297
+ Fixes #30301.
432
298
 
433
- *Will Bryant*, *Aaron Patterson*
299
+ *Andrew White*
434
300
 
435
- * Correctly create through records when created on a has many through
436
- association when using `where`.
301
+ * Normalize time column values for SQLite database.
437
302
 
438
- Fixes #19073.
303
+ For legacy reasons, time columns in SQLite are stored as full datetimes
304
+ because until #24542 the quoting for time columns didn't remove the date
305
+ component. To ensure that values are consistent we now normalize the
306
+ date component to 2001-01-01 on reading and writing.
439
307
 
440
- *Sean Griffin*
308
+ *Andrew White*
441
309
 
310
+ * Ensure that the date component is removed when quoting times.
442
311
 
443
- ## Rails 4.2.2 (June 16, 2015) ##
312
+ PR #24542 altered the quoting for time columns so that the date component
313
+ was removed however it only removed it when it was 2001-01-01. Now the
314
+ date component is removed irrespective of what the date is.
444
315
 
445
- * No Changes *
316
+ *Andrew White*
446
317
 
318
+ * Fix `dependent: :destroy` issue for has_one/belongs_to relationship where
319
+ the parent class was getting deleted when the child was not.
447
320
 
448
- ## Rails 4.2.1 (March 19, 2015) ##
321
+ Fixes #32022.
449
322
 
450
- * Fixed ActiveRecord::Relation#becomes! and changed_attributes issues for type column
323
+ *Fernando Gorodscy*
451
324
 
452
- Fixes #17139.
325
+ * Whitelist `NULLS FIRST` and `NULLS LAST` in order clauses too.
453
326
 
454
- *Miklos Fazekas*
327
+ *Xavier Noria*
455
328
 
456
- * `remove_reference` with `foreign_key: true` removes the foreign key before
457
- removing the column. This fixes a bug where it was not possible to remove
458
- the column on MySQL.
329
+ * Fix that after commit callbacks on update does not triggered when optimistic locking is enabled.
459
330
 
460
- Fixes #18664.
331
+ *Ryuta Kamizono*
461
332
 
462
- *Yves Senn*
333
+ * Fix `#columns_for_distinct` of MySQL and PostgreSQL to make
334
+ `ActiveRecord::FinderMethods#limited_ids_for` use correct primary key values
335
+ even if `ORDER BY` columns include other table's primary key.
463
336
 
464
- * Add a `:foreign_key` option to `references` and associated migration
465
- methods. The model and migration generators now use this option, rather than
466
- the `add_foreign_key` form.
337
+ Fixes #28364.
467
338
 
468
- *Sean Griffin*
339
+ *Takumi Kagiyama*
469
340
 
470
- * Fix rounding problem for PostgreSQL timestamp column.
341
+ * Make `reflection.klass` raise if `polymorphic?` not to be misused.
471
342
 
472
- If timestamp column have the precision, it need to format according to
473
- the precision of timestamp column.
343
+ Fixes #31876.
474
344
 
475
345
  *Ryuta Kamizono*
476
346
 
477
- * Respect the database default charset for `schema_migrations` table.
347
+ * PostgreSQL: Allow pg-1.0 gem to be used with Active Record.
348
+
349
+ *Lars Kanis*
478
350
 
479
- The charset of `version` column in `schema_migrations` table is depend
480
- on the database default charset and collation rather than the encoding
481
- of the connection.
351
+ * Deprecate `expand_hash_conditions_for_aggregates` without replacement.
352
+ Using a `Relation` for performing queries is the prefered API.
482
353
 
483
354
  *Ryuta Kamizono*
484
355
 
485
- * Respect custom primary keys for associations when calling `Relation#where`
356
+ * Fix not expanded problem when passing an Array object as argument to the where method using `composed_of` column.
486
357
 
487
- Fixes #18813.
358
+ ```
359
+ david_balance = customers(:david).balance
360
+ Customer.where(balance: [david_balance]).to_sql
488
361
 
489
- *Sean Griffin*
362
+ # Before: WHERE `customers`.`balance` = NULL
363
+ # After : WHERE `customers`.`balance` = 50
364
+ ```
490
365
 
491
- * Fixed several edge cases which could result in a counter cache updating
492
- twice or not updating at all for `has_many` and `has_many :through`.
366
+ Fixes #31723.
493
367
 
494
- Fixes #10865.
368
+ *Yutaro Kanagawa*
495
369
 
496
- *Sean Griffin*
370
+ * Fix `count(:all)` with eager loading and having an order other than the driving table.
497
371
 
498
- * Foreign keys added by migrations were given random, generated names. This
499
- meant a different `structure.sql` would be generated every time a developer
500
- ran migrations on their machine.
372
+ Fixes #31783.
501
373
 
502
- The generated part of foreign key names is now a hash of the table name and
503
- column name, which is consistent every time you run the migration.
374
+ *Ryuta Kamizono*
504
375
 
505
- *Chris Sinjakli*
376
+ * Clear the transaction state when an Active Record object is duped.
506
377
 
507
- * Fixed ActiveRecord::Relation#group method when argument is SQL reserved key word:
378
+ Fixes #31670.
508
379
 
509
- SplitTest.group(:key).count
510
- Property.group(:value).count
380
+ *Yuriy Ustushenko*
511
381
 
512
- *Bogdan Gusiev*
382
+ * Support for PostgreSQL foreign tables.
513
383
 
514
- * Don't define autosave association callbacks twice from
515
- `accepts_nested_attributes_for`.
384
+ *fatkodima*
516
385
 
517
- Fixes #18704.
386
+ * Fix relation merger issue with `left_outer_joins`.
518
387
 
519
- *Sean Griffin*
388
+ *Mehmet Emin İNAÇ*
520
389
 
521
- * Integer types will no longer raise a `RangeError` when assigning an
522
- attribute, but will instead raise when going to the database.
390
+ * Don't allow destroyed object mutation after `save` or `save!` is called.
523
391
 
524
- Fixes several vague issues which were never reported directly. See the
525
- commit message from the commit which added this line for some examples.
392
+ *Ryuta Kamizono*
526
393
 
527
- *Sean Griffin*
394
+ * Take into account association conditions when deleting through records.
528
395
 
529
- * Values which would error while being sent to the database (such as an
530
- ASCII-8BIT string with invalid UTF-8 bytes on Sqlite3), no longer error on
531
- assignment. They will still error when sent to the database, but you are
532
- given the ability to re-assign it to a valid value.
396
+ Fixes #18424.
533
397
 
534
- Fixes #18580.
398
+ *Piotr Jakubowski*
535
399
 
536
- *Sean Griffin*
400
+ * Fix nested `has_many :through` associations on unpersisted parent instances.
537
401
 
538
- * Don't remove join dependencies in `Relation#exists?`
402
+ For example, if you have
539
403
 
540
- Fixes #18632.
404
+ class Post < ActiveRecord::Base
405
+ belongs_to :author
406
+ has_many :books, through: :author
407
+ has_many :subscriptions, through: :books
408
+ end
541
409
 
542
- *Sean Griffin*
410
+ class Author < ActiveRecord::Base
411
+ has_one :post
412
+ has_many :books
413
+ has_many :subscriptions, through: :books
414
+ end
543
415
 
544
- * Invalid values assigned to a JSON column are assumed to be `nil`.
416
+ class Book < ActiveRecord::Base
417
+ belongs_to :author
418
+ has_many :subscriptions
419
+ end
545
420
 
546
- Fixes #18629.
421
+ class Subscription < ActiveRecord::Base
422
+ belongs_to :book
423
+ end
547
424
 
548
- *Sean Griffin*
425
+ Before:
549
426
 
550
- * No longer issue deprecation warning when including a scope with extensions.
551
- Previously every scope with extension methods was transformed into an
552
- instance dependent scope. Including such a scope would wrongfully issue a
553
- deprecation warning. This is no longer the case.
427
+ If `post` is not persisted, then `post.subscriptions` will be empty.
554
428
 
555
- Fixes #18467.
429
+ After:
556
430
 
557
- *Yves Senn*
431
+ If `post` is not persisted, then `post.subscriptions` can be set and used
432
+ just like it would if `post` were persisted.
558
433
 
559
- * Correctly use the type provided by `serialize` when updating records using
560
- optimistic locking.
434
+ Fixes #16313.
561
435
 
562
- Fixes #18385.
436
+ *Zoltan Kiss*
563
437
 
564
- *Sean Griffin*
438
+ * Fixed inconsistency with `first(n)` when used with `limit()`.
439
+ The `first(n)` finder now respects the `limit()`, making it consistent
440
+ with `relation.to_a.first(n)`, and also with the behavior of `last(n)`.
565
441
 
566
- * `attribute_will_change!` will no longer cause non-persistable attributes to
567
- be sent to the database.
442
+ Fixes #23979.
568
443
 
569
- Fixes #18407.
444
+ *Brian Christian*
570
445
 
571
- *Sean Griffin*
446
+ * Use `count(:all)` in `HasManyAssociation#count_records` to prevent invalid
447
+ SQL queries for association counting.
572
448
 
573
- * Format the datetime string according to the precision of the datetime field.
449
+ *Klas Eskilson*
574
450
 
575
- Incompatible to rounding behavior between MySQL 5.6 and earlier.
451
+ * Fix to invoke callbacks when using `update_attribute`.
576
452
 
577
- In 5.5, when you insert `2014-08-17 12:30:00.999999` the fractional part
578
- is ignored. In 5.6, it's rounded to `2014-08-17 12:30:01`:
453
+ *Mike Busch*
579
454
 
580
- http://bugs.mysql.com/bug.php?id=68760
455
+ * Fix `count(:all)` to correctly work `distinct` with custom SELECT list.
581
456
 
582
457
  *Ryuta Kamizono*
583
458
 
584
- * Allow precision option for MySQL datetimes.
459
+ * Using subselect for `delete_all` with `limit` or `offset`.
585
460
 
586
461
  *Ryuta Kamizono*
587
462
 
588
- * Clear query cache on rollback.
589
-
590
- *Florian Weingarten*
591
-
592
- * Fixed setting of foreign_key for through associations while building of new record.
593
-
594
- Fixes #12698.
595
-
596
- *Ivan Antropov*
597
-
598
- * Fixed automatic inverse_of for models nested in module.
599
-
600
- *Andrew McCloud*
601
-
602
- * Fix `reaping_frequency` option when the value is a string.
603
-
604
- This usually happens when it is configured using `DATABASE_URL`.
463
+ * Undefine attribute methods on descendants when resetting column
464
+ information.
605
465
 
606
- *korbin*
466
+ *Chris Salzberg*
607
467
 
608
- * Fix error message when trying to create an associated record and the foreign
609
- key is missing.
468
+ * Log database query callers.
610
469
 
611
- Before this fix the following exception was being raised:
470
+ Add `verbose_query_logs` configuration option to display the caller
471
+ of database queries in the log to facilitate N+1 query resolution
472
+ and other debugging.
612
473
 
613
- NoMethodError: undefined method `val' for #<Arel::Nodes::BindParam:0x007fc64d19c218>
474
+ Enabled in development only for new and upgraded applications. Not
475
+ recommended for use in the production environment since it relies
476
+ on Ruby's `Kernel#caller_locations` which is fairly slow.
614
477
 
615
- Now the message is:
478
+ *Olivier Lacan*
616
479
 
617
- ActiveRecord::UnknownAttributeError: unknown attribute 'foreign_key' for Model.
480
+ * Fix conflicts `counter_cache` with `touch: true` by optimistic locking.
618
481
 
619
- *Rafael Mendonça França*
620
-
621
- * Fix change detection problem for PostgreSQL bytea type and
622
- `ArgumentError: string contains null byte` exception with pg-0.18.
623
-
624
- Fixes #17680.
625
-
626
- *Lars Kanis*
627
-
628
- * When a table has a composite primary key, the `primary_key` method for
629
- SQLite3 and PostgreSQL adapters was only returning the first field of the key.
630
- Ensures that it will return nil instead, as Active Record doesn't support
631
- composite primary keys.
632
-
633
- Fixes #18070.
634
-
635
- *arthurnn*
482
+ ```
483
+ # create_table :posts do |t|
484
+ # t.integer :comments_count, default: 0
485
+ # t.integer :lock_version
486
+ # t.timestamps
487
+ # end
488
+ class Post < ApplicationRecord
489
+ end
636
490
 
637
- * Ensure `first!` and friends work on loaded associations.
491
+ # create_table :comments do |t|
492
+ # t.belongs_to :post
493
+ # end
494
+ class Comment < ApplicationRecord
495
+ belongs_to :post, touch: true, counter_cache: true
496
+ end
497
+ ```
638
498
 
639
- Fixes #18237.
640
-
641
- *Sean Griffin*
499
+ Before:
500
+ ```
501
+ post = Post.create!
502
+ # => begin transaction
503
+ INSERT INTO "posts" ("created_at", "updated_at", "lock_version")
504
+ VALUES ("2017-12-11 21:27:11.387397", "2017-12-11 21:27:11.387397", 0)
505
+ commit transaction
506
+
507
+ comment = Comment.create!(post: post)
508
+ # => begin transaction
509
+ INSERT INTO "comments" ("post_id") VALUES (1)
510
+
511
+ UPDATE "posts" SET "comments_count" = COALESCE("comments_count", 0) + 1,
512
+ "lock_version" = COALESCE("lock_version", 0) + 1 WHERE "posts"."id" = 1
513
+
514
+ UPDATE "posts" SET "updated_at" = '2017-12-11 21:27:11.398330',
515
+ "lock_version" = 1 WHERE "posts"."id" = 1 AND "posts"."lock_version" = 0
516
+ rollback transaction
517
+ # => ActiveRecord::StaleObjectError: Attempted to touch a stale object: Post.
518
+
519
+ Comment.take.destroy!
520
+ # => begin transaction
521
+ DELETE FROM "comments" WHERE "comments"."id" = 1
522
+
523
+ UPDATE "posts" SET "comments_count" = COALESCE("comments_count", 0) - 1,
524
+ "lock_version" = COALESCE("lock_version", 0) + 1 WHERE "posts"."id" = 1
525
+
526
+ UPDATE "posts" SET "updated_at" = '2017-12-11 21:42:47.785901',
527
+ "lock_version" = 1 WHERE "posts"."id" = 1 AND "posts"."lock_version" = 0
528
+ rollback transaction
529
+ # => ActiveRecord::StaleObjectError: Attempted to touch a stale object: Post.
530
+ ```
642
531
 
643
- * Dump the default `nil` for PostgreSQL UUID primary key.
532
+ After:
533
+ ```
534
+ post = Post.create!
535
+ # => begin transaction
536
+ INSERT INTO "posts" ("created_at", "updated_at", "lock_version")
537
+ VALUES ("2017-12-11 21:27:11.387397", "2017-12-11 21:27:11.387397", 0)
538
+ commit transaction
644
539
 
645
- *Ryuta Kamizono*
540
+ comment = Comment.create!(post: post)
541
+ # => begin transaction
542
+ INSERT INTO "comments" ("post_id") VALUES (1)
646
543
 
647
- * Don't raise when writing an attribute with an out-of-range datetime passed
648
- by the user.
544
+ UPDATE "posts" SET "comments_count" = COALESCE("comments_count", 0) + 1,
545
+ "lock_version" = COALESCE("lock_version", 0) + 1,
546
+ "updated_at" = '2017-12-11 21:37:09.802642' WHERE "posts"."id" = 1
547
+ commit transaction
649
548
 
650
- *Grey Baker*
549
+ comment.destroy!
550
+ # => begin transaction
551
+ DELETE FROM "comments" WHERE "comments"."id" = 1
651
552
 
652
- * Fixes bug with 'ActiveRecord::Type::Numeric' that causes negative values to
653
- be marked as having changed when set to the same negative value.
553
+ UPDATE "posts" SET "comments_count" = COALESCE("comments_count", 0) - 1,
554
+ "lock_version" = COALESCE("lock_version", 0) + 1,
555
+ "updated_at" = '2017-12-11 21:39:02.685520' WHERE "posts"."id" = 1
556
+ commit transaction
557
+ ```
654
558
 
655
- Fixes #18161.
559
+ Fixes #31199.
656
560
 
657
- *Daniel Fox*
561
+ *bogdanvlviv*
658
562
 
563
+ * Add support for PostgreSQL operator classes to `add_index`.
659
564
 
660
- ## Rails 4.2.0 (December 20, 2014) ##
565
+ Example:
661
566
 
662
- * Introduce `force: :cascade` option for `create_table`. Using this option
663
- will recreate tables even if they have dependent objects (like foreign keys).
664
- `db/schema.rb` now uses `force: :cascade`. This makes it possible to
665
- reload the schema when foreign keys are in place.
567
+ add_index :users, :name, using: :gist, opclass: { name: :gist_trgm_ops }
666
568
 
667
- *Matthew Draper*, *Yves Senn*
569
+ *Greg Navis*
668
570
 
669
- * `db:schema:load` and `db:structure:load` no longer purge the database
670
- before loading the schema. This is left for the user to do.
671
- `db:test:prepare` will still purge the database.
571
+ * Don't allow scopes to be defined which conflict with instance methods on `Relation`.
672
572
 
673
- Fixes #17945.
573
+ Fixes #31120.
674
574
 
675
- *Yves Senn*
575
+ *kinnrot*
676
576
 
677
- * Fix undesirable RangeError by Type::Integer. Add Type::UnsignedInteger.
577
+ * Add new error class `QueryCanceled` which will be raised
578
+ when canceling statement due to user request.
678
579
 
679
580
  *Ryuta Kamizono*
680
581
 
681
- * Add `foreign_type` option to `has_one` and `has_many` association macros.
682
-
683
- This option enables to define the column name of associated object's type for polymorphic associations.
684
-
685
- *Ulisses Almeida, Kassio Borges*
582
+ * Add `#up_only` to database migrations for code that is only relevant when
583
+ migrating up, e.g. populating a new column.
686
584
 
687
- * `add_timestamps` and `remove_timestamps` now properly reversible with
688
- options.
585
+ *Rich Daley*
689
586
 
690
- *Noam Gagliardi-Rabinovich*
587
+ * Require raw SQL fragments to be explicitly marked when used in
588
+ relation query methods.
691
589
 
692
- * Bring back `db:test:prepare` to synchronize the test database schema.
693
-
694
- Manual synchronization using `bin/rake db:test:prepare` is required
695
- when a migration is rolled-back, edited and reapplied.
696
-
697
- `ActiveRecord::Base.maintain_test_schema` now uses `db:test:prepare`
698
- to synchronize the schema. Plugins can use this task as a hook to
699
- provide custom behavior after the schema has been loaded.
700
-
701
- NOTE: `test:prepare` runs before the schema is synchronized.
702
-
703
- Fixes #17171, #15787.
590
+ Before:
591
+ ```
592
+ Article.order("LENGTH(title)")
593
+ ```
704
594
 
705
- *Yves Senn*
595
+ After:
596
+ ```
597
+ Article.order(Arel.sql("LENGTH(title)"))
598
+ ```
706
599
 
707
- * Change `reflections` public api to return the keys as String objects.
600
+ This prevents SQL injection if applications use the [strongly
601
+ discouraged] form `Article.order(params[:my_order])`, under the
602
+ mistaken belief that only column names will be accepted.
708
603
 
709
- Fixes #16928.
604
+ Raw SQL strings will now cause a deprecation warning, which will
605
+ become an UnknownAttributeReference error in Rails 6.0. Applications
606
+ can opt in to the future behavior by setting `allow_unsafe_raw_sql`
607
+ to `:disabled`.
710
608
 
711
- *arthurnn*
609
+ Common and judged-safe string values (such as simple column
610
+ references) are unaffected:
611
+ ```
612
+ Article.order("title DESC")
613
+ ```
712
614
 
713
- * Renaming a table in pg also renames the primary key index.
615
+ *Ben Toews*
714
616
 
715
- Fixes #12856
617
+ * `update_all` will now pass its values to `Type#cast` before passing them to
618
+ `Type#serialize`. This means that `update_all(foo: 'true')` will properly
619
+ persist a boolean.
716
620
 
717
621
  *Sean Griffin*
718
622
 
719
- * Make it possible to access fixtures excluded by a `default_scope`.
720
-
721
- *Yves Senn*
722
-
723
- * Fix preloading of associations with a scope containing joins along with
724
- conditions on the joined association.
725
-
726
- *Siddharth Sharma*
727
-
728
- * Add `Table#name` to match `TableDefinition#name`.
729
-
730
- *Cody Cutrer*
731
-
732
- * Cache `CollectionAssociation#reader` proxies separately before and after
733
- the owner has been saved so that the proxy is not cached without the
734
- owner's id.
735
-
736
- *Ben Woosley*
737
-
738
- * `ActiveRecord::ReadOnlyRecord` now has a descriptive message.
739
-
740
- *Franky W.*
741
-
742
- * Fix preloading of associations which unscope a default scope.
623
+ * Add new error class `StatementTimeout` which will be raised
624
+ when statement timeout exceeded.
743
625
 
744
- Fixes #11036.
745
-
746
- *Byron Bischoff*
747
-
748
- * Added SchemaDumper support for tables with jsonb columns.
749
-
750
- *Ted O'Meara*
751
-
752
- * Deprecate `sanitize_sql_hash_for_conditions` without replacement. Using a
753
- `Relation` for performing queries and updates is the prefered API.
626
+ *Ryuta Kamizono*
754
627
 
755
- *Sean Griffin*
628
+ * Fix `bin/rails db:migrate` with specified `VERSION`.
629
+ `bin/rails db:migrate` with empty VERSION behaves as without `VERSION`.
630
+ Check a format of `VERSION`: Allow a migration version number
631
+ or name of a migration file. Raise error if format of `VERSION` is invalid.
632
+ Raise error if target migration doesn't exist.
756
633
 
757
- * Queries now properly type cast values that are part of a join statement,
758
- even when using type decorators such as `serialize`.
634
+ *bogdanvlviv*
759
635
 
760
- *Melanie Gilman & Sean Griffin*
636
+ * Fixed a bug where column orders for an index weren't written to
637
+ `db/schema.rb` when using the sqlite adapter.
761
638
 
762
- * MySQL enum type lookups, with values matching another type, no longer result
763
- in an endless loop.
639
+ Fixes #30902.
764
640
 
765
- Fixes #17402.
641
+ *Paul Kuruvilla*
766
642
 
767
- *Yves Senn*
643
+ * Remove deprecated method `#sanitize_conditions`.
768
644
 
769
- * Raise `ArgumentError` when the body of a scope is not callable.
645
+ *Rafael Mendonça França*
770
646
 
771
- *Mauro George*
647
+ * Remove deprecated method `#scope_chain`.
772
648
 
773
- * Use type column first in multi-column indexes created with `add-reference`.
649
+ *Rafael Mendonça França*
774
650
 
775
- *Derek Prior*
651
+ * Remove deprecated configuration `.error_on_ignored_order_or_limit`.
776
652
 
777
- * Fix `Relation.rewhere` to work with Range values.
653
+ *Rafael Mendonça França*
778
654
 
779
- *Dan Olson*
655
+ * Remove deprecated arguments from `#verify!`.
780
656
 
781
- * `AR::UnknownAttributeError` now includes the class name of a record.
657
+ *Rafael Mendonça França*
782
658
 
783
- User.new(name: "Yuki Nishijima", project_attributes: {name: "kaminari"})
784
- # => ActiveRecord::UnknownAttributeError: unknown attribute 'name' for User.
659
+ * Remove deprecated argument `name` from `#indexes`.
785
660
 
786
- *Yuki Nishijima*
661
+ *Rafael Mendonça França*
787
662
 
788
- * Fix a regression causing `after_create` callbacks to run before associated
789
- records are autosaved.
663
+ * Remove deprecated method `ActiveRecord::Migrator.schema_migrations_table_name`.
790
664
 
791
- Fixes #17209.
665
+ *Rafael Mendonça França*
792
666
 
793
- *Agis Anastasopoulos*
667
+ * Remove deprecated method `supports_primary_key?`.
794
668
 
795
- * Honor overridden `rack.test` in Rack environment for the connection
796
- management middleware.
669
+ *Rafael Mendonça França*
797
670
 
798
- *Simon Eskildsen*
671
+ * Remove deprecated method `supports_migrations?`.
799
672
 
800
- * Add a truncate method to the connection.
673
+ *Rafael Mendonça França*
801
674
 
802
- *Aaron Patterson*
675
+ * Remove deprecated methods `initialize_schema_migrations_table` and `initialize_internal_metadata_table`.
803
676
 
804
- * Don't autosave unchanged has_one through records.
677
+ *Rafael Mendonça França*
805
678
 
806
- *Alan Kennedy*, *Steve Parrington*
679
+ * Raises when calling `lock!` in a dirty record.
807
680
 
808
- * Do not dump foreign keys for ignored tables.
681
+ *Rafael Mendonça França*
809
682
 
810
- *Yves Senn*
683
+ * Remove deprecated support to passing a class to `:class_name` on associations.
811
684
 
812
- * PostgreSQL adapter correctly dumps foreign keys targeting tables
813
- outside the schema search path.
685
+ *Rafael Mendonça França*
814
686
 
815
- Fixes #16907.
687
+ * Remove deprecated argument `default` from `index_name_exists?`.
816
688
 
817
- *Matthew Draper*, *Yves Senn*
689
+ *Rafael Mendonça França*
818
690
 
819
- * When a thread is killed, rollback the active transaction, instead of
820
- committing it during the stack unwind. Previously, we could commit half-
821
- completed work. This fix only works for Ruby 2.0+; on 1.9, we can't
822
- distinguish a thread kill from an ordinary non-local (block) return, so must
823
- default to committing.
691
+ * Remove deprecated support to `quoted_id` when typecasting an Active Record object.
824
692
 
825
- *Chris Hanks*
693
+ *Rafael Mendonça França*
826
694
 
827
- * A `NullRelation` should represent nothing. This fixes a bug where
828
- `Comment.where(post_id: Post.none)` returned a non-empty result.
695
+ * Fix `bin/rails db:setup` and `bin/rails db:test:prepare` create wrong
696
+ ar_internal_metadata's data for a test database.
829
697
 
830
- Fixes #15176.
698
+ Before:
699
+ ```
700
+ $ RAILS_ENV=test rails dbconsole
701
+ > SELECT * FROM ar_internal_metadata;
702
+ key|value|created_at|updated_at
703
+ environment|development|2017-09-11 23:14:10.815679|2017-09-11 23:14:10.815679
704
+ ```
831
705
 
832
- *Matthew Draper*, *Yves Senn*
706
+ After:
707
+ ```
708
+ $ RAILS_ENV=test rails dbconsole
709
+ > SELECT * FROM ar_internal_metadata;
710
+ key|value|created_at|updated_at
711
+ environment|test|2017-09-11 23:14:10.815679|2017-09-11 23:14:10.815679
712
+ ```
833
713
 
834
- * Include default column limits in schema.rb. Allows defaults to be changed
835
- in the future without affecting old migrations that assumed old defaults.
714
+ Fixes #26731.
836
715
 
837
- *Jeremy Kemper*
716
+ *bogdanvlviv*
838
717
 
839
- * MySQL: schema.rb now includes TEXT and BLOB column limits.
718
+ * Fix longer sequence name detection for serial columns.
840
719
 
841
- *Jeremy Kemper*
720
+ Fixes #28332.
842
721
 
843
- * MySQL: correct LONGTEXT and LONGBLOB limits from 2GB to their true 4GB.
722
+ *Ryuta Kamizono*
844
723
 
845
- *Jeremy Kemper*
724
+ * MySQL: Don't lose `auto_increment: true` in the `db/schema.rb`.
846
725
 
847
- * SQLite3Adapter now checks for views in `table_exists?`. Fixes #14041.
726
+ Fixes #30894.
848
727
 
849
- *Girish Sonawane*
728
+ *Ryuta Kamizono*
850
729
 
851
- * Introduce `connection.supports_views?` to check whether the current adapter
852
- has support for SQL views. Connection adapters should define this method.
730
+ * Fix `COUNT(DISTINCT ...)` for `GROUP BY` with `ORDER BY` and `LIMIT`.
853
731
 
854
- *Yves Senn*
732
+ Fixes #30886.
855
733
 
856
- * Allow included modules to override association methods.
734
+ *Ryuta Kamizono*
857
735
 
858
- Fixes #16684.
736
+ * PostgreSQL `tsrange` now preserves subsecond precision.
859
737
 
860
- *Yves Senn*
738
+ PostgreSQL 9.1+ introduced range types, and Rails added support for using
739
+ this datatype in Active Record. However, the serialization of
740
+ `PostgreSQL::OID::Range` was incomplete, because it did not properly
741
+ cast the bounds that make up the range. This led to subseconds being
742
+ dropped in SQL commands:
861
743
 
862
- * Schema loading rake tasks (like `db:schema:load` and `db:setup`) maintain
863
- the database connection to the current environment.
744
+ Before:
864
745
 
865
- Fixes #16757.
746
+ connection.type_cast(tsrange.serialize(range_value))
747
+ # => "[2010-01-01 13:30:00 UTC,2011-02-02 19:30:00 UTC)"
866
748
 
867
- *Joshua Cody*, *Yves Senn*
749
+ Now:
868
750
 
869
- * MySQL: set the connection collation along with the charset.
751
+ connection.type_cast(tsrange.serialize(range_value))
752
+ # => "[2010-01-01 13:30:00.670277,2011-02-02 19:30:00.745125)"
870
753
 
871
- Sets the connection collation to the database collation configured in
872
- database.yml. Otherwise, `SET NAMES utf8mb4` will use the default
873
- collation for that charset (utf8mb4_general_ci) when you may have chosen
874
- a different collation, like utf8mb4_unicode_ci.
754
+ *Thomas Cannon*
875
755
 
876
- This only applies to literal string comparisons, not column values, so it
877
- is unlikely to affect you.
756
+ * Passing a `Set` to `Relation#where` now behaves the same as passing an
757
+ array.
878
758
 
879
- *Jeremy Kemper*
759
+ *Sean Griffin*
880
760
 
881
- * `default_sequence_name` from the PostgreSQL adapter returns a `String`.
761
+ * Use given algorithm while removing index from database.
882
762
 
883
- *Yves Senn*
763
+ Fixes #24190.
884
764
 
885
- * Fix a regression where whitespaces were stripped from DISTINCT queries in
886
- PostgreSQL.
765
+ *Mehmet Emin İNAÇ*
887
766
 
888
- *Agis Anastasopoulos*
767
+ * Update payload names for `sql.active_record` instrumentation to be
768
+ more descriptive.
889
769
 
890
- Fixes #16623.
770
+ Fixes #30586.
891
771
 
892
- * Fix has_many :through relation merging failing when dynamic conditions are
893
- passed as a lambda with an arity of one.
772
+ *Jeremy Green*
894
773
 
895
- Fixes #16128.
774
+ * Add new error class `LockWaitTimeout` which will be raised
775
+ when lock wait timeout exceeded.
896
776
 
897
- *Agis Anastasopoulos*
777
+ *Gabriel Courtemanche*
898
778
 
899
- * Fix `Relation#exists?` to work with polymorphic associations.
779
+ * Remove deprecated `#migration_keys`.
900
780
 
901
- Fixes #15821.
781
+ *Ryuta Kamizono*
902
782
 
903
- *Kassio Borges*
783
+ * Automatically guess the inverse associations for STI.
904
784
 
905
- * Currently, Active Record rescues any errors raised within
906
- `after_rollback`/`after_create` callbacks and prints them to the logs.
907
- Future versions of Rails will not rescue these errors anymore and
908
- just bubble them up like the other callbacks.
785
+ *Yuichiro Kaneko*
909
786
 
910
- This commit adds an opt-in flag to enable not rescuing the errors.
787
+ * Ensure `sum` honors `distinct` on `has_many :through` associations.
911
788
 
912
- Example:
789
+ Fixes #16791.
913
790
 
914
- # Do not swallow errors in after_commit/after_rollback callbacks.
915
- config.active_record.raise_in_transactional_callbacks = true
791
+ *Aaron Wortham*
916
792
 
917
- Fixes #13460.
793
+ * Add `binary` fixture helper method.
918
794
 
919
- *arthurnn*
795
+ *Atsushi Yoshida*
920
796
 
921
- * Fix an issue where custom accessor methods (such as those generated by
922
- `enum`) with the same name as a global method are incorrectly overridden
923
- when subclassing.
797
+ * When using `Relation#or`, extract the common conditions and put them before the OR condition.
924
798
 
925
- Fixes #16288.
799
+ *Maxime Handfield Lapointe*
926
800
 
927
- *Godfrey Chan*
801
+ * `Relation#or` now accepts two relations who have different values for
802
+ `references` only, as `references` can be implicitly called by `where`.
928
803
 
929
- * `*_was` and `changes` now work correctly for in-place attribute changes as
930
- well.
804
+ Fixes #29411.
931
805
 
932
806
  *Sean Griffin*
933
807
 
934
- * Fix regression on `after_commit` that did not fire with nested transactions.
935
-
936
- Fixes #16425.
937
-
938
- *arthurnn*
808
+ * `ApplicationRecord` is no longer generated when generating models. If you
809
+ need to generate it, it can be created with `rails g application_record`.
939
810
 
940
- * Do not try to write timestamps when a table has no timestamps columns.
811
+ *Lisa Ugray*
941
812
 
942
- Fixes #8813.
813
+ * Fix `COUNT(DISTINCT ...)` with `ORDER BY` and `LIMIT` to keep the existing select list.
943
814
 
944
- *Sergey Potapov*
815
+ *Ryuta Kamizono*
945
816
 
946
- * `index_exists?` with `:name` option does verify specified columns.
817
+ * When a `has_one` association is destroyed by `dependent: destroy`,
818
+ `destroyed_by_association` will now be set to the reflection, matching the
819
+ behaviour of `has_many` associations.
947
820
 
948
- Example:
821
+ *Lisa Ugray*
949
822
 
950
- add_index :articles, :title, name: "idx_title"
823
+ * Fix `unscoped(where: [columns])` removing the wrong bind values.
951
824
 
952
- # Before:
953
- index_exists? :articles, :title, name: "idx_title" # => `true`
954
- index_exists? :articles, :body, name: "idx_title" # => `true`
825
+ When the `where` is called on a relation after a `or`, unscoping the column of that later `where` removed
826
+ bind values used by the `or` instead. (possibly other cases too)
955
827
 
956
- # After:
957
- index_exists? :articles, :title, name: "idx_title" # => `true`
958
- index_exists? :articles, :body, name: "idx_title" # => `false`
828
+ ```
829
+ Post.where(id: 1).or(Post.where(id: 2)).where(foo: 3).unscope(where: :foo).to_sql
830
+ # Currently:
831
+ # SELECT "posts".* FROM "posts" WHERE ("posts"."id" = 2 OR "posts"."id" = 3)
832
+ # With fix:
833
+ # SELECT "posts".* FROM "posts" WHERE ("posts"."id" = 1 OR "posts"."id" = 2)
834
+ ```
959
835
 
960
- *Yves Senn*, *Matthew Draper*
836
+ *Maxime Handfield Lapointe*
961
837
 
962
- * `add_timestamps` and `t.timestamps` now require you to pass the `:null` option.
963
- Not passing the option is deprecated but the default is still `null: true`.
964
- With Rails 5 this will change to `null: false`.
838
+ * Values constructed using multi-parameter assignment will now use the
839
+ post-type-cast value for rendering in single-field form inputs.
965
840
 
966
841
  *Sean Griffin*
967
842
 
968
- * When calling `update_columns` on a record that is not persisted, the error
969
- message now reflects whether that object is a new record or has been
970
- destroyed.
971
-
972
- *Lachlan Sylvester*
973
-
974
- * Define `id_was` to get the previous value of the primary key.
975
-
976
- Currently when we call `id_was` and we have a custom primary key name,
977
- Active Record will return the current value of the primary key. This
978
- makes it impossible to correctly do an update operation if you change the
979
- id.
980
-
981
- Fixes #16413.
982
-
983
- *Rafael Mendonça França*
984
-
985
- * Deprecate `DatabaseTasks.load_schema` to act on the current connection.
986
- Use `.load_schema_current` instead. In the future `load_schema` will
987
- require the `configuration` to act on as an argument.
988
-
989
- *Yves Senn*
990
-
991
- * Fix automatic maintaining test schema to properly handle sql structure
992
- schema format.
993
-
994
- Fixes #15394.
995
-
996
- *Wojciech Wnętrzak*
997
-
998
- * Fix type casting to Decimal from Float with large precision.
999
-
1000
- *Tomohiro Hashidate*
843
+ * `Relation#joins` is no longer affected by the target model's
844
+ `current_scope`, with the exception of `unscoped`.
1001
845
 
1002
- * Deprecate `Reflection#source_macro`
846
+ Fixes #29338.
1003
847
 
1004
- `Reflection#source_macro` is no longer needed in Active Record
1005
- source so it has been deprecated. Code that used `source_macro`
1006
- was removed in #16353.
848
+ *Sean Griffin*
1007
849
 
1008
- *Eileen M. Uchtitelle*, *Aaron Patterson*
850
+ * Change sqlite3 boolean serialization to use 1 and 0.
1009
851
 
1010
- * No verbose backtrace by `db:drop` when database does not exist.
852
+ SQLite natively recognizes 1 and 0 as true and false, but does not natively
853
+ recognize 't' and 'f' as was previously serialized.
1011
854
 
1012
- Fixes #16295.
855
+ This change in serialization requires a migration of stored boolean data
856
+ for SQLite databases, so it's implemented behind a configuration flag
857
+ whose default false value is deprecated.
1013
858
 
1014
- *Kenn Ejima*
859
+ *Lisa Ugray*
1015
860
 
1016
- * Add support for PostgreSQL JSONB.
861
+ * Skip query caching when working with batches of records (`find_each`, `find_in_batches`,
862
+ `in_batches`).
1017
863
 
1018
- Example:
864
+ Previously, records would be fetched in batches, but all records would be retained in memory
865
+ until the end of the request or job.
1019
866
 
1020
- create_table :posts do |t|
1021
- t.jsonb :meta_data
1022
- end
867
+ *Eugene Kenny*
1023
868
 
1024
- *Philippe Creux*, *Chris Teague*
869
+ * Prevent errors raised by `sql.active_record` notification subscribers from being converted into
870
+ `ActiveRecord::StatementInvalid` exceptions.
1025
871
 
1026
- * `db:purge` with MySQL respects `Rails.env`.
872
+ *Dennis Taylor*
1027
873
 
1028
- *Yves Senn*
874
+ * Fix eager loading/preloading association with scope including joins.
1029
875
 
1030
- * `change_column_default :table, :column, nil` with PostgreSQL will issue a
1031
- `DROP DEFAULT` instead of a `DEFAULT NULL` query.
876
+ Fixes #28324.
1032
877
 
1033
- Fixes #16261.
878
+ *Ryuta Kamizono*
1034
879
 
1035
- *Matthew Draper*, *Yves Senn*
880
+ * Fix transactions to apply state to child transactions.
1036
881
 
1037
- * Allow to specify a type for the foreign key column in `references`
1038
- and `add_reference`.
882
+ Previously, if you had a nested transaction and the outer transaction was rolledback, the record from the
883
+ inner transaction would still be marked as persisted.
1039
884
 
1040
- Example:
885
+ This change fixes that by applying the state of the parent transaction to the child transaction when the
886
+ parent transaction is rolledback. This will correctly mark records from the inner transaction as not persisted.
1041
887
 
1042
- change_table :vehicle do |t|
1043
- t.references :station, type: :uuid
1044
- end
888
+ *Eileen M. Uchitelle*, *Aaron Patterson*
1045
889
 
1046
- *Andrey Novikov*, *Łukasz Sarnacki*
890
+ * Deprecate `set_state` method in `TransactionState`.
1047
891
 
1048
- * `create_join_table` removes a common prefix when generating the join table.
1049
- This matches the existing behavior of HABTM associations.
892
+ Deprecated the `set_state` method in favor of setting the state via specific methods. If you need to mark the
893
+ state of the transaction you can now use `rollback!`, `commit!` or `nullify!` instead of
894
+ `set_state(:rolledback)`, `set_state(:committed)`, or `set_state(nil)`.
1050
895
 
1051
- Fixes #13683.
896
+ *Eileen M. Uchitelle*, *Aaron Patterson*
1052
897
 
1053
- *Stefan Kanev*
898
+ * Deprecate delegating to `arel` in `Relation`.
1054
899
 
1055
- * Do not swallow errors on `compute_type` when having a bad `alias_method` on
1056
- a class.
900
+ *Ryuta Kamizono*
1057
901
 
1058
- *arthurnn*
902
+ * Query cache was unavailable when entering the `ActiveRecord::Base.cache` block
903
+ without being connected.
1059
904
 
1060
- * PostgreSQL invalid `uuid` are convert to nil.
905
+ *Tsukasa Oishi*
1061
906
 
1062
- *Abdelkader Boudih*
907
+ * Previously, when building records using a `has_many :through` association,
908
+ if the child records were deleted before the parent was saved, they would
909
+ still be persisted. Now, if child records are deleted before the parent is saved
910
+ on a `has_many :through` association, the child records will not be persisted.
1063
911
 
1064
- * Restore 4.0 behavior for using serialize attributes with `JSON` as coder.
912
+ *Tobias Kraze*
1065
913
 
1066
- With 4.1.x, `serialize` started returning a string when `JSON` was passed as
1067
- the second attribute. It will now return a hash as per previous versions.
914
+ * Merging two relations representing nested joins no longer transforms the joins of
915
+ the merged relation into LEFT OUTER JOIN.
1068
916
 
1069
917
  Example:
1070
918
 
1071
- class Post < ActiveRecord::Base
1072
- serialize :comment, JSON
1073
- end
1074
-
1075
- class Comment
1076
- include ActiveModel::Model
1077
- attr_accessor :category, :text
1078
- end
1079
-
1080
- post = Post.create!
1081
- post.comment = Comment.new(category: "Animals", text: "This is a comment about squirrels.")
1082
- post.save!
1083
-
1084
- # 4.0
1085
- post.comment # => {"category"=>"Animals", "text"=>"This is a comment about squirrels."}
1086
-
1087
- # 4.1 before
1088
- post.comment # => "#<Comment:0x007f80ab48ff98>"
1089
-
1090
- # 4.1 after
1091
- post.comment # => {"category"=>"Animals", "text"=>"This is a comment about squirrels."}
1092
-
1093
- When using `JSON` as the coder in `serialize`, Active Record will use the
1094
- new `ActiveRecord::Coders::JSON` coder which delegates its `dump/load` to
1095
- `ActiveSupport::JSON.encode/decode`. This ensures special objects are dumped
1096
- correctly using the `#as_json` hook.
1097
-
1098
- To keep the previous behaviour, supply a custom coder instead
1099
- ([example](https://gist.github.com/jenncoop/8c4142bbe59da77daa63)).
1100
-
1101
- Fixes #15594.
1102
-
1103
- *Jenn Cooper*
1104
-
1105
- * Do not use `RENAME INDEX` syntax for MariaDB 10.0.
1106
-
1107
- Fixes #15931.
1108
-
1109
- *Jeff Browning*
1110
-
1111
- * Calling `#empty?` on a `has_many` association would use the value from the
1112
- counter cache if one exists.
1113
-
1114
- *David Verhasselt*
1115
-
1116
- * Fix the schema dump generated for tables without constraints and with
1117
- primary key with default value of custom PostgreSQL function result.
1118
-
1119
- Fixes #16111.
1120
-
1121
- *Andrey Novikov*
919
+ ```
920
+ Author.joins(:posts).merge(Post.joins(:comments))
921
+ # Before the change:
922
+ #=> SELECT ... FROM authors INNER JOIN posts ON ... LEFT OUTER JOIN comments ON...
1122
923
 
1123
- * Fix the SQL generated when a `delete_all` is run on an association to not
1124
- produce an `IN` statements.
924
+ # After the change:
925
+ #=> SELECT ... FROM authors INNER JOIN posts ON ... INNER JOIN comments ON...
926
+ ```
1125
927
 
1126
- Before:
1127
-
1128
- UPDATE "categorizations" SET "category_id" = NULL WHERE
1129
- "categorizations"."category_id" = 1 AND "categorizations"."id" IN (1, 2)
1130
-
1131
- After:
928
+ *Maxime Handfield Lapointe*
1132
929
 
1133
- UPDATE "categorizations" SET "category_id" = NULL WHERE
1134
- "categorizations"."category_id" = 1
930
+ * `ActiveRecord::Persistence#touch` does not work well when optimistic locking enabled and
931
+ `locking_column`, without default value, is null in the database.
1135
932
 
1136
- *Eileen M. Uchitelle, Aaron Patterson*
933
+ *bogdanvlviv*
1137
934
 
1138
- * Avoid type casting boolean and `ActiveSupport::Duration` values to numeric
1139
- values for string columns. Otherwise, in some database, the string column
1140
- values will be coerced to a numeric allowing false or 0.seconds match any
1141
- string starting with a non-digit.
935
+ * Fix destroying existing object does not work well when optimistic locking enabled and
936
+ `locking_column` is null in the database.
1142
937
 
1143
- Example:
1144
-
1145
- App.where(apikey: false) # => SELECT * FROM users WHERE apikey = '0'
938
+ *bogdanvlviv*
1146
939
 
1147
- *Dylan Thacker-Smith*
940
+ * Use bulk INSERT to insert fixtures for better performance.
1148
941
 
1149
- * Add a `:required` option to singular associations, providing a nicer
1150
- API for presence validations on associations.
942
+ *Kir Shatrov*
1151
943
 
1152
- *Sean Griffin*
944
+ * Prevent creation of bind param if casted value is nil.
1153
945
 
1154
- * Fix an error in `reset_counters` when associations have `select` scope.
1155
- (Call to `count` generated invalid SQL.)
946
+ *Ryuta Kamizono*
1156
947
 
1157
- *Cade Truitt*
948
+ * Deprecate passing arguments and block at the same time to `count` and `sum` in `ActiveRecord::Calculations`.
1158
949
 
1159
- * After a successful `reload`, `new_record?` is always false.
950
+ *Ryuta Kamizono*
1160
951
 
1161
- Fixes #12101.
952
+ * Loading model schema from database is now thread-safe.
1162
953
 
1163
- *Matthew Draper*
954
+ Fixes #28589.
1164
955
 
1165
- * PostgreSQL renaming table doesn't attempt to rename non existent sequences.
956
+ *Vikrant Chaudhary*, *David Abdemoulaie*
1166
957
 
1167
- *Abdelkader Boudih*
958
+ * Add `ActiveRecord::Base#cache_version` to support recyclable cache keys via the new versioned entries
959
+ in `ActiveSupport::Cache`. This also means that `ActiveRecord::Base#cache_key` will now return a stable key
960
+ that does not include a timestamp any more.
1168
961
 
1169
- * Move 'dependent: :destroy' handling for `belongs_to`
1170
- from `before_destroy` to `after_destroy` callback chain
962
+ NOTE: This feature is turned off by default, and `#cache_key` will still return cache keys with timestamps
963
+ until you set `ActiveRecord::Base.cache_versioning = true`. That's the setting for all new apps on Rails 5.2+
1171
964
 
1172
- Fixes #12380.
965
+ *DHH*
1173
966
 
1174
- *Ivan Antropov*
967
+ * Respect `SchemaDumper.ignore_tables` in rake tasks for databases structure dump.
1175
968
 
1176
- * Detect in-place modifications on String attributes.
969
+ *Rusty Geldmacher*, *Guillermo Iguaran*
1177
970
 
1178
- Before this change, an attribute modified in-place had to be marked as
1179
- changed in order for it to be persisted in the database. Now it is no longer
1180
- required.
971
+ * Add type caster to `RuntimeReflection#alias_name`.
1181
972
 
1182
- Before:
973
+ Fixes #28959.
1183
974
 
1184
- user = User.first
1185
- user.name << ' Griffin'
1186
- user.name_will_change!
1187
- user.save
1188
- user.reload.name # => "Sean Griffin"
975
+ *Jon Moss*
1189
976
 
1190
- After:
977
+ * Deprecate `supports_statement_cache?`.
1191
978
 
1192
- user = User.first
1193
- user.name << ' Griffin'
1194
- user.save
1195
- user.reload.name # => "Sean Griffin"
979
+ *Ryuta Kamizono*
1196
980
 
1197
- *Sean Griffin*
981
+ * Raise error `UnknownMigrationVersionError` on the movement of migrations
982
+ when the current migration does not exist.
1198
983
 
1199
- * Add `ActiveRecord::Base#validate!` that raises `RecordInvalid` if the record
1200
- is invalid.
984
+ *bogdanvlviv*
1201
985
 
1202
- *Bogdan Gusiev*, *Marc Schütz*
986
+ * Fix `bin/rails db:forward` first migration.
1203
987
 
1204
- * Support for adding and removing foreign keys. Foreign keys are now
1205
- a part of `schema.rb`. This is supported by Mysql2Adapter, MysqlAdapter
1206
- and PostgreSQLAdapter.
988
+ *bogdanvlviv*
1207
989
 
1208
- Many thanks to *Matthew Higgins* for laying the foundation with his work on
1209
- [foreigner](https://github.com/matthuhiggins/foreigner).
990
+ * Support Descending Indexes for MySQL.
1210
991
 
1211
- Example:
992
+ MySQL 8.0.1 and higher supports descending indexes: `DESC` in an index definition is no longer ignored.
993
+ See https://dev.mysql.com/doc/refman/8.0/en/descending-indexes.html.
1212
994
 
1213
- # within your migrations:
1214
- add_foreign_key :articles, :authors
1215
- remove_foreign_key :articles, :authors
995
+ *Ryuta Kamizono*
1216
996
 
1217
- *Yves Senn*
997
+ * Fix inconsistency with changed attributes when overriding Active Record attribute reader.
1218
998
 
1219
- * Fix subtle bugs regarding attribute assignment on models with no primary
1220
- key. `'id'` will no longer be part of the attributes hash.
999
+ *bogdanvlviv*
1221
1000
 
1222
- *Sean Griffin*
1001
+ * When calling the dynamic fixture accessor method with no arguments, it now returns all fixtures of this type.
1002
+ Previously this method always returned an empty array.
1223
1003
 
1224
- * Deprecate automatic counter caches on `has_many :through`. The behavior was
1225
- broken and inconsistent.
1226
-
1227
- *Sean Griffin*
1228
-
1229
- * `preload` preserves readonly flag for associations.
1230
-
1231
- See #15853.
1232
-
1233
- *Yves Senn*
1234
-
1235
- * Assume numeric types have changed if they were assigned to a value that
1236
- would fail numericality validation, regardless of the old value. Previously
1237
- this would only occur if the old value was 0.
1238
-
1239
- Example:
1240
-
1241
- model = Model.create!(number: 5)
1242
- model.number = '5wibble'
1243
- model.number_changed? # => true
1244
-
1245
- Fixes #14731.
1246
-
1247
- *Sean Griffin*
1248
-
1249
- * `reload` no longer merges with the existing attributes.
1250
- The attribute hash is fully replaced. The record is put into the same state
1251
- as it would be with `Model.find(model.id)`.
1252
-
1253
- *Sean Griffin*
1254
-
1255
- * The object returned from `select_all` must respond to `column_types`.
1256
- If this is not the case a `NoMethodError` is raised.
1257
-
1258
- *Sean Griffin*
1259
-
1260
- * Detect in-place modifications of PG array types
1261
-
1262
- *Sean Griffin*
1263
-
1264
- * Add `bin/rake db:purge` task to empty the current database.
1265
-
1266
- *Yves Senn*
1267
-
1268
- * Deprecate `serialized_attributes` without replacement.
1269
-
1270
- *Sean Griffin*
1271
-
1272
- * Correctly extract IPv6 addresses from `DATABASE_URI`: the square brackets
1273
- are part of the URI structure, not the actual host.
1274
-
1275
- Fixes #15705.
1276
-
1277
- *Andy Bakun*, *Aaron Stone*
1278
-
1279
- * Ensure both parent IDs are set on join records when both sides of a
1280
- through association are new.
1281
-
1282
- *Sean Griffin*
1283
-
1284
- * `ActiveRecord::Dirty` now detects in-place changes to mutable values.
1285
- Serialized attributes on ActiveRecord models will no longer save when
1286
- unchanged.
1287
-
1288
- Fixes #8328.
1289
-
1290
- *Sean Griffin*
1291
-
1292
- * `Pluck` now works when selecting columns from different tables with the same
1293
- name.
1294
-
1295
- Fixes #15649.
1296
-
1297
- *Sean Griffin*
1298
-
1299
- * Remove `cache_attributes` and friends. All attributes are cached.
1300
-
1301
- *Sean Griffin*
1302
-
1303
- * Remove deprecated method `ActiveRecord::Base.quoted_locking_column`.
1304
-
1305
- *Akshay Vishnoi*
1306
-
1307
- * `ActiveRecord::FinderMethods.find` with block can handle proc parameter as
1308
- `Enumerable#find` does.
1309
-
1310
- Fixes #15382.
1311
-
1312
- *James Yang*
1313
-
1314
- * Make timezone aware attributes work with PostgreSQL array columns.
1315
-
1316
- Fixes #13402.
1317
-
1318
- *Kuldeep Aggarwal*, *Sean Griffin*
1319
-
1320
- * `ActiveRecord::SchemaMigration` has no primary key regardless of the
1321
- `primary_key_prefix_type` configuration.
1322
-
1323
- Fixes #15051.
1324
-
1325
- *JoseLuis Torres*, *Yves Senn*
1326
-
1327
- * `rake db:migrate:status` works with legacy migration numbers like `00018_xyz.rb`.
1328
-
1329
- Fixes #15538.
1330
-
1331
- *Yves Senn*
1332
-
1333
- * Baseclass becomes! subclass.
1334
-
1335
- Before this change, a record which changed its STI type, could not be
1336
- updated.
1337
-
1338
- Fixes #14785.
1339
-
1340
- *Matthew Draper*, *Earl St Sauver*, *Edo Balvers*
1341
-
1342
- * Remove deprecated `ActiveRecord::Migrator.proper_table_name`. Use the
1343
- `proper_table_name` instance method on `ActiveRecord::Migration` instead.
1344
-
1345
- *Akshay Vishnoi*
1346
-
1347
- * Fix regression on eager loading association based on SQL query rather than
1348
- existing column.
1349
-
1350
- Fixes #15480.
1351
-
1352
- *Lauro Caetano*, *Carlos Antonio da Silva*
1353
-
1354
- * Deprecate returning `nil` from `column_for_attribute` when no column exists.
1355
- It will return a null object in Rails 5.0
1356
-
1357
- *Sean Griffin*
1358
-
1359
- * Implemented `ActiveRecord::Base#pretty_print` to work with PP.
1360
-
1361
- *Ethan*
1362
-
1363
- * Preserve type when dumping PostgreSQL point, bit, bit varying and money
1364
- columns.
1365
-
1366
- *Yves Senn*
1367
-
1368
- * New records remain new after YAML serialization.
1369
-
1370
- *Sean Griffin*
1371
-
1372
- * PostgreSQL support default values for enum types. Fixes #7814.
1373
-
1374
- *Yves Senn*
1375
-
1376
- * PostgreSQL `default_sequence_name` respects schema. Fixes #7516.
1377
-
1378
- *Yves Senn*
1379
-
1380
- * Fix `columns_for_distinct` of PostgreSQL adapter to work correctly
1381
- with orders without sort direction modifiers.
1382
-
1383
- *Nikolay Kondratyev*
1384
-
1385
- * PostgreSQL `reset_pk_sequence!` respects schemas. Fixes #14719.
1386
-
1387
- *Yves Senn*
1388
-
1389
- * Keep PostgreSQL `hstore` and `json` attributes as `Hash` in `@attributes`.
1390
- Fixes duplication in combination with `store_accessor`.
1391
-
1392
- Fixes #15369.
1393
-
1394
- *Yves Senn*
1395
-
1396
- * `rake railties:install:migrations` respects the order of railties.
1397
-
1398
- *Arun Agrawal*
1399
-
1400
- * Fix redefine a `has_and_belongs_to_many` inside inherited class
1401
- Fixing regression case, where redefining the same `has_and_belongs_to_many`
1402
- definition into a subclass would raise.
1403
-
1404
- Fixes #14983.
1405
-
1406
- *arthurnn*
1407
-
1408
- * Fix `has_and_belongs_to_many` public reflection.
1409
- When defining a `has_and_belongs_to_many`, internally we convert that to two has_many.
1410
- But as `reflections` is a public API, people expect to see the right macro.
1411
-
1412
- Fixes #14682.
1413
-
1414
- *arthurnn*
1415
-
1416
- * Fix serialization for records with an attribute named `format`.
1417
-
1418
- Fixes #15188.
1419
-
1420
- *Godfrey Chan*
1421
-
1422
- * When a `group` is set, `sum`, `size`, `average`, `minimum` and `maximum`
1423
- on a NullRelation should return a Hash.
1424
-
1425
- *Kuldeep Aggarwal*
1426
-
1427
- * Fix serialized fields returning serialized data after being updated with
1428
- `update_column`.
1429
-
1430
- *Simon Hørup Eskildsen*
1431
-
1432
- * Fix polymorphic eager loading when using a String as foreign key.
1433
-
1434
- Fixes #14734.
1435
-
1436
- *Lauro Caetano*
1437
-
1438
- * Change belongs_to touch to be consistent with timestamp updates
1439
-
1440
- If a model is set up with a belongs_to: touch relationship the parent
1441
- record will only be touched if the record was modified. This makes it
1442
- consistent with timestamp updating on the record itself.
1443
-
1444
- *Brock Trappitt*
1445
-
1446
- * Fix the inferred table name of a `has_and_belongs_to_many` auxiliary
1447
- table inside a schema.
1448
-
1449
- Fixes #14824.
1450
-
1451
- *Eric Chahin*
1452
-
1453
- * Remove unused `:timestamp` type. Transparently alias it to `:datetime`
1454
- in all cases. Fixes inconsistencies when column types are sent outside of
1455
- `ActiveRecord`, such as for XML Serialization.
1456
-
1457
- *Sean Griffin*
1458
-
1459
- * Fix bug that added `table_name_prefix` and `table_name_suffix` to
1460
- extension names in PostgreSQL when migrating.
1461
-
1462
- *Joao Carlos*
1463
-
1464
- * The `:index` option in migrations, which previously was only available for
1465
- `references`, now works with any column types.
1466
-
1467
- *Marc Schütz*
1468
-
1469
- * Add support for counter name to be passed as parameter on `CounterCache::ClassMethods#reset_counters`.
1470
-
1471
- *jnormore*
1472
-
1473
- * Restrict deletion of record when using `delete_all` with `uniq`, `group`, `having`
1474
- or `offset`.
1475
-
1476
- In these cases the generated query ignored them and that caused unintended
1477
- records to be deleted.
1478
-
1479
- Fixes #11985.
1480
-
1481
- *Leandro Facchinetti*
1482
-
1483
- * Floats with limit >= 25 that get turned into doubles in MySQL no longer have
1484
- their limit dropped from the schema.
1485
-
1486
- Fixes #14135.
1487
-
1488
- *Aaron Nelson*
1489
-
1490
- * Fix how to calculate associated class name when using namespaced `has_and_belongs_to_many`
1491
- association.
1492
-
1493
- Fixes #14709.
1494
-
1495
- *Kassio Borges*
1496
-
1497
- * `ActiveRecord::Relation::Merger#filter_binds` now compares equivalent symbols and
1498
- strings in column names as equal.
1499
-
1500
- This fixes a rare case in which more bind values are passed than there are
1501
- placeholders for them in the generated SQL statement, which can make PostgreSQL
1502
- throw a `StatementInvalid` exception.
1503
-
1504
- *Nat Budin*
1505
-
1506
- * Fix `stored_attributes` to correctly merge the details of stored
1507
- attributes defined in parent classes.
1508
-
1509
- Fixes #14672.
1510
-
1511
- *Brad Bennett*, *Jessica Yao*, *Lakshmi Parthasarathy*
1512
-
1513
- * `change_column_default` allows `[]` as argument to `change_column_default`.
1514
-
1515
- Fixes #11586.
1516
-
1517
- *Yves Senn*
1518
-
1519
- * Handle `name` and `"char"` column types in the PostgreSQL adapter.
1520
-
1521
- `name` and `"char"` are special character types used internally by
1522
- PostgreSQL and are used by internal system catalogs. These field types
1523
- can sometimes show up in structure-sniffing queries that feature internal system
1524
- structures or with certain PostgreSQL extensions.
1525
-
1526
- *J Smith*, *Yves Senn*
1527
-
1528
- * Fix `PostgreSQLAdapter::OID::Float#type_cast` to convert Infinity and
1529
- NaN PostgreSQL values into a native Ruby `Float::INFINITY` and `Float::NAN`
1530
-
1531
- Before:
1532
-
1533
- Point.create(value: 1.0/0)
1534
- Point.last.value # => 0.0
1535
-
1536
- After:
1537
-
1538
- Point.create(value: 1.0/0)
1539
- Point.last.value # => Infinity
1540
-
1541
- *Innokenty Mikhailov*
1542
-
1543
- * Allow the PostgreSQL adapter to handle bigserial primary key types again.
1544
-
1545
- Fixes #10410.
1546
-
1547
- *Patrick Robertson*
1548
-
1549
- * Deprecate joining, eager loading and preloading of instance dependent
1550
- associations without replacement. These operations happen before instances
1551
- are created. The current behavior is unexpected and can result in broken
1552
- behavior.
1553
-
1554
- Fixes #15024.
1555
-
1556
- *Yves Senn*
1557
-
1558
- * Fix `has_and_belongs_to_many` CollectionAssociation size calculations.
1559
-
1560
- `has_and_belongs_to_many` should fall back to using the normal CollectionAssociation's
1561
- size calculation if the collection is not cached or loaded.
1562
-
1563
- Fixes #14913, #14914.
1564
-
1565
- *Fred Wu*
1566
-
1567
- * Return a non zero status when running `rake db:migrate:status` and migration table does
1568
- not exist.
1569
-
1570
- *Paul B.*
1571
-
1572
- * Add support for module-level `table_name_suffix` in models.
1573
-
1574
- This makes `table_name_suffix` work the same way as `table_name_prefix` when
1575
- using namespaced models.
1576
-
1577
- *Jenner LaFave*
1578
-
1579
- * Revert the behaviour of `ActiveRecord::Relation#join` changed through 4.0 => 4.1 to 4.0.
1580
-
1581
- In 4.1.0 `Relation#join` is delegated to `Arel#SelectManager`.
1582
- In 4.0 series it is delegated to `Array#join`.
1583
-
1584
- *Bogdan Gusiev*
1585
-
1586
- * Log nil binary column values correctly.
1587
-
1588
- When an object with a binary column is updated with a nil value
1589
- in that column, the SQL logger would throw an exception when trying
1590
- to log that nil value. This only occurs when updating a record
1591
- that already has a non-nil value in that column since an initial nil
1592
- value isn't included in the SQL anyway (at least, when dirty checking
1593
- is enabled.) The column's new value will now be logged as `<NULL binary data>`
1594
- to parallel the existing `<N bytes of binary data>` for non-nil values.
1595
-
1596
- *James Coleman*
1597
-
1598
- * Rails will now pass a custom validation context through to autosave associations
1599
- in order to validate child associations with the same context.
1600
-
1601
- Fixes #13854.
1602
-
1603
- *Eric Chahin*, *Aaron Nelson*, *Kevin Casey*
1604
-
1605
- * Stringify all variables keys of MySQL connection configuration.
1606
-
1607
- When `sql_mode` variable for MySQL adapters set in configuration as `String`
1608
- was ignored and overwritten by strict mode option.
1609
-
1610
- Fixes #14895.
1611
-
1612
- *Paul Nikitochkin*
1613
-
1614
- * Ensure SQLite3 statements are closed on errors.
1615
-
1616
- Fixes #13631.
1617
-
1618
- *Timur Alperovich*
1619
-
1620
- * Give `ActiveRecord::PredicateBuilder` private methods the privacy they deserve.
1621
-
1622
- *Hector Satre*
1623
-
1624
- * When using a custom `join_table` name on a `habtm`, rails was not saving it
1625
- on Reflections. This causes a problem when rails loads fixtures, because it
1626
- uses the reflections to set database with fixtures.
1627
-
1628
- Fixes #14845.
1629
-
1630
- *Kassio Borges*
1631
-
1632
- * Reset the cache when modifying a Relation with cached Arel.
1633
- Additionally display a warning message to make the user aware.
1634
-
1635
- *Yves Senn*
1636
-
1637
- * PostgreSQL should internally use `:datetime` consistently for TimeStamp. Assures
1638
- different spellings of timestamps are treated the same.
1639
-
1640
- Example:
1641
-
1642
- mytimestamp.simplified_type('timestamp without time zone')
1643
- # => :datetime
1644
- mytimestamp.simplified_type('timestamp(6) without time zone')
1645
- # => also :datetime (previously would be :timestamp)
1646
-
1647
- See #14513.
1648
-
1649
- *Jefferson Lai*
1650
-
1651
- * `ActiveRecord::Base.no_touching` no longer triggers callbacks or start empty transactions.
1652
-
1653
- Fixes #14841.
1654
-
1655
- *Lucas Mazza*
1656
-
1657
- * Fix name collision with `Array#select!` with `Relation#select!`.
1658
-
1659
- Fixes #14752.
1660
-
1661
- *Earl St Sauver*
1662
-
1663
- * Fix unexpected behavior for `has_many :through` associations going through
1664
- a scoped `has_many`.
1665
-
1666
- If a `has_many` association is adjusted using a scope, and another
1667
- `has_many :through` uses this association, then the scope adjustment is
1668
- unexpectedly neglected.
1669
-
1670
- Fixes #14537.
1671
-
1672
- *Jan Habermann*
1673
-
1674
- * `@destroyed` should always be set to `false` when an object is duped.
1675
-
1676
- *Kuldeep Aggarwal*
1677
-
1678
- * Enable `has_many` associations to support irregular inflections.
1679
-
1680
- Fixes #8928.
1681
-
1682
- *arthurnn*, *Javier Goizueta*
1683
-
1684
- * Fix `count` used with a grouping not returning a Hash.
1685
-
1686
- Fixes #14721.
1687
-
1688
- *Eric Chahin*
1689
-
1690
- * `sanitize_sql_like` helper method to escape a string for safe use in an SQL
1691
- LIKE statement.
1692
-
1693
- Example:
1694
-
1695
- class Article
1696
- def self.search(term)
1697
- where("title LIKE ?", sanitize_sql_like(term))
1698
- end
1699
- end
1700
-
1701
- Article.search("20% _reduction_")
1702
- # => Query looks like "... title LIKE '20\% \_reduction\_' ..."
1703
-
1704
- *Rob Gilson*, *Yves Senn*
1705
-
1706
- * Do not quote uuid default value on `change_column`.
1707
-
1708
- Fixes #14604.
1709
-
1710
- *Eric Chahin*
1711
-
1712
- * The comparison between `Relation` and `CollectionProxy` should be consistent.
1713
-
1714
- Example:
1715
-
1716
- author.posts == Post.where(author_id: author.id)
1717
- # => true
1718
- Post.where(author_id: author.id) == author.posts
1719
- # => true
1720
-
1721
- Fixes #13506.
1722
-
1723
- *Lauro Caetano*
1724
-
1725
- * Calling `delete_all` on an unloaded `CollectionProxy` no longer
1726
- generates an SQL statement containing each id of the collection:
1727
-
1728
- Before:
1729
-
1730
- DELETE FROM `model` WHERE `model`.`parent_id` = 1
1731
- AND `model`.`id` IN (1, 2, 3...)
1732
-
1733
- After:
1734
-
1735
- DELETE FROM `model` WHERE `model`.`parent_id` = 1
1736
-
1737
- *Eileen M. Uchitelle*, *Aaron Patterson*
1738
-
1739
- * Fix invalid SQL when aggregate methods (`empty?`, `any?`, `count`) used
1740
- with `select`.
1741
-
1742
- Fixes #13648.
1743
-
1744
- *Simon Woker*
1745
-
1746
- * PostgreSQL adapter only warns once for every missing OID per connection.
1747
-
1748
- Fixes #14275.
1749
-
1750
- *Matthew Draper*, *Yves Senn*
1751
-
1752
- * PostgreSQL adapter automatically reloads it's type map when encountering
1753
- unknown OIDs.
1754
-
1755
- Fixes #14678.
1756
-
1757
- *Matthew Draper*, *Yves Senn*
1758
-
1759
- * Fix insertion of records via `has_many :through` association with scope.
1760
-
1761
- Fixes #3548.
1762
-
1763
- *Ivan Antropov*
1764
-
1765
- * Auto-generate stable fixture UUIDs on PostgreSQL.
1766
-
1767
- Fixes #11524.
1768
-
1769
- *Roderick van Domburg*
1770
-
1771
- * Fix a problem where an enum would overwrite values of another enum with the
1772
- same name in an unrelated class.
1773
-
1774
- Fixes #14607.
1775
-
1776
- *Evan Whalen*
1777
-
1778
- * PostgreSQL and SQLite string columns no longer have a default limit of 255.
1779
-
1780
- Fixes #13435, #9153.
1781
-
1782
- *Vladimir Sazhin*, *Toms Mikoss*, *Yves Senn*
1783
-
1784
- * Make possible to have an association called `records`.
1785
-
1786
- Fixes #11645.
1787
-
1788
- *prathamesh-sonpatki*
1789
-
1790
- * `to_sql` on an association now matches the query that is actually executed, where it
1791
- could previously have incorrectly accrued additional conditions (e.g. as a result of
1792
- a previous query). `CollectionProxy` now always defers to the association scope's
1793
- `arel` method so the (incorrect) inherited one should be entirely concealed.
1794
-
1795
- Fixes #14003.
1796
-
1797
- *Jefferson Lai*
1798
-
1799
- * Block a few default Class methods as scope name.
1800
-
1801
- For instance, this will raise:
1802
-
1803
- scope :public, -> { where(status: 1) }
1804
-
1805
- *arthurnn*
1806
-
1807
- * Fix error when using `with_options` with lambda.
1808
-
1809
- Fixes #9805.
1810
-
1811
- *Lauro Caetano*
1812
-
1813
- * Switch `sqlite3:///` URLs (which were temporarily
1814
- deprecated in 4.1) from relative to absolute.
1815
-
1816
- If you still want the previous interpretation, you should replace
1817
- `sqlite3:///my/path` with `sqlite3:my/path`.
1818
-
1819
- *Matthew Draper*
1820
-
1821
- * Treat blank UUID values as `nil`.
1822
-
1823
- Example:
1824
-
1825
- Sample.new(uuid_field: '') #=> <Sample id: nil, uuid_field: nil>
1826
-
1827
- *Dmitry Lavrov*
1828
-
1829
- * Enable support for materialized views on PostgreSQL >= 9.3.
1830
-
1831
- *Dave Lee*
1832
-
1833
- * The PostgreSQL adapter supports custom domains. Fixes #14305.
1834
-
1835
- *Yves Senn*
1836
-
1837
- * PostgreSQL `Column#type` is now determined through the corresponding OID.
1838
- The column types stay the same except for enum columns. They no longer have
1839
- `nil` as type but `enum`.
1840
-
1841
- See #7814.
1842
-
1843
- *Yves Senn*
1844
-
1845
- * Fix error when specifying a non-empty default value on a PostgreSQL array
1846
- column.
1847
-
1848
- Fixes #10613.
1849
-
1850
- *Luke Steensen*
1851
-
1852
- * Fix error where `.persisted?` throws SystemStackError for an unsaved model with a
1853
- custom primary key that did not save due to validation error.
1854
-
1855
- Fixes #14393.
1856
-
1857
- *Chris Finne*
1858
-
1859
- * Introduce `validate` as an alias for `valid?`.
1860
-
1861
- This is more intuitive when you want to run validations but don't care about the return value.
1862
-
1863
- *Henrik Nyh*
1864
-
1865
- * Create indexes inline in CREATE TABLE for MySQL.
1866
-
1867
- This is important, because adding an index on a temporary table after it has been created
1868
- would commit the transaction.
1869
-
1870
- It also allows creating and dropping indexed tables with fewer queries and fewer permissions
1871
- required.
1872
-
1873
- Example:
1874
-
1875
- create_table :temp, temporary: true, as: "SELECT id, name, zip FROM a_really_complicated_query" do |t|
1876
- t.index :zip
1877
- end
1878
- # => CREATE TEMPORARY TABLE temp (INDEX (zip)) AS SELECT id, name, zip FROM a_really_complicated_query
1879
-
1880
- *Cody Cutrer*, *Steve Rice*, *Rafael Mendonça Franca*
1881
-
1882
- * Use singular table name in generated migrations when
1883
- `ActiveRecord::Base.pluralize_table_names` is `false`.
1884
-
1885
- Fixes #13426.
1886
-
1887
- *Kuldeep Aggarwal*
1888
-
1889
- * `touch` accepts many attributes to be touched at once.
1890
-
1891
- Example:
1892
-
1893
- # touches :signed_at, :sealed_at, and :updated_at/on attributes.
1894
- Photo.last.touch(:signed_at, :sealed_at)
1895
-
1896
- *James Pinto*
1897
-
1898
- * `rake db:structure:dump` only dumps schema information if the schema
1899
- migration table exists.
1900
-
1901
- Fixes #14217.
1902
-
1903
- *Yves Senn*
1904
-
1905
- * Reap connections that were checked out by now-dead threads, instead
1906
- of waiting until they disconnect by themselves. Before this change,
1907
- a suitably constructed series of short-lived threads could starve
1908
- the connection pool, without ever having more than a couple alive at
1909
- the same time.
1910
-
1911
- *Matthew Draper*
1912
-
1913
- * `pk_and_sequence_for` now ensures that only the pg_depend entries
1914
- pointing to pg_class, and thus only sequence objects, are considered.
1915
-
1916
- *Josh Williams*
1917
-
1918
- * `where.not` adds `references` for `includes` like normal `where` calls do.
1919
-
1920
- Fixes #14406.
1921
-
1922
- *Yves Senn*
1923
-
1924
- * Extend fixture `$LABEL` replacement to allow string interpolation.
1925
-
1926
- Example:
1927
-
1928
- martin:
1929
- email: $LABEL@email.com
1930
-
1931
- users(:martin).email # => martin@email.com
1932
-
1933
- *Eric Steele*
1934
-
1935
- * Add support for `Relation` be passed as parameter on `QueryCache#select_all`.
1936
-
1937
- Fixes #14361.
1938
-
1939
- *arthurnn*
1940
-
1941
- * Passing an Active Record object to `find` or `exists?` is now deprecated.
1942
- Call `.id` on the object first.
1943
-
1944
- *Aaron Patterson*
1945
-
1946
- * Only use BINARY for MySQL case sensitive uniqueness check when column
1947
- has a case insensitive collation.
1948
-
1949
- *Ryuta Kamizono*
1950
-
1951
- * Support for MySQL 5.6 fractional seconds.
1952
-
1953
- *arthurnn*, *Tatsuhiko Miyagawa*
1954
-
1955
- * Support for PostgreSQL `citext` data type enabling case-insensitive
1956
- `where` values without needing to wrap in UPPER/LOWER sql functions.
1957
-
1958
- *Troy Kruthoff*, *Lachlan Sylvester*
1959
-
1960
- * Only save has_one associations if record has changes.
1961
- Previously after save related callbacks, such as `#after_commit`, were triggered when the has_one
1962
- object did not get saved to the db.
1963
-
1964
- *Alan Kennedy*
1965
-
1966
- * Allow strings to specify the `#order` value.
1967
-
1968
- Example:
1969
-
1970
- Model.order(id: 'asc').to_sql == Model.order(id: :asc).to_sql
1971
-
1972
- *Marcelo Casiraghi*, *Robin Dupret*
1973
-
1974
- * Dynamically register PostgreSQL enum OIDs. This prevents "unknown OID"
1975
- warnings on enum columns.
1976
-
1977
- *Dieter Komendera*
1978
-
1979
- * `includes` is able to detect the right preloading strategy when string
1980
- joins are involved.
1981
-
1982
- Fixes #14109.
1983
-
1984
- *Aaron Patterson*, *Yves Senn*
1985
-
1986
- * Fix error with validation with enum fields for records where the value for
1987
- any enum attribute is always evaluated as 0 during uniqueness validation.
1988
-
1989
- Fixes #14172.
1990
-
1991
- *Vilius Luneckas* *Ahmed AbouElhamayed*
1992
-
1993
- * `before_add` callbacks are fired before the record is saved on
1994
- `has_and_belongs_to_many` associations *and* on `has_many :through`
1995
- associations. Before this change, `before_add` callbacks would be fired
1996
- before the record was saved on `has_and_belongs_to_many` associations, but
1997
- *not* on `has_many :through` associations.
1998
-
1999
- Fixes #14144.
2000
-
2001
- * Fix STI classes not defining an attribute method if there is a conflicting
2002
- private method defined on its ancestors.
2003
-
2004
- Fixes #11569.
2005
-
2006
- *Godfrey Chan*
2007
-
2008
- * Coerce strings when reading attributes. Fixes #10485.
2009
-
2010
- Example:
2011
-
2012
- book = Book.new(title: 12345)
2013
- book.save!
2014
- book.title # => "12345"
2015
-
2016
- *Yves Senn*
2017
-
2018
- * Deprecate half-baked support for PostgreSQL range values with excluding beginnings.
2019
- We currently map PostgreSQL ranges to Ruby ranges. This conversion is not fully
2020
- possible because the Ruby range does not support excluded beginnings.
2021
-
2022
- The current solution of incrementing the beginning is not correct and is now
2023
- deprecated. For subtypes where we don't know how to increment (e.g. `#succ`
2024
- is not defined) it will raise an `ArgumentException` for ranges with excluding
2025
- beginnings.
2026
-
2027
- *Yves Senn*
2028
-
2029
- * Support for user created range types in PostgreSQL.
1004
+ *Kevin McPhillips*
2030
1005
 
2031
- *Yves Senn*
2032
1006
 
2033
- Please check [4-1-stable](https://github.com/rails/rails/blob/4-1-stable/activerecord/CHANGELOG.md) for previous changes.
1007
+ Please check [5-1-stable](https://github.com/rails/rails/blob/5-1-stable/activerecord/CHANGELOG.md) for previous changes.