activerecord 5.1.7 → 5.2.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 (259) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +221 -900
  3. data/README.rdoc +3 -3
  4. data/examples/performance.rb +2 -0
  5. data/examples/simple.rb +2 -0
  6. data/lib/active_record.rb +10 -3
  7. data/lib/active_record/aggregations.rb +2 -0
  8. data/lib/active_record/association_relation.rb +2 -0
  9. data/lib/active_record/associations.rb +13 -42
  10. data/lib/active_record/associations/alias_tracker.rb +17 -17
  11. data/lib/active_record/associations/association.rb +11 -22
  12. data/lib/active_record/associations/association_scope.rb +32 -44
  13. data/lib/active_record/associations/belongs_to_association.rb +6 -4
  14. data/lib/active_record/associations/belongs_to_polymorphic_association.rb +3 -1
  15. data/lib/active_record/associations/builder/association.rb +2 -5
  16. data/lib/active_record/associations/builder/belongs_to.rb +7 -12
  17. data/lib/active_record/associations/builder/collection_association.rb +1 -1
  18. data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +3 -1
  19. data/lib/active_record/associations/builder/has_many.rb +2 -0
  20. data/lib/active_record/associations/builder/has_one.rb +2 -0
  21. data/lib/active_record/associations/builder/singular_association.rb +2 -0
  22. data/lib/active_record/associations/collection_association.rb +41 -33
  23. data/lib/active_record/associations/collection_proxy.rb +11 -14
  24. data/lib/active_record/associations/foreign_association.rb +2 -0
  25. data/lib/active_record/associations/has_many_association.rb +4 -2
  26. data/lib/active_record/associations/has_many_through_association.rb +4 -2
  27. data/lib/active_record/associations/has_one_association.rb +3 -1
  28. data/lib/active_record/associations/has_one_through_association.rb +3 -1
  29. data/lib/active_record/associations/join_dependency.rb +22 -40
  30. data/lib/active_record/associations/join_dependency/join_association.rb +17 -56
  31. data/lib/active_record/associations/join_dependency/join_base.rb +9 -8
  32. data/lib/active_record/associations/join_dependency/join_part.rb +2 -9
  33. data/lib/active_record/associations/preloader.rb +17 -37
  34. data/lib/active_record/associations/preloader/association.rb +42 -58
  35. data/lib/active_record/associations/preloader/through_association.rb +71 -79
  36. data/lib/active_record/associations/singular_association.rb +14 -10
  37. data/lib/active_record/associations/through_association.rb +3 -1
  38. data/lib/active_record/attribute_assignment.rb +2 -0
  39. data/lib/active_record/attribute_decorators.rb +3 -2
  40. data/lib/active_record/attribute_methods.rb +47 -7
  41. data/lib/active_record/attribute_methods/before_type_cast.rb +2 -0
  42. data/lib/active_record/attribute_methods/dirty.rb +25 -214
  43. data/lib/active_record/attribute_methods/primary_key.rb +7 -6
  44. data/lib/active_record/attribute_methods/query.rb +2 -0
  45. data/lib/active_record/attribute_methods/read.rb +8 -2
  46. data/lib/active_record/attribute_methods/serialization.rb +23 -0
  47. data/lib/active_record/attribute_methods/time_zone_conversion.rb +6 -8
  48. data/lib/active_record/attribute_methods/write.rb +21 -9
  49. data/lib/active_record/attributes.rb +7 -6
  50. data/lib/active_record/autosave_association.rb +5 -11
  51. data/lib/active_record/base.rb +2 -0
  52. data/lib/active_record/callbacks.rb +6 -8
  53. data/lib/active_record/coders/json.rb +2 -0
  54. data/lib/active_record/coders/yaml_column.rb +2 -0
  55. data/lib/active_record/collection_cache_key.rb +10 -5
  56. data/lib/active_record/connection_adapters/abstract/connection_pool.rb +110 -35
  57. data/lib/active_record/connection_adapters/abstract/database_limits.rb +2 -0
  58. data/lib/active_record/connection_adapters/abstract/database_statements.rb +120 -28
  59. data/lib/active_record/connection_adapters/abstract/query_cache.rb +7 -2
  60. data/lib/active_record/connection_adapters/abstract/quoting.rb +14 -33
  61. data/lib/active_record/connection_adapters/abstract/savepoints.rb +2 -0
  62. data/lib/active_record/connection_adapters/abstract/schema_creation.rb +13 -5
  63. data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +40 -2
  64. data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +31 -53
  65. data/lib/active_record/connection_adapters/abstract/schema_statements.rb +103 -63
  66. data/lib/active_record/connection_adapters/abstract/transaction.rb +45 -9
  67. data/lib/active_record/connection_adapters/abstract_adapter.rb +62 -90
  68. data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +75 -138
  69. data/lib/active_record/connection_adapters/column.rb +3 -1
  70. data/lib/active_record/connection_adapters/connection_specification.rb +17 -3
  71. data/lib/active_record/connection_adapters/determine_if_preparable_visitor.rb +2 -0
  72. data/lib/active_record/connection_adapters/mysql/column.rb +2 -0
  73. data/lib/active_record/connection_adapters/mysql/database_statements.rb +3 -1
  74. data/lib/active_record/connection_adapters/mysql/explain_pretty_printer.rb +2 -0
  75. data/lib/active_record/connection_adapters/mysql/quoting.rb +9 -10
  76. data/lib/active_record/connection_adapters/mysql/schema_creation.rb +5 -3
  77. data/lib/active_record/connection_adapters/mysql/schema_definitions.rb +7 -6
  78. data/lib/active_record/connection_adapters/mysql/schema_dumper.rb +30 -30
  79. data/lib/active_record/connection_adapters/mysql/schema_statements.rb +91 -1
  80. data/lib/active_record/connection_adapters/mysql/type_metadata.rb +2 -0
  81. data/lib/active_record/connection_adapters/mysql2_adapter.rb +8 -2
  82. data/lib/active_record/connection_adapters/postgresql/column.rb +2 -0
  83. data/lib/active_record/connection_adapters/postgresql/database_statements.rb +6 -0
  84. data/lib/active_record/connection_adapters/postgresql/explain_pretty_printer.rb +2 -0
  85. data/lib/active_record/connection_adapters/postgresql/oid.rb +2 -1
  86. data/lib/active_record/connection_adapters/postgresql/oid/array.rb +3 -11
  87. data/lib/active_record/connection_adapters/postgresql/oid/bit.rb +2 -0
  88. data/lib/active_record/connection_adapters/postgresql/oid/bit_varying.rb +2 -0
  89. data/lib/active_record/connection_adapters/postgresql/oid/bytea.rb +2 -0
  90. data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +2 -0
  91. data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +2 -0
  92. data/lib/active_record/connection_adapters/postgresql/oid/decimal.rb +3 -1
  93. data/lib/active_record/connection_adapters/postgresql/oid/enum.rb +2 -0
  94. data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +2 -0
  95. data/lib/active_record/connection_adapters/postgresql/oid/inet.rb +2 -0
  96. data/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +3 -1
  97. data/lib/active_record/connection_adapters/postgresql/oid/legacy_point.rb +2 -0
  98. data/lib/active_record/connection_adapters/postgresql/oid/money.rb +3 -1
  99. data/lib/active_record/connection_adapters/postgresql/oid/oid.rb +2 -0
  100. data/lib/active_record/connection_adapters/postgresql/oid/point.rb +2 -0
  101. data/lib/active_record/connection_adapters/postgresql/oid/range.rb +3 -5
  102. data/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb +2 -0
  103. data/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +4 -2
  104. data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +3 -1
  105. data/lib/active_record/connection_adapters/postgresql/oid/vector.rb +2 -0
  106. data/lib/active_record/connection_adapters/postgresql/oid/xml.rb +2 -0
  107. data/lib/active_record/connection_adapters/postgresql/quoting.rb +10 -0
  108. data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +19 -25
  109. data/lib/active_record/connection_adapters/postgresql/schema_creation.rb +2 -0
  110. data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +11 -7
  111. data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +20 -13
  112. data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +79 -65
  113. data/lib/active_record/connection_adapters/postgresql/type_metadata.rb +2 -0
  114. data/lib/active_record/connection_adapters/postgresql/utils.rb +2 -0
  115. data/lib/active_record/connection_adapters/postgresql_adapter.rb +47 -82
  116. data/lib/active_record/connection_adapters/schema_cache.rb +2 -0
  117. data/lib/active_record/connection_adapters/sql_type_metadata.rb +2 -0
  118. data/lib/active_record/connection_adapters/sqlite3/explain_pretty_printer.rb +2 -0
  119. data/lib/active_record/connection_adapters/sqlite3/quoting.rb +19 -2
  120. data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +2 -0
  121. data/lib/active_record/connection_adapters/sqlite3/schema_definitions.rb +6 -15
  122. data/lib/active_record/connection_adapters/sqlite3/schema_dumper.rb +3 -2
  123. data/lib/active_record/connection_adapters/sqlite3/schema_statements.rb +71 -1
  124. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +34 -89
  125. data/lib/active_record/connection_adapters/statement_pool.rb +2 -0
  126. data/lib/active_record/connection_handling.rb +4 -2
  127. data/lib/active_record/core.rb +27 -57
  128. data/lib/active_record/counter_cache.rb +15 -12
  129. data/lib/active_record/define_callbacks.rb +5 -3
  130. data/lib/active_record/dynamic_matchers.rb +9 -9
  131. data/lib/active_record/enum.rb +15 -13
  132. data/lib/active_record/errors.rb +54 -21
  133. data/lib/active_record/explain.rb +3 -1
  134. data/lib/active_record/explain_registry.rb +2 -0
  135. data/lib/active_record/explain_subscriber.rb +2 -0
  136. data/lib/active_record/fixture_set/file.rb +2 -0
  137. data/lib/active_record/fixtures.rb +40 -24
  138. data/lib/active_record/gem_version.rb +5 -3
  139. data/lib/active_record/inheritance.rb +6 -5
  140. data/lib/active_record/integration.rb +58 -19
  141. data/lib/active_record/internal_metadata.rb +2 -0
  142. data/lib/active_record/legacy_yaml_adapter.rb +3 -1
  143. data/lib/active_record/locking/optimistic.rb +31 -20
  144. data/lib/active_record/locking/pessimistic.rb +10 -7
  145. data/lib/active_record/log_subscriber.rb +2 -0
  146. data/lib/active_record/migration.rb +47 -21
  147. data/lib/active_record/migration/command_recorder.rb +11 -9
  148. data/lib/active_record/migration/compatibility.rb +20 -2
  149. data/lib/active_record/migration/join_table.rb +2 -0
  150. data/lib/active_record/model_schema.rb +29 -38
  151. data/lib/active_record/nested_attributes.rb +18 -6
  152. data/lib/active_record/no_touching.rb +3 -1
  153. data/lib/active_record/null_relation.rb +2 -0
  154. data/lib/active_record/persistence.rb +184 -40
  155. data/lib/active_record/query_cache.rb +17 -12
  156. data/lib/active_record/querying.rb +3 -1
  157. data/lib/active_record/railtie.rb +54 -1
  158. data/lib/active_record/railties/console_sandbox.rb +2 -0
  159. data/lib/active_record/railties/controller_runtime.rb +2 -0
  160. data/lib/active_record/railties/databases.rake +41 -28
  161. data/lib/active_record/readonly_attributes.rb +3 -2
  162. data/lib/active_record/reflection.rb +100 -182
  163. data/lib/active_record/relation.rb +61 -193
  164. data/lib/active_record/relation/batches.rb +20 -5
  165. data/lib/active_record/relation/batches/batch_enumerator.rb +2 -0
  166. data/lib/active_record/relation/calculations.rb +40 -23
  167. data/lib/active_record/relation/delegation.rb +10 -27
  168. data/lib/active_record/relation/finder_methods.rb +53 -49
  169. data/lib/active_record/relation/from_clause.rb +2 -8
  170. data/lib/active_record/relation/merger.rb +22 -19
  171. data/lib/active_record/relation/predicate_builder.rb +42 -79
  172. data/lib/active_record/relation/predicate_builder/array_handler.rb +10 -7
  173. data/lib/active_record/relation/predicate_builder/association_query_value.rb +46 -0
  174. data/lib/active_record/relation/predicate_builder/base_handler.rb +2 -2
  175. data/lib/active_record/relation/predicate_builder/basic_object_handler.rb +12 -1
  176. data/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb +54 -0
  177. data/lib/active_record/relation/predicate_builder/range_handler.rb +22 -6
  178. data/lib/active_record/relation/predicate_builder/relation_handler.rb +6 -0
  179. data/lib/active_record/relation/query_attribute.rb +9 -2
  180. data/lib/active_record/relation/query_methods.rb +80 -69
  181. data/lib/active_record/relation/record_fetch_warning.rb +2 -0
  182. data/lib/active_record/relation/spawn_methods.rb +2 -0
  183. data/lib/active_record/relation/where_clause.rb +50 -67
  184. data/lib/active_record/relation/where_clause_factory.rb +4 -46
  185. data/lib/active_record/result.rb +2 -0
  186. data/lib/active_record/runtime_registry.rb +2 -0
  187. data/lib/active_record/sanitization.rb +15 -9
  188. data/lib/active_record/schema.rb +3 -1
  189. data/lib/active_record/schema_dumper.rb +24 -23
  190. data/lib/active_record/schema_migration.rb +2 -0
  191. data/lib/active_record/scoping.rb +9 -8
  192. data/lib/active_record/scoping/default.rb +6 -7
  193. data/lib/active_record/scoping/named.rb +15 -7
  194. data/lib/active_record/secure_token.rb +2 -0
  195. data/lib/active_record/serialization.rb +2 -0
  196. data/lib/active_record/statement_cache.rb +22 -12
  197. data/lib/active_record/store.rb +2 -0
  198. data/lib/active_record/suppressor.rb +2 -0
  199. data/lib/active_record/table_metadata.rb +3 -1
  200. data/lib/active_record/tasks/database_tasks.rb +23 -12
  201. data/lib/active_record/tasks/mysql_database_tasks.rb +9 -48
  202. data/lib/active_record/tasks/postgresql_database_tasks.rb +10 -2
  203. data/lib/active_record/tasks/sqlite_database_tasks.rb +25 -3
  204. data/lib/active_record/timestamp.rb +5 -12
  205. data/lib/active_record/touch_later.rb +2 -0
  206. data/lib/active_record/transactions.rb +9 -7
  207. data/lib/active_record/translation.rb +2 -0
  208. data/lib/active_record/type.rb +4 -1
  209. data/lib/active_record/type/adapter_specific_registry.rb +2 -0
  210. data/lib/active_record/type/date.rb +2 -0
  211. data/lib/active_record/type/date_time.rb +2 -0
  212. data/lib/active_record/type/decimal_without_scale.rb +2 -0
  213. data/lib/active_record/type/hash_lookup_type_map.rb +2 -0
  214. data/lib/active_record/type/internal/timezone.rb +2 -0
  215. data/lib/active_record/type/json.rb +30 -0
  216. data/lib/active_record/type/serialized.rb +2 -4
  217. data/lib/active_record/type/text.rb +2 -0
  218. data/lib/active_record/type/time.rb +2 -0
  219. data/lib/active_record/type/type_map.rb +2 -0
  220. data/lib/active_record/type/unsigned_integer.rb +2 -0
  221. data/lib/active_record/type_caster.rb +2 -0
  222. data/lib/active_record/type_caster/connection.rb +2 -0
  223. data/lib/active_record/type_caster/map.rb +2 -0
  224. data/lib/active_record/validations.rb +2 -0
  225. data/lib/active_record/validations/absence.rb +2 -0
  226. data/lib/active_record/validations/associated.rb +2 -0
  227. data/lib/active_record/validations/length.rb +2 -0
  228. data/lib/active_record/validations/presence.rb +2 -0
  229. data/lib/active_record/validations/uniqueness.rb +36 -6
  230. data/lib/active_record/version.rb +2 -0
  231. data/lib/rails/generators/active_record.rb +3 -1
  232. data/lib/rails/generators/active_record/application_record/application_record_generator.rb +27 -0
  233. data/lib/rails/generators/active_record/{model/templates/application_record.rb → application_record/templates/application_record.rb.tt} +0 -0
  234. data/lib/rails/generators/active_record/migration.rb +2 -0
  235. data/lib/rails/generators/active_record/migration/migration_generator.rb +3 -1
  236. data/lib/rails/generators/active_record/migration/templates/{create_table_migration.rb → create_table_migration.rb.tt} +0 -0
  237. data/lib/rails/generators/active_record/migration/templates/{migration.rb → migration.rb.tt} +0 -0
  238. data/lib/rails/generators/active_record/model/model_generator.rb +2 -23
  239. data/lib/rails/generators/active_record/model/templates/{model.rb → model.rb.tt} +0 -0
  240. data/lib/rails/generators/active_record/model/templates/{module.rb → module.rb.tt} +0 -0
  241. metadata +25 -38
  242. data/lib/active_record/associations/preloader/belongs_to.rb +0 -15
  243. data/lib/active_record/associations/preloader/collection_association.rb +0 -17
  244. data/lib/active_record/associations/preloader/has_many.rb +0 -15
  245. data/lib/active_record/associations/preloader/has_many_through.rb +0 -19
  246. data/lib/active_record/associations/preloader/has_one.rb +0 -15
  247. data/lib/active_record/associations/preloader/has_one_through.rb +0 -9
  248. data/lib/active_record/associations/preloader/singular_association.rb +0 -18
  249. data/lib/active_record/attribute.rb +0 -240
  250. data/lib/active_record/attribute/user_provided_default.rb +0 -30
  251. data/lib/active_record/attribute_mutation_tracker.rb +0 -122
  252. data/lib/active_record/attribute_set.rb +0 -113
  253. data/lib/active_record/attribute_set/builder.rb +0 -126
  254. data/lib/active_record/attribute_set/yaml_encoder.rb +0 -41
  255. data/lib/active_record/connection_adapters/postgresql/oid/json.rb +0 -10
  256. data/lib/active_record/railties/jdbcmysql_error.rb +0 -16
  257. data/lib/active_record/relation/predicate_builder/association_query_handler.rb +0 -88
  258. data/lib/active_record/relation/predicate_builder/polymorphic_array_handler.rb +0 -59
  259. data/lib/active_record/type/internal/abstract_json.rb +0 -37
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: 3761a48d6ad944f4726d6f454c7410ce0fbf30be0dc352eabf0e91bf8dea9944
4
- data.tar.gz: 392232a9587e31dd74e1718943feb82f28473f64cb6fe6787fa9f9a164c582c8
2
+ SHA1:
3
+ metadata.gz: 22e4facf2e4a7bd6eccc5391172793dca1bb3f20
4
+ data.tar.gz: 210b454b0fec7a44ce0151d2dba267d67717606c
5
5
  SHA512:
