activerecord 6.0.5 → 6.1.0.rc1

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 (242) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +764 -888
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +3 -3
  5. data/lib/active_record/aggregations.rb +1 -1
  6. data/lib/active_record/association_relation.rb +22 -14
  7. data/lib/active_record/associations/alias_tracker.rb +19 -15
  8. data/lib/active_record/associations/association.rb +39 -27
  9. data/lib/active_record/associations/association_scope.rb +11 -15
  10. data/lib/active_record/associations/belongs_to_association.rb +15 -5
  11. data/lib/active_record/associations/belongs_to_polymorphic_association.rb +1 -1
  12. data/lib/active_record/associations/builder/association.rb +9 -3
  13. data/lib/active_record/associations/builder/belongs_to.rb +10 -7
  14. data/lib/active_record/associations/builder/collection_association.rb +5 -4
  15. data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +0 -1
  16. data/lib/active_record/associations/builder/has_many.rb +6 -2
  17. data/lib/active_record/associations/builder/has_one.rb +11 -14
  18. data/lib/active_record/associations/builder/singular_association.rb +1 -1
  19. data/lib/active_record/associations/collection_association.rb +19 -13
  20. data/lib/active_record/associations/collection_proxy.rb +12 -5
  21. data/lib/active_record/associations/foreign_association.rb +13 -0
  22. data/lib/active_record/associations/has_many_association.rb +24 -2
  23. data/lib/active_record/associations/has_many_through_association.rb +10 -4
  24. data/lib/active_record/associations/has_one_association.rb +15 -1
  25. data/lib/active_record/associations/join_dependency/join_association.rb +29 -14
  26. data/lib/active_record/associations/join_dependency/join_part.rb +1 -1
  27. data/lib/active_record/associations/join_dependency.rb +63 -49
  28. data/lib/active_record/associations/preloader/association.rb +13 -5
  29. data/lib/active_record/associations/preloader/through_association.rb +1 -1
  30. data/lib/active_record/associations/preloader.rb +5 -3
  31. data/lib/active_record/associations/singular_association.rb +1 -1
  32. data/lib/active_record/associations.rb +114 -11
  33. data/lib/active_record/attribute_assignment.rb +10 -8
  34. data/lib/active_record/attribute_methods/before_type_cast.rb +13 -9
  35. data/lib/active_record/attribute_methods/dirty.rb +1 -11
  36. data/lib/active_record/attribute_methods/primary_key.rb +6 -2
  37. data/lib/active_record/attribute_methods/query.rb +3 -6
  38. data/lib/active_record/attribute_methods/read.rb +8 -11
  39. data/lib/active_record/attribute_methods/serialization.rb +4 -4
  40. data/lib/active_record/attribute_methods/time_zone_conversion.rb +12 -13
  41. data/lib/active_record/attribute_methods/write.rb +12 -20
  42. data/lib/active_record/attribute_methods.rb +52 -48
  43. data/lib/active_record/attributes.rb +27 -7
  44. data/lib/active_record/autosave_association.rb +47 -30
  45. data/lib/active_record/base.rb +2 -14
  46. data/lib/active_record/callbacks.rb +32 -22
  47. data/lib/active_record/coders/yaml_column.rb +1 -1
  48. data/lib/active_record/connection_adapters/abstract/connection_pool.rb +180 -134
  49. data/lib/active_record/connection_adapters/abstract/database_limits.rb +2 -44
  50. data/lib/active_record/connection_adapters/abstract/database_statements.rb +65 -22
  51. data/lib/active_record/connection_adapters/abstract/query_cache.rb +2 -7
  52. data/lib/active_record/connection_adapters/abstract/quoting.rb +34 -34
  53. data/lib/active_record/connection_adapters/abstract/savepoints.rb +3 -3
  54. data/lib/active_record/connection_adapters/abstract/schema_creation.rb +153 -116
  55. data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +110 -30
  56. data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +3 -3
  57. data/lib/active_record/connection_adapters/abstract/schema_statements.rb +224 -85
  58. data/lib/active_record/connection_adapters/abstract/transaction.rb +66 -24
  59. data/lib/active_record/connection_adapters/abstract_adapter.rb +31 -70
  60. data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +123 -87
  61. data/lib/active_record/connection_adapters/column.rb +15 -1
  62. data/lib/active_record/connection_adapters/deduplicable.rb +29 -0
  63. data/lib/active_record/connection_adapters/legacy_pool_manager.rb +31 -0
  64. data/lib/active_record/connection_adapters/mysql/database_statements.rb +22 -24
  65. data/lib/active_record/connection_adapters/mysql/explain_pretty_printer.rb +1 -1
  66. data/lib/active_record/connection_adapters/mysql/quoting.rb +1 -1
  67. data/lib/active_record/connection_adapters/mysql/schema_creation.rb +33 -6
  68. data/lib/active_record/connection_adapters/mysql/schema_definitions.rb +8 -0
  69. data/lib/active_record/connection_adapters/mysql/schema_dumper.rb +1 -1
  70. data/lib/active_record/connection_adapters/mysql/schema_statements.rb +3 -3
  71. data/lib/active_record/connection_adapters/mysql/type_metadata.rb +10 -1
  72. data/lib/active_record/connection_adapters/mysql2_adapter.rb +31 -12
  73. data/lib/active_record/connection_adapters/pool_config.rb +63 -0
  74. data/lib/active_record/connection_adapters/pool_manager.rb +43 -0
  75. data/lib/active_record/connection_adapters/postgresql/column.rb +24 -1
  76. data/lib/active_record/connection_adapters/postgresql/database_statements.rb +12 -53
  77. data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +3 -5
  78. data/lib/active_record/connection_adapters/postgresql/oid/date.rb +2 -2
  79. data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +2 -10
  80. data/lib/active_record/connection_adapters/postgresql/oid/interval.rb +49 -0
  81. data/lib/active_record/connection_adapters/postgresql/oid/legacy_point.rb +2 -2
  82. data/lib/active_record/connection_adapters/postgresql/oid/macaddr.rb +25 -0
  83. data/lib/active_record/connection_adapters/postgresql/oid/money.rb +2 -2
  84. data/lib/active_record/connection_adapters/postgresql/oid/point.rb +2 -2
  85. data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +11 -1
  86. data/lib/active_record/connection_adapters/postgresql/oid.rb +2 -0
  87. data/lib/active_record/connection_adapters/postgresql/quoting.rb +4 -4
  88. data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +1 -1
  89. data/lib/active_record/connection_adapters/postgresql/schema_creation.rb +5 -1
  90. data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +61 -29
  91. data/lib/active_record/connection_adapters/postgresql/type_metadata.rb +8 -0
  92. data/lib/active_record/connection_adapters/postgresql_adapter.rb +72 -55
  93. data/lib/active_record/connection_adapters/schema_cache.rb +98 -15
  94. data/lib/active_record/connection_adapters/sql_type_metadata.rb +10 -0
  95. data/lib/active_record/connection_adapters/sqlite3/database_statements.rb +30 -5
  96. data/lib/active_record/connection_adapters/sqlite3/quoting.rb +1 -1
  97. data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +5 -1
  98. data/lib/active_record/connection_adapters/sqlite3/schema_statements.rb +36 -3
  99. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +48 -50
  100. data/lib/active_record/connection_adapters.rb +50 -0
  101. data/lib/active_record/connection_handling.rb +210 -71
  102. data/lib/active_record/core.rb +215 -49
  103. data/lib/active_record/database_configurations/connection_url_resolver.rb +98 -0
  104. data/lib/active_record/database_configurations/database_config.rb +52 -9
  105. data/lib/active_record/database_configurations/hash_config.rb +54 -8
  106. data/lib/active_record/database_configurations/url_config.rb +15 -40
  107. data/lib/active_record/database_configurations.rb +124 -85
  108. data/lib/active_record/delegated_type.rb +209 -0
  109. data/lib/active_record/destroy_association_async_job.rb +36 -0
  110. data/lib/active_record/enum.rb +33 -23
  111. data/lib/active_record/errors.rb +47 -12
  112. data/lib/active_record/explain.rb +9 -4
  113. data/lib/active_record/explain_subscriber.rb +1 -1
  114. data/lib/active_record/fixture_set/file.rb +10 -17
  115. data/lib/active_record/fixture_set/model_metadata.rb +1 -2
  116. data/lib/active_record/fixture_set/render_context.rb +1 -1
  117. data/lib/active_record/fixture_set/table_row.rb +2 -2
  118. data/lib/active_record/fixtures.rb +54 -8
  119. data/lib/active_record/gem_version.rb +3 -3
  120. data/lib/active_record/inheritance.rb +40 -18
  121. data/lib/active_record/insert_all.rb +32 -5
  122. data/lib/active_record/integration.rb +3 -5
  123. data/lib/active_record/internal_metadata.rb +15 -4
  124. data/lib/active_record/legacy_yaml_adapter.rb +7 -3
  125. data/lib/active_record/locking/optimistic.rb +13 -16
  126. data/lib/active_record/locking/pessimistic.rb +6 -2
  127. data/lib/active_record/log_subscriber.rb +26 -8
  128. data/lib/active_record/middleware/database_selector/resolver/session.rb +3 -0
  129. data/lib/active_record/middleware/database_selector/resolver.rb +5 -0
  130. data/lib/active_record/middleware/database_selector.rb +4 -1
  131. data/lib/active_record/migration/command_recorder.rb +47 -27
  132. data/lib/active_record/migration/compatibility.rb +67 -17
  133. data/lib/active_record/migration.rb +113 -83
  134. data/lib/active_record/model_schema.rb +88 -42
  135. data/lib/active_record/nested_attributes.rb +2 -3
  136. data/lib/active_record/no_touching.rb +1 -1
  137. data/lib/active_record/persistence.rb +50 -45
  138. data/lib/active_record/query_cache.rb +15 -5
  139. data/lib/active_record/querying.rb +11 -6
  140. data/lib/active_record/railtie.rb +64 -44
  141. data/lib/active_record/railties/databases.rake +253 -98
  142. data/lib/active_record/readonly_attributes.rb +4 -0
  143. data/lib/active_record/reflection.rb +59 -44
  144. data/lib/active_record/relation/batches/batch_enumerator.rb +25 -9
  145. data/lib/active_record/relation/batches.rb +38 -31
  146. data/lib/active_record/relation/calculations.rb +100 -43
  147. data/lib/active_record/relation/finder_methods.rb +44 -14
  148. data/lib/active_record/relation/from_clause.rb +1 -1
  149. data/lib/active_record/relation/merger.rb +20 -23
  150. data/lib/active_record/relation/predicate_builder/array_handler.rb +8 -9
  151. data/lib/active_record/relation/predicate_builder/association_query_value.rb +2 -2
  152. data/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb +3 -3
  153. data/lib/active_record/relation/predicate_builder/relation_handler.rb +1 -1
  154. data/lib/active_record/relation/predicate_builder.rb +57 -33
  155. data/lib/active_record/relation/query_methods.rb +319 -196
  156. data/lib/active_record/relation/record_fetch_warning.rb +3 -3
  157. data/lib/active_record/relation/spawn_methods.rb +6 -5
  158. data/lib/active_record/relation/where_clause.rb +104 -57
  159. data/lib/active_record/relation.rb +90 -64
  160. data/lib/active_record/result.rb +41 -33
  161. data/lib/active_record/runtime_registry.rb +2 -2
  162. data/lib/active_record/sanitization.rb +6 -17
  163. data/lib/active_record/schema_dumper.rb +34 -4
  164. data/lib/active_record/schema_migration.rb +0 -4
  165. data/lib/active_record/scoping/named.rb +1 -17
  166. data/lib/active_record/secure_token.rb +16 -8
  167. data/lib/active_record/serialization.rb +5 -3
  168. data/lib/active_record/signed_id.rb +116 -0
  169. data/lib/active_record/statement_cache.rb +20 -4
  170. data/lib/active_record/store.rb +2 -2
  171. data/lib/active_record/suppressor.rb +2 -2
  172. data/lib/active_record/table_metadata.rb +36 -52
  173. data/lib/active_record/tasks/database_tasks.rb +139 -113
  174. data/lib/active_record/tasks/mysql_database_tasks.rb +34 -35
  175. data/lib/active_record/tasks/postgresql_database_tasks.rb +24 -26
  176. data/lib/active_record/tasks/sqlite_database_tasks.rb +13 -9
  177. data/lib/active_record/test_databases.rb +5 -4
  178. data/lib/active_record/test_fixtures.rb +36 -33
  179. data/lib/active_record/timestamp.rb +4 -6
  180. data/lib/active_record/touch_later.rb +21 -21
  181. data/lib/active_record/transactions.rb +15 -64
  182. data/lib/active_record/type/serialized.rb +6 -2
  183. data/lib/active_record/type.rb +8 -1
  184. data/lib/active_record/type_caster/connection.rb +0 -1
  185. data/lib/active_record/type_caster/map.rb +8 -5
  186. data/lib/active_record/validations/associated.rb +1 -1
  187. data/lib/active_record/validations/numericality.rb +35 -0
  188. data/lib/active_record/validations/uniqueness.rb +24 -4
  189. data/lib/active_record/validations.rb +1 -0
  190. data/lib/active_record.rb +7 -14
  191. data/lib/arel/attributes/attribute.rb +4 -0
  192. data/lib/arel/collectors/bind.rb +5 -0
  193. data/lib/arel/collectors/composite.rb +8 -0
  194. data/lib/arel/collectors/sql_string.rb +7 -0
  195. data/lib/arel/collectors/substitute_binds.rb +7 -0
  196. data/lib/arel/nodes/binary.rb +82 -8
  197. data/lib/arel/nodes/bind_param.rb +8 -0
  198. data/lib/arel/nodes/casted.rb +21 -9
  199. data/lib/arel/nodes/equality.rb +6 -9
  200. data/lib/arel/nodes/grouping.rb +3 -0
  201. data/lib/arel/nodes/homogeneous_in.rb +72 -0
  202. data/lib/arel/nodes/in.rb +8 -1
  203. data/lib/arel/nodes/infix_operation.rb +13 -1
  204. data/lib/arel/nodes/join_source.rb +1 -1
  205. data/lib/arel/nodes/node.rb +7 -6
  206. data/lib/arel/nodes/ordering.rb +27 -0
  207. data/lib/arel/nodes/sql_literal.rb +3 -0
  208. data/lib/arel/nodes/table_alias.rb +7 -3
  209. data/lib/arel/nodes/unary.rb +0 -1
  210. data/lib/arel/nodes.rb +3 -1
  211. data/lib/arel/predications.rb +12 -18
  212. data/lib/arel/select_manager.rb +1 -2
  213. data/lib/arel/table.rb +13 -5
  214. data/lib/arel/visitors/dot.rb +14 -2
  215. data/lib/arel/visitors/mysql.rb +11 -1
  216. data/lib/arel/visitors/postgresql.rb +15 -4
  217. data/lib/arel/visitors/to_sql.rb +89 -78
  218. data/lib/arel/visitors.rb +0 -7
  219. data/lib/arel.rb +5 -13
  220. data/lib/rails/generators/active_record/migration/migration_generator.rb +1 -0
  221. data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb.tt +2 -0
  222. data/lib/rails/generators/active_record/migration/templates/migration.rb.tt +3 -3
  223. data/lib/rails/generators/active_record/migration.rb +6 -1
  224. data/lib/rails/generators/active_record/model/model_generator.rb +39 -2
  225. data/lib/rails/generators/active_record/model/templates/abstract_base_class.rb.tt +7 -0
  226. metadata +30 -32
  227. data/lib/active_record/advisory_lock_base.rb +0 -18
  228. data/lib/active_record/attribute_decorators.rb +0 -88
  229. data/lib/active_record/connection_adapters/connection_specification.rb +0 -296
  230. data/lib/active_record/connection_adapters/determine_if_preparable_visitor.rb +0 -29
  231. data/lib/active_record/define_callbacks.rb +0 -22
  232. data/lib/active_record/railties/collection_cache_association_loading.rb +0 -34
  233. data/lib/active_record/relation/predicate_builder/base_handler.rb +0 -18
  234. data/lib/active_record/relation/where_clause_factory.rb +0 -33
  235. data/lib/arel/attributes.rb +0 -22
  236. data/lib/arel/visitors/depth_first.rb +0 -203
  237. data/lib/arel/visitors/ibm_db.rb +0 -34
  238. data/lib/arel/visitors/informix.rb +0 -62
  239. data/lib/arel/visitors/mssql.rb +0 -156
  240. data/lib/arel/visitors/oracle.rb +0 -158
  241. data/lib/arel/visitors/oracle12.rb +0 -65
  242. data/lib/arel/visitors/where_sql.rb +0 -22
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.5
4
+ version: 6.1.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-09 00:00:00.000000000 Z
11
+ date: 2020-11-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 6.0.5
19
+ version: 6.1.0.rc1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 6.0.5
26
+ version: 6.1.0.rc1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activemodel
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 6.0.5
33
+ version: 6.1.0.rc1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 6.0.5
40
+ version: 6.1.0.rc1
41
41
  description: Databases on Rails. Build a persistent domain model by mapping database
42
42
  tables to Ruby classes. Strong conventions for associations, validations, aggregations,
43
43
  migrations, and testing come baked-in.
@@ -53,7 +53,6 @@ files:
53
53
  - examples/performance.rb
54
54
  - examples/simple.rb
55
55
  - lib/active_record.rb
56
- - lib/active_record/advisory_lock_base.rb
57
56
  - lib/active_record/aggregations.rb
58
57
  - lib/active_record/association_relation.rb
59
58
  - lib/active_record/associations.rb
@@ -86,7 +85,6 @@ files:
86
85
  - lib/active_record/associations/singular_association.rb
87
86
  - lib/active_record/associations/through_association.rb
88
87
  - lib/active_record/attribute_assignment.rb
89
- - lib/active_record/attribute_decorators.rb
90
88
  - lib/active_record/attribute_methods.rb
91
89
  - lib/active_record/attribute_methods/before_type_cast.rb
92
90
  - lib/active_record/attribute_methods/dirty.rb
@@ -102,6 +100,7 @@ files:
102
100
  - lib/active_record/callbacks.rb
103
101
  - lib/active_record/coders/json.rb
104
102
  - lib/active_record/coders/yaml_column.rb
103
+ - lib/active_record/connection_adapters.rb
105
104
  - lib/active_record/connection_adapters/abstract/connection_pool.rb
106
105
  - lib/active_record/connection_adapters/abstract/database_limits.rb
107
106
  - lib/active_record/connection_adapters/abstract/database_statements.rb
@@ -116,8 +115,8 @@ files:
116
115
  - lib/active_record/connection_adapters/abstract_adapter.rb
117
116
  - lib/active_record/connection_adapters/abstract_mysql_adapter.rb
118
117
  - lib/active_record/connection_adapters/column.rb
119
- - lib/active_record/connection_adapters/connection_specification.rb
120
- - lib/active_record/connection_adapters/determine_if_preparable_visitor.rb
118
+ - lib/active_record/connection_adapters/deduplicable.rb
119
+ - lib/active_record/connection_adapters/legacy_pool_manager.rb
121
120
  - lib/active_record/connection_adapters/mysql/column.rb
122
121
  - lib/active_record/connection_adapters/mysql/database_statements.rb
123
122
  - lib/active_record/connection_adapters/mysql/explain_pretty_printer.rb
@@ -128,6 +127,8 @@ files:
128
127
  - lib/active_record/connection_adapters/mysql/schema_statements.rb
129
128
  - lib/active_record/connection_adapters/mysql/type_metadata.rb
130
129
  - lib/active_record/connection_adapters/mysql2_adapter.rb
130
+ - lib/active_record/connection_adapters/pool_config.rb
131
+ - lib/active_record/connection_adapters/pool_manager.rb
131
132
  - lib/active_record/connection_adapters/postgresql/column.rb
132
133
  - lib/active_record/connection_adapters/postgresql/database_statements.rb
133
134
  - lib/active_record/connection_adapters/postgresql/explain_pretty_printer.rb
@@ -143,8 +144,10 @@ files:
143
144
  - lib/active_record/connection_adapters/postgresql/oid/enum.rb
144
145
  - lib/active_record/connection_adapters/postgresql/oid/hstore.rb
145
146
  - lib/active_record/connection_adapters/postgresql/oid/inet.rb
147
+ - lib/active_record/connection_adapters/postgresql/oid/interval.rb
146
148
  - lib/active_record/connection_adapters/postgresql/oid/jsonb.rb
147
149
  - lib/active_record/connection_adapters/postgresql/oid/legacy_point.rb
150
+ - lib/active_record/connection_adapters/postgresql/oid/macaddr.rb
148
151
  - lib/active_record/connection_adapters/postgresql/oid/money.rb
149
152
  - lib/active_record/connection_adapters/postgresql/oid/oid.rb
150
153
  - lib/active_record/connection_adapters/postgresql/oid/point.rb
@@ -178,10 +181,12 @@ files:
178
181
  - lib/active_record/core.rb
179
182
  - lib/active_record/counter_cache.rb
180
183
  - lib/active_record/database_configurations.rb
184
+ - lib/active_record/database_configurations/connection_url_resolver.rb
181
185
  - lib/active_record/database_configurations/database_config.rb
182
186
  - lib/active_record/database_configurations/hash_config.rb
183
187
  - lib/active_record/database_configurations/url_config.rb
184
- - lib/active_record/define_callbacks.rb
188
+ - lib/active_record/delegated_type.rb
189
+ - lib/active_record/destroy_association_async_job.rb
185
190
  - lib/active_record/dynamic_matchers.rb
186
191
  - lib/active_record/enum.rb
187
192
  - lib/active_record/errors.rb
@@ -219,7 +224,6 @@ files:
219
224
  - lib/active_record/query_cache.rb
220
225
  - lib/active_record/querying.rb
221
226
  - lib/active_record/railtie.rb
222
- - lib/active_record/railties/collection_cache_association_loading.rb
223
227
  - lib/active_record/railties/console_sandbox.rb
224
228
  - lib/active_record/railties/controller_runtime.rb
225
229
  - lib/active_record/railties/databases.rake
@@ -236,7 +240,6 @@ files:
236
240
  - lib/active_record/relation/predicate_builder.rb
237
241
  - lib/active_record/relation/predicate_builder/array_handler.rb
238
242
  - lib/active_record/relation/predicate_builder/association_query_value.rb
239
- - lib/active_record/relation/predicate_builder/base_handler.rb
240
243
  - lib/active_record/relation/predicate_builder/basic_object_handler.rb
241
244
  - lib/active_record/relation/predicate_builder/polymorphic_array_value.rb
242
245
  - lib/active_record/relation/predicate_builder/range_handler.rb
@@ -246,7 +249,6 @@ files:
246
249
  - lib/active_record/relation/record_fetch_warning.rb
247
250
  - lib/active_record/relation/spawn_methods.rb
248
251
  - lib/active_record/relation/where_clause.rb
249
- - lib/active_record/relation/where_clause_factory.rb
250
252
  - lib/active_record/result.rb
251
253
  - lib/active_record/runtime_registry.rb
252
254
  - lib/active_record/sanitization.rb
@@ -258,6 +260,7 @@ files:
258
260
  - lib/active_record/scoping/named.rb
259
261
  - lib/active_record/secure_token.rb
260
262
  - lib/active_record/serialization.rb
263
+ - lib/active_record/signed_id.rb
261
264
  - lib/active_record/statement_cache.rb
262
265
  - lib/active_record/store.rb
263
266
  - lib/active_record/suppressor.rb
@@ -292,12 +295,12 @@ files:
292
295
  - lib/active_record/validations/absence.rb
293
296
  - lib/active_record/validations/associated.rb
294
297
  - lib/active_record/validations/length.rb
298
+ - lib/active_record/validations/numericality.rb
295
299
  - lib/active_record/validations/presence.rb
296
300
  - lib/active_record/validations/uniqueness.rb
297
301
  - lib/active_record/version.rb
298
302
  - lib/arel.rb
299
303
  - lib/arel/alias_predication.rb
300
- - lib/arel/attributes.rb
301
304
  - lib/arel/attributes/attribute.rb
302
305
  - lib/arel/collectors/bind.rb
303
306
  - lib/arel/collectors/composite.rb
@@ -328,6 +331,7 @@ files:
328
331
  - lib/arel/nodes/full_outer_join.rb
329
332
  - lib/arel/nodes/function.rb
330
333
  - lib/arel/nodes/grouping.rb
334
+ - lib/arel/nodes/homogeneous_in.rb
331
335
  - lib/arel/nodes/in.rb
332
336
  - lib/arel/nodes/infix_operation.rb
333
337
  - lib/arel/nodes/inner_join.rb
@@ -337,6 +341,7 @@ files:
337
341
  - lib/arel/nodes/named_function.rb
338
342
  - lib/arel/nodes/node.rb
339
343
  - lib/arel/nodes/node_expression.rb
344
+ - lib/arel/nodes/ordering.rb
340
345
  - lib/arel/nodes/outer_join.rb
341
346
  - lib/arel/nodes/over.rb
342
347
  - lib/arel/nodes/regexp.rb
@@ -362,19 +367,12 @@ files:
362
367
  - lib/arel/tree_manager.rb
363
368
  - lib/arel/update_manager.rb
364
369
  - lib/arel/visitors.rb
365
- - lib/arel/visitors/depth_first.rb
366
370
  - lib/arel/visitors/dot.rb
367
- - lib/arel/visitors/ibm_db.rb
368
- - lib/arel/visitors/informix.rb
369
- - lib/arel/visitors/mssql.rb
370
371
  - lib/arel/visitors/mysql.rb
371
- - lib/arel/visitors/oracle.rb
372
- - lib/arel/visitors/oracle12.rb
373
372
  - lib/arel/visitors/postgresql.rb
374
373
  - lib/arel/visitors/sqlite.rb
375
374
  - lib/arel/visitors/to_sql.rb
376
375
  - lib/arel/visitors/visitor.rb
377
- - lib/arel/visitors/where_sql.rb
378
376
  - lib/arel/window_predications.rb
379
377
  - lib/rails/generators/active_record.rb
380
378
  - lib/rails/generators/active_record/application_record/application_record_generator.rb
@@ -384,6 +382,7 @@ files:
384
382
  - lib/rails/generators/active_record/migration/templates/create_table_migration.rb.tt
385
383
  - lib/rails/generators/active_record/migration/templates/migration.rb.tt
386
384
  - lib/rails/generators/active_record/model/model_generator.rb
385
+ - lib/rails/generators/active_record/model/templates/abstract_base_class.rb.tt
387
386
  - lib/rails/generators/active_record/model/templates/model.rb.tt
388
387
  - lib/rails/generators/active_record/model/templates/module.rb.tt
389
388
  homepage: https://rubyonrails.org
@@ -391,12 +390,11 @@ licenses:
391
390
  - MIT
392
391
  metadata:
393
392
  bug_tracker_uri: https://github.com/rails/rails/issues
394
- changelog_uri: https://github.com/rails/rails/blob/v6.0.5/activerecord/CHANGELOG.md
395
- documentation_uri: https://api.rubyonrails.org/v6.0.5/
393
+ changelog_uri: https://github.com/rails/rails/blob/v6.1.0.rc1/activerecord/CHANGELOG.md
394
+ documentation_uri: https://api.rubyonrails.org/v6.1.0.rc1/
396
395
  mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
397
- source_code_uri: https://github.com/rails/rails/tree/v6.0.5/activerecord
398
- rubygems_mfa_required: 'true'
399
- post_install_message:
396
+ source_code_uri: https://github.com/rails/rails/tree/v6.1.0.rc1/activerecord
397
+ post_install_message:
400
398
  rdoc_options:
401
399
  - "--main"
402
400
  - README.rdoc
@@ -409,12 +407,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
409
407
  version: 2.5.0
410
408
  required_rubygems_version: !ruby/object:Gem::Requirement
411
409
  requirements:
412
- - - ">="
410
+ - - ">"
413
411
  - !ruby/object:Gem::Version
414
- version: '0'
412
+ version: 1.3.1
415
413
  requirements: []
416
- rubygems_version: 3.3.7
417
- signing_key:
414
+ rubygems_version: 3.1.4
415
+ signing_key:
418
416
  specification_version: 4
419
417
  summary: Object-relational mapper framework (part of Rails).
420
418
  test_files: []
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ActiveRecord
4
- # This class is used to create a connection that we can use for advisory
5
- # locks. This will take out a "global" lock that can't be accidentally
6
- # removed if a new connection is established during a migration.
7
- class AdvisoryLockBase < ActiveRecord::Base # :nodoc:
8
- self.abstract_class = true
9
-
10
- self.connection_specification_name = "AdvisoryLockBase"
11
-
12
- class << self
13
- def _internal?
14
- true
15
- end
16
- end
17
- end
18
- end
@@ -1,88 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ActiveRecord
4
- module AttributeDecorators # :nodoc:
5
- extend ActiveSupport::Concern
6
-
7
- included do
8
- class_attribute :attribute_type_decorations, instance_accessor: false, default: TypeDecorator.new # :internal:
9
- end
10
-
11
- module ClassMethods # :nodoc:
12
- # This method is an internal API used to create class macros such as
13
- # +serialize+, and features like time zone aware attributes.
14
- #
15
- # Used to wrap the type of an attribute in a new type.
16
- # When the schema for a model is loaded, attributes with the same name as
17
- # +column_name+ will have their type yielded to the given block. The
18
- # return value of that block will be used instead.
19
- #
20
- # Subsequent calls where +column_name+ and +decorator_name+ are the same
21
- # will override the previous decorator, not decorate twice. This can be
22
- # used to create idempotent class macros like +serialize+
23
- def decorate_attribute_type(column_name, decorator_name, &block)
24
- matcher = ->(name, _) { name == column_name.to_s }
25
- key = "_#{column_name}_#{decorator_name}"
26
- decorate_matching_attribute_types(matcher, key, &block)
27
- end
28
-
29
- # This method is an internal API used to create higher level features like
30
- # time zone aware attributes.
31
- #
32
- # When the schema for a model is loaded, +matcher+ will be called for each
33
- # attribute with its name and type. If the matcher returns a truthy value,
34
- # the type will then be yielded to the given block, and the return value
35
- # of that block will replace the type.
36
- #
37
- # Subsequent calls to this method with the same value for +decorator_name+
38
- # will replace the previous decorator, not decorate twice. This can be
39
- # used to ensure that class macros are idempotent.
40
- def decorate_matching_attribute_types(matcher, decorator_name, &block)
41
- reload_schema_from_cache
42
- decorator_name = decorator_name.to_s
43
-
44
- # Create new hashes so we don't modify parent classes
45
- self.attribute_type_decorations = attribute_type_decorations.merge(decorator_name => [matcher, block])
46
- end
47
-
48
- private
49
- def load_schema!
50
- super
51
- attribute_types.each do |name, type|
52
- decorated_type = attribute_type_decorations.apply(name, type)
53
- define_attribute(name, decorated_type)
54
- end
55
- end
56
- end
57
-
58
- class TypeDecorator # :nodoc:
59
- delegate :clear, to: :@decorations
60
-
61
- def initialize(decorations = {})
62
- @decorations = decorations
63
- end
64
-
65
- def merge(*args)
66
- TypeDecorator.new(@decorations.merge(*args))
67
- end
68
-
69
- def apply(name, type)
70
- decorations = decorators_for(name, type)
71
- decorations.inject(type) do |new_type, block|
72
- block.call(new_type)
73
- end
74
- end
75
-
76
- private
77
- def decorators_for(name, type)
78
- matching(name, type).map(&:last)
79
- end
80
-
81
- def matching(name, type)
82
- @decorations.values.select do |(matcher, _)|
83
- matcher.call(name, type)
84
- end
85
- end
86
- end
87
- end
88
- end
@@ -1,296 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "uri"
4
-
5
- module ActiveRecord
6
- module ConnectionAdapters
7
- class ConnectionSpecification #:nodoc:
8
- attr_reader :name, :config, :adapter_method
9
-
10
- def initialize(name, config, adapter_method)
11
- @name, @config, @adapter_method = name, config, adapter_method
12
- end
13
-
14
- def initialize_dup(original)
15
- @config = original.config.dup
16
- end
17
-
18
- def to_hash
19
- @config.merge(name: @name)
20
- end
21
-
22
- # Expands a connection string into a hash.
23
- class ConnectionUrlResolver # :nodoc:
24
- # == Example
25
- #
26
- # url = "postgresql://foo:bar@localhost:9000/foo_test?pool=5&timeout=3000"
27
- # ConnectionUrlResolver.new(url).to_hash
28
- # # => {
29
- # "adapter" => "postgresql",
30
- # "host" => "localhost",
31
- # "port" => 9000,
32
- # "database" => "foo_test",
33
- # "username" => "foo",
34
- # "password" => "bar",
35
- # "pool" => "5",
36
- # "timeout" => "3000"
37
- # }
38
- def initialize(url)
39
- raise "Database URL cannot be empty" if url.blank?
40
- @uri = uri_parser.parse(url)
41
- @adapter = @uri.scheme && @uri.scheme.tr("-", "_")
42
- @adapter = "postgresql" if @adapter == "postgres"
43
-
44
- if @uri.opaque
45
- @uri.opaque, @query = @uri.opaque.split("?", 2)
46
- else
47
- @query = @uri.query
48
- end
49
- end
50
-
51
- # Converts the given URL to a full connection hash.
52
- def to_hash
53
- config = raw_config.reject { |_, value| value.blank? }
54
- config.map { |key, value| config[key] = uri_parser.unescape(value) if value.is_a? String }
55
- config
56
- end
57
-
58
- private
59
- attr_reader :uri
60
-
61
- def uri_parser
62
- @uri_parser ||= URI::Parser.new
63
- end
64
-
65
- # Converts the query parameters of the URI into a hash.
66
- #
67
- # "localhost?pool=5&reaping_frequency=2"
68
- # # => { "pool" => "5", "reaping_frequency" => "2" }
69
- #
70
- # returns empty hash if no query present.
71
- #
72
- # "localhost"
73
- # # => {}
74
- def query_hash
75
- Hash[(@query || "").split("&").map { |pair| pair.split("=", 2) }]
76
- end
77
-
78
- def raw_config
79
- if uri.opaque
80
- query_hash.merge(
81
- "adapter" => @adapter,
82
- "database" => uri.opaque)
83
- else
84
- query_hash.merge(
85
- "adapter" => @adapter,
86
- "username" => uri.user,
87
- "password" => uri.password,
88
- "port" => uri.port,
89
- "database" => database_from_path,
90
- "host" => uri.hostname)
91
- end
92
- end
93
-
94
- # Returns name of the database.
95
- def database_from_path
96
- if @adapter == "sqlite3"
97
- # 'sqlite3:/foo' is absolute, because that makes sense. The
98
- # corresponding relative version, 'sqlite3:foo', is handled
99
- # elsewhere, as an "opaque".
100
-
101
- uri.path
102
- else
103
- # Only SQLite uses a filename as the "database" name; for
104
- # anything else, a leading slash would be silly.
105
-
106
- uri.path.sub(%r{^/}, "")
107
- end
108
- end
109
- end
110
-
111
- ##
112
- # Builds a ConnectionSpecification from user input.
113
- class Resolver # :nodoc:
114
- attr_reader :configurations
115
-
116
- # Accepts a list of db config objects.
117
- def initialize(configurations)
118
- @configurations = configurations
119
- end
120
-
121
- # Returns a hash with database connection information.
122
- #
123
- # == Examples
124
- #
125
- # Full hash Configuration.
126
- #
127
- # configurations = { "production" => { "host" => "localhost", "database" => "foo", "adapter" => "sqlite3" } }
128
- # Resolver.new(configurations).resolve(:production)
129
- # # => { "host" => "localhost", "database" => "foo", "adapter" => "sqlite3"}
130
- #
131
- # Initialized with URL configuration strings.
132
- #
133
- # configurations = { "production" => "postgresql://localhost/foo" }
134
- # Resolver.new(configurations).resolve(:production)
135
- # # => { "host" => "localhost", "database" => "foo", "adapter" => "postgresql" }
136
- #
137
- def resolve(config_or_env, pool_name = nil)
138
- if config_or_env
139
- resolve_connection config_or_env, pool_name
140
- else
141
- raise AdapterNotSpecified
142
- end
143
- end
144
-
145
- # Returns an instance of ConnectionSpecification for a given adapter.
146
- # Accepts a hash one layer deep that contains all connection information.
147
- #
148
- # == Example
149
- #
150
- # config = { "production" => { "host" => "localhost", "database" => "foo", "adapter" => "sqlite3" } }
151
- # spec = Resolver.new(config).spec(:production)
152
- # spec.adapter_method
153
- # # => "sqlite3_connection"
154
- # spec.config
155
- # # => { "host" => "localhost", "database" => "foo", "adapter" => "sqlite3" }
156
- #
157
- def spec(config)
158
- pool_name = config if config.is_a?(Symbol)
159
-
160
- spec = resolve(config, pool_name).symbolize_keys
161
-
162
- raise(AdapterNotSpecified, "database configuration does not specify adapter") unless spec.key?(:adapter)
163
-
164
- # Require the adapter itself and give useful feedback about
165
- # 1. Missing adapter gems and
166
- # 2. Adapter gems' missing dependencies.
167
- path_to_adapter = "active_record/connection_adapters/#{spec[:adapter]}_adapter"
168
- begin
169
- require path_to_adapter
170
- rescue LoadError => e
171
- # We couldn't require the adapter itself. Raise an exception that
172
- # points out config typos and missing gems.
173
- if e.path == path_to_adapter
174
- # We can assume that a non-builtin adapter was specified, so it's
175
- # either misspelled or missing from Gemfile.
176
- raise LoadError, "Could not load the '#{spec[:adapter]}' Active Record adapter. Ensure that the adapter is spelled correctly in config/database.yml and that you've added the necessary adapter gem to your Gemfile.", e.backtrace
177
-
178
- # Bubbled up from the adapter require. Prefix the exception message
179
- # with some guidance about how to address it and reraise.
180
- else
181
- raise LoadError, "Error loading the '#{spec[:adapter]}' Active Record adapter. Missing a gem it depends on? #{e.message}", e.backtrace
182
- end
183
- end
184
-
185
- adapter_method = "#{spec[:adapter]}_connection"
186
-
187
- unless ActiveRecord::Base.respond_to?(adapter_method)
188
- raise AdapterNotFound, "database configuration specifies nonexistent #{spec[:adapter]} adapter"
189
- end
190
-
191
- ConnectionSpecification.new(spec.delete(:name) || "primary", spec, adapter_method)
192
- end
193
-
194
- private
195
- # Returns fully resolved connection, accepts hash, string or symbol.
196
- # Always returns a hash.
197
- #
198
- # == Examples
199
- #
200
- # Symbol representing current environment.
201
- #
202
- # Resolver.new("production" => {}).resolve_connection(:production)
203
- # # => {}
204
- #
205
- # One layer deep hash of connection values.
206
- #
207
- # Resolver.new({}).resolve_connection("adapter" => "sqlite3")
208
- # # => { "adapter" => "sqlite3" }
209
- #
210
- # Connection URL.
211
- #
212
- # Resolver.new({}).resolve_connection("postgresql://localhost/foo")
213
- # # => { "host" => "localhost", "database" => "foo", "adapter" => "postgresql" }
214
- #
215
- def resolve_connection(config_or_env, pool_name = nil)
216
- case config_or_env
217
- when Symbol
218
- resolve_symbol_connection config_or_env, pool_name
219
- when String
220
- resolve_url_connection config_or_env
221
- when Hash
222
- resolve_hash_connection config_or_env
223
- else
224
- raise TypeError, "Invalid type for configuration. Expected Symbol, String, or Hash. Got #{config_or_env.inspect}"
225
- end
226
- end
227
-
228
- # Takes the environment such as +:production+ or +:development+ and a
229
- # pool name the corresponds to the name given by the connection pool
230
- # to the connection. That pool name is merged into the hash with the
231
- # name key.
232
- #
233
- # This requires that the @configurations was initialized with a key that
234
- # matches.
235
- #
236
- # configurations = #<ActiveRecord::DatabaseConfigurations:0x00007fd9fdace3e0
237
- # @configurations=[
238
- # #<ActiveRecord::DatabaseConfigurations::HashConfig:0x00007fd9fdace250
239
- # @env_name="production", @spec_name="primary", @config={"database"=>"my_db"}>
240
- # ]>
241
- #
242
- # Resolver.new(configurations).resolve_symbol_connection(:production, "primary")
243
- # # => { "database" => "my_db" }
244
- def resolve_symbol_connection(env_name, pool_name)
245
- db_config = configurations.find_db_config(env_name)
246
-
247
- if db_config
248
- resolve_connection(db_config.config).merge("name" => pool_name.to_s)
249
- else
250
- raise AdapterNotSpecified, <<~MSG
251
- The `#{env_name}` database is not configured for the `#{ActiveRecord::ConnectionHandling::DEFAULT_ENV.call}` environment.
252
-
253
- Available databases configurations are:
254
-
255
- #{build_configuration_sentence}
256
- MSG
257
- end
258
- end
259
-
260
- def build_configuration_sentence # :nodoc:
261
- configs = configurations.configs_for(include_replicas: true)
262
-
263
- configs.group_by(&:env_name).map do |env, config|
264
- namespaces = config.map(&:spec_name)
265
- if namespaces.size > 1
266
- "#{env}: #{namespaces.join(", ")}"
267
- else
268
- env
269
- end
270
- end.join("\n")
271
- end
272
-
273
- # Accepts a hash. Expands the "url" key that contains a
274
- # URL database connection to a full connection
275
- # hash and merges with the rest of the hash.
276
- # Connection details inside of the "url" key win any merge conflicts
277
- def resolve_hash_connection(spec)
278
- if spec["url"] && spec["url"] !~ /^jdbc:/
279
- connection_hash = resolve_url_connection(spec.delete("url"))
280
- spec.merge!(connection_hash)
281
- end
282
- spec
283
- end
284
-
285
- # Takes a connection URL.
286
- #
287
- # Resolver.new({}).resolve_url_connection("postgresql://localhost/foo")
288
- # # => { "host" => "localhost", "database" => "foo", "adapter" => "postgresql" }
289
- #
290
- def resolve_url_connection(url)
291
- ConnectionUrlResolver.new(url).to_hash
292
- end
293
- end
294
- end
295
- end
296
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ActiveRecord
4
- module ConnectionAdapters
5
- module DetermineIfPreparableVisitor
6
- attr_accessor :preparable
7
-
8
- def accept(object, collector)
9
- @preparable = true
10
- super
11
- end
12
-
13
- def visit_Arel_Nodes_In(o, collector)
14
- @preparable = false
15
- super
16
- end
17
-
18
- def visit_Arel_Nodes_NotIn(o, collector)
19
- @preparable = false
20
- super
21
- end
22
-
23
- def visit_Arel_Nodes_SqlLiteral(o, collector)
24
- @preparable = false
25
- super
26
- end
27
- end
28
- end
29
- end