activerecord 5.2.3 → 6.1.0
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.
Potentially problematic release.
This version of activerecord might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +898 -532
- data/MIT-LICENSE +3 -1
- data/README.rdoc +7 -5
- data/examples/performance.rb +1 -1
- data/lib/active_record/aggregations.rb +5 -4
- data/lib/active_record/association_relation.rb +22 -12
- data/lib/active_record/associations/alias_tracker.rb +19 -16
- data/lib/active_record/associations/association.rb +95 -42
- data/lib/active_record/associations/association_scope.rb +21 -21
- data/lib/active_record/associations/belongs_to_association.rb +50 -46
- data/lib/active_record/associations/belongs_to_polymorphic_association.rb +1 -5
- data/lib/active_record/associations/builder/association.rb +23 -21
- data/lib/active_record/associations/builder/belongs_to.rb +29 -59
- data/lib/active_record/associations/builder/collection_association.rb +10 -19
- data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +17 -41
- data/lib/active_record/associations/builder/has_many.rb +8 -2
- data/lib/active_record/associations/builder/has_one.rb +33 -2
- data/lib/active_record/associations/builder/singular_association.rb +3 -1
- data/lib/active_record/associations/collection_association.rb +31 -29
- data/lib/active_record/associations/collection_proxy.rb +25 -21
- data/lib/active_record/associations/foreign_association.rb +20 -0
- data/lib/active_record/associations/has_many_association.rb +26 -13
- data/lib/active_record/associations/has_many_through_association.rb +27 -28
- data/lib/active_record/associations/has_one_association.rb +43 -31
- data/lib/active_record/associations/has_one_through_association.rb +5 -5
- data/lib/active_record/associations/join_dependency/join_association.rb +54 -12
- data/lib/active_record/associations/join_dependency/join_part.rb +5 -5
- data/lib/active_record/associations/join_dependency.rb +91 -60
- data/lib/active_record/associations/preloader/association.rb +71 -43
- data/lib/active_record/associations/preloader/through_association.rb +49 -40
- data/lib/active_record/associations/preloader.rb +48 -35
- data/lib/active_record/associations/singular_association.rb +3 -17
- data/lib/active_record/associations/through_association.rb +1 -1
- data/lib/active_record/associations.rb +133 -25
- data/lib/active_record/attribute_assignment.rb +17 -19
- data/lib/active_record/attribute_methods/before_type_cast.rb +13 -7
- data/lib/active_record/attribute_methods/dirty.rb +101 -40
- data/lib/active_record/attribute_methods/primary_key.rb +20 -25
- data/lib/active_record/attribute_methods/query.rb +4 -8
- data/lib/active_record/attribute_methods/read.rb +14 -56
- data/lib/active_record/attribute_methods/serialization.rb +12 -7
- data/lib/active_record/attribute_methods/time_zone_conversion.rb +12 -15
- data/lib/active_record/attribute_methods/write.rb +18 -34
- data/lib/active_record/attribute_methods.rb +81 -143
- data/lib/active_record/attributes.rb +45 -8
- data/lib/active_record/autosave_association.rb +76 -47
- data/lib/active_record/base.rb +4 -17
- data/lib/active_record/callbacks.rb +158 -43
- data/lib/active_record/coders/yaml_column.rb +1 -2
- data/lib/active_record/connection_adapters/abstract/connection_pool.rb +293 -132
- data/lib/active_record/connection_adapters/abstract/database_limits.rb +7 -36
- data/lib/active_record/connection_adapters/abstract/database_statements.rb +167 -146
- data/lib/active_record/connection_adapters/abstract/query_cache.rb +21 -17
- data/lib/active_record/connection_adapters/abstract/quoting.rb +98 -47
- data/lib/active_record/connection_adapters/abstract/savepoints.rb +3 -3
- data/lib/active_record/connection_adapters/abstract/schema_creation.rb +153 -110
- data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +203 -90
- data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +2 -4
- data/lib/active_record/connection_adapters/abstract/schema_statements.rb +381 -146
- data/lib/active_record/connection_adapters/abstract/transaction.rb +155 -68
- data/lib/active_record/connection_adapters/abstract_adapter.rb +229 -98
- data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +243 -275
- data/lib/active_record/connection_adapters/column.rb +30 -12
- data/lib/active_record/connection_adapters/deduplicable.rb +29 -0
- data/lib/active_record/connection_adapters/legacy_pool_manager.rb +31 -0
- data/lib/active_record/connection_adapters/mysql/column.rb +1 -1
- data/lib/active_record/connection_adapters/mysql/database_statements.rb +86 -32
- data/lib/active_record/connection_adapters/mysql/explain_pretty_printer.rb +1 -2
- data/lib/active_record/connection_adapters/mysql/quoting.rb +44 -7
- data/lib/active_record/connection_adapters/mysql/schema_creation.rb +34 -10
- data/lib/active_record/connection_adapters/mysql/schema_definitions.rb +48 -32
- data/lib/active_record/connection_adapters/mysql/schema_dumper.rb +14 -6
- data/lib/active_record/connection_adapters/mysql/schema_statements.rb +139 -19
- data/lib/active_record/connection_adapters/mysql/type_metadata.rb +14 -9
- data/lib/active_record/connection_adapters/mysql2_adapter.rb +53 -18
- data/lib/active_record/connection_adapters/pool_config.rb +63 -0
- data/lib/active_record/connection_adapters/pool_manager.rb +43 -0
- data/lib/active_record/connection_adapters/postgresql/column.rb +37 -28
- data/lib/active_record/connection_adapters/postgresql/database_statements.rb +38 -54
- data/lib/active_record/connection_adapters/postgresql/oid/array.rb +1 -2
- data/lib/active_record/connection_adapters/postgresql/oid/bit.rb +1 -4
- data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +3 -5
- data/lib/active_record/connection_adapters/postgresql/oid/date.rb +2 -2
- data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +10 -2
- data/lib/active_record/connection_adapters/postgresql/oid/enum.rb +0 -1
- data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +1 -2
- data/lib/active_record/connection_adapters/postgresql/oid/interval.rb +49 -0
- data/lib/active_record/connection_adapters/postgresql/oid/legacy_point.rb +3 -4
- data/lib/active_record/connection_adapters/postgresql/oid/macaddr.rb +25 -0
- data/lib/active_record/connection_adapters/postgresql/oid/money.rb +2 -2
- data/lib/active_record/connection_adapters/postgresql/oid/oid.rb +1 -1
- data/lib/active_record/connection_adapters/postgresql/oid/point.rb +3 -4
- data/lib/active_record/connection_adapters/postgresql/oid/range.rb +25 -7
- data/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb +1 -1
- data/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +9 -7
- data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +15 -3
- data/lib/active_record/connection_adapters/postgresql/oid.rb +2 -0
- data/lib/active_record/connection_adapters/postgresql/quoting.rb +47 -10
- data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +2 -2
- data/lib/active_record/connection_adapters/postgresql/schema_creation.rb +19 -4
- data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +107 -91
- data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +0 -1
- data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +120 -100
- data/lib/active_record/connection_adapters/postgresql/type_metadata.rb +31 -26
- data/lib/active_record/connection_adapters/postgresql/utils.rb +0 -1
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +222 -112
- data/lib/active_record/connection_adapters/schema_cache.rb +127 -21
- data/lib/active_record/connection_adapters/sql_type_metadata.rb +19 -6
- data/lib/active_record/connection_adapters/sqlite3/database_statements.rb +144 -0
- data/lib/active_record/connection_adapters/sqlite3/quoting.rb +42 -7
- data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +5 -1
- data/lib/active_record/connection_adapters/sqlite3/schema_statements.rb +77 -13
- data/lib/active_record/connection_adapters/sqlite3_adapter.rb +175 -187
- data/lib/active_record/connection_adapters/statement_pool.rb +0 -1
- data/lib/active_record/connection_adapters.rb +50 -0
- data/lib/active_record/connection_handling.rb +285 -33
- data/lib/active_record/core.rb +308 -100
- data/lib/active_record/counter_cache.rb +8 -30
- data/lib/active_record/database_configurations/connection_url_resolver.rb +98 -0
- data/lib/active_record/database_configurations/database_config.rb +80 -0
- data/lib/active_record/database_configurations/hash_config.rb +96 -0
- data/lib/active_record/database_configurations/url_config.rb +53 -0
- data/lib/active_record/database_configurations.rb +272 -0
- data/lib/active_record/delegated_type.rb +209 -0
- data/lib/active_record/destroy_association_async_job.rb +36 -0
- data/lib/active_record/dynamic_matchers.rb +3 -4
- data/lib/active_record/enum.rb +71 -17
- data/lib/active_record/errors.rb +62 -19
- data/lib/active_record/explain.rb +10 -6
- data/lib/active_record/explain_subscriber.rb +1 -1
- data/lib/active_record/fixture_set/file.rb +10 -17
- data/lib/active_record/fixture_set/model_metadata.rb +32 -0
- data/lib/active_record/fixture_set/render_context.rb +17 -0
- data/lib/active_record/fixture_set/table_row.rb +152 -0
- data/lib/active_record/fixture_set/table_rows.rb +46 -0
- data/lib/active_record/fixtures.rb +197 -481
- data/lib/active_record/gem_version.rb +3 -3
- data/lib/active_record/inheritance.rb +53 -24
- data/lib/active_record/insert_all.rb +208 -0
- data/lib/active_record/integration.rb +67 -17
- data/lib/active_record/internal_metadata.rb +26 -9
- data/lib/active_record/legacy_yaml_adapter.rb +7 -3
- data/lib/active_record/locking/optimistic.rb +26 -22
- data/lib/active_record/locking/pessimistic.rb +9 -5
- data/lib/active_record/log_subscriber.rb +34 -35
- 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 +77 -0
- data/lib/active_record/migration/command_recorder.rb +96 -44
- data/lib/active_record/migration/compatibility.rb +141 -64
- data/lib/active_record/migration/join_table.rb +0 -1
- data/lib/active_record/migration.rb +205 -156
- data/lib/active_record/model_schema.rb +148 -22
- data/lib/active_record/nested_attributes.rb +4 -7
- data/lib/active_record/no_touching.rb +8 -1
- data/lib/active_record/null_relation.rb +0 -1
- data/lib/active_record/persistence.rb +267 -59
- data/lib/active_record/query_cache.rb +21 -4
- data/lib/active_record/querying.rb +40 -23
- data/lib/active_record/railtie.rb +115 -58
- data/lib/active_record/railties/controller_runtime.rb +30 -35
- data/lib/active_record/railties/databases.rake +402 -78
- data/lib/active_record/readonly_attributes.rb +4 -0
- data/lib/active_record/reflection.rb +113 -101
- data/lib/active_record/relation/batches/batch_enumerator.rb +25 -9
- data/lib/active_record/relation/batches.rb +44 -35
- data/lib/active_record/relation/calculations.rb +157 -93
- data/lib/active_record/relation/delegation.rb +35 -50
- data/lib/active_record/relation/finder_methods.rb +65 -40
- data/lib/active_record/relation/from_clause.rb +5 -1
- data/lib/active_record/relation/merger.rb +32 -40
- data/lib/active_record/relation/predicate_builder/array_handler.rb +13 -13
- data/lib/active_record/relation/predicate_builder/association_query_value.rb +5 -9
- data/lib/active_record/relation/predicate_builder/basic_object_handler.rb +1 -2
- data/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb +4 -7
- data/lib/active_record/relation/predicate_builder/range_handler.rb +3 -23
- data/lib/active_record/relation/predicate_builder/relation_handler.rb +1 -1
- data/lib/active_record/relation/predicate_builder.rb +58 -40
- data/lib/active_record/relation/query_attribute.rb +13 -8
- data/lib/active_record/relation/query_methods.rb +487 -199
- data/lib/active_record/relation/record_fetch_warning.rb +3 -3
- data/lib/active_record/relation/spawn_methods.rb +9 -9
- data/lib/active_record/relation/where_clause.rb +108 -58
- data/lib/active_record/relation.rb +375 -104
- data/lib/active_record/result.rb +64 -38
- data/lib/active_record/runtime_registry.rb +2 -2
- data/lib/active_record/sanitization.rb +22 -41
- data/lib/active_record/schema.rb +2 -11
- data/lib/active_record/schema_dumper.rb +54 -9
- data/lib/active_record/schema_migration.rb +7 -9
- data/lib/active_record/scoping/default.rb +6 -8
- data/lib/active_record/scoping/named.rb +17 -24
- data/lib/active_record/scoping.rb +8 -9
- data/lib/active_record/secure_token.rb +16 -8
- data/lib/active_record/serialization.rb +5 -3
- data/lib/active_record/signed_id.rb +116 -0
- data/lib/active_record/statement_cache.rb +51 -8
- data/lib/active_record/store.rb +88 -9
- data/lib/active_record/suppressor.rb +2 -2
- data/lib/active_record/table_metadata.rb +39 -43
- data/lib/active_record/tasks/database_tasks.rb +276 -81
- data/lib/active_record/tasks/mysql_database_tasks.rb +37 -39
- data/lib/active_record/tasks/postgresql_database_tasks.rb +27 -32
- data/lib/active_record/tasks/sqlite_database_tasks.rb +14 -17
- data/lib/active_record/test_databases.rb +24 -0
- data/lib/active_record/test_fixtures.rb +246 -0
- data/lib/active_record/timestamp.rb +43 -32
- data/lib/active_record/touch_later.rb +23 -22
- data/lib/active_record/transactions.rb +59 -117
- data/lib/active_record/translation.rb +1 -1
- data/lib/active_record/type/adapter_specific_registry.rb +3 -13
- data/lib/active_record/type/hash_lookup_type_map.rb +0 -1
- data/lib/active_record/type/serialized.rb +6 -3
- data/lib/active_record/type/time.rb +10 -0
- data/lib/active_record/type/type_map.rb +0 -1
- data/lib/active_record/type/unsigned_integer.rb +0 -1
- data/lib/active_record/type.rb +10 -5
- data/lib/active_record/type_caster/connection.rb +15 -15
- data/lib/active_record/type_caster/map.rb +8 -8
- data/lib/active_record/validations/associated.rb +1 -2
- data/lib/active_record/validations/numericality.rb +35 -0
- data/lib/active_record/validations/uniqueness.rb +38 -30
- data/lib/active_record/validations.rb +4 -3
- data/lib/active_record.rb +13 -12
- data/lib/arel/alias_predication.rb +9 -0
- data/lib/arel/attributes/attribute.rb +41 -0
- data/lib/arel/collectors/bind.rb +29 -0
- data/lib/arel/collectors/composite.rb +39 -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 +42 -0
- data/lib/arel/delete_manager.rb +18 -0
- data/lib/arel/errors.rb +9 -0
- data/lib/arel/expressions.rb +29 -0
- data/lib/arel/factory_methods.rb +49 -0
- data/lib/arel/insert_manager.rb +49 -0
- data/lib/arel/math.rb +45 -0
- data/lib/arel/nodes/and.rb +32 -0
- data/lib/arel/nodes/ascending.rb +23 -0
- data/lib/arel/nodes/binary.rb +126 -0
- data/lib/arel/nodes/bind_param.rb +44 -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/delete_statement.rb +45 -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/full_outer_join.rb +8 -0
- data/lib/arel/nodes/function.rb +44 -0
- data/lib/arel/nodes/grouping.rb +11 -0
- data/lib/arel/nodes/homogeneous_in.rb +72 -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/matches.rb +18 -0
- data/lib/arel/nodes/named_function.rb +23 -0
- data/lib/arel/nodes/node.rb +51 -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 +19 -0
- data/lib/arel/nodes/string_join.rb +11 -0
- data/lib/arel/nodes/table_alias.rb +31 -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 +41 -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 +70 -0
- data/lib/arel/order_predications.rb +13 -0
- data/lib/arel/predications.rb +250 -0
- data/lib/arel/select_manager.rb +270 -0
- data/lib/arel/table.rb +118 -0
- data/lib/arel/tree_manager.rb +72 -0
- data/lib/arel/update_manager.rb +34 -0
- data/lib/arel/visitors/dot.rb +308 -0
- data/lib/arel/visitors/mysql.rb +93 -0
- data/lib/arel/visitors/postgresql.rb +120 -0
- data/lib/arel/visitors/sqlite.rb +38 -0
- data/lib/arel/visitors/to_sql.rb +899 -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 +54 -0
- data/lib/rails/generators/active_record/application_record/application_record_generator.rb +0 -1
- data/lib/rails/generators/active_record/migration/migration_generator.rb +3 -5
- data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb.tt +3 -1
- data/lib/rails/generators/active_record/migration/templates/migration.rb.tt +7 -5
- data/lib/rails/generators/active_record/migration.rb +19 -2
- data/lib/rails/generators/active_record/model/model_generator.rb +39 -2
- 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 +10 -1
- metadata +117 -32
- data/lib/active_record/attribute_decorators.rb +0 -90
- data/lib/active_record/collection_cache_key.rb +0 -53
- data/lib/active_record/connection_adapters/connection_specification.rb +0 -287
- data/lib/active_record/connection_adapters/determine_if_preparable_visitor.rb +0 -33
- data/lib/active_record/define_callbacks.rb +0 -22
- data/lib/active_record/relation/predicate_builder/base_handler.rb +0 -19
- data/lib/active_record/relation/where_clause_factory.rb +0 -34
| @@ -1,10 +1,15 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 3 | 
             
            require "active_record"
         | 
| 4 | 
            +
            require "active_support/configuration_file"
         | 
| 5 | 
            +
            require "active_support/deprecation"
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            databases = ActiveRecord::Tasks::DatabaseTasks.setup_initial_database_yaml
         | 
| 4 8 |  | 
| 5 9 | 
             
            db_namespace = namespace :db do
         | 
| 6 10 | 
             
              desc "Set the environment value for the database"
         | 
| 7 11 | 
             
              task "environment:set" => :load_config do
         | 
| 12 | 
            +
                raise ActiveRecord::EnvironmentStorageError unless ActiveRecord::InternalMetadata.enabled?
         | 
| 8 13 | 
             
                ActiveRecord::InternalMetadata.create_table
         | 
| 9 14 | 
             
                ActiveRecord::InternalMetadata[:environment] = ActiveRecord::Base.connection.migration_context.current_environment
         | 
| 10 15 | 
             
              end
         | 
| @@ -14,7 +19,10 @@ db_namespace = namespace :db do | |
| 14 19 | 
             
              end
         | 
| 15 20 |  | 
| 16 21 | 
             
              task load_config: :environment do
         | 
| 17 | 
            -
                ActiveRecord::Base.configurations | 
| 22 | 
            +
                if ActiveRecord::Base.configurations.empty?
         | 
| 23 | 
            +
                  ActiveRecord::Base.configurations = ActiveRecord::Tasks::DatabaseTasks.database_configuration
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
             | 
| 18 26 | 
             
                ActiveRecord::Migrator.migrations_paths = ActiveRecord::Tasks::DatabaseTasks.migrations_paths
         | 
| 19 27 | 
             
              end
         | 
| 20 28 |  | 
| @@ -22,9 +30,17 @@ db_namespace = namespace :db do | |
| 22 30 | 
             
                task all: :load_config do
         | 
| 23 31 | 
             
                  ActiveRecord::Tasks::DatabaseTasks.create_all
         | 
| 24 32 | 
             
                end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
         | 
| 35 | 
            +
                  desc "Create #{name} database for current environment"
         | 
| 36 | 
            +
                  task name => :load_config do
         | 
| 37 | 
            +
                    db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: name)
         | 
| 38 | 
            +
                    ActiveRecord::Tasks::DatabaseTasks.create(db_config)
         | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
                end
         | 
| 25 41 | 
             
              end
         | 
| 26 42 |  | 
| 27 | 
            -
              desc "Creates the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:create:all to create all databases in the config). Without RAILS_ENV or when RAILS_ENV is development, it defaults to creating the development and test databases."
         | 
| 43 | 
            +
              desc "Creates the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:create:all to create all databases in the config). Without RAILS_ENV or when RAILS_ENV is development, it defaults to creating the development and test databases, except when DATABASE_URL is present."
         | 
| 28 44 | 
             
              task create: [:load_config] do
         | 
| 29 45 | 
             
                ActiveRecord::Tasks::DatabaseTasks.create_current
         | 
| 30 46 | 
             
              end
         | 
| @@ -33,9 +49,17 @@ db_namespace = namespace :db do | |
| 33 49 | 
             
                task all: [:load_config, :check_protected_environments] do
         | 
| 34 50 | 
             
                  ActiveRecord::Tasks::DatabaseTasks.drop_all
         | 
| 35 51 | 
             
                end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
         | 
| 54 | 
            +
                  desc "Drop #{name} database for current environment"
         | 
| 55 | 
            +
                  task name => [:load_config, :check_protected_environments] do
         | 
| 56 | 
            +
                    db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: name)
         | 
| 57 | 
            +
                    ActiveRecord::Tasks::DatabaseTasks.drop(db_config)
         | 
| 58 | 
            +
                  end
         | 
| 59 | 
            +
                end
         | 
| 36 60 | 
             
              end
         | 
| 37 61 |  | 
| 38 | 
            -
              desc "Drops the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:drop:all to drop all databases in the config). Without RAILS_ENV or when RAILS_ENV is development, it defaults to dropping the development and test databases."
         | 
| 62 | 
            +
              desc "Drops the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:drop:all to drop all databases in the config). Without RAILS_ENV or when RAILS_ENV is development, it defaults to dropping the development and test databases, except when DATABASE_URL is present."
         | 
| 39 63 | 
             
              task drop: [:load_config, :check_protected_environments] do
         | 
| 40 64 | 
             
                db_namespace["drop:_unsafe"].invoke
         | 
| 41 65 | 
             
              end
         | 
| @@ -50,35 +74,70 @@ db_namespace = namespace :db do | |
| 50 74 | 
             
                end
         | 
| 51 75 | 
             
              end
         | 
| 52 76 |  | 
| 53 | 
            -
              # desc " | 
| 77 | 
            +
              # desc "Truncates tables of each database for current environment"
         | 
| 78 | 
            +
              task truncate_all: [:load_config, :check_protected_environments] do
         | 
| 79 | 
            +
                ActiveRecord::Tasks::DatabaseTasks.truncate_all
         | 
| 80 | 
            +
              end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
              # desc "Empty the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:purge:all to purge all databases in the config). Without RAILS_ENV it defaults to purging the development and test databases, except when DATABASE_URL is present."
         | 
| 54 83 | 
             
              task purge: [:load_config, :check_protected_environments] do
         | 
| 55 84 | 
             
                ActiveRecord::Tasks::DatabaseTasks.purge_current
         | 
| 56 85 | 
             
              end
         | 
| 57 86 |  | 
| 58 87 | 
             
              desc "Migrate the database (options: VERSION=x, VERBOSE=false, SCOPE=blog)."
         | 
| 59 88 | 
             
              task migrate: :load_config do
         | 
| 60 | 
            -
                ActiveRecord:: | 
| 89 | 
            +
                original_db_config = ActiveRecord::Base.connection_db_config
         | 
| 90 | 
            +
                ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
         | 
| 91 | 
            +
                  ActiveRecord::Base.establish_connection(db_config)
         | 
| 92 | 
            +
                  ActiveRecord::Tasks::DatabaseTasks.migrate
         | 
| 93 | 
            +
                end
         | 
| 61 94 | 
             
                db_namespace["_dump"].invoke
         | 
| 95 | 
            +
              ensure
         | 
| 96 | 
            +
                ActiveRecord::Base.establish_connection(original_db_config)
         | 
| 62 97 | 
             
              end
         | 
| 63 98 |  | 
| 64 99 | 
             
              # IMPORTANT: This task won't dump the schema if ActiveRecord::Base.dump_schema_after_migration is set to false
         | 
| 65 100 | 
             
              task :_dump do
         | 
| 66 101 | 
             
                if ActiveRecord::Base.dump_schema_after_migration
         | 
| 67 | 
            -
                   | 
| 68 | 
            -
                  when :ruby then db_namespace["schema:dump"].invoke
         | 
| 69 | 
            -
                  when :sql  then db_namespace["structure:dump"].invoke
         | 
| 70 | 
            -
                  else
         | 
| 71 | 
            -
                    raise "unknown schema format #{ActiveRecord::Base.schema_format}"
         | 
| 72 | 
            -
                  end
         | 
| 102 | 
            +
                  db_namespace["schema:dump"].invoke
         | 
| 73 103 | 
             
                end
         | 
| 74 104 | 
             
                # Allow this task to be called as many times as required. An example is the
         | 
| 75 105 | 
             
                # migrate:redo task, which calls other two internally that depend on this one.
         | 
| 76 106 | 
             
                db_namespace["_dump"].reenable
         | 
| 77 107 | 
             
              end
         | 
| 78 108 |  | 
| 109 | 
            +
              namespace :_dump do
         | 
| 110 | 
            +
                ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
         | 
| 111 | 
            +
                  # IMPORTANT: This task won't dump the schema if ActiveRecord::Base.dump_schema_after_migration is set to false
         | 
| 112 | 
            +
                  task name do
         | 
| 113 | 
            +
                    if ActiveRecord::Base.dump_schema_after_migration
         | 
| 114 | 
            +
                      db_namespace["schema:dump:#{name}"].invoke
         | 
| 115 | 
            +
                    end
         | 
| 116 | 
            +
                    # Allow this task to be called as many times as required. An example is the
         | 
| 117 | 
            +
                    # migrate:redo task, which calls other two internally that depend on this one.
         | 
| 118 | 
            +
                    db_namespace["_dump:#{name}"].reenable
         | 
| 119 | 
            +
                  end
         | 
| 120 | 
            +
                end
         | 
| 121 | 
            +
              end
         | 
| 122 | 
            +
             | 
| 79 123 | 
             
              namespace :migrate do
         | 
| 80 | 
            -
                 | 
| 124 | 
            +
                ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
         | 
| 125 | 
            +
                  desc "Migrate #{name} database for current environment"
         | 
| 126 | 
            +
                  task name => :load_config do
         | 
| 127 | 
            +
                    original_db_config = ActiveRecord::Base.connection_db_config
         | 
| 128 | 
            +
                    db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: name)
         | 
| 129 | 
            +
                    ActiveRecord::Base.establish_connection(db_config)
         | 
| 130 | 
            +
                    ActiveRecord::Tasks::DatabaseTasks.migrate
         | 
| 131 | 
            +
                    db_namespace["_dump:#{name}"].invoke
         | 
| 132 | 
            +
                  ensure
         | 
| 133 | 
            +
                    ActiveRecord::Base.establish_connection(original_db_config)
         | 
| 134 | 
            +
                  end
         | 
| 135 | 
            +
                end
         | 
| 136 | 
            +
             | 
| 137 | 
            +
                desc "Rolls back the database one migration and re-migrates up (options: STEP=x, VERSION=x)."
         | 
| 81 138 | 
             
                task redo: :load_config do
         | 
| 139 | 
            +
                  ActiveRecord::Tasks::DatabaseTasks.raise_for_multi_db(command: "db:migrate:redo")
         | 
| 140 | 
            +
             | 
| 82 141 | 
             
                  raise "Empty VERSION provided" if ENV["VERSION"] && ENV["VERSION"].empty?
         | 
| 83 142 |  | 
| 84 143 | 
             
                  if ENV["VERSION"]
         | 
| @@ -90,11 +149,30 @@ db_namespace = namespace :db do | |
| 90 149 | 
             
                  end
         | 
| 91 150 | 
             
                end
         | 
| 92 151 |  | 
| 152 | 
            +
                namespace :redo do
         | 
| 153 | 
            +
                  ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
         | 
| 154 | 
            +
                    desc "Rolls back #{name} database one migration and re-migrates up (options: STEP=x, VERSION=x)."
         | 
| 155 | 
            +
                    task name => :load_config do
         | 
| 156 | 
            +
                      raise "Empty VERSION provided" if ENV["VERSION"] && ENV["VERSION"].empty?
         | 
| 157 | 
            +
             | 
| 158 | 
            +
                      if ENV["VERSION"]
         | 
| 159 | 
            +
                        db_namespace["migrate:down:#{name}"].invoke
         | 
| 160 | 
            +
                        db_namespace["migrate:up:#{name}"].invoke
         | 
| 161 | 
            +
                      else
         | 
| 162 | 
            +
                        db_namespace["rollback:#{name}"].invoke
         | 
| 163 | 
            +
                        db_namespace["migrate:#{name}"].invoke
         | 
| 164 | 
            +
                      end
         | 
| 165 | 
            +
                    end
         | 
| 166 | 
            +
                  end
         | 
| 167 | 
            +
                end
         | 
| 168 | 
            +
             | 
| 93 169 | 
             
                # desc 'Resets your database using your migrations for the current environment'
         | 
| 94 170 | 
             
                task reset: ["db:drop", "db:create", "db:migrate"]
         | 
| 95 171 |  | 
| 96 | 
            -
                 | 
| 172 | 
            +
                desc 'Runs the "up" for a given migration VERSION.'
         | 
| 97 173 | 
             
                task up: :load_config do
         | 
| 174 | 
            +
                  ActiveRecord::Tasks::DatabaseTasks.raise_for_multi_db(command: "db:migrate:up")
         | 
| 175 | 
            +
             | 
| 98 176 | 
             
                  raise "VERSION is required" if !ENV["VERSION"] || ENV["VERSION"].empty?
         | 
| 99 177 |  | 
| 100 178 | 
             
                  ActiveRecord::Tasks::DatabaseTasks.check_target_version
         | 
| @@ -106,8 +184,29 @@ db_namespace = namespace :db do | |
| 106 184 | 
             
                  db_namespace["_dump"].invoke
         | 
| 107 185 | 
             
                end
         | 
| 108 186 |  | 
| 109 | 
            -
                 | 
| 187 | 
            +
                namespace :up do
         | 
| 188 | 
            +
                  ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
         | 
| 189 | 
            +
                    task name => :load_config do
         | 
| 190 | 
            +
                      raise "VERSION is required" if !ENV["VERSION"] || ENV["VERSION"].empty?
         | 
| 191 | 
            +
             | 
| 192 | 
            +
                      db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: name)
         | 
| 193 | 
            +
             | 
| 194 | 
            +
                      ActiveRecord::Base.establish_connection(db_config)
         | 
| 195 | 
            +
                      ActiveRecord::Tasks::DatabaseTasks.check_target_version
         | 
| 196 | 
            +
                      ActiveRecord::Base.connection.migration_context.run(
         | 
| 197 | 
            +
                        :up,
         | 
| 198 | 
            +
                        ActiveRecord::Tasks::DatabaseTasks.target_version
         | 
| 199 | 
            +
                      )
         | 
| 200 | 
            +
             | 
| 201 | 
            +
                      db_namespace["_dump"].invoke
         | 
| 202 | 
            +
                    end
         | 
| 203 | 
            +
                  end
         | 
| 204 | 
            +
                end
         | 
| 205 | 
            +
             | 
| 206 | 
            +
                desc 'Runs the "down" for a given migration VERSION.'
         | 
| 110 207 | 
             
                task down: :load_config do
         | 
| 208 | 
            +
                  ActiveRecord::Tasks::DatabaseTasks.raise_for_multi_db(command: "db:migrate:down")
         | 
| 209 | 
            +
             | 
| 111 210 | 
             
                  raise "VERSION is required - To go down one migration, use db:rollback" if !ENV["VERSION"] || ENV["VERSION"].empty?
         | 
| 112 211 |  | 
| 113 212 | 
             
                  ActiveRecord::Tasks::DatabaseTasks.check_target_version
         | 
| @@ -119,27 +218,68 @@ db_namespace = namespace :db do | |
| 119 218 | 
             
                  db_namespace["_dump"].invoke
         | 
| 120 219 | 
             
                end
         | 
| 121 220 |  | 
| 221 | 
            +
                namespace :down do
         | 
| 222 | 
            +
                  ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
         | 
| 223 | 
            +
                    task name => :load_config do
         | 
| 224 | 
            +
                      raise "VERSION is required" if !ENV["VERSION"] || ENV["VERSION"].empty?
         | 
| 225 | 
            +
             | 
| 226 | 
            +
                      db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: name)
         | 
| 227 | 
            +
             | 
| 228 | 
            +
                      ActiveRecord::Base.establish_connection(db_config)
         | 
| 229 | 
            +
                      ActiveRecord::Tasks::DatabaseTasks.check_target_version
         | 
| 230 | 
            +
                      ActiveRecord::Base.connection.migration_context.run(
         | 
| 231 | 
            +
                        :down,
         | 
| 232 | 
            +
                        ActiveRecord::Tasks::DatabaseTasks.target_version
         | 
| 233 | 
            +
                      )
         | 
| 234 | 
            +
             | 
| 235 | 
            +
                      db_namespace["_dump"].invoke
         | 
| 236 | 
            +
                    end
         | 
| 237 | 
            +
                  end
         | 
| 238 | 
            +
                end
         | 
| 239 | 
            +
             | 
| 122 240 | 
             
                desc "Display status of migrations"
         | 
| 123 241 | 
             
                task status: :load_config do
         | 
| 124 | 
            -
                   | 
| 125 | 
            -
                     | 
| 242 | 
            +
                  ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
         | 
| 243 | 
            +
                    ActiveRecord::Base.establish_connection(db_config)
         | 
| 244 | 
            +
                    ActiveRecord::Tasks::DatabaseTasks.migrate_status
         | 
| 126 245 | 
             
                  end
         | 
| 246 | 
            +
                end
         | 
| 127 247 |  | 
| 128 | 
            -
             | 
| 129 | 
            -
                   | 
| 130 | 
            -
             | 
| 131 | 
            -
             | 
| 132 | 
            -
             | 
| 133 | 
            -
             | 
| 248 | 
            +
                namespace :status do
         | 
| 249 | 
            +
                  ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
         | 
| 250 | 
            +
                    desc "Display status of migrations for #{name} database"
         | 
| 251 | 
            +
                    task name => :load_config do
         | 
| 252 | 
            +
                      db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: name)
         | 
| 253 | 
            +
                      ActiveRecord::Base.establish_connection(db_config)
         | 
| 254 | 
            +
                      ActiveRecord::Tasks::DatabaseTasks.migrate_status
         | 
| 255 | 
            +
                    end
         | 
| 256 | 
            +
                  end
         | 
| 257 | 
            +
                end
         | 
| 258 | 
            +
              end
         | 
| 259 | 
            +
             | 
| 260 | 
            +
              namespace :rollback do
         | 
| 261 | 
            +
                ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
         | 
| 262 | 
            +
                  desc "Rollback #{name} database for current environment (specify steps w/ STEP=n)."
         | 
| 263 | 
            +
                  task name => :load_config do
         | 
| 264 | 
            +
                    step = ENV["STEP"] ? ENV["STEP"].to_i : 1
         | 
| 265 | 
            +
                    db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: name)
         | 
| 266 | 
            +
             | 
| 267 | 
            +
                    ActiveRecord::Base.establish_connection(db_config)
         | 
| 268 | 
            +
                    ActiveRecord::Base.connection.migration_context.rollback(step)
         | 
| 269 | 
            +
             | 
| 270 | 
            +
                    db_namespace["_dump"].invoke
         | 
| 134 271 | 
             
                  end
         | 
| 135 | 
            -
                  puts
         | 
| 136 272 | 
             
                end
         | 
| 137 273 | 
             
              end
         | 
| 138 274 |  | 
| 139 275 | 
             
              desc "Rolls the schema back to the previous version (specify steps w/ STEP=n)."
         | 
| 140 276 | 
             
              task rollback: :load_config do
         | 
| 277 | 
            +
                ActiveRecord::Tasks::DatabaseTasks.raise_for_multi_db(command: "db:rollback")
         | 
| 278 | 
            +
             | 
| 141 279 | 
             
                step = ENV["STEP"] ? ENV["STEP"].to_i : 1
         | 
| 280 | 
            +
             | 
| 142 281 | 
             
                ActiveRecord::Base.connection.migration_context.rollback(step)
         | 
| 282 | 
            +
             | 
| 143 283 | 
             
                db_namespace["_dump"].invoke
         | 
| 144 284 | 
             
              end
         | 
| 145 285 |  | 
| @@ -150,7 +290,7 @@ db_namespace = namespace :db do | |
| 150 290 | 
             
                db_namespace["_dump"].invoke
         | 
| 151 291 | 
             
              end
         | 
| 152 292 |  | 
| 153 | 
            -
               | 
| 293 | 
            +
              desc "Drops and recreates the database from db/schema.rb for the current environment and loads the seeds."
         | 
| 154 294 | 
             
              task reset: [ "db:drop", "db:setup" ]
         | 
| 155 295 |  | 
| 156 296 | 
             
              # desc "Retrieves the charset for the current environment's database"
         | 
| @@ -160,11 +300,9 @@ db_namespace = namespace :db do | |
| 160 300 |  | 
| 161 301 | 
             
              # desc "Retrieves the collation for the current environment's database"
         | 
| 162 302 | 
             
              task collation: :load_config do
         | 
| 163 | 
            -
                 | 
| 164 | 
            -
             | 
| 165 | 
            -
                 | 
| 166 | 
            -
                  $stderr.puts "Sorry, your database adapter is not supported yet. Feel free to submit a patch."
         | 
| 167 | 
            -
                end
         | 
| 303 | 
            +
                puts ActiveRecord::Tasks::DatabaseTasks.collation_current
         | 
| 304 | 
            +
              rescue NoMethodError
         | 
| 305 | 
            +
                $stderr.puts "Sorry, your database adapter is not supported yet. Feel free to submit a patch."
         | 
| 168 306 | 
             
              end
         | 
| 169 307 |  | 
| 170 308 | 
             
              desc "Retrieves the current schema version number"
         | 
| @@ -174,28 +312,87 @@ db_namespace = namespace :db do | |
| 174 312 |  | 
| 175 313 | 
             
              # desc "Raises an error if there are pending migrations"
         | 
| 176 314 | 
             
              task abort_if_pending_migrations: :load_config do
         | 
| 177 | 
            -
                pending_migrations = ActiveRecord::Base. | 
| 315 | 
            +
                pending_migrations = ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).flat_map do |db_config|
         | 
| 316 | 
            +
                  ActiveRecord::Base.establish_connection(db_config)
         | 
| 317 | 
            +
             | 
| 318 | 
            +
                  ActiveRecord::Base.connection.migration_context.open.pending_migrations
         | 
| 319 | 
            +
                end
         | 
| 178 320 |  | 
| 179 321 | 
             
                if pending_migrations.any?
         | 
| 180 322 | 
             
                  puts "You have #{pending_migrations.size} pending #{pending_migrations.size > 1 ? 'migrations:' : 'migration:'}"
         | 
| 181 323 | 
             
                  pending_migrations.each do |pending_migration|
         | 
| 182 324 | 
             
                    puts "  %4d %s" % [pending_migration.version, pending_migration.name]
         | 
| 183 325 | 
             
                  end
         | 
| 184 | 
            -
                  abort %{Run `rails db:migrate` to update your database then try again.}
         | 
| 326 | 
            +
                  abort %{Run `bin/rails db:migrate` to update your database then try again.}
         | 
| 327 | 
            +
                end
         | 
| 328 | 
            +
              ensure
         | 
| 329 | 
            +
                ActiveRecord::Base.establish_connection(ActiveRecord::Tasks::DatabaseTasks.env.to_sym)
         | 
| 330 | 
            +
              end
         | 
| 331 | 
            +
             | 
| 332 | 
            +
              namespace :abort_if_pending_migrations do
         | 
| 333 | 
            +
                ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
         | 
| 334 | 
            +
                  # desc "Raises an error if there are pending migrations for #{name} database"
         | 
| 335 | 
            +
                  task name => :load_config do
         | 
| 336 | 
            +
                    db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: name)
         | 
| 337 | 
            +
                    ActiveRecord::Base.establish_connection(db_config)
         | 
| 338 | 
            +
             | 
| 339 | 
            +
                    pending_migrations = ActiveRecord::Base.connection.migration_context.open.pending_migrations
         | 
| 340 | 
            +
             | 
| 341 | 
            +
                    if pending_migrations.any?
         | 
| 342 | 
            +
                      puts "You have #{pending_migrations.size} pending #{pending_migrations.size > 1 ? 'migrations:' : 'migration:'}"
         | 
| 343 | 
            +
                      pending_migrations.each do |pending_migration|
         | 
| 344 | 
            +
                        puts "  %4d %s" % [pending_migration.version, pending_migration.name]
         | 
| 345 | 
            +
                      end
         | 
| 346 | 
            +
                      abort %{Run `bin/rails db:migrate:#{name}` to update your database then try again.}
         | 
| 347 | 
            +
                    end
         | 
| 348 | 
            +
                  end
         | 
| 185 349 | 
             
                end
         | 
| 186 350 | 
             
              end
         | 
| 187 351 |  | 
| 188 352 | 
             
              desc "Creates the database, loads the schema, and initializes with the seed data (use db:reset to also drop the database first)"
         | 
| 189 | 
            -
              task setup: ["db: | 
| 353 | 
            +
              task setup: ["db:create", :environment, "db:schema:load", :seed]
         | 
| 354 | 
            +
             | 
| 355 | 
            +
              desc "Runs setup if database does not exist, or runs migrations if it does"
         | 
| 356 | 
            +
              task prepare: :load_config do
         | 
| 357 | 
            +
                seed = false
         | 
| 358 | 
            +
             | 
| 359 | 
            +
                ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
         | 
| 360 | 
            +
                  ActiveRecord::Base.establish_connection(db_config)
         | 
| 361 | 
            +
             | 
| 362 | 
            +
                  # Skipped when no database
         | 
| 363 | 
            +
                  ActiveRecord::Tasks::DatabaseTasks.migrate
         | 
| 364 | 
            +
                  if ActiveRecord::Base.dump_schema_after_migration
         | 
| 365 | 
            +
                    ActiveRecord::Tasks::DatabaseTasks.dump_schema(db_config, ActiveRecord::Base.schema_format)
         | 
| 366 | 
            +
                  end
         | 
| 367 | 
            +
             | 
| 368 | 
            +
                rescue ActiveRecord::NoDatabaseError
         | 
| 369 | 
            +
                  ActiveRecord::Tasks::DatabaseTasks.create_current(db_config.env_name, db_config.name)
         | 
| 370 | 
            +
                  ActiveRecord::Tasks::DatabaseTasks.load_schema(
         | 
| 371 | 
            +
                    db_config,
         | 
| 372 | 
            +
                    ActiveRecord::Base.schema_format,
         | 
| 373 | 
            +
                    nil
         | 
| 374 | 
            +
                  )
         | 
| 375 | 
            +
             | 
| 376 | 
            +
                  seed = true
         | 
| 377 | 
            +
                end
         | 
| 378 | 
            +
             | 
| 379 | 
            +
                ActiveRecord::Base.establish_connection
         | 
| 380 | 
            +
                ActiveRecord::Tasks::DatabaseTasks.load_seed if seed
         | 
| 381 | 
            +
              end
         | 
| 190 382 |  | 
| 191 383 | 
             
              desc "Loads the seed data from db/seeds.rb"
         | 
| 192 | 
            -
              task : | 
| 384 | 
            +
              task seed: :load_config do
         | 
| 193 385 | 
             
                db_namespace["abort_if_pending_migrations"].invoke
         | 
| 194 386 | 
             
                ActiveRecord::Tasks::DatabaseTasks.load_seed
         | 
| 195 387 | 
             
              end
         | 
| 196 388 |  | 
| 389 | 
            +
              namespace :seed do
         | 
| 390 | 
            +
                desc "Truncates tables of each database for current environment and loads the seeds"
         | 
| 391 | 
            +
                task replant: [:load_config, :truncate_all, :seed]
         | 
| 392 | 
            +
              end
         | 
| 393 | 
            +
             | 
| 197 394 | 
             
              namespace :fixtures do
         | 
| 198 | 
            -
                desc "Loads fixtures into the current environment's database. Load specific fixtures using FIXTURES=x,y. Load from subdirectory in test/fixtures using FIXTURES_DIR=z. Specify an alternative path ( | 
| 395 | 
            +
                desc "Loads fixtures into the current environment's database. Load specific fixtures using FIXTURES=x,y. Load from subdirectory in test/fixtures using FIXTURES_DIR=z. Specify an alternative path (e.g. spec/fixtures) using FIXTURES_PATH=spec/fixtures."
         | 
| 199 396 | 
             
                task load: :load_config do
         | 
| 200 397 | 
             
                  require "active_record/fixtures"
         | 
| 201 398 |  | 
| @@ -217,7 +414,7 @@ db_namespace = namespace :db do | |
| 217 414 | 
             
                  ActiveRecord::FixtureSet.create_fixtures(fixtures_dir, fixture_files)
         | 
| 218 415 | 
             
                end
         | 
| 219 416 |  | 
| 220 | 
            -
                # desc "Search for a fixture given a LABEL or ID. Specify an alternative path ( | 
| 417 | 
            +
                # desc "Search for a fixture given a LABEL or ID. Specify an alternative path (e.g. spec/fixtures) using FIXTURES_PATH=spec/fixtures."
         | 
| 221 418 | 
             
                task identify: :load_config do
         | 
| 222 419 | 
             
                  require "active_record/fixtures"
         | 
| 223 420 |  | 
| @@ -229,7 +426,7 @@ db_namespace = namespace :db do | |
| 229 426 | 
             
                  base_dir = ActiveRecord::Tasks::DatabaseTasks.fixtures_path
         | 
| 230 427 |  | 
| 231 428 | 
             
                  Dir["#{base_dir}/**/*.yml"].each do |file|
         | 
| 232 | 
            -
                    if data =  | 
| 429 | 
            +
                    if data = ActiveSupport::ConfigurationFile.parse(file)
         | 
| 233 430 | 
             
                      data.each_key do |key|
         | 
| 234 431 | 
             
                        key_id = ActiveRecord::FixtureSet.identify(key)
         | 
| 235 432 |  | 
| @@ -243,100 +440,173 @@ db_namespace = namespace :db do | |
| 243 440 | 
             
              end
         | 
| 244 441 |  | 
| 245 442 | 
             
              namespace :schema do
         | 
| 246 | 
            -
                desc "Creates a db/schema.rb  | 
| 443 | 
            +
                desc "Creates a database schema file (either db/schema.rb or db/structure.sql, depending on `config.active_record.schema_format`)"
         | 
| 247 444 | 
             
                task dump: :load_config do
         | 
| 248 | 
            -
                   | 
| 249 | 
            -
             | 
| 250 | 
            -
             | 
| 251 | 
            -
                    ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file)
         | 
| 445 | 
            +
                  ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
         | 
| 446 | 
            +
                    ActiveRecord::Base.establish_connection(db_config)
         | 
| 447 | 
            +
                    ActiveRecord::Tasks::DatabaseTasks.dump_schema(db_config)
         | 
| 252 448 | 
             
                  end
         | 
| 449 | 
            +
             | 
| 253 450 | 
             
                  db_namespace["schema:dump"].reenable
         | 
| 254 451 | 
             
                end
         | 
| 255 452 |  | 
| 256 | 
            -
                desc "Loads a schema.rb  | 
| 453 | 
            +
                desc "Loads a database schema file (either db/schema.rb or db/structure.sql, depending on `config.active_record.schema_format`) into the database"
         | 
| 257 454 | 
             
                task load: [:load_config, :check_protected_environments] do
         | 
| 258 | 
            -
                  ActiveRecord::Tasks::DatabaseTasks.load_schema_current( | 
| 455 | 
            +
                  ActiveRecord::Tasks::DatabaseTasks.load_schema_current(ActiveRecord::Base.schema_format, ENV["SCHEMA"])
         | 
| 259 456 | 
             
                end
         | 
| 260 457 |  | 
| 261 458 | 
             
                task load_if_ruby: ["db:create", :environment] do
         | 
| 459 | 
            +
                  ActiveSupport::Deprecation.warn(<<-MSG.squish)
         | 
| 460 | 
            +
                    Using `bin/rails db:schema:load_if_ruby` is deprecated and will be removed in Rails 6.2.
         | 
| 461 | 
            +
                    Configure the format using `config.active_record.schema_format = :ruby` to use `schema.rb` and run `bin/rails db:schema:load` instead.
         | 
| 462 | 
            +
                  MSG
         | 
| 262 463 | 
             
                  db_namespace["schema:load"].invoke if ActiveRecord::Base.schema_format == :ruby
         | 
| 263 464 | 
             
                end
         | 
| 264 465 |  | 
| 466 | 
            +
                namespace :dump do
         | 
| 467 | 
            +
                  ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
         | 
| 468 | 
            +
                    desc "Creates a database schema file (either db/schema.rb or db/structure.sql, depending on `config.active_record.schema_format`) for #{name} database"
         | 
| 469 | 
            +
                    task name => :load_config do
         | 
| 470 | 
            +
                      db_config = ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env, name: name)
         | 
| 471 | 
            +
                      ActiveRecord::Base.establish_connection(db_config)
         | 
| 472 | 
            +
                      ActiveRecord::Tasks::DatabaseTasks.dump_schema(db_config)
         | 
| 473 | 
            +
                      db_namespace["schema:dump:#{name}"].reenable
         | 
| 474 | 
            +
                    end
         | 
| 475 | 
            +
                  end
         | 
| 476 | 
            +
                end
         | 
| 477 | 
            +
             | 
| 478 | 
            +
                namespace :load do
         | 
| 479 | 
            +
                  ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
         | 
| 480 | 
            +
                    desc "Loads a database schema file (either db/schema.rb or db/structure.sql, depending on `config.active_record.schema_format`) into the #{name} database"
         | 
| 481 | 
            +
                    task name => :load_config do
         | 
| 482 | 
            +
                      db_config = ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env, name: name)
         | 
| 483 | 
            +
                      ActiveRecord::Tasks::DatabaseTasks.load_schema(db_config, ActiveRecord::Base.schema_format, ENV["SCHEMA"])
         | 
| 484 | 
            +
                    end
         | 
| 485 | 
            +
                  end
         | 
| 486 | 
            +
                end
         | 
| 487 | 
            +
             | 
| 265 488 | 
             
                namespace :cache do
         | 
| 266 489 | 
             
                  desc "Creates a db/schema_cache.yml file."
         | 
| 267 490 | 
             
                  task dump: :load_config do
         | 
| 268 | 
            -
                     | 
| 269 | 
            -
             | 
| 270 | 
            -
             | 
| 491 | 
            +
                    ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
         | 
| 492 | 
            +
                      ActiveRecord::Base.establish_connection(db_config)
         | 
| 493 | 
            +
                      filename = ActiveRecord::Tasks::DatabaseTasks.cache_dump_filename(
         | 
| 494 | 
            +
                        db_config.name,
         | 
| 495 | 
            +
                        schema_cache_path: db_config.schema_cache_path,
         | 
| 496 | 
            +
                      )
         | 
| 497 | 
            +
                      ActiveRecord::Tasks::DatabaseTasks.dump_schema_cache(
         | 
| 498 | 
            +
                        ActiveRecord::Base.connection,
         | 
| 499 | 
            +
                        filename,
         | 
| 500 | 
            +
                      )
         | 
| 501 | 
            +
                    end
         | 
| 271 502 | 
             
                  end
         | 
| 272 503 |  | 
| 273 504 | 
             
                  desc "Clears a db/schema_cache.yml file."
         | 
| 274 505 | 
             
                  task clear: :load_config do
         | 
| 275 | 
            -
                     | 
| 276 | 
            -
             | 
| 506 | 
            +
                    ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
         | 
| 507 | 
            +
                      filename = ActiveRecord::Tasks::DatabaseTasks.cache_dump_filename(
         | 
| 508 | 
            +
                        db_config.name,
         | 
| 509 | 
            +
                        schema_cache_path: db_config.schema_cache_path,
         | 
| 510 | 
            +
                      )
         | 
| 511 | 
            +
                      ActiveRecord::Tasks::DatabaseTasks.clear_schema_cache(
         | 
| 512 | 
            +
                        filename,
         | 
| 513 | 
            +
                      )
         | 
| 514 | 
            +
                    end
         | 
| 277 515 | 
             
                  end
         | 
| 278 516 | 
             
                end
         | 
| 279 | 
            -
             | 
| 280 517 | 
             
              end
         | 
| 281 518 |  | 
| 282 519 | 
             
              namespace :structure do
         | 
| 283 520 | 
             
                desc "Dumps the database structure to db/structure.sql. Specify another file with SCHEMA=db/my_structure.sql"
         | 
| 284 521 | 
             
                task dump: :load_config do
         | 
| 285 | 
            -
                   | 
| 286 | 
            -
             | 
| 287 | 
            -
             | 
| 288 | 
            -
             | 
| 289 | 
            -
             | 
| 290 | 
            -
             | 
| 291 | 
            -
                      f.puts ActiveRecord::Base.connection.dump_schema_information
         | 
| 292 | 
            -
                      f.print "\n"
         | 
| 293 | 
            -
                    end
         | 
| 294 | 
            -
                  end
         | 
| 522 | 
            +
                  ActiveSupport::Deprecation.warn(<<-MSG.squish)
         | 
| 523 | 
            +
                    Using `bin/rails db:structure:dump` is deprecated and will be removed in Rails 6.2.
         | 
| 524 | 
            +
                    Configure the format using `config.active_record.schema_format = :sql` to use `structure.sql` and run `bin/rails db:schema:dump` instead.
         | 
| 525 | 
            +
                  MSG
         | 
| 526 | 
            +
             | 
| 527 | 
            +
                  db_namespace["schema:dump"].invoke
         | 
| 295 528 | 
             
                  db_namespace["structure:dump"].reenable
         | 
| 296 529 | 
             
                end
         | 
| 297 530 |  | 
| 298 531 | 
             
                desc "Recreates the databases from the structure.sql file"
         | 
| 299 532 | 
             
                task load: [:load_config, :check_protected_environments] do
         | 
| 300 | 
            -
                   | 
| 533 | 
            +
                  ActiveSupport::Deprecation.warn(<<-MSG.squish)
         | 
| 534 | 
            +
                    Using `bin/rails db:structure:load` is deprecated and will be removed in Rails 6.2.
         | 
| 535 | 
            +
                    Configure the format using `config.active_record.schema_format = :sql` to use `structure.sql` and run `bin/rails db:schema:load` instead.
         | 
| 536 | 
            +
                  MSG
         | 
| 537 | 
            +
                  db_namespace["schema:load"].invoke
         | 
| 301 538 | 
             
                end
         | 
| 302 539 |  | 
| 303 540 | 
             
                task load_if_sql: ["db:create", :environment] do
         | 
| 304 | 
            -
                   | 
| 541 | 
            +
                  ActiveSupport::Deprecation.warn(<<-MSG.squish)
         | 
| 542 | 
            +
                    Using `bin/rails db:structure:load_if_sql` is deprecated and will be removed in Rails 6.2.
         | 
| 543 | 
            +
                    Configure the format using `config.active_record.schema_format = :sql` to use `structure.sql` and run `bin/rails db:schema:load` instead.
         | 
| 544 | 
            +
                  MSG
         | 
| 545 | 
            +
                  db_namespace["schema:load"].invoke if ActiveRecord::Base.schema_format == :sql
         | 
| 546 | 
            +
                end
         | 
| 547 | 
            +
             | 
| 548 | 
            +
                namespace :dump do
         | 
| 549 | 
            +
                  ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
         | 
| 550 | 
            +
                    desc "Dumps the #{name} database structure to db/structure.sql. Specify another file with SCHEMA=db/my_structure.sql"
         | 
| 551 | 
            +
                    task name => :load_config do
         | 
| 552 | 
            +
                      ActiveSupport::Deprecation.warn(<<-MSG.squish)
         | 
| 553 | 
            +
                        Using `bin/rails db:structure:dump:#{name}` is deprecated and will be removed in Rails 6.2.
         | 
| 554 | 
            +
                        Configure the format using `config.active_record.schema_format = :sql` to use `structure.sql` and run `bin/rails db:schema:dump:#{name}` instead.
         | 
| 555 | 
            +
                      MSG
         | 
| 556 | 
            +
                      db_namespace["schema:dump:#{name}"].invoke
         | 
| 557 | 
            +
                      db_namespace["structure:dump:#{name}"].reenable
         | 
| 558 | 
            +
                    end
         | 
| 559 | 
            +
                  end
         | 
| 560 | 
            +
                end
         | 
| 561 | 
            +
             | 
| 562 | 
            +
                namespace :load do
         | 
| 563 | 
            +
                  ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
         | 
| 564 | 
            +
                    desc "Recreates the #{name} database from the structure.sql file"
         | 
| 565 | 
            +
                    task name => :load_config do
         | 
| 566 | 
            +
                      ActiveSupport::Deprecation.warn(<<-MSG.squish)
         | 
| 567 | 
            +
                        Using `bin/rails db:structure:load:#{name}` is deprecated and will be removed in Rails 6.2.
         | 
| 568 | 
            +
                        Configure the format using `config.active_record.schema_format = :sql` to use `structure.sql` and run `bin/rails db:schema:load:#{name}` instead.
         | 
| 569 | 
            +
                      MSG
         | 
| 570 | 
            +
                      db_namespace["schema:load:#{name}"].invoke
         | 
| 571 | 
            +
                    end
         | 
| 572 | 
            +
                  end
         | 
| 305 573 | 
             
                end
         | 
| 306 574 | 
             
              end
         | 
| 307 575 |  | 
| 308 576 | 
             
              namespace :test do
         | 
| 309 577 | 
             
                # desc "Recreate the test database from the current schema"
         | 
| 310 578 | 
             
                task load: %w(db:test:purge) do
         | 
| 311 | 
            -
                   | 
| 312 | 
            -
                  when :ruby
         | 
| 313 | 
            -
                    db_namespace["test:load_schema"].invoke
         | 
| 314 | 
            -
                  when :sql
         | 
| 315 | 
            -
                    db_namespace["test:load_structure"].invoke
         | 
| 316 | 
            -
                  end
         | 
| 579 | 
            +
                  db_namespace["test:load_schema"].invoke
         | 
| 317 580 | 
             
                end
         | 
| 318 581 |  | 
| 319 | 
            -
                # desc "Recreate the test database from an existent schema.rb  | 
| 582 | 
            +
                # desc "Recreate the test database from an existent schema file (schema.rb or structure.sql, depending on `config.active_record.schema_format`)"
         | 
| 320 583 | 
             
                task load_schema: %w(db:test:purge) do
         | 
| 321 | 
            -
                   | 
| 322 | 
            -
             | 
| 323 | 
            -
             | 
| 324 | 
            -
                    ActiveRecord::Tasks::DatabaseTasks. | 
| 325 | 
            -
             | 
| 326 | 
            -
             | 
| 327 | 
            -
             | 
| 328 | 
            -
             | 
| 584 | 
            +
                  should_reconnect = ActiveRecord::Base.connection_pool.active_connection?
         | 
| 585 | 
            +
                  ActiveRecord::Schema.verbose = false
         | 
| 586 | 
            +
                  ActiveRecord::Base.configurations.configs_for(env_name: "test").each do |db_config|
         | 
| 587 | 
            +
                    filename = ActiveRecord::Tasks::DatabaseTasks.dump_filename(db_config.name)
         | 
| 588 | 
            +
                    ActiveRecord::Tasks::DatabaseTasks.load_schema(db_config, ActiveRecord::Base.schema_format, filename)
         | 
| 589 | 
            +
                  end
         | 
| 590 | 
            +
                ensure
         | 
| 591 | 
            +
                  if should_reconnect
         | 
| 592 | 
            +
                    ActiveRecord::Base.establish_connection(ActiveRecord::Tasks::DatabaseTasks.env.to_sym)
         | 
| 329 593 | 
             
                  end
         | 
| 330 594 | 
             
                end
         | 
| 331 595 |  | 
| 332 596 | 
             
                # desc "Recreate the test database from an existent structure.sql file"
         | 
| 333 597 | 
             
                task load_structure: %w(db:test:purge) do
         | 
| 334 | 
            -
                   | 
| 598 | 
            +
                  ActiveSupport::Deprecation.warn(<<-MSG.squish)
         | 
| 599 | 
            +
                    Using `bin/rails db:test:load_structure` is deprecated and will be removed in Rails 6.2.
         | 
| 600 | 
            +
                    Configure the format using `config.active_record.schema_format = :sql` to use `structure.sql` and run `bin/rails db:test:load_schema` instead.
         | 
| 601 | 
            +
                  MSG
         | 
| 602 | 
            +
                  db_namespace["test:load_schema"].invoke
         | 
| 335 603 | 
             
                end
         | 
| 336 604 |  | 
| 337 605 | 
             
                # desc "Empty the test database"
         | 
| 338 606 | 
             
                task purge: %w(load_config check_protected_environments) do
         | 
| 339 | 
            -
                  ActiveRecord:: | 
| 607 | 
            +
                  ActiveRecord::Base.configurations.configs_for(env_name: "test").each do |db_config|
         | 
| 608 | 
            +
                    ActiveRecord::Tasks::DatabaseTasks.purge(db_config)
         | 
| 609 | 
            +
                  end
         | 
| 340 610 | 
             
                end
         | 
| 341 611 |  | 
| 342 612 | 
             
                # desc 'Load the test schema'
         | 
| @@ -345,6 +615,56 @@ db_namespace = namespace :db do | |
| 345 615 | 
             
                    db_namespace["test:load"].invoke
         | 
| 346 616 | 
             
                  end
         | 
| 347 617 | 
             
                end
         | 
| 618 | 
            +
             | 
| 619 | 
            +
                ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
         | 
| 620 | 
            +
                  # desc "Recreate the #{name} test database"
         | 
| 621 | 
            +
                  namespace :load do
         | 
| 622 | 
            +
                    task name => "db:test:purge:#{name}" do
         | 
| 623 | 
            +
                      db_namespace["test:load_schema:#{name}"].invoke
         | 
| 624 | 
            +
                    end
         | 
| 625 | 
            +
                  end
         | 
| 626 | 
            +
             | 
| 627 | 
            +
                  # desc "Recreate the #{name} test database from an existent schema.rb file"
         | 
| 628 | 
            +
                  namespace :load_schema do
         | 
| 629 | 
            +
                    task name => "db:test:purge:#{name}" do
         | 
| 630 | 
            +
                      should_reconnect = ActiveRecord::Base.connection_pool.active_connection?
         | 
| 631 | 
            +
                      ActiveRecord::Schema.verbose = false
         | 
| 632 | 
            +
                      filename = ActiveRecord::Tasks::DatabaseTasks.dump_filename(name)
         | 
| 633 | 
            +
                      db_config = ActiveRecord::Base.configurations.configs_for(env_name: "test", name: name)
         | 
| 634 | 
            +
                      ActiveRecord::Tasks::DatabaseTasks.load_schema(db_config, ActiveRecord::Base.schema_format, filename)
         | 
| 635 | 
            +
                    ensure
         | 
| 636 | 
            +
                      if should_reconnect
         | 
| 637 | 
            +
                        ActiveRecord::Base.establish_connection(ActiveRecord::Tasks::DatabaseTasks.env.to_sym)
         | 
| 638 | 
            +
                      end
         | 
| 639 | 
            +
                    end
         | 
| 640 | 
            +
                  end
         | 
| 641 | 
            +
             | 
| 642 | 
            +
                  # desc "Recreate the #{name} test database from an existent structure.sql file"
         | 
| 643 | 
            +
                  namespace :load_structure do
         | 
| 644 | 
            +
                    task name => "db:test:purge:#{name}" do
         | 
| 645 | 
            +
                      ActiveSupport::Deprecation.warn(<<-MSG.squish)
         | 
| 646 | 
            +
                        Using `bin/rails db:test:load_structure:#{name}` is deprecated and will be removed in Rails 6.2.
         | 
| 647 | 
            +
                        Configure the format using `config.active_record.schema_format = :sql` to use `structure.sql` and run `bin/rails db:test:load_structure:#{name}` instead.
         | 
| 648 | 
            +
                      MSG
         | 
| 649 | 
            +
                      db_namespace["test:load_schema:#{name}"].invoke
         | 
| 650 | 
            +
                    end
         | 
| 651 | 
            +
                  end
         | 
| 652 | 
            +
             | 
| 653 | 
            +
                  # desc "Empty the #{name} test database"
         | 
| 654 | 
            +
                  namespace :purge do
         | 
| 655 | 
            +
                    task name => %w(load_config check_protected_environments) do
         | 
| 656 | 
            +
                      db_config = ActiveRecord::Base.configurations.configs_for(env_name: "test", name: name)
         | 
| 657 | 
            +
                      ActiveRecord::Tasks::DatabaseTasks.purge(db_config)
         | 
| 658 | 
            +
                    end
         | 
| 659 | 
            +
                  end
         | 
| 660 | 
            +
             | 
| 661 | 
            +
                  # desc 'Load the #{name} database test schema'
         | 
| 662 | 
            +
                  namespace :prepare do
         | 
| 663 | 
            +
                    task name => :load_config do
         | 
| 664 | 
            +
                      db_namespace["test:load:#{name}"].invoke
         | 
| 665 | 
            +
                    end
         | 
| 666 | 
            +
                  end
         | 
| 667 | 
            +
                end
         | 
| 348 668 | 
             
              end
         | 
| 349 669 | 
             
            end
         | 
| 350 670 |  | 
| @@ -360,6 +680,10 @@ namespace :railties do | |
| 360 680 | 
             
                    if railtie.respond_to?(:paths) && (path = railtie.paths["db/migrate"].first)
         | 
| 361 681 | 
             
                      railties[railtie.railtie_name] = path
         | 
| 362 682 | 
             
                    end
         | 
| 683 | 
            +
             | 
| 684 | 
            +
                    unless ENV["MIGRATIONS_PATH"].blank?
         | 
| 685 | 
            +
                      railties[railtie.railtie_name] = railtie.root + ENV["MIGRATIONS_PATH"]
         | 
| 686 | 
            +
                    end
         | 
| 363 687 | 
             
                  end
         | 
| 364 688 |  | 
| 365 689 | 
             
                  on_skip = Proc.new do |name, migration|
         |