6
- metadata.gz: 4218769b0900a3b0a259ae85ab829eab4b3fad9801d3090d3ab5eca256e090a9c5b27d425d209ed38fda281308597aae4be88d0e15fc08e2eed1bedb80ae1639
7
- data.tar.gz: 942951a6f2905cab9ee82620438e8c627bff5185f7769f4f384b049e580f39d549763c0052f6c3b7c71ee66a8f6bc7bdf9767e7108bc7267383f5b3dccd18157
6
+ metadata.gz: cdd715e815eeaaed9d749e60f073acdcb56e04ce607f09c8f9540e0fa84ef3d565d7ebb852e73e96c7aa27ab5d3bbca023619786e88a147be7e029279a09fe5b
7
+ data.tar.gz: 820e3a53b3e00b51ef2f141f6db8d952ab02348890507a80791aeeb70e0c440c38ff1d608ca1289dbec9d56a2b8d0bb3d5534f9a110d0c8b27b631d140c338ad
@@ -1,190 +1,122 @@
1
- ## Rails 5.1.7 (March 27, 2019) ##
1
+ ## Rails 5.2.0.beta1 (November 27, 2017) ##
2
2
 
3
- * Fix `touch` option to behave consistently with `Persistence#touch` method.
3
+ * Add new error class `QueryCanceled` which will be raised
4
+ when canceling statement due to user request.
4
5
 
