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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +355 -0
- data/MIT-LICENSE +22 -0
- data/README.rdoc +219 -0
- data/examples/performance.rb +185 -0
- data/examples/simple.rb +15 -0
- data/lib/active_record/aggregations.rb +287 -0
- data/lib/active_record/association_relation.rb +50 -0
- data/lib/active_record/associations/alias_tracker.rb +90 -0
- data/lib/active_record/associations/association.rb +417 -0
- data/lib/active_record/associations/association_scope.rb +175 -0
- data/lib/active_record/associations/belongs_to_association.rb +163 -0
- data/lib/active_record/associations/belongs_to_polymorphic_association.rb +50 -0
- data/lib/active_record/associations/builder/association.rb +170 -0
- data/lib/active_record/associations/builder/belongs_to.rb +160 -0
- data/lib/active_record/associations/builder/collection_association.rb +80 -0
- data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +107 -0
- data/lib/active_record/associations/builder/has_many.rb +23 -0
- data/lib/active_record/associations/builder/has_one.rb +61 -0
- data/lib/active_record/associations/builder/singular_association.rb +48 -0
- data/lib/active_record/associations/collection_association.rb +535 -0
- data/lib/active_record/associations/collection_proxy.rb +1163 -0
- data/lib/active_record/associations/disable_joins_association_scope.rb +59 -0
- data/lib/active_record/associations/errors.rb +265 -0
- data/lib/active_record/associations/foreign_association.rb +40 -0
- data/lib/active_record/associations/has_many_association.rb +167 -0
- data/lib/active_record/associations/has_many_through_association.rb +232 -0
- data/lib/active_record/associations/has_one_association.rb +142 -0
- data/lib/active_record/associations/has_one_through_association.rb +45 -0
- data/lib/active_record/associations/join_dependency/join_association.rb +106 -0
- data/lib/active_record/associations/join_dependency/join_base.rb +23 -0
- data/lib/active_record/associations/join_dependency/join_part.rb +71 -0
- data/lib/active_record/associations/join_dependency.rb +301 -0
- data/lib/active_record/associations/nested_error.rb +47 -0
- data/lib/active_record/associations/preloader/association.rb +316 -0
- data/lib/active_record/associations/preloader/batch.rb +48 -0
- data/lib/active_record/associations/preloader/branch.rb +153 -0
- data/lib/active_record/associations/preloader/through_association.rb +150 -0
- data/lib/active_record/associations/preloader.rb +135 -0
- data/lib/active_record/associations/singular_association.rb +76 -0
- data/lib/active_record/associations/through_association.rb +132 -0
- data/lib/active_record/associations.rb +1897 -0
- data/lib/active_record/asynchronous_queries_tracker.rb +64 -0
- data/lib/active_record/attribute_assignment.rb +82 -0
- data/lib/active_record/attribute_methods/before_type_cast.rb +106 -0
- data/lib/active_record/attribute_methods/composite_primary_key.rb +84 -0
- data/lib/active_record/attribute_methods/dirty.rb +262 -0
- data/lib/active_record/attribute_methods/primary_key.rb +158 -0
- data/lib/active_record/attribute_methods/query.rb +50 -0
- data/lib/active_record/attribute_methods/read.rb +46 -0
- data/lib/active_record/attribute_methods/serialization.rb +232 -0
- data/lib/active_record/attribute_methods/time_zone_conversion.rb +94 -0
- data/lib/active_record/attribute_methods/write.rb +49 -0
- data/lib/active_record/attribute_methods.rb +542 -0
- data/lib/active_record/attributes.rb +307 -0
- data/lib/active_record/autosave_association.rb +586 -0
- data/lib/active_record/base.rb +338 -0
- data/lib/active_record/callbacks.rb +452 -0
- data/lib/active_record/coders/column_serializer.rb +61 -0
- data/lib/active_record/coders/json.rb +15 -0
- data/lib/active_record/coders/yaml_column.rb +95 -0
- data/lib/active_record/connection_adapters/abstract/connection_handler.rb +290 -0
- data/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb +210 -0
- data/lib/active_record/connection_adapters/abstract/connection_pool/reaper.rb +78 -0
- data/lib/active_record/connection_adapters/abstract/connection_pool.rb +923 -0
- data/lib/active_record/connection_adapters/abstract/database_limits.rb +31 -0
- data/lib/active_record/connection_adapters/abstract/database_statements.rb +747 -0
- data/lib/active_record/connection_adapters/abstract/query_cache.rb +319 -0
- data/lib/active_record/connection_adapters/abstract/quoting.rb +239 -0
- data/lib/active_record/connection_adapters/abstract/savepoints.rb +24 -0
- data/lib/active_record/connection_adapters/abstract/schema_creation.rb +190 -0
- data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +961 -0
- data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +106 -0
- data/lib/active_record/connection_adapters/abstract/schema_statements.rb +1883 -0
- data/lib/active_record/connection_adapters/abstract/transaction.rb +676 -0
- data/lib/active_record/connection_adapters/abstract_adapter.rb +1218 -0
- data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +1016 -0
- data/lib/active_record/connection_adapters/column.rb +122 -0
- data/lib/active_record/connection_adapters/deduplicable.rb +29 -0
- data/lib/active_record/connection_adapters/mysql/column.rb +28 -0
- data/lib/active_record/connection_adapters/mysql/database_statements.rb +95 -0
- data/lib/active_record/connection_adapters/mysql/explain_pretty_printer.rb +71 -0
- data/lib/active_record/connection_adapters/mysql/quoting.rb +114 -0
- data/lib/active_record/connection_adapters/mysql/schema_creation.rb +106 -0
- data/lib/active_record/connection_adapters/mysql/schema_definitions.rb +106 -0
- data/lib/active_record/connection_adapters/mysql/schema_dumper.rb +97 -0
- data/lib/active_record/connection_adapters/mysql/schema_statements.rb +300 -0
- data/lib/active_record/connection_adapters/mysql/type_metadata.rb +40 -0
- data/lib/active_record/connection_adapters/mysql2/database_statements.rb +96 -0
- data/lib/active_record/connection_adapters/mysql2_adapter.rb +196 -0
- data/lib/active_record/connection_adapters/pool_config.rb +83 -0
- data/lib/active_record/connection_adapters/pool_manager.rb +57 -0
- data/lib/active_record/connection_adapters/postgresql/column.rb +82 -0
- data/lib/active_record/connection_adapters/postgresql/database_statements.rb +231 -0
- data/lib/active_record/connection_adapters/postgresql/explain_pretty_printer.rb +44 -0
- data/lib/active_record/connection_adapters/postgresql/oid/array.rb +91 -0
- data/lib/active_record/connection_adapters/postgresql/oid/bit.rb +53 -0
- data/lib/active_record/connection_adapters/postgresql/oid/bit_varying.rb +15 -0
- data/lib/active_record/connection_adapters/postgresql/oid/bytea.rb +17 -0
- data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +54 -0
- data/lib/active_record/connection_adapters/postgresql/oid/date.rb +31 -0
- data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +36 -0
- data/lib/active_record/connection_adapters/postgresql/oid/decimal.rb +15 -0
- data/lib/active_record/connection_adapters/postgresql/oid/enum.rb +20 -0
- data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +109 -0
- data/lib/active_record/connection_adapters/postgresql/oid/inet.rb +15 -0
- data/lib/active_record/connection_adapters/postgresql/oid/interval.rb +49 -0
- data/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +15 -0
- data/lib/active_record/connection_adapters/postgresql/oid/legacy_point.rb +44 -0
- data/lib/active_record/connection_adapters/postgresql/oid/macaddr.rb +25 -0
- data/lib/active_record/connection_adapters/postgresql/oid/money.rb +42 -0
- data/lib/active_record/connection_adapters/postgresql/oid/oid.rb +15 -0
- data/lib/active_record/connection_adapters/postgresql/oid/point.rb +74 -0
- data/lib/active_record/connection_adapters/postgresql/oid/range.rb +124 -0
- data/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb +18 -0
- data/lib/active_record/connection_adapters/postgresql/oid/timestamp.rb +15 -0
- data/lib/active_record/connection_adapters/postgresql/oid/timestamp_with_time_zone.rb +30 -0
- data/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +125 -0
- data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +45 -0
- data/lib/active_record/connection_adapters/postgresql/oid/vector.rb +28 -0
- data/lib/active_record/connection_adapters/postgresql/oid/xml.rb +30 -0
- data/lib/active_record/connection_adapters/postgresql/oid.rb +38 -0
- data/lib/active_record/connection_adapters/postgresql/quoting.rb +238 -0
- data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +71 -0
- data/lib/active_record/connection_adapters/postgresql/schema_creation.rb +169 -0
- data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +392 -0
- data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +127 -0
- data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +1162 -0
- data/lib/active_record/connection_adapters/postgresql/type_metadata.rb +44 -0
- data/lib/active_record/connection_adapters/postgresql/utils.rb +79 -0
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +1182 -0
- data/lib/active_record/connection_adapters/schema_cache.rb +478 -0
- data/lib/active_record/connection_adapters/sql_type_metadata.rb +45 -0
- data/lib/active_record/connection_adapters/sqlite3/column.rb +62 -0
- data/lib/active_record/connection_adapters/sqlite3/database_statements.rb +145 -0
- data/lib/active_record/connection_adapters/sqlite3/explain_pretty_printer.rb +21 -0
- data/lib/active_record/connection_adapters/sqlite3/quoting.rb +116 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +37 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_definitions.rb +39 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_dumper.rb +47 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_statements.rb +221 -0
- data/lib/active_record/connection_adapters/sqlite3_adapter.rb +843 -0
- data/lib/active_record/connection_adapters/statement_pool.rb +67 -0
- data/lib/active_record/connection_adapters/trilogy/database_statements.rb +69 -0
- data/lib/active_record/connection_adapters/trilogy_adapter.rb +212 -0
- data/lib/active_record/connection_adapters.rb +176 -0
- data/lib/active_record/connection_handling.rb +413 -0
- data/lib/active_record/core.rb +836 -0
- data/lib/active_record/counter_cache.rb +230 -0
- data/lib/active_record/database_configurations/connection_url_resolver.rb +105 -0
- data/lib/active_record/database_configurations/database_config.rb +104 -0
- data/lib/active_record/database_configurations/hash_config.rb +172 -0
- data/lib/active_record/database_configurations/url_config.rb +78 -0
- data/lib/active_record/database_configurations.rb +309 -0
- data/lib/active_record/delegated_type.rb +289 -0
- data/lib/active_record/deprecator.rb +7 -0
- data/lib/active_record/destroy_association_async_job.rb +38 -0
- data/lib/active_record/disable_joins_association_relation.rb +39 -0
- data/lib/active_record/dynamic_matchers.rb +121 -0
- data/lib/active_record/encryption/auto_filtered_parameters.rb +66 -0
- data/lib/active_record/encryption/cipher/aes256_gcm.rb +101 -0
- data/lib/active_record/encryption/cipher.rb +53 -0
- data/lib/active_record/encryption/config.rb +70 -0
- data/lib/active_record/encryption/configurable.rb +60 -0
- data/lib/active_record/encryption/context.rb +42 -0
- data/lib/active_record/encryption/contexts.rb +76 -0
- data/lib/active_record/encryption/derived_secret_key_provider.rb +18 -0
- data/lib/active_record/encryption/deterministic_key_provider.rb +14 -0
- data/lib/active_record/encryption/encryptable_record.rb +230 -0
- data/lib/active_record/encryption/encrypted_attribute_type.rb +184 -0
- data/lib/active_record/encryption/encrypted_fixtures.rb +38 -0
- data/lib/active_record/encryption/encrypting_only_encryptor.rb +12 -0
- data/lib/active_record/encryption/encryptor.rb +177 -0
- data/lib/active_record/encryption/envelope_encryption_key_provider.rb +55 -0
- data/lib/active_record/encryption/errors.rb +15 -0
- data/lib/active_record/encryption/extended_deterministic_queries.rb +159 -0
- data/lib/active_record/encryption/extended_deterministic_uniqueness_validator.rb +28 -0
- data/lib/active_record/encryption/key.rb +28 -0
- data/lib/active_record/encryption/key_generator.rb +53 -0
- data/lib/active_record/encryption/key_provider.rb +46 -0
- data/lib/active_record/encryption/message.rb +33 -0
- data/lib/active_record/encryption/message_pack_message_serializer.rb +76 -0
- data/lib/active_record/encryption/message_serializer.rb +96 -0
- data/lib/active_record/encryption/null_encryptor.rb +25 -0
- data/lib/active_record/encryption/properties.rb +76 -0
- data/lib/active_record/encryption/read_only_null_encryptor.rb +28 -0
- data/lib/active_record/encryption/scheme.rb +107 -0
- data/lib/active_record/encryption.rb +58 -0
- data/lib/active_record/enum.rb +424 -0
- data/lib/active_record/errors.rb +614 -0
- data/lib/active_record/explain.rb +63 -0
- data/lib/active_record/explain_registry.rb +37 -0
- data/lib/active_record/explain_subscriber.rb +34 -0
- data/lib/active_record/fixture_set/file.rb +89 -0
- data/lib/active_record/fixture_set/model_metadata.rb +42 -0
- data/lib/active_record/fixture_set/render_context.rb +19 -0
- data/lib/active_record/fixture_set/table_row.rb +208 -0
- data/lib/active_record/fixture_set/table_rows.rb +46 -0
- data/lib/active_record/fixtures.rb +850 -0
- data/lib/active_record/future_result.rb +182 -0
- data/lib/active_record/gem_version.rb +17 -0
- data/lib/active_record/inheritance.rb +366 -0
- data/lib/active_record/insert_all.rb +328 -0
- data/lib/active_record/integration.rb +209 -0
- data/lib/active_record/internal_metadata.rb +164 -0
- data/lib/active_record/legacy_yaml_adapter.rb +15 -0
- data/lib/active_record/locale/en.yml +48 -0
- data/lib/active_record/locking/optimistic.rb +228 -0
- data/lib/active_record/locking/pessimistic.rb +102 -0
- data/lib/active_record/log_subscriber.rb +149 -0
- data/lib/active_record/marshalling.rb +56 -0
- data/lib/active_record/message_pack.rb +124 -0
- data/lib/active_record/middleware/database_selector/resolver/session.rb +48 -0
- data/lib/active_record/middleware/database_selector/resolver.rb +92 -0
- data/lib/active_record/middleware/database_selector.rb +87 -0
- data/lib/active_record/middleware/shard_selector.rb +62 -0
- data/lib/active_record/migration/command_recorder.rb +406 -0
- data/lib/active_record/migration/compatibility.rb +490 -0
- data/lib/active_record/migration/default_strategy.rb +22 -0
- data/lib/active_record/migration/execution_strategy.rb +19 -0
- data/lib/active_record/migration/join_table.rb +16 -0
- data/lib/active_record/migration/pending_migration_connection.rb +21 -0
- data/lib/active_record/migration.rb +1626 -0
- data/lib/active_record/model_schema.rb +635 -0
- data/lib/active_record/nested_attributes.rb +633 -0
- data/lib/active_record/no_touching.rb +65 -0
- data/lib/active_record/normalization.rb +163 -0
- data/lib/active_record/persistence.rb +968 -0
- data/lib/active_record/promise.rb +84 -0
- data/lib/active_record/query_cache.rb +56 -0
- data/lib/active_record/query_logs.rb +247 -0
- data/lib/active_record/query_logs_formatter.rb +30 -0
- data/lib/active_record/querying.rb +122 -0
- data/lib/active_record/railtie.rb +440 -0
- data/lib/active_record/railties/console_sandbox.rb +5 -0
- data/lib/active_record/railties/controller_runtime.rb +65 -0
- data/lib/active_record/railties/databases.rake +641 -0
- data/lib/active_record/railties/job_runtime.rb +23 -0
- data/lib/active_record/readonly_attributes.rb +66 -0
- data/lib/active_record/reflection.rb +1287 -0
- data/lib/active_record/relation/batches/batch_enumerator.rb +115 -0
- data/lib/active_record/relation/batches.rb +491 -0
- data/lib/active_record/relation/calculations.rb +679 -0
- data/lib/active_record/relation/delegation.rb +154 -0
- data/lib/active_record/relation/finder_methods.rb +661 -0
- data/lib/active_record/relation/from_clause.rb +30 -0
- data/lib/active_record/relation/merger.rb +192 -0
- data/lib/active_record/relation/predicate_builder/array_handler.rb +48 -0
- data/lib/active_record/relation/predicate_builder/association_query_value.rb +76 -0
- data/lib/active_record/relation/predicate_builder/basic_object_handler.rb +19 -0
- data/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb +60 -0
- data/lib/active_record/relation/predicate_builder/range_handler.rb +22 -0
- data/lib/active_record/relation/predicate_builder/relation_handler.rb +24 -0
- data/lib/active_record/relation/predicate_builder.rb +181 -0
- data/lib/active_record/relation/query_attribute.rb +68 -0
- data/lib/active_record/relation/query_methods.rb +2235 -0
- data/lib/active_record/relation/record_fetch_warning.rb +52 -0
- data/lib/active_record/relation/spawn_methods.rb +78 -0
- data/lib/active_record/relation/where_clause.rb +218 -0
- data/lib/active_record/relation.rb +1495 -0
- data/lib/active_record/result.rb +249 -0
- data/lib/active_record/runtime_registry.rb +82 -0
- data/lib/active_record/sanitization.rb +254 -0
- data/lib/active_record/schema.rb +77 -0
- data/lib/active_record/schema_dumper.rb +364 -0
- data/lib/active_record/schema_migration.rb +106 -0
- data/lib/active_record/scoping/default.rb +205 -0
- data/lib/active_record/scoping/named.rb +202 -0
- data/lib/active_record/scoping.rb +136 -0
- data/lib/active_record/secure_password.rb +60 -0
- data/lib/active_record/secure_token.rb +66 -0
- data/lib/active_record/serialization.rb +29 -0
- data/lib/active_record/signed_id.rb +137 -0
- data/lib/active_record/statement_cache.rb +164 -0
- data/lib/active_record/store.rb +299 -0
- data/lib/active_record/suppressor.rb +59 -0
- data/lib/active_record/table_metadata.rb +85 -0
- data/lib/active_record/tasks/database_tasks.rb +681 -0
- data/lib/active_record/tasks/mysql_database_tasks.rb +120 -0
- data/lib/active_record/tasks/postgresql_database_tasks.rb +147 -0
- data/lib/active_record/tasks/sqlite_database_tasks.rb +89 -0
- data/lib/active_record/test_databases.rb +24 -0
- data/lib/active_record/test_fixtures.rb +321 -0
- data/lib/active_record/testing/query_assertions.rb +121 -0
- data/lib/active_record/timestamp.rb +177 -0
- data/lib/active_record/token_for.rb +123 -0
- data/lib/active_record/touch_later.rb +70 -0
- data/lib/active_record/transaction.rb +132 -0
- data/lib/active_record/transactions.rb +523 -0
- data/lib/active_record/translation.rb +22 -0
- data/lib/active_record/type/adapter_specific_registry.rb +144 -0
- data/lib/active_record/type/date.rb +9 -0
- data/lib/active_record/type/date_time.rb +9 -0
- data/lib/active_record/type/decimal_without_scale.rb +15 -0
- data/lib/active_record/type/hash_lookup_type_map.rb +57 -0
- data/lib/active_record/type/internal/timezone.rb +22 -0
- data/lib/active_record/type/json.rb +30 -0
- data/lib/active_record/type/serialized.rb +76 -0
- data/lib/active_record/type/text.rb +11 -0
- data/lib/active_record/type/time.rb +35 -0
- data/lib/active_record/type/type_map.rb +58 -0
- data/lib/active_record/type/unsigned_integer.rb +16 -0
- data/lib/active_record/type.rb +83 -0
- data/lib/active_record/type_caster/connection.rb +33 -0
- data/lib/active_record/type_caster/map.rb +23 -0
- data/lib/active_record/type_caster.rb +9 -0
- data/lib/active_record/validations/absence.rb +25 -0
- data/lib/active_record/validations/associated.rb +65 -0
- data/lib/active_record/validations/length.rb +26 -0
- data/lib/active_record/validations/numericality.rb +36 -0
- data/lib/active_record/validations/presence.rb +45 -0
- data/lib/active_record/validations/uniqueness.rb +295 -0
- data/lib/active_record/validations.rb +101 -0
- data/lib/active_record/version.rb +10 -0
- data/lib/active_record.rb +616 -0
- data/lib/arel/alias_predication.rb +9 -0
- data/lib/arel/attributes/attribute.rb +33 -0
- data/lib/arel/collectors/bind.rb +31 -0
- data/lib/arel/collectors/composite.rb +46 -0
- data/lib/arel/collectors/plain_string.rb +20 -0
- data/lib/arel/collectors/sql_string.rb +27 -0
- data/lib/arel/collectors/substitute_binds.rb +35 -0
- data/lib/arel/crud.rb +48 -0
- data/lib/arel/delete_manager.rb +32 -0
- data/lib/arel/errors.rb +19 -0
- data/lib/arel/expressions.rb +29 -0
- data/lib/arel/factory_methods.rb +53 -0
- data/lib/arel/filter_predications.rb +9 -0
- data/lib/arel/insert_manager.rb +48 -0
- data/lib/arel/math.rb +45 -0
- data/lib/arel/nodes/ascending.rb +23 -0
- data/lib/arel/nodes/binary.rb +125 -0
- data/lib/arel/nodes/bind_param.rb +44 -0
- data/lib/arel/nodes/bound_sql_literal.rb +65 -0
- data/lib/arel/nodes/case.rb +55 -0
- data/lib/arel/nodes/casted.rb +62 -0
- data/lib/arel/nodes/comment.rb +29 -0
- data/lib/arel/nodes/count.rb +12 -0
- data/lib/arel/nodes/cte.rb +36 -0
- data/lib/arel/nodes/delete_statement.rb +44 -0
- data/lib/arel/nodes/descending.rb +23 -0
- data/lib/arel/nodes/equality.rb +15 -0
- data/lib/arel/nodes/extract.rb +24 -0
- data/lib/arel/nodes/false.rb +16 -0
- data/lib/arel/nodes/filter.rb +10 -0
- data/lib/arel/nodes/fragments.rb +35 -0
- data/lib/arel/nodes/full_outer_join.rb +8 -0
- data/lib/arel/nodes/function.rb +45 -0
- data/lib/arel/nodes/grouping.rb +11 -0
- data/lib/arel/nodes/homogeneous_in.rb +68 -0
- data/lib/arel/nodes/in.rb +15 -0
- data/lib/arel/nodes/infix_operation.rb +92 -0
- data/lib/arel/nodes/inner_join.rb +8 -0
- data/lib/arel/nodes/insert_statement.rb +37 -0
- data/lib/arel/nodes/join_source.rb +20 -0
- data/lib/arel/nodes/leading_join.rb +8 -0
- data/lib/arel/nodes/matches.rb +18 -0
- data/lib/arel/nodes/named_function.rb +23 -0
- data/lib/arel/nodes/nary.rb +39 -0
- data/lib/arel/nodes/node.rb +161 -0
- data/lib/arel/nodes/node_expression.rb +13 -0
- data/lib/arel/nodes/ordering.rb +27 -0
- data/lib/arel/nodes/outer_join.rb +8 -0
- data/lib/arel/nodes/over.rb +15 -0
- data/lib/arel/nodes/regexp.rb +16 -0
- data/lib/arel/nodes/right_outer_join.rb +8 -0
- data/lib/arel/nodes/select_core.rb +67 -0
- data/lib/arel/nodes/select_statement.rb +41 -0
- data/lib/arel/nodes/sql_literal.rb +32 -0
- data/lib/arel/nodes/string_join.rb +11 -0
- data/lib/arel/nodes/table_alias.rb +35 -0
- data/lib/arel/nodes/terminal.rb +16 -0
- data/lib/arel/nodes/true.rb +16 -0
- data/lib/arel/nodes/unary.rb +44 -0
- data/lib/arel/nodes/unary_operation.rb +20 -0
- data/lib/arel/nodes/unqualified_column.rb +22 -0
- data/lib/arel/nodes/update_statement.rb +46 -0
- data/lib/arel/nodes/values_list.rb +9 -0
- data/lib/arel/nodes/window.rb +126 -0
- data/lib/arel/nodes/with.rb +11 -0
- data/lib/arel/nodes.rb +75 -0
- data/lib/arel/order_predications.rb +13 -0
- data/lib/arel/predications.rb +260 -0
- data/lib/arel/select_manager.rb +276 -0
- data/lib/arel/table.rb +121 -0
- data/lib/arel/tree_manager.rb +65 -0
- data/lib/arel/update_manager.rb +49 -0
- data/lib/arel/visitors/dot.rb +299 -0
- data/lib/arel/visitors/mysql.rb +111 -0
- data/lib/arel/visitors/postgresql.rb +99 -0
- data/lib/arel/visitors/sqlite.rb +38 -0
- data/lib/arel/visitors/to_sql.rb +1033 -0
- data/lib/arel/visitors/visitor.rb +45 -0
- data/lib/arel/visitors.rb +13 -0
- data/lib/arel/window_predications.rb +9 -0
- data/lib/arel.rb +73 -0
- data/lib/rails/generators/active_record/application_record/USAGE +8 -0
- data/lib/rails/generators/active_record/application_record/application_record_generator.rb +26 -0
- data/lib/rails/generators/active_record/application_record/templates/application_record.rb.tt +5 -0
- data/lib/rails/generators/active_record/migration/migration_generator.rb +76 -0
- data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb.tt +29 -0
- data/lib/rails/generators/active_record/migration/templates/migration.rb.tt +48 -0
- data/lib/rails/generators/active_record/migration.rb +54 -0
- data/lib/rails/generators/active_record/model/USAGE +113 -0
- data/lib/rails/generators/active_record/model/model_generator.rb +94 -0
- data/lib/rails/generators/active_record/model/templates/abstract_base_class.rb.tt +7 -0
- data/lib/rails/generators/active_record/model/templates/model.rb.tt +22 -0
- data/lib/rails/generators/active_record/model/templates/module.rb.tt +7 -0
- data/lib/rails/generators/active_record/multi_db/multi_db_generator.rb +16 -0
- data/lib/rails/generators/active_record/multi_db/templates/multi_db.rb.tt +44 -0
- data/lib/rails/generators/active_record.rb +19 -0
- 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,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
|