omg-activerecord 8.0.0.alpha1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (412) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +355 -0
  3. data/MIT-LICENSE +22 -0
  4. data/README.rdoc +219 -0
  5. data/examples/performance.rb +185 -0
  6. data/examples/simple.rb +15 -0
  7. data/lib/active_record/aggregations.rb +287 -0
  8. data/lib/active_record/association_relation.rb +50 -0
  9. data/lib/active_record/associations/alias_tracker.rb +90 -0
  10. data/lib/active_record/associations/association.rb +417 -0
  11. data/lib/active_record/associations/association_scope.rb +175 -0
  12. data/lib/active_record/associations/belongs_to_association.rb +163 -0
  13. data/lib/active_record/associations/belongs_to_polymorphic_association.rb +50 -0
  14. data/lib/active_record/associations/builder/association.rb +170 -0
  15. data/lib/active_record/associations/builder/belongs_to.rb +160 -0
  16. data/lib/active_record/associations/builder/collection_association.rb +80 -0
  17. data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +107 -0
  18. data/lib/active_record/associations/builder/has_many.rb +23 -0
  19. data/lib/active_record/associations/builder/has_one.rb +61 -0
  20. data/lib/active_record/associations/builder/singular_association.rb +48 -0
  21. data/lib/active_record/associations/collection_association.rb +535 -0
  22. data/lib/active_record/associations/collection_proxy.rb +1163 -0
  23. data/lib/active_record/associations/disable_joins_association_scope.rb +59 -0
  24. data/lib/active_record/associations/errors.rb +265 -0
  25. data/lib/active_record/associations/foreign_association.rb +40 -0
  26. data/lib/active_record/associations/has_many_association.rb +167 -0
  27. data/lib/active_record/associations/has_many_through_association.rb +232 -0
  28. data/lib/active_record/associations/has_one_association.rb +142 -0
  29. data/lib/active_record/associations/has_one_through_association.rb +45 -0
  30. data/lib/active_record/associations/join_dependency/join_association.rb +106 -0
  31. data/lib/active_record/associations/join_dependency/join_base.rb +23 -0
  32. data/lib/active_record/associations/join_dependency/join_part.rb +71 -0
  33. data/lib/active_record/associations/join_dependency.rb +301 -0
  34. data/lib/active_record/associations/nested_error.rb +47 -0
  35. data/lib/active_record/associations/preloader/association.rb +316 -0
  36. data/lib/active_record/associations/preloader/batch.rb +48 -0
  37. data/lib/active_record/associations/preloader/branch.rb +153 -0
  38. data/lib/active_record/associations/preloader/through_association.rb +150 -0
  39. data/lib/active_record/associations/preloader.rb +135 -0
  40. data/lib/active_record/associations/singular_association.rb +76 -0
  41. data/lib/active_record/associations/through_association.rb +132 -0
  42. data/lib/active_record/associations.rb +1897 -0
  43. data/lib/active_record/asynchronous_queries_tracker.rb +64 -0
  44. data/lib/active_record/attribute_assignment.rb +82 -0
  45. data/lib/active_record/attribute_methods/before_type_cast.rb +106 -0
  46. data/lib/active_record/attribute_methods/composite_primary_key.rb +84 -0
  47. data/lib/active_record/attribute_methods/dirty.rb +262 -0
  48. data/lib/active_record/attribute_methods/primary_key.rb +158 -0
  49. data/lib/active_record/attribute_methods/query.rb +50 -0
  50. data/lib/active_record/attribute_methods/read.rb +46 -0
  51. data/lib/active_record/attribute_methods/serialization.rb +232 -0
  52. data/lib/active_record/attribute_methods/time_zone_conversion.rb +94 -0
  53. data/lib/active_record/attribute_methods/write.rb +49 -0
  54. data/lib/active_record/attribute_methods.rb +542 -0
  55. data/lib/active_record/attributes.rb +307 -0
  56. data/lib/active_record/autosave_association.rb +586 -0
  57. data/lib/active_record/base.rb +338 -0
  58. data/lib/active_record/callbacks.rb +452 -0
  59. data/lib/active_record/coders/column_serializer.rb +61 -0
  60. data/lib/active_record/coders/json.rb +15 -0
  61. data/lib/active_record/coders/yaml_column.rb +95 -0
  62. data/lib/active_record/connection_adapters/abstract/connection_handler.rb +290 -0
  63. data/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb +210 -0
  64. data/lib/active_record/connection_adapters/abstract/connection_pool/reaper.rb +78 -0
  65. data/lib/active_record/connection_adapters/abstract/connection_pool.rb +923 -0
  66. data/lib/active_record/connection_adapters/abstract/database_limits.rb +31 -0
  67. data/lib/active_record/connection_adapters/abstract/database_statements.rb +747 -0
  68. data/lib/active_record/connection_adapters/abstract/query_cache.rb +319 -0
  69. data/lib/active_record/connection_adapters/abstract/quoting.rb +239 -0
  70. data/lib/active_record/connection_adapters/abstract/savepoints.rb +24 -0
  71. data/lib/active_record/connection_adapters/abstract/schema_creation.rb +190 -0
  72. data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +961 -0
  73. data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +106 -0
  74. data/lib/active_record/connection_adapters/abstract/schema_statements.rb +1883 -0
  75. data/lib/active_record/connection_adapters/abstract/transaction.rb +676 -0
  76. data/lib/active_record/connection_adapters/abstract_adapter.rb +1218 -0
  77. data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +1016 -0
  78. data/lib/active_record/connection_adapters/column.rb +122 -0
  79. data/lib/active_record/connection_adapters/deduplicable.rb +29 -0
  80. data/lib/active_record/connection_adapters/mysql/column.rb +28 -0
  81. data/lib/active_record/connection_adapters/mysql/database_statements.rb +95 -0
  82. data/lib/active_record/connection_adapters/mysql/explain_pretty_printer.rb +71 -0
  83. data/lib/active_record/connection_adapters/mysql/quoting.rb +114 -0
  84. data/lib/active_record/connection_adapters/mysql/schema_creation.rb +106 -0
  85. data/lib/active_record/connection_adapters/mysql/schema_definitions.rb +106 -0
  86. data/lib/active_record/connection_adapters/mysql/schema_dumper.rb +97 -0
  87. data/lib/active_record/connection_adapters/mysql/schema_statements.rb +300 -0
  88. data/lib/active_record/connection_adapters/mysql/type_metadata.rb +40 -0
  89. data/lib/active_record/connection_adapters/mysql2/database_statements.rb +96 -0
  90. data/lib/active_record/connection_adapters/mysql2_adapter.rb +196 -0
  91. data/lib/active_record/connection_adapters/pool_config.rb +83 -0
  92. data/lib/active_record/connection_adapters/pool_manager.rb +57 -0
  93. data/lib/active_record/connection_adapters/postgresql/column.rb +82 -0
  94. data/lib/active_record/connection_adapters/postgresql/database_statements.rb +231 -0
  95. data/lib/active_record/connection_adapters/postgresql/explain_pretty_printer.rb +44 -0
  96. data/lib/active_record/connection_adapters/postgresql/oid/array.rb +91 -0
  97. data/lib/active_record/connection_adapters/postgresql/oid/bit.rb +53 -0
  98. data/lib/active_record/connection_adapters/postgresql/oid/bit_varying.rb +15 -0
  99. data/lib/active_record/connection_adapters/postgresql/oid/bytea.rb +17 -0
  100. data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +54 -0
  101. data/lib/active_record/connection_adapters/postgresql/oid/date.rb +31 -0
  102. data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +36 -0
  103. data/lib/active_record/connection_adapters/postgresql/oid/decimal.rb +15 -0
  104. data/lib/active_record/connection_adapters/postgresql/oid/enum.rb +20 -0
  105. data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +109 -0
  106. data/lib/active_record/connection_adapters/postgresql/oid/inet.rb +15 -0
  107. data/lib/active_record/connection_adapters/postgresql/oid/interval.rb +49 -0
  108. data/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +15 -0
  109. data/lib/active_record/connection_adapters/postgresql/oid/legacy_point.rb +44 -0
  110. data/lib/active_record/connection_adapters/postgresql/oid/macaddr.rb +25 -0
  111. data/lib/active_record/connection_adapters/postgresql/oid/money.rb +42 -0
  112. data/lib/active_record/connection_adapters/postgresql/oid/oid.rb +15 -0
  113. data/lib/active_record/connection_adapters/postgresql/oid/point.rb +74 -0
  114. data/lib/active_record/connection_adapters/postgresql/oid/range.rb +124 -0
  115. data/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb +18 -0
  116. data/lib/active_record/connection_adapters/postgresql/oid/timestamp.rb +15 -0
  117. data/lib/active_record/connection_adapters/postgresql/oid/timestamp_with_time_zone.rb +30 -0
  118. data/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +125 -0
  119. data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +45 -0
  120. data/lib/active_record/connection_adapters/postgresql/oid/vector.rb +28 -0
  121. data/lib/active_record/connection_adapters/postgresql/oid/xml.rb +30 -0
  122. data/lib/active_record/connection_adapters/postgresql/oid.rb +38 -0
  123. data/lib/active_record/connection_adapters/postgresql/quoting.rb +238 -0
  124. data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +71 -0
  125. data/lib/active_record/connection_adapters/postgresql/schema_creation.rb +169 -0
  126. data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +392 -0
  127. data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +127 -0
  128. data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +1162 -0
  129. data/lib/active_record/connection_adapters/postgresql/type_metadata.rb +44 -0
  130. data/lib/active_record/connection_adapters/postgresql/utils.rb +79 -0
  131. data/lib/active_record/connection_adapters/postgresql_adapter.rb +1182 -0
  132. data/lib/active_record/connection_adapters/schema_cache.rb +478 -0
  133. data/lib/active_record/connection_adapters/sql_type_metadata.rb +45 -0
  134. data/lib/active_record/connection_adapters/sqlite3/column.rb +62 -0
  135. data/lib/active_record/connection_adapters/sqlite3/database_statements.rb +145 -0
  136. data/lib/active_record/connection_adapters/sqlite3/explain_pretty_printer.rb +21 -0
  137. data/lib/active_record/connection_adapters/sqlite3/quoting.rb +116 -0
  138. data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +37 -0
  139. data/lib/active_record/connection_adapters/sqlite3/schema_definitions.rb +39 -0
  140. data/lib/active_record/connection_adapters/sqlite3/schema_dumper.rb +47 -0
  141. data/lib/active_record/connection_adapters/sqlite3/schema_statements.rb +221 -0
  142. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +843 -0
  143. data/lib/active_record/connection_adapters/statement_pool.rb +67 -0
  144. data/lib/active_record/connection_adapters/trilogy/database_statements.rb +69 -0
  145. data/lib/active_record/connection_adapters/trilogy_adapter.rb +212 -0
  146. data/lib/active_record/connection_adapters.rb +176 -0
  147. data/lib/active_record/connection_handling.rb +413 -0
  148. data/lib/active_record/core.rb +836 -0
  149. data/lib/active_record/counter_cache.rb +230 -0
  150. data/lib/active_record/database_configurations/connection_url_resolver.rb +105 -0
  151. data/lib/active_record/database_configurations/database_config.rb +104 -0
  152. data/lib/active_record/database_configurations/hash_config.rb +172 -0
  153. data/lib/active_record/database_configurations/url_config.rb +78 -0
  154. data/lib/active_record/database_configurations.rb +309 -0
  155. data/lib/active_record/delegated_type.rb +289 -0
  156. data/lib/active_record/deprecator.rb +7 -0
  157. data/lib/active_record/destroy_association_async_job.rb +38 -0
  158. data/lib/active_record/disable_joins_association_relation.rb +39 -0
  159. data/lib/active_record/dynamic_matchers.rb +121 -0
  160. data/lib/active_record/encryption/auto_filtered_parameters.rb +66 -0
  161. data/lib/active_record/encryption/cipher/aes256_gcm.rb +101 -0
  162. data/lib/active_record/encryption/cipher.rb +53 -0
  163. data/lib/active_record/encryption/config.rb +70 -0
  164. data/lib/active_record/encryption/configurable.rb +60 -0
  165. data/lib/active_record/encryption/context.rb +42 -0
  166. data/lib/active_record/encryption/contexts.rb +76 -0
  167. data/lib/active_record/encryption/derived_secret_key_provider.rb +18 -0
  168. data/lib/active_record/encryption/deterministic_key_provider.rb +14 -0
  169. data/lib/active_record/encryption/encryptable_record.rb +230 -0
  170. data/lib/active_record/encryption/encrypted_attribute_type.rb +184 -0
  171. data/lib/active_record/encryption/encrypted_fixtures.rb +38 -0
  172. data/lib/active_record/encryption/encrypting_only_encryptor.rb +12 -0
  173. data/lib/active_record/encryption/encryptor.rb +177 -0
  174. data/lib/active_record/encryption/envelope_encryption_key_provider.rb +55 -0
  175. data/lib/active_record/encryption/errors.rb +15 -0
  176. data/lib/active_record/encryption/extended_deterministic_queries.rb +159 -0
  177. data/lib/active_record/encryption/extended_deterministic_uniqueness_validator.rb +28 -0
  178. data/lib/active_record/encryption/key.rb +28 -0
  179. data/lib/active_record/encryption/key_generator.rb +53 -0
  180. data/lib/active_record/encryption/key_provider.rb +46 -0
  181. data/lib/active_record/encryption/message.rb +33 -0
  182. data/lib/active_record/encryption/message_pack_message_serializer.rb +76 -0
  183. data/lib/active_record/encryption/message_serializer.rb +96 -0
  184. data/lib/active_record/encryption/null_encryptor.rb +25 -0
  185. data/lib/active_record/encryption/properties.rb +76 -0
  186. data/lib/active_record/encryption/read_only_null_encryptor.rb +28 -0
  187. data/lib/active_record/encryption/scheme.rb +107 -0
  188. data/lib/active_record/encryption.rb +58 -0
  189. data/lib/active_record/enum.rb +424 -0
  190. data/lib/active_record/errors.rb +614 -0
  191. data/lib/active_record/explain.rb +63 -0
  192. data/lib/active_record/explain_registry.rb +37 -0
  193. data/lib/active_record/explain_subscriber.rb +34 -0
  194. data/lib/active_record/fixture_set/file.rb +89 -0
  195. data/lib/active_record/fixture_set/model_metadata.rb +42 -0
  196. data/lib/active_record/fixture_set/render_context.rb +19 -0
  197. data/lib/active_record/fixture_set/table_row.rb +208 -0
  198. data/lib/active_record/fixture_set/table_rows.rb +46 -0
  199. data/lib/active_record/fixtures.rb +850 -0
  200. data/lib/active_record/future_result.rb +182 -0
  201. data/lib/active_record/gem_version.rb +17 -0
  202. data/lib/active_record/inheritance.rb +366 -0
  203. data/lib/active_record/insert_all.rb +328 -0
  204. data/lib/active_record/integration.rb +209 -0
  205. data/lib/active_record/internal_metadata.rb +164 -0
  206. data/lib/active_record/legacy_yaml_adapter.rb +15 -0
  207. data/lib/active_record/locale/en.yml +48 -0
  208. data/lib/active_record/locking/optimistic.rb +228 -0
  209. data/lib/active_record/locking/pessimistic.rb +102 -0
  210. data/lib/active_record/log_subscriber.rb +149 -0
  211. data/lib/active_record/marshalling.rb +56 -0
  212. data/lib/active_record/message_pack.rb +124 -0
  213. data/lib/active_record/middleware/database_selector/resolver/session.rb +48 -0
  214. data/lib/active_record/middleware/database_selector/resolver.rb +92 -0
  215. data/lib/active_record/middleware/database_selector.rb +87 -0
  216. data/lib/active_record/middleware/shard_selector.rb +62 -0
  217. data/lib/active_record/migration/command_recorder.rb +406 -0
  218. data/lib/active_record/migration/compatibility.rb +490 -0
  219. data/lib/active_record/migration/default_strategy.rb +22 -0
  220. data/lib/active_record/migration/execution_strategy.rb +19 -0
  221. data/lib/active_record/migration/join_table.rb +16 -0
  222. data/lib/active_record/migration/pending_migration_connection.rb +21 -0
  223. data/lib/active_record/migration.rb +1626 -0
  224. data/lib/active_record/model_schema.rb +635 -0
  225. data/lib/active_record/nested_attributes.rb +633 -0
  226. data/lib/active_record/no_touching.rb +65 -0
  227. data/lib/active_record/normalization.rb +163 -0
  228. data/lib/active_record/persistence.rb +968 -0
  229. data/lib/active_record/promise.rb +84 -0
  230. data/lib/active_record/query_cache.rb +56 -0
  231. data/lib/active_record/query_logs.rb +247 -0
  232. data/lib/active_record/query_logs_formatter.rb +30 -0
  233. data/lib/active_record/querying.rb +122 -0
  234. data/lib/active_record/railtie.rb +440 -0
  235. data/lib/active_record/railties/console_sandbox.rb +5 -0
  236. data/lib/active_record/railties/controller_runtime.rb +65 -0
  237. data/lib/active_record/railties/databases.rake +641 -0
  238. data/lib/active_record/railties/job_runtime.rb +23 -0
  239. data/lib/active_record/readonly_attributes.rb +66 -0
  240. data/lib/active_record/reflection.rb +1287 -0
  241. data/lib/active_record/relation/batches/batch_enumerator.rb +115 -0
  242. data/lib/active_record/relation/batches.rb +491 -0
  243. data/lib/active_record/relation/calculations.rb +679 -0
  244. data/lib/active_record/relation/delegation.rb +154 -0
  245. data/lib/active_record/relation/finder_methods.rb +661 -0
  246. data/lib/active_record/relation/from_clause.rb +30 -0
  247. data/lib/active_record/relation/merger.rb +192 -0
  248. data/lib/active_record/relation/predicate_builder/array_handler.rb +48 -0
  249. data/lib/active_record/relation/predicate_builder/association_query_value.rb +76 -0
  250. data/lib/active_record/relation/predicate_builder/basic_object_handler.rb +19 -0
  251. data/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb +60 -0
  252. data/lib/active_record/relation/predicate_builder/range_handler.rb +22 -0
  253. data/lib/active_record/relation/predicate_builder/relation_handler.rb +24 -0
  254. data/lib/active_record/relation/predicate_builder.rb +181 -0
  255. data/lib/active_record/relation/query_attribute.rb +68 -0
  256. data/lib/active_record/relation/query_methods.rb +2235 -0
  257. data/lib/active_record/relation/record_fetch_warning.rb +52 -0
  258. data/lib/active_record/relation/spawn_methods.rb +78 -0
  259. data/lib/active_record/relation/where_clause.rb +218 -0
  260. data/lib/active_record/relation.rb +1495 -0
  261. data/lib/active_record/result.rb +249 -0
  262. data/lib/active_record/runtime_registry.rb +82 -0
  263. data/lib/active_record/sanitization.rb +254 -0
  264. data/lib/active_record/schema.rb +77 -0
  265. data/lib/active_record/schema_dumper.rb +364 -0
  266. data/lib/active_record/schema_migration.rb +106 -0
  267. data/lib/active_record/scoping/default.rb +205 -0
  268. data/lib/active_record/scoping/named.rb +202 -0
  269. data/lib/active_record/scoping.rb +136 -0
  270. data/lib/active_record/secure_password.rb +60 -0
  271. data/lib/active_record/secure_token.rb +66 -0
  272. data/lib/active_record/serialization.rb +29 -0
  273. data/lib/active_record/signed_id.rb +137 -0
  274. data/lib/active_record/statement_cache.rb +164 -0
  275. data/lib/active_record/store.rb +299 -0
  276. data/lib/active_record/suppressor.rb +59 -0
  277. data/lib/active_record/table_metadata.rb +85 -0
  278. data/lib/active_record/tasks/database_tasks.rb +681 -0
  279. data/lib/active_record/tasks/mysql_database_tasks.rb +120 -0
  280. data/lib/active_record/tasks/postgresql_database_tasks.rb +147 -0
  281. data/lib/active_record/tasks/sqlite_database_tasks.rb +89 -0
  282. data/lib/active_record/test_databases.rb +24 -0
  283. data/lib/active_record/test_fixtures.rb +321 -0
  284. data/lib/active_record/testing/query_assertions.rb +121 -0
  285. data/lib/active_record/timestamp.rb +177 -0
  286. data/lib/active_record/token_for.rb +123 -0
  287. data/lib/active_record/touch_later.rb +70 -0
  288. data/lib/active_record/transaction.rb +132 -0
  289. data/lib/active_record/transactions.rb +523 -0
  290. data/lib/active_record/translation.rb +22 -0
  291. data/lib/active_record/type/adapter_specific_registry.rb +144 -0
  292. data/lib/active_record/type/date.rb +9 -0
  293. data/lib/active_record/type/date_time.rb +9 -0
  294. data/lib/active_record/type/decimal_without_scale.rb +15 -0
  295. data/lib/active_record/type/hash_lookup_type_map.rb +57 -0
  296. data/lib/active_record/type/internal/timezone.rb +22 -0
  297. data/lib/active_record/type/json.rb +30 -0
  298. data/lib/active_record/type/serialized.rb +76 -0
  299. data/lib/active_record/type/text.rb +11 -0
  300. data/lib/active_record/type/time.rb +35 -0
  301. data/lib/active_record/type/type_map.rb +58 -0
  302. data/lib/active_record/type/unsigned_integer.rb +16 -0
  303. data/lib/active_record/type.rb +83 -0
  304. data/lib/active_record/type_caster/connection.rb +33 -0
  305. data/lib/active_record/type_caster/map.rb +23 -0
  306. data/lib/active_record/type_caster.rb +9 -0
  307. data/lib/active_record/validations/absence.rb +25 -0
  308. data/lib/active_record/validations/associated.rb +65 -0
  309. data/lib/active_record/validations/length.rb +26 -0
  310. data/lib/active_record/validations/numericality.rb +36 -0
  311. data/lib/active_record/validations/presence.rb +45 -0
  312. data/lib/active_record/validations/uniqueness.rb +295 -0
  313. data/lib/active_record/validations.rb +101 -0
  314. data/lib/active_record/version.rb +10 -0
  315. data/lib/active_record.rb +616 -0
  316. data/lib/arel/alias_predication.rb +9 -0
  317. data/lib/arel/attributes/attribute.rb +33 -0
  318. data/lib/arel/collectors/bind.rb +31 -0
  319. data/lib/arel/collectors/composite.rb +46 -0
  320. data/lib/arel/collectors/plain_string.rb +20 -0
  321. data/lib/arel/collectors/sql_string.rb +27 -0
  322. data/lib/arel/collectors/substitute_binds.rb +35 -0
  323. data/lib/arel/crud.rb +48 -0
  324. data/lib/arel/delete_manager.rb +32 -0
  325. data/lib/arel/errors.rb +19 -0
  326. data/lib/arel/expressions.rb +29 -0
  327. data/lib/arel/factory_methods.rb +53 -0
  328. data/lib/arel/filter_predications.rb +9 -0
  329. data/lib/arel/insert_manager.rb +48 -0
  330. data/lib/arel/math.rb +45 -0
  331. data/lib/arel/nodes/ascending.rb +23 -0
  332. data/lib/arel/nodes/binary.rb +125 -0
  333. data/lib/arel/nodes/bind_param.rb +44 -0
  334. data/lib/arel/nodes/bound_sql_literal.rb +65 -0
  335. data/lib/arel/nodes/case.rb +55 -0
  336. data/lib/arel/nodes/casted.rb +62 -0
  337. data/lib/arel/nodes/comment.rb +29 -0
  338. data/lib/arel/nodes/count.rb +12 -0
  339. data/lib/arel/nodes/cte.rb +36 -0
  340. data/lib/arel/nodes/delete_statement.rb +44 -0
  341. data/lib/arel/nodes/descending.rb +23 -0
  342. data/lib/arel/nodes/equality.rb +15 -0
  343. data/lib/arel/nodes/extract.rb +24 -0
  344. data/lib/arel/nodes/false.rb +16 -0
  345. data/lib/arel/nodes/filter.rb +10 -0
  346. data/lib/arel/nodes/fragments.rb +35 -0
  347. data/lib/arel/nodes/full_outer_join.rb +8 -0
  348. data/lib/arel/nodes/function.rb +45 -0
  349. data/lib/arel/nodes/grouping.rb +11 -0
  350. data/lib/arel/nodes/homogeneous_in.rb +68 -0
  351. data/lib/arel/nodes/in.rb +15 -0
  352. data/lib/arel/nodes/infix_operation.rb +92 -0
  353. data/lib/arel/nodes/inner_join.rb +8 -0
  354. data/lib/arel/nodes/insert_statement.rb +37 -0
  355. data/lib/arel/nodes/join_source.rb +20 -0
  356. data/lib/arel/nodes/leading_join.rb +8 -0
  357. data/lib/arel/nodes/matches.rb +18 -0
  358. data/lib/arel/nodes/named_function.rb +23 -0
  359. data/lib/arel/nodes/nary.rb +39 -0
  360. data/lib/arel/nodes/node.rb +161 -0
  361. data/lib/arel/nodes/node_expression.rb +13 -0
  362. data/lib/arel/nodes/ordering.rb +27 -0
  363. data/lib/arel/nodes/outer_join.rb +8 -0
  364. data/lib/arel/nodes/over.rb +15 -0
  365. data/lib/arel/nodes/regexp.rb +16 -0
  366. data/lib/arel/nodes/right_outer_join.rb +8 -0
  367. data/lib/arel/nodes/select_core.rb +67 -0
  368. data/lib/arel/nodes/select_statement.rb +41 -0
  369. data/lib/arel/nodes/sql_literal.rb +32 -0
  370. data/lib/arel/nodes/string_join.rb +11 -0
  371. data/lib/arel/nodes/table_alias.rb +35 -0
  372. data/lib/arel/nodes/terminal.rb +16 -0
  373. data/lib/arel/nodes/true.rb +16 -0
  374. data/lib/arel/nodes/unary.rb +44 -0
  375. data/lib/arel/nodes/unary_operation.rb +20 -0
  376. data/lib/arel/nodes/unqualified_column.rb +22 -0
  377. data/lib/arel/nodes/update_statement.rb +46 -0
  378. data/lib/arel/nodes/values_list.rb +9 -0
  379. data/lib/arel/nodes/window.rb +126 -0
  380. data/lib/arel/nodes/with.rb +11 -0
  381. data/lib/arel/nodes.rb +75 -0
  382. data/lib/arel/order_predications.rb +13 -0
  383. data/lib/arel/predications.rb +260 -0
  384. data/lib/arel/select_manager.rb +276 -0
  385. data/lib/arel/table.rb +121 -0
  386. data/lib/arel/tree_manager.rb +65 -0
  387. data/lib/arel/update_manager.rb +49 -0
  388. data/lib/arel/visitors/dot.rb +299 -0
  389. data/lib/arel/visitors/mysql.rb +111 -0
  390. data/lib/arel/visitors/postgresql.rb +99 -0
  391. data/lib/arel/visitors/sqlite.rb +38 -0
  392. data/lib/arel/visitors/to_sql.rb +1033 -0
  393. data/lib/arel/visitors/visitor.rb +45 -0
  394. data/lib/arel/visitors.rb +13 -0
  395. data/lib/arel/window_predications.rb +9 -0
  396. data/lib/arel.rb +73 -0
  397. data/lib/rails/generators/active_record/application_record/USAGE +8 -0
  398. data/lib/rails/generators/active_record/application_record/application_record_generator.rb +26 -0
  399. data/lib/rails/generators/active_record/application_record/templates/application_record.rb.tt +5 -0
  400. data/lib/rails/generators/active_record/migration/migration_generator.rb +76 -0
  401. data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb.tt +29 -0
  402. data/lib/rails/generators/active_record/migration/templates/migration.rb.tt +48 -0
  403. data/lib/rails/generators/active_record/migration.rb +54 -0
  404. data/lib/rails/generators/active_record/model/USAGE +113 -0
  405. data/lib/rails/generators/active_record/model/model_generator.rb +94 -0
  406. data/lib/rails/generators/active_record/model/templates/abstract_base_class.rb.tt +7 -0
  407. data/lib/rails/generators/active_record/model/templates/model.rb.tt +22 -0
  408. data/lib/rails/generators/active_record/model/templates/module.rb.tt +7 -0
  409. data/lib/rails/generators/active_record/multi_db/multi_db_generator.rb +16 -0
  410. data/lib/rails/generators/active_record/multi_db/templates/multi_db.rb.tt +44 -0
  411. data/lib/rails/generators/active_record.rb +19 -0
  412. metadata +505 -0
@@ -0,0 +1,616 @@
1
+ # frozen_string_literal: true
2
+
3
+ #--
4
+ # Copyright (c) David Heinemeier Hansson
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining
7
+ # a copy of this software and associated documentation files (the
8
+ # "Software"), to deal in the Software without restriction, including
9
+ # without limitation the rights to use, copy, modify, merge, publish,
10
+ # distribute, sublicense, and/or sell copies of the Software, and to
11
+ # permit persons to whom the Software is furnished to do so, subject to
12
+ # the following conditions:
13
+ #
14
+ # The above copyright notice and this permission notice shall be
15
+ # included in all copies or substantial portions of the Software.
16
+ #
17
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
+ #++
25
+
26
+ require "active_support"
27
+ require "active_support/rails"
28
+ require "active_support/ordered_options"
29
+ require "active_model"
30
+ require "arel"
31
+ require "yaml"
32
+ require "zlib"
33
+
34
+ require "active_record/version"
35
+ require "active_record/deprecator"
36
+ require "active_model/attribute_set"
37
+ require "active_record/errors"
38
+
39
+ # :include: ../README.rdoc
40
+ module ActiveRecord
41
+ extend ActiveSupport::Autoload
42
+
43
+ autoload :Base
44
+ autoload :Callbacks
45
+ autoload :ConnectionHandling
46
+ autoload :Core
47
+ autoload :CounterCache
48
+ autoload :DelegatedType
49
+ autoload :DestroyAssociationAsyncJob
50
+ autoload :DynamicMatchers
51
+ autoload :Encryption
52
+ autoload :Enum
53
+ autoload :Explain
54
+ autoload :FixtureSet, "active_record/fixtures"
55
+ autoload :Inheritance
56
+ autoload :Integration
57
+ autoload :InternalMetadata
58
+ autoload :LogSubscriber
59
+ autoload :Marshalling
60
+ autoload :Migration
61
+ autoload :Migrator, "active_record/migration"
62
+ autoload :ModelSchema
63
+ autoload :NestedAttributes
64
+ autoload :NoTouching
65
+ autoload :Normalization
66
+ autoload :Persistence
67
+ autoload :QueryCache
68
+ autoload :QueryLogs
69
+ autoload :Querying
70
+ autoload :ReadonlyAttributes
71
+ autoload :RecordInvalid, "active_record/validations"
72
+ autoload :Reflection
73
+ autoload :RuntimeRegistry
74
+ autoload :Sanitization
75
+ autoload :Schema
76
+ autoload :SchemaDumper
77
+ autoload :SchemaMigration
78
+ autoload :Scoping
79
+ autoload :SecurePassword
80
+ autoload :SecureToken
81
+ autoload :Serialization
82
+ autoload :SignedId
83
+ autoload :Store
84
+ autoload :Suppressor
85
+ autoload :TestDatabases
86
+ autoload :TestFixtures, "active_record/fixtures"
87
+ autoload :Timestamp
88
+ autoload :TokenFor
89
+ autoload :TouchLater
90
+ autoload :Transaction
91
+ autoload :Transactions
92
+ autoload :Translation
93
+ autoload :Validations
94
+
95
+ eager_autoload do
96
+ autoload :Aggregations
97
+ autoload :AssociationRelation
98
+ autoload :Associations
99
+ autoload :AsynchronousQueriesTracker
100
+ autoload :AttributeAssignment
101
+ autoload :AttributeMethods
102
+ autoload :AutosaveAssociation
103
+ autoload :ConnectionAdapters
104
+ autoload :DisableJoinsAssociationRelation
105
+ autoload :FutureResult
106
+ autoload :LegacyYamlAdapter
107
+ autoload :Promise
108
+ autoload :Relation
109
+ autoload :Result
110
+ autoload :StatementCache
111
+ autoload :TableMetadata
112
+ autoload :Type
113
+
114
+ autoload_under "relation" do
115
+ autoload :Batches
116
+ autoload :Calculations
117
+ autoload :Delegation
118
+ autoload :FinderMethods
119
+ autoload :PredicateBuilder
120
+ autoload :QueryMethods
121
+ autoload :SpawnMethods
122
+ end
123
+ end
124
+
125
+ module Coders
126
+ autoload :ColumnSerializer, "active_record/coders/column_serializer"
127
+ autoload :JSON, "active_record/coders/json"
128
+ autoload :YAMLColumn, "active_record/coders/yaml_column"
129
+ end
130
+
131
+ module AttributeMethods
132
+ extend ActiveSupport::Autoload
133
+
134
+ autoload :CompositePrimaryKey
135
+
136
+ eager_autoload do
137
+ autoload :BeforeTypeCast
138
+ autoload :Dirty
139
+ autoload :PrimaryKey
140
+ autoload :Query
141
+ autoload :Read
142
+ autoload :Serialization
143
+ autoload :TimeZoneConversion
144
+ autoload :Write
145
+ end
146
+ end
147
+
148
+ module Locking
149
+ extend ActiveSupport::Autoload
150
+
151
+ eager_autoload do
152
+ autoload :Optimistic
153
+ autoload :Pessimistic
154
+ end
155
+ end
156
+
157
+ module Scoping
158
+ extend ActiveSupport::Autoload
159
+
160
+ eager_autoload do
161
+ autoload :Default
162
+ autoload :Named
163
+ end
164
+ end
165
+
166
+ module Middleware
167
+ extend ActiveSupport::Autoload
168
+
169
+ autoload :DatabaseSelector
170
+ autoload :ShardSelector
171
+ end
172
+
173
+ module Tasks
174
+ extend ActiveSupport::Autoload
175
+
176
+ autoload :DatabaseTasks
177
+ autoload :MySQLDatabaseTasks, "active_record/tasks/mysql_database_tasks"
178
+ autoload :PostgreSQLDatabaseTasks, "active_record/tasks/postgresql_database_tasks"
179
+ autoload :SQLiteDatabaseTasks, "active_record/tasks/sqlite_database_tasks"
180
+ end
181
+
182
+ singleton_class.attr_accessor :disable_prepared_statements
183
+ self.disable_prepared_statements = false
184
+
185
+ ##
186
+ # :singleton-method: lazily_load_schema_cache
187
+ # Lazily load the schema cache. This option will load the schema cache
188
+ # when a connection is established rather than on boot.
189
+ singleton_class.attr_accessor :lazily_load_schema_cache
190
+ self.lazily_load_schema_cache = false
191
+
192
+ ##
193
+ # :singleton-method: schema_cache_ignored_tables
194
+ # A list of tables or regex's to match tables to ignore when
195
+ # dumping the schema cache. For example if this is set to +[/^_/]+
196
+ # the schema cache will not dump tables named with an underscore.
197
+ singleton_class.attr_accessor :schema_cache_ignored_tables
198
+ self.schema_cache_ignored_tables = []
199
+
200
+ # Checks to see if the +table_name+ is ignored by checking
201
+ # against the +schema_cache_ignored_tables+ option.
202
+ #
203
+ # ActiveRecord.schema_cache_ignored_table?(:developers)
204
+ #
205
+ def self.schema_cache_ignored_table?(table_name)
206
+ ActiveRecord.schema_cache_ignored_tables.any? do |ignored|
207
+ ignored === table_name
208
+ end
209
+ end
210
+
211
+ singleton_class.attr_accessor :database_cli
212
+ self.database_cli = { postgresql: "psql", mysql: %w[mysql mysql5], sqlite: "sqlite3" }
213
+
214
+ singleton_class.attr_reader :default_timezone
215
+
216
+ # Determines whether to use Time.utc (using :utc) or Time.local (using :local) when pulling
217
+ # dates and times from the database. This is set to :utc by default.
218
+ def self.default_timezone=(default_timezone)
219
+ unless %i(local utc).include?(default_timezone)
220
+ raise ArgumentError, "default_timezone must be either :utc (default) or :local."
221
+ end
222
+
223
+ @default_timezone = default_timezone
224
+ end
225
+
226
+ self.default_timezone = :utc
227
+
228
+ ##
229
+ # :singleton-method: db_warnings_action
230
+ # The action to take when database query produces warning.
231
+ # Must be one of :ignore, :log, :raise, :report, or a custom proc.
232
+ # The default is :ignore.
233
+ singleton_class.attr_reader :db_warnings_action
234
+
235
+ def self.db_warnings_action=(action)
236
+ @db_warnings_action =
237
+ case action
238
+ when :ignore
239
+ nil
240
+ when :log
241
+ ->(warning) do
242
+ warning_message = "[#{warning.class}] #{warning.message}"
243
+ warning_message += " (#{warning.code})" if warning.code
244
+ ActiveRecord::Base.logger.warn(warning_message)
245
+ end
246
+ when :raise
247
+ ->(warning) { raise warning }
248
+ when :report
249
+ ->(warning) { Rails.error.report(warning, handled: true) }
250
+ when Proc
251
+ action
252
+ else
253
+ raise ArgumentError, "db_warnings_action must be one of :ignore, :log, :raise, :report, or a custom proc."
254
+ end
255
+ end
256
+
257
+ self.db_warnings_action = :ignore
258
+
259
+ ##
260
+ # :singleton-method: db_warnings_ignore
261
+ # Specify allowlist of database warnings.
262
+ singleton_class.attr_accessor :db_warnings_ignore
263
+ self.db_warnings_ignore = []
264
+
265
+ singleton_class.attr_accessor :writing_role
266
+ self.writing_role = :writing
267
+
268
+ singleton_class.attr_accessor :reading_role
269
+ self.reading_role = :reading
270
+
271
+ def self.legacy_connection_handling=(_)
272
+ raise ArgumentError, <<~MSG.squish
273
+ The `legacy_connection_handling` setter was deprecated in 7.0 and removed in 7.1,
274
+ but is still defined in your configuration. Please remove this call as it no longer
275
+ has any effect."
276
+ MSG
277
+ end
278
+
279
+ ##
280
+ # :singleton-method: async_query_executor
281
+ # Sets the async_query_executor for an application. By default the thread pool executor
282
+ # set to +nil+ which will not run queries in the background. Applications must configure
283
+ # a thread pool executor to use this feature. Options are:
284
+ #
285
+ # * nil - Does not initialize a thread pool executor. Any async calls will be
286
+ # run in the foreground.
287
+ # * :global_thread_pool - Initializes a single +Concurrent::ThreadPoolExecutor+
288
+ # that uses the +async_query_concurrency+ for the +max_threads+ value.
289
+ # * :multi_thread_pool - Initializes a +Concurrent::ThreadPoolExecutor+ for each
290
+ # database connection. The initializer values are defined in the configuration hash.
291
+ singleton_class.attr_accessor :async_query_executor
292
+ self.async_query_executor = nil
293
+
294
+ def self.global_thread_pool_async_query_executor # :nodoc:
295
+ concurrency = global_executor_concurrency || 4
296
+ @global_thread_pool_async_query_executor ||= Concurrent::ThreadPoolExecutor.new(
297
+ min_threads: 0,
298
+ max_threads: concurrency,
299
+ max_queue: concurrency * 4,
300
+ fallback_policy: :caller_runs
301
+ )
302
+ end
303
+
304
+ # Set the +global_executor_concurrency+. This configuration value can only be used
305
+ # with the global thread pool async query executor.
306
+ def self.global_executor_concurrency=(global_executor_concurrency)
307
+ if self.async_query_executor.nil? || self.async_query_executor == :multi_thread_pool
308
+ raise ArgumentError, "`global_executor_concurrency` cannot be set when the executor is nil or set to `:multi_thread_pool`. For multiple thread pools, please set the concurrency in your database configuration."
309
+ end
310
+
311
+ @global_executor_concurrency = global_executor_concurrency
312
+ end
313
+
314
+ def self.global_executor_concurrency # :nodoc:
315
+ @global_executor_concurrency ||= nil
316
+ end
317
+
318
+ @permanent_connection_checkout = true
319
+ singleton_class.attr_reader :permanent_connection_checkout
320
+
321
+ # Defines whether +ActiveRecord::Base.connection+ is allowed, deprecated, or entirely disallowed.
322
+ def self.permanent_connection_checkout=(value)
323
+ unless [true, :deprecated, :disallowed].include?(value)
324
+ raise ArgumentError, "permanent_connection_checkout must be one of: `true`, `:deprecated` or `:disallowed`"
325
+ end
326
+ @permanent_connection_checkout = value
327
+ end
328
+
329
+ singleton_class.attr_accessor :index_nested_attribute_errors
330
+ self.index_nested_attribute_errors = false
331
+
332
+ ##
333
+ # :singleton-method: verbose_query_logs
334
+ #
335
+ # Specifies if the methods calling database queries should be logged below
336
+ # their relevant queries. Defaults to false.
337
+ singleton_class.attr_accessor :verbose_query_logs
338
+ self.verbose_query_logs = false
339
+
340
+ ##
341
+ # :singleton-method: queues
342
+ #
343
+ # Specifies the names of the queues used by background jobs.
344
+ singleton_class.attr_accessor :queues
345
+ self.queues = {}
346
+
347
+ singleton_class.attr_accessor :maintain_test_schema
348
+ self.maintain_test_schema = nil
349
+
350
+ singleton_class.attr_accessor :raise_on_assign_to_attr_readonly
351
+ self.raise_on_assign_to_attr_readonly = false
352
+
353
+ singleton_class.attr_accessor :belongs_to_required_validates_foreign_key
354
+ self.belongs_to_required_validates_foreign_key = true
355
+
356
+ singleton_class.attr_accessor :before_committed_on_all_records
357
+ self.before_committed_on_all_records = false
358
+
359
+ singleton_class.attr_accessor :run_after_transaction_callbacks_in_order_defined
360
+ self.run_after_transaction_callbacks_in_order_defined = false
361
+
362
+ def self.commit_transaction_on_non_local_return
363
+ ActiveRecord.deprecator.warn <<-WARNING.squish
364
+ `Rails.application.config.active_record.commit_transaction_on_non_local_return`
365
+ is deprecated and will be removed in Rails 8.0.
366
+ WARNING
367
+ end
368
+
369
+ def self.commit_transaction_on_non_local_return=(value)
370
+ ActiveRecord.deprecator.warn <<-WARNING.squish
371
+ `Rails.application.config.active_record.commit_transaction_on_non_local_return`
372
+ is deprecated and will be removed in Rails 8.0.
373
+ WARNING
374
+ end
375
+
376
+ ##
377
+ # :singleton-method: warn_on_records_fetched_greater_than
378
+ # Specify a threshold for the size of query result sets. If the number of
379
+ # records in the set exceeds the threshold, a warning is logged. This can
380
+ # be used to identify queries which load thousands of records and
381
+ # potentially cause memory bloat.
382
+ singleton_class.attr_accessor :warn_on_records_fetched_greater_than
383
+ self.warn_on_records_fetched_greater_than = false
384
+
385
+ singleton_class.attr_accessor :application_record_class
386
+ self.application_record_class = nil
387
+
388
+ ##
389
+ # :singleton-method: action_on_strict_loading_violation
390
+ # Set the application to log or raise when an association violates strict loading.
391
+ # Defaults to :raise.
392
+ singleton_class.attr_accessor :action_on_strict_loading_violation
393
+ self.action_on_strict_loading_violation = :raise
394
+
395
+ ##
396
+ # :singleton-method: schema_format
397
+ # Specifies the format to use when dumping the database schema with Rails'
398
+ # Rakefile. If :sql, the schema is dumped as (potentially database-
399
+ # specific) SQL statements. If :ruby, the schema is dumped as an
400
+ # ActiveRecord::Schema file which can be loaded into any database that
401
+ # supports migrations. Use :ruby if you want to have different database
402
+ # adapters for, e.g., your development and test environments.
403
+ singleton_class.attr_accessor :schema_format
404
+ self.schema_format = :ruby
405
+
406
+ ##
407
+ # :singleton-method: error_on_ignored_order
408
+ # Specifies if an error should be raised if the query has an order being
409
+ # ignored when doing batch queries. Useful in applications where the
410
+ # scope being ignored is error-worthy, rather than a warning.
411
+ singleton_class.attr_accessor :error_on_ignored_order
412
+ self.error_on_ignored_order = false
413
+
414
+ ##
415
+ # :singleton-method: timestamped_migrations
416
+ # Specify whether or not to use timestamps for migration versions
417
+ singleton_class.attr_accessor :timestamped_migrations
418
+ self.timestamped_migrations = true
419
+
420
+ ##
421
+ # :singleton-method: validate_migration_timestamps
422
+ # Specify whether or not to validate migration timestamps. When set, an error
423
+ # will be raised if a timestamp is more than a day ahead of the timestamp
424
+ # associated with the current time. +timestamped_migrations+ must be set to true.
425
+ singleton_class.attr_accessor :validate_migration_timestamps
426
+ self.validate_migration_timestamps = false
427
+
428
+ ##
429
+ # :singleton-method: migration_strategy
430
+ # Specify strategy to use for executing migrations.
431
+ singleton_class.attr_accessor :migration_strategy
432
+ self.migration_strategy = Migration::DefaultStrategy
433
+
434
+ ##
435
+ # :singleton-method: dump_schema_after_migration
436
+ # Specify whether schema dump should happen at the end of the
437
+ # bin/rails db:migrate command. This is true by default, which is useful for the
438
+ # development environment. This should ideally be false in the production
439
+ # environment where dumping schema is rarely needed.
440
+ singleton_class.attr_accessor :dump_schema_after_migration
441
+ self.dump_schema_after_migration = true
442
+
443
+ ##
444
+ # :singleton-method: dump_schemas
445
+ # Specifies which database schemas to dump when calling db:schema:dump.
446
+ # If the value is :schema_search_path (the default), any schemas listed in
447
+ # schema_search_path are dumped. Use :all to dump all schemas regardless
448
+ # of schema_search_path, or a string of comma separated schemas for a
449
+ # custom list.
450
+ singleton_class.attr_accessor :dump_schemas
451
+ self.dump_schemas = :schema_search_path
452
+
453
+ ##
454
+ # :singleton-method: verify_foreign_keys_for_fixtures
455
+ # If true, Rails will verify all foreign keys in the database after loading fixtures.
456
+ # An error will be raised if there are any foreign key violations, indicating incorrectly
457
+ # written fixtures.
458
+ # Supported by PostgreSQL and SQLite.
459
+ singleton_class.attr_accessor :verify_foreign_keys_for_fixtures
460
+ self.verify_foreign_keys_for_fixtures = false
461
+
462
+ def self.allow_deprecated_singular_associations_name
463
+ ActiveRecord.deprecator.warn <<-WARNING.squish
464
+ `Rails.application.config.active_record.allow_deprecated_singular_associations_name`
465
+ is deprecated and will be removed in Rails 8.0.
466
+ WARNING
467
+ end
468
+
469
+ def self.allow_deprecated_singular_associations_name=(value)
470
+ ActiveRecord.deprecator.warn <<-WARNING.squish
471
+ `Rails.application.config.active_record.allow_deprecated_singular_associations_name`
472
+ is deprecated and will be removed in Rails 8.0.
473
+ WARNING
474
+ end
475
+
476
+ singleton_class.attr_accessor :query_transformers
477
+ self.query_transformers = []
478
+
479
+ ##
480
+ # :singleton-method: use_yaml_unsafe_load
481
+ # Application configurable boolean that instructs the YAML Coder to use
482
+ # an unsafe load if set to true.
483
+ singleton_class.attr_accessor :use_yaml_unsafe_load
484
+ self.use_yaml_unsafe_load = false
485
+
486
+ ##
487
+ # :singleton-method: raise_int_wider_than_64bit
488
+ # Application configurable boolean that denotes whether or not to raise
489
+ # an exception when the PostgreSQLAdapter is provided with an integer that
490
+ # is wider than signed 64bit representation
491
+ singleton_class.attr_accessor :raise_int_wider_than_64bit
492
+ self.raise_int_wider_than_64bit = true
493
+
494
+ ##
495
+ # :singleton-method: yaml_column_permitted_classes
496
+ # Application configurable array that provides additional permitted classes
497
+ # to Psych safe_load in the YAML Coder
498
+ singleton_class.attr_accessor :yaml_column_permitted_classes
499
+ self.yaml_column_permitted_classes = [Symbol]
500
+
501
+ ##
502
+ # :singleton-method: generate_secure_token_on
503
+ # Controls when to generate a value for <tt>has_secure_token</tt>
504
+ # declarations. Defaults to <tt>:create</tt>.
505
+ singleton_class.attr_accessor :generate_secure_token_on
506
+ self.generate_secure_token_on = :create
507
+
508
+ def self.marshalling_format_version
509
+ Marshalling.format_version
510
+ end
511
+
512
+ def self.marshalling_format_version=(value)
513
+ Marshalling.format_version = value
514
+ end
515
+
516
+ ##
517
+ # :singleton-method: protocol_adapters
518
+ # Provides a mapping between database protocols/DBMSs and the
519
+ # underlying database adapter to be used. This is used only by the
520
+ # <tt>DATABASE_URL</tt> environment variable.
521
+ #
522
+ # == Example
523
+ #
524
+ # DATABASE_URL="mysql://myuser:mypass@localhost/somedatabase"
525
+ #
526
+ # The above URL specifies that MySQL is the desired protocol/DBMS, and the
527
+ # application configuration can then decide which adapter to use. For this example
528
+ # the default mapping is from <tt>mysql</tt> to <tt>mysql2</tt>, but <tt>:trilogy</tt>
529
+ # is also supported.
530
+ #
531
+ # ActiveRecord.protocol_adapters.mysql = "mysql2"
532
+ #
533
+ # The protocols names are arbitrary, and external database adapters can be
534
+ # registered and set here.
535
+ singleton_class.attr_accessor :protocol_adapters
536
+ self.protocol_adapters = ActiveSupport::InheritableOptions.new(
537
+ {
538
+ sqlite: "sqlite3",
539
+ mysql: "mysql2",
540
+ postgres: "postgresql",
541
+ }
542
+ )
543
+
544
+ def self.eager_load!
545
+ super
546
+ ActiveRecord::Locking.eager_load!
547
+ ActiveRecord::Scoping.eager_load!
548
+ ActiveRecord::Associations.eager_load!
549
+ ActiveRecord::AttributeMethods.eager_load!
550
+ ActiveRecord::ConnectionAdapters.eager_load!
551
+ ActiveRecord::Encryption.eager_load!
552
+ end
553
+
554
+ # Explicitly closes all database connections in all pools.
555
+ def self.disconnect_all!
556
+ ConnectionAdapters::PoolConfig.disconnect_all!
557
+ end
558
+
559
+ # Registers a block to be called after all the current transactions have been
560
+ # committed.
561
+ #
562
+ # If there is no currently open transaction, the block is called immediately.
563
+ #
564
+ # If there are multiple nested transactions, the block is called after the outermost one
565
+ # has been committed,
566
+ #
567
+ # If any of the currently open transactions is rolled back, the block is never called.
568
+ #
569
+ # If multiple transactions are open across multiple databases, the block will be invoked
570
+ # if and once all of them have been committed. But note that nesting transactions across
571
+ # two distinct databases is a sharding anti-pattern that comes with a world of hurts.
572
+ def self.after_all_transactions_commit(&block)
573
+ open_transactions = all_open_transactions
574
+
575
+ if open_transactions.empty?
576
+ yield
577
+ elsif open_transactions.size == 1
578
+ open_transactions.first.after_commit(&block)
579
+ else
580
+ count = open_transactions.size
581
+ callback = -> do
582
+ count -= 1
583
+ block.call if count.zero?
584
+ end
585
+ open_transactions.each do |t|
586
+ t.after_commit(&callback)
587
+ end
588
+ open_transactions = nil # rubocop:disable Lint/UselessAssignment avoid holding it in the closure
589
+ end
590
+ end
591
+
592
+ def self.all_open_transactions # :nodoc:
593
+ open_transactions = []
594
+ Base.connection_handler.each_connection_pool do |pool|
595
+ if active_connection = pool.active_connection
596
+ if active_connection.current_transaction.open? && active_connection.current_transaction.joinable?
597
+ open_transactions << active_connection.current_transaction
598
+ end
599
+ end
600
+ end
601
+ open_transactions
602
+ end
603
+ end
604
+
605
+ ActiveSupport.on_load(:active_record) do
606
+ Arel::Table.engine = self
607
+ end
608
+
609
+ ActiveSupport.on_load(:i18n) do
610
+ I18n.load_path << File.expand_path("active_record/locale/en.yml", __dir__)
611
+ end
612
+
613
+ YAML.load_tags["!ruby/object:ActiveRecord::AttributeSet"] = "ActiveModel::AttributeSet"
614
+ YAML.load_tags["!ruby/object:ActiveRecord::Attribute::FromDatabase"] = "ActiveModel::Attribute::FromDatabase"
615
+ YAML.load_tags["!ruby/object:ActiveRecord::LazyAttributeHash"] = "ActiveModel::LazyAttributeHash"
616
+ YAML.load_tags["!ruby/object:ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter::MysqlString"] = "ActiveRecord::Type::String"
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Arel # :nodoc: all
4
+ module AliasPredication
5
+ def as(other)
6
+ Nodes::As.new self, Nodes::SqlLiteral.new(other, retryable: true)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Arel # :nodoc: all
4
+ module Attributes
5
+ class Attribute < Struct.new :relation, :name
6
+ include Arel::Expressions
7
+ include Arel::Predications
8
+ include Arel::AliasPredication
9
+ include Arel::OrderPredications
10
+ include Arel::Math
11
+
12
+ def type_caster
13
+ relation.type_for_attribute(name)
14
+ end
15
+
16
+ ###
17
+ # Create a node for lowering this attribute
18
+ def lower
19
+ relation.lower self
20
+ end
21
+
22
+ def type_cast_for_database(value)
23
+ relation.type_cast_for_database(name, value)
24
+ end
25
+
26
+ def able_to_type_cast?
27
+ relation.able_to_type_cast?
28
+ end
29
+ end
30
+ end
31
+
32
+ Attribute = Attributes::Attribute
33
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Arel # :nodoc: all
4
+ module Collectors
5
+ class Bind
6
+ attr_accessor :retryable
7
+
8
+ def initialize
9
+ @binds = []
10
+ end
11
+
12
+ def <<(str)
13
+ self
14
+ end
15
+
16
+ def add_bind(bind, &)
17
+ @binds << bind
18
+ self
19
+ end
20
+
21
+ def add_binds(binds, proc_for_binds = nil)
22
+ @binds.concat proc_for_binds ? binds.map(&proc_for_binds) : binds
23
+ self
24
+ end
25
+
26
+ def value
27
+ @binds
28
+ end
29
+ end
30
+ end
31
+ end