5
6
  *Ryuta Kamizono*
6
7
 
7
- * Back port Rails 5.2 `reverse_order` Arel SQL literal fix.
8
+ * Add `#up_only` to database migrations for code that is only relevant when
9
+ migrating up, e.g. populating a new column.
8
10
 
9
- *Matt Jones*, *Brooke Kuhlmann*
11
+ *Rich Daley*
10
12
 
11
- * `becomes` should clear the mutation tracker which is created in `after_initialize`.
12
-
13
- Fixes #32867.
14
-
15
- *Ryuta Kamizono*
16
-
17
-
18
- ## Rails 5.1.6.2 (March 11, 2019) ##
19
-
20
- * No changes.
21
-
22
-
23
- ## Rails 5.1.6.1 (November 27, 2018) ##
24
-
25
- * No changes.
13
+ * Require raw SQL fragments to be explicitly marked when used in
14
+ relation query methods.
26
15
 
16
+ Before:
17
+ ```
18
+ Article.order("LENGTH(title)")
19
+ ```
27
20
 
28
- ## Rails 5.1.6 (March 29, 2018) ##
21
+ After:
22
+ ```
23
+ Article.order(Arel.sql("LENGTH(title)"))
24
+ ```
29
25
 
30
- * MySQL: Support mysql2 0.5.x.
26
+ This prevents SQL injection if applications use the [strongly
27
+ discouraged] form `Article.order(params[:my_order])`, under the
28
+ mistaken belief that only column names will be accepted.
31
29
 
32
- *Aaron Stone*
30
+ Raw SQL strings will now cause a deprecation warning, which will
31
+ become an UnknownAttributeReference error in Rails 6.0. Applications
32
+ can opt in to the future behavior by setting `allow_unsafe_raw_sql`
33
+ to `:disabled`.
33
34
 
34
- * Apply time column precision on assignment.
35
+ Common and judged-safe string values (such as simple column
36
+ references) are unaffected:
37
+ ```
38
+ Article.order("title DESC")
39
+ ```
35
40
 
36
- PR #20317 changed the behavior of datetime columns so that when they
37
- have a specified precision then on assignment the value is rounded to
38
- that precision. This behavior is now applied to time columns as well.
41
+ *Ben Toews*
39
42
 
40
- Fixes #30301.
43
+ * `update_all` will now pass its values to `Type#cast` before passing them to
44
+ `Type#serialize`. This means that `update_all(foo: 'true')` will properly
45
+ persist a boolean.
41
46
 
42
- *Andrew White*
47
+ *Sean Griffin*
43
48
 
44
- * Normalize time column values for SQLite database.
49
+ * Add new error class `StatementTimeout` which will be raised
50
+ when statement timeout exceeded.
45
51
 
46
- For legacy reasons, time columns in SQLite are stored as full datetimes
47
- because until #24542 the quoting for time columns didn't remove the date
48
- component. To ensure that values are consistent we now normalize the
49
- date component to 2001-01-01 on reading and writing.
52
+ *Ryuta Kamizono*
50
53
 
51
- *Andrew White*
54
+ * Fix `bin/rails db:migrate` with specified `VERSION`.
55
+ `bin/rails db:migrate` with empty VERSION behaves as without `VERSION`.
56
+ Check a format of `VERSION`: Allow a migration version number
57
+ or name of a migration file. Raise error if format of `VERSION` is invalid.
58
+ Raise error if target migration doesn't exist.
52
59
 
53
- * Ensure that the date component is removed when quoting times.
60
+ *bogdanvlviv*
54
61
 
55
- PR #24542 altered the quoting for time columns so that the date component
56
- was removed however it only removed it when it was 2001-01-01. Now the
57
- date component is removed irrespective of what the date is.
62
+ * Fixed a bug where column orders for an index weren't written to
63
+ db/schema.rb when using the sqlite adapter.
58
64
 
59
- *Andrew White*
65
+ Fixes #30902.
60
66
 
61
- * Fix that after commit callbacks on update does not triggered when optimistic locking is enabled.
67
+ *Paul Kuruvilla*
62
68
 
63
- *Ryuta Kamizono*
69
+ * Remove deprecated method `#sanitize_conditions`.
64
70
 
65
- * `ActiveRecord::Persistence#touch` does not work well when optimistic locking enabled and
66
- `locking_column`, without default value, is null in the database.
71
+ *Rafael Mendonça França*
67
72
 
68
- *bogdanvlviv*
73
+ * Remove deprecated method `#scope_chain`.
69
74
 
70
- * Fix destroying existing object does not work well when optimistic locking enabled and
71
- `locking column` is null in the database.
75
+ *Rafael Mendonça França*
72
76
 
73
- *bogdanvlviv*
77
+ * Remove deprecated configuration `.error_on_ignored_order_or_limit`.
74
78
 
79
+ *Rafael Mendonça França*
75
80
 
76
- ## Rails 5.1.5 (February 14, 2018) ##
81
+ * Remove deprecated arguments from `#verify!`.
77
82
 
78
- * PostgreSQL: Allow pg-1.0 gem to be used with Active Record.
83
+ *Rafael Mendonça França*
79
84
 
80
- *Lars Kanis*
85
+ * Remove deprecated argument `name` from `#indexes`.
81
86
 
82
- * Fix `count(:all)` with eager loading and having an order other than the driving table.
87
+ *Rafael Mendonça França*
83
88
 
84
- Fixes #31783.
89
+ * Remove deprecated method `ActiveRecord::Migrator.schema_migrations_table_name`.
85
90
 
86
- *Ryuta Kamizono*
91
+ *Rafael Mendonça França*
87
92
 
88
- * Use `count(:all)` in `HasManyAssociation#count_records` to prevent invalid
89
- SQL queries for association counting.
93
+ * Remove deprecated method `supports_primary_key?`.
90
94
 
91
- *Klas Eskilson*
95
+ *Rafael Mendonça França*
92
96
 
93
- * Fix to invoke callbacks when using `update_attribute`.
97
+ * Remove deprecated method `supports_migrations?`.
94
98
 
95
- *Mike Busch*
99
+ *Rafael Mendonça França*
96
100
 
97
- * Fix `count(:all)` to correctly work `distinct` with custom SELECT list.
101
+ * Remove deprecated methods `initialize_schema_migrations_table` and `initialize_internal_metadata_table`.
98
102
 
99
- *Ryuta Kamizono*
103
+ *Rafael Mendonça França*
100
104
 
101
- * Fix conflicts `counter_cache` with `touch: true` by optimistic locking.
105
+ * Raises when calling `lock!` in a dirty record.
102
106
 
103
- ```
104
- # create_table :posts do |t|
105
- # t.integer :comments_count, default: 0
106
- # t.integer :lock_version
107
- # t.timestamps
108
- # end
109
- class Post < ApplicationRecord
110
- end
111
-
112
- # create_table :comments do |t|
113
- # t.belongs_to :post
114
- # end
115
- class Comment < ApplicationRecord
116
- belongs_to :post, touch: true, counter_cache: true
117
- end
118
- ```
107
+ *Rafael Mendonça França*
119
108
 
120
- Before:
121
- ```
122
- post = Post.create!
123
- # => begin transaction
124
- INSERT INTO "posts" ("created_at", "updated_at", "lock_version")
125
- VALUES ("2017-12-11 21:27:11.387397", "2017-12-11 21:27:11.387397", 0)
126
- commit transaction
127
-
128
- comment = Comment.create!(post: post)
129
- # => begin transaction
130
- INSERT INTO "comments" ("post_id") VALUES (1)
131
-
132
- UPDATE "posts" SET "comments_count" = COALESCE("comments_count", 0) + 1,
133
- "lock_version" = COALESCE("lock_version", 0) + 1 WHERE "posts"."id" = 1
134
-
135
- UPDATE "posts" SET "updated_at" = '2017-12-11 21:27:11.398330',
136
- "lock_version" = 1 WHERE "posts"."id" = 1 AND "posts"."lock_version" = 0
137
- rollback transaction
138
- # => ActiveRecord::StaleObjectError: Attempted to touch a stale object: Post.
139
-
140
- Comment.take.destroy!
141
- # => begin transaction
142
- DELETE FROM "comments" WHERE "comments"."id" = 1
143
-
144
- UPDATE "posts" SET "comments_count" = COALESCE("comments_count", 0) - 1,
145
- "lock_version" = COALESCE("lock_version", 0) + 1 WHERE "posts"."id" = 1
146
-
147
- UPDATE "posts" SET "updated_at" = '2017-12-11 21:42:47.785901',
148
- "lock_version" = 1 WHERE "posts"."id" = 1 AND "posts"."lock_version" = 0
149
- rollback transaction
150
- # => ActiveRecord::StaleObjectError: Attempted to touch a stale object: Post.
151
- ```
109
+ * Remove deprecated support to passing a class to `:class_name` on associations.
152
110
 
153
- After:
154
- ```
155
- post = Post.create!
156
- # => begin transaction
157
- INSERT INTO "posts" ("created_at", "updated_at", "lock_version")
158
- VALUES ("2017-12-11 21:27:11.387397", "2017-12-11 21:27:11.387397", 0)
159
- commit transaction
160
-
161
- comment = Comment.create!(post: post)
162
- # => begin transaction
163
- INSERT INTO "comments" ("post_id") VALUES (1)
164
-
165
- UPDATE "posts" SET "comments_count" = COALESCE("comments_count", 0) + 1,
166
- "lock_version" = COALESCE("lock_version", 0) + 1,
167
- "updated_at" = '2017-12-11 21:37:09.802642' WHERE "posts"."id" = 1
168
- commit transaction
169
-
170
- comment.destroy!
171
- # => begin transaction
172
- DELETE FROM "comments" WHERE "comments"."id" = 1
173
-
174
- UPDATE "posts" SET "comments_count" = COALESCE("comments_count", 0) - 1,
175
- "lock_version" = COALESCE("lock_version", 0) + 1,
176
- "updated_at" = '2017-12-11 21:39:02.685520' WHERE "posts"."id" = 1
177
- commit transaction
178
- ```
111
+ *Rafael Mendonça França*
179
112
 
180
- Fixes #31199.
113
+ * Remove deprecated argument `default` from `index_name_exists?`.
181
114
 
182
- *bogdanvlviv*
115
+ *Rafael Mendonça França*
183
116
 
184
- * Query cache was unavailable when entering the `ActiveRecord::Base.cache` block
185
- without being connected.
117
+ * Remove deprecated support to `quoted_id` when typecasting an Active Record object.
186
118
 
187
- *Tsukasa Oishi*
119
+ *Rafael Mendonça França*
188
120
 
189
121
  * Fix `bin/rails db:setup` and `bin/rails db:test:prepare` create wrong
190
122
  ar_internal_metadata's data for a test database.
@@ -227,890 +159,279 @@
227
159
 
228
160
  *Ryuta Kamizono*
229
161
 
162
+ * PostgreSQL `tsrange` now preserves subsecond precision.
230
163
 
231
- ## Rails 5.1.4 (September 07, 2017) ##
232
-
233
- * No changes.
164
+ PostgreSQL 9.1+ introduced range types, and Rails added support for using
165
+ this datatype in Active Record. However, the serialization of
166
+ `PostgreSQL::OID::Range` was incomplete, because it did not properly
167
+ cast the bounds that make up the range. This led to subseconds being
168
+ dropped in SQL commands:
234
169
 
170
+ Before:
235
171
 
236
- ## Rails 5.1.4.rc1 (August 24, 2017) ##
237
-
238
- * Ensure `sum` honors `distinct` on `has_many :through` associations
239
-
240
- Fixes #16791
241
-
242
- *Aaron Wortham
243
-
244
- * Fix `COUNT(DISTINCT ...)` with `ORDER BY` and `LIMIT` to keep the existing select list.
245
-
246
- *Ryuta Kamizono*
247
-
248
- * Fix `unscoped(where: [columns])` removing the wrong bind values
249
-
250
- When the `where` is called on a relation after a `or`, unscoping the column of that later `where`, it removed
251
- bind values used by the `or` instead.
252
-
253
- ```
254
- Post.where(id: 1).or(Post.where(id: 2)).where(foo: 3).unscope(where: :foo).to_sql
255
- # Currently:
256
- # SELECT "posts".* FROM "posts" WHERE ("posts"."id" = 2 OR "posts"."id" = 3)
257
- # With fix:
258
- # SELECT "posts".* FROM "posts" WHERE ("posts"."id" = 1 OR "posts"."id" = 2)
259
- ```
260
-
261
- *Maxime Handfield Lapointe*
262
-
263
- * When a `has_one` association is destroyed by `dependent: destroy`,
264
- `destroyed_by_association` will now be set to the reflection, matching the
265
- behaviour of `has_many` associations.
266
-
267
- *Lisa Ugray*
268
-
269
-
270
- ## Rails 5.1.3 (August 03, 2017) ##
271
-
272
- * No changes.
273
-
274
-
275
- ## Rails 5.1.3.rc3 (July 31, 2017) ##
276
-
277
- * No changes.
278
-
279
-
280
- ## Rails 5.1.3.rc2 (July 25, 2017) ##
281
-
282
- * No changes.
172
+ connection.type_cast(tsrange.serialize(range_value))
173
+ # => "[2010-01-01 13:30:00 UTC,2011-02-02 19:30:00 UTC)"
283
174
 
175
+ Now:
284
176
 
285
- ## Rails 5.1.3.rc1 (July 19, 2017) ##
177
+ connection.type_cast(tsrange.serialize(range_value))
178
+ # => "[2010-01-01 13:30:00.670277,2011-02-02 19:30:00.745125)"
286
179
 
287
- * `Relation#joins` is no longer affected by the target model's
288
- `current_scope`, with the exception of `unscoped`.
180
+ *Thomas Cannon*
289
181
 
290
- Fixes #29338.
182
+ * Passing a `Set` to `Relation#where` now behaves the same as passing an
183
+ array.
291
184
 
292
185
  *Sean Griffin*
293
186
 
294
- * Previously, when building records using a `has_many :through` association,
295
- if the child records were deleted before the parent was saved, they would
296
- still be persisted. Now, if child records are deleted before the parent is saved
297
- on a `has_many :through` association, the child records will not be persisted.
298
-
299
- *Tobias Kraze*
300
-
301
-
302
- ## Rails 5.1.2 (June 26, 2017) ##
303
-
304
- * Restore previous behavior of collection proxies: their values can have
305
- methods stubbed, and they respect extension modules applied by a default
306
- scope.
307
-
308
- *Ryuta Kamizono*
309
-
310
- * Loading model schema from database is now thread-safe.
311
-
312
- Fixes #28589.
313
-
314
- *Vikrant Chaudhary*, *David Abdemoulaie*
315
-
316
-
317
- ## Rails 5.1.1 (May 12, 2017) ##
187
+ * Use given algorithm while removing index from database.
318
188
 
319
- * Add type caster to `RuntimeReflection#alias_name`
320
-
321
- Fixes #28959.
322
-
323
- *Jon Moss*
324
-
325
-
326
- ## Rails 5.1.0 (April 27, 2017) ##
327
-
328
- * Quote database name in db:create grant statement (when database_user does not have access to create the database).
329
-
330
- *Rune Philosof*
331
-
332
- * When multiple threads are sharing a database connection inside a test using
333
- transactional fixtures, a nested transaction will temporarily lock the
334
- connection to the current thread, forcing others to wait.
335
-
336
- Fixes #28197.
337
-
338
- *Matthew Draper*
339
-
340
- * Load only needed records on `ActiveRecord::Relation#inspect`.
341
-
342
- Instead of loading all records and returning only a subset of those, just
343
- load the records as needed.
344
-
345
- Fixes #25537.
346
-
347
- *Hendy Tanata*
348
-
349
- * Remove comments from structure.sql when using postgresql adapter to avoid
350
- version-specific parts of the file.
351
-
352
- Fixes #28153.
353
-
354
- *Ari Pollak*
355
-
356
- * Add `:default` option to `belongs_to`.
357
-
358
- Use it to specify that an association should be initialized with a particular
359
- record before validation. For example:
360
-
361
- # Before
362
- belongs_to :account
363
- before_validation -> { self.account ||= Current.account }
364
-
365
- # After
366
- belongs_to :account, default: -> { Current.account }
367
-
368
- *George Claghorn*
369
-
370
- * Deprecate `Migrator.schema_migrations_table_name`.
371
-
372
- *Ryuta Kamizono*
373
-
374
- * Fix select with block doesn't return newly built records in has_many association.
375
-
376
- Fixes #28348.
189
+ Fixes #24190.
377
190
 
378
- *Ryuta Kamizono*
191
+ *Mehmet Emin İNAÇ*
379
192
 
380
- * Check whether `Rails.application` defined before calling it
193
+ * Update payload names for `sql.active_record` instrumentation to be
194
+ more descriptive.
381
195
 
382
- In #27674 we changed the migration generator to generate migrations at the
383
- path defined in `Rails.application.config.paths` however the code checked
384
- for the presence of the `Rails` constant but not the `Rails.application`
385
- method which caused problems when using Active Record and generators outside
386
- of the context of a Rails application.
196
+ Fixes #30586.
387
197
 
388
- Fixes #28325.
198
+ *Jeremy Green*
389
199
 
390
- *Andrew White*
200
+ * Add new error class `LockWaitTimeout` which will be raised
201
+ when lock wait timeout exceeded.
391
202
 
392
- * Fix `deserialize` with JSON array.
203
+ *Gabriel Courtemanche*
393
204
 
394
- Fixes #28285.
205
+ * Remove deprecated `#migration_keys`.
395
206
 
396
207
  *Ryuta Kamizono*
397
208
 
398
- * Fix `rake db:schema:load` with subdirectories.
399
-
400
- *Ryuta Kamizono*
209
+ * Automatically guess the inverse associations for STI.
401
210
 
402
- * Fix `rake db:migrate:status` with subdirectories.
211
+ *Yuichiro Kaneko*
403
212
 
404
- *Ryuta Kamizono*
405
-
406
- * Don't share options between reference id and type columns
213
+ * Ensure `sum` honors `distinct` on `has_many :through` associations
407
214
 
408
- When using a polymorphic reference column in a migration, sharing options
409
- between the two columns doesn't make sense since they are different types.
410
- The `reference_id` column is usually an integer and the `reference_type`
411
- column a string so options like `unsigned: true` will result in an invalid
412
- table definition.
215
+ Fixes #16791.
413
216
 
414
- *Ryuta Kamizono*
217
+ *Aaron Wortham*
415
218
 
416
- * Use `max_identifier_length` for `index_name_length` in PostgreSQL adapter.
219
+ * Add `binary` fixture helper method.
417
220
 
418
- *Ryuta Kamizono*
221
+ *Atsushi Yoshida*
419
222
 
420
- * Deprecate `supports_migrations?` on connection adapters.
223
+ * When using `Relation#or`, extract the common conditions and put them before the OR condition.
421
224
 
422
- *Ryuta Kamizono*
225
+ *Maxime Handfield Lapointe*
423
226
 
424
- * Fix regression of #1969 with SELECT aliases in HAVING clause.
227
+ * `Relation#or` now accepts two relations who have different values for
228
+ `references` only, as `references` can be implicitly called by `where`.
425
229
 
426
- *Eugene Kenny*
230
+ Fixes #29411.
427
231
 
428
- * Deprecate using `#quoted_id` in quoting.
232
+ *Sean Griffin*
429
233
 
430
- *Ryuta Kamizono*
234
+ * `ApplicationRecord` is no longer generated when generating models. If you
235
+ need to generate it, it can be created with `rails g application_record`.
431
236
 
432
- * Fix `wait_timeout` to configurable for mysql2 adapter.
237
+ *Lisa Ugray*
433
238
 
434
- Fixes #26556.
239
+ * Fix `COUNT(DISTINCT ...)` with `ORDER BY` and `LIMIT` to keep the existing select list.
435
240
 
436
241
  *Ryuta Kamizono*
437
242
 
438
- * Correctly dump native timestamp types for MySQL.
439
-
440
- The native timestamp type in MySQL is different from datetime type.
441
- Internal representation of the timestamp type is UNIX time, This means
442
- that timestamp columns are affected by time zone.
443
-
444
- > SET time_zone = '+00:00';
445
- Query OK, 0 rows affected (0.00 sec)
446
-
447
- > INSERT INTO time_with_zone(ts,dt) VALUES (NOW(),NOW());
448
- Query OK, 1 row affected (0.02 sec)
449
-
450
- > SELECT * FROM time_with_zone;
451
- +---------------------+---------------------+
452
- | ts | dt |
453
- +---------------------+---------------------+
454
- | 2016-02-07 22:11:44 | 2016-02-07 22:11:44 |
455
- +---------------------+---------------------+
456
- 1 row in set (0.00 sec)
457
-
458
- > SET time_zone = '-08:00';
459
- Query OK, 0 rows affected (0.00 sec)
460
-
461
- > SELECT * FROM time_with_zone;
462
- +---------------------+---------------------+
463
- | ts | dt |
464
- +---------------------+---------------------+
465
- | 2016-02-07 14:11:44 | 2016-02-07 22:11:44 |
466
- +---------------------+---------------------+
467
- 1 row in set (0.00 sec)
468
-
469
- *Ryuta Kamizono*
243
+ * When a `has_one` association is destroyed by `dependent: destroy`,
244
+ `destroyed_by_association` will now be set to the reflection, matching the
245
+ behaviour of `has_many` associations.
470
246
 
471
- * All integer-like PKs are autoincrement unless they have an explicit default.
247
+ *Lisa Ugray*
472
248
 
473
- *Matthew Draper*
249
+ * Fix `unscoped(where: [columns])` removing the wrong bind values
474
250
 
475
- * Omit redundant `using: :btree` for schema dumping.
251
+ When the `where` is called on a relation after a `or`, unscoping the column of that later `where` removed
252
+ bind values used by the `or` instead. (possibly other cases too)
476
253
 
477
- *Ryuta Kamizono*
254
+ ```
255
+ Post.where(id: 1).or(Post.where(id: 2)).where(foo: 3).unscope(where: :foo).to_sql
256
+ # Currently:
257
+ # SELECT "posts".* FROM "posts" WHERE ("posts"."id" = 2 OR "posts"."id" = 3)
258
+ # With fix:
259
+ # SELECT "posts".* FROM "posts" WHERE ("posts"."id" = 1 OR "posts"."id" = 2)
260
+ ```
478
261
 
479
- * Deprecate passing `default` to `index_name_exists?`.
262
+ *Maxime Handfield Lapointe*
480
263
 
481
- *Ryuta Kamizono*
264
+ * Values constructed using multi-parameter assignment will now use the
265
+ post-type-cast value for rendering in single-field form inputs.
482
266
 
483
- * PostgreSQL: schema dumping support for interval and OID columns.
267
+ *Sean Griffin*
484
268
 
485
- *Ryuta Kamizono*
269
+ * `Relation#joins` is no longer affected by the target model's
270
+ `current_scope`, with the exception of `unscoped`.
486
271
 
487
- * Deprecate `supports_primary_key?` on connection adapters since it's
488
- been long unused and unsupported.
272
+ Fixes #29338.
489
273
 
490
- *Ryuta Kamizono*
274
+ *Sean Griffin*
491
275
 
492
- * Make `table_name=` reset current statement cache,
493
- so queries are not run against the previous table name.
276
+ * Change sqlite3 boolean serialization to use 1 and 0
494
277
 
495
- *namusyaka*
278
+ SQLite natively recognizes 1 and 0 as true and false, but does not natively
279
+ recognize 't' and 'f' as was previously serialized.
496
280
 
497
- * Allow `ActiveRecord::Base#as_json` to be passed a frozen Hash.
281
+ This change in serialization requires a migration of stored boolean data
282
+ for SQLite databases, so it's implemented behind a configuration flag
283
+ whose default false value is deprecated.
498
284
 
499
- *Isaac Betesh*
285
+ *Lisa Ugray*
500
286
 
501
- * Fix inspection behavior when the :id column is not primary key.
287
+ * Skip query caching when working with batches of records (`find_each`, `find_in_batches`,
288
+ `in_batches`).
502
289
 
503
- *namusyaka*
290
+ Previously, records would be fetched in batches, but all records would be retained in memory
291
+ until the end of the request or job.
504
292
 
505
- * Deprecate locking records with unpersisted changes.
293
+ *Eugene Kenny*
506
294
 
507
- *Marc Schütz*
295
+ * Prevent errors raised by `sql.active_record` notification subscribers from being converted into
296
+ `ActiveRecord::StatementInvalid` exceptions.
508
297
 
509
- * Remove deprecated behavior that halts callbacks when the return is false.
298
+ *Dennis Taylor*
510
299
 
511
- *Rafael Mendonça França*
300
+ * Fix eager loading/preloading association with scope including joins.
512
301
 
513
- * Deprecate `ColumnDumper#migration_keys`.
302
+ Fixes #28324.
514
303
 
515
304
  *Ryuta Kamizono*
516
305
 
517
- * Fix `association_primary_key_type` for reflections with symbol primary key.
518
-
519
- Fixes #27864.
520
-
521
- *Daniel Colson*
522
-
523
- * Virtual/generated column support for MySQL 5.7.5+ and MariaDB 5.2.0+.
524
-
525
- MySQL generated columns: https://dev.mysql.com/doc/refman/5.7/en/create-table-generated-columns.html
526
- MariaDB virtual columns: https://mariadb.com/kb/en/mariadb/virtual-computed-columns/
527
-
528
- Declare virtual columns with `t.virtual name, type: …, as: "expression"`.
529
- Pass `stored: true` to persist the generated value (false by default).
530
-
531
- Example:
532
-
533
- create_table :generated_columns do |t|
534
- t.string :name
535
- t.virtual :upper_name, type: :string, as: "UPPER(name)"
536
- t.virtual :name_length, type: :integer, as: "LENGTH(name)", stored: true
537
- t.index :name_length # May be indexed, too!
538
- end
306
+ * Fix transactions to apply state to child transactions
539
307
 
540
- *Ryuta Kamizono*
541
-
542
- * Deprecate `initialize_schema_migrations_table` and `initialize_internal_metadata_table`.
308
+ Previously, if you had a nested transaction and the outer transaction was rolledback, the record from the
309
+ inner transaction would still be marked as persisted.
543
310
 
544
- *Ryuta Kamizono*
311
+ This change fixes that by applying the state of the parent transaction to the child transaction when the
312
+ parent transaction is rolledback. This will correctly mark records from the inner transaction as not persisted.
545
313
 
546
- * Support foreign key creation for SQLite3.
314
+ *Eileen M. Uchitelle*, *Aaron Patterson*
547
315
 
548
- *Ryuta Kamizono*
316
+ * Deprecate `set_state` method in `TransactionState`
549
317
 
550
- * Place generated migrations into the path set by `config.paths["db/migrate"]`.
318
+ Deprecated the `set_state` method in favor of setting the state via specific methods. If you need to mark the
319
+ state of the transaction you can now use `rollback!`, `commit!` or `nullify!` instead of
320
+ `set_state(:rolledback)`, `set_state(:committed)`, or `set_state(nil)`.
551
321
 
552
- *Kevin Glowacz*
322
+ *Eileen M. Uchitelle*, *Aaron Patterson*
553
323
 
554
- * Raise `ActiveRecord::InvalidForeignKey` when a foreign key constraint fails on SQLite3.
324
+ * Deprecate delegating to `arel` in `Relation`.
555
325
 
556
326
  *Ryuta Kamizono*
557
327
 
558
- * Add the touch option to `#increment!` and `#decrement!`.
559
-
560
- *Hiroaki Izu*
561
-
562
- * Deprecate passing a class to the `class_name` because it eagerloads more classes than
563
- necessary and potentially creates circular dependencies.
564
-
565
- *Kir Shatrov*
566
-
567
- * Raise error when has_many through is defined before through association.
568
-
569
- Fixes #26834.
570
-
571
- *Chris Holmes*
572
-
573
- * Deprecate passing `name` to `indexes`.
328
+ * Fix eager loading to respect `store_full_sti_class` setting.
574
329
 
575
330
  *Ryuta Kamizono*
576
331
 
577
- * Remove deprecated tasks: `db:test:clone`, `db:test:clone_schema`, `db:test:clone_structure`.
578
-
579
- *Rafel Mendonça França*
580
-
581
- * Compare deserialized values for `PostgreSQL::OID::Hstore` types when
582
- calling `ActiveRecord::Dirty#changed_in_place?`.
583
-
584
- Fixes #27502.
585
-
586
- *Jon Moss*
587
-
588
- * Raise `ArgumentError` when passing an `ActiveRecord::Base` instance to `.find`,
589
- `.exists?` and `.update`.
590
-
591
- *Rafael Mendonça França*
592
-
593
- * Respect precision option for arrays of timestamps.
594
-
595
- Fixes #27514.
596
-
597
- *Sean Griffin*
598
-
599
- * Optimize slow model instantiation when using STI and `store_full_sti_class = false` option.
600
-
601
- *Konstantin Lazarev*
602
-
603
- * Add `touch` option to counter cache modifying methods.
604
-
605
- Works when updating, resetting, incrementing and decrementing counters:
606
-
607
- # Touches `updated_at`/`updated_on`.
608
- Topic.increment_counter(:messages_count, 1, touch: true)
609
- Topic.decrement_counter(:messages_count, 1, touch: true)
610
-
611
- # Touches `last_discussed_at`.
612
- Topic.reset_counters(18, :messages, touch: :last_discussed_at)
613
-
614
- # Touches `updated_at` and `last_discussed_at`.
615
- Topic.update_counters(18, messages_count: 5, touch: %i( updated_at last_discussed_at ))
616
-
617
- Fixes #26724.
618
-
619
- *Jarred Trost*
620
-
621
- * Remove deprecated `#uniq`, `#uniq!`, and `#uniq_value`.
622
-
623
- *Ryuta Kamizono*
624
-
625
- * Remove deprecated `#insert_sql`, `#update_sql`, and `#delete_sql`.
626
-
627
- *Ryuta Kamizono*
628
-
629
- * Remove deprecated `#use_transactional_fixtures` configuration.
630
-
631
- *Rafael Mendonça França*
632
-
633
- * Remove deprecated `#raise_in_transactional_callbacks` configuration.
634
-
635
- *Rafael Mendonça França*
636
-
637
- * Remove deprecated `#load_schema_for`.
638
-
639
- *Rafael Mendonça França*
640
-
641
- * Remove deprecated conditions parameter from `#destroy_all` and `#delete_all`.
642
-
643
- *Rafael Mendonça França*
644
-
645
- * Remove deprecated support to passing arguments to `#select` when a block is provided.
646
-
647
- *Rafael Mendonça França*
648
-
649
- * Remove deprecated support to query using commas on LIMIT.
650
-
651
- *Rafael Mendonça França*
652
-
653
- * Remove deprecated support to passing a class as a value in a query.
654
-
655
- *Rafael Mendonça França*
656
-
657
- * Raise `ActiveRecord::IrreversibleOrderError` when using `last` with an irreversible
658
- order.
659
-
660
- *Rafael Mendonça França*
661
-
662
- * Raise when a `has_many :through` association has an ambiguous reflection name.
663
-
664
- *Rafael Mendonça França*
665
-
666
- * Raise when `ActiveRecord::Migration` is inherited from directly.
667
-
668
- *Rafael Mendonça França*
669
-
670
- * Remove deprecated `original_exception` argument in `ActiveRecord::StatementInvalid#initialize`
671
- and `ActiveRecord::StatementInvalid#original_exception`.
672
-
673
- *Rafael Mendonça França*
674
-
675
- * `#tables` and `#table_exists?` return only tables and not views.
676
-
677
- All the deprecations on those methods were removed.
678
-
679
- *Rafael Mendonça França*
680
-
681
- * Remove deprecated `name` argument from `#tables`.
682
-
683
- *Rafael Mendonça França*
684
-
685
- * Remove deprecated support to passing a column to `#quote`.
686
-
687
- *Rafael Mendonça França*
688
-
689
- * Set `:time` as a timezone aware type and remove deprecation when
690
- `config.active_record.time_zone_aware_types` is not explicitly set.
691
-
692
- *Rafael Mendonça França*
332
+ * Query cache was unavailable when entering the `ActiveRecord::Base.cache` block
333
+ without being connected.
693
334
 
694
- * Remove deprecated force reload argument in singular and collection association readers.
335
+ *Tsukasa Oishi*
695
336
 
696
- *Rafael Mendonça França*
337
+ * Previously, when building records using a `has_many :through` association,
338
+ if the child records were deleted before the parent was saved, they would
339
+ still be persisted. Now, if child records are deleted before the parent is saved
340
+ on a `has_many :through` association, the child records will not be persisted.
697
341
 
698
- * Remove deprecated `activerecord.errors.messages.restrict_dependent_destroy.one` and
699
- `activerecord.errors.messages.restrict_dependent_destroy.many` i18n scopes.
342
+ *Tobias Kraze*
700
343
 
701
- *Rafael Mendonça França*
344
+ * Merging two relations representing nested joins no longer transforms the joins of
345
+ the merged relation into LEFT OUTER JOIN. Example to clarify:
702
346
 
703
- * Allow passing extra flags to `db:structure:load` and `db:structure:dump`
347
+ ```
348
+ Author.joins(:posts).merge(Post.joins(:comments))
349
+ # Before the change:
350
+ #=> SELECT ... FROM authors INNER JOIN posts ON ... LEFT OUTER JOIN comments ON...
704
351
 
705
- Introduces `ActiveRecord::Tasks::DatabaseTasks.structure_(load|dump)_flags` to customize the
706
- eventual commands run against the database, e.g. mysqldump/pg_dump.
352
+ # After the change:
353
+ #=> SELECT ... FROM authors INNER JOIN posts ON ... INNER JOIN comments ON...
354
+ ```
707
355
 
708
- *Kir Shatrov*
356
+ TODO: Add to the Rails 5.2 upgrade guide
709
357
 
710
- * Notifications see frozen SQL string.
358
+ *Maxime Handfield Lapointe*
711
359
 
712
- Fixes #23774.
360
+ * `ActiveRecord::Persistence#touch` does not work well when optimistic locking enabled and
361
+ `locking_column`, without default value, is null in the database.
713
362
 
714
- *Richard Monette*
363
+ *bogdanvlviv*
715
364
 
716
- * RuntimeErrors are no longer translated to `ActiveRecord::StatementInvalid`.
365
+ * Fix destroying existing object does not work well when optimistic locking enabled and
366
+ `locking_column` is null in the database.
717
367
 
718
- *Richard Monette*
368
+ *bogdanvlviv*
719
369
 
720
- * Change the schema cache format to use YAML instead of Marshal.
370
+ * Use bulk INSERT to insert fixtures for better performance.
721
371
 
722
372
  *Kir Shatrov*
723
373
 
724
- * Support index length and order options using both string and symbol
725
- column names.
726
-
727
- Fixes #27243.
728
-
729
- *Ryuta Kamizono*
730
-
731
- * Raise `ActiveRecord::RangeError` when values that executed are out of range.
374
+ * Prevent creation of bind param if casted value is nil.
732
375
 
733
376
  *Ryuta Kamizono*
734
377
 
735
- * Raise `ActiveRecord::NotNullViolation` when a record cannot be inserted
736
- or updated because it would violate a not null constraint.
737
-
738
- *Ryuta Kamizono*
739
-
740
- * Emulate db trigger behaviour for after_commit :destroy, :update.
741
-
742
- Race conditions can occur when an ActiveRecord is destroyed
743
- twice or destroyed and updated. The callbacks should only be
744
- triggered once, similar to a SQL database trigger.
745
-
746
- *Stefan Budeanu*
747
-
748
- * Moved `DecimalWithoutScale`, `Text`, and `UnsignedInteger` from Active Model to Active Record.
749
-
750
- *Iain Beeston*
751
-
752
- * Fix `write_attribute` method to check whether an attribute is aliased or not, and
753
- use the aliased attribute name if needed.
754
-
755
- *Prathamesh Sonpatki*
756
-
757
- * Fix `read_attribute` method to check whether an attribute is aliased or not, and
758
- use the aliased attribute name if needed.
759
-
760
- Fixes #26417.
761
-
762
- *Prathamesh Sonpatki*
763
-
764
- * PostgreSQL & MySQL: Use big integer as primary key type for new tables.
765
-
766
- *Jon McCartie*, *Pavel Pravosud*
767
-
768
- * Change the type argument of `ActiveRecord::Base#attribute` to be optional.
769
- The default is now `ActiveRecord::Type::Value.new`, which provides no type
770
- casting behavior.
771
-
772
- *Sean Griffin*
773
-
774
- * Don't treat unsigned integers with zerofill as signed.
775
-
776
- Fixes #27125.
378
+ * Deprecate passing arguments and block at the same time to `count` and `sum` in `ActiveRecord::Calculations`.
777
379
 
778
380
  *Ryuta Kamizono*
779
381
 
780
- * Fix the uniqueness validation scope with a polymorphic association.
781
-
782
- *Sergey Alekseev*
783
-
784
- * Raise `ActiveRecord::RecordNotFound` from collection `*_ids` setters
785
- for unknown IDs with a better error message.
786
-
787
- Changes the collection `*_ids` setters to cast provided IDs the data
788
- type of the primary key set in the association, not the model
789
- primary key.
790
-
791
- *Dominic Cleal*
792
-
793
- * For PostgreSQL >= 9.4 use `pgcrypto`'s `gen_random_uuid()` instead of
794
- `uuid-ossp`'s UUID generation function.
382
+ * Loading model schema from database is now thread-safe.
795
383
 
796
- *Yuji Yaginuma*, *Yaw Boakye*
384
+ Fixes #28589.
797
385
 
798
- * Introduce `Model#reload_<association>` to bring back the behavior
799
- of `Article.category(true)` where `category` is a singular
800
- association.
386
+ *Vikrant Chaudhary*, *David Abdemoulaie*
801
387
 
802
- The force reloading of the association reader was deprecated
803
- in #20888. Unfortunately the suggested alternative of
804
- `article.reload.category` does not expose the same behavior.
388
+ * Add `ActiveRecord::Base#cache_version` to support recyclable cache keys via the new versioned entries
389
+ in `ActiveSupport::Cache`. This also means that `ActiveRecord::Base#cache_key` will now return a stable key
390
+ that does not include a timestamp any more.
805
391
 
806
- This patch adds a reader method with the prefix `reload_` for
807
- singular associations. This method has the same semantics as
808
- passing true to the association reader used to have.
392
+ NOTE: This feature is turned off by default, and `#cache_key` will still return cache keys with timestamps
393
+ until you set `ActiveRecord::Base.cache_versioning = true`. That's the setting for all new apps on Rails 5.2+
809
394
 
810
- *Yves Senn*
395
+ *DHH*
811
396
 
812
- * Make sure eager loading `ActiveRecord::Associations` also loads
813
- constants defined in `ActiveRecord::Associations::Preloader`.
397
+ * Respect `SchemaDumper.ignore_tables` in rake tasks for databases structure dump
814
398
 
815
- *Yves Senn*
399
+ *Rusty Geldmacher*, *Guillermo Iguaran*
816
400
 
817
- * Allow `ActionController::Parameters`-like objects to be passed as
818
- values for Postgres HStore columns.
401
+ * Add type caster to `RuntimeReflection#alias_name`
819
402
 
820
- Fixes #26904.
403
+ Fixes #28959.
821
404
 
822
405
  *Jon Moss*
823
406
 
824
- * Added `stat` method to `ActiveRecord::ConnectionAdapters::ConnectionPool`.
825
-
826
- Example:
827
-
828
- ActiveRecord::Base.connection_pool.stat # =>
829
- { size: 15, connections: 1, busy: 1, dead: 0, idle: 0, waiting: 0, checkout_timeout: 5 }
830
-
831
- *Pavel Evstigneev*
832
-
833
- * Avoid `unscope(:order)` when `limit_value` is presented for `count`
834
- and `exists?`.
835
-
836
- If `limit_value` is presented, records fetching order is very important
837
- for performance. We should not unscope the order in the case.
407
+ * Deprecate `supports_statement_cache?`.
838
408
 
839
409
  *Ryuta Kamizono*
840
410
 
841
- * Fix an Active Record `DateTime` field `NoMethodError` caused by incomplete
842
- datetime.
843
-
844
- Fixes #24195.
845
-
846
- *Sen Zhang*
847
-
848
- * Allow `slice` to take an array of methods(without the need for splatting).
849
-
850
- *Cohen Carlisle*
851
-
852
- * Improved partial writes with HABTM and has many through associations
853
- to fire database query only if relation has been changed.
854
-
855
- Fixes #19663.
856
-
857
- *Mehmet Emin İNAÇ*
858
-
859
- * Deprecate passing arguments and block at the same time to
860
- `ActiveRecord::QueryMethods#select`.
861
-
862
- *Prathamesh Sonpatki*
863
-
864
- * Fixed: Optimistic locking does not work well with `null` in the database.
865
-
866
- Fixes #26024.
411
+ * Raise error `UnknownMigrationVersionError` on the movement of migrations
412
+ when the current migration does not exist.
867
413
 
868
414
  *bogdanvlviv*
869
415
 
870
- * Fixed support for case insensitive comparisons of `text` columns in
871
- PostgreSQL.
872
-
873
- *Edho Arief*
874
-
875
- * Serialize JSON attribute value `nil` as SQL `NULL`, not JSON `null`.
876
-
877
- *Trung Duc Tran*
878
-
879
- * Return `true` from `update_attribute` when the value of the attribute
880
- to be updated is unchanged.
881
-
882
- Fixes #26593.
883
-
884
- *Prathamesh Sonpatki*
885
-
886
- * Always store errors details information with symbols.
887
-
888
- When the association is autosaved we were storing the details with
889
- string keys. This was creating inconsistency with other details that are
890
- added using the `Errors#add` method. It was also inconsistent with the
891
- `Errors#messages` storage.
892
-
893
- To fix this inconsistency we are always storing with symbols. This will
894
- cause a small breaking change because in those cases the details could
895
- be accessed as strings keys but now it can not.
896
-
897
- Fix #26499.
898
-
899
- *Rafael Mendonça França*, *Marcus Vieira*
900
-
901
- * Calling `touch` on a model using optimistic locking will now leave the model
902
- in a non-dirty state with no attribute changes.
903
-
904
- Fixes #26496.
905
-
906
- *Jakob Skjerning*
907
-
908
- * Using a mysql2 connection after it fails to reconnect will now have an error message
909
- saying the connection is closed rather than an undefined method error message.
416
+ * Fix `bin/rails db:forward` first migration.
910
417
 
911
- *Dylan Thacker-Smith*
912
-
913
- * PostgreSQL array columns will now respect the encoding of strings contained
914
- in the array.
915
-
916
- Fixes #26326.
917
-
918
- *Sean Griffin*
919
-
920
- * Inverse association instances will now be set before `after_find` or
921
- `after_initialize` callbacks are run.
922
-
923
- Fixes #26320.
924
-
925
- *Sean Griffin*
926
-
927
- * Remove unnecessarily association load when a `belongs_to` association has already been
928
- loaded then the foreign key is changed directly and the record saved.
929
-
930
- *James Coleman*
931
-
932
- * Remove standardized column types/arguments spaces in schema dump.
933
-
934
- *Tim Petricola*
935
-
936
- * Avoid loading records from database when they are already loaded using
937
- the `pluck` method on a collection.
938
-
939
- Fixes #25921.
940
-
941
- *Ryuta Kamizono*
942
-
943
- * Remove text default treated as an empty string in non-strict mode for
944
- consistency with other types.
945
-
946
- Strict mode controls how MySQL handles invalid or missing values in
947
- data-change statements such as INSERT or UPDATE. If strict mode is not
948
- in effect, MySQL inserts adjusted values for invalid or missing values
949
- and produces warnings.
950
-
951
- def test_mysql_not_null_defaults_non_strict
952
- using_strict(false) do
953
- with_mysql_not_null_table do |klass|
954
- record = klass.new
955
- assert_nil record.non_null_integer
956
- assert_nil record.non_null_string
957
- assert_nil record.non_null_text
958
- assert_nil record.non_null_blob
959
-
960
- record.save!
961
- record.reload
962
-
963
- assert_equal 0, record.non_null_integer
964
- assert_equal "", record.non_null_string
965
- assert_equal "", record.non_null_text
966
- assert_equal "", record.non_null_blob
967
- end
968
- end
969
- end
970
-
971
- https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-strict
972
-
973
- *Ryuta Kamizono*
974
-
975
- * SQLite3 migrations to add a column to an existing table can now be
976
- successfully rolled back when the column was given and invalid column
977
- type.
978
-
979
- Fixes #26087.
418
+ *bogdanvlviv*
980
419
 
981
- *Travis O'Neill*
420
+ * Support Descending Indexes for MySQL.
982
421
 
983
- * Deprecate `sanitize_conditions`. Use `sanitize_sql` instead.
422
+ MySQL 8.0.1 and higher supports descending indexes: `DESC` in an index definition is no longer ignored.
423
+ See https://dev.mysql.com/doc/refman/8.0/en/descending-indexes.html.
984
424
 
985
425
  *Ryuta Kamizono*
986
426
 
987
- * Doing count on relations that contain LEFT OUTER JOIN Arel node no longer
988
- force a DISTINCT. This solves issues when using count after a left_joins.
989
-
990
- *Maxime Handfield Lapointe*
991
-
992
- * RecordNotFound raised by association.find exposes `id`, `primary_key` and
993
- `model` methods to be consistent with RecordNotFound raised by Record.find.
994
-
995
- *Michel Pigassou*
996
-
997
- * Hashes can once again be passed to setters of `composed_of`, if all of the
998
- mapping methods are methods implemented on `Hash`.
999
-
1000
- Fixes #25978.
1001
-
1002
- *Sean Griffin*
1003
-
1004
- * Fix the SELECT statement in `#table_comment` for MySQL.
1005
-
1006
- *Takeshi Akima*
1007
-
1008
- * Virtual attributes will no longer raise when read on models loaded from the
1009
- database.
1010
-
1011
- *Sean Griffin*
1012
-
1013
- * Support calling the method `merge` in `scope`'s lambda.
1014
-
1015
- *Yasuhiro Sugino*
1016
-
1017
- * Fixes multi-parameter attributes conversion with invalid params.
1018
-
1019
- *Hiroyuki Ishii*
1020
-
1021
- * Add newline between each migration in `structure.sql`.
1022
-
1023
- Keeps schema migration inserts as a single commit, but allows for easier
1024
- git diffing.
1025
-
1026
- Fixes #25504.
1027
-
1028
- *Grey Baker*, *Norberto Lopes*
1029
-
1030
- * The flag `error_on_ignored_order_or_limit` has been deprecated in favor of
1031
- the current `error_on_ignored_order`.
1032
-
1033
- *Xavier Noria*
1034
-
1035
- * Batch processing methods support `limit`:
1036
-
1037
- Post.limit(10_000).find_each do |post|
1038
- # ...
1039
- end
1040
-
1041
- It also works in `find_in_batches` and `in_batches`.
1042
-
1043
- *Xavier Noria*
1044
-
1045
- * Using `group` with an attribute that has a custom type will properly cast
1046
- the hash keys after calling a calculation method like `count`.
1047
-
1048
- Fixes #25595.
427
+ * Fix inconsistency with changed attributes when overriding AR attribute reader.
1049
428
 
1050
- *Sean Griffin*
1051
-
1052
- * Fix the generated `#to_param` method to use `omission: ''` so that
1053
- the resulting output is actually up to 20 characters, not
1054
- effectively 17 to leave room for the default "...".
1055
- Also call `#parameterize` before `#truncate` and make the
1056
- `separator: /-/` to maximize the information included in the
1057
- output.
1058
-
1059
- Fixes #23635.
1060
-
1061
- *Rob Biedenharn*
1062
-
1063
- * Ensure concurrent invocations of the connection reaper cannot allocate the
1064
- same connection to two threads.
1065
-
1066
- Fixes #25585.
1067
-
1068
- *Matthew Draper*
429
+ *bogdanvlviv*
1069
430
 
1070
- * Inspecting an object with an associated array of over 10 elements no longer
1071
- truncates the array, preventing `inspect` from looping infinitely in some
1072
- cases.
431
+ * When calling the dynamic fixture accessor method with no arguments, it now returns all fixtures of this type.
432
+ Previously this method always returned an empty array.
1073
433
 
1074
434
  *Kevin McPhillips*
1075
435
 
1076
- * Removed the unused methods `ActiveRecord::Base.connection_id` and
1077
- `ActiveRecord::Base.connection_id=`.
1078
-
1079
- *Sean Griffin*
1080
-
1081
- * Ensure hashes can be assigned to attributes created using `composed_of`.
1082
-
1083
- Fixes #25210.
1084
-
1085
- *Sean Griffin*
1086
-
1087
- * Fix logging edge case where if an attribute was of the binary type and
1088
- was provided as a Hash.
1089
-
1090
- *Jon Moss*
1091
-
1092
- * Handle JSON deserialization correctly if the column default from database
1093
- adapter returns `''` instead of `nil`.
1094
-
1095
- *Johannes Opper*
1096
-
1097
- * Introduce new Active Record transaction error classes for catching
1098
- transaction serialization failures or deadlocks.
1099
-
1100
- *Erol Fornoles*
1101
-
1102
- * PostgreSQL: Fix `db:structure:load` silent failure on SQL error.
1103
-
1104
- The command line flag `-v ON_ERROR_STOP=1` should be used
1105
- when invoking `psql` to make sure errors are not suppressed.
1106
-
1107
- Example:
1108
-
1109
- psql -v ON_ERROR_STOP=1 -q -f awesome-file.sql my-app-db
1110
-
1111
- Fixes #23818.
1112
-
1113
- *Ralin Chimev*
1114
-
1115
436
 
1116
- Please check [5-0-stable](https://github.com/rails/rails/blob/5-0-stable/activerecord/CHANGELOG.md) for previous changes.
437
+ Please check [5-1-stable](https://github.com/rails/rails/blob/5-1-stable/activerecord/CHANGELOG.md) for previous changes.