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,490 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module ActiveRecord
|
|
4
|
+
class Migration
|
|
5
|
+
module Compatibility # :nodoc: all
|
|
6
|
+
def self.find(version)
|
|
7
|
+
version = version.to_s
|
|
8
|
+
name = "V#{version.tr('.', '_')}"
|
|
9
|
+
unless const_defined?(name)
|
|
10
|
+
versions = constants.grep(/\AV[0-9_]+\z/).map { |s| s.to_s.delete("V").tr("_", ".").inspect }
|
|
11
|
+
raise ArgumentError, "Unknown migration version #{version.inspect}; expected one of #{versions.sort.join(', ')}"
|
|
12
|
+
end
|
|
13
|
+
const_get(name)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# This file exists to ensure that old migrations run the same way they did before a Rails upgrade.
|
|
17
|
+
# e.g. if you write a migration on Rails 6.1, then upgrade to Rails 7, the migration should do the same thing to your
|
|
18
|
+
# database as it did when you were running Rails 6.1
|
|
19
|
+
#
|
|
20
|
+
# "Current" is an alias for `ActiveRecord::Migration`, it represents the current Rails version.
|
|
21
|
+
# New migration functionality that will never be backward compatible should be added directly to `ActiveRecord::Migration`.
|
|
22
|
+
#
|
|
23
|
+
# There are classes for each prior Rails version. Each class descends from the *next* Rails version, so:
|
|
24
|
+
# 5.2 < 6.0 < 6.1 < 7.0 < 7.1 < 7.2 < 8.0
|
|
25
|
+
#
|
|
26
|
+
# If you are introducing new migration functionality that should only apply from Rails 7 onward, then you should
|
|
27
|
+
# find the class that immediately precedes it (6.1), and override the relevant migration methods to undo your changes.
|
|
28
|
+
#
|
|
29
|
+
# For example, Rails 6 added a default value for the `precision` option on datetime columns. So in this file, the `V5_2`
|
|
30
|
+
# class sets the value of `precision` to `nil` if it's not explicitly provided. This way, the default value will not apply
|
|
31
|
+
# for migrations written for 5.2, but will for migrations written for 6.0.
|
|
32
|
+
V8_0 = Current
|
|
33
|
+
|
|
34
|
+
class V7_2 < V8_0
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
class V7_1 < V7_2
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
class V7_0 < V7_1
|
|
41
|
+
module LegacyIndexName
|
|
42
|
+
private
|
|
43
|
+
def legacy_index_name(table_name, options)
|
|
44
|
+
if Hash === options
|
|
45
|
+
if options[:column]
|
|
46
|
+
"index_#{table_name}_on_#{Array(options[:column]) * '_and_'}"
|
|
47
|
+
elsif options[:name]
|
|
48
|
+
options[:name]
|
|
49
|
+
else
|
|
50
|
+
raise ArgumentError, "You must specify the index name"
|
|
51
|
+
end
|
|
52
|
+
else
|
|
53
|
+
legacy_index_name(table_name, index_name_options(options))
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def index_name_options(column_names)
|
|
58
|
+
if expression_column_name?(column_names)
|
|
59
|
+
column_names = column_names.scan(/\w+/).join("_")
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
{ column: column_names }
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def expression_column_name?(column_name)
|
|
66
|
+
column_name.is_a?(String) && /\W/.match?(column_name)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
module TableDefinition
|
|
71
|
+
include LegacyIndexName
|
|
72
|
+
|
|
73
|
+
def column(name, type, **options)
|
|
74
|
+
options[:_skip_validate_options] = true
|
|
75
|
+
super
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def change(name, type, **options)
|
|
79
|
+
options[:_skip_validate_options] = true
|
|
80
|
+
super
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def index(column_name, **options)
|
|
84
|
+
options[:name] = legacy_index_name(name, column_name) if options[:name].nil?
|
|
85
|
+
super
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def references(*args, **options)
|
|
89
|
+
options[:_skip_validate_options] = true
|
|
90
|
+
super
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
private
|
|
94
|
+
def raise_on_if_exist_options(options)
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
include LegacyIndexName
|
|
99
|
+
|
|
100
|
+
def add_column(table_name, column_name, type, **options)
|
|
101
|
+
options[:_skip_validate_options] = true
|
|
102
|
+
super
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def add_index(table_name, column_name, **options)
|
|
106
|
+
options[:name] = legacy_index_name(table_name, column_name) if options[:name].nil?
|
|
107
|
+
super
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def add_reference(table_name, ref_name, **options)
|
|
111
|
+
options[:_skip_validate_options] = true
|
|
112
|
+
super
|
|
113
|
+
end
|
|
114
|
+
alias :add_belongs_to :add_reference
|
|
115
|
+
|
|
116
|
+
def create_table(table_name, **options)
|
|
117
|
+
options[:_uses_legacy_table_name] = true
|
|
118
|
+
options[:_skip_validate_options] = true
|
|
119
|
+
|
|
120
|
+
super
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def rename_table(table_name, new_name, **options)
|
|
124
|
+
options[:_uses_legacy_table_name] = true
|
|
125
|
+
options[:_uses_legacy_index_name] = true
|
|
126
|
+
super
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def change_column(table_name, column_name, type, **options)
|
|
130
|
+
options[:_skip_validate_options] = true
|
|
131
|
+
if connection.adapter_name == "Mysql2" || connection.adapter_name == "Trilogy"
|
|
132
|
+
options[:collation] ||= :no_collation
|
|
133
|
+
end
|
|
134
|
+
super
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def change_column_null(table_name, column_name, null, default = nil)
|
|
138
|
+
super(table_name, column_name, !!null, default)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def disable_extension(name, **options)
|
|
142
|
+
if connection.adapter_name == "PostgreSQL"
|
|
143
|
+
options[:force] = :cascade
|
|
144
|
+
end
|
|
145
|
+
super
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def add_foreign_key(from_table, to_table, **options)
|
|
149
|
+
if connection.adapter_name == "PostgreSQL" && options[:deferrable] == true
|
|
150
|
+
options[:deferrable] = :immediate
|
|
151
|
+
end
|
|
152
|
+
super
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
private
|
|
156
|
+
def compatible_table_definition(t)
|
|
157
|
+
class << t
|
|
158
|
+
prepend TableDefinition
|
|
159
|
+
end
|
|
160
|
+
super
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
class V6_1 < V7_0
|
|
165
|
+
class PostgreSQLCompat
|
|
166
|
+
def self.compatible_timestamp_type(type, connection)
|
|
167
|
+
if connection.adapter_name == "PostgreSQL"
|
|
168
|
+
# For Rails <= 6.1, :datetime was aliased to :timestamp
|
|
169
|
+
# See: https://github.com/rails/rails/blob/v6.1.3.2/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb#L108
|
|
170
|
+
# From Rails 7 onwards, you can define what :datetime resolves to (the default is still :timestamp)
|
|
171
|
+
# See `ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.datetime_type`
|
|
172
|
+
type.to_sym == :datetime ? :timestamp : type
|
|
173
|
+
else
|
|
174
|
+
type
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def add_column(table_name, column_name, type, **options)
|
|
180
|
+
if type == :datetime
|
|
181
|
+
options[:precision] ||= nil
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
type = PostgreSQLCompat.compatible_timestamp_type(type, connection)
|
|
185
|
+
super
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def change_column(table_name, column_name, type, **options)
|
|
189
|
+
if type == :datetime
|
|
190
|
+
options[:precision] ||= nil
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
type = PostgreSQLCompat.compatible_timestamp_type(type, connection)
|
|
194
|
+
super
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
module TableDefinition
|
|
198
|
+
def new_column_definition(name, type, **options)
|
|
199
|
+
type = PostgreSQLCompat.compatible_timestamp_type(type, @conn)
|
|
200
|
+
super
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
def change(name, type, index: nil, **options)
|
|
204
|
+
options[:precision] ||= nil
|
|
205
|
+
super
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def column(name, type, index: nil, **options)
|
|
209
|
+
options[:precision] ||= nil
|
|
210
|
+
super
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
private
|
|
214
|
+
def raise_on_if_exist_options(options)
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
private
|
|
219
|
+
def compatible_table_definition(t)
|
|
220
|
+
class << t
|
|
221
|
+
prepend TableDefinition
|
|
222
|
+
end
|
|
223
|
+
super
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
class V6_0 < V6_1
|
|
228
|
+
class ReferenceDefinition < ConnectionAdapters::ReferenceDefinition
|
|
229
|
+
def index_options(table_name)
|
|
230
|
+
as_options(index)
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
module TableDefinition
|
|
235
|
+
def references(*args, **options)
|
|
236
|
+
options[:_uses_legacy_reference_index_name] = true
|
|
237
|
+
super
|
|
238
|
+
end
|
|
239
|
+
alias :belongs_to :references
|
|
240
|
+
|
|
241
|
+
def column(name, type, index: nil, **options)
|
|
242
|
+
options[:precision] ||= nil
|
|
243
|
+
super
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
private
|
|
247
|
+
def raise_on_if_exist_options(options)
|
|
248
|
+
end
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
def add_reference(table_name, ref_name, **options)
|
|
252
|
+
if connection.adapter_name == "SQLite"
|
|
253
|
+
options[:type] = :integer
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
options[:_uses_legacy_reference_index_name] = true
|
|
257
|
+
super
|
|
258
|
+
end
|
|
259
|
+
alias :add_belongs_to :add_reference
|
|
260
|
+
|
|
261
|
+
private
|
|
262
|
+
def compatible_table_definition(t)
|
|
263
|
+
class << t
|
|
264
|
+
prepend TableDefinition
|
|
265
|
+
end
|
|
266
|
+
super
|
|
267
|
+
end
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
class V5_2 < V6_0
|
|
271
|
+
module TableDefinition
|
|
272
|
+
def timestamps(**options)
|
|
273
|
+
options[:precision] ||= nil
|
|
274
|
+
super
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
def column(name, type, index: nil, **options)
|
|
278
|
+
options[:precision] ||= nil
|
|
279
|
+
super
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
private
|
|
283
|
+
def raise_on_if_exist_options(options)
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
def raise_on_duplicate_column(name)
|
|
287
|
+
end
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
module CommandRecorder
|
|
291
|
+
def invert_transaction(args, &block)
|
|
292
|
+
[:transaction, args, block]
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
def invert_change_column_comment(args)
|
|
296
|
+
[:change_column_comment, args]
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
def invert_change_table_comment(args)
|
|
300
|
+
[:change_table_comment, args]
|
|
301
|
+
end
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
def add_timestamps(table_name, **options)
|
|
305
|
+
options[:precision] ||= nil
|
|
306
|
+
super
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
private
|
|
310
|
+
def compatible_table_definition(t)
|
|
311
|
+
class << t
|
|
312
|
+
prepend TableDefinition
|
|
313
|
+
end
|
|
314
|
+
super
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
def command_recorder
|
|
318
|
+
recorder = super
|
|
319
|
+
class << recorder
|
|
320
|
+
prepend CommandRecorder
|
|
321
|
+
end
|
|
322
|
+
recorder
|
|
323
|
+
end
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
class V5_1 < V5_2
|
|
327
|
+
def change_column(table_name, column_name, type, **options)
|
|
328
|
+
if connection.adapter_name == "PostgreSQL"
|
|
329
|
+
super(table_name, column_name, type, **options.except(:default, :null, :comment))
|
|
330
|
+
connection.change_column_default(table_name, column_name, options[:default]) if options.key?(:default)
|
|
331
|
+
connection.change_column_null(table_name, column_name, options[:null], options[:default]) if options.key?(:null)
|
|
332
|
+
connection.change_column_comment(table_name, column_name, options[:comment]) if options.key?(:comment)
|
|
333
|
+
else
|
|
334
|
+
super
|
|
335
|
+
end
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
def create_table(table_name, **options)
|
|
339
|
+
if connection.adapter_name == "Mysql2" || connection.adapter_name == "Trilogy"
|
|
340
|
+
super(table_name, options: "ENGINE=InnoDB", **options)
|
|
341
|
+
else
|
|
342
|
+
super
|
|
343
|
+
end
|
|
344
|
+
end
|
|
345
|
+
end
|
|
346
|
+
|
|
347
|
+
class V5_0 < V5_1
|
|
348
|
+
module TableDefinition
|
|
349
|
+
def primary_key(name, type = :primary_key, **options)
|
|
350
|
+
type = :integer if type == :primary_key
|
|
351
|
+
super
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
def references(*args, **options)
|
|
355
|
+
super(*args, type: :integer, **options)
|
|
356
|
+
end
|
|
357
|
+
alias :belongs_to :references
|
|
358
|
+
|
|
359
|
+
private
|
|
360
|
+
def raise_on_if_exist_options(options)
|
|
361
|
+
end
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
def create_table(table_name, **options)
|
|
365
|
+
if connection.adapter_name == "PostgreSQL"
|
|
366
|
+
if options[:id] == :uuid && !options.key?(:default)
|
|
367
|
+
options[:default] = "uuid_generate_v4()"
|
|
368
|
+
end
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
unless ["Mysql2", "Trilogy"].include?(connection.adapter_name) && options[:id] == :bigint
|
|
372
|
+
if [:integer, :bigint].include?(options[:id]) && !options.key?(:default)
|
|
373
|
+
options[:default] = nil
|
|
374
|
+
end
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
# Since 5.1 PostgreSQL adapter uses bigserial type for primary
|
|
378
|
+
# keys by default and MySQL uses bigint. This compat layer makes old migrations utilize
|
|
379
|
+
# serial/int type instead -- the way it used to work before 5.1.
|
|
380
|
+
unless options.key?(:id)
|
|
381
|
+
options[:id] = :integer
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
super
|
|
385
|
+
end
|
|
386
|
+
|
|
387
|
+
def create_join_table(table_1, table_2, column_options: {}, **options)
|
|
388
|
+
column_options.reverse_merge!(type: :integer)
|
|
389
|
+
super
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
def add_column(table_name, column_name, type, **options)
|
|
393
|
+
if type == :primary_key
|
|
394
|
+
type = :integer
|
|
395
|
+
options[:primary_key] = true
|
|
396
|
+
elsif type == :datetime
|
|
397
|
+
options[:precision] ||= nil
|
|
398
|
+
end
|
|
399
|
+
super
|
|
400
|
+
end
|
|
401
|
+
|
|
402
|
+
def add_reference(table_name, ref_name, **options)
|
|
403
|
+
super(table_name, ref_name, type: :integer, **options)
|
|
404
|
+
end
|
|
405
|
+
alias :add_belongs_to :add_reference
|
|
406
|
+
|
|
407
|
+
private
|
|
408
|
+
def compatible_table_definition(t)
|
|
409
|
+
class << t
|
|
410
|
+
prepend TableDefinition
|
|
411
|
+
end
|
|
412
|
+
super
|
|
413
|
+
end
|
|
414
|
+
end
|
|
415
|
+
|
|
416
|
+
class V4_2 < V5_0
|
|
417
|
+
module TableDefinition
|
|
418
|
+
def references(*, **options)
|
|
419
|
+
options[:index] ||= false
|
|
420
|
+
super
|
|
421
|
+
end
|
|
422
|
+
alias :belongs_to :references
|
|
423
|
+
|
|
424
|
+
def timestamps(**options)
|
|
425
|
+
options[:null] = true if options[:null].nil?
|
|
426
|
+
super
|
|
427
|
+
end
|
|
428
|
+
|
|
429
|
+
private
|
|
430
|
+
def raise_on_if_exist_options(options)
|
|
431
|
+
end
|
|
432
|
+
end
|
|
433
|
+
|
|
434
|
+
def add_reference(table_name, ref_name, **options)
|
|
435
|
+
options[:index] ||= false
|
|
436
|
+
super
|
|
437
|
+
end
|
|
438
|
+
alias :add_belongs_to :add_reference
|
|
439
|
+
|
|
440
|
+
def add_timestamps(table_name, **options)
|
|
441
|
+
options[:null] = true if options[:null].nil?
|
|
442
|
+
super
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
def index_exists?(table_name, column_name, **options)
|
|
446
|
+
column_names = Array(column_name).map(&:to_s)
|
|
447
|
+
options[:name] =
|
|
448
|
+
if options[:name].present?
|
|
449
|
+
options[:name].to_s
|
|
450
|
+
else
|
|
451
|
+
connection.index_name(table_name, column: column_names)
|
|
452
|
+
end
|
|
453
|
+
super
|
|
454
|
+
end
|
|
455
|
+
|
|
456
|
+
def remove_index(table_name, column_name = nil, **options)
|
|
457
|
+
options[:name] = index_name_for_remove(table_name, column_name, options)
|
|
458
|
+
super
|
|
459
|
+
end
|
|
460
|
+
|
|
461
|
+
private
|
|
462
|
+
def compatible_table_definition(t)
|
|
463
|
+
class << t
|
|
464
|
+
prepend TableDefinition
|
|
465
|
+
end
|
|
466
|
+
super
|
|
467
|
+
end
|
|
468
|
+
|
|
469
|
+
def index_name_for_remove(table_name, column_name, options)
|
|
470
|
+
index_name = connection.index_name(table_name, column_name || options)
|
|
471
|
+
|
|
472
|
+
unless connection.index_name_exists?(table_name, index_name)
|
|
473
|
+
if options.key?(:name)
|
|
474
|
+
options_without_column = options.except(:column)
|
|
475
|
+
index_name_without_column = connection.index_name(table_name, options_without_column)
|
|
476
|
+
|
|
477
|
+
if connection.index_name_exists?(table_name, index_name_without_column)
|
|
478
|
+
return index_name_without_column
|
|
479
|
+
end
|
|
480
|
+
end
|
|
481
|
+
|
|
482
|
+
raise ArgumentError, "Index name '#{index_name}' on table '#{table_name}' does not exist"
|
|
483
|
+
end
|
|
484
|
+
|
|
485
|
+
index_name
|
|
486
|
+
end
|
|
487
|
+
end
|
|
488
|
+
end
|
|
489
|
+
end
|
|
490
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module ActiveRecord
|
|
4
|
+
class Migration
|
|
5
|
+
# The default strategy for executing migrations. Delegates method calls
|
|
6
|
+
# to the connection adapter.
|
|
7
|
+
class DefaultStrategy < ExecutionStrategy # :nodoc:
|
|
8
|
+
private
|
|
9
|
+
def method_missing(method, ...)
|
|
10
|
+
connection.send(method, ...)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def respond_to_missing?(method, include_private = false)
|
|
14
|
+
connection.respond_to?(method, include_private) || super
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def connection
|
|
18
|
+
migration.connection
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module ActiveRecord
|
|
4
|
+
class Migration
|
|
5
|
+
# ExecutionStrategy is used by the migration to respond to any method calls
|
|
6
|
+
# that the migration class does not implement directly. This is the base strategy.
|
|
7
|
+
# All strategies should inherit from this class.
|
|
8
|
+
#
|
|
9
|
+
# The ExecutionStrategy receives the current +migration+ when initialized.
|
|
10
|
+
class ExecutionStrategy # :nodoc:
|
|
11
|
+
def initialize(migration)
|
|
12
|
+
@migration = migration
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
private
|
|
16
|
+
attr_reader :migration
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module ActiveRecord
|
|
4
|
+
class Migration
|
|
5
|
+
module JoinTable # :nodoc:
|
|
6
|
+
private
|
|
7
|
+
def find_join_table_name(table_1, table_2, options = {})
|
|
8
|
+
options.delete(:table_name) || join_table_name(table_1, table_2)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def join_table_name(table_1, table_2)
|
|
12
|
+
ModelSchema.derive_join_table_name(table_1, table_2).to_sym
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module ActiveRecord
|
|
4
|
+
class PendingMigrationConnection # :nodoc:
|
|
5
|
+
def self.with_temporary_pool(db_config, &block)
|
|
6
|
+
pool = ActiveRecord::Base.connection_handler.establish_connection(db_config, owner_name: self)
|
|
7
|
+
|
|
8
|
+
yield pool
|
|
9
|
+
ensure
|
|
10
|
+
ActiveRecord::Base.connection_handler.remove_connection_pool(self.name)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.primary_class?
|
|
14
|
+
false
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def self.current_preventing_writes
|
|
18
|
+
false
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|