activerecord 4.2.11.3 → 5.0.0.beta1

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 (229) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +1029 -1349
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +6 -7
  5. data/examples/performance.rb +2 -2
  6. data/lib/active_record.rb +7 -3
  7. data/lib/active_record/aggregations.rb +35 -25
  8. data/lib/active_record/association_relation.rb +2 -2
  9. data/lib/active_record/associations.rb +305 -204
  10. data/lib/active_record/associations/alias_tracker.rb +19 -16
  11. data/lib/active_record/associations/association.rb +10 -8
  12. data/lib/active_record/associations/association_scope.rb +73 -102
  13. data/lib/active_record/associations/belongs_to_association.rb +20 -32
  14. data/lib/active_record/associations/builder/association.rb +28 -34
  15. data/lib/active_record/associations/builder/belongs_to.rb +41 -18
  16. data/lib/active_record/associations/builder/collection_association.rb +8 -24
  17. data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +11 -11
  18. data/lib/active_record/associations/builder/has_many.rb +4 -4
  19. data/lib/active_record/associations/builder/has_one.rb +10 -5
  20. data/lib/active_record/associations/builder/singular_association.rb +2 -9
  21. data/lib/active_record/associations/collection_association.rb +40 -43
  22. data/lib/active_record/associations/collection_proxy.rb +55 -29
  23. data/lib/active_record/associations/foreign_association.rb +1 -1
  24. data/lib/active_record/associations/has_many_association.rb +20 -71
  25. data/lib/active_record/associations/has_many_through_association.rb +8 -52
  26. data/lib/active_record/associations/has_one_association.rb +12 -5
  27. data/lib/active_record/associations/join_dependency.rb +28 -18
  28. data/lib/active_record/associations/join_dependency/join_association.rb +13 -12
  29. data/lib/active_record/associations/preloader.rb +13 -4
  30. data/lib/active_record/associations/preloader/association.rb +45 -51
  31. data/lib/active_record/associations/preloader/collection_association.rb +0 -6
  32. data/lib/active_record/associations/preloader/has_many_through.rb +1 -1
  33. data/lib/active_record/associations/preloader/has_one.rb +0 -8
  34. data/lib/active_record/associations/preloader/through_association.rb +5 -4
  35. data/lib/active_record/associations/singular_association.rb +6 -0
  36. data/lib/active_record/associations/through_association.rb +11 -3
  37. data/lib/active_record/attribute.rb +61 -17
  38. data/lib/active_record/attribute/user_provided_default.rb +23 -0
  39. data/lib/active_record/attribute_assignment.rb +27 -140
  40. data/lib/active_record/attribute_decorators.rb +6 -5
  41. data/lib/active_record/attribute_methods.rb +79 -26
  42. data/lib/active_record/attribute_methods/before_type_cast.rb +1 -1
  43. data/lib/active_record/attribute_methods/dirty.rb +46 -86
  44. data/lib/active_record/attribute_methods/primary_key.rb +2 -2
  45. data/lib/active_record/attribute_methods/query.rb +2 -2
  46. data/lib/active_record/attribute_methods/read.rb +26 -42
  47. data/lib/active_record/attribute_methods/serialization.rb +13 -16
  48. data/lib/active_record/attribute_methods/time_zone_conversion.rb +42 -9
  49. data/lib/active_record/attribute_methods/write.rb +13 -24
  50. data/lib/active_record/attribute_mutation_tracker.rb +70 -0
  51. data/lib/active_record/attribute_set.rb +30 -3
  52. data/lib/active_record/attribute_set/builder.rb +6 -4
  53. data/lib/active_record/attributes.rb +194 -81
  54. data/lib/active_record/autosave_association.rb +33 -15
  55. data/lib/active_record/base.rb +30 -18
  56. data/lib/active_record/callbacks.rb +36 -40
  57. data/lib/active_record/coders/yaml_column.rb +20 -8
  58. data/lib/active_record/collection_cache_key.rb +31 -0
  59. data/lib/active_record/connection_adapters/abstract/connection_pool.rb +431 -122
  60. data/lib/active_record/connection_adapters/abstract/database_limits.rb +3 -3
  61. data/lib/active_record/connection_adapters/abstract/database_statements.rb +40 -22
  62. data/lib/active_record/connection_adapters/abstract/quoting.rb +62 -8
  63. data/lib/active_record/connection_adapters/abstract/schema_creation.rb +46 -38
  64. data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +229 -185
  65. data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +52 -13
  66. data/lib/active_record/connection_adapters/abstract/schema_statements.rb +275 -115
  67. data/lib/active_record/connection_adapters/abstract/transaction.rb +32 -33
  68. data/lib/active_record/connection_adapters/abstract_adapter.rb +83 -32
  69. data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +384 -221
  70. data/lib/active_record/connection_adapters/column.rb +27 -41
  71. data/lib/active_record/connection_adapters/connection_specification.rb +2 -21
  72. data/lib/active_record/connection_adapters/determine_if_preparable_visitor.rb +22 -0
  73. data/lib/active_record/connection_adapters/mysql/schema_creation.rb +57 -0
  74. data/lib/active_record/connection_adapters/mysql/schema_definitions.rb +69 -0
  75. data/lib/active_record/connection_adapters/mysql/schema_dumper.rb +59 -0
  76. data/lib/active_record/connection_adapters/mysql2_adapter.rb +22 -101
  77. data/lib/active_record/connection_adapters/postgresql/column.rb +6 -10
  78. data/lib/active_record/connection_adapters/postgresql/database_statements.rb +3 -3
  79. data/lib/active_record/connection_adapters/postgresql/oid.rb +1 -6
  80. data/lib/active_record/connection_adapters/postgresql/oid/array.rb +23 -57
  81. data/lib/active_record/connection_adapters/postgresql/oid/bit.rb +2 -2
  82. data/lib/active_record/connection_adapters/postgresql/oid/bytea.rb +1 -1
  83. data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +1 -1
  84. data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +7 -22
  85. data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +3 -3
  86. data/lib/active_record/connection_adapters/postgresql/oid/json.rb +1 -26
  87. data/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +2 -2
  88. data/lib/active_record/connection_adapters/postgresql/oid/money.rb +0 -2
  89. data/lib/active_record/connection_adapters/postgresql/oid/point.rb +4 -4
  90. data/lib/active_record/connection_adapters/postgresql/oid/rails_5_1_point.rb +50 -0
  91. data/lib/active_record/connection_adapters/postgresql/oid/range.rb +23 -16
  92. data/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb +0 -4
  93. data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +2 -2
  94. data/lib/active_record/connection_adapters/postgresql/oid/vector.rb +1 -1
  95. data/lib/active_record/connection_adapters/postgresql/oid/xml.rb +1 -1
  96. data/lib/active_record/connection_adapters/postgresql/quoting.rb +18 -11
  97. data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +29 -10
  98. data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +107 -79
  99. data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +54 -0
  100. data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +174 -128
  101. data/lib/active_record/connection_adapters/postgresql/type_metadata.rb +35 -0
  102. data/lib/active_record/connection_adapters/postgresql_adapter.rb +184 -112
  103. data/lib/active_record/connection_adapters/schema_cache.rb +36 -23
  104. data/lib/active_record/connection_adapters/sql_type_metadata.rb +32 -0
  105. data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +15 -0
  106. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +134 -110
  107. data/lib/active_record/connection_adapters/statement_pool.rb +28 -11
  108. data/lib/active_record/connection_handling.rb +5 -5
  109. data/lib/active_record/core.rb +72 -104
  110. data/lib/active_record/counter_cache.rb +9 -20
  111. data/lib/active_record/dynamic_matchers.rb +1 -20
  112. data/lib/active_record/enum.rb +110 -76
  113. data/lib/active_record/errors.rb +72 -47
  114. data/lib/active_record/explain_registry.rb +1 -1
  115. data/lib/active_record/explain_subscriber.rb +1 -1
  116. data/lib/active_record/fixture_set/file.rb +19 -4
  117. data/lib/active_record/fixtures.rb +76 -40
  118. data/lib/active_record/gem_version.rb +4 -4
  119. data/lib/active_record/inheritance.rb +27 -40
  120. data/lib/active_record/integration.rb +4 -4
  121. data/lib/active_record/legacy_yaml_adapter.rb +18 -2
  122. data/lib/active_record/locale/en.yml +3 -2
  123. data/lib/active_record/locking/optimistic.rb +10 -14
  124. data/lib/active_record/locking/pessimistic.rb +1 -1
  125. data/lib/active_record/log_subscriber.rb +40 -22
  126. data/lib/active_record/migration.rb +304 -133
  127. data/lib/active_record/migration/command_recorder.rb +59 -18
  128. data/lib/active_record/migration/compatibility.rb +90 -0
  129. data/lib/active_record/model_schema.rb +92 -40
  130. data/lib/active_record/nested_attributes.rb +45 -34
  131. data/lib/active_record/null_relation.rb +15 -7
  132. data/lib/active_record/persistence.rb +112 -72
  133. data/lib/active_record/querying.rb +6 -5
  134. data/lib/active_record/railtie.rb +20 -13
  135. data/lib/active_record/railties/controller_runtime.rb +1 -1
  136. data/lib/active_record/railties/databases.rake +47 -38
  137. data/lib/active_record/readonly_attributes.rb +1 -1
  138. data/lib/active_record/reflection.rb +182 -57
  139. data/lib/active_record/relation.rb +152 -100
  140. data/lib/active_record/relation/batches.rb +133 -33
  141. data/lib/active_record/relation/batches/batch_enumerator.rb +67 -0
  142. data/lib/active_record/relation/calculations.rb +80 -101
  143. data/lib/active_record/relation/delegation.rb +6 -19
  144. data/lib/active_record/relation/finder_methods.rb +58 -46
  145. data/lib/active_record/relation/from_clause.rb +32 -0
  146. data/lib/active_record/relation/merger.rb +13 -42
  147. data/lib/active_record/relation/predicate_builder.rb +99 -105
  148. data/lib/active_record/relation/predicate_builder/array_handler.rb +11 -16
  149. data/lib/active_record/relation/predicate_builder/association_query_handler.rb +78 -0
  150. data/lib/active_record/relation/predicate_builder/base_handler.rb +17 -0
  151. data/lib/active_record/relation/predicate_builder/basic_object_handler.rb +17 -0
  152. data/lib/active_record/relation/predicate_builder/class_handler.rb +27 -0
  153. data/lib/active_record/relation/predicate_builder/range_handler.rb +17 -0
  154. data/lib/active_record/relation/query_attribute.rb +19 -0
  155. data/lib/active_record/relation/query_methods.rb +274 -238
  156. data/lib/active_record/relation/record_fetch_warning.rb +51 -0
  157. data/lib/active_record/relation/spawn_methods.rb +3 -6
  158. data/lib/active_record/relation/where_clause.rb +173 -0
  159. data/lib/active_record/relation/where_clause_factory.rb +37 -0
  160. data/lib/active_record/result.rb +4 -3
  161. data/lib/active_record/runtime_registry.rb +1 -1
  162. data/lib/active_record/sanitization.rb +94 -65
  163. data/lib/active_record/schema.rb +23 -22
  164. data/lib/active_record/schema_dumper.rb +33 -22
  165. data/lib/active_record/schema_migration.rb +10 -4
  166. data/lib/active_record/scoping.rb +17 -6
  167. data/lib/active_record/scoping/default.rb +19 -6
  168. data/lib/active_record/scoping/named.rb +39 -28
  169. data/lib/active_record/secure_token.rb +38 -0
  170. data/lib/active_record/serialization.rb +2 -4
  171. data/lib/active_record/statement_cache.rb +15 -13
  172. data/lib/active_record/store.rb +8 -3
  173. data/lib/active_record/suppressor.rb +54 -0
  174. data/lib/active_record/table_metadata.rb +64 -0
  175. data/lib/active_record/tasks/database_tasks.rb +30 -40
  176. data/lib/active_record/tasks/mysql_database_tasks.rb +7 -15
  177. data/lib/active_record/tasks/postgresql_database_tasks.rb +11 -2
  178. data/lib/active_record/tasks/sqlite_database_tasks.rb +5 -1
  179. data/lib/active_record/timestamp.rb +16 -9
  180. data/lib/active_record/touch_later.rb +58 -0
  181. data/lib/active_record/transactions.rb +138 -56
  182. data/lib/active_record/type.rb +66 -17
  183. data/lib/active_record/type/adapter_specific_registry.rb +130 -0
  184. data/lib/active_record/type/date.rb +2 -45
  185. data/lib/active_record/type/date_time.rb +2 -49
  186. data/lib/active_record/type/internal/abstract_json.rb +33 -0
  187. data/lib/active_record/type/internal/timezone.rb +15 -0
  188. data/lib/active_record/type/serialized.rb +9 -14
  189. data/lib/active_record/type/time.rb +3 -21
  190. data/lib/active_record/type/type_map.rb +4 -4
  191. data/lib/active_record/type_caster.rb +7 -0
  192. data/lib/active_record/type_caster/connection.rb +29 -0
  193. data/lib/active_record/type_caster/map.rb +19 -0
  194. data/lib/active_record/validations.rb +33 -32
  195. data/lib/active_record/validations/absence.rb +24 -0
  196. data/lib/active_record/validations/associated.rb +10 -3
  197. data/lib/active_record/validations/length.rb +36 -0
  198. data/lib/active_record/validations/presence.rb +12 -12
  199. data/lib/active_record/validations/uniqueness.rb +24 -21
  200. data/lib/rails/generators/active_record/migration.rb +7 -0
  201. data/lib/rails/generators/active_record/migration/migration_generator.rb +7 -4
  202. data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb +8 -3
  203. data/lib/rails/generators/active_record/migration/templates/migration.rb +4 -1
  204. data/lib/rails/generators/active_record/model/model_generator.rb +21 -15
  205. data/lib/rails/generators/active_record/model/templates/model.rb +3 -0
  206. metadata +50 -35
  207. data/lib/active_record/connection_adapters/mysql_adapter.rb +0 -498
  208. data/lib/active_record/connection_adapters/postgresql/array_parser.rb +0 -93
  209. data/lib/active_record/connection_adapters/postgresql/oid/date.rb +0 -11
  210. data/lib/active_record/connection_adapters/postgresql/oid/float.rb +0 -21
  211. data/lib/active_record/connection_adapters/postgresql/oid/infinity.rb +0 -13
  212. data/lib/active_record/connection_adapters/postgresql/oid/integer.rb +0 -11
  213. data/lib/active_record/connection_adapters/postgresql/oid/time.rb +0 -11
  214. data/lib/active_record/serializers/xml_serializer.rb +0 -193
  215. data/lib/active_record/type/big_integer.rb +0 -13
  216. data/lib/active_record/type/binary.rb +0 -50
  217. data/lib/active_record/type/boolean.rb +0 -31
  218. data/lib/active_record/type/decimal.rb +0 -64
  219. data/lib/active_record/type/decimal_without_scale.rb +0 -11
  220. data/lib/active_record/type/decorator.rb +0 -14
  221. data/lib/active_record/type/float.rb +0 -19
  222. data/lib/active_record/type/integer.rb +0 -59
  223. data/lib/active_record/type/mutable.rb +0 -16
  224. data/lib/active_record/type/numeric.rb +0 -36
  225. data/lib/active_record/type/string.rb +0 -40
  226. data/lib/active_record/type/text.rb +0 -11
  227. data/lib/active_record/type/time_value.rb +0 -38
  228. data/lib/active_record/type/unsigned_integer.rb +0 -15
  229. data/lib/active_record/type/value.rb +0 -110
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: 238110845ec2f5b8ff734d31c9673e4863b9c87d71a4f2dc62c4159542e80ccf
4
- data.tar.gz: ee2a8873472201b9fc479c51a025f1f374692d316c497383d8d4e77a0350ed6e
2
+ SHA1:
3
+ metadata.gz: 6e133ed5dfb51d14f02b6c9500a2d6ef12ff3e44
4
+ data.tar.gz: f2c8ed50961369f794784c36333255503f35fee9
5
5
  SHA512:
6
- metadata.gz: cd15b24d6b2f78181be0ea9d5d3e5610a44d485bc1ab5cd090a2546aa8ea9470047fecd295c626c8e319c09af0d078e59cb1458ad70cdc48a66d63da4cab8e60
7
- data.tar.gz: 0e888e548162c2a9c706ab73fabdd8097e72b09f468c2b5d71ac50b8e81b3a4082eec56de388d9a59477184415d000110e09ae1ae3ce7fc68af23d4a3f6a6798
6
+ metadata.gz: 7564870b045ef432c7e34f3633ae3dce0e555727226453144cda406999f0061d5ba663cac60c4b53f390228c33a785ea47a9bda9511e5d699a1cbce61892cb8e
7
+ data.tar.gz: 71237455c5267cb825c34ea0a450e79efa57a757ffc90a2bff1c5965ab9bbef668f323ebbbc4f51ec8a354fac9dff3a13076a49791069ad0410a57f3a7c2f194
@@ -1,183 +1,219 @@
1
- ## Rails 4.2.11.3 (May 15, 2020) ##
1
+ ## Rails 5.0.0.beta1 (December 18, 2015) ##
2
2
 
3
3
  * No changes.
4
4
 
5
5
 
6
- ## Rails 4.2.11.2 (May 15, 2020) ##
6
+ * Order the result of `find(ids)` to match the passed array, if the relation
7
+ has no explicit order defined.
7
8
 
8
- * No changes.
9
-
10
-
11
- ## Rails 4.2.11.1 (March 11, 2019) ##
12
-
13
- * No changes.
14
-
15
-
16
- ## Rails 4.2.11 (November 27, 2018) ##
17
-
18
- * No changes.
9
+ Fixes #20338.
19
10
 
11
+ *Miguel Grazziotin*, *Matthew Draper*
20
12
 
21
- ## Rails 4.2.10 (September 27, 2017) ##
13
+ * Omit default limit values in dumped schema. It's tidier, and if the defaults
14
+ change in the future, we can address that via Migration API Versioning.
22
15
 
23
- * `Relation#joins` is no longer affected by the target model's
24
- `current_scope`, with the exception of `unscoped`.
16
+ *Jean Boussier*
25
17
 
26
- Fixes #29338.
27
-
28
- *Sean Griffin*
18
+ * Support passing the schema name as a prefix to table name in
19
+ `ConnectionAdapters::SchemaStatements#indexes`. Previously the prefix would
20
+ be considered a full part of the index name, and only the schema in the
21
+ current search path would be considered.
29
22
 
30
- ## Rails 4.2.9 (June 26, 2017) ##
31
-
32
- * Fix regression caused by `collection_singular_ids=` ignoring different primary key on relationship.
23
+ *Grey Baker*
33
24
 
34
- *Nick Pezza*
25
+ * Ignore index name in `index_exists?` and `remove_index` when not passed a
26
+ name to check for.
35
27
 
36
- * Fix `rake db:schema:load` with subdirectories.
28
+ *Grey Baker*
37
29
 
38
- *Ryuta Kamizono*
30
+ * Extract support for the legacy `mysql` database adapter from core. It will
31
+ live on in a separate gem for now, but most users should just use `mysql2`.
39
32
 
40
- * Fix `rake db:migrate:status` with subdirectories.
33
+ *Abdelkader Boudih*
41
34
 
42
- *Ryuta Kamizono*
35
+ * ApplicationRecord is a new superclass for all app models, analogous to app
36
+ controllers subclassing ApplicationController instead of
37
+ ActionController::Base. This gives apps a single spot to configure app-wide
38
+ model behavior.
43
39
 
44
- * Fix regression of #1969 with SELECT aliases in HAVING clause.
40
+ Newly generated applications have `app/models/application_record.rb`
41
+ present by default.
45
42
 
46
- *Eugene Kenny*
43
+ *Genadi Samokovarov*
47
44
 
48
- * Fix `wait_timeout` to configurable for mysql2 adapter.
45
+ * Version the API presented to migration classes, so we can change parameter
46
+ defaults without breaking existing migrations, or forcing them to be
47
+ rewritten through a deprecation cycle.
49
48
 
50
- Fixes #26556.
49
+ *Matthew Draper*, *Ravil Bayramgalin*
51
50
 
52
- *Ryuta Kamizono*
51
+ * Use bind params for `limit` and `offset`. This will generate significantly
52
+ fewer prepared statements for common tasks like pagination. To support this
53
+ change, passing a string containing a comma to `limit` has been deprecated,
54
+ and passing an Arel node to `limit` is no longer supported.
53
55
 
54
- * Make `table_name=` reset current statement cache,
55
- so queries are not run against the previous table name.
56
+ Fixes #22250
56
57
 
57
- *namusyaka*
58
+ *Sean Griffin*
58
59
 
60
+ * Introduce after_{create,update,delete}_commit callbacks.
59
61
 
60
- ## Rails 4.2.8 (February 21, 2017) ##
62
+ Before:
61
63
 
62
- * Using a mysql2 connection after it fails to reconnect will now have an error message
63
- saying the connection is closed rather than an undefined method error message.
64
+ after_commit :add_to_index_later, on: :create
65
+ after_commit :update_in_index_later, on: :update
66
+ after_commit :remove_from_index_later, on: :destroy
64
67
 
65
- *Dylan Thacker-Smith*
68
+ After:
66
69
 
67
- * Bust Model.attribute_names cache when resetting column information
70
+ after_create_commit :add_to_index_later
71
+ after_update_commit :update_in_index_later
72
+ after_destroy_commit :remove_from_index_later
68
73
 
69
- *James Coleman*
74
+ Fixes #22515.
70
75
 
71
- * Fix query caching when type information is reset
76
+ *Genadi Samokovarov*
72
77
 
73
- Backports ancillary fix in 5.0.
78
+ * Respect the column default values for `inheritance_column` when
79
+ instantiating records through the base class.
74
80
 
75
- *James Coleman*
81
+ Fixes #17121.
76
82
 
77
- * Allow `joins` to be unscoped.
83
+ Example:
78
84
 
79
- Fixes #13775.
85
+ # The schema of BaseModel has `t.string :type, default: 'SubType'`
86
+ subtype = BaseModel.new
87
+ assert_equals SubType, subtype.class
80
88
 
81
- *Takashi Kokubun*
89
+ *Kuldeep Aggarwal*
82
90
 
83
- * Hashes can once again be passed to setters of `composed_of`, if all of the
84
- mapping methods are methods implemented on `Hash`.
91
+ * Fix `rake db:structure:dump` on Postgres when multiple schemas are used.
85
92
 
86
- Fixes #25978.
93
+ Fixes #22346.
87
94
 
88
- *Sean Griffin*
95
+ *Nick Muerdter*, *ckoenig*
89
96
 
97
+ * Add schema dumping support for PostgreSQL geometric data types.
90
98
 
91
- ## Rails 4.2.7 (July 12, 2016) ##
99
+ *Ryuta Kamizono*
92
100
 
93
- * Inspecting an object with an associated array of over 10 elements no longer
94
- truncates the array, preventing `inspect` from looping infinitely in some
95
- cases.
101
+ * Except keys of `build_record`'s argument from `create_scope` in `initialize_attributes`.
96
102
 
97
- *Kevin McPhillips*
103
+ Fixes #21893.
98
104
 
99
- * Ensure hashes can be assigned to attributes created using `composed_of`.
100
- Fixes #25210.
105
+ *Yuichiro Kaneko*
101
106
 
102
- *Sean Griffin*
107
+ * Deprecate `connection.tables` on the SQLite3 and MySQL adapters.
108
+ Also deprecate passing arguments to `#tables`.
109
+ And deprecate `table_exists?`.
103
110
 
104
- * Queries such as `Computer.joins(:monitor).group(:status).count` will now be
105
- interpreted as `Computer.joins(:monitor).group('computers.status').count`
106
- so that when `Computer` and `Monitor` have both `status` columns we don't
107
- have conflicts in projection.
111
+ The `#tables` method of some adapters (mysql, mysql2, sqlite3) would return
112
+ both tables and views while others (postgresql) just return tables. To make
113
+ their behavior consistent, `#tables` will return only tables in the future.
108
114
 
109
- *Rafael Sales*
115
+ The `#table_exists?` method would check both tables and views. To make
116
+ their behavior consistent with `#tables`, `#table_exists?` will check only
117
+ tables in the future.
110
118
 
111
- * ActiveRecord::Relation#count: raise an ArgumentError when finder options
112
- are specified or an ActiveRecord::StatementInvalid when an invalid type
113
- is provided for a column name (e.g. a Hash).
119
+ *Yuichiro Kaneko*
114
120
 
115
- Fixes #20434
121
+ * Improve support for non Active Record objects on `validates_associated`
116
122
 
117
- *Konstantinos Rousis*
123
+ Skipping `marked_for_destruction?` when the associated object does not responds
124
+ to it make easier to validate virtual associations built on top of Active Model
125
+ objects and/or serialized objects that implement a `valid?` instance method.
118
126
 
119
- * Correctly pass MySQL options when using structure_dump or structure_load
127
+ *Kassio Borges*, *Lucas Mazza*
120
128
 
121
- Specifically, it fixes an issue when using SSL authentication.
129
+ * Change connection management middleware to return a new response with
130
+ a body proxy, rather than mutating the original.
122
131
 
123
- *Alex Coomans*
132
+ *Kevin Buchanan*
124
133
 
134
+ * Make `db:migrate:status` to render `1_some.rb` format migrate files.
125
135
 
126
- ## Rails 4.2.6 (March 07, 2016) ##
136
+ These files are in `db/migrate`:
127
137
 
128
- * Fix a bug where using `t.foreign_key` twice with the same `to_table` within
129
- the same table definition would only create one foreign key.
138
+ * 1_valid_people_have_last_names.rb
139
+ * 20150819202140_irreversible_migration.rb
140
+ * 20150823202140_add_admin_flag_to_users.rb
141
+ * 20150823202141_migration_tests.rb
142
+ * 2_we_need_reminders.rb
143
+ * 3_innocent_jointable.rb
130
144
 
131
- *George Millo*
145
+ Before:
132
146
 
133
- * Fix regression in dirty attribute tracking after #dup. Changes to the
134
- clone no longer show as changed attributes in the original object.
147
+ $ bundle exec rake db:migrate:status
148
+ ...
135
149
 
136
- *Dominic Cleal*
150
+ Status Migration ID Migration Name
151
+ --------------------------------------------------
152
+ up 001 ********** NO FILE **********
153
+ up 002 ********** NO FILE **********
154
+ up 003 ********** NO FILE **********
155
+ up 20150819202140 Irreversible migration
156
+ up 20150823202140 Add admin flag to users
157
+ up 20150823202141 Migration tests
137
158
 
138
- * Fix regression when loading fixture files with symbol keys.
159
+ After:
139
160
 
140
- Closes #22584.
161
+ $ bundle exec rake db:migrate:status
162
+ ...
141
163
 
142
- *Yves Senn*
164
+ Status Migration ID Migration Name
165
+ --------------------------------------------------
166
+ up 001 Valid people have last names
167
+ up 002 We need reminders
168
+ up 003 Innocent jointable
169
+ up 20150819202140 Irreversible migration
170
+ up 20150823202140 Add admin flag to users
171
+ up 20150823202141 Migration tests
143
172
 
144
- * Fix `rake db:structure:dump` on Postgres when multiple schemas are used.
173
+ *Yuichiro Kaneko*
145
174
 
146
- Fixes #22346.
175
+ * Define `ActiveRecord::Sanitization.sanitize_sql_for_order` and use it inside
176
+ `preprocess_order_args`.
147
177
 
148
- *Nick Muerdter*, *ckoenig*
178
+ *Yuichiro Kaneko*
149
179
 
150
- * Introduce `connection.data_sources` and `connection.data_source_exists?`.
151
- These methods determine what relations can be used to back Active Record
152
- models (usually tables and views).
180
+ * Allow bigint with default nil for avoiding auto increment primary key.
153
181
 
154
- *Yves Senn*, *Matthew Draper*
182
+ *Ryuta Kamizono*
155
183
 
184
+ * Remove `DEFAULT_CHARSET` and `DEFAULT_COLLATION` in `MySQLDatabaseTasks`.
156
185
 
157
- ## Rails 4.2.5.2 (February 26, 2016) ##
186
+ We should omit the collation entirely rather than providing a default.
187
+ Then the choice is the responsibility of the server and MySQL distribution.
158
188
 
159
- * No changes.
189
+ *Ryuta Kamizono*
160
190
 
191
+ * Alias `ActiveRecord::Relation#left_joins` to
192
+ `ActiveRecord::Relation#left_outer_joins`.
161
193
 
162
- ## Rails 4.2.5.1 (January 25, 2015) ##
194
+ *Takashi Kokubun*
163
195
 
164
- * No changes.
196
+ * Use advisory locking to raise a `ConcurrentMigrationError` instead of
197
+ attempting to migrate when another migration is currently running.
165
198
 
199
+ *Sam Davies*
166
200
 
167
- ## Rails 4.2.5 (November 12, 2015) ##
201
+ * Added `ActiveRecord::Relation#left_outer_joins`.
168
202
 
169
- * No longer pass deprecated option `-i` to `pg_dump`.
203
+ Example:
170
204
 
171
- *Paul Sadauskas*
205
+ User.left_outer_joins(:posts)
206
+ # => SELECT "users".* FROM "users" LEFT OUTER JOIN "posts" ON
207
+ "posts"."user_id" = "users"."id"
172
208
 
173
- * Set `scope.reordering_value` to `true` if :reordering values are specified.
209
+ *Florian Thomas*
174
210
 
175
- Fixes #21886.
211
+ * Support passing an array to `order` for SQL parameter sanitization.
176
212
 
177
- *Hiroaki Izu*
213
+ *Aaron Suggs*
178
214
 
179
215
  * Avoid disabling errors on the PostgreSQL connection when enabling the
180
- standard_conforming_strings setting. Errors were previously disabled because
216
+ `standard_conforming_strings` setting. Errors were previously disabled because
181
217
  the setting wasn't writable in Postgres 8.1 and didn't exist in earlier
182
218
  versions. Now Rails only supports Postgres 8.2+ we're fine to assume the
183
219
  setting exists. Disabling errors caused problems when using a connection
@@ -189,1855 +225,1499 @@
189
225
 
190
226
  *Harry Marr*
191
227
 
192
- * Includes HABTM returns correct size now. It's caused by the join dependency
193
- only instantiates one HABTM object because the join table hasn't a primary key.
194
-
195
- Fixes #16032.
196
-
197
- Examples:
198
-
199
- before:
200
-
201
- Project.first.salaried_developers.size # => 3
202
- Project.includes(:salaried_developers).first.salaried_developers.size # => 1
203
-
204
- after:
205
-
206
- Project.first.salaried_developers.size # => 3
207
- Project.includes(:salaried_developers).first.salaried_developers.size # => 3
208
-
209
- *Bigxiang*
210
-
211
- * Descriptive error message when fixtures contain a missing column.
212
-
213
- Closes #21201.
214
-
215
- *Yves Senn*
216
-
217
- * `bin/rake db:migrate` uses
218
- `ActiveRecord::Tasks::DatabaseTasks.migrations_paths` instead of
219
- `Migrator.migrations_paths`.
220
-
221
- *Tobias Bielohlawek*
222
-
223
- * Fix `rewhere` in a `has_many` association.
224
-
225
- Fixes #21955.
226
-
227
- *Josh Branchaud*, *Kal*
228
-
229
- * Added run_cmd class method to ActiveRecord::Tasks::DatabaseTasks for
230
- drying up Kernel.system() calls within this namespace and to avoid
231
- shell expansion by using a paramter list instead of string as arguments
232
- for Kernel.system(). Thanks to Nate Berkopec for supply patch to get
233
- test units passing.
234
-
235
- *Bryan Paxton*
236
-
237
- * Avoid leaking the first relation we call `first` on, per model.
238
-
239
- Fixes #21921.
240
-
241
- *Matthew Draper*, *Jean Boussier*
242
-
243
- * Allow deserialization of Active Record models that were YAML encoded prior
244
- to Rails 4.2
245
-
246
- *Sean Griffin*
247
-
248
- * Correctly apply `unscope` when preloading through associations.
249
-
250
- *Jimmy Bourassa*
251
-
252
- * Ensure `select` quotes aliased attributes, even when using `from`.
253
-
254
- Fixes #21488
255
-
256
- *Sean Griffin & @johanlunds*
257
-
258
- * Correct query for PostgreSQL 8.2 compatibility.
259
-
260
- *Ben Murphy*, *Matthew Draper*
261
-
262
- * Uniqueness validator raises descriptive error when running on a persisted
263
- record without primary key.
264
-
265
- Closes #21304.
266
-
267
- *Yves Senn*
268
-
269
-
270
- ## Rails 4.2.4 (August 24, 2015) ##
271
-
272
- * Skip statement cache on through association reader.
273
-
274
- If the through class has default scopes we should skip the statement
275
- cache.
276
-
277
- Closes #20745.
278
-
279
- *Rafael Mendonça França*
280
-
281
- * Fixes #19420. When generating schema.rb using Postgres BigInt[] data type
282
- the limit: 8 was not coming through. This caused it to become Int[] data type
283
- after doing a rebuild off of schema.rb.
284
-
285
- *Jake Waller*
286
-
287
- * Fix state being carried over from previous transaction.
288
-
289
- Considering the following example where `name` is a required attribute.
290
- Before we had `new_record?` returning `true` for a persisted record:
291
-
292
- author = Author.create! name: 'foo'
293
- author.name = nil
294
- author.save # => false
295
- author.new_record? # => true
296
-
297
- Fixes #20824.
298
-
299
- *Roque Pinel*
300
-
301
- * Correctly ignore `mark_for_destruction` when `autosave` isn't set to `true`
302
- when validating associations.
303
-
304
- Fixes #20882.
305
-
306
- *Sean Griffin*
307
-
308
- * Fix through associations using scopes having the scope merged multiple
309
- times.
310
-
311
- Fixes #20721.
312
- Fixes #20727.
313
-
314
- *Sean Griffin*
315
-
316
- * `ActiveRecord::Base.dump_schema_after_migration` applies migration tasks
317
- other than `db:migrate`. (eg. `db:rollback`, `db:migrate:dup`, ...)
228
+ * Set `scope.reordering_value` to `true` if `:reordering`-values are specified.
318
229
 
319
- Fixes #20743.
320
-
321
- *Yves Senn*
322
-
323
- * Correctly raise `ActiveRecord::AssociationTypeMismatch` when assigning
324
- a wrong type to a namespaced association.
325
-
326
- Fixes #20545.
327
-
328
- *Diego Carrion*
329
-
330
- * Prevent error when using `force_reload: true` on an unassigned polymorphic
331
- belongs_to association.
332
-
333
- Fixes #20426.
334
-
335
- *James Dabbs*
336
-
337
-
338
- ## Rails 4.2.3 (June 25, 2015) ##
339
-
340
- * Let `WITH` queries (Common Table Expressions) be explainable.
341
-
342
- *Vladimir Kochnev*
343
-
344
- * Fix n+1 query problem when eager loading nil associations (fixes #18312)
345
-
346
- *Sammy Larbi*
347
-
348
- * Fixed an error which would occur in dirty checking when calling
349
- `update_attributes` from a getter.
350
-
351
- Fixes #20531.
352
-
353
- *Sean Griffin*
354
-
355
- * Ensure symbols passed to `ActiveRecord::Relation#select` are always treated
356
- as columns.
357
-
358
- Fixes #20360.
359
-
360
- *Sean Griffin*
361
-
362
- * Clear query cache when `ActiveRecord::Base#reload` is called.
363
-
364
- *Shane Hender*
365
-
366
- * Pass `:extend` option for `has_and_belongs_to_many` associations to the
367
- underlying `has_many :through`.
368
-
369
- *Jaehyun Shin*
370
-
371
- * Make `unscope` aware of "less than" and "greater than" conditions.
372
-
373
- *TAKAHASHI Kazuaki*
374
-
375
- * Revert behavior of `db:schema:load` back to loading the full
376
- environment. This ensures that initializers are run.
377
-
378
- Fixes #19545.
379
-
380
- *Yves Senn*
381
-
382
- * Fix missing index when using `timestamps` with the `index` option.
383
-
384
- The `index` option used with `timestamps` should be passed to both
385
- `column` definitions for `created_at` and `updated_at` rather than just
386
- the first.
387
-
388
- *Paul Mucur*
389
-
390
- * Rename `:class` to `:anonymous_class` in association options.
391
-
392
- Fixes #19659.
393
-
394
- *Andrew White*
395
-
396
- * Fixed a bug where uniqueness validations would error on out of range values,
397
- even if an validation should have prevented it from hitting the database.
398
-
399
- *Andrey Voronkov*
400
-
401
- * Foreign key related methods in the migration DSL respect
402
- `ActiveRecord::Base.pluralize_table_names = false`.
403
-
404
- Fixes #19643.
405
-
406
- *Mehmet Emin İNAÇ*
407
-
408
- * Reduce memory usage from loading types on pg.
409
-
410
- Fixes #19578.
411
-
412
- *Sean Griffin*
413
-
414
- * Fix referencing wrong table aliases while joining tables of has many through
415
- association (only when calling calculation methods).
416
-
417
- Fixes #19276.
418
-
419
- *pinglamb*
420
-
421
- * Don't attempt to update counter caches, when the column wasn't selected.
422
-
423
- Fixes #19437.
424
-
425
- *Sean Griffin*
426
-
427
- * Correctly persist a serialized attribute that has been returned to
428
- its default value by an in-place modification.
429
-
430
- Fixes #19467.
431
-
432
- *Matthew Draper*
433
-
434
- * Fix default `format` value in `ActiveRecord::Tasks::DatabaseTasks#schema_file`.
435
-
436
- *James Cox*
437
-
438
- * Dont enroll records in the transaction if they dont have commit callbacks.
439
- That was causing a memory grow problem when creating a lot of records inside a transaction.
440
-
441
- Fixes #15549.
442
-
443
- *Will Bryant*, *Aaron Patterson*
444
-
445
- * Correctly create through records when created on a has many through
446
- association when using `where`.
447
-
448
- Fixes #19073.
449
-
450
- *Sean Griffin*
451
-
452
-
453
- ## Rails 4.2.2 (June 16, 2015) ##
454
-
455
- * No Changes *
456
-
457
-
458
- ## Rails 4.2.1 (March 19, 2015) ##
459
-
460
- * Fixed ActiveRecord::Relation#becomes! and changed_attributes issues for type column
461
-
462
- Fixes #17139.
463
-
464
- *Miklos Fazekas*
465
-
466
- * `remove_reference` with `foreign_key: true` removes the foreign key before
467
- removing the column. This fixes a bug where it was not possible to remove
468
- the column on MySQL.
469
-
470
- Fixes #18664.
471
-
472
- *Yves Senn*
473
-
474
- * Add a `:foreign_key` option to `references` and associated migration
475
- methods. The model and migration generators now use this option, rather than
476
- the `add_foreign_key` form.
477
-
478
- *Sean Griffin*
479
-
480
- * Fix rounding problem for PostgreSQL timestamp column.
481
-
482
- If timestamp column have the precision, it need to format according to
483
- the precision of timestamp column.
484
-
485
- *Ryuta Kamizono*
486
-
487
- * Respect the database default charset for `schema_migrations` table.
488
-
489
- The charset of `version` column in `schema_migrations` table is depend
490
- on the database default charset and collation rather than the encoding
491
- of the connection.
492
-
493
- *Ryuta Kamizono*
494
-
495
- * Respect custom primary keys for associations when calling `Relation#where`
496
-
497
- Fixes #18813.
498
-
499
- *Sean Griffin*
500
-
501
- * Fixed several edge cases which could result in a counter cache updating
502
- twice or not updating at all for `has_many` and `has_many :through`.
503
-
504
- Fixes #10865.
505
-
506
- *Sean Griffin*
507
-
508
- * Foreign keys added by migrations were given random, generated names. This
509
- meant a different `structure.sql` would be generated every time a developer
510
- ran migrations on their machine.
511
-
512
- The generated part of foreign key names is now a hash of the table name and
513
- column name, which is consistent every time you run the migration.
514
-
515
- *Chris Sinjakli*
516
-
517
- * Fixed ActiveRecord::Relation#group method when argument is SQL reserved key word:
518
-
519
- SplitTest.group(:key).count
520
- Property.group(:value).count
521
-
522
- *Bogdan Gusiev*
523
-
524
- * Don't define autosave association callbacks twice from
525
- `accepts_nested_attributes_for`.
526
-
527
- Fixes #18704.
528
-
529
- *Sean Griffin*
530
-
531
- * Integer types will no longer raise a `RangeError` when assigning an
532
- attribute, but will instead raise when going to the database.
533
-
534
- Fixes several vague issues which were never reported directly. See the
535
- commit message from the commit which added this line for some examples.
536
-
537
- *Sean Griffin*
538
-
539
- * Values which would error while being sent to the database (such as an
540
- ASCII-8BIT string with invalid UTF-8 bytes on Sqlite3), no longer error on
541
- assignment. They will still error when sent to the database, but you are
542
- given the ability to re-assign it to a valid value.
543
-
544
- Fixes #18580.
545
-
546
- *Sean Griffin*
547
-
548
- * Don't remove join dependencies in `Relation#exists?`
549
-
550
- Fixes #18632.
551
-
552
- *Sean Griffin*
553
-
554
- * Invalid values assigned to a JSON column are assumed to be `nil`.
555
-
556
- Fixes #18629.
557
-
558
- *Sean Griffin*
559
-
560
- * No longer issue deprecation warning when including a scope with extensions.
561
- Previously every scope with extension methods was transformed into an
562
- instance dependent scope. Including such a scope would wrongfully issue a
563
- deprecation warning. This is no longer the case.
564
-
565
- Fixes #18467.
566
-
567
- *Yves Senn*
568
-
569
- * Correctly use the type provided by `serialize` when updating records using
570
- optimistic locking.
571
-
572
- Fixes #18385.
573
-
574
- *Sean Griffin*
575
-
576
- * `attribute_will_change!` will no longer cause non-persistable attributes to
577
- be sent to the database.
578
-
579
- Fixes #18407.
580
-
581
- *Sean Griffin*
582
-
583
- * Format the datetime string according to the precision of the datetime field.
584
-
585
- Incompatible to rounding behavior between MySQL 5.6 and earlier.
586
-
587
- In 5.5, when you insert `2014-08-17 12:30:00.999999` the fractional part
588
- is ignored. In 5.6, it's rounded to `2014-08-17 12:30:01`:
589
-
590
- http://bugs.mysql.com/bug.php?id=68760
591
-
592
- *Ryuta Kamizono*
593
-
594
- * Allow precision option for MySQL datetimes.
595
-
596
- *Ryuta Kamizono*
597
-
598
- * Clear query cache on rollback.
599
-
600
- *Florian Weingarten*
601
-
602
- * Fixed setting of foreign_key for through associations while building of new record.
603
-
604
- Fixes #12698.
605
-
606
- *Ivan Antropov*
607
-
608
- * Fixed automatic inverse_of for models nested in module.
609
-
610
- *Andrew McCloud*
611
-
612
- * Fix `reaping_frequency` option when the value is a string.
613
-
614
- This usually happens when it is configured using `DATABASE_URL`.
615
-
616
- *korbin*
617
-
618
- * Fix error message when trying to create an associated record and the foreign
619
- key is missing.
230
+ Fixes #21886.
620
231
 
621
- Before this fix the following exception was being raised:
232
+ *Hiroaki Izu*
622
233
 
623
- NoMethodError: undefined method `val' for #<Arel::Nodes::BindParam:0x007fc64d19c218>
234
+ * Add support for bidirectional destroy dependencies.
624
235
 
625
- Now the message is:
236
+ Fixes #13609.
626
237
 
627
- ActiveRecord::UnknownAttributeError: unknown attribute 'foreign_key' for Model.
238
+ Example:
628
239
 
629
- *Rafael Mendonça França*
240
+ class Content < ActiveRecord::Base
241
+ has_one :position, dependent: :destroy
242
+ end
630
243
 
631
- * Fix change detection problem for PostgreSQL bytea type and
632
- `ArgumentError: string contains null byte` exception with pg-0.18.
244
+ class Position < ActiveRecord::Base
245
+ belongs_to :content, dependent: :destroy
246
+ end
633
247
 
634
- Fixes #17680.
248
+ *Seb Jacobs*
635
249
 
636
- *Lars Kanis*
250
+ * Includes HABTM returns correct size now. It's caused by the join dependency
251
+ only instantiates one HABTM object because the join table hasn't a primary key.
637
252
 
638
- * When a table has a composite primary key, the `primary_key` method for
639
- SQLite3 and PostgreSQL adapters was only returning the first field of the key.
640
- Ensures that it will return nil instead, as Active Record doesn't support
641
- composite primary keys.
253
+ Fixes #16032.
642
254
 
643
- Fixes #18070.
255
+ Examples:
644
256
 
645
- *arthurnn*
257
+ before:
646
258
 
647
- * Ensure `first!` and friends work on loaded associations.
259
+ Project.first.salaried_developers.size # => 3
260
+ Project.includes(:salaried_developers).first.salaried_developers.size # => 1
648
261
 
649
- Fixes #18237.
262
+ after:
650
263
 
651
- *Sean Griffin*
264
+ Project.first.salaried_developers.size # => 3
265
+ Project.includes(:salaried_developers).first.salaried_developers.size # => 3
652
266
 
653
- * Dump the default `nil` for PostgreSQL UUID primary key.
267
+ *Bigxiang*
654
268
 
655
- *Ryuta Kamizono*
269
+ * Add option to index errors in nested attributes
656
270
 
657
- * Don't raise when writing an attribute with an out-of-range datetime passed
658
- by the user.
271
+ For models which have nested attributes, errors within those models will
272
+ now be indexed if :index_errors is specified when defining a
273
+ has_many relationship, or if its set in the global config.
659
274
 
660
- *Grey Baker*
275
+ Example:
661
276
 
662
- * Fixes bug with 'ActiveRecord::Type::Numeric' that causes negative values to
663
- be marked as having changed when set to the same negative value.
277
+ class Guitar < ActiveRecord::Base
278
+ has_many :tuning_pegs
279
+ accepts_nested_attributes_for :tuning_pegs
280
+ end
664
281
 
665
- Fixes #18161.
282
+ class TuningPeg < ActiveRecord::Base
283
+ belongs_to :guitar
284
+ validates_numericality_of :pitch
285
+ end
666
286
 
667
- *Daniel Fox*
287
+ # Old style
288
+ guitar.errors["tuning_pegs.pitch"] = ["is not a number"]
668
289
 
290
+ # New style (if defined globally, or set in has_many_relationship)
291
+ guitar.errors["tuning_pegs[1].pitch"] = ["is not a number"]
669
292
 
670
- ## Rails 4.2.0 (December 20, 2014) ##
293
+ *Michael Probber*, *Terence Sun*
671
294
 
672
- * Introduce `force: :cascade` option for `create_table`. Using this option
673
- will recreate tables even if they have dependent objects (like foreign keys).
674
- `db/schema.rb` now uses `force: :cascade`. This makes it possible to
675
- reload the schema when foreign keys are in place.
295
+ * Exit with non-zero status for failed database rake tasks.
676
296
 
677
- *Matthew Draper*, *Yves Senn*
297
+ *Jay Hayes*
678
298
 
679
- * `db:schema:load` and `db:structure:load` no longer purge the database
680
- before loading the schema. This is left for the user to do.
681
- `db:test:prepare` will still purge the database.
299
+ * Queries such as `Computer.joins(:monitor).group(:status).count` will now be
300
+ interpreted as `Computer.joins(:monitor).group('computers.status').count`
301
+ so that when `Computer` and `Monitor` have both `status` columns we don't
302
+ have conflicts in projection.
682
303
 
683
- Fixes #17945.
304
+ *Rafael Sales*
684
305
 
685
- *Yves Senn*
306
+ * Add ability to default to `uuid` as primary key when generating database migrations.
686
307
 
687
- * Fix undesirable RangeError by Type::Integer. Add Type::UnsignedInteger.
308
+ Example:
688
309
 
689
- *Ryuta Kamizono*
310
+ config.generators do |g|
311
+ g.orm :active_record, primary_key_type: :uuid
312
+ end
690
313
 
691
- * Add `foreign_type` option to `has_one` and `has_many` association macros.
314
+ *Jon McCartie*
692
315
 
693
- This option enables to define the column name of associated object's type for polymorphic associations.
316
+ * Don't cache arguments in `#find_by` if they are an `ActiveRecord::Relation`.
694
317
 
695
- *Ulisses Almeida, Kassio Borges*
318
+ Fixes #20817
696
319
 
697
- * `add_timestamps` and `remove_timestamps` now properly reversible with
698
- options.
320
+ *Hiroaki Izu*
699
321
 
700
- *Noam Gagliardi-Rabinovich*
322
+ * Qualify column name inserted by `group` in calculation.
701
323
 
702
- * Bring back `db:test:prepare` to synchronize the test database schema.
324
+ Giving `group` an unqualified column name now works, even if the relation
325
+ has `JOIN` with another table which also has a column of the name.
703
326
 
704
- Manual synchronization using `bin/rake db:test:prepare` is required
705
- when a migration is rolled-back, edited and reapplied.
327
+ *Soutaro Matsumoto*
706
328
 
707
- `ActiveRecord::Base.maintain_test_schema` now uses `db:test:prepare`
708
- to synchronize the schema. Plugins can use this task as a hook to
709
- provide custom behavior after the schema has been loaded.
329
+ * Don't cache prepared statements containing an IN clause or a SQL literal, as
330
+ these queries will change often and are unlikely to have a cache hit.
710
331
 
711
- NOTE: `test:prepare` runs before the schema is synchronized.
332
+ *Sean Griffin*
712
333
 
713
- Fixes #17171, #15787.
334
+ * Fix `rewhere` in a `has_many` association.
714
335
 
715
- *Yves Senn*
336
+ Fixes #21955.
716
337
 
717
- * Change `reflections` public api to return the keys as String objects.
338
+ *Josh Branchaud*, *Kal*
718
339
 
719
- Fixes #16928.
340
+ * `where` raises ArgumentError on unsupported types.
720
341
 
721
- *arthurnn*
342
+ Fixes #20473.
722
343
 
723
- * Renaming a table in pg also renames the primary key index.
344
+ *Jake Worth*
724
345
 
725
- Fixes #12856
346
+ * Add an immutable string type to help reduce memory usage for apps which do
347
+ not need mutation detection on strings.
726
348
 
727
349
  *Sean Griffin*
728
350
 
729
- * Make it possible to access fixtures excluded by a `default_scope`.
351
+ * Give `AcriveRecord::Relation#update` its own deprecation warning when
352
+ passed an `ActiveRecord::Base` instance.
730
353
 
731
- *Yves Senn*
354
+ Fixes #21945.
732
355
 
733
- * Fix preloading of associations with a scope containing joins along with
734
- conditions on the joined association.
356
+ *Ted Johansson*
735
357
 
736
- *Siddharth Sharma*
358
+ * Make it possible to pass `:to_table` when adding a foreign key through
359
+ `add_reference`.
737
360
 
738
- * Add `Table#name` to match `TableDefinition#name`.
361
+ Fixes #21563.
739
362
 
740
- *Cody Cutrer*
363
+ *Yves Senn*
741
364
 
742
- * Cache `CollectionAssociation#reader` proxies separately before and after
743
- the owner has been saved so that the proxy is not cached without the
744
- owner's id.
365
+ * No longer pass deprecated option `-i` to `pg_dump`.
745
366
 
746
- *Ben Woosley*
367
+ *Paul Sadauskas*
747
368
 
748
- * `ActiveRecord::ReadOnlyRecord` now has a descriptive message.
369
+ * Concurrent `AR::Base#increment!` and `#decrement!` on the same record
370
+ are all reflected in the database rather than overwriting each other.
749
371
 
750
- *Franky W.*
372
+ *Bogdan Gusiev*
751
373
 
752
- * Fix preloading of associations which unscope a default scope.
374
+ * Avoid leaking the first relation we call `first` on, per model.
753
375
 
754
- Fixes #11036.
376
+ Fixes #21921.
755
377
 
756
- *Byron Bischoff*
378
+ *Matthew Draper*, *Jean Boussier*
757
379
 
758
- * Added SchemaDumper support for tables with jsonb columns.
380
+ * Remove unused `pk_and_sequence_for` in `AbstractMysqlAdapter`.
759
381
 
760
- *Ted O'Meara*
382
+ *Ryuta Kamizono*
761
383
 
762
- * Deprecate `sanitize_sql_hash_for_conditions` without replacement. Using a
763
- `Relation` for performing queries and updates is the prefered API.
384
+ * Allow fixtures files to set the model class in the YAML file itself.
764
385
 
765
- *Sean Griffin*
386
+ To load the fixtures file `accounts.yml` as the `User` model, use:
766
387
 
767
- * Queries now properly type cast values that are part of a join statement,
768
- even when using type decorators such as `serialize`.
388
+ _fixture:
389
+ model_class: User
390
+ david:
391
+ name: David
769
392
 
770
- *Melanie Gilman & Sean Griffin*
393
+ Fixes #9516.
771
394
 
772
- * MySQL enum type lookups, with values matching another type, no longer result
773
- in an endless loop.
395
+ *Roque Pinel*
774
396
 
775
- Fixes #17402.
397
+ * Don't require a database connection to load a class which uses acceptance
398
+ validations.
776
399
 
777
- *Yves Senn*
400
+ *Sean Griffin*
778
401
 
779
- * Raise `ArgumentError` when the body of a scope is not callable.
402
+ * Correctly apply `unscope` when preloading through associations.
780
403
 
781
- *Mauro George*
404
+ *Jimmy Bourassa*
782
405
 
783
- * Use type column first in multi-column indexes created with `add-reference`.
406
+ * Fixed taking precision into count when assigning a value to timestamp attribute.
784
407
 
785
- *Derek Prior*
408
+ Timestamp column can have less precision than ruby timestamp
409
+ In result in how big a fraction of a second can be stored in the
410
+ database.
786
411
 
787
- * Fix `Relation.rewhere` to work with Range values.
788
412
 
789
- *Dan Olson*
413
+ m = Model.create!
414
+ m.created_at.usec == m.reload.created_at.usec # => false
415
+ # due to different precision in Time.now and database column
790
416
 
791
- * `AR::UnknownAttributeError` now includes the class name of a record.
417
+ If the precision is low enough, (mysql default is 0, so it is always low
418
+ enough by default) the value changes when model is reloaded from the
419
+ database. This patch fixes that issue ensuring that any timestamp
420
+ assigned as an attribute is converted to column precision under the
421
+ attribute.
792
422
 
793
- User.new(name: "Yuki Nishijima", project_attributes: {name: "kaminari"})
794
- # => ActiveRecord::UnknownAttributeError: unknown attribute 'name' for User.
423
+ *Bogdan Gusiev*
795
424
 
796
- *Yuki Nishijima*
425
+ * Introduce `connection.data_sources` and `connection.data_source_exists?`.
426
+ These methods determine what relations can be used to back Active Record
427
+ models (usually tables and views).
797
428
 
798
- * Fix a regression causing `after_create` callbacks to run before associated
799
- records are autosaved.
429
+ Also deprecate `SchemaCache#tables`, `SchemaCache#table_exists?` and
430
+ `SchemaCache#clear_table_cache!` in favor of their new data source
431
+ counterparts.
800
432
 
801
- Fixes #17209.
433
+ *Yves Senn*, *Matthew Draper*
802
434
 
803
- *Agis Anastasopoulos*
435
+ * Add `ActiveRecord::Base.ignored_columns` to make some columns
436
+ invisible from Active Record.
804
437
 
805
- * Honor overridden `rack.test` in Rack environment for the connection
806
- management middleware.
438
+ *Jean Boussier*
807
439
 
808
- *Simon Eskildsen*
440
+ * `ActiveRecord::Tasks::MySQLDatabaseTasks` fails if shellout to
441
+ mysql commands (like `mysqldump`) is not successful.
809
442
 
810
- * Add a truncate method to the connection.
443
+ *Steve Mitchell*
811
444
 
812
- *Aaron Patterson*
445
+ * Ensure `select` quotes aliased attributes, even when using `from`.
813
446
 
814
- * Don't autosave unchanged has_one through records.
447
+ Fixes #21488
815
448
 
816
- *Alan Kennedy*, *Steve Parrington*
449
+ *Sean Griffin & @johanlunds*
817
450
 
818
- * Do not dump foreign keys for ignored tables.
451
+ * MySQL: support `unsigned` numeric data types.
819
452
 
820
- *Yves Senn*
453
+ Example:
821
454
 
822
- * PostgreSQL adapter correctly dumps foreign keys targeting tables
823
- outside the schema search path.
455
+ create_table :foos do |t|
456
+ t.unsigned_integer :quantity
457
+ t.unsigned_bigint :total
458
+ t.unsigned_float :percentage
459
+ t.unsigned_decimal :price, precision: 10, scale: 2
460
+ end
824
461
 
825
- Fixes #16907.
462
+ The `unsigned: true` option may be used for the primary key:
826
463
 
827
- *Matthew Draper*, *Yves Senn*
464
+ create_table :foos, id: :bigint, unsigned: true do |t|
465
+
466
+ end
828
467
 
829
- * When a thread is killed, rollback the active transaction, instead of
830
- committing it during the stack unwind. Previously, we could commit half-
831
- completed work. This fix only works for Ruby 2.0+; on 1.9, we can't
832
- distinguish a thread kill from an ordinary non-local (block) return, so must
833
- default to committing.
468
+ *Ryuta Kamizono*
834
469
 
835
- *Chris Hanks*
470
+ * Add `#views` and `#view_exists?` methods on connection adapters.
836
471
 
837
- * A `NullRelation` should represent nothing. This fixes a bug where
838
- `Comment.where(post_id: Post.none)` returned a non-empty result.
472
+ *Ryuta Kamizono*
839
473
 
840
- Fixes #15176.
474
+ * Correctly dump composite primary key.
841
475
 
842
- *Matthew Draper*, *Yves Senn*
476
+ Example:
843
477
 
844
- * Include default column limits in schema.rb. Allows defaults to be changed
845
- in the future without affecting old migrations that assumed old defaults.
478
+ create_table :barcodes, primary_key: ["region", "code"] do |t|
479
+ t.string :region
480
+ t.integer :code
481
+ end
846
482
 
847
- *Jeremy Kemper*
483
+ *Ryuta Kamizono*
848
484
 
849
- * MySQL: schema.rb now includes TEXT and BLOB column limits.
485
+ * Lookup the attribute name for `restrict_with_error` messages on the
486
+ model class that defines the association.
850
487
 
851
- *Jeremy Kemper*
488
+ *kuboon*, *Ronak Jangir*
852
489
 
853
- * MySQL: correct LONGTEXT and LONGBLOB limits from 2GB to their true 4GB.
490
+ * Correct query for PostgreSQL 8.2 compatibility.
854
491
 
855
- *Jeremy Kemper*
492
+ *Ben Murphy*, *Matthew Draper*
856
493
 
857
- * SQLite3Adapter now checks for views in `table_exists?`. Fixes #14041.
494
+ * `bin/rake db:migrate` uses
495
+ `ActiveRecord::Tasks::DatabaseTasks.migrations_paths` instead of
496
+ `Migrator.migrations_paths`.
858
497
 
859
- *Girish Sonawane*
498
+ *Tobias Bielohlawek*
860
499
 
861
- * Introduce `connection.supports_views?` to check whether the current adapter
862
- has support for SQL views. Connection adapters should define this method.
500
+ * Support dropping indexes concurrently in PostgreSQL.
863
501
 
864
- *Yves Senn*
502
+ See http://www.postgresql.org/docs/9.4/static/sql-dropindex.html for more
503
+ details.
865
504
 
866
- * Allow included modules to override association methods.
505
+ *Grey Baker*
867
506
 
868
- Fixes #16684.
507
+ * Deprecate passing conditions to `ActiveRecord::Relation#delete_all`
508
+ and `ActiveRecord::Relation#destroy_all`.
869
509
 
870
- *Yves Senn*
510
+ *Wojciech Wnętrzak*
871
511
 
872
- * Schema loading rake tasks (like `db:schema:load` and `db:setup`) maintain
873
- the database connection to the current environment.
512
+ * Instantiating an AR model with `ActionController::Parameters` now raises
513
+ an `ActiveModel::ForbiddenAttributesError` if the parameters include a
514
+ `type` field that has not been explicitly permitted. Previously, the
515
+ `type` field was simply ignored in the same situation.
874
516
 
875
- Fixes #16757.
517
+ *Prem Sichanugrist*
876
518
 
877
- *Joshua Cody*, *Yves Senn*
519
+ * PostgreSQL, `create_schema`, `drop_schema` and `rename_table` now quote
520
+ schema names.
878
521
 
879
- * MySQL: set the connection collation along with the charset.
522
+ Fixes #21418.
880
523
 
881
- Sets the connection collation to the database collation configured in
882
- database.yml. Otherwise, `SET NAMES utf8mb4` will use the default
883
- collation for that charset (utf8mb4_general_ci) when you may have chosen
884
- a different collation, like utf8mb4_unicode_ci.
524
+ Example:
885
525
 
886
- This only applies to literal string comparisons, not column values, so it
887
- is unlikely to affect you.
526
+ create_schema("my.schema")
527
+ # CREATE SCHEMA "my.schema";
888
528
 
889
- *Jeremy Kemper*
529
+ *Yves Senn*
890
530
 
891
- * `default_sequence_name` from the PostgreSQL adapter returns a `String`.
531
+ * PostgreSQL, add `:if_exists` option to `#drop_schema`. This makes it
532
+ possible to drop a schema that might exist without raising an exception if
533
+ it doesn't.
892
534
 
893
535
  *Yves Senn*
894
536
 
895
- * Fix a regression where whitespaces were stripped from DISTINCT queries in
896
- PostgreSQL.
537
+ * Only try to nullify has_one target association if the record is persisted.
538
+
539
+ Fixes #21223.
897
540
 
898
541
  *Agis Anastasopoulos*
899
542
 
900
- Fixes #16623.
543
+ * Uniqueness validator raises descriptive error when running on a persisted
544
+ record without primary key.
901
545
 
902
- * Fix has_many :through relation merging failing when dynamic conditions are
903
- passed as a lambda with an arity of one.
546
+ Fixes #21304.
904
547
 
905
- Fixes #16128.
548
+ *Yves Senn*
906
549
 
907
- *Agis Anastasopoulos*
550
+ * Add a native JSON data type support in MySQL.
908
551
 
909
- * Fix `Relation#exists?` to work with polymorphic associations.
552
+ Example:
910
553
 
911
- Fixes #15821.
554
+ create_table :json_data_type do |t|
555
+ t.json :settings
556
+ end
912
557
 
913
- *Kassio Borges*
558
+ *Ryuta Kamizono*
914
559
 
915
- * Currently, Active Record rescues any errors raised within
916
- `after_rollback`/`after_create` callbacks and prints them to the logs.
917
- Future versions of Rails will not rescue these errors anymore and
918
- just bubble them up like the other callbacks.
560
+ * Descriptive error message when fixtures contain a missing column.
919
561
 
920
- This commit adds an opt-in flag to enable not rescuing the errors.
562
+ Fixes #21201.
921
563
 
922
- Example:
564
+ *Yves Senn*
923
565
 
924
- # Do not swallow errors in after_commit/after_rollback callbacks.
925
- config.active_record.raise_in_transactional_callbacks = true
566
+ * `ActiveRecord::Tasks::PostgreSQLDatabaseTasks` fail if shellout to
567
+ postgresql commands (like `pg_dump`) is not successful.
926
568
 
927
- Fixes #13460.
569
+ *Bryan Paxton*, *Nate Berkopec*
928
570
 
929
- *arthurnn*
571
+ * Add `ActiveRecord::Relation#in_batches` to work with records and relations
572
+ in batches.
930
573
 
931
- * Fix an issue where custom accessor methods (such as those generated by
932
- `enum`) with the same name as a global method are incorrectly overridden
933
- when subclassing.
574
+ Available options are `of` (batch size), `load`, `begin_at`, and `end_at`.
934
575
 
935
- Fixes #16288.
576
+ Examples:
936
577
 
937
- *Godfrey Chan*
578
+ Person.in_batches.each_record(&:party_all_night!)
579
+ Person.in_batches.update_all(awesome: true)
580
+ Person.in_batches.delete_all
581
+ Person.in_batches.each do |relation|
582
+ relation.delete_all
583
+ sleep 10 # Throttles the delete queries
584
+ end
938
585
 
939
- * `*_was` and `changes` now work correctly for in-place attribute changes as
940
- well.
586
+ Fixes #20933.
941
587
 
942
- *Sean Griffin*
588
+ *Sina Siadat*
943
589
 
944
- * Fix regression on `after_commit` that did not fire with nested transactions.
590
+ * Added methods for PostgreSQL geometric data types to use in migrations.
945
591
 
946
- Fixes #16425.
592
+ Example:
947
593
 
948
- *arthurnn*
594
+ create_table :foo do |t|
595
+ t.line :foo_line
596
+ t.lseg :foo_lseg
597
+ t.box :foo_box
598
+ t.path :foo_path
599
+ t.polygon :foo_polygon
600
+ t.circle :foo_circle
601
+ end
949
602
 
950
- * Do not try to write timestamps when a table has no timestamps columns.
603
+ *Mehmet Emin İNAÇ*
951
604
 
952
- Fixes #8813.
605
+ * Add `cache_key` to ActiveRecord::Relation.
953
606
 
954
- *Sergey Potapov*
607
+ Example:
955
608
 
956
- * `index_exists?` with `:name` option does verify specified columns.
609
+ @users = User.where("name like ?", "%Alberto%")
610
+ @users.cache_key
611
+ # => "/users/query-5942b155a43b139f2471b872ac54251f-3-20150714212107656125000"
957
612
 
958
- Example:
613
+ *Alberto Fernández-Capel*
959
614
 
960
- add_index :articles, :title, name: "idx_title"
615
+ * Properly allow uniqueness validations on primary keys.
961
616
 
962
- # Before:
963
- index_exists? :articles, :title, name: "idx_title" # => `true`
964
- index_exists? :articles, :body, name: "idx_title" # => `true`
617
+ Fixes #20966.
965
618
 
966
- # After:
967
- index_exists? :articles, :title, name: "idx_title" # => `true`
968
- index_exists? :articles, :body, name: "idx_title" # => `false`
619
+ *Sean Griffin*, *presskey*
969
620
 
970
- *Yves Senn*, *Matthew Draper*
621
+ * Don't raise an error if an association failed to destroy when `destroy` was
622
+ called on the parent (as opposed to `destroy!`).
971
623
 
972
- * `add_timestamps` and `t.timestamps` now require you to pass the `:null` option.
973
- Not passing the option is deprecated but the default is still `null: true`.
974
- With Rails 5 this will change to `null: false`.
624
+ Fixes #20991.
975
625
 
976
626
  *Sean Griffin*
977
627
 
978
- * When calling `update_columns` on a record that is not persisted, the error
979
- message now reflects whether that object is a new record or has been
980
- destroyed.
628
+ * `ActiveRecord::RecordNotFound` modified to store model name, primary_key and
629
+ id of the caller model. It allows the catcher of this exception to make
630
+ a better decision to what to do with it.
981
631
 
982
- *Lachlan Sylvester*
632
+ Example:
983
633
 
984
- * Define `id_was` to get the previous value of the primary key.
634
+ class SomeAbstractController < ActionController::Base
635
+ rescue_from ActiveRecord::RecordNotFound, with: :redirect_to_404
985
636
 
986
- Currently when we call `id_was` and we have a custom primary key name,
987
- Active Record will return the current value of the primary key. This
988
- makes it impossible to correctly do an update operation if you change the
989
- id.
637
+ private def redirect_to_404(e)
638
+ return redirect_to(posts_url) if e.model == 'Post'
639
+ raise
640
+ end
641
+ end
990
642
 
991
- Fixes #16413.
643
+ *Sameer Rahmani*
992
644
 
993
- *Rafael Mendonça França*
645
+ * Deprecate the keys for association `restrict_dependent_destroy` errors in favor
646
+ of new key names.
994
647
 
995
- * Deprecate `DatabaseTasks.load_schema` to act on the current connection.
996
- Use `.load_schema_current` instead. In the future `load_schema` will
997
- require the `configuration` to act on as an argument.
648
+ Previously `has_one` and `has_many` associations were using the
649
+ `one` and `many` keys respectively. Both of these keys have special
650
+ meaning in I18n (they are considered to be pluralizations) so by
651
+ renaming them to `has_one` and `has_many` we make the messages more explicit
652
+ and most importantly they don't clash with linguistical systems that need to
653
+ validate translation keys (and their pluralizations).
998
654
 
999
- *Yves Senn*
655
+ The `:'restrict_dependent_destroy.one'` key should be replaced with
656
+ `:'restrict_dependent_destroy.has_one'`, and `:'restrict_dependent_destroy.many'`
657
+ with `:'restrict_dependent_destroy.has_many'`.
1000
658
 
1001
- * Fix automatic maintaining test schema to properly handle sql structure
1002
- schema format.
659
+ *Roque Pinel*, *Christopher Dell*
1003
660
 
1004
- Fixes #15394.
661
+ * Fix state being carried over from previous transaction.
1005
662
 
1006
- *Wojciech Wnętrzak*
663
+ Considering the following example where `name` is a required attribute.
664
+ Before we had `new_record?` returning `true` for a persisted record:
665
+
666
+ author = Author.create! name: 'foo'
667
+ author.name = nil
668
+ author.save # => false
669
+ author.new_record? # => true
670
+
671
+ Fixes #20824.
1007
672
 
1008
- * Fix type casting to Decimal from Float with large precision.
673
+ *Roque Pinel*
1009
674
 
1010
- *Tomohiro Hashidate*
675
+ * Correctly ignore `mark_for_destruction` when `autosave` isn't set to `true`
676
+ when validating associations.
1011
677
 
1012
- * Deprecate `Reflection#source_macro`
678
+ Fixes #20882.
1013
679
 
1014
- `Reflection#source_macro` is no longer needed in Active Record
1015
- source so it has been deprecated. Code that used `source_macro`
1016
- was removed in #16353.
680
+ *Sean Griffin*
1017
681
 
1018
- *Eileen M. Uchtitelle*, *Aaron Patterson*
682
+ * Fix a bug where counter_cache doesn't always work with polymorphic
683
+ relations.
1019
684
 
1020
- * No verbose backtrace by `db:drop` when database does not exist.
685
+ Fixes #16407.
1021
686
 
1022
- Fixes #16295.
687
+ *Stefan Kanev*, *Sean Griffin*
1023
688
 
1024
- *Kenn Ejima*
689
+ * Ensure that cyclic associations with autosave don't cause duplicate errors
690
+ to be added to the parent record.
1025
691
 
1026
- * Add support for PostgreSQL JSONB.
692
+ Fixes #20874.
1027
693
 
1028
- Example:
694
+ *Sean Griffin*
1029
695
 
1030
- create_table :posts do |t|
1031
- t.jsonb :meta_data
1032
- end
696
+ * Ensure that `ActionController::Parameters` can still be passed to nested
697
+ attributes.
1033
698
 
1034
- *Philippe Creux*, *Chris Teague*
699
+ Fixes #20922.
1035
700
 
1036
- * `db:purge` with MySQL respects `Rails.env`.
701
+ *Sean Griffin*
1037
702
 
1038
- *Yves Senn*
703
+ * Deprecate force association reload by passing a truthy argument to
704
+ association method.
1039
705
 
1040
- * `change_column_default :table, :column, nil` with PostgreSQL will issue a
1041
- `DROP DEFAULT` instead of a `DEFAULT NULL` query.
706
+ For collection association, you can call `#reload` on association proxy to
707
+ force a reload:
1042
708
 
1043
- Fixes #16261.
709
+ @user.posts.reload # Instead of @user.posts(true)
1044
710
 
1045
- *Matthew Draper*, *Yves Senn*
711
+ For singular association, you can call `#reload` on the parent object to
712
+ clear its association cache then call the association method:
1046
713
 
1047
- * Allow to specify a type for the foreign key column in `references`
1048
- and `add_reference`.
714
+ @user.reload.profile # Instead of @user.profile(true)
1049
715
 
1050
- Example:
716
+ Passing a truthy argument to force association to reload will be removed in
717
+ Rails 5.1.
1051
718
 
1052
- change_table :vehicle do |t|
1053
- t.references :station, type: :uuid
1054
- end
719
+ *Prem Sichanugrist*
1055
720
 
1056
- *Andrey Novikov*, *Łukasz Sarnacki*
721
+ * Replaced `ActiveSupport::Concurrency::Latch` with `Concurrent::CountDownLatch`
722
+ from the concurrent-ruby gem.
1057
723
 
1058
- * `create_join_table` removes a common prefix when generating the join table.
1059
- This matches the existing behavior of HABTM associations.
724
+ *Jerry D'Antonio*
1060
725
 
1061
- Fixes #13683.
726
+ * Fix through associations using scopes having the scope merged multiple
727
+ times.
1062
728
 
1063
- *Stefan Kanev*
729
+ Fixes #20721.
730
+ Fixes #20727.
1064
731
 
1065
- * Do not swallow errors on `compute_type` when having a bad `alias_method` on
1066
- a class.
732
+ *Sean Griffin*
1067
733
 
1068
- *arthurnn*
734
+ * `ActiveRecord::Base.dump_schema_after_migration` applies migration tasks
735
+ other than `db:migrate`. (eg. `db:rollback`, `db:migrate:dup`, ...)
1069
736
 
1070
- * PostgreSQL invalid `uuid` are convert to nil.
737
+ Fixes #20743.
1071
738
 
1072
- *Abdelkader Boudih*
739
+ *Yves Senn*
1073
740
 
1074
- * Restore 4.0 behavior for using serialize attributes with `JSON` as coder.
741
+ * Add alternate syntax to make `change_column_default` reversible.
1075
742
 
1076
- With 4.1.x, `serialize` started returning a string when `JSON` was passed as
1077
- the second attribute. It will now return a hash as per previous versions.
743
+ User can pass in `:from` and `:to` to make `change_column_default` command
744
+ become reversible.
1078
745
 
1079
746
  Example:
1080
747
 
1081
- class Post < ActiveRecord::Base
1082
- serialize :comment, JSON
1083
- end
748
+ change_column_default :posts, :status, from: nil, to: "draft"
749
+ change_column_default :users, :authorized, from: true, to: false
1084
750
 
1085
- class Comment
1086
- include ActiveModel::Model
1087
- attr_accessor :category, :text
1088
- end
751
+ *Prem Sichanugrist*
752
+
753
+ * Prevent error when using `force_reload: true` on an unassigned polymorphic
754
+ belongs_to association.
755
+
756
+ Fixes #20426.
1089
757
 
1090
- post = Post.create!
1091
- post.comment = Comment.new(category: "Animals", text: "This is a comment about squirrels.")
1092
- post.save!
758
+ *James Dabbs*
1093
759
 
1094
- # 4.0
1095
- post.comment # => {"category"=>"Animals", "text"=>"This is a comment about squirrels."}
760
+ * Correctly raise `ActiveRecord::AssociationTypeMismatch` when assigning
761
+ a wrong type to a namespaced association.
1096
762
 
1097
- # 4.1 before
1098
- post.comment # => "#<Comment:0x007f80ab48ff98>"
763
+ Fixes #20545.
1099
764
 
1100
- # 4.1 after
1101
- post.comment # => {"category"=>"Animals", "text"=>"This is a comment about squirrels."}
765
+ *Diego Carrion*
1102
766
 
1103
- When using `JSON` as the coder in `serialize`, Active Record will use the
1104
- new `ActiveRecord::Coders::JSON` coder which delegates its `dump/load` to
1105
- `ActiveSupport::JSON.encode/decode`. This ensures special objects are dumped
1106
- correctly using the `#as_json` hook.
767
+ * `validates_absence_of` respects `marked_for_destruction?`.
1107
768
 
1108
- To keep the previous behaviour, supply a custom coder instead
1109
- ([example](https://gist.github.com/jenncoop/8c4142bbe59da77daa63)).
769
+ Fixes #20449.
1110
770
 
1111
- Fixes #15594.
771
+ *Yves Senn*
1112
772
 
1113
- *Jenn Cooper*
773
+ * Include the `Enumerable` module in `ActiveRecord::Relation`
1114
774
 
1115
- * Do not use `RENAME INDEX` syntax for MariaDB 10.0.
775
+ *Sean Griffin & bogdan*
1116
776
 
1117
- Fixes #15931.
777
+ * Use `Enumerable#sum` in `ActiveRecord::Relation` if a block is given.
1118
778
 
1119
- *Jeff Browning*
779
+ *Sean Griffin*
1120
780
 
1121
- * Calling `#empty?` on a `has_many` association would use the value from the
1122
- counter cache if one exists.
781
+ * Let `WITH` queries (Common Table Expressions) be explainable.
1123
782
 
1124
- *David Verhasselt*
783
+ *Vladimir Kochnev*
1125
784
 
1126
- * Fix the schema dump generated for tables without constraints and with
1127
- primary key with default value of custom PostgreSQL function result.
785
+ * Make `remove_index :table, :column` reversible.
1128
786
 
1129
- Fixes #16111.
787
+ *Yves Senn*
1130
788
 
1131
- *Andrey Novikov*
789
+ * Fixed an error which would occur in dirty checking when calling
790
+ `update_attributes` from a getter.
1132
791
 
1133
- * Fix the SQL generated when a `delete_all` is run on an association to not
1134
- produce an `IN` statements.
792
+ Fixes #20531.
1135
793
 
1136
- Before:
794
+ *Sean Griffin*
1137
795
 
1138
- UPDATE "categorizations" SET "category_id" = NULL WHERE
1139
- "categorizations"."category_id" = 1 AND "categorizations"."id" IN (1, 2)
796
+ * Make `remove_foreign_key` reversible. Any foreign key options must be
797
+ specified, similar to `remove_column`.
1140
798
 
1141
- After:
799
+ *Aster Ryan*
1142
800
 
1143
- UPDATE "categorizations" SET "category_id" = NULL WHERE
1144
- "categorizations"."category_id" = 1
801
+ * Add `:_prefix` and `:_suffix` options to `enum` definition.
1145
802
 
1146
- *Eileen M. Uchitelle, Aaron Patterson*
803
+ Fixes #17511, #17415.
1147
804
 
1148
- * Avoid type casting boolean and `ActiveSupport::Duration` values to numeric
1149
- values for string columns. Otherwise, in some database, the string column
1150
- values will be coerced to a numeric allowing false or 0.seconds match any
1151
- string starting with a non-digit.
805
+ *Igor Kapkov*
1152
806
 
1153
- Example:
807
+ * Correctly handle decimal arrays with defaults in the schema dumper.
1154
808
 
1155
- App.where(apikey: false) # => SELECT * FROM users WHERE apikey = '0'
809
+ Fixes #20515.
1156
810
 
1157
- *Dylan Thacker-Smith*
811
+ *Sean Griffin & jmondo*
1158
812
 
1159
- * Add a `:required` option to singular associations, providing a nicer
1160
- API for presence validations on associations.
813
+ * Deprecate the PostgreSQL `:point` type in favor of a new one which will return
814
+ `Point` objects instead of an `Array`
1161
815
 
1162
816
  *Sean Griffin*
1163
817
 
1164
- * Fix an error in `reset_counters` when associations have `select` scope.
1165
- (Call to `count` generated invalid SQL.)
818
+ * Ensure symbols passed to `ActiveRecord::Relation#select` are always treated
819
+ as columns.
1166
820
 
1167
- *Cade Truitt*
821
+ Fixes #20360.
1168
822
 
1169
- * After a successful `reload`, `new_record?` is always false.
823
+ *Sean Griffin*
1170
824
 
1171
- Fixes #12101.
825
+ * Do not set `sql_mode` if `strict: :default` is specified.
1172
826
 
1173
- *Matthew Draper*
827
+ # config/database.yml
828
+ production:
829
+ adapter: mysql2
830
+ database: foo_prod
831
+ user: foo
832
+ strict: :default
1174
833
 
1175
- * PostgreSQL renaming table doesn't attempt to rename non existent sequences.
834
+ *Ryuta Kamizono*
1176
835
 
1177
- *Abdelkader Boudih*
836
+ * Allow proc defaults to be passed to the attributes API. See documentation
837
+ for examples.
1178
838
 
1179
- * Move 'dependent: :destroy' handling for `belongs_to`
1180
- from `before_destroy` to `after_destroy` callback chain
839
+ *Sean Griffin*, *Kir Shatrov*
1181
840
 
1182
- Fixes #12380.
841
+ * SQLite: `:collation` support for string and text columns.
1183
842
 
1184
- *Ivan Antropov*
843
+ Example:
1185
844
 
1186
- * Detect in-place modifications on String attributes.
845
+ create_table :foo do |t|
846
+ t.string :string_nocase, collation: 'NOCASE'
847
+ t.text :text_rtrim, collation: 'RTRIM'
848
+ end
1187
849
 
1188
- Before this change, an attribute modified in-place had to be marked as
1189
- changed in order for it to be persisted in the database. Now it is no longer
1190
- required.
850
+ add_column :foo, :title, :string, collation: 'RTRIM'
1191
851
 
1192
- Before:
852
+ change_column :foo, :title, :string, collation: 'NOCASE'
1193
853
 
1194
- user = User.first
1195
- user.name << ' Griffin'
1196
- user.name_will_change!
1197
- user.save
1198
- user.reload.name # => "Sean Griffin"
854
+ *Akshay Vishnoi*
1199
855
 
1200
- After:
856
+ * Allow the use of symbols or strings to specify enum values in test
857
+ fixtures:
1201
858
 
1202
- user = User.first
1203
- user.name << ' Griffin'
1204
- user.save
1205
- user.reload.name # => "Sean Griffin"
859
+ awdr:
860
+ title: "Agile Web Development with Rails"
861
+ status: :proposed
1206
862
 
1207
- *Sean Griffin*
863
+ *George Claghorn*
864
+
865
+ * Clear query cache when `ActiveRecord::Base#reload` is called.
1208
866
 
1209
- * Add `ActiveRecord::Base#validate!` that raises `RecordInvalid` if the record
1210
- is invalid.
867
+ *Shane Hender, Pierre Nespo*
1211
868
 
1212
- *Bogdan Gusiev*, *Marc Schütz*
869
+ * Include stored procedures and function on the MySQL structure dump.
1213
870
 
1214
- * Support for adding and removing foreign keys. Foreign keys are now
1215
- a part of `schema.rb`. This is supported by Mysql2Adapter, MysqlAdapter
1216
- and PostgreSQLAdapter.
871
+ *Jonathan Worek*
1217
872
 
1218
- Many thanks to *Matthew Higgins* for laying the foundation with his work on
1219
- [foreigner](https://github.com/matthuhiggins/foreigner).
873
+ * Pass `:extend` option for `has_and_belongs_to_many` associations to the
874
+ underlying `has_many :through`.
1220
875
 
1221
- Example:
876
+ *Jaehyun Shin*
877
+
878
+ * Deprecate `Relation#uniq` use `Relation#distinct` instead.
1222
879
 
1223
- # within your migrations:
1224
- add_foreign_key :articles, :authors
1225
- remove_foreign_key :articles, :authors
880
+ See #9683.
1226
881
 
1227
882
  *Yves Senn*
1228
883
 
1229
- * Fix subtle bugs regarding attribute assignment on models with no primary
1230
- key. `'id'` will no longer be part of the attributes hash.
884
+ * Allow single table inheritance instantiation to work when storing
885
+ demodulized class names.
1231
886
 
1232
- *Sean Griffin*
887
+ *Alex Robbin*
1233
888
 
1234
- * Deprecate automatic counter caches on `has_many :through`. The behavior was
1235
- broken and inconsistent.
889
+ * Correctly pass MySQL options when using `structure_dump` or
890
+ `structure_load`.
1236
891
 
1237
- *Sean Griffin*
892
+ Specifically, it fixes an issue when using SSL authentication.
893
+
894
+ *Alex Coomans*
1238
895
 
1239
- * `preload` preserves readonly flag for associations.
896
+ * Dump indexes in `create_table` instead of `add_index`.
1240
897
 
1241
- See #15853.
898
+ If the adapter supports indexes in `create_table`, generated SQL is
899
+ slightly more efficient.
1242
900
 
1243
- *Yves Senn*
901
+ *Ryuta Kamizono*
902
+
903
+ * Correctly dump `:options` on `create_table` for MySQL.
904
+
905
+ *Ryuta Kamizono*
1244
906
 
1245
- * Assume numeric types have changed if they were assigned to a value that
1246
- would fail numericality validation, regardless of the old value. Previously
1247
- this would only occur if the old value was 0.
907
+ * PostgreSQL: `:collation` support for string and text columns.
1248
908
 
1249
909
  Example:
1250
910
 
1251
- model = Model.create!(number: 5)
1252
- model.number = '5wibble'
1253
- model.number_changed? # => true
911
+ create_table :foos do |t|
912
+ t.string :string_en, collation: 'en_US.UTF-8'
913
+ t.text :text_ja, collation: 'ja_JP.UTF-8'
914
+ end
1254
915
 
1255
- Fixes #14731.
916
+ *Ryuta Kamizono*
1256
917
 
1257
- *Sean Griffin*
918
+ * Remove `ActiveRecord::Serialization::XmlSerializer` from core.
1258
919
 
1259
- * `reload` no longer merges with the existing attributes.
1260
- The attribute hash is fully replaced. The record is put into the same state
1261
- as it would be with `Model.find(model.id)`.
920
+ *Zachary Scott*
1262
921
 
1263
- *Sean Griffin*
922
+ * Make `unscope` aware of "less than" and "greater than" conditions.
1264
923
 
1265
- * The object returned from `select_all` must respond to `column_types`.
1266
- If this is not the case a `NoMethodError` is raised.
924
+ *TAKAHASHI Kazuaki*
1267
925
 
1268
- *Sean Griffin*
926
+ * `find_by` and `find_by!` raise `ArgumentError` when called without
927
+ arguments.
1269
928
 
1270
- * Detect in-place modifications of PG array types
929
+ *Kohei Suzuki*
1271
930
 
1272
- *Sean Griffin*
931
+ * Revert behavior of `db:schema:load` back to loading the full
932
+ environment. This ensures that initializers are run.
1273
933
 
1274
- * Add `bin/rake db:purge` task to empty the current database.
934
+ Fixes #19545.
1275
935
 
1276
936
  *Yves Senn*
1277
937
 
1278
- * Deprecate `serialized_attributes` without replacement.
938
+ * Fix missing index when using `timestamps` with the `index` option.
939
+
940
+ The `index` option used with `timestamps` should be passed to both
941
+ `column` definitions for `created_at` and `updated_at` rather than just
942
+ the first.
943
+
944
+ *Paul Mucur*
1279
945
 
1280
- *Sean Griffin*
946
+ * Rename `:class` to `:anonymous_class` in association options.
1281
947
 
1282
- * Correctly extract IPv6 addresses from `DATABASE_URI`: the square brackets
1283
- are part of the URI structure, not the actual host.
948
+ Fixes #19659.
1284
949
 
1285
- Fixes #15705.
950
+ *Andrew White*
1286
951
 
1287
- *Andy Bakun*, *Aaron Stone*
952
+ * Autosave existing records on a has many through association when the parent
953
+ is new.
1288
954
 
1289
- * Ensure both parent IDs are set on join records when both sides of a
1290
- through association are new.
955
+ Fixes #19782.
1291
956
 
1292
957
  *Sean Griffin*
1293
958
 
1294
- * `ActiveRecord::Dirty` now detects in-place changes to mutable values.
1295
- Serialized attributes on ActiveRecord models will no longer save when
1296
- unchanged.
1297
-
1298
- Fixes #8328.
959
+ * Fixed a bug where uniqueness validations would error on out of range values,
960
+ even if an validation should have prevented it from hitting the database.
1299
961
 
1300
- *Sean Griffin*
962
+ *Andrey Voronkov*
1301
963
 
1302
- * `Pluck` now works when selecting columns from different tables with the same
1303
- name.
964
+ * MySQL: `:charset` and `:collation` support for string and text columns.
1304
965
 
1305
- Fixes #15649.
966
+ Example:
1306
967
 
1307
- *Sean Griffin*
968
+ create_table :foos do |t|
969
+ t.string :string_utf8_bin, charset: 'utf8', collation: 'utf8_bin'
970
+ t.text :text_ascii, charset: 'ascii'
971
+ end
1308
972
 
1309
- * Remove `cache_attributes` and friends. All attributes are cached.
973
+ *Ryuta Kamizono*
1310
974
 
1311
- *Sean Griffin*
975
+ * Foreign key related methods in the migration DSL respect
976
+ `ActiveRecord::Base.pluralize_table_names = false`.
1312
977
 
1313
- * Remove deprecated method `ActiveRecord::Base.quoted_locking_column`.
978
+ Fixes #19643.
1314
979
 
1315
- *Akshay Vishnoi*
980
+ *Mehmet Emin İNAÇ*
1316
981
 
1317
- * `ActiveRecord::FinderMethods.find` with block can handle proc parameter as
1318
- `Enumerable#find` does.
982
+ * Reduce memory usage from loading types on PostgreSQL.
1319
983
 
1320
- Fixes #15382.
984
+ Fixes #19578.
1321
985
 
1322
- *James Yang*
986
+ *Sean Griffin*
1323
987
 
1324
- * Make timezone aware attributes work with PostgreSQL array columns.
988
+ * Add `config.active_record.warn_on_records_fetched_greater_than` option.
1325
989
 
1326
- Fixes #13402.
990
+ When set to an integer, a warning will be logged whenever a result set
991
+ larger than the specified size is returned by a query.
1327
992
 
1328
- *Kuldeep Aggarwal*, *Sean Griffin*
993
+ Fixes #16463.
1329
994
 
1330
- * `ActiveRecord::SchemaMigration` has no primary key regardless of the
1331
- `primary_key_prefix_type` configuration.
995
+ *Jason Nochlin*
1332
996
 
1333
- Fixes #15051.
997
+ * Ignore `.psqlrc` when loading database structure.
1334
998
 
1335
- *JoseLuis Torres*, *Yves Senn*
999
+ *Jason Weathered*
1336
1000
 
1337
- * `rake db:migrate:status` works with legacy migration numbers like `00018_xyz.rb`.
1001
+ * Fix referencing wrong table aliases while joining tables of has many through
1002
+ association (only when calling calculation methods).
1338
1003
 
1339
- Fixes #15538.
1004
+ Fixes #19276.
1340
1005
 
1341
- *Yves Senn*
1006
+ *pinglamb*
1342
1007
 
1343
- * Baseclass becomes! subclass.
1008
+ * Correctly persist a serialized attribute that has been returned to
1009
+ its default value by an in-place modification.
1344
1010
 
1345
- Before this change, a record which changed its STI type, could not be
1346
- updated.
1011
+ Fixes #19467.
1347
1012
 
1348
- Fixes #14785.
1013
+ *Matthew Draper*
1349
1014
 
1350
- *Matthew Draper*, *Earl St Sauver*, *Edo Balvers*
1015
+ * Fix generating the schema file when using PostgreSQL `BigInt[]` data type.
1016
+ Previously the `limit: 8` was not coming through, and this caused it to
1017
+ become `Int[]` data type after rebuilding from the schema.
1351
1018
 
1352
- * Remove deprecated `ActiveRecord::Migrator.proper_table_name`. Use the
1353
- `proper_table_name` instance method on `ActiveRecord::Migration` instead.
1019
+ Fixes #19420.
1354
1020
 
1355
- *Akshay Vishnoi*
1021
+ *Jake Waller*
1356
1022
 
1357
- * Fix regression on eager loading association based on SQL query rather than
1358
- existing column.
1023
+ * Reuse the `CollectionAssociation#reader` cache when the foreign key is
1024
+ available prior to save.
1359
1025
 
1360
- Fixes #15480.
1026
+ *Ben Woosley*
1361
1027
 
1362
- *Lauro Caetano*, *Carlos Antonio da Silva*
1028
+ * Add `config.active_record.dump_schemas` to fix `db:structure:dump`
1029
+ when using schema_search_path and PostgreSQL extensions.
1363
1030
 
1364
- * Deprecate returning `nil` from `column_for_attribute` when no column exists.
1365
- It will return a null object in Rails 5.0
1031
+ Fixes #17157.
1366
1032
 
1367
- *Sean Griffin*
1033
+ *Ryan Wallace*
1368
1034
 
1369
- * Implemented `ActiveRecord::Base#pretty_print` to work with PP.
1035
+ * Renaming `use_transactional_fixtures` to `use_transactional_tests` for clarity.
1370
1036
 
1371
- *Ethan*
1037
+ Fixes #18864.
1372
1038
 
1373
- * Preserve type when dumping PostgreSQL point, bit, bit varying and money
1374
- columns.
1039
+ *Brandon Weiss*
1375
1040
 
1376
- *Yves Senn*
1041
+ * Increase pg gem version requirement to `~> 0.18`. Earlier versions of the
1042
+ pg gem are known to have problems with Ruby 2.2.
1377
1043
 
1378
- * New records remain new after YAML serialization.
1044
+ *Matt Brictson*
1379
1045
 
1380
- *Sean Griffin*
1046
+ * Correctly dump `serial` and `bigserial`.
1381
1047
 
1382
- * PostgreSQL support default values for enum types. Fixes #7814.
1048
+ *Ryuta Kamizono*
1383
1049
 
1384
- *Yves Senn*
1050
+ * Fix default `format` value in `ActiveRecord::Tasks::DatabaseTasks#schema_file`.
1385
1051
 
1386
- * PostgreSQL `default_sequence_name` respects schema. Fixes #7516.
1052
+ *James Cox*
1387
1053
 
1388
- *Yves Senn*
1054
+ * Don't enroll records in the transaction if they don't have commit callbacks.
1055
+ This was causing a memory leak when creating many records inside a transaction.
1389
1056
 
1390
- * Fix `columns_for_distinct` of PostgreSQL adapter to work correctly
1391
- with orders without sort direction modifiers.
1057
+ Fixes #15549.
1392
1058
 
1393
- *Nikolay Kondratyev*
1059
+ *Will Bryant*, *Aaron Patterson*
1394
1060
 
1395
- * PostgreSQL `reset_pk_sequence!` respects schemas. Fixes #14719.
1061
+ * Correctly create through records when created on a has many through
1062
+ association when using `where`.
1396
1063
 
1397
- *Yves Senn*
1064
+ Fixes #19073.
1398
1065
 
1399
- * Keep PostgreSQL `hstore` and `json` attributes as `Hash` in `@attributes`.
1400
- Fixes duplication in combination with `store_accessor`.
1066
+ *Sean Griffin*
1401
1067
 
1402
- Fixes #15369.
1068
+ * Add `SchemaMigration.create_table` support for any unicode charsets with MySQL.
1403
1069
 
1404
- *Yves Senn*
1070
+ *Ryuta Kamizono*
1405
1071
 
1406
- * `rake railties:install:migrations` respects the order of railties.
1072
+ * PostgreSQL no longer disables user triggers if system triggers can't be
1073
+ disabled. Disabling user triggers does not fulfill what the method promises.
1074
+ Rails currently requires superuser privileges for this method.
1407
1075
 
1408
- *Arun Agrawal*
1076
+ If you absolutely rely on this behavior, consider patching
1077
+ `disable_referential_integrity`.
1409
1078
 
1410
- * Fix redefine a `has_and_belongs_to_many` inside inherited class
1411
- Fixing regression case, where redefining the same `has_and_belongs_to_many`
1412
- definition into a subclass would raise.
1079
+ *Yves Senn*
1413
1080
 
1414
- Fixes #14983.
1081
+ * Restore aborted transaction state when `disable_referential_integrity` fails
1082
+ due to missing permissions.
1415
1083
 
1416
- *arthurnn*
1084
+ *Toby Ovod-Everett*, *Yves Senn*
1417
1085
 
1418
- * Fix `has_and_belongs_to_many` public reflection.
1419
- When defining a `has_and_belongs_to_many`, internally we convert that to two has_many.
1420
- But as `reflections` is a public API, people expect to see the right macro.
1086
+ * In PostgreSQL, print a warning message if `disable_referential_integrity`
1087
+ fails due to missing permissions.
1421
1088
 
1422
- Fixes #14682.
1089
+ *Andrey Nering*, *Yves Senn*
1423
1090
 
1424
- *arthurnn*
1091
+ * Allow a `:limit` option for MySQL bigint primary key support.
1425
1092
 
1426
- * Fix serialization for records with an attribute named `format`.
1093
+ Example:
1427
1094
 
1428
- Fixes #15188.
1095
+ create_table :foos, id: :primary_key, limit: 8 do |t|
1096
+ end
1429
1097
 
1430
- *Godfrey Chan*
1098
+ # or
1431
1099
 
1432
- * When a `group` is set, `sum`, `size`, `average`, `minimum` and `maximum`
1433
- on a NullRelation should return a Hash.
1100
+ create_table :foos, id: false do |t|
1101
+ t.primary_key :id, limit: 8
1102
+ end
1434
1103
 
1435
- *Kuldeep Aggarwal*
1104
+ *Ryuta Kamizono*
1436
1105
 
1437
- * Fix serialized fields returning serialized data after being updated with
1438
- `update_column`.
1106
+ * `belongs_to` will now trigger a validation error by default if the association is not present.
1107
+ You can turn this off on a per-association basis with `optional: true`.
1108
+ (Note this new default only applies to new Rails apps that will be generated with
1109
+ `config.active_record.belongs_to_required_by_default = true` in initializer.)
1439
1110
 
1440
- *Simon Hørup Eskildsen*
1111
+ *Josef Šimánek*
1441
1112
 
1442
- * Fix polymorphic eager loading when using a String as foreign key.
1113
+ * Fixed `ActiveRecord::Relation#becomes!` and `changed_attributes` issues for type
1114
+ columns.
1443
1115
 
1444
- Fixes #14734.
1116
+ Fixes #17139.
1445
1117
 
1446
- *Lauro Caetano*
1118
+ *Miklos Fazekas*
1447
1119
 
1448
- * Change belongs_to touch to be consistent with timestamp updates
1120
+ * Format the time string according to the precision of the time column.
1449
1121
 
1450
- If a model is set up with a belongs_to: touch relationship the parent
1451
- record will only be touched if the record was modified. This makes it
1452
- consistent with timestamp updating on the record itself.
1122
+ *Ryuta Kamizono*
1453
1123
 
1454
- *Brock Trappitt*
1124
+ * Allow a `:precision` option for time type columns.
1455
1125
 
1456
- * Fix the inferred table name of a `has_and_belongs_to_many` auxiliary
1457
- table inside a schema.
1126
+ *Ryuta Kamizono*
1458
1127
 
1459
- Fixes #14824.
1128
+ * Add `ActiveRecord::Base.suppress` to prevent the receiver from being saved
1129
+ during the given block.
1460
1130
 
1461
- *Eric Chahin*
1131
+ For example, here's a pattern of creating notifications when new comments
1132
+ are posted. (The notification may in turn trigger an email, a push
1133
+ notification, or just appear in the UI somewhere):
1462
1134
 
1463
- * Remove unused `:timestamp` type. Transparently alias it to `:datetime`
1464
- in all cases. Fixes inconsistencies when column types are sent outside of
1465
- `ActiveRecord`, such as for XML Serialization.
1135
+ class Comment < ActiveRecord::Base
1136
+ belongs_to :commentable, polymorphic: true
1137
+ after_create -> { Notification.create! comment: self,
1138
+ recipients: commentable.recipients }
1139
+ end
1466
1140
 
1467
- *Sean Griffin*
1141
+ That's what you want the bulk of the time. A new comment creates a new
1142
+ Notification. There may be edge cases where you don't want that, like
1143
+ when copying a commentable and its comments, in which case write a
1144
+ concern with something like this:
1145
+
1146
+ module Copyable
1147
+ def copy_to(destination)
1148
+ Notification.suppress do
1149
+ # Copy logic that creates new comments that we do not want triggering
1150
+ # notifications.
1151
+ end
1152
+ end
1153
+ end
1468
1154
 
1469
- * Fix bug that added `table_name_prefix` and `table_name_suffix` to
1470
- extension names in PostgreSQL when migrating.
1155
+ *Michael Ryan*
1471
1156
 
1472
- *Joao Carlos*
1157
+ * `:time` option added for `#touch`.
1473
1158
 
1474
- * The `:index` option in migrations, which previously was only available for
1475
- `references`, now works with any column types.
1159
+ Fixes #18905.
1476
1160
 
1477
- *Marc Schütz*
1161
+ *Hyonjee Joo*
1478
1162
 
1479
- * Add support for counter name to be passed as parameter on `CounterCache::ClassMethods#reset_counters`.
1163
+ * Deprecate passing of `start` value to `find_in_batches` and `find_each`
1164
+ in favour of `begin_at` value.
1480
1165
 
1481
- *jnormore*
1166
+ *Vipul A M*
1482
1167
 
1483
- * Restrict deletion of record when using `delete_all` with `uniq`, `group`, `having`
1484
- or `offset`.
1168
+ * Add `foreign_key_exists?` method.
1485
1169
 
1486
- In these cases the generated query ignored them and that caused unintended
1487
- records to be deleted.
1170
+ *Tõnis Simo*
1488
1171
 
1489
- Fixes #11985.
1172
+ * Use SQL COUNT and LIMIT 1 queries for `none?` and `one?` methods
1173
+ if no block or limit is given, instead of loading the entire
1174
+ collection into memory. This applies to relations (e.g. `User.all`)
1175
+ as well as associations (e.g. `account.users`)
1490
1176
 
1491
- *Leandro Facchinetti*
1177
+ # Before:
1492
1178
 
1493
- * Floats with limit >= 25 that get turned into doubles in MySQL no longer have
1494
- their limit dropped from the schema.
1179
+ users.none?
1180
+ # SELECT "users".* FROM "users"
1495
1181
 
1496
- Fixes #14135.
1182
+ users.one?
1183
+ # SELECT "users".* FROM "users"
1497
1184
 
1498
- *Aaron Nelson*
1185
+ # After:
1499
1186
 
1500
- * Fix how to calculate associated class name when using namespaced `has_and_belongs_to_many`
1501
- association.
1187
+ users.none?
1188
+ # SELECT 1 AS one FROM "users" LIMIT 1
1502
1189
 
1503
- Fixes #14709.
1190
+ users.one?
1191
+ # SELECT COUNT(*) FROM "users"
1504
1192
 
1505
- *Kassio Borges*
1193
+ *Eugene Gilburg*
1506
1194
 
1507
- * `ActiveRecord::Relation::Merger#filter_binds` now compares equivalent symbols and
1508
- strings in column names as equal.
1195
+ * Have `enum` perform type casting consistently with the rest of Active
1196
+ Record, such as `where`.
1509
1197
 
1510
- This fixes a rare case in which more bind values are passed than there are
1511
- placeholders for them in the generated SQL statement, which can make PostgreSQL
1512
- throw a `StatementInvalid` exception.
1198
+ *Sean Griffin*
1513
1199
 
1514
- *Nat Budin*
1200
+ * `scoping` no longer pollutes the current scope of sibling classes when using
1201
+ STI. e.x.
1515
1202
 
1516
- * Fix `stored_attributes` to correctly merge the details of stored
1517
- attributes defined in parent classes.
1203
+ StiOne.none.scoping do
1204
+ StiTwo.all
1205
+ end
1518
1206
 
1519
- Fixes #14672.
1207
+ Fixes #18806.
1520
1208
 
1521
- *Brad Bennett*, *Jessica Yao*, *Lakshmi Parthasarathy*
1209
+ *Sean Griffin*
1522
1210
 
1523
- * `change_column_default` allows `[]` as argument to `change_column_default`.
1211
+ * `remove_reference` with `foreign_key: true` removes the foreign key before
1212
+ removing the column. This fixes a bug where it was not possible to remove
1213
+ the column on MySQL.
1524
1214
 
1525
- Fixes #11586.
1215
+ Fixes #18664.
1526
1216
 
1527
1217
  *Yves Senn*
1528
1218
 
1529
- * Handle `name` and `"char"` column types in the PostgreSQL adapter.
1530
-
1531
- `name` and `"char"` are special character types used internally by
1532
- PostgreSQL and are used by internal system catalogs. These field types
1533
- can sometimes show up in structure-sniffing queries that feature internal system
1534
- structures or with certain PostgreSQL extensions.
1219
+ * `find_in_batches` now accepts an `:end_at` parameter that complements the `:start`
1220
+ parameter to specify where to stop batch processing.
1535
1221
 
1536
- *J Smith*, *Yves Senn*
1222
+ *Vipul A M*
1537
1223
 
1538
- * Fix `PostgreSQLAdapter::OID::Float#type_cast` to convert Infinity and
1539
- NaN PostgreSQL values into a native Ruby `Float::INFINITY` and `Float::NAN`
1224
+ * Fix a rounding problem for PostgreSQL timestamp columns.
1540
1225
 
1541
- Before:
1226
+ If a timestamp column has a precision specified, it needs to
1227
+ format according to that.
1542
1228
 
1543
- Point.create(value: 1.0/0)
1544
- Point.last.value # => 0.0
1229
+ *Ryuta Kamizono*
1545
1230
 
1546
- After:
1231
+ * Respect the database default charset for `schema_migrations` table.
1547
1232
 
1548
- Point.create(value: 1.0/0)
1549
- Point.last.value # => Infinity
1233
+ The charset of `version` column in `schema_migrations` table depends
1234
+ on the database default charset and collation rather than the encoding
1235
+ of the connection.
1550
1236
 
1551
- *Innokenty Mikhailov*
1237
+ *Ryuta Kamizono*
1552
1238
 
1553
- * Allow the PostgreSQL adapter to handle bigserial primary key types again.
1239
+ * Raise `ArgumentError` when passing `nil` or `false` to `Relation#merge`.
1554
1240
 
1555
- Fixes #10410.
1241
+ These are not valid values to merge in a relation, so it should warn users
1242
+ early.
1556
1243
 
1557
- *Patrick Robertson*
1244
+ *Rafael Mendonça França*
1558
1245
 
1559
- * Deprecate joining, eager loading and preloading of instance dependent
1560
- associations without replacement. These operations happen before instances
1561
- are created. The current behavior is unexpected and can result in broken
1562
- behavior.
1246
+ * Use `SCHEMA` instead of `DB_STRUCTURE` for specifying a structure file.
1563
1247
 
1564
- Fixes #15024.
1248
+ This makes the db:structure tasks consistent with test:load_structure.
1565
1249
 
1566
- *Yves Senn*
1250
+ *Dieter Komendera*
1567
1251
 
1568
- * Fix `has_and_belongs_to_many` CollectionAssociation size calculations.
1252
+ * Respect custom primary keys for associations when calling `Relation#where`
1569
1253
 
1570
- `has_and_belongs_to_many` should fall back to using the normal CollectionAssociation's
1571
- size calculation if the collection is not cached or loaded.
1254
+ Fixes #18813.
1572
1255
 
1573
- Fixes #14913, #14914.
1256
+ *Sean Griffin*
1574
1257
 
1575
- *Fred Wu*
1258
+ * Fix several edge cases which could result in a counter cache updating
1259
+ twice or not updating at all for `has_many` and `has_many :through`.
1576
1260
 
1577
- * Return a non zero status when running `rake db:migrate:status` and migration table does
1578
- not exist.
1261
+ Fixes #10865.
1579
1262
 
1580
- *Paul B.*
1263
+ *Sean Griffin*
1581
1264
 
1582
- * Add support for module-level `table_name_suffix` in models.
1265
+ * Foreign keys added by migrations were given random, generated names. This
1266
+ meant a different `structure.sql` would be generated every time a developer
1267
+ ran migrations on their machine.
1583
1268
 
1584
- This makes `table_name_suffix` work the same way as `table_name_prefix` when
1585
- using namespaced models.
1269
+ The generated part of foreign key names is now a hash of the table name and
1270
+ column name, which is consistent every time you run the migration.
1586
1271
 
1587
- *Jenner LaFave*
1272
+ *Chris Sinjakli*
1588
1273
 
1589
- * Revert the behaviour of `ActiveRecord::Relation#join` changed through 4.0 => 4.1 to 4.0.
1274
+ * Validation errors would be raised for parent records when an association
1275
+ was saved when the parent had `validate: false`. It should not be the
1276
+ responsibility of the model to validate an associated object unless the
1277
+ object was created or modified by the parent.
1590
1278
 
1591
- In 4.1.0 `Relation#join` is delegated to `Arel#SelectManager`.
1592
- In 4.0 series it is delegated to `Array#join`.
1279
+ This fixes the issue by skipping validations if the parent record is
1280
+ persisted, not changed, and not marked for destruction.
1593
1281
 
1594
- *Bogdan Gusiev*
1282
+ Fixes #17621.
1595
1283
 
1596
- * Log nil binary column values correctly.
1284
+ *Eileen M. Uchitelle, Aaron Patterson*
1597
1285
 
1598
- When an object with a binary column is updated with a nil value
1599
- in that column, the SQL logger would throw an exception when trying
1600
- to log that nil value. This only occurs when updating a record
1601
- that already has a non-nil value in that column since an initial nil
1602
- value isn't included in the SQL anyway (at least, when dirty checking
1603
- is enabled.) The column's new value will now be logged as `<NULL binary data>`
1604
- to parallel the existing `<N bytes of binary data>` for non-nil values.
1286
+ * Fix n+1 query problem when eager loading nil associations (fixes #18312)
1605
1287
 
1606
- *James Coleman*
1288
+ *Sammy Larbi*
1607
1289
 
1608
- * Rails will now pass a custom validation context through to autosave associations
1609
- in order to validate child associations with the same context.
1290
+ * Change the default error message from `can't be blank` to `must exist` for
1291
+ the presence validator of the `:required` option on `belongs_to`/`has_one`
1292
+ associations.
1610
1293
 
1611
- Fixes #13854.
1294
+ *Henrik Nygren*
1612
1295
 
1613
- *Eric Chahin*, *Aaron Nelson*, *Kevin Casey*
1296
+ * Fixed `ActiveRecord::Relation#group` method when an argument is an SQL
1297
+ reserved keyword:
1614
1298
 
1615
- * Stringify all variables keys of MySQL connection configuration.
1299
+ Example:
1616
1300
 
1617
- When `sql_mode` variable for MySQL adapters set in configuration as `String`
1618
- was ignored and overwritten by strict mode option.
1301
+ SplitTest.group(:key).count
1302
+ Property.group(:value).count
1619
1303
 
1620
- Fixes #14895.
1304
+ *Bogdan Gusiev*
1621
1305
 
1622
- *Paul Nikitochkin*
1306
+ * Added the `#or` method on `ActiveRecord::Relation`, allowing use of the OR
1307
+ operator to combine WHERE or HAVING clauses.
1623
1308
 
1624
- * Ensure SQLite3 statements are closed on errors.
1309
+ Example:
1625
1310
 
1626
- Fixes #13631.
1311
+ Post.where('id = 1').or(Post.where('id = 2'))
1312
+ # => SELECT * FROM posts WHERE (id = 1) OR (id = 2)
1627
1313
 
1628
- *Timur Alperovich*
1314
+ *Sean Griffin*, *Matthew Draper*, *Gael Muller*, *Olivier El Mekki*
1629
1315
 
1630
- * Give `ActiveRecord::PredicateBuilder` private methods the privacy they deserve.
1316
+ * Don't define autosave association callbacks twice from
1317
+ `accepts_nested_attributes_for`.
1631
1318
 
1632
- *Hector Satre*
1319
+ Fixes #18704.
1633
1320
 
1634
- * When using a custom `join_table` name on a `habtm`, rails was not saving it
1635
- on Reflections. This causes a problem when rails loads fixtures, because it
1636
- uses the reflections to set database with fixtures.
1321
+ *Sean Griffin*
1637
1322
 
1638
- Fixes #14845.
1323
+ * Integer types will no longer raise a `RangeError` when assigning an
1324
+ attribute, but will instead raise when going to the database.
1639
1325
 
1640
- *Kassio Borges*
1326
+ Fixes several vague issues which were never reported directly. See the
1327
+ commit message from the commit which added this line for some examples.
1641
1328
 
1642
- * Reset the cache when modifying a Relation with cached Arel.
1643
- Additionally display a warning message to make the user aware.
1329
+ *Sean Griffin*
1644
1330
 
1645
- *Yves Senn*
1331
+ * Values which would error while being sent to the database (such as an
1332
+ ASCII-8BIT string with invalid UTF-8 bytes on SQLite3), no longer error on
1333
+ assignment. They will still error when sent to the database, but you are
1334
+ given the ability to re-assign it to a valid value.
1646
1335
 
1647
- * PostgreSQL should internally use `:datetime` consistently for TimeStamp. Assures
1648
- different spellings of timestamps are treated the same.
1336
+ Fixes #18580.
1649
1337
 
1650
- Example:
1338
+ *Sean Griffin*
1651
1339
 
1652
- mytimestamp.simplified_type('timestamp without time zone')
1653
- # => :datetime
1654
- mytimestamp.simplified_type('timestamp(6) without time zone')
1655
- # => also :datetime (previously would be :timestamp)
1340
+ * Don't remove join dependencies in `Relation#exists?`
1656
1341
 
1657
- See #14513.
1342
+ Fixes #18632.
1658
1343
 
1659
- *Jefferson Lai*
1344
+ *Sean Griffin*
1660
1345
 
1661
- * `ActiveRecord::Base.no_touching` no longer triggers callbacks or start empty transactions.
1346
+ * Invalid values assigned to a JSON column are assumed to be `nil`.
1662
1347
 
1663
- Fixes #14841.
1348
+ Fixes #18629.
1664
1349
 
1665
- *Lucas Mazza*
1350
+ *Sean Griffin*
1666
1351
 
1667
- * Fix name collision with `Array#select!` with `Relation#select!`.
1352
+ * Add `ActiveRecord::Base#accessed_fields`, which can be used to quickly
1353
+ discover which fields were read from a model when you are looking to only
1354
+ select the data you need from the database.
1668
1355
 
1669
- Fixes #14752.
1356
+ *Sean Griffin*
1670
1357
 
1671
- *Earl St Sauver*
1358
+ * Introduce the `:if_exists` option for `drop_table`.
1672
1359
 
1673
- * Fix unexpected behavior for `has_many :through` associations going through
1674
- a scoped `has_many`.
1360
+ Example:
1675
1361
 
1676
- If a `has_many` association is adjusted using a scope, and another
1677
- `has_many :through` uses this association, then the scope adjustment is
1678
- unexpectedly neglected.
1362
+ drop_table(:posts, if_exists: true)
1679
1363
 
1680
- Fixes #14537.
1364
+ That would execute:
1681
1365
 
1682
- *Jan Habermann*
1366
+ DROP TABLE IF EXISTS posts
1683
1367
 
1684
- * `@destroyed` should always be set to `false` when an object is duped.
1368
+ If the table doesn't exist, `if_exists: false` (the default) raises an
1369
+ exception whereas `if_exists: true` does nothing.
1685
1370
 
1686
- *Kuldeep Aggarwal*
1371
+ *Cody Cutrer*, *Stefan Kanev*, *Ryuta Kamizono*
1687
1372
 
1688
- * Enable `has_many` associations to support irregular inflections.
1373
+ * Don't run SQL if attribute value is not changed for update_attribute method.
1689
1374
 
1690
- Fixes #8928.
1375
+ *Prathamesh Sonpatki*
1691
1376
 
1692
- *arthurnn*, *Javier Goizueta*
1377
+ * `time` columns can now get affected by `time_zone_aware_attributes`. If you have
1378
+ set `config.time_zone` to a value other than `'UTC'`, they will be treated
1379
+ as in that time zone by default in Rails 5.1. If this is not the desired
1380
+ behavior, you can set
1693
1381
 
1694
- * Fix `count` used with a grouping not returning a Hash.
1382
+ ActiveRecord::Base.time_zone_aware_types = [:datetime]
1695
1383
 
1696
- Fixes #14721.
1384
+ A deprecation warning will be emitted if you have a `:time` column, and have
1385
+ not explicitly opted out.
1697
1386
 
1698
- *Eric Chahin*
1387
+ Fixes #3145.
1699
1388
 
1700
- * `sanitize_sql_like` helper method to escape a string for safe use in an SQL
1701
- LIKE statement.
1389
+ *Sean Griffin*
1702
1390
 
1703
- Example:
1391
+ * Tests now run after_commit callbacks. You no longer have to declare
1392
+ `uses_transaction ‘test name’` to test the results of an after_commit.
1704
1393
 
1705
- class Article
1706
- def self.search(term)
1707
- where("title LIKE ?", sanitize_sql_like(term))
1708
- end
1709
- end
1394
+ after_commit callbacks run after committing a transaction whose parent
1395
+ is not `joinable?`: un-nested transactions, transactions within test cases,
1396
+ and transactions in `console --sandbox`.
1710
1397
 
1711
- Article.search("20% _reduction_")
1712
- # => Query looks like "... title LIKE '20\% \_reduction\_' ..."
1398
+ *arthurnn*, *Ravil Bayramgalin*, *Matthew Draper*
1713
1399
 
1714
- *Rob Gilson*, *Yves Senn*
1400
+ * `nil` as a value for a binary column in a query no longer logs as
1401
+ "<NULL binary data>", and instead logs as just "nil".
1715
1402
 
1716
- * Do not quote uuid default value on `change_column`.
1403
+ *Sean Griffin*
1717
1404
 
1718
- Fixes #14604.
1405
+ * `attribute_will_change!` will no longer cause non-persistable attributes to
1406
+ be sent to the database.
1719
1407
 
1720
- *Eric Chahin*
1408
+ Fixes #18407.
1721
1409
 
1722
- * The comparison between `Relation` and `CollectionProxy` should be consistent.
1410
+ *Sean Griffin*
1723
1411
 
1724
- Example:
1412
+ * Remove support for the `protected_attributes` gem.
1725
1413
 
1726
- author.posts == Post.where(author_id: author.id)
1727
- # => true
1728
- Post.where(author_id: author.id) == author.posts
1729
- # => true
1414
+ *Carlos Antonio da Silva*, *Roberto Miranda*
1730
1415
 
1731
- Fixes #13506.
1416
+ * Fix accessing of fixtures having non-string labels like Fixnum.
1732
1417
 
1733
- *Lauro Caetano*
1418
+ *Prathamesh Sonpatki*
1734
1419
 
1735
- * Calling `delete_all` on an unloaded `CollectionProxy` no longer
1736
- generates an SQL statement containing each id of the collection:
1420
+ * Remove deprecated support to preload instance-dependent associations.
1737
1421
 
1738
- Before:
1422
+ *Yves Senn*
1739
1423
 
1740
- DELETE FROM `model` WHERE `model`.`parent_id` = 1
1741
- AND `model`.`id` IN (1, 2, 3...)
1424
+ * Remove deprecated support for PostgreSQL ranges with exclusive lower bounds.
1742
1425
 
1743
- After:
1426
+ *Yves Senn*
1744
1427
 
1745
- DELETE FROM `model` WHERE `model`.`parent_id` = 1
1428
+ * Remove deprecation when modifying a relation with cached Arel.
1429
+ This raises an `ImmutableRelation` error instead.
1746
1430
 
1747
- *Eileen M. Uchitelle*, *Aaron Patterson*
1431
+ *Yves Senn*
1748
1432
 
1749
- * Fix invalid SQL when aggregate methods (`empty?`, `any?`, `count`) used
1750
- with `select`.
1433
+ * Added `ActiveRecord::SecureToken` in order to encapsulate generation of
1434
+ unique tokens for attributes in a model using `SecureRandom`.
1751
1435
 
1752
- Fixes #13648.
1436
+ *Roberto Miranda*
1753
1437
 
1754
- *Simon Woker*
1438
+ * Change the behavior of boolean columns to be closer to Ruby's semantics.
1755
1439
 
1756
- * PostgreSQL adapter only warns once for every missing OID per connection.
1440
+ Before this change we had a small set of "truthy", and all others are "falsy".
1757
1441
 
1758
- Fixes #14275.
1442
+ Now, we have a small set of "falsy" values and all others are "truthy" matching
1443
+ Ruby's semantics.
1759
1444
 
1760
- *Matthew Draper*, *Yves Senn*
1445
+ *Rafael Mendonça França*
1761
1446
 
1762
- * PostgreSQL adapter automatically reloads it's type map when encountering
1763
- unknown OIDs.
1447
+ * Deprecate `ActiveRecord::Base.errors_in_transactional_callbacks=`.
1764
1448
 
1765
- Fixes #14678.
1449
+ *Rafael Mendonça França*
1766
1450
 
1767
- *Matthew Draper*, *Yves Senn*
1451
+ * Change transaction callbacks to not swallow errors.
1768
1452
 
1769
- * Fix insertion of records via `has_many :through` association with scope.
1453
+ Before this change any errors raised inside a transaction callback
1454
+ were getting rescued and printed in the logs.
1770
1455
 
1771
- Fixes #3548.
1456
+ Now these errors are not rescued anymore and just bubble up, as the other callbacks.
1772
1457
 
1773
- *Ivan Antropov*
1458
+ *Rafael Mendonça França*
1774
1459
 
1775
- * Auto-generate stable fixture UUIDs on PostgreSQL.
1460
+ * Remove deprecated `sanitize_sql_hash_for_conditions`.
1776
1461
 
1777
- Fixes #11524.
1462
+ *Rafael Mendonça França*
1778
1463
 
1779
- *Roderick van Domburg*
1464
+ * Remove deprecated `Reflection#source_macro`.
1780
1465
 
1781
- * Fix a problem where an enum would overwrite values of another enum with the
1782
- same name in an unrelated class.
1466
+ *Rafael Mendonça França*
1783
1467
 
1784
- Fixes #14607.
1468
+ * Remove deprecated `symbolized_base_class` and `symbolized_sti_name`.
1785
1469
 
1786
- *Evan Whalen*
1470
+ *Rafael Mendonça França*
1787
1471
 
1788
- * PostgreSQL and SQLite string columns no longer have a default limit of 255.
1472
+ * Remove deprecated `ActiveRecord::Base.disable_implicit_join_references=`.
1789
1473
 
1790
- Fixes #13435, #9153.
1474
+ *Rafael Mendonça França*
1791
1475
 
1792
- *Vladimir Sazhin*, *Toms Mikoss*, *Yves Senn*
1476
+ * Remove deprecated access to connection specification using a string accessor.
1793
1477
 
1794
- * Make possible to have an association called `records`.
1478
+ Now all strings will be handled as a URL.
1795
1479
 
1796
- Fixes #11645.
1480
+ *Rafael Mendonça França*
1797
1481
 
1798
- *prathamesh-sonpatki*
1482
+ * Change the default `null` value for `timestamps` to `false`.
1799
1483
 
1800
- * `to_sql` on an association now matches the query that is actually executed, where it
1801
- could previously have incorrectly accrued additional conditions (e.g. as a result of
1802
- a previous query). `CollectionProxy` now always defers to the association scope's
1803
- `arel` method so the (incorrect) inherited one should be entirely concealed.
1484
+ *Rafael Mendonça França*
1804
1485
 
1805
- Fixes #14003.
1486
+ * Return an array of pools from `connection_pools`.
1806
1487
 
1807
- *Jefferson Lai*
1488
+ *Rafael Mendonça França*
1808
1489
 
1809
- * Block a few default Class methods as scope name.
1490
+ * Return a null column from `column_for_attribute` when no column exists.
1810
1491
 
1811
- For instance, this will raise:
1492
+ *Rafael Mendonça França*
1812
1493
 
1813
- scope :public, -> { where(status: 1) }
1494
+ * Remove deprecated `serialized_attributes`.
1814
1495
 
1815
- *arthurnn*
1496
+ *Rafael Mendonça França*
1816
1497
 
1817
- * Fix error when using `with_options` with lambda.
1498
+ * Remove deprecated automatic counter caches on `has_many :through`.
1818
1499
 
1819
- Fixes #9805.
1500
+ *Rafael Mendonça França*
1820
1501
 
1821
- *Lauro Caetano*
1502
+ * Change the way in which callback chains can be halted.
1822
1503
 
1823
- * Switch `sqlite3:///` URLs (which were temporarily
1824
- deprecated in 4.1) from relative to absolute.
1504
+ The preferred method to halt a callback chain from now on is to explicitly
1505
+ `throw(:abort)`.
1506
+ In the past, returning `false` in an Active Record `before_` callback had the
1507
+ side effect of halting the callback chain.
1508
+ This is not recommended anymore and, depending on the value of the
1509
+ `ActiveSupport.halt_callback_chains_on_return_false` option, will
1510
+ either not work at all or display a deprecation warning.
1825
1511
 
1826
- If you still want the previous interpretation, you should replace
1827
- `sqlite3:///my/path` with `sqlite3:my/path`.
1512
+ *claudiob*
1828
1513
 
1829
- *Matthew Draper*
1514
+ * Clear query cache on rollback.
1830
1515
 
1831
- * Treat blank UUID values as `nil`.
1516
+ *Florian Weingarten*
1832
1517
 
1833
- Example:
1518
+ * Fix setting of foreign_key for through associations when building a new record.
1834
1519
 
1835
- Sample.new(uuid_field: '') #=> <Sample id: nil, uuid_field: nil>
1520
+ Fixes #12698.
1836
1521
 
1837
- *Dmitry Lavrov*
1522
+ *Ivan Antropov*
1838
1523
 
1839
- * Enable support for materialized views on PostgreSQL >= 9.3.
1524
+ * Improve dumping of the primary key. If it is not a default primary key,
1525
+ correctly dump the type and options.
1840
1526
 
1841
- *Dave Lee*
1527
+ Fixes #14169, #16599.
1842
1528
 
1843
- * The PostgreSQL adapter supports custom domains. Fixes #14305.
1529
+ *Ryuta Kamizono*
1844
1530
 
1845
- *Yves Senn*
1531
+ * Format the datetime string according to the precision of the datetime field.
1846
1532
 
1847
- * PostgreSQL `Column#type` is now determined through the corresponding OID.
1848
- The column types stay the same except for enum columns. They no longer have
1849
- `nil` as type but `enum`.
1533
+ Incompatible to rounding behavior between MySQL 5.6 and earlier.
1850
1534
 
1851
- See #7814.
1535
+ In 5.5, when you insert `2014-08-17 12:30:00.999999` the fractional part
1536
+ is ignored. In 5.6, it's rounded to `2014-08-17 12:30:01`:
1852
1537
 
1853
- *Yves Senn*
1538
+ http://bugs.mysql.com/bug.php?id=68760
1854
1539
 
1855
- * Fix error when specifying a non-empty default value on a PostgreSQL array
1856
- column.
1540
+ *Ryuta Kamizono*
1857
1541
 
1858
- Fixes #10613.
1542
+ * Allow a precision option for MySQL datetimes.
1859
1543
 
1860
- *Luke Steensen*
1544
+ *Ryuta Kamizono*
1861
1545
 
1862
- * Fix error where `.persisted?` throws SystemStackError for an unsaved model with a
1863
- custom primary key that did not save due to validation error.
1546
+ * Fixed automatic `inverse_of` for models nested in a module.
1864
1547
 
1865
- Fixes #14393.
1548
+ *Andrew McCloud*
1866
1549
 
1867
- *Chris Finne*
1550
+ * Change `ActiveRecord::Relation#update` behavior so that it can
1551
+ be called without passing ids of the records to be updated.
1868
1552
 
1869
- * Introduce `validate` as an alias for `valid?`.
1553
+ This change allows updating multiple records returned by
1554
+ `ActiveRecord::Relation` with callbacks and validations.
1870
1555
 
1871
- This is more intuitive when you want to run validations but don't care about the return value.
1556
+ # Before
1557
+ # ArgumentError: wrong number of arguments (1 for 2)
1558
+ Comment.where(group: 'expert').update(body: "Group of Rails Experts")
1872
1559
 
1873
- *Henrik Nyh*
1560
+ # After
1561
+ # Comments with group expert updated with body "Group of Rails Experts"
1562
+ Comment.where(group: 'expert').update(body: "Group of Rails Experts")
1874
1563
 
1875
- * Create indexes inline in CREATE TABLE for MySQL.
1564
+ *Prathamesh Sonpatki*
1876
1565
 
1877
- This is important, because adding an index on a temporary table after it has been created
1878
- would commit the transaction.
1566
+ * Fix `reaping_frequency` option when the value is a string.
1879
1567
 
1880
- It also allows creating and dropping indexed tables with fewer queries and fewer permissions
1881
- required.
1568
+ This usually happens when it is configured using `DATABASE_URL`.
1882
1569
 
1883
- Example:
1570
+ *korbin*
1884
1571
 
1885
- create_table :temp, temporary: true, as: "SELECT id, name, zip FROM a_really_complicated_query" do |t|
1886
- t.index :zip
1887
- end
1888
- # => CREATE TEMPORARY TABLE temp (INDEX (zip)) AS SELECT id, name, zip FROM a_really_complicated_query
1572
+ * Fix error message when trying to create an associated record and the foreign
1573
+ key is missing.
1889
1574
 
1890
- *Cody Cutrer*, *Steve Rice*, *Rafael Mendonça Franca*
1575
+ Before this fix the following exception was being raised:
1891
1576
 
1892
- * Use singular table name in generated migrations when
1893
- `ActiveRecord::Base.pluralize_table_names` is `false`.
1577
+ NoMethodError: undefined method `val' for #<Arel::Nodes::BindParam:0x007fc64d19c218>
1894
1578
 
1895
- Fixes #13426.
1579
+ Now the message is:
1896
1580
 
1897
- *Kuldeep Aggarwal*
1581
+ ActiveRecord::UnknownAttributeError: unknown attribute 'foreign_key' for Model.
1898
1582
 
1899
- * `touch` accepts many attributes to be touched at once.
1583
+ *Rafael Mendonça França*
1900
1584
 
1901
- Example:
1585
+ * Fix change detection problem for PostgreSQL bytea type and
1586
+ `ArgumentError: string contains null byte` exception with pg-0.18.
1902
1587
 
1903
- # touches :signed_at, :sealed_at, and :updated_at/on attributes.
1904
- Photo.last.touch(:signed_at, :sealed_at)
1588
+ Fixes #17680.
1905
1589
 
1906
- *James Pinto*
1590
+ *Lars Kanis*
1907
1591
 
1908
- * `rake db:structure:dump` only dumps schema information if the schema
1909
- migration table exists.
1592
+ * When a table has a composite primary key, the `primary_key` method for
1593
+ SQLite3 and PostgreSQL adapters was only returning the first field of the key.
1594
+ Ensures that it will return nil instead, as Active Record doesn't support
1595
+ composite primary keys.
1910
1596
 
1911
- Fixes #14217.
1597
+ Fixes #18070.
1912
1598
 
1913
- *Yves Senn*
1599
+ *arthurnn*
1914
1600
 
1915
- * Reap connections that were checked out by now-dead threads, instead
1916
- of waiting until they disconnect by themselves. Before this change,
1917
- a suitably constructed series of short-lived threads could starve
1918
- the connection pool, without ever having more than a couple alive at
1919
- the same time.
1601
+ * `validates_size_of` / `validates_length_of` do not count records
1602
+ which are `marked_for_destruction?`.
1920
1603
 
1921
- *Matthew Draper*
1604
+ Fixes #7247.
1922
1605
 
1923
- * `pk_and_sequence_for` now ensures that only the pg_depend entries
1924
- pointing to pg_class, and thus only sequence objects, are considered.
1606
+ *Yves Senn*
1925
1607
 
1926
- *Josh Williams*
1608
+ * Ensure `first!` and friends work on loaded associations.
1927
1609
 
1928
- * `where.not` adds `references` for `includes` like normal `where` calls do.
1610
+ Fixes #18237.
1929
1611
 
1930
- Fixes #14406.
1612
+ *Sean Griffin*
1931
1613
 
1932
- *Yves Senn*
1614
+ * `eager_load` preserves readonly flag for associations.
1933
1615
 
1934
- * Extend fixture `$LABEL` replacement to allow string interpolation.
1616
+ Fixes #15853.
1935
1617
 
1936
- Example:
1618
+ *Takashi Kokubun*
1937
1619
 
1938
- martin:
1939
- email: $LABEL@email.com
1620
+ * Provide `:touch` option to `save()` to accommodate saving without updating
1621
+ timestamps.
1940
1622
 
1941
- users(:martin).email # => martin@email.com
1623
+ Fixes #18202.
1942
1624
 
1943
- *Eric Steele*
1625
+ *Dan Olson*
1944
1626
 
1945
- * Add support for `Relation` be passed as parameter on `QueryCache#select_all`.
1627
+ * Provide a more helpful error message when an unsupported class is passed to
1628
+ `serialize`.
1946
1629
 
1947
- Fixes #14361.
1630
+ Fixes #18224.
1948
1631
 
1949
- *arthurnn*
1632
+ *Sean Griffin*
1950
1633
 
1951
- * Passing an Active Record object to `find` or `exists?` is now deprecated.
1952
- Call `.id` on the object first.
1634
+ * Add bigint primary key support for MySQL.
1953
1635
 
1954
- *Aaron Patterson*
1636
+ Example:
1955
1637
 
1956
- * Only use BINARY for MySQL case sensitive uniqueness check when column
1957
- has a case insensitive collation.
1638
+ create_table :foos, id: :bigint do |t|
1639
+ end
1958
1640
 
1959
1641
  *Ryuta Kamizono*
1960
1642
 
1961
- * Support for MySQL 5.6 fractional seconds.
1643
+ * Support for any type of primary key.
1962
1644
 
1963
- *arthurnn*, *Tatsuhiko Miyagawa*
1645
+ Fixes #14194.
1964
1646
 
1965
- * Support for PostgreSQL `citext` data type enabling case-insensitive
1966
- `where` values without needing to wrap in UPPER/LOWER sql functions.
1647
+ *Ryuta Kamizono*
1967
1648
 
1968
- *Troy Kruthoff*, *Lachlan Sylvester*
1649
+ * Dump the default `nil` for PostgreSQL UUID primary key.
1969
1650
 
1970
- * Only save has_one associations if record has changes.
1971
- Previously after save related callbacks, such as `#after_commit`, were triggered when the has_one
1972
- object did not get saved to the db.
1651
+ *Ryuta Kamizono*
1973
1652
 
1974
- *Alan Kennedy*
1653
+ * Add a `:foreign_key` option to `references` and associated migration
1654
+ methods. The model and migration generators now use this option, rather than
1655
+ the `add_foreign_key` form.
1975
1656
 
1976
- * Allow strings to specify the `#order` value.
1657
+ *Sean Griffin*
1977
1658
 
1978
- Example:
1659
+ * Don't raise when writing an attribute with an out-of-range datetime passed
1660
+ by the user.
1979
1661
 
1980
- Model.order(id: 'asc').to_sql == Model.order(id: :asc).to_sql
1662
+ *Grey Baker*
1981
1663
 
1982
- *Marcelo Casiraghi*, *Robin Dupret*
1664
+ * Replace deprecated `ActiveRecord::Tasks::DatabaseTasks#load_schema` with
1665
+ `ActiveRecord::Tasks::DatabaseTasks#load_schema_for`.
1983
1666
 
1984
- * Dynamically register PostgreSQL enum OIDs. This prevents "unknown OID"
1985
- warnings on enum columns.
1667
+ *Yves Senn*
1986
1668
 
1987
- *Dieter Komendera*
1669
+ * Fix bug with `ActiveRecord::Type::Numeric` that caused negative values to
1670
+ be marked as having changed when set to the same negative value.
1988
1671
 
1989
- * `includes` is able to detect the right preloading strategy when string
1990
- joins are involved.
1672
+ Fixes #18161.
1991
1673
 
1992
- Fixes #14109.
1674
+ *Daniel Fox*
1993
1675
 
1994
- *Aaron Patterson*, *Yves Senn*
1676
+ * Introduce `force: :cascade` option for `create_table`. Using this option
1677
+ will recreate tables even if they have dependent objects (like foreign keys).
1678
+ `db/schema.rb` now uses `force: :cascade`. This makes it possible to
1679
+ reload the schema when foreign keys are in place.
1995
1680
 
1996
- * Fix error with validation with enum fields for records where the value for
1997
- any enum attribute is always evaluated as 0 during uniqueness validation.
1681
+ *Matthew Draper*, *Yves Senn*
1998
1682
 
1999
- Fixes #14172.
1683
+ * `db:schema:load` and `db:structure:load` no longer purge the database
1684
+ before loading the schema. This is left for the user to do.
1685
+ `db:test:prepare` will still purge the database.
2000
1686
 
2001
- *Vilius Luneckas* *Ahmed AbouElhamayed*
1687
+ Fixes #17945.
2002
1688
 
2003
- * `before_add` callbacks are fired before the record is saved on
2004
- `has_and_belongs_to_many` associations *and* on `has_many :through`
2005
- associations. Before this change, `before_add` callbacks would be fired
2006
- before the record was saved on `has_and_belongs_to_many` associations, but
2007
- *not* on `has_many :through` associations.
1689
+ *Yves Senn*
2008
1690
 
2009
- Fixes #14144.
1691
+ * Fix undesirable RangeError by `Type::Integer`. Add `Type::UnsignedInteger`.
2010
1692
 
2011
- * Fix STI classes not defining an attribute method if there is a conflicting
2012
- private method defined on its ancestors.
1693
+ *Ryuta Kamizono*
2013
1694
 
2014
- Fixes #11569.
1695
+ * Add `foreign_type` option to `has_one` and `has_many` association macros.
2015
1696
 
2016
- *Godfrey Chan*
1697
+ This option enables to define the column name of associated object's type for polymorphic associations.
2017
1698
 
2018
- * Coerce strings when reading attributes. Fixes #10485.
1699
+ *Ulisses Almeida*, *Kassio Borges*
2019
1700
 
2020
- Example:
1701
+ * Remove deprecated behavior allowing nested arrays to be passed as query
1702
+ values.
2021
1703
 
2022
- book = Book.new(title: 12345)
2023
- book.save!
2024
- book.title # => "12345"
1704
+ *Melanie Gilman*
2025
1705
 
2026
- *Yves Senn*
1706
+ * Deprecate passing a class as a value in a query. Users should pass strings
1707
+ instead.
2027
1708
 
2028
- * Deprecate half-baked support for PostgreSQL range values with excluding beginnings.
2029
- We currently map PostgreSQL ranges to Ruby ranges. This conversion is not fully
2030
- possible because the Ruby range does not support excluded beginnings.
1709
+ *Melanie Gilman*
2031
1710
 
2032
- The current solution of incrementing the beginning is not correct and is now
2033
- deprecated. For subtypes where we don't know how to increment (e.g. `#succ`
2034
- is not defined) it will raise an `ArgumentException` for ranges with excluding
2035
- beginnings.
1711
+ * `add_timestamps` and `remove_timestamps` now properly reversible with
1712
+ options.
2036
1713
 
2037
- *Yves Senn*
1714
+ *Noam Gagliardi-Rabinovich*
2038
1715
 
2039
- * Support for user created range types in PostgreSQL.
1716
+ * `ActiveRecord::ConnectionAdapters::ColumnDumper#column_spec` and
1717
+ `ActiveRecord::ConnectionAdapters::ColumnDumper#prepare_column_options` no
1718
+ longer have a `types` argument. They should access
1719
+ `connection#native_database_types` directly.
2040
1720
 
2041
1721
  *Yves Senn*
2042
1722
 
2043
- Please check [4-1-stable](https://github.com/rails/rails/blob/4-1-stable/activerecord/CHANGELOG.md) for previous changes.
1723
+ Please check [4-2-stable](https://github.com/rails/rails/blob/4-2-stable/activerecord/CHANGELOG.md) for previous changes.