activerecord 5.0.7.2 → 6.0.3.4

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 (359) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +708 -2040
  3. data/MIT-LICENSE +3 -1
  4. data/README.rdoc +9 -7
  5. data/examples/performance.rb +31 -29
  6. data/examples/simple.rb +5 -3
  7. data/lib/active_record.rb +37 -22
  8. data/lib/active_record/advisory_lock_base.rb +18 -0
  9. data/lib/active_record/aggregations.rb +249 -247
  10. data/lib/active_record/association_relation.rb +18 -14
  11. data/lib/active_record/associations.rb +1603 -1592
  12. data/lib/active_record/associations/alias_tracker.rb +24 -34
  13. data/lib/active_record/associations/association.rb +114 -55
  14. data/lib/active_record/associations/association_scope.rb +94 -94
  15. data/lib/active_record/associations/belongs_to_association.rb +58 -42
  16. data/lib/active_record/associations/belongs_to_polymorphic_association.rb +8 -12
  17. data/lib/active_record/associations/builder/association.rb +18 -25
  18. data/lib/active_record/associations/builder/belongs_to.rb +43 -54
  19. data/lib/active_record/associations/builder/collection_association.rb +7 -18
  20. data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +41 -62
  21. data/lib/active_record/associations/builder/has_many.rb +4 -0
  22. data/lib/active_record/associations/builder/has_one.rb +37 -1
  23. data/lib/active_record/associations/builder/singular_association.rb +4 -0
  24. data/lib/active_record/associations/collection_association.rb +86 -254
  25. data/lib/active_record/associations/collection_proxy.rb +158 -122
  26. data/lib/active_record/associations/foreign_association.rb +9 -0
  27. data/lib/active_record/associations/has_many_association.rb +23 -30
  28. data/lib/active_record/associations/has_many_through_association.rb +58 -44
  29. data/lib/active_record/associations/has_one_association.rb +59 -54
  30. data/lib/active_record/associations/has_one_through_association.rb +20 -11
  31. data/lib/active_record/associations/join_dependency.rb +143 -176
  32. data/lib/active_record/associations/join_dependency/join_association.rb +38 -87
  33. data/lib/active_record/associations/join_dependency/join_base.rb +10 -9
  34. data/lib/active_record/associations/join_dependency/join_part.rb +12 -12
  35. data/lib/active_record/associations/preloader.rb +90 -103
  36. data/lib/active_record/associations/preloader/association.rb +86 -100
  37. data/lib/active_record/associations/preloader/through_association.rb +77 -76
  38. data/lib/active_record/associations/singular_association.rb +12 -45
  39. data/lib/active_record/associations/through_association.rb +26 -14
  40. data/lib/active_record/attribute_assignment.rb +54 -61
  41. data/lib/active_record/attribute_decorators.rb +38 -17
  42. data/lib/active_record/attribute_methods.rb +66 -106
  43. data/lib/active_record/attribute_methods/before_type_cast.rb +12 -8
  44. data/lib/active_record/attribute_methods/dirty.rb +179 -109
  45. data/lib/active_record/attribute_methods/primary_key.rb +85 -92
  46. data/lib/active_record/attribute_methods/query.rb +4 -3
  47. data/lib/active_record/attribute_methods/read.rb +20 -49
  48. data/lib/active_record/attribute_methods/serialization.rb +29 -7
  49. data/lib/active_record/attribute_methods/time_zone_conversion.rb +39 -66
  50. data/lib/active_record/attribute_methods/write.rb +34 -33
  51. data/lib/active_record/attributes.rb +38 -25
  52. data/lib/active_record/autosave_association.rb +54 -35
  53. data/lib/active_record/base.rb +27 -24
  54. data/lib/active_record/callbacks.rb +64 -35
  55. data/lib/active_record/coders/json.rb +2 -0
  56. data/lib/active_record/coders/yaml_column.rb +11 -12
  57. data/lib/active_record/connection_adapters/abstract/connection_pool.rb +552 -323
  58. data/lib/active_record/connection_adapters/abstract/database_limits.rb +23 -5
  59. data/lib/active_record/connection_adapters/abstract/database_statements.rb +215 -94
  60. data/lib/active_record/connection_adapters/abstract/query_cache.rb +59 -35
  61. data/lib/active_record/connection_adapters/abstract/quoting.rb +119 -75
  62. data/lib/active_record/connection_adapters/abstract/savepoints.rb +2 -0
  63. data/lib/active_record/connection_adapters/abstract/schema_creation.rb +33 -28
  64. data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +228 -147
  65. data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +68 -80
  66. data/lib/active_record/connection_adapters/abstract/schema_statements.rb +400 -213
  67. data/lib/active_record/connection_adapters/abstract/transaction.rb +169 -79
  68. data/lib/active_record/connection_adapters/abstract_adapter.rb +367 -202
  69. data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +396 -562
  70. data/lib/active_record/connection_adapters/column.rb +41 -13
  71. data/lib/active_record/connection_adapters/connection_specification.rb +172 -139
  72. data/lib/active_record/connection_adapters/determine_if_preparable_visitor.rb +11 -4
  73. data/lib/active_record/connection_adapters/mysql/column.rb +8 -31
  74. data/lib/active_record/connection_adapters/mysql/database_statements.rb +137 -49
  75. data/lib/active_record/connection_adapters/mysql/explain_pretty_printer.rb +24 -23
  76. data/lib/active_record/connection_adapters/mysql/quoting.rb +50 -20
  77. data/lib/active_record/connection_adapters/mysql/schema_creation.rb +49 -45
  78. data/lib/active_record/connection_adapters/mysql/schema_definitions.rb +58 -56
  79. data/lib/active_record/connection_adapters/mysql/schema_dumper.rb +70 -36
  80. data/lib/active_record/connection_adapters/mysql/schema_statements.rb +264 -0
  81. data/lib/active_record/connection_adapters/mysql/type_metadata.rb +12 -13
  82. data/lib/active_record/connection_adapters/mysql2_adapter.rb +48 -30
  83. data/lib/active_record/connection_adapters/postgresql/column.rb +19 -31
  84. data/lib/active_record/connection_adapters/postgresql/database_statements.rb +64 -54
  85. data/lib/active_record/connection_adapters/postgresql/explain_pretty_printer.rb +5 -3
  86. data/lib/active_record/connection_adapters/postgresql/oid.rb +24 -21
  87. data/lib/active_record/connection_adapters/postgresql/oid/array.rb +22 -11
  88. data/lib/active_record/connection_adapters/postgresql/oid/bit.rb +6 -5
  89. data/lib/active_record/connection_adapters/postgresql/oid/bit_varying.rb +2 -0
  90. data/lib/active_record/connection_adapters/postgresql/oid/bytea.rb +2 -0
  91. data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +3 -1
  92. data/lib/active_record/connection_adapters/postgresql/oid/date.rb +23 -0
  93. data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +4 -2
  94. data/lib/active_record/connection_adapters/postgresql/oid/decimal.rb +3 -1
  95. data/lib/active_record/connection_adapters/postgresql/oid/enum.rb +5 -4
  96. data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +19 -18
  97. data/lib/active_record/connection_adapters/postgresql/oid/inet.rb +2 -0
  98. data/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +3 -11
  99. data/lib/active_record/connection_adapters/postgresql/oid/legacy_point.rb +44 -0
  100. data/lib/active_record/connection_adapters/postgresql/oid/money.rb +7 -5
  101. data/lib/active_record/connection_adapters/postgresql/oid/{json.rb → oid.rb} +6 -1
  102. data/lib/active_record/connection_adapters/postgresql/oid/point.rb +30 -9
  103. data/lib/active_record/connection_adapters/postgresql/oid/range.rb +34 -31
  104. data/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb +4 -1
  105. data/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +58 -54
  106. data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +8 -4
  107. data/lib/active_record/connection_adapters/postgresql/oid/vector.rb +2 -0
  108. data/lib/active_record/connection_adapters/postgresql/oid/xml.rb +2 -0
  109. data/lib/active_record/connection_adapters/postgresql/quoting.rb +95 -35
  110. data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +20 -26
  111. data/lib/active_record/connection_adapters/postgresql/schema_creation.rb +76 -0
  112. data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +147 -105
  113. data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +34 -32
  114. data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +378 -308
  115. data/lib/active_record/connection_adapters/postgresql/type_metadata.rb +26 -25
  116. data/lib/active_record/connection_adapters/postgresql/utils.rb +9 -6
  117. data/lib/active_record/connection_adapters/postgresql_adapter.rb +383 -275
  118. data/lib/active_record/connection_adapters/schema_cache.rb +46 -12
  119. data/lib/active_record/connection_adapters/sql_type_metadata.rb +13 -8
  120. data/lib/active_record/connection_adapters/sqlite3/database_statements.rb +119 -0
  121. data/lib/active_record/connection_adapters/sqlite3/explain_pretty_printer.rb +3 -1
  122. data/lib/active_record/connection_adapters/sqlite3/quoting.rb +72 -18
  123. data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +3 -8
  124. data/lib/active_record/connection_adapters/sqlite3/schema_definitions.rb +19 -0
  125. data/lib/active_record/connection_adapters/sqlite3/schema_dumper.rb +18 -0
  126. data/lib/active_record/connection_adapters/sqlite3/schema_statements.rb +137 -0
  127. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +259 -266
  128. data/lib/active_record/connection_adapters/statement_pool.rb +9 -8
  129. data/lib/active_record/connection_handling.rb +143 -40
  130. data/lib/active_record/core.rb +201 -163
  131. data/lib/active_record/counter_cache.rb +60 -28
  132. data/lib/active_record/database_configurations.rb +233 -0
  133. data/lib/active_record/database_configurations/database_config.rb +37 -0
  134. data/lib/active_record/database_configurations/hash_config.rb +50 -0
  135. data/lib/active_record/database_configurations/url_config.rb +78 -0
  136. data/lib/active_record/define_callbacks.rb +22 -0
  137. data/lib/active_record/dynamic_matchers.rb +87 -87
  138. data/lib/active_record/enum.rb +60 -23
  139. data/lib/active_record/errors.rb +114 -18
  140. data/lib/active_record/explain.rb +4 -4
  141. data/lib/active_record/explain_registry.rb +3 -1
  142. data/lib/active_record/explain_subscriber.rb +9 -4
  143. data/lib/active_record/fixture_set/file.rb +13 -8
  144. data/lib/active_record/fixture_set/model_metadata.rb +33 -0
  145. data/lib/active_record/fixture_set/render_context.rb +17 -0
  146. data/lib/active_record/fixture_set/table_row.rb +152 -0
  147. data/lib/active_record/fixture_set/table_rows.rb +46 -0
  148. data/lib/active_record/fixtures.rb +194 -504
  149. data/lib/active_record/gem_version.rb +5 -3
  150. data/lib/active_record/inheritance.rb +150 -99
  151. data/lib/active_record/insert_all.rb +179 -0
  152. data/lib/active_record/integration.rb +116 -25
  153. data/lib/active_record/internal_metadata.rb +16 -19
  154. data/lib/active_record/legacy_yaml_adapter.rb +4 -2
  155. data/lib/active_record/locking/optimistic.rb +77 -87
  156. data/lib/active_record/locking/pessimistic.rb +18 -6
  157. data/lib/active_record/log_subscriber.rb +48 -29
  158. data/lib/active_record/middleware/database_selector.rb +74 -0
  159. data/lib/active_record/middleware/database_selector/resolver.rb +87 -0
  160. data/lib/active_record/middleware/database_selector/resolver/session.rb +45 -0
  161. data/lib/active_record/migration.rb +369 -302
  162. data/lib/active_record/migration/command_recorder.rb +134 -100
  163. data/lib/active_record/migration/compatibility.rb +174 -56
  164. data/lib/active_record/migration/join_table.rb +8 -7
  165. data/lib/active_record/model_schema.rb +131 -127
  166. data/lib/active_record/nested_attributes.rb +213 -202
  167. data/lib/active_record/no_touching.rb +12 -3
  168. data/lib/active_record/null_relation.rb +12 -34
  169. data/lib/active_record/persistence.rb +446 -77
  170. data/lib/active_record/query_cache.rb +13 -12
  171. data/lib/active_record/querying.rb +37 -24
  172. data/lib/active_record/railtie.rb +128 -36
  173. data/lib/active_record/railties/collection_cache_association_loading.rb +34 -0
  174. data/lib/active_record/railties/console_sandbox.rb +2 -0
  175. data/lib/active_record/railties/controller_runtime.rb +34 -33
  176. data/lib/active_record/railties/databases.rake +312 -177
  177. data/lib/active_record/readonly_attributes.rb +5 -4
  178. data/lib/active_record/reflection.rb +214 -252
  179. data/lib/active_record/relation.rb +440 -318
  180. data/lib/active_record/relation/batches.rb +98 -52
  181. data/lib/active_record/relation/batches/batch_enumerator.rb +3 -1
  182. data/lib/active_record/relation/calculations.rb +212 -173
  183. data/lib/active_record/relation/delegation.rb +72 -69
  184. data/lib/active_record/relation/finder_methods.rb +207 -247
  185. data/lib/active_record/relation/from_clause.rb +6 -8
  186. data/lib/active_record/relation/merger.rb +78 -62
  187. data/lib/active_record/relation/predicate_builder.rb +83 -105
  188. data/lib/active_record/relation/predicate_builder/array_handler.rb +20 -14
  189. data/lib/active_record/relation/predicate_builder/association_query_value.rb +43 -0
  190. data/lib/active_record/relation/predicate_builder/base_handler.rb +4 -3
  191. data/lib/active_record/relation/predicate_builder/basic_object_handler.rb +6 -4
  192. data/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb +53 -0
  193. data/lib/active_record/relation/predicate_builder/range_handler.rb +7 -18
  194. data/lib/active_record/relation/predicate_builder/relation_handler.rb +6 -0
  195. data/lib/active_record/relation/query_attribute.rb +33 -2
  196. data/lib/active_record/relation/query_methods.rb +476 -334
  197. data/lib/active_record/relation/record_fetch_warning.rb +5 -3
  198. data/lib/active_record/relation/spawn_methods.rb +8 -8
  199. data/lib/active_record/relation/where_clause.rb +111 -96
  200. data/lib/active_record/relation/where_clause_factory.rb +6 -11
  201. data/lib/active_record/result.rb +69 -40
  202. data/lib/active_record/runtime_registry.rb +5 -3
  203. data/lib/active_record/sanitization.rb +83 -99
  204. data/lib/active_record/schema.rb +7 -14
  205. data/lib/active_record/schema_dumper.rb +71 -69
  206. data/lib/active_record/schema_migration.rb +16 -6
  207. data/lib/active_record/scoping.rb +20 -20
  208. data/lib/active_record/scoping/default.rb +92 -95
  209. data/lib/active_record/scoping/named.rb +47 -27
  210. data/lib/active_record/secure_token.rb +4 -2
  211. data/lib/active_record/serialization.rb +2 -0
  212. data/lib/active_record/statement_cache.rb +63 -28
  213. data/lib/active_record/store.rb +121 -41
  214. data/lib/active_record/suppressor.rb +6 -3
  215. data/lib/active_record/table_metadata.rb +39 -18
  216. data/lib/active_record/tasks/database_tasks.rb +271 -81
  217. data/lib/active_record/tasks/mysql_database_tasks.rb +54 -91
  218. data/lib/active_record/tasks/postgresql_database_tasks.rb +77 -47
  219. data/lib/active_record/tasks/sqlite_database_tasks.rb +33 -16
  220. data/lib/active_record/test_databases.rb +23 -0
  221. data/lib/active_record/test_fixtures.rb +225 -0
  222. data/lib/active_record/timestamp.rb +70 -36
  223. data/lib/active_record/touch_later.rb +8 -6
  224. data/lib/active_record/transactions.rb +141 -157
  225. data/lib/active_record/translation.rb +3 -1
  226. data/lib/active_record/type.rb +23 -18
  227. data/lib/active_record/type/adapter_specific_registry.rb +44 -48
  228. data/lib/active_record/type/date.rb +2 -0
  229. data/lib/active_record/type/date_time.rb +2 -0
  230. data/lib/active_record/type/decimal_without_scale.rb +15 -0
  231. data/lib/active_record/type/hash_lookup_type_map.rb +5 -4
  232. data/lib/active_record/type/internal/timezone.rb +2 -0
  233. data/lib/active_record/type/json.rb +30 -0
  234. data/lib/active_record/type/serialized.rb +16 -9
  235. data/lib/active_record/type/text.rb +11 -0
  236. data/lib/active_record/type/time.rb +2 -1
  237. data/lib/active_record/type/type_map.rb +14 -17
  238. data/lib/active_record/type/unsigned_integer.rb +16 -0
  239. data/lib/active_record/type_caster.rb +4 -2
  240. data/lib/active_record/type_caster/connection.rb +17 -12
  241. data/lib/active_record/type_caster/map.rb +5 -4
  242. data/lib/active_record/validations.rb +7 -5
  243. data/lib/active_record/validations/absence.rb +2 -0
  244. data/lib/active_record/validations/associated.rb +4 -3
  245. data/lib/active_record/validations/length.rb +2 -0
  246. data/lib/active_record/validations/presence.rb +4 -2
  247. data/lib/active_record/validations/uniqueness.rb +29 -42
  248. data/lib/active_record/version.rb +3 -1
  249. data/lib/arel.rb +62 -0
  250. data/lib/arel/alias_predication.rb +9 -0
  251. data/lib/arel/attributes.rb +22 -0
  252. data/lib/arel/attributes/attribute.rb +37 -0
  253. data/lib/arel/collectors/bind.rb +24 -0
  254. data/lib/arel/collectors/composite.rb +31 -0
  255. data/lib/arel/collectors/plain_string.rb +20 -0
  256. data/lib/arel/collectors/sql_string.rb +20 -0
  257. data/lib/arel/collectors/substitute_binds.rb +28 -0
  258. data/lib/arel/crud.rb +42 -0
  259. data/lib/arel/delete_manager.rb +18 -0
  260. data/lib/arel/errors.rb +9 -0
  261. data/lib/arel/expressions.rb +29 -0
  262. data/lib/arel/factory_methods.rb +49 -0
  263. data/lib/arel/insert_manager.rb +49 -0
  264. data/lib/arel/math.rb +45 -0
  265. data/lib/arel/nodes.rb +68 -0
  266. data/lib/arel/nodes/and.rb +32 -0
  267. data/lib/arel/nodes/ascending.rb +23 -0
  268. data/lib/arel/nodes/binary.rb +52 -0
  269. data/lib/arel/nodes/bind_param.rb +36 -0
  270. data/lib/arel/nodes/case.rb +55 -0
  271. data/lib/arel/nodes/casted.rb +50 -0
  272. data/lib/arel/nodes/comment.rb +29 -0
  273. data/lib/arel/nodes/count.rb +12 -0
  274. data/lib/arel/nodes/delete_statement.rb +45 -0
  275. data/lib/arel/nodes/descending.rb +23 -0
  276. data/lib/arel/nodes/equality.rb +18 -0
  277. data/lib/arel/nodes/extract.rb +24 -0
  278. data/lib/arel/nodes/false.rb +16 -0
  279. data/lib/arel/nodes/full_outer_join.rb +8 -0
  280. data/lib/arel/nodes/function.rb +44 -0
  281. data/lib/arel/nodes/grouping.rb +8 -0
  282. data/lib/arel/nodes/in.rb +8 -0
  283. data/lib/arel/nodes/infix_operation.rb +80 -0
  284. data/lib/arel/nodes/inner_join.rb +8 -0
  285. data/lib/arel/nodes/insert_statement.rb +37 -0
  286. data/lib/arel/nodes/join_source.rb +20 -0
  287. data/lib/arel/nodes/matches.rb +18 -0
  288. data/lib/arel/nodes/named_function.rb +23 -0
  289. data/lib/arel/nodes/node.rb +50 -0
  290. data/lib/arel/nodes/node_expression.rb +13 -0
  291. data/lib/arel/nodes/outer_join.rb +8 -0
  292. data/lib/arel/nodes/over.rb +15 -0
  293. data/lib/arel/nodes/regexp.rb +16 -0
  294. data/lib/arel/nodes/right_outer_join.rb +8 -0
  295. data/lib/arel/nodes/select_core.rb +67 -0
  296. data/lib/arel/nodes/select_statement.rb +41 -0
  297. data/lib/arel/nodes/sql_literal.rb +16 -0
  298. data/lib/arel/nodes/string_join.rb +11 -0
  299. data/lib/arel/nodes/table_alias.rb +27 -0
  300. data/lib/arel/nodes/terminal.rb +16 -0
  301. data/lib/arel/nodes/true.rb +16 -0
  302. data/lib/arel/nodes/unary.rb +45 -0
  303. data/lib/arel/nodes/unary_operation.rb +20 -0
  304. data/lib/arel/nodes/unqualified_column.rb +22 -0
  305. data/lib/arel/nodes/update_statement.rb +41 -0
  306. data/lib/arel/nodes/values_list.rb +9 -0
  307. data/lib/arel/nodes/window.rb +126 -0
  308. data/lib/arel/nodes/with.rb +11 -0
  309. data/lib/arel/order_predications.rb +13 -0
  310. data/lib/arel/predications.rb +256 -0
  311. data/lib/arel/select_manager.rb +271 -0
  312. data/lib/arel/table.rb +110 -0
  313. data/lib/arel/tree_manager.rb +72 -0
  314. data/lib/arel/update_manager.rb +34 -0
  315. data/lib/arel/visitors.rb +20 -0
  316. data/lib/arel/visitors/depth_first.rb +203 -0
  317. data/lib/arel/visitors/dot.rb +296 -0
  318. data/lib/arel/visitors/ibm_db.rb +34 -0
  319. data/lib/arel/visitors/informix.rb +62 -0
  320. data/lib/arel/visitors/mssql.rb +156 -0
  321. data/lib/arel/visitors/mysql.rb +83 -0
  322. data/lib/arel/visitors/oracle.rb +158 -0
  323. data/lib/arel/visitors/oracle12.rb +65 -0
  324. data/lib/arel/visitors/postgresql.rb +109 -0
  325. data/lib/arel/visitors/sqlite.rb +38 -0
  326. data/lib/arel/visitors/to_sql.rb +888 -0
  327. data/lib/arel/visitors/visitor.rb +45 -0
  328. data/lib/arel/visitors/where_sql.rb +22 -0
  329. data/lib/arel/window_predications.rb +9 -0
  330. data/lib/rails/generators/active_record.rb +7 -5
  331. data/lib/rails/generators/active_record/application_record/application_record_generator.rb +26 -0
  332. data/lib/rails/generators/active_record/{model/templates/application_record.rb → application_record/templates/application_record.rb.tt} +0 -0
  333. data/lib/rails/generators/active_record/migration.rb +17 -3
  334. data/lib/rails/generators/active_record/migration/migration_generator.rb +37 -35
  335. data/lib/rails/generators/active_record/migration/templates/{create_table_migration.rb → create_table_migration.rb.tt} +1 -1
  336. data/lib/rails/generators/active_record/migration/templates/{migration.rb → migration.rb.tt} +4 -2
  337. data/lib/rails/generators/active_record/model/model_generator.rb +9 -30
  338. data/lib/rails/generators/active_record/model/templates/{model.rb → model.rb.tt} +10 -1
  339. data/lib/rails/generators/active_record/model/templates/{module.rb → module.rb.tt} +0 -0
  340. metadata +137 -52
  341. data/lib/active_record/associations/preloader/belongs_to.rb +0 -17
  342. data/lib/active_record/associations/preloader/collection_association.rb +0 -17
  343. data/lib/active_record/associations/preloader/has_many.rb +0 -17
  344. data/lib/active_record/associations/preloader/has_many_through.rb +0 -19
  345. data/lib/active_record/associations/preloader/has_one.rb +0 -15
  346. data/lib/active_record/associations/preloader/has_one_through.rb +0 -9
  347. data/lib/active_record/associations/preloader/singular_association.rb +0 -20
  348. data/lib/active_record/attribute.rb +0 -213
  349. data/lib/active_record/attribute/user_provided_default.rb +0 -28
  350. data/lib/active_record/attribute_mutation_tracker.rb +0 -70
  351. data/lib/active_record/attribute_set.rb +0 -110
  352. data/lib/active_record/attribute_set/builder.rb +0 -132
  353. data/lib/active_record/collection_cache_key.rb +0 -50
  354. data/lib/active_record/connection_adapters/postgresql/oid/rails_5_1_point.rb +0 -50
  355. data/lib/active_record/railties/jdbcmysql_error.rb +0 -16
  356. data/lib/active_record/relation/predicate_builder/association_query_handler.rb +0 -88
  357. data/lib/active_record/relation/predicate_builder/class_handler.rb +0 -27
  358. data/lib/active_record/relation/predicate_builder/polymorphic_array_handler.rb +0 -57
  359. data/lib/active_record/type/internal/abstract_json.rb +0 -33
@@ -1,132 +0,0 @@
1
- require 'active_record/attribute'
2
-
3
- module ActiveRecord
4
- class AttributeSet # :nodoc:
5
- class Builder # :nodoc:
6
- attr_reader :types, :default_attributes
7
-
8
- def initialize(types, default_attributes = {})
9
- @types = types
10
- @default_attributes = default_attributes
11
- end
12
-
13
- def build_from_database(values = {}, additional_types = {})
14
- attributes = LazyAttributeHash.new(types, values, additional_types, default_attributes)
15
- AttributeSet.new(attributes)
16
- end
17
- end
18
- end
19
-
20
- class LazyAttributeHash # :nodoc:
21
- delegate :transform_values, :each_key, :fetch, :except, to: :materialize
22
-
23
- def initialize(types, values, additional_types, default_attributes, delegate_hash = {})
24
- @types = types
25
- @values = values
26
- @additional_types = additional_types
27
- @materialized = false
28
- @delegate_hash = delegate_hash
29
- @default_attributes = default_attributes
30
- end
31
-
32
- def key?(key)
33
- delegate_hash.key?(key) || values.key?(key) || types.key?(key)
34
- end
35
-
36
- def [](key)
37
- delegate_hash[key] || assign_default_value(key)
38
- end
39
-
40
- def []=(key, value)
41
- if frozen?
42
- raise RuntimeError, "Can't modify frozen hash"
43
- end
44
- delegate_hash[key] = value
45
- end
46
-
47
- def deep_dup
48
- dup.tap do |copy|
49
- copy.instance_variable_set(:@delegate_hash, delegate_hash.transform_values(&:dup))
50
- end
51
- end
52
-
53
- def initialize_dup(_)
54
- @delegate_hash = Hash[delegate_hash]
55
- super
56
- end
57
-
58
- def select
59
- keys = types.keys | values.keys | delegate_hash.keys
60
- keys.each_with_object({}) do |key, hash|
61
- attribute = self[key]
62
- if yield(key, attribute)
63
- hash[key] = attribute
64
- end
65
- end
66
- end
67
-
68
- def ==(other)
69
- if other.is_a?(LazyAttributeHash)
70
- materialize == other.materialize
71
- else
72
- materialize == other
73
- end
74
- end
75
-
76
- def marshal_dump
77
- [@types, @values, @additional_types, @default_attributes, @delegate_hash]
78
- end
79
-
80
- def marshal_load(values)
81
- if values.is_a?(Hash)
82
- empty_hash = {}.freeze
83
- initialize(empty_hash, empty_hash, empty_hash, empty_hash, values)
84
- @materialized = true
85
- else
86
- initialize(*values)
87
- end
88
- end
89
-
90
- def encode_with(coder)
91
- coder["delegate_hash"] = materialize
92
- end
93
-
94
- def init_with(coder)
95
- marshal_load(coder["delegate_hash"])
96
- end
97
-
98
- protected
99
-
100
- attr_reader :types, :values, :additional_types, :delegate_hash, :default_attributes
101
-
102
- def materialize
103
- unless @materialized
104
- values.each_key { |key| self[key] }
105
- types.each_key { |key| self[key] }
106
- unless frozen?
107
- @materialized = true
108
- end
109
- end
110
- delegate_hash
111
- end
112
-
113
- private
114
-
115
- def assign_default_value(name)
116
- type = additional_types.fetch(name, types[name])
117
- value_present = true
118
- value = values.fetch(name) { value_present = false }
119
-
120
- if value_present
121
- delegate_hash[name] = Attribute.from_database(name, value, type)
122
- elsif types.key?(name)
123
- attr = default_attributes[name]
124
- if attr
125
- delegate_hash[name] = attr.dup
126
- else
127
- delegate_hash[name] = Attribute.uninitialized(name, type)
128
- end
129
- end
130
- end
131
- end
132
- end
@@ -1,50 +0,0 @@
1
- module ActiveRecord
2
- module CollectionCacheKey
3
-
4
- def collection_cache_key(collection = all, timestamp_column = :updated_at) # :nodoc:
5
- query_signature = Digest::MD5.hexdigest(collection.to_sql)
6
- key = "#{collection.model_name.cache_key}/query-#{query_signature}"
7
-
8
- if collection.loaded?
9
- size = collection.size
10
- if size > 0
11
- timestamp = collection.max_by(&timestamp_column)._read_attribute(timestamp_column)
12
- end
13
- else
14
- column_type = type_for_attribute(timestamp_column.to_s)
15
- column = "#{connection.quote_table_name(collection.table_name)}.#{connection.quote_column_name(timestamp_column)}"
16
- select_values = "COUNT(*) AS #{connection.quote_column_name("size")}, MAX(%s) AS timestamp"
17
-
18
- if collection.limit_value || collection.offset_value
19
- query = collection.spawn
20
- query.select_values = [column]
21
- subquery_alias = "subquery_for_cache_key"
22
- subquery_column = "#{subquery_alias}.#{timestamp_column}"
23
- subquery = query.arel.as(subquery_alias)
24
- arel = Arel::SelectManager.new(query.engine).project(select_values % subquery_column).from(subquery)
25
- else
26
- query = collection.unscope(:order)
27
- query.select_values = [select_values % column]
28
- arel = query.arel
29
- end
30
-
31
- result = connection.select_one(arel, nil, query.bound_attributes)
32
-
33
- if result.blank?
34
- size = 0
35
- timestamp = nil
36
- else
37
- size = result["size"]
38
- timestamp = column_type.deserialize(result["timestamp"])
39
- end
40
-
41
- end
42
-
43
- if timestamp
44
- "#{key}-#{size}-#{timestamp.utc.to_s(cache_timestamp_format)}"
45
- else
46
- "#{key}-#{size}"
47
- end
48
- end
49
- end
50
- end
@@ -1,50 +0,0 @@
1
- module ActiveRecord
2
- Point = Struct.new(:x, :y)
3
-
4
- module ConnectionAdapters
5
- module PostgreSQL
6
- module OID # :nodoc:
7
- class Rails51Point < Type::Value # :nodoc:
8
- include Type::Helpers::Mutable
9
-
10
- def type
11
- :point
12
- end
13
-
14
- def cast(value)
15
- case value
16
- when ::String
17
- if value[0] == '(' && value[-1] == ')'
18
- value = value[1...-1]
19
- end
20
- x, y = value.split(",")
21
- build_point(x, y)
22
- when ::Array
23
- build_point(*value)
24
- else
25
- value
26
- end
27
- end
28
-
29
- def serialize(value)
30
- if value.is_a?(ActiveRecord::Point)
31
- "(#{number_for_point(value.x)},#{number_for_point(value.y)})"
32
- else
33
- super
34
- end
35
- end
36
-
37
- private
38
-
39
- def number_for_point(number)
40
- number.to_s.gsub(/\.0$/, '')
41
- end
42
-
43
- def build_point(x, y)
44
- ActiveRecord::Point.new(Float(x), Float(y))
45
- end
46
- end
47
- end
48
- end
49
- end
50
- end
@@ -1,16 +0,0 @@
1
- #FIXME Remove if ArJdbcMysql will give.
2
- module ArJdbcMySQL #:nodoc:
3
- class Error < StandardError #:nodoc:
4
- attr_accessor :error_number, :sql_state
5
-
6
- def initialize msg
7
- super
8
- @error_number = nil
9
- @sql_state = nil
10
- end
11
-
12
- # Mysql gem compatibility
13
- alias_method :errno, :error_number
14
- alias_method :error, :message
15
- end
16
- end
@@ -1,88 +0,0 @@
1
- module ActiveRecord
2
- class PredicateBuilder
3
- class AssociationQueryHandler # :nodoc:
4
- def self.value_for(table, column, value)
5
- klass = if table.associated_table(column).polymorphic_association? && ::Array === value && value.first.is_a?(Base)
6
- PolymorphicArrayValue
7
- else
8
- AssociationQueryValue
9
- end
10
-
11
- klass.new(table.associated_table(column), value)
12
- end
13
-
14
- def initialize(predicate_builder)
15
- @predicate_builder = predicate_builder
16
- end
17
-
18
- def call(attribute, value)
19
- queries = {}
20
-
21
- table = value.associated_table
22
- if value.base_class
23
- queries[table.association_foreign_type.to_s] = value.base_class.name
24
- end
25
-
26
- queries[table.association_foreign_key.to_s] = value.ids
27
- predicate_builder.build_from_hash(queries)
28
- end
29
-
30
- protected
31
-
32
- attr_reader :predicate_builder
33
- end
34
-
35
- class AssociationQueryValue # :nodoc:
36
- attr_reader :associated_table, :value
37
-
38
- def initialize(associated_table, value)
39
- @associated_table = associated_table
40
- @value = value
41
- end
42
-
43
- def ids
44
- case value
45
- when Relation
46
- value.select(primary_key)
47
- when Array
48
- value.map { |v| convert_to_id(v) }
49
- else
50
- convert_to_id(value)
51
- end
52
- end
53
-
54
- def base_class
55
- if associated_table.polymorphic_association?
56
- @base_class ||= polymorphic_base_class_from_value
57
- end
58
- end
59
-
60
- private
61
-
62
- def primary_key
63
- associated_table.association_primary_key(base_class)
64
- end
65
-
66
- def polymorphic_base_class_from_value
67
- case value
68
- when Relation
69
- value.klass.base_class
70
- when Array
71
- val = value.compact.first
72
- val.class.base_class if val.is_a?(Base)
73
- when Base
74
- value.class.base_class
75
- end
76
- end
77
-
78
- def convert_to_id(value)
79
- case value
80
- when Base
81
- value._read_attribute(primary_key)
82
- else
83
- value
84
- end
85
- end
86
- end
87
- end
88
- end
@@ -1,27 +0,0 @@
1
- module ActiveRecord
2
- class PredicateBuilder
3
- class ClassHandler # :nodoc:
4
- def initialize(predicate_builder)
5
- @predicate_builder = predicate_builder
6
- end
7
-
8
- def call(attribute, value)
9
- print_deprecation_warning
10
- predicate_builder.build(attribute, value.name)
11
- end
12
-
13
- protected
14
-
15
- attr_reader :predicate_builder
16
-
17
- private
18
-
19
- def print_deprecation_warning
20
- ActiveSupport::Deprecation.warn(<<-MSG.squish)
21
- Passing a class as a value in an Active Record query is deprecated and
22
- will be removed. Pass a string instead.
23
- MSG
24
- end
25
- end
26
- end
27
- end
@@ -1,57 +0,0 @@
1
- module ActiveRecord
2
- class PredicateBuilder
3
- class PolymorphicArrayHandler # :nodoc:
4
- def initialize(predicate_builder)
5
- @predicate_builder = predicate_builder
6
- end
7
-
8
- def call(attribute, value)
9
- table = value.associated_table
10
- queries = value.type_to_ids_mapping.map do |type, ids|
11
- { table.association_foreign_type.to_s => type, table.association_foreign_key.to_s => ids }
12
- end
13
-
14
- predicates = queries.map { |query| predicate_builder.build_from_hash(query) }
15
-
16
- if predicates.size > 1
17
- type_and_ids_predicates = predicates.map { |type_predicate, id_predicate| Arel::Nodes::Grouping.new(type_predicate.and(id_predicate)) }
18
- type_and_ids_predicates.inject(&:or)
19
- else
20
- predicates.first
21
- end
22
- end
23
-
24
- protected
25
-
26
- attr_reader :predicate_builder
27
- end
28
-
29
- class PolymorphicArrayValue # :nodoc:
30
- attr_reader :associated_table, :values
31
-
32
- def initialize(associated_table, values)
33
- @associated_table = associated_table
34
- @values = values
35
- end
36
-
37
- def type_to_ids_mapping
38
- default_hash = Hash.new { |hsh, key| hsh[key] = [] }
39
- values.each_with_object(default_hash) { |value, hash| hash[base_class(value).name] << convert_to_id(value) }
40
- end
41
-
42
- private
43
-
44
- def primary_key(value)
45
- associated_table.association_primary_key(base_class(value))
46
- end
47
-
48
- def base_class(value)
49
- value.class.base_class
50
- end
51
-
52
- def convert_to_id(value)
53
- value._read_attribute(primary_key(value))
54
- end
55
- end
56
- end
57
- end
@@ -1,33 +0,0 @@
1
- module ActiveRecord
2
- module Type
3
- module Internal # :nodoc:
4
- class AbstractJson < ActiveModel::Type::Value # :nodoc:
5
- include ActiveModel::Type::Helpers::Mutable
6
-
7
- def type
8
- :json
9
- end
10
-
11
- def deserialize(value)
12
- if value.is_a?(::String)
13
- ::ActiveSupport::JSON.decode(value) rescue nil
14
- else
15
- value
16
- end
17
- end
18
-
19
- def serialize(value)
20
- if value.nil?
21
- nil
22
- else
23
- ::ActiveSupport::JSON.encode(value)
24
- end
25
- end
26
-
27
- def accessor
28
- ActiveRecord::Store::StringKeyedHashAccessor
29
- end
30
- end
31
- end
32
- end
33
- end