ibm_db 5.6.1 → 5.7.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.
- checksums.yaml +4 -4
- data/ext/Makefile +13 -9
- data/ext/extconf.rb +176 -110
- data/ext/ibm_db.c +60 -0
- data/ext/ibm_db.o +0 -0
- data/ext/ibm_db.so +0 -0
- data/ext/mkmf.log +6 -6
- data/ext/ruby_ibm_db_cli.c +14 -10
- data/ext/ruby_ibm_db_cli.h +4 -0
- data/ext/ruby_ibm_db_cli.o +0 -0
- data/lib/IBM_DB.rb +2 -2
- data/lib/active_record/connection_adapters/ibm_db_adapter.rb +1254 -277
- data/test/active_record/connection_adapters/fake_legacy_adapter.rb +17 -0
- data/test/active_record/connection_adapters/fake_misleading_legacy_adapter.rb +8 -0
- data/test/activejob/destroy_association_async_job_test.rb +62 -0
- data/test/activejob/destroy_association_async_test.rb +147 -11
- data/test/activejob/job_runtime_test.rb +41 -0
- data/test/activejob/unloadable_base_job.rb +3 -0
- data/test/cases/active_record_schema_test.rb +196 -0
- data/test/cases/active_record_test.rb +21 -0
- data/test/cases/adapter_prevent_writes_test.rb +26 -202
- data/test/cases/adapter_test.rb +592 -82
- data/test/cases/adapters/abstract_mysql_adapter/active_schema_test.rb +210 -0
- data/test/cases/adapters/abstract_mysql_adapter/adapter_prevent_writes_test.rb +111 -0
- data/test/cases/adapters/abstract_mysql_adapter/auto_increment_test.rb +48 -0
- data/test/cases/adapters/abstract_mysql_adapter/bind_parameter_test.rb +91 -0
- data/test/cases/adapters/abstract_mysql_adapter/case_sensitivity_test.rb +65 -0
- data/test/cases/adapters/abstract_mysql_adapter/charset_collation_test.rb +85 -0
- data/test/cases/adapters/abstract_mysql_adapter/connection_test.rb +267 -0
- data/test/cases/adapters/abstract_mysql_adapter/count_deleted_rows_with_lock_test.rb +29 -0
- data/test/cases/adapters/abstract_mysql_adapter/json_test.rb +24 -0
- data/test/cases/adapters/abstract_mysql_adapter/mysql_boolean_test.rb +102 -0
- data/test/cases/adapters/abstract_mysql_adapter/mysql_enum_test.rb +47 -0
- data/test/cases/adapters/abstract_mysql_adapter/mysql_explain_test.rb +71 -0
- data/test/cases/adapters/abstract_mysql_adapter/nested_deadlock_test.rb +191 -0
- data/test/cases/adapters/abstract_mysql_adapter/optimizer_hints_test.rb +69 -0
- data/test/cases/adapters/abstract_mysql_adapter/quoting_test.rb +49 -0
- data/test/cases/adapters/abstract_mysql_adapter/schema_migrations_test.rb +68 -0
- data/test/cases/adapters/abstract_mysql_adapter/schema_test.rb +130 -0
- data/test/cases/adapters/abstract_mysql_adapter/set_test.rb +32 -0
- data/test/cases/adapters/abstract_mysql_adapter/sp_test.rb +39 -0
- data/test/cases/adapters/abstract_mysql_adapter/sql_types_test.rb +16 -0
- data/test/cases/adapters/abstract_mysql_adapter/table_options_test.rb +125 -0
- data/test/cases/adapters/abstract_mysql_adapter/transaction_test.rb +204 -0
- data/test/cases/adapters/abstract_mysql_adapter/unsigned_type_test.rb +77 -0
- data/test/cases/adapters/abstract_mysql_adapter/virtual_column_test.rb +69 -0
- data/test/cases/adapters/abstract_mysql_adapter/warnings_test.rb +109 -0
- data/test/cases/adapters/mysql2/check_constraint_quoting_test.rb +35 -0
- data/test/cases/adapters/mysql2/dbconsole_test.rb +87 -0
- data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +136 -10
- data/test/cases/adapters/mysql2/mysql2_rake_test.rb +433 -0
- data/test/cases/adapters/postgresql/active_schema_test.rb +8 -4
- data/test/cases/adapters/postgresql/array_test.rb +6 -6
- data/test/cases/adapters/postgresql/bind_parameter_test.rb +52 -0
- data/test/cases/adapters/postgresql/bit_string_test.rb +2 -2
- data/test/cases/adapters/postgresql/bytea_test.rb +3 -3
- data/test/cases/adapters/postgresql/case_insensitive_test.rb +1 -1
- data/test/cases/adapters/postgresql/change_schema_test.rb +32 -1
- data/test/cases/adapters/postgresql/cidr_test.rb +17 -0
- data/test/cases/adapters/postgresql/citext_test.rb +7 -1
- data/test/cases/adapters/postgresql/collation_test.rb +1 -1
- data/test/cases/adapters/postgresql/composite_test.rb +1 -1
- data/test/cases/adapters/postgresql/connection_test.rb +43 -36
- data/test/cases/adapters/postgresql/create_unlogged_tables_test.rb +3 -2
- data/test/cases/adapters/postgresql/datatype_test.rb +9 -4
- data/test/cases/adapters/postgresql/date_test.rb +2 -2
- data/test/cases/adapters/postgresql/dbconsole_test.rb +109 -0
- data/test/cases/adapters/postgresql/deferred_constraints_test.rb +55 -0
- data/test/cases/adapters/postgresql/domain_test.rb +1 -1
- data/test/cases/adapters/postgresql/enum_test.rb +208 -8
- data/test/cases/adapters/postgresql/explain_test.rb +25 -6
- data/test/cases/adapters/postgresql/extension_migration_test.rb +51 -9
- data/test/cases/adapters/postgresql/foreign_table_test.rb +3 -3
- data/test/cases/adapters/postgresql/full_text_test.rb +1 -1
- data/test/cases/adapters/postgresql/geometric_test.rb +13 -6
- data/test/cases/adapters/postgresql/hstore_test.rb +22 -32
- data/test/cases/adapters/postgresql/infinity_test.rb +13 -2
- data/test/cases/adapters/postgresql/integer_test.rb +1 -1
- data/test/cases/adapters/postgresql/interval_test.rb +9 -17
- data/test/cases/adapters/postgresql/invertible_migration_test.rb +139 -0
- data/test/cases/adapters/postgresql/json_test.rb +5 -0
- data/test/cases/adapters/postgresql/ltree_test.rb +1 -1
- data/test/cases/adapters/postgresql/money_test.rb +17 -9
- data/test/cases/adapters/postgresql/network_test.rb +13 -1
- data/test/cases/adapters/postgresql/numbers_test.rb +18 -2
- data/test/cases/adapters/postgresql/optimizer_hints_test.rb +9 -9
- data/test/cases/adapters/postgresql/partitions_test.rb +5 -2
- data/test/cases/adapters/postgresql/postgresql_adapter_prevent_writes_test.rb +7 -110
- data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +403 -20
- data/test/cases/adapters/postgresql/postgresql_rake_test.rb +637 -0
- data/test/cases/adapters/postgresql/prepared_statements_disabled_test.rb +1 -1
- data/test/cases/adapters/postgresql/quoting_test.rb +60 -1
- data/test/cases/adapters/postgresql/range_test.rb +185 -21
- data/test/cases/adapters/postgresql/referential_integrity_test.rb +29 -5
- data/test/cases/adapters/postgresql/rename_table_test.rb +35 -8
- data/test/cases/adapters/postgresql/schema_authorization_test.rb +2 -2
- data/test/cases/adapters/postgresql/schema_test.rb +270 -20
- data/test/cases/adapters/postgresql/serial_test.rb +5 -5
- data/test/cases/adapters/postgresql/statement_pool_test.rb +6 -2
- data/test/cases/adapters/postgresql/timestamp_test.rb +122 -5
- data/test/cases/adapters/postgresql/transaction_nested_test.rb +130 -6
- data/test/cases/adapters/postgresql/transaction_test.rb +37 -11
- data/test/cases/adapters/postgresql/type_lookup_test.rb +1 -1
- data/test/cases/adapters/postgresql/uuid_test.rb +77 -9
- data/test/cases/adapters/postgresql/virtual_column_test.rb +114 -0
- data/test/cases/adapters/postgresql/xml_test.rb +1 -1
- data/test/cases/adapters/sqlite3/bind_parameter_test.rb +52 -0
- data/test/cases/adapters/sqlite3/collation_test.rb +1 -1
- data/test/cases/adapters/sqlite3/copy_table_test.rb +28 -7
- data/test/cases/adapters/sqlite3/dbconsole_test.rb +81 -0
- data/test/cases/adapters/sqlite3/explain_test.rb +3 -3
- data/test/cases/adapters/sqlite3/quoting_test.rb +34 -3
- data/test/cases/adapters/sqlite3/sqlite3_adapter_prevent_writes_test.rb +9 -102
- data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +727 -72
- data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +6 -3
- data/test/cases/adapters/sqlite3/sqlite_rake_test.rb +264 -0
- data/test/cases/adapters/sqlite3/statement_pool_test.rb +1 -1
- data/test/cases/adapters/sqlite3/transaction_test.rb +6 -3
- data/test/cases/adapters/sqlite3/virtual_column_test.rb +138 -0
- data/test/cases/adapters/sqlite3/virtual_table_test.rb +51 -0
- data/test/cases/adapters/trilogy/dbconsole_test.rb +76 -0
- data/test/cases/adapters/trilogy/trilogy_adapter_test.rb +473 -0
- data/test/cases/adapters/trilogy/trilogy_rake_test.rb +433 -0
- data/test/cases/aggregations_test.rb +16 -0
- data/test/cases/annotate_test.rb +14 -12
- data/test/cases/arel/attributes/attribute_test.rb +86 -47
- data/test/cases/arel/collectors/bind_test.rb +1 -1
- data/test/cases/arel/collectors/composite_test.rb +11 -1
- data/test/cases/arel/collectors/sql_string_test.rb +1 -1
- data/test/cases/arel/collectors/substitute_bind_collector_test.rb +1 -1
- data/test/cases/arel/delete_manager_test.rb +0 -6
- data/test/cases/arel/factory_methods_test.rb +45 -0
- data/test/cases/arel/insert_manager_test.rb +1 -7
- data/test/cases/arel/nodes/as_test.rb +12 -0
- data/test/cases/arel/nodes/ascending_test.rb +1 -1
- data/test/cases/arel/nodes/bin_test.rb +1 -1
- data/test/cases/arel/nodes/bound_sql_literal_test.rb +31 -0
- data/test/cases/arel/nodes/cte_test.rb +46 -0
- data/test/cases/arel/nodes/descending_test.rb +1 -1
- data/test/cases/arel/nodes/equality_test.rb +3 -3
- data/test/cases/arel/nodes/filter_test.rb +37 -0
- data/test/cases/arel/nodes/fragments_test.rb +38 -0
- data/test/cases/arel/nodes/homogeneous_in_test.rb +52 -0
- data/test/cases/arel/nodes/infix_operation_test.rb +1 -1
- data/test/cases/arel/nodes/node_test.rb +1 -1
- data/test/cases/arel/nodes/or_test.rb +2 -2
- data/test/cases/arel/nodes/sql_literal_test.rb +18 -1
- data/test/cases/arel/nodes/table_alias_test.rb +12 -0
- data/test/cases/arel/nodes/unary_operation_test.rb +1 -1
- data/test/cases/arel/nodes/update_statement_test.rb +4 -0
- data/test/cases/arel/nodes_test.rb +3 -2
- data/test/cases/arel/select_manager_test.rb +12 -12
- data/test/cases/arel/support/fake_record.rb +22 -17
- data/test/cases/arel/table_test.rb +15 -25
- data/test/cases/arel/update_manager_test.rb +51 -6
- data/test/cases/arel/visitors/dispatch_contamination_test.rb +1 -1
- data/test/cases/arel/visitors/dot_test.rb +177 -2
- data/test/cases/arel/visitors/mysql_test.rb +49 -1
- data/test/cases/arel/visitors/postgres_test.rb +1 -31
- data/test/cases/arel/visitors/sqlite_test.rb +1 -1
- data/test/cases/arel/visitors/to_sql_test.rb +330 -20
- data/test/cases/assertions/query_assertions_test.rb +136 -0
- data/test/cases/associations/belongs_to_associations_test.rb +502 -41
- data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +1 -1
- data/test/cases/associations/cascaded_eager_loading_test.rb +26 -15
- data/test/cases/associations/eager_load_nested_include_test.rb +1 -1
- data/test/cases/associations/eager_singularization_test.rb +1 -1
- data/test/cases/associations/eager_test.rb +255 -93
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +25 -53
- data/test/cases/associations/has_many_associations_test.rb +282 -72
- data/test/cases/associations/has_many_through_associations_test.rb +172 -45
- data/test/cases/associations/has_many_through_disable_joins_associations_test.rb +197 -0
- data/test/cases/associations/has_one_associations_test.rb +160 -29
- data/test/cases/associations/has_one_through_associations_test.rb +64 -15
- data/test/cases/associations/has_one_through_disable_joins_associations_test.rb +82 -0
- data/test/cases/associations/inner_join_association_test.rb +36 -6
- data/test/cases/associations/inverse_associations_test.rb +177 -40
- data/test/cases/associations/join_model_test.rb +17 -12
- data/test/cases/associations/left_outer_join_association_test.rb +14 -3
- data/test/cases/associations/nested_error_test.rb +116 -0
- data/test/cases/associations/nested_through_associations_test.rb +54 -19
- data/test/cases/associations/required_test.rb +1 -1
- data/test/cases/associations_test.rb +1278 -21
- data/test/cases/asynchronous_queries_test.rb +310 -0
- data/test/cases/attribute_methods/read_test.rb +6 -0
- data/test/cases/attribute_methods/time_zone_converter_test.rb +21 -0
- data/test/cases/attribute_methods_test.rb +565 -46
- data/test/cases/attributes_test.rb +42 -1
- data/test/cases/autosave_association_test.rb +645 -92
- data/test/cases/base_prevent_writes_test.rb +28 -159
- data/test/cases/base_test.rb +434 -209
- data/test/cases/batches_test.rb +441 -57
- data/test/cases/binary_test.rb +31 -0
- data/test/cases/bind_parameter_test.rb +107 -16
- data/test/cases/cache_key_test.rb +7 -7
- data/test/cases/calculations_test.rb +541 -110
- data/test/cases/callbacks_test.rb +0 -1
- data/test/cases/clone_test.rb +5 -4
- data/test/cases/coders/yaml_column_test.rb +97 -2
- data/test/cases/collection_cache_key_test.rb +24 -16
- data/test/cases/column_alias_test.rb +2 -8
- data/test/cases/column_definition_test.rb +12 -3
- data/test/cases/comment_test.rb +23 -26
- data/test/cases/connection_adapters/adapter_leasing_test.rb +9 -9
- data/test/cases/connection_adapters/connection_handler_test.rb +145 -99
- data/test/cases/connection_adapters/connection_handlers_multi_db_test.rb +79 -55
- data/test/cases/connection_adapters/connection_handlers_multi_pool_config_test.rb +17 -20
- data/test/cases/connection_adapters/connection_handlers_sharding_db_test.rb +146 -55
- data/test/cases/connection_adapters/connection_swapping_nested_test.rb +136 -23
- data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +96 -27
- data/test/cases/connection_adapters/mysql_type_lookup_test.rb +5 -5
- data/test/cases/connection_adapters/registration_test.rb +98 -0
- data/test/cases/connection_adapters/schema_cache_test.rb +288 -135
- data/test/cases/connection_adapters/standalone_connection_test.rb +38 -0
- data/test/cases/connection_adapters/statement_pool_test.rb +29 -0
- data/test/cases/connection_adapters/type_lookup_test.rb +12 -24
- data/test/cases/connection_handling_test.rb +210 -0
- data/test/cases/connection_management_test.rb +44 -7
- data/test/cases/connection_pool_test.rb +466 -99
- data/test/cases/core_test.rb +167 -9
- data/test/cases/counter_cache_test.rb +129 -2
- data/test/cases/custom_locking_test.rb +3 -3
- data/test/cases/database_configurations/hash_config_test.rb +149 -13
- data/test/cases/database_configurations/resolver_test.rb +14 -10
- data/test/cases/database_configurations/url_config_test.rb +53 -0
- data/test/cases/database_configurations_test.rb +86 -43
- data/test/cases/database_selector_test.rb +30 -8
- data/test/cases/database_statements_test.rb +10 -14
- data/test/cases/date_time_precision_test.rb +141 -11
- data/test/cases/date_time_test.rb +19 -1
- data/test/cases/defaults_test.rb +107 -41
- data/test/cases/delegated_type_test.rb +69 -9
- data/test/cases/dirty_test.rb +82 -25
- data/test/cases/disconnected_test.rb +10 -9
- data/test/cases/dup_test.rb +26 -6
- data/test/cases/encryption/cipher/aes256_gcm_test.rb +50 -0
- data/test/cases/encryption/cipher_test.rb +65 -0
- data/test/cases/encryption/concurrency_test.rb +27 -0
- data/test/cases/encryption/config_test.rb +21 -0
- data/test/cases/encryption/configurable_test.rb +93 -0
- data/test/cases/encryption/contexts_test.rb +105 -0
- data/test/cases/encryption/derived_secret_key_provider_test.rb +31 -0
- data/test/cases/encryption/deterministic_key_provider_test.rb +11 -0
- data/test/cases/encryption/encryptable_record_api_test.rb +175 -0
- data/test/cases/encryption/encryptable_record_message_pack_serialized_test.rb +42 -0
- data/test/cases/encryption/encryptable_record_test.rb +470 -0
- data/test/cases/encryption/encrypted_fixtures_test.rb +22 -0
- data/test/cases/encryption/encrypting_only_encryptor_test.rb +20 -0
- data/test/cases/encryption/encryption_schemes_test.rb +240 -0
- data/test/cases/encryption/encryptor_test.rb +113 -0
- data/test/cases/encryption/envelope_encryption_key_provider_test.rb +49 -0
- data/test/cases/encryption/extended_deterministic_queries_test.rb +81 -0
- data/test/cases/encryption/helper.rb +152 -0
- data/test/cases/encryption/key_generator_test.rb +55 -0
- data/test/cases/encryption/key_provider_test.rb +57 -0
- data/test/cases/encryption/key_test.rb +17 -0
- data/test/cases/encryption/message_pack_message_serializer_test.rb +70 -0
- data/test/cases/encryption/message_serializer_test.rb +82 -0
- data/test/cases/encryption/message_test.rb +43 -0
- data/test/cases/encryption/null_encryptor_test.rb +21 -0
- data/test/cases/encryption/properties_test.rb +69 -0
- data/test/cases/encryption/read_only_null_encryptor_test.rb +19 -0
- data/test/cases/encryption/scheme_test.rb +58 -0
- data/test/cases/encryption/unencrypted_attributes_test.rb +27 -0
- data/test/cases/encryption/uniqueness_validations_test.rb +65 -0
- data/test/cases/enum_test.rb +374 -72
- data/test/cases/errors_test.rb +7 -4
- data/test/cases/excluding_test.rb +116 -0
- data/test/cases/explain_subscriber_test.rb +6 -1
- data/test/cases/explain_test.rb +119 -10
- data/test/cases/filter_attributes_test.rb +7 -14
- data/test/cases/finder_respond_to_test.rb +3 -3
- data/test/cases/finder_test.rb +357 -72
- data/test/cases/fixture_set/file_test.rb +9 -0
- data/test/cases/fixtures_test.rb +426 -190
- data/test/cases/helper.rb +66 -192
- data/test/cases/hot_compatibility_test.rb +10 -10
- data/test/cases/inheritance_test.rb +51 -61
- data/test/cases/inherited_test.rb +40 -0
- data/test/cases/insert_all_test.rb +419 -9
- data/test/cases/instrumentation_test.rb +202 -30
- data/test/cases/integration_test.rb +25 -7
- data/test/cases/invalid_connection_test.rb +5 -5
- data/test/cases/invertible_migration_test.rb +108 -24
- data/test/cases/json_attribute_test.rb +1 -0
- data/test/cases/json_serialization_test.rb +5 -5
- data/test/cases/json_shared_test_cases.rb +5 -9
- data/test/cases/locking_test.rb +67 -31
- data/test/cases/log_subscriber_test.rb +17 -15
- data/test/cases/marshal_serialization_test.rb +78 -5
- data/test/cases/message_pack_test.rb +91 -0
- data/test/cases/migration/change_schema_test.rb +77 -46
- data/test/cases/migration/change_table_test.rb +129 -114
- data/test/cases/migration/check_constraint_test.rb +192 -10
- data/test/cases/migration/column_attributes_test.rb +4 -9
- data/test/cases/migration/column_positioning_test.rb +2 -2
- data/test/cases/migration/columns_test.rb +118 -4
- data/test/cases/migration/command_recorder_test.rb +181 -14
- data/test/cases/migration/compatibility_test.rb +883 -196
- data/test/cases/migration/create_join_table_test.rb +8 -1
- data/test/cases/migration/exclusion_constraint_test.rb +192 -0
- data/test/cases/migration/foreign_key_test.rb +356 -14
- data/test/cases/migration/helper.rb +4 -1
- data/test/cases/migration/index_test.rb +67 -2
- data/test/cases/migration/invalid_options_test.rb +129 -0
- data/test/cases/migration/logger_test.rb +7 -4
- data/test/cases/migration/pending_migrations_test.rb +103 -60
- data/test/cases/migration/references_foreign_key_test.rb +73 -4
- data/test/cases/migration/references_index_test.rb +25 -27
- data/test/cases/migration/references_statements_test.rb +27 -3
- data/test/cases/migration/rename_table_test.rb +39 -54
- data/test/cases/migration/schema_definitions_test.rb +109 -0
- data/test/cases/migration/unique_constraint_test.rb +248 -0
- data/test/cases/migration_test.rb +677 -220
- data/test/cases/migrator_test.rb +102 -75
- data/test/cases/multi_db_migrator_test.rb +55 -34
- data/test/cases/multiparameter_attributes_test.rb +26 -29
- data/test/cases/multiple_db_test.rb +42 -19
- data/test/cases/nested_attributes_test.rb +124 -6
- data/test/cases/nested_attributes_with_callbacks_test.rb +2 -2
- data/test/cases/normalized_attribute_test.rb +117 -0
- data/test/cases/null_relation_test.rb +35 -2
- data/test/cases/persistence/reload_association_cache_test.rb +20 -0
- data/test/cases/persistence_test.rb +629 -22
- data/test/cases/pooled_connections_test.rb +57 -56
- data/test/cases/prepared_statement_status_test.rb +8 -3
- data/test/cases/primary_class_test.rb +134 -0
- data/test/cases/primary_keys_test.rb +171 -55
- data/test/cases/query_cache_test.rb +558 -263
- data/test/cases/query_logs_test.rb +293 -0
- data/test/cases/quoting_test.rb +39 -72
- data/test/cases/readonly_test.rb +50 -12
- data/test/cases/reaper_test.rb +22 -6
- data/test/cases/reflection_test.rb +207 -9
- data/test/cases/relation/and_test.rb +43 -0
- data/test/cases/relation/delegation_test.rb +32 -5
- data/test/cases/relation/delete_all_test.rb +27 -6
- data/test/cases/relation/field_ordered_values_test.rb +128 -0
- data/test/cases/relation/load_async_test.rb +650 -0
- data/test/cases/relation/merging_test.rb +80 -109
- data/test/cases/relation/mutation_test.rb +12 -7
- data/test/cases/relation/or_test.rb +11 -8
- data/test/cases/relation/order_test.rb +90 -0
- data/test/cases/relation/predicate_builder_test.rb +21 -6
- data/test/cases/relation/select_test.rb +162 -3
- data/test/cases/relation/structural_compatibility_test.rb +38 -0
- data/test/cases/relation/update_all_test.rb +81 -27
- data/test/cases/relation/where_chain_test.rb +190 -3
- data/test/cases/relation/where_clause_test.rb +43 -1
- data/test/cases/relation/where_test.rb +95 -7
- data/test/cases/relation/with_test.rb +165 -0
- data/test/cases/relation_test.rb +42 -37
- data/test/cases/relations_test.rb +436 -138
- data/test/cases/reload_models_test.rb +18 -14
- data/test/cases/reserved_word_test.rb +2 -1
- data/test/cases/result_test.rb +14 -22
- data/test/cases/sanitize_test.rb +89 -27
- data/test/cases/schema_dumper_test.rb +535 -62
- data/test/cases/scoping/default_scoping_test.rb +219 -35
- data/test/cases/scoping/named_scoping_test.rb +25 -46
- data/test/cases/scoping/relation_scoping_test.rb +112 -4
- data/test/cases/secure_password_test.rb +108 -0
- data/test/cases/secure_token_test.rb +72 -0
- data/test/cases/serialization_test.rb +1 -1
- data/test/cases/serialized_attribute_test.rb +305 -60
- data/test/cases/shard_keys_test.rb +125 -0
- data/test/cases/shard_selector_test.rb +45 -0
- data/test/cases/signed_id_test.rb +57 -5
- data/test/cases/statement_cache_test.rb +31 -30
- data/test/cases/statement_invalid_test.rb +8 -4
- data/test/cases/store_test.rb +73 -9
- data/test/cases/strict_loading_test.rb +327 -13
- data/test/cases/table_metadata_test.rb +16 -0
- data/test/cases/tasks/database_tasks_test.rb +517 -244
- data/test/cases/test_case.rb +254 -60
- data/test/cases/test_case_test.rb +69 -0
- data/test/cases/test_databases_test.rb +7 -3
- data/test/cases/test_fixtures_test.rb +19 -40
- data/test/cases/time_precision_test.rb +17 -5
- data/test/cases/timestamp_test.rb +124 -16
- data/test/cases/token_for_test.rb +165 -0
- data/test/cases/touch_later_test.rb +43 -1
- data/test/cases/transaction_callbacks_test.rb +325 -8
- data/test/cases/transaction_instrumentation_test.rb +453 -0
- data/test/cases/transaction_isolation_test.rb +12 -8
- data/test/cases/transactions_test.rb +629 -112
- data/test/cases/type/date_time_test.rb +7 -1
- data/test/cases/type/time_test.rb +9 -0
- data/test/cases/type/type_map_test.rb +108 -73
- data/test/cases/type/unsigned_integer_test.rb +12 -0
- data/test/cases/type_caster/connection_test.rb +19 -0
- data/test/cases/type_test.rb +1 -1
- data/test/cases/unconnected_test.rb +7 -7
- data/test/cases/unsafe_raw_sql_test.rb +39 -8
- data/test/cases/validations/absence_validation_test.rb +1 -1
- data/test/cases/validations/association_validation_test.rb +25 -3
- data/test/cases/validations/numericality_validation_test.rb +3 -9
- data/test/cases/validations/presence_validation_test.rb +1 -1
- data/test/cases/validations/uniqueness_validation_test.rb +280 -40
- data/test/cases/validations_test.rb +2 -2
- data/test/cases/view_test.rb +33 -22
- data/test/cases/yaml_serialization_test.rb +23 -17
- data/test/config.example.yml +58 -56
- data/test/config.rb +1 -0
- data/test/fixtures/1_need_quoting.yml +2 -0
- data/test/fixtures/accounts.yml +5 -0
- data/test/fixtures/aircrafts.yml +7 -0
- data/test/fixtures/book_identifiers.yml +11 -0
- data/test/fixtures/books.yml +5 -4
- data/test/fixtures/cake_designers.yml +5 -0
- data/test/fixtures/cars.yml +6 -0
- data/test/fixtures/chefs.yml +5 -0
- data/test/fixtures/clothing_items.yml +23 -0
- data/test/fixtures/clubs.yml +1 -1
- data/test/fixtures/comments.yml +2 -1
- data/test/fixtures/cpk_authors.yml +8 -0
- data/test/fixtures/cpk_books.yml +21 -0
- data/test/fixtures/cpk_order_agreements.yml +13 -0
- data/test/fixtures/cpk_order_tags.yml +15 -0
- data/test/fixtures/cpk_orders.yml +11 -0
- data/test/fixtures/cpk_posts.yml +12 -0
- data/test/fixtures/cpk_reviews.yml +13 -0
- data/test/fixtures/cpk_tags.yml +11 -0
- data/test/fixtures/drink_designers.yml +5 -0
- data/test/fixtures/encrypted_book_that_ignores_cases.yml +4 -0
- data/test/fixtures/encrypted_books.yml +4 -0
- data/test/fixtures/fk_object_to_point_to.yml +2 -0
- data/test/fixtures/memberships.yml +15 -15
- data/test/fixtures/paragraphs.yml +5 -0
- data/test/fixtures/parrots.yml +4 -0
- data/test/fixtures/people.yml +2 -0
- data/test/fixtures/pirates.yml +2 -2
- data/test/fixtures/primary_key_error/primary_key_error.yml +6 -0
- data/test/fixtures/references.yml +3 -3
- data/test/fixtures/sharded_blog_posts.yml +14 -0
- data/test/fixtures/sharded_blog_posts_tags.yml +27 -0
- data/test/fixtures/sharded_blogs.yml +8 -0
- data/test/fixtures/sharded_comments.yml +22 -0
- data/test/fixtures/sharded_tags.yml +34 -0
- data/test/fixtures/sponsors.yml +2 -2
- data/test/fixtures/topics.yml +1 -0
- data/test/fixtures/treasures.yml +4 -0
- data/test/fixtures/virtual_columns.yml +5 -0
- data/test/fixtures/warehouse_things.yml +1 -1
- data/test/migrations/old_and_new_versions/20210716122844_add_people_description.rb +5 -0
- data/test/migrations/old_and_new_versions/20210716123013_add_people_number_of_legs.rb +5 -0
- data/test/migrations/old_and_new_versions/230_add_people_hobby.rb +5 -0
- data/test/migrations/old_and_new_versions/231_add_people_last_name.rb +5 -0
- data/test/migrations/scope/1_unscoped.rb +7 -0
- data/test/migrations/scope/2_mysql_only.mysql.rb +7 -0
- data/test/models/admin/user.rb +2 -0
- data/test/models/admin/user_json.rb +48 -0
- data/test/models/attachment.rb +7 -0
- data/test/models/author.rb +70 -3
- data/test/models/author_encrypted.rb +16 -0
- data/test/models/bird.rb +1 -1
- data/test/models/book.rb +18 -11
- data/test/models/book_destroy_async.rb +1 -1
- data/test/models/book_encrypted.rb +106 -0
- data/test/models/book_identifier.rb +5 -0
- data/test/models/branch.rb +11 -0
- data/test/models/bulb.rb +1 -1
- data/test/models/car.rb +8 -1
- data/test/models/cat.rb +1 -1
- data/test/models/category.rb +3 -1
- data/test/models/chat_message.rb +8 -0
- data/test/models/chef.rb +52 -0
- data/test/models/clothing_item.rb +12 -0
- data/test/models/club.rb +4 -1
- data/test/models/comment.rb +7 -4
- data/test/models/comment_overlapping_counter_cache.rb +15 -0
- data/test/models/company.rb +16 -2
- data/test/models/computer.rb +1 -0
- data/test/models/contact.rb +3 -3
- data/test/models/contract.rb +5 -1
- data/test/models/cpk/author.rb +9 -0
- data/test/models/cpk/book.rb +55 -0
- data/test/models/cpk/book_destroy_async.rb +9 -0
- data/test/models/cpk/car.rb +9 -0
- data/test/models/cpk/car_review.rb +9 -0
- data/test/models/cpk/chapter.rb +16 -0
- data/test/models/cpk/chapter_destroy_async.rb +10 -0
- data/test/models/cpk/comment.rb +9 -0
- data/test/models/cpk/order.rb +55 -0
- data/test/models/cpk/order_agreement.rb +10 -0
- data/test/models/cpk/order_tag.rb +10 -0
- data/test/models/cpk/post.rb +10 -0
- data/test/models/cpk/posts_tag.rb +10 -0
- data/test/models/cpk/review.rb +9 -0
- data/test/models/cpk/tag.rb +10 -0
- data/test/models/cpk.rb +15 -0
- data/test/models/customer.rb +3 -1
- data/test/models/destroy_async_parent.rb +1 -1
- data/test/models/developer.rb +44 -3
- data/test/models/discount.rb +4 -0
- data/test/models/drink_designer.rb +1 -0
- data/test/models/editor.rb +8 -0
- data/test/models/editorship.rb +6 -0
- data/test/models/entry.rb +5 -0
- data/test/models/essay.rb +6 -1
- data/test/models/essay_destroy_async.rb +1 -0
- data/test/models/eye.rb +87 -21
- data/test/models/face.rb +1 -1
- data/test/models/friendship.rb +3 -0
- data/test/models/hardback.rb +7 -0
- data/test/models/hotel.rb +2 -0
- data/test/models/human.rb +2 -2
- data/test/models/invoice.rb +2 -1
- data/test/models/invokes_an_undefined_method.rb +5 -0
- data/test/models/line_item.rb +6 -0
- data/test/models/member.rb +9 -4
- data/test/models/membership.rb +2 -2
- data/test/models/message.rb +2 -1
- data/test/models/need_quoting.rb +5 -0
- data/test/models/paragraph.rb +5 -0
- data/test/models/parrot.rb +6 -3
- data/test/models/person.rb +7 -4
- data/test/models/pirate.rb +4 -1
- data/test/models/pk_autopopulated_by_a_trigger_record.rb +5 -0
- data/test/models/post.rb +65 -2
- data/test/models/post_encrypted.rb +15 -0
- data/test/models/post_with_prefetched_pk.rb +15 -0
- data/test/models/project.rb +1 -0
- data/test/models/publication.rb +16 -0
- data/test/models/raises_argument_error.rb +5 -0
- data/test/models/raises_no_method_error.rb +5 -0
- data/test/models/recipient.rb +5 -0
- data/test/models/reference.rb +1 -1
- data/test/models/reply.rb +1 -1
- data/test/models/room.rb +3 -0
- data/test/models/sharded/blog.rb +12 -0
- data/test/models/sharded/blog_post.rb +17 -0
- data/test/models/sharded/blog_post_destroy_async.rb +14 -0
- data/test/models/sharded/blog_post_tag.rb +11 -0
- data/test/models/sharded/blog_post_with_revision.rb +11 -0
- data/test/models/sharded/comment.rb +12 -0
- data/test/models/sharded/comment_destroy_async.rb +12 -0
- data/test/models/sharded/tag.rb +11 -0
- data/test/models/sharded.rb +8 -0
- data/test/models/ship.rb +1 -1
- data/test/models/shipping_line.rb +11 -0
- data/test/models/subscriber.rb +1 -0
- data/test/models/subscription.rb +3 -1
- data/test/models/too_long_table_name.rb +5 -0
- data/test/models/topic.rb +3 -1
- data/test/models/traffic_light.rb +2 -2
- data/test/models/traffic_light_encrypted.rb +21 -0
- data/test/models/translation.rb +9 -0
- data/test/models/treasure.rb +1 -1
- data/test/models/tyre.rb +1 -1
- data/test/models/user.rb +16 -0
- data/test/models/user_with_invalid_relation.rb +28 -0
- data/test/models/uuid_comment.rb +5 -0
- data/test/models/uuid_entry.rb +5 -0
- data/test/models/uuid_message.rb +5 -0
- data/test/models/zine.rb +2 -1
- data/test/schema/mysql2_specific_schema.rb +26 -12
- data/test/schema/postgresql_specific_schema.rb +121 -13
- data/test/schema/schema.rb +361 -103
- data/test/schema/sqlite_specific_schema.rb +17 -6
- data/test/schema/trilogy_specific_schema.rb +96 -0
- data/test/support/adapter_helper.rb +104 -0
- data/test/support/async_helper.rb +15 -0
- data/test/support/config.rb +1 -1
- data/test/support/connection.rb +14 -2
- data/test/support/ddl_helper.rb +1 -1
- data/test/support/fake_adapter.rb +42 -0
- data/test/support/load_schema_helper.rb +22 -0
- data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_1_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_1_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_7_1_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_7_1_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_1_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_1_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/Mysql2/rails_7_1_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/Mysql2/rails_7_1_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_1_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_1_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_7_1_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_7_1_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_1_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_1_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/SQLite/rails_7_1_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/SQLite/rails_7_1_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/Trilogy/rails_6_1_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/Trilogy/rails_6_1_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/Trilogy/rails_7_1_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/Trilogy/rails_7_1_topic_associations.dump +0 -0
- data/test/support/schema_dumping_helper.rb +15 -9
- data/test/support/tools.rb +37 -0
- data/test/support/yaml_compatibility_fixtures/rails_4_1_no_symbol.yml +22 -0
- metadata +247 -15
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
require "cases/helper"
|
|
4
4
|
require "active_record/tasks/database_tasks"
|
|
5
|
-
require "models/
|
|
5
|
+
require "models/course"
|
|
6
|
+
require "models/college"
|
|
6
7
|
|
|
7
8
|
module ActiveRecord
|
|
8
9
|
module DatabaseTasksSetupper
|
|
@@ -30,146 +31,207 @@ module ActiveRecord
|
|
|
30
31
|
$stdout, $stderr = @original_stdout, @original_stderr
|
|
31
32
|
end
|
|
32
33
|
|
|
33
|
-
def with_stubbed_new
|
|
34
|
+
def with_stubbed_new(&block)
|
|
34
35
|
ActiveRecord::Tasks::MySQLDatabaseTasks.stub(:new, @mysql_tasks) do
|
|
35
36
|
ActiveRecord::Tasks::PostgreSQLDatabaseTasks.stub(:new, @postgresql_tasks) do
|
|
36
|
-
ActiveRecord::Tasks::SQLiteDatabaseTasks.stub(:new, @sqlite_tasks)
|
|
37
|
-
yield
|
|
38
|
-
end
|
|
37
|
+
ActiveRecord::Tasks::SQLiteDatabaseTasks.stub(:new, @sqlite_tasks, &block)
|
|
39
38
|
end
|
|
40
39
|
end
|
|
41
40
|
end
|
|
42
41
|
end
|
|
43
42
|
|
|
43
|
+
module DatabaseTasksHelper
|
|
44
|
+
def assert_called_for_configs(method_name, configs, &block)
|
|
45
|
+
mock = Minitest::Mock.new
|
|
46
|
+
configs.each { |config| mock.expect(:call, nil, config) }
|
|
47
|
+
|
|
48
|
+
ActiveRecord::Tasks::DatabaseTasks.stub(method_name, mock, &block)
|
|
49
|
+
assert_mock(mock)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
44
53
|
ADAPTERS_TASKS = {
|
|
45
54
|
mysql2: :mysql_tasks,
|
|
55
|
+
trilogy: :mysql_tasks,
|
|
46
56
|
postgresql: :postgresql_tasks,
|
|
47
57
|
sqlite3: :sqlite_tasks
|
|
48
58
|
}
|
|
49
59
|
|
|
50
|
-
class
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
current_env = ActiveRecord::Base.connection.migration_context.current_environment
|
|
54
|
-
|
|
55
|
-
InternalMetadata[:environment] = current_env
|
|
56
|
-
|
|
57
|
-
assert_called_on_instance_of(
|
|
58
|
-
ActiveRecord::MigrationContext,
|
|
59
|
-
:current_version,
|
|
60
|
-
times: 6,
|
|
61
|
-
returns: 1
|
|
62
|
-
) do
|
|
63
|
-
assert_not_includes protected_environments, current_env
|
|
64
|
-
# Assert no error
|
|
65
|
-
ActiveRecord::Tasks::DatabaseTasks.check_protected_environments!
|
|
60
|
+
class DatabaseTasksCheckProtectedEnvironmentsTest < ActiveRecord::TestCase
|
|
61
|
+
if current_adapter?(:SQLite3Adapter) && !in_memory_db?
|
|
62
|
+
self.use_transactional_tests = false
|
|
66
63
|
|
|
67
|
-
|
|
64
|
+
def setup
|
|
65
|
+
recreate_metadata_tables
|
|
66
|
+
end
|
|
68
67
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
end
|
|
68
|
+
def teardown
|
|
69
|
+
recreate_metadata_tables
|
|
72
70
|
end
|
|
73
|
-
ensure
|
|
74
|
-
ActiveRecord::Base.protected_environments = protected_environments
|
|
75
|
-
end
|
|
76
71
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
72
|
+
def test_raises_an_error_when_called_with_protected_environment
|
|
73
|
+
protected_environments = ActiveRecord::Base.protected_environments
|
|
74
|
+
current_env = ActiveRecord::Base.connection_pool.migration_context.current_environment
|
|
80
75
|
|
|
81
|
-
|
|
76
|
+
ActiveRecord::Base.connection_pool.internal_metadata[:environment] = current_env
|
|
82
77
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
78
|
+
assert_called_on_instance_of(
|
|
79
|
+
ActiveRecord::MigrationContext,
|
|
80
|
+
:current_version,
|
|
81
|
+
times: 6,
|
|
82
|
+
returns: 1
|
|
83
|
+
) do
|
|
84
|
+
assert_not_includes protected_environments, current_env
|
|
85
|
+
# Assert no error
|
|
86
|
+
ActiveRecord::Tasks::DatabaseTasks.check_protected_environments!("arunit")
|
|
92
87
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
ActiveRecord::
|
|
88
|
+
ActiveRecord::Base.protected_environments = [current_env]
|
|
89
|
+
|
|
90
|
+
assert_raise(ActiveRecord::ProtectedEnvironmentError) do
|
|
91
|
+
ActiveRecord::Tasks::DatabaseTasks.check_protected_environments!("arunit")
|
|
92
|
+
end
|
|
96
93
|
end
|
|
94
|
+
ensure
|
|
95
|
+
ActiveRecord::Base.protected_environments = protected_environments
|
|
97
96
|
end
|
|
98
|
-
ensure
|
|
99
|
-
ActiveRecord::Base.protected_environments = protected_environments
|
|
100
|
-
end
|
|
101
97
|
|
|
102
|
-
|
|
103
|
-
|
|
98
|
+
def test_raises_an_error_when_called_with_protected_environment_which_name_is_a_symbol
|
|
99
|
+
protected_environments = ActiveRecord::Base.protected_environments
|
|
100
|
+
current_env = ActiveRecord::Base.connection_pool.migration_context.current_environment
|
|
101
|
+
|
|
102
|
+
ActiveRecord::Base.connection_pool.internal_metadata[:environment] = current_env
|
|
103
|
+
|
|
104
104
|
assert_called_on_instance_of(
|
|
105
105
|
ActiveRecord::MigrationContext,
|
|
106
106
|
:current_version,
|
|
107
|
+
times: 6,
|
|
107
108
|
returns: 1
|
|
108
109
|
) do
|
|
109
|
-
|
|
110
|
-
|
|
110
|
+
assert_not_includes protected_environments, current_env
|
|
111
|
+
# Assert no error
|
|
112
|
+
ActiveRecord::Tasks::DatabaseTasks.check_protected_environments!("arunit")
|
|
113
|
+
|
|
114
|
+
ActiveRecord::Base.protected_environments = [current_env.to_sym]
|
|
115
|
+
assert_raise(ActiveRecord::ProtectedEnvironmentError) do
|
|
116
|
+
ActiveRecord::Tasks::DatabaseTasks.check_protected_environments!("arunit")
|
|
111
117
|
end
|
|
112
118
|
end
|
|
119
|
+
ensure
|
|
120
|
+
ActiveRecord::Base.protected_environments = protected_environments
|
|
113
121
|
end
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
122
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
123
|
+
def test_raises_an_error_if_no_migrations_have_been_made
|
|
124
|
+
pool = ActiveRecord::Base.connection_pool
|
|
125
|
+
internal_metadata = pool.internal_metadata
|
|
126
|
+
schema_migration = pool.schema_migration
|
|
127
|
+
schema_migration.create_table
|
|
128
|
+
schema_migration.create_version("1")
|
|
120
129
|
|
|
121
|
-
|
|
122
|
-
|
|
130
|
+
assert_predicate internal_metadata, :table_exists?
|
|
131
|
+
internal_metadata.drop_table
|
|
132
|
+
assert_not_predicate internal_metadata, :table_exists?
|
|
123
133
|
|
|
124
|
-
|
|
134
|
+
assert_raises(ActiveRecord::NoEnvironmentInSchemaError) do
|
|
135
|
+
ActiveRecord::Tasks::DatabaseTasks.check_protected_environments!("arunit")
|
|
136
|
+
end
|
|
137
|
+
ensure
|
|
138
|
+
pool.automatic_reconnect = true
|
|
139
|
+
schema_migration.delete_version("1")
|
|
140
|
+
internal_metadata.create_table
|
|
125
141
|
end
|
|
126
|
-
end
|
|
127
142
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
143
|
+
private
|
|
144
|
+
def recreate_metadata_tables
|
|
145
|
+
schema_migration = ActiveRecord::Base.connection_pool.schema_migration
|
|
146
|
+
schema_migration.drop_table
|
|
147
|
+
schema_migration.create_table
|
|
131
148
|
|
|
132
|
-
|
|
149
|
+
internal_metadata = ActiveRecord::Base.connection_pool.internal_metadata
|
|
150
|
+
internal_metadata.drop_table
|
|
151
|
+
internal_metadata.create_table
|
|
133
152
|
end
|
|
134
153
|
end
|
|
154
|
+
end
|
|
135
155
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
156
|
+
class DatabaseTasksCheckProtectedEnvironmentsMultiDatabaseTest < ActiveRecord::TestCase
|
|
157
|
+
if current_adapter?(:SQLite3Adapter) && !in_memory_db?
|
|
158
|
+
self.use_transactional_tests = false
|
|
139
159
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
end
|
|
160
|
+
def test_with_multiple_databases
|
|
161
|
+
env = ActiveRecord::ConnectionHandling::DEFAULT_ENV.call
|
|
143
162
|
|
|
144
|
-
|
|
145
|
-
|
|
163
|
+
with_multi_db_configurations(env) do
|
|
164
|
+
protected_environments = ActiveRecord::Base.protected_environments
|
|
165
|
+
current_env = ActiveRecord::Base.connection_pool.migration_context.current_environment
|
|
166
|
+
assert_equal current_env, env
|
|
146
167
|
|
|
147
|
-
|
|
148
|
-
|
|
168
|
+
ActiveRecord::Base.establish_connection(:primary)
|
|
169
|
+
ActiveRecord::Base.connection_pool.internal_metadata.create_table_and_set_flags(current_env)
|
|
149
170
|
|
|
150
|
-
|
|
171
|
+
ActiveRecord::Base.establish_connection(:secondary)
|
|
172
|
+
ActiveRecord::Base.connection_pool.internal_metadata.create_table_and_set_flags(current_env)
|
|
151
173
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
174
|
+
assert_not_includes protected_environments, current_env
|
|
175
|
+
# Assert not raises
|
|
176
|
+
ActiveRecord::Tasks::DatabaseTasks.check_protected_environments!(env)
|
|
155
177
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
178
|
+
ActiveRecord::Base.establish_connection(:secondary)
|
|
179
|
+
pool = ActiveRecord::Base.connection_pool
|
|
180
|
+
schema_migration = pool.schema_migration
|
|
181
|
+
schema_migration.create_table
|
|
182
|
+
schema_migration.create_version("1")
|
|
160
183
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
ActiveRecord::
|
|
184
|
+
ActiveRecord::Base.protected_environments = [current_env.to_sym]
|
|
185
|
+
|
|
186
|
+
assert_raise(ActiveRecord::ProtectedEnvironmentError) do
|
|
187
|
+
ActiveRecord::Tasks::DatabaseTasks.check_protected_environments!(env)
|
|
188
|
+
end
|
|
189
|
+
ensure
|
|
190
|
+
ActiveRecord::Base.protected_environments = protected_environments
|
|
168
191
|
end
|
|
169
192
|
end
|
|
193
|
+
|
|
194
|
+
private
|
|
195
|
+
def with_multi_db_configurations(env)
|
|
196
|
+
old_configurations = ActiveRecord::Base.configurations
|
|
197
|
+
ActiveRecord::Base.configurations = {
|
|
198
|
+
env => {
|
|
199
|
+
primary: {
|
|
200
|
+
adapter: "sqlite3",
|
|
201
|
+
database: "test/fixtures/fixture_database.sqlite3",
|
|
202
|
+
},
|
|
203
|
+
secondary: {
|
|
204
|
+
adapter: "sqlite3",
|
|
205
|
+
database: "test/fixtures/fixture_database_2.sqlite3",
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
ActiveRecord::Base.establish_connection(:primary)
|
|
211
|
+
yield
|
|
212
|
+
ensure
|
|
213
|
+
[:primary, :secondary].each do |db|
|
|
214
|
+
ActiveRecord::Base.establish_connection(db)
|
|
215
|
+
ActiveRecord::Base.connection_pool.schema_migration.delete_all_versions
|
|
216
|
+
ActiveRecord::Base.connection_pool.internal_metadata.delete_all_entries
|
|
217
|
+
end
|
|
218
|
+
ActiveRecord::Base.configurations = old_configurations
|
|
219
|
+
ActiveRecord::Base.establish_connection(:arunit)
|
|
220
|
+
end
|
|
221
|
+
end
|
|
170
222
|
end
|
|
171
223
|
|
|
172
224
|
class DatabaseTasksRegisterTask < ActiveRecord::TestCase
|
|
225
|
+
setup do
|
|
226
|
+
@tasks_was = ActiveRecord::Tasks::DatabaseTasks.instance_variable_get(:@tasks).dup
|
|
227
|
+
@adapters_was = ActiveRecord::ConnectionAdapters.instance_variable_get(:@adapters).dup
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
teardown do
|
|
231
|
+
ActiveRecord::Tasks::DatabaseTasks.instance_variable_set(:@tasks, @tasks_was)
|
|
232
|
+
ActiveRecord::ConnectionAdapters.instance_variable_set(:@adapters, @adapters_was)
|
|
233
|
+
end
|
|
234
|
+
|
|
173
235
|
def test_register_task
|
|
174
236
|
klazz = Class.new do
|
|
175
237
|
def initialize(*arguments); end
|
|
@@ -179,15 +241,31 @@ module ActiveRecord
|
|
|
179
241
|
|
|
180
242
|
klazz.stub(:new, instance) do
|
|
181
243
|
assert_called_with(instance, :structure_dump, ["awesome-file.sql", nil]) do
|
|
182
|
-
ActiveRecord::Tasks::DatabaseTasks.register_task(/
|
|
183
|
-
ActiveRecord::Tasks::DatabaseTasks.structure_dump({ "adapter" =>
|
|
244
|
+
ActiveRecord::Tasks::DatabaseTasks.register_task(/abstract/, klazz)
|
|
245
|
+
ActiveRecord::Tasks::DatabaseTasks.structure_dump({ "adapter" => "abstract" }, "awesome-file.sql")
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
def test_register_task_precedence
|
|
251
|
+
klazz = Class.new do
|
|
252
|
+
def initialize(*arguments); end
|
|
253
|
+
def structure_dump(filename); end
|
|
254
|
+
end
|
|
255
|
+
instance = klazz.new
|
|
256
|
+
|
|
257
|
+
klazz.stub(:new, instance) do
|
|
258
|
+
assert_called_with(instance, :structure_dump, ["awesome-file.sql", nil]) do
|
|
259
|
+
ActiveRecord::ConnectionAdapters.register("custom_mysql", "ActiveRecord::ConnectionAdapters::Mysql2Adapter", "active_record/connection_adapters/mysql2_adapter")
|
|
260
|
+
ActiveRecord::Tasks::DatabaseTasks.register_task(/custom_mysql/, klazz)
|
|
261
|
+
ActiveRecord::Tasks::DatabaseTasks.structure_dump({ "adapter" => :custom_mysql }, "awesome-file.sql")
|
|
184
262
|
end
|
|
185
263
|
end
|
|
186
264
|
end
|
|
187
265
|
|
|
188
266
|
def test_unregistered_task
|
|
189
267
|
assert_raise(ActiveRecord::Tasks::DatabaseNotSupported) do
|
|
190
|
-
ActiveRecord::Tasks::DatabaseTasks.structure_dump({ "adapter" =>
|
|
268
|
+
ActiveRecord::Tasks::DatabaseTasks.structure_dump({ "adapter" => "abstract" }, "awesome-file.sql")
|
|
191
269
|
end
|
|
192
270
|
end
|
|
193
271
|
end
|
|
@@ -212,7 +290,7 @@ module ActiveRecord
|
|
|
212
290
|
ActiveRecord::Tasks::DatabaseTasks.stub(:db_dir, dir) do
|
|
213
291
|
path = File.join(dir, "schema_cache.yml")
|
|
214
292
|
assert_not File.file?(path)
|
|
215
|
-
ActiveRecord::Tasks::DatabaseTasks.dump_schema_cache(ActiveRecord::Base.
|
|
293
|
+
ActiveRecord::Tasks::DatabaseTasks.dump_schema_cache(ActiveRecord::Base.lease_connection, path)
|
|
216
294
|
assert File.file?(path)
|
|
217
295
|
end
|
|
218
296
|
end
|
|
@@ -235,51 +313,49 @@ module ActiveRecord
|
|
|
235
313
|
end
|
|
236
314
|
|
|
237
315
|
def test_cache_dump_default_filename
|
|
238
|
-
|
|
239
|
-
ENV.delete("SCHEMA_CACHE")
|
|
316
|
+
config = DatabaseConfigurations::HashConfig.new("development", "primary", {})
|
|
240
317
|
|
|
241
318
|
ActiveRecord::Tasks::DatabaseTasks.stub(:db_dir, "db") do
|
|
242
|
-
path = ActiveRecord::Tasks::DatabaseTasks.cache_dump_filename(
|
|
319
|
+
path = ActiveRecord::Tasks::DatabaseTasks.cache_dump_filename(config)
|
|
243
320
|
assert_equal "db/schema_cache.yml", path
|
|
244
321
|
end
|
|
245
|
-
|
|
246
|
-
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
def test_cache_dump_default_filename_with_custom_db_dir
|
|
325
|
+
config = DatabaseConfigurations::HashConfig.new("development", "primary", {})
|
|
326
|
+
|
|
327
|
+
ActiveRecord::Tasks::DatabaseTasks.stub(:db_dir, "my_db") do
|
|
328
|
+
path = ActiveRecord::Tasks::DatabaseTasks.cache_dump_filename(config)
|
|
329
|
+
assert_equal "my_db/schema_cache.yml", path
|
|
330
|
+
end
|
|
247
331
|
end
|
|
248
332
|
|
|
249
333
|
def test_cache_dump_alternate_filename
|
|
250
|
-
|
|
251
|
-
ENV.delete("SCHEMA_CACHE")
|
|
334
|
+
config = DatabaseConfigurations::HashConfig.new("development", "alternate", {})
|
|
252
335
|
|
|
253
336
|
ActiveRecord::Tasks::DatabaseTasks.stub(:db_dir, "db") do
|
|
254
|
-
path = ActiveRecord::Tasks::DatabaseTasks.cache_dump_filename(
|
|
337
|
+
path = ActiveRecord::Tasks::DatabaseTasks.cache_dump_filename(config)
|
|
255
338
|
assert_equal "db/alternate_schema_cache.yml", path
|
|
256
339
|
end
|
|
257
|
-
ensure
|
|
258
|
-
ENV["SCHEMA_CACHE"] = old_path
|
|
259
340
|
end
|
|
260
341
|
|
|
261
|
-
def
|
|
262
|
-
|
|
263
|
-
ENV["SCHEMA_CACHE"] = "tmp/something.yml"
|
|
342
|
+
def test_cache_dump_filename_with_path_from_db_config
|
|
343
|
+
config = DatabaseConfigurations::HashConfig.new("development", "primary", { schema_cache_path: "tmp/something.yml" })
|
|
264
344
|
|
|
265
345
|
ActiveRecord::Tasks::DatabaseTasks.stub(:db_dir, "db") do
|
|
266
|
-
path = ActiveRecord::Tasks::DatabaseTasks.cache_dump_filename(
|
|
346
|
+
path = ActiveRecord::Tasks::DatabaseTasks.cache_dump_filename(config)
|
|
267
347
|
assert_equal "tmp/something.yml", path
|
|
268
348
|
end
|
|
269
|
-
ensure
|
|
270
|
-
ENV["SCHEMA_CACHE"] = old_path
|
|
271
349
|
end
|
|
272
350
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
351
|
+
|
|
352
|
+
def test_cache_dump_filename_with_path_from_the_argument_has_precedence
|
|
353
|
+
config = DatabaseConfigurations::HashConfig.new("development", "primary", { schema_cache_path: "tmp/something.yml" })
|
|
276
354
|
|
|
277
355
|
ActiveRecord::Tasks::DatabaseTasks.stub(:db_dir, "db") do
|
|
278
|
-
path = ActiveRecord::Tasks::DatabaseTasks.cache_dump_filename(
|
|
279
|
-
assert_equal "tmp/
|
|
356
|
+
path = ActiveRecord::Tasks::DatabaseTasks.cache_dump_filename(config, schema_cache_path: "tmp/another.yml")
|
|
357
|
+
assert_equal "tmp/another.yml", path
|
|
280
358
|
end
|
|
281
|
-
ensure
|
|
282
|
-
ENV["SCHEMA_CACHE"] = old_path
|
|
283
359
|
end
|
|
284
360
|
end
|
|
285
361
|
|
|
@@ -287,7 +363,27 @@ module ActiveRecord
|
|
|
287
363
|
def test_ensure_db_dir
|
|
288
364
|
Dir.mktmpdir do |dir|
|
|
289
365
|
ActiveRecord::Tasks::DatabaseTasks.stub(:db_dir, dir) do
|
|
290
|
-
|
|
366
|
+
updated_hash = ActiveRecord::Base.configurations.configs_for(env_name: "arunit", name: "primary").configuration_hash.merge(schema_dump: "fake_db_config_schema.rb")
|
|
367
|
+
db_config = ActiveRecord::DatabaseConfigurations::HashConfig.new("arunit", "primary", updated_hash)
|
|
368
|
+
path = "#{dir}/fake_db_config_schema.rb"
|
|
369
|
+
|
|
370
|
+
FileUtils.rm_rf(dir)
|
|
371
|
+
assert_not File.file?(path)
|
|
372
|
+
|
|
373
|
+
ActiveRecord::Tasks::DatabaseTasks.dump_schema(db_config)
|
|
374
|
+
|
|
375
|
+
assert File.file?(path)
|
|
376
|
+
end
|
|
377
|
+
end
|
|
378
|
+
ensure
|
|
379
|
+
ActiveRecord::Base.clear_cache!
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
def test_db_dir_ignored_if_included_in_schema_dump
|
|
383
|
+
Dir.mktmpdir do |dir|
|
|
384
|
+
ActiveRecord::Tasks::DatabaseTasks.stub(:db_dir, dir) do
|
|
385
|
+
updated_hash = ActiveRecord::Base.configurations.configs_for(env_name: "arunit", name: "primary").configuration_hash.merge(schema_dump: "#{dir}/fake_db_config_schema.rb")
|
|
386
|
+
db_config = ActiveRecord::DatabaseConfigurations::HashConfig.new("arunit", "primary", updated_hash)
|
|
291
387
|
path = "#{dir}/fake_db_config_schema.rb"
|
|
292
388
|
|
|
293
389
|
FileUtils.rm_rf(dir)
|
|
@@ -305,7 +401,7 @@ module ActiveRecord
|
|
|
305
401
|
|
|
306
402
|
class DatabaseTasksCreateAllTest < ActiveRecord::TestCase
|
|
307
403
|
def setup
|
|
308
|
-
@configurations = { "development" => { "database" => "my-db" } }
|
|
404
|
+
@configurations = { "development" => { "adapter" => "abstract", "database" => "my-db" } }
|
|
309
405
|
|
|
310
406
|
$stdout, @original_stdout = StringIO.new, $stdout
|
|
311
407
|
$stderr, @original_stderr = StringIO.new, $stderr
|
|
@@ -377,25 +473,25 @@ module ActiveRecord
|
|
|
377
473
|
end
|
|
378
474
|
|
|
379
475
|
private
|
|
380
|
-
def with_stubbed_configurations_establish_connection
|
|
476
|
+
def with_stubbed_configurations_establish_connection(&block)
|
|
381
477
|
old_configurations = ActiveRecord::Base.configurations
|
|
382
478
|
ActiveRecord::Base.configurations = @configurations
|
|
383
479
|
|
|
384
480
|
# To refrain from connecting to a newly created empty DB in
|
|
385
481
|
# sqlite3_mem tests
|
|
386
|
-
ActiveRecord::Base.connection_handler.stub(:establish_connection, nil)
|
|
387
|
-
yield
|
|
388
|
-
end
|
|
482
|
+
ActiveRecord::Base.connection_handler.stub(:establish_connection, nil, &block)
|
|
389
483
|
ensure
|
|
390
484
|
ActiveRecord::Base.configurations = old_configurations
|
|
391
485
|
end
|
|
392
486
|
end
|
|
393
487
|
|
|
394
488
|
class DatabaseTasksCreateCurrentTest < ActiveRecord::TestCase
|
|
489
|
+
include DatabaseTasksHelper
|
|
490
|
+
|
|
395
491
|
def setup
|
|
396
492
|
@configurations = {
|
|
397
|
-
"development" => { "database" => "dev-db" },
|
|
398
|
-
"test" => { "database" => "test-db" },
|
|
493
|
+
"development" => { "adapter" => "abstract", "database" => "dev-db" },
|
|
494
|
+
"test" => { "adapter" => "abstract", "database" => "test-db" },
|
|
399
495
|
"production" => { "url" => "abstract://prod-db-host/prod-db" }
|
|
400
496
|
}
|
|
401
497
|
end
|
|
@@ -430,8 +526,7 @@ module ActiveRecord
|
|
|
430
526
|
|
|
431
527
|
def test_creates_test_and_development_databases_when_env_was_not_specified
|
|
432
528
|
with_stubbed_configurations_establish_connection do
|
|
433
|
-
|
|
434
|
-
ActiveRecord::Tasks::DatabaseTasks,
|
|
529
|
+
assert_called_for_configs(
|
|
435
530
|
:create,
|
|
436
531
|
[
|
|
437
532
|
[config_for("development", "primary")],
|
|
@@ -450,8 +545,7 @@ module ActiveRecord
|
|
|
450
545
|
ENV["RAILS_ENV"] = "development"
|
|
451
546
|
|
|
452
547
|
with_stubbed_configurations_establish_connection do
|
|
453
|
-
|
|
454
|
-
ActiveRecord::Tasks::DatabaseTasks,
|
|
548
|
+
assert_called_for_configs(
|
|
455
549
|
:create,
|
|
456
550
|
[
|
|
457
551
|
[config_for("development", "primary")],
|
|
@@ -473,8 +567,7 @@ module ActiveRecord
|
|
|
473
567
|
ENV["SKIP_TEST_DATABASE"] = "true"
|
|
474
568
|
|
|
475
569
|
with_stubbed_configurations_establish_connection do
|
|
476
|
-
|
|
477
|
-
ActiveRecord::Tasks::DatabaseTasks,
|
|
570
|
+
assert_called_for_configs(
|
|
478
571
|
:create,
|
|
479
572
|
[
|
|
480
573
|
[config_for("development", "primary")]
|
|
@@ -505,31 +598,38 @@ module ActiveRecord
|
|
|
505
598
|
ActiveRecord::Base.configurations.configs_for(env_name: env_name, name: name)
|
|
506
599
|
end
|
|
507
600
|
|
|
508
|
-
def with_stubbed_configurations_establish_connection
|
|
601
|
+
def with_stubbed_configurations_establish_connection(&block)
|
|
509
602
|
old_configurations = ActiveRecord::Base.configurations
|
|
510
603
|
ActiveRecord::Base.configurations = @configurations
|
|
511
604
|
|
|
512
|
-
ActiveRecord::Base.connection_handler.stub(:establish_connection, nil)
|
|
513
|
-
yield
|
|
514
|
-
end
|
|
605
|
+
ActiveRecord::Base.connection_handler.stub(:establish_connection, nil, &block)
|
|
515
606
|
ensure
|
|
516
607
|
ActiveRecord::Base.configurations = old_configurations
|
|
517
608
|
end
|
|
518
609
|
end
|
|
519
610
|
|
|
520
611
|
class DatabaseTasksCreateCurrentThreeTierTest < ActiveRecord::TestCase
|
|
612
|
+
include DatabaseTasksHelper
|
|
613
|
+
|
|
521
614
|
def setup
|
|
522
615
|
@configurations = {
|
|
523
|
-
"development" => {
|
|
524
|
-
|
|
525
|
-
|
|
616
|
+
"development" => {
|
|
617
|
+
"primary" => { "adapter" => "abstract", "database" => "dev-db" },
|
|
618
|
+
"secondary" => { "adapter" => "abstract", "database" => "secondary-dev-db" },
|
|
619
|
+
},
|
|
620
|
+
"test" => {
|
|
621
|
+
"primary" => { "adapter" => "abstract", "database" => "test-db" },
|
|
622
|
+
"secondary" => { "adapter" => "abstract", "database" => "secondary-test-db" },
|
|
623
|
+
},
|
|
624
|
+
"production" => {
|
|
625
|
+
"primary" => { "url" => "abstract://prod-db-host/prod-db" },
|
|
626
|
+
"secondary" => { "url" => "abstract://secondary-prod-db-host/secondary-prod-db" } }
|
|
526
627
|
}
|
|
527
628
|
end
|
|
528
629
|
|
|
529
630
|
def test_creates_current_environment_database
|
|
530
631
|
with_stubbed_configurations_establish_connection do
|
|
531
|
-
|
|
532
|
-
ActiveRecord::Tasks::DatabaseTasks,
|
|
632
|
+
assert_called_for_configs(
|
|
533
633
|
:create,
|
|
534
634
|
[
|
|
535
635
|
[config_for("test", "primary")],
|
|
@@ -545,8 +645,7 @@ module ActiveRecord
|
|
|
545
645
|
|
|
546
646
|
def test_creates_current_environment_database_with_url
|
|
547
647
|
with_stubbed_configurations_establish_connection do
|
|
548
|
-
|
|
549
|
-
ActiveRecord::Tasks::DatabaseTasks,
|
|
648
|
+
assert_called_for_configs(
|
|
550
649
|
:create,
|
|
551
650
|
[
|
|
552
651
|
[config_for("production", "primary")],
|
|
@@ -562,8 +661,7 @@ module ActiveRecord
|
|
|
562
661
|
|
|
563
662
|
def test_creates_test_and_development_databases_when_env_was_not_specified
|
|
564
663
|
with_stubbed_configurations_establish_connection do
|
|
565
|
-
|
|
566
|
-
ActiveRecord::Tasks::DatabaseTasks,
|
|
664
|
+
assert_called_for_configs(
|
|
567
665
|
:create,
|
|
568
666
|
[
|
|
569
667
|
[config_for("development", "primary")],
|
|
@@ -584,8 +682,7 @@ module ActiveRecord
|
|
|
584
682
|
ENV["RAILS_ENV"] = "development"
|
|
585
683
|
|
|
586
684
|
with_stubbed_configurations_establish_connection do
|
|
587
|
-
|
|
588
|
-
ActiveRecord::Tasks::DatabaseTasks,
|
|
685
|
+
assert_called_for_configs(
|
|
589
686
|
:create,
|
|
590
687
|
[
|
|
591
688
|
[config_for("development", "primary")],
|
|
@@ -622,13 +719,11 @@ module ActiveRecord
|
|
|
622
719
|
ActiveRecord::Base.configurations.configs_for(env_name: env_name, name: name)
|
|
623
720
|
end
|
|
624
721
|
|
|
625
|
-
def with_stubbed_configurations_establish_connection
|
|
722
|
+
def with_stubbed_configurations_establish_connection(&block)
|
|
626
723
|
old_configurations = ActiveRecord::Base.configurations
|
|
627
724
|
ActiveRecord::Base.configurations = @configurations
|
|
628
725
|
|
|
629
|
-
ActiveRecord::Base.connection_handler.stub(:establish_connection, nil)
|
|
630
|
-
yield
|
|
631
|
-
end
|
|
726
|
+
ActiveRecord::Base.connection_handler.stub(:establish_connection, nil, &block)
|
|
632
727
|
ensure
|
|
633
728
|
ActiveRecord::Base.configurations = old_configurations
|
|
634
729
|
end
|
|
@@ -650,7 +745,7 @@ module ActiveRecord
|
|
|
650
745
|
|
|
651
746
|
class DatabaseTasksDropAllTest < ActiveRecord::TestCase
|
|
652
747
|
def setup
|
|
653
|
-
@configurations = { development: { "database" => "my-db" } }
|
|
748
|
+
@configurations = { development: { "adapter" => "abstract", "database" => "my-db" } }
|
|
654
749
|
|
|
655
750
|
$stdout, @original_stdout = StringIO.new, $stdout
|
|
656
751
|
$stderr, @original_stderr = StringIO.new, $stderr
|
|
@@ -733,10 +828,12 @@ module ActiveRecord
|
|
|
733
828
|
end
|
|
734
829
|
|
|
735
830
|
class DatabaseTasksDropCurrentTest < ActiveRecord::TestCase
|
|
831
|
+
include DatabaseTasksHelper
|
|
832
|
+
|
|
736
833
|
def setup
|
|
737
834
|
@configurations = {
|
|
738
|
-
"development" => { "database" => "dev-db" },
|
|
739
|
-
"test" => { "database" => "test-db" },
|
|
835
|
+
"development" => { "adapter" => "abstract", "database" => "dev-db" },
|
|
836
|
+
"test" => { "adapter" => "abstract", "database" => "test-db" },
|
|
740
837
|
"production" => { "url" => "abstract://prod-db-host/prod-db" }
|
|
741
838
|
}
|
|
742
839
|
end
|
|
@@ -771,8 +868,7 @@ module ActiveRecord
|
|
|
771
868
|
|
|
772
869
|
def test_drops_test_and_development_databases_when_env_was_not_specified
|
|
773
870
|
with_stubbed_configurations do
|
|
774
|
-
|
|
775
|
-
ActiveRecord::Tasks::DatabaseTasks,
|
|
871
|
+
assert_called_for_configs(
|
|
776
872
|
:drop,
|
|
777
873
|
[
|
|
778
874
|
[config_for("development", "primary")],
|
|
@@ -791,8 +887,7 @@ module ActiveRecord
|
|
|
791
887
|
ENV["RAILS_ENV"] = "development"
|
|
792
888
|
|
|
793
889
|
with_stubbed_configurations do
|
|
794
|
-
|
|
795
|
-
ActiveRecord::Tasks::DatabaseTasks,
|
|
890
|
+
assert_called_for_configs(
|
|
796
891
|
:drop,
|
|
797
892
|
[
|
|
798
893
|
[config_for("development", "primary")],
|
|
@@ -824,18 +919,28 @@ module ActiveRecord
|
|
|
824
919
|
end
|
|
825
920
|
|
|
826
921
|
class DatabaseTasksDropCurrentThreeTierTest < ActiveRecord::TestCase
|
|
922
|
+
include DatabaseTasksHelper
|
|
923
|
+
|
|
827
924
|
def setup
|
|
828
925
|
@configurations = {
|
|
829
|
-
"development" => {
|
|
830
|
-
|
|
831
|
-
|
|
926
|
+
"development" => {
|
|
927
|
+
"primary" => { "adapter" => "abstract", "database" => "dev-db" },
|
|
928
|
+
"secondary" => { "adapter" => "abstract", "database" => "secondary-dev-db" },
|
|
929
|
+
},
|
|
930
|
+
"test" => {
|
|
931
|
+
"primary" => { "adapter" => "abstract", "database" => "test-db" },
|
|
932
|
+
"secondary" => { "adapter" => "abstract", "database" => "secondary-test-db" },
|
|
933
|
+
},
|
|
934
|
+
"production" => {
|
|
935
|
+
"primary" => { "url" => "abstract://prod-db-host/prod-db" },
|
|
936
|
+
"secondary" => { "url" => "abstract://secondary-prod-db-host/secondary-prod-db" },
|
|
937
|
+
},
|
|
832
938
|
}
|
|
833
939
|
end
|
|
834
940
|
|
|
835
941
|
def test_drops_current_environment_database
|
|
836
942
|
with_stubbed_configurations do
|
|
837
|
-
|
|
838
|
-
ActiveRecord::Tasks::DatabaseTasks,
|
|
943
|
+
assert_called_for_configs(
|
|
839
944
|
:drop,
|
|
840
945
|
[
|
|
841
946
|
[config_for("test", "primary")],
|
|
@@ -851,8 +956,7 @@ module ActiveRecord
|
|
|
851
956
|
|
|
852
957
|
def test_drops_current_environment_database_with_url
|
|
853
958
|
with_stubbed_configurations do
|
|
854
|
-
|
|
855
|
-
ActiveRecord::Tasks::DatabaseTasks,
|
|
959
|
+
assert_called_for_configs(
|
|
856
960
|
:drop,
|
|
857
961
|
[
|
|
858
962
|
[config_for("production", "primary")],
|
|
@@ -868,8 +972,7 @@ module ActiveRecord
|
|
|
868
972
|
|
|
869
973
|
def test_drops_test_and_development_databases_when_env_was_not_specified
|
|
870
974
|
with_stubbed_configurations do
|
|
871
|
-
|
|
872
|
-
ActiveRecord::Tasks::DatabaseTasks,
|
|
975
|
+
assert_called_for_configs(
|
|
873
976
|
:drop,
|
|
874
977
|
[
|
|
875
978
|
[config_for("development", "primary")],
|
|
@@ -890,8 +993,7 @@ module ActiveRecord
|
|
|
890
993
|
ENV["RAILS_ENV"] = "development"
|
|
891
994
|
|
|
892
995
|
with_stubbed_configurations do
|
|
893
|
-
|
|
894
|
-
ActiveRecord::Tasks::DatabaseTasks,
|
|
996
|
+
assert_called_for_configs(
|
|
895
997
|
:drop,
|
|
896
998
|
[
|
|
897
999
|
[config_for("development", "primary")],
|
|
@@ -924,18 +1026,19 @@ module ActiveRecord
|
|
|
924
1026
|
end
|
|
925
1027
|
end
|
|
926
1028
|
|
|
927
|
-
|
|
928
|
-
|
|
1029
|
+
class DatabaseTasksMigrationTestCase < ActiveRecord::TestCase
|
|
1030
|
+
if current_adapter?(:SQLite3Adapter) && !in_memory_db?
|
|
929
1031
|
self.use_transactional_tests = false
|
|
1032
|
+
class_attribute :folder_name, default: "valid"
|
|
930
1033
|
|
|
931
1034
|
# Use a memory db here to avoid having to rollback at the end
|
|
932
1035
|
setup do
|
|
933
|
-
migrations_path = MIGRATIONS_ROOT
|
|
934
|
-
file = ActiveRecord::Base.
|
|
1036
|
+
migrations_path = [MIGRATIONS_ROOT, folder_name].join("/")
|
|
1037
|
+
file = ActiveRecord::Base.lease_connection.raw_connection.filename
|
|
935
1038
|
@conn = ActiveRecord::Base.establish_connection adapter: "sqlite3",
|
|
936
1039
|
database: ":memory:", migrations_paths: migrations_path
|
|
937
1040
|
source_db = SQLite3::Database.new file
|
|
938
|
-
dest_db = ActiveRecord::Base.
|
|
1041
|
+
dest_db = ActiveRecord::Base.lease_connection.raw_connection
|
|
939
1042
|
backup = SQLite3::Backup.new(dest_db, "main", source_db, "main")
|
|
940
1043
|
backup.step(-1)
|
|
941
1044
|
backup.finish
|
|
@@ -945,9 +1048,18 @@ module ActiveRecord
|
|
|
945
1048
|
@conn.release_connection if @conn
|
|
946
1049
|
ActiveRecord::Base.establish_connection :arunit
|
|
947
1050
|
end
|
|
1051
|
+
|
|
1052
|
+
private
|
|
1053
|
+
def capture_migration_output
|
|
1054
|
+
capture(:stdout) do
|
|
1055
|
+
ActiveRecord::Tasks::DatabaseTasks.migrate
|
|
1056
|
+
end
|
|
1057
|
+
end
|
|
948
1058
|
end
|
|
1059
|
+
end
|
|
949
1060
|
|
|
950
|
-
|
|
1061
|
+
class DatabaseTasksMigrateTest < DatabaseTasksMigrationTestCase
|
|
1062
|
+
if current_adapter?(:SQLite3Adapter) && !in_memory_db?
|
|
951
1063
|
def test_migrate_set_and_unset_empty_values_for_verbose_and_version_env_vars
|
|
952
1064
|
verbose, version = ENV["VERBOSE"], ENV["VERSION"]
|
|
953
1065
|
|
|
@@ -983,24 +1095,85 @@ module ActiveRecord
|
|
|
983
1095
|
ensure
|
|
984
1096
|
ENV["VERBOSE"], ENV["VERSION"] = verbose, version
|
|
985
1097
|
end
|
|
1098
|
+
end
|
|
1099
|
+
end
|
|
986
1100
|
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
1101
|
+
class DatabaseTasksMigrateScopeTest < DatabaseTasksMigrationTestCase
|
|
1102
|
+
if current_adapter?(:SQLite3Adapter) && !in_memory_db?
|
|
1103
|
+
self.folder_name = "scope"
|
|
1104
|
+
|
|
1105
|
+
def test_migrate_using_scope_and_verbose_mode
|
|
1106
|
+
verbose, version, scope = ENV["VERBOSE"], ENV["VERSION"], ENV["SCOPE"]
|
|
1107
|
+
|
|
1108
|
+
# run up migration
|
|
1109
|
+
ENV["VERSION"] = "2"
|
|
1110
|
+
ENV["VERBOSE"] = "true"
|
|
1111
|
+
ENV["SCOPE"] = "mysql"
|
|
1112
|
+
|
|
1113
|
+
output = capture_migration_output
|
|
1114
|
+
assert_includes output, "migrating"
|
|
1115
|
+
assert_not_includes output, "No migrations ran. (using mysql scope)"
|
|
1116
|
+
|
|
1117
|
+
# run no migration because 2 was already run
|
|
1118
|
+
output = capture_migration_output
|
|
1119
|
+
assert_includes output, "No migrations ran. (using mysql scope)"
|
|
1120
|
+
assert_not_includes output, "migrating"
|
|
1121
|
+
ensure
|
|
1122
|
+
ENV["VERBOSE"], ENV["VERSION"], ENV["SCOPE"] = verbose, version, scope
|
|
1123
|
+
end
|
|
1124
|
+
|
|
1125
|
+
def test_migrate_using_scope_and_non_verbose_mode
|
|
1126
|
+
verbose, version, scope = ENV["VERBOSE"], ENV["VERSION"], ENV["SCOPE"]
|
|
1127
|
+
|
|
1128
|
+
# run up migration
|
|
1129
|
+
ENV["VERSION"] = "2"
|
|
1130
|
+
ENV["VERBOSE"] = "false"
|
|
1131
|
+
ENV["SCOPE"] = "mysql"
|
|
1132
|
+
|
|
1133
|
+
assert_empty capture_migration_output
|
|
1134
|
+
|
|
1135
|
+
# run no migration because 2 was already run
|
|
1136
|
+
assert_empty capture_migration_output
|
|
1137
|
+
ensure
|
|
1138
|
+
ENV["VERBOSE"], ENV["VERSION"], ENV["SCOPE"] = verbose, version, scope
|
|
1139
|
+
end
|
|
1140
|
+
|
|
1141
|
+
def test_migrate_using_empty_scope_and_verbose_mode
|
|
1142
|
+
verbose, version, scope = ENV["VERBOSE"], ENV["VERSION"], ENV["SCOPE"]
|
|
1143
|
+
|
|
1144
|
+
# run up migration
|
|
1145
|
+
ENV["VERSION"] = "2"
|
|
1146
|
+
ENV["VERBOSE"] = "true"
|
|
1147
|
+
ENV["SCOPE"] = ""
|
|
1148
|
+
|
|
1149
|
+
output = capture_migration_output
|
|
1150
|
+
assert_includes output, "migrating"
|
|
1151
|
+
assert_not_includes output, "No migrations ran. (using mysql scope)"
|
|
1152
|
+
|
|
1153
|
+
# run no migration because 1 already ran and 2 is mysql scoped
|
|
1154
|
+
output = capture_migration_output
|
|
1155
|
+
assert_empty output
|
|
1156
|
+
assert_not_includes output, "No migrations ran. (using mysql scope)"
|
|
1157
|
+
ensure
|
|
1158
|
+
ENV["VERBOSE"], ENV["VERSION"], ENV["SCOPE"] = verbose, version, scope
|
|
1159
|
+
end
|
|
993
1160
|
end
|
|
1161
|
+
end
|
|
1162
|
+
|
|
1163
|
+
class DatabaseTasksMigrateStatusTest < DatabaseTasksMigrationTestCase
|
|
1164
|
+
if current_adapter?(:SQLite3Adapter) && !in_memory_db?
|
|
1165
|
+
def setup
|
|
1166
|
+
@schema_migration = ActiveRecord::Base.connection_pool.schema_migration
|
|
1167
|
+
end
|
|
994
1168
|
|
|
995
|
-
class DatabaseTasksMigrateStatusTest < DatabaseTasksMigrationTestCase
|
|
996
1169
|
def test_migrate_status_table
|
|
997
|
-
|
|
1170
|
+
@schema_migration.create_table
|
|
998
1171
|
output = capture_migration_status
|
|
999
1172
|
assert_match(/database: :memory:/, output)
|
|
1000
1173
|
assert_match(/down 001 Valid people have last names/, output)
|
|
1001
1174
|
assert_match(/down 002 We need reminders/, output)
|
|
1002
1175
|
assert_match(/down 003 Innocent jointable/, output)
|
|
1003
|
-
|
|
1176
|
+
@schema_migration.delete_all_versions
|
|
1004
1177
|
end
|
|
1005
1178
|
|
|
1006
1179
|
private
|
|
@@ -1042,6 +1215,10 @@ module ActiveRecord
|
|
|
1042
1215
|
e = assert_raise(RuntimeError) { ActiveRecord::Tasks::DatabaseTasks.migrate }
|
|
1043
1216
|
assert_match(/Invalid format of target version/, e.message)
|
|
1044
1217
|
|
|
1218
|
+
ENV["VERSION"] = "1__1"
|
|
1219
|
+
e = assert_raise(RuntimeError) { ActiveRecord::Tasks::DatabaseTasks.migrate }
|
|
1220
|
+
assert_match(/Invalid format of target version/, e.message)
|
|
1221
|
+
|
|
1045
1222
|
ENV["VERSION"] = "1_name"
|
|
1046
1223
|
e = assert_raise(RuntimeError) { ActiveRecord::Tasks::DatabaseTasks.migrate }
|
|
1047
1224
|
assert_match(/Invalid format of target version/, e.message)
|
|
@@ -1057,7 +1234,7 @@ module ActiveRecord
|
|
|
1057
1234
|
end
|
|
1058
1235
|
|
|
1059
1236
|
def test_migrate_clears_schema_cache_afterward
|
|
1060
|
-
assert_called(ActiveRecord::Base, :
|
|
1237
|
+
assert_called(ActiveRecord::Base.schema_cache, :clear!) do
|
|
1061
1238
|
ActiveRecord::Tasks::DatabaseTasks.migrate
|
|
1062
1239
|
end
|
|
1063
1240
|
end
|
|
@@ -1081,9 +1258,9 @@ module ActiveRecord
|
|
|
1081
1258
|
def test_purges_current_environment_database
|
|
1082
1259
|
old_configurations = ActiveRecord::Base.configurations
|
|
1083
1260
|
configurations = {
|
|
1084
|
-
"development" => { "database" => "dev-db" },
|
|
1085
|
-
"test" => { "database" => "test-db" },
|
|
1086
|
-
"production" => { "database" => "prod-db" }
|
|
1261
|
+
"development" => { "adapter" => "abstract", "database" => "dev-db" },
|
|
1262
|
+
"test" => { "adapter" => "abstract", "database" => "test-db" },
|
|
1263
|
+
"production" => { "adapter" => "abstract", "database" => "prod-db" },
|
|
1087
1264
|
}
|
|
1088
1265
|
|
|
1089
1266
|
ActiveRecord::Base.configurations = configurations
|
|
@@ -1105,7 +1282,7 @@ module ActiveRecord
|
|
|
1105
1282
|
class DatabaseTasksPurgeAllTest < ActiveRecord::TestCase
|
|
1106
1283
|
def test_purge_all_local_configurations
|
|
1107
1284
|
old_configurations = ActiveRecord::Base.configurations
|
|
1108
|
-
configurations = { development: { "database" => "my-db" } }
|
|
1285
|
+
configurations = { development: { "adapter" => "abstract", "database" => "my-db" } }
|
|
1109
1286
|
ActiveRecord::Base.configurations = configurations
|
|
1110
1287
|
|
|
1111
1288
|
assert_called_with(
|
|
@@ -1120,33 +1297,39 @@ module ActiveRecord
|
|
|
1120
1297
|
end
|
|
1121
1298
|
end
|
|
1122
1299
|
|
|
1123
|
-
|
|
1124
|
-
|
|
1300
|
+
class DatabaseTasksTruncateAllTest < ActiveRecord::TestCase
|
|
1301
|
+
unless in_memory_db?
|
|
1125
1302
|
self.use_transactional_tests = false
|
|
1126
1303
|
|
|
1127
|
-
fixtures :
|
|
1304
|
+
fixtures :courses, :colleges
|
|
1128
1305
|
|
|
1129
1306
|
def setup
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1307
|
+
pool = ARUnit2Model.connection_pool
|
|
1308
|
+
@schema_migration = pool.schema_migration
|
|
1309
|
+
@schema_migration.create_table
|
|
1310
|
+
@schema_migration.create_version(@schema_migration.table_name)
|
|
1311
|
+
|
|
1312
|
+
@internal_metadata = pool.internal_metadata
|
|
1313
|
+
@internal_metadata.create_table
|
|
1314
|
+
@internal_metadata[@internal_metadata.table_name] = nil
|
|
1315
|
+
|
|
1316
|
+
@old_configurations = ActiveRecord::Base.configurations
|
|
1134
1317
|
end
|
|
1135
1318
|
|
|
1136
1319
|
def teardown
|
|
1137
|
-
|
|
1138
|
-
|
|
1320
|
+
@schema_migration.delete_all_versions
|
|
1321
|
+
@internal_metadata.delete_all_entries
|
|
1139
1322
|
clean_up_connection_handler
|
|
1323
|
+
ActiveRecord::Base.configurations = @old_configurations
|
|
1140
1324
|
end
|
|
1141
1325
|
|
|
1142
1326
|
def test_truncate_tables
|
|
1143
|
-
assert_operator
|
|
1144
|
-
assert_operator
|
|
1145
|
-
assert_operator
|
|
1146
|
-
assert_operator
|
|
1327
|
+
assert_operator @schema_migration.count, :>, 0
|
|
1328
|
+
assert_operator @internal_metadata.count, :>, 0
|
|
1329
|
+
assert_operator Course.count, :>, 0
|
|
1330
|
+
assert_operator College.count, :>, 0
|
|
1147
1331
|
|
|
1148
|
-
|
|
1149
|
-
db_config = ActiveRecord::Base.configurations.configs_for(env_name: "arunit", name: "primary")
|
|
1332
|
+
db_config = ActiveRecord::Base.configurations.configs_for(env_name: "arunit2", name: "primary")
|
|
1150
1333
|
configurations = { development: db_config.configuration_hash }
|
|
1151
1334
|
ActiveRecord::Base.configurations = configurations
|
|
1152
1335
|
|
|
@@ -1156,61 +1339,57 @@ module ActiveRecord
|
|
|
1156
1339
|
)
|
|
1157
1340
|
end
|
|
1158
1341
|
|
|
1159
|
-
assert_operator
|
|
1160
|
-
assert_operator
|
|
1161
|
-
assert_equal 0,
|
|
1162
|
-
assert_equal 0,
|
|
1163
|
-
ensure
|
|
1164
|
-
ActiveRecord::Base.configurations = old_configurations
|
|
1342
|
+
assert_operator @schema_migration.count, :>, 0
|
|
1343
|
+
assert_operator @internal_metadata.count, :>, 0
|
|
1344
|
+
assert_equal 0, Course.count
|
|
1345
|
+
assert_equal 0, College.count
|
|
1165
1346
|
end
|
|
1166
1347
|
end
|
|
1167
1348
|
|
|
1168
1349
|
class DatabaseTasksTruncateAllWithPrefixTest < DatabaseTasksTruncateAllTest
|
|
1169
1350
|
setup do
|
|
1170
1351
|
ActiveRecord::Base.table_name_prefix = "p_"
|
|
1171
|
-
|
|
1172
|
-
SchemaMigration.reset_table_name
|
|
1173
|
-
InternalMetadata.reset_table_name
|
|
1174
1352
|
end
|
|
1175
1353
|
|
|
1176
1354
|
teardown do
|
|
1177
1355
|
ActiveRecord::Base.table_name_prefix = nil
|
|
1178
|
-
|
|
1179
|
-
SchemaMigration.reset_table_name
|
|
1180
|
-
InternalMetadata.reset_table_name
|
|
1181
1356
|
end
|
|
1182
1357
|
end
|
|
1183
1358
|
|
|
1184
1359
|
class DatabaseTasksTruncateAllWithSuffixTest < DatabaseTasksTruncateAllTest
|
|
1185
1360
|
setup do
|
|
1186
1361
|
ActiveRecord::Base.table_name_suffix = "_s"
|
|
1187
|
-
|
|
1188
|
-
SchemaMigration.reset_table_name
|
|
1189
|
-
InternalMetadata.reset_table_name
|
|
1190
1362
|
end
|
|
1191
1363
|
|
|
1192
1364
|
teardown do
|
|
1193
1365
|
ActiveRecord::Base.table_name_suffix = nil
|
|
1194
|
-
|
|
1195
|
-
SchemaMigration.reset_table_name
|
|
1196
|
-
InternalMetadata.reset_table_name
|
|
1197
1366
|
end
|
|
1198
1367
|
end
|
|
1199
1368
|
end
|
|
1200
1369
|
|
|
1201
1370
|
class DatabaseTasksTruncateAllWithMultipleDatabasesTest < ActiveRecord::TestCase
|
|
1371
|
+
include DatabaseTasksHelper
|
|
1372
|
+
|
|
1202
1373
|
def setup
|
|
1203
1374
|
@configurations = {
|
|
1204
|
-
"development" => {
|
|
1205
|
-
|
|
1206
|
-
|
|
1375
|
+
"development" => {
|
|
1376
|
+
"primary" => { "adapter" => "abstract", "database" => "dev-db" },
|
|
1377
|
+
"secondary" => { "adapter" => "abstract", "database" => "secondary-dev-db" },
|
|
1378
|
+
},
|
|
1379
|
+
"test" => {
|
|
1380
|
+
"primary" => { "adapter" => "abstract", "database" => "test-db" },
|
|
1381
|
+
"secondary" => { "adapter" => "abstract", "database" => "secondary-test-db" },
|
|
1382
|
+
},
|
|
1383
|
+
"production" => {
|
|
1384
|
+
"primary" => { "url" => "abstract://prod-db-host/prod-db" },
|
|
1385
|
+
"secondary" => { "url" => "abstract://secondary-prod-db-host/secondary-prod-db" },
|
|
1386
|
+
}
|
|
1207
1387
|
}
|
|
1208
1388
|
end
|
|
1209
1389
|
|
|
1210
1390
|
def test_truncate_all_databases_for_environment
|
|
1211
1391
|
with_stubbed_configurations do
|
|
1212
|
-
|
|
1213
|
-
ActiveRecord::Tasks::DatabaseTasks,
|
|
1392
|
+
assert_called_for_configs(
|
|
1214
1393
|
:truncate_tables,
|
|
1215
1394
|
[
|
|
1216
1395
|
[config_for("test", "primary")],
|
|
@@ -1226,8 +1405,7 @@ module ActiveRecord
|
|
|
1226
1405
|
|
|
1227
1406
|
def test_truncate_all_databases_with_url_for_environment
|
|
1228
1407
|
with_stubbed_configurations do
|
|
1229
|
-
|
|
1230
|
-
ActiveRecord::Tasks::DatabaseTasks,
|
|
1408
|
+
assert_called_for_configs(
|
|
1231
1409
|
:truncate_tables,
|
|
1232
1410
|
[
|
|
1233
1411
|
[config_for("production", "primary")],
|
|
@@ -1243,8 +1421,7 @@ module ActiveRecord
|
|
|
1243
1421
|
|
|
1244
1422
|
def test_truncate_all_development_databases_when_env_is_not_specified
|
|
1245
1423
|
with_stubbed_configurations do
|
|
1246
|
-
|
|
1247
|
-
ActiveRecord::Tasks::DatabaseTasks,
|
|
1424
|
+
assert_called_for_configs(
|
|
1248
1425
|
:truncate_tables,
|
|
1249
1426
|
[
|
|
1250
1427
|
[config_for("development", "primary")],
|
|
@@ -1263,8 +1440,7 @@ module ActiveRecord
|
|
|
1263
1440
|
ENV["RAILS_ENV"] = "development"
|
|
1264
1441
|
|
|
1265
1442
|
with_stubbed_configurations do
|
|
1266
|
-
|
|
1267
|
-
ActiveRecord::Tasks::DatabaseTasks,
|
|
1443
|
+
assert_called_for_configs(
|
|
1268
1444
|
:truncate_tables,
|
|
1269
1445
|
[
|
|
1270
1446
|
[config_for("development", "primary")],
|
|
@@ -1311,7 +1487,7 @@ module ActiveRecord
|
|
|
1311
1487
|
def test_charset_current
|
|
1312
1488
|
old_configurations = ActiveRecord::Base.configurations
|
|
1313
1489
|
configurations = {
|
|
1314
|
-
"production" => { "database" => "prod-db" }
|
|
1490
|
+
"production" => { "adapter" => "abstract", "database" => "prod-db" }
|
|
1315
1491
|
}
|
|
1316
1492
|
|
|
1317
1493
|
ActiveRecord::Base.configurations = configurations
|
|
@@ -1344,7 +1520,7 @@ module ActiveRecord
|
|
|
1344
1520
|
def test_collation_current
|
|
1345
1521
|
old_configurations = ActiveRecord::Base.configurations
|
|
1346
1522
|
configurations = {
|
|
1347
|
-
"production" => { "database" => "prod-db" }
|
|
1523
|
+
"production" => { "adapter" => "abstract", "database" => "prod-db" }
|
|
1348
1524
|
}
|
|
1349
1525
|
|
|
1350
1526
|
ActiveRecord::Base.configurations = configurations
|
|
@@ -1382,13 +1558,16 @@ module ActiveRecord
|
|
|
1382
1558
|
version = ENV["VERSION"]
|
|
1383
1559
|
|
|
1384
1560
|
ENV["VERSION"] = "0"
|
|
1385
|
-
assert_equal
|
|
1561
|
+
assert_equal 0, ActiveRecord::Tasks::DatabaseTasks.target_version
|
|
1386
1562
|
|
|
1387
1563
|
ENV["VERSION"] = "42"
|
|
1388
|
-
assert_equal
|
|
1564
|
+
assert_equal 42, ActiveRecord::Tasks::DatabaseTasks.target_version
|
|
1389
1565
|
|
|
1390
1566
|
ENV["VERSION"] = "042"
|
|
1391
|
-
assert_equal
|
|
1567
|
+
assert_equal 42, ActiveRecord::Tasks::DatabaseTasks.target_version
|
|
1568
|
+
|
|
1569
|
+
ENV["VERSION"] = "2000_01_01_000042"
|
|
1570
|
+
assert_equal 20000101000042, ActiveRecord::Tasks::DatabaseTasks.target_version
|
|
1392
1571
|
ensure
|
|
1393
1572
|
ENV["VERSION"] = version
|
|
1394
1573
|
end
|
|
@@ -1403,7 +1582,7 @@ module ActiveRecord
|
|
|
1403
1582
|
ENV["VERSION"] = version
|
|
1404
1583
|
end
|
|
1405
1584
|
|
|
1406
|
-
def
|
|
1585
|
+
def test_check_target_version_does_not_raise_error_if_version_is_not_set
|
|
1407
1586
|
version = ENV.delete("VERSION")
|
|
1408
1587
|
assert_nothing_raised { ActiveRecord::Tasks::DatabaseTasks.check_target_version }
|
|
1409
1588
|
ensure
|
|
@@ -1456,6 +1635,9 @@ module ActiveRecord
|
|
|
1456
1635
|
ENV["VERSION"] = "001"
|
|
1457
1636
|
assert_nothing_raised { ActiveRecord::Tasks::DatabaseTasks.check_target_version }
|
|
1458
1637
|
|
|
1638
|
+
ENV["VERSION"] = "1_001"
|
|
1639
|
+
assert_nothing_raised { ActiveRecord::Tasks::DatabaseTasks.check_target_version }
|
|
1640
|
+
|
|
1459
1641
|
ENV["VERSION"] = "001_name.rb"
|
|
1460
1642
|
assert_nothing_raised { ActiveRecord::Tasks::DatabaseTasks.check_target_version }
|
|
1461
1643
|
ensure
|
|
@@ -1506,21 +1688,112 @@ module ActiveRecord
|
|
|
1506
1688
|
end
|
|
1507
1689
|
end
|
|
1508
1690
|
|
|
1509
|
-
class
|
|
1510
|
-
|
|
1691
|
+
class DatabaseTasksCheckSchemaFileMethods < ActiveRecord::TestCase
|
|
1692
|
+
setup do
|
|
1693
|
+
@configurations = { "development" => { "adapter" => "abstract", "database" => "my-db" } }
|
|
1694
|
+
end
|
|
1695
|
+
|
|
1696
|
+
def test_check_dump_filename_defaults
|
|
1511
1697
|
ActiveRecord::Tasks::DatabaseTasks.stub(:db_dir, "/tmp") do
|
|
1512
|
-
|
|
1698
|
+
with_stubbed_configurations do
|
|
1699
|
+
assert_equal "/tmp/schema.rb", ActiveRecord::Tasks::DatabaseTasks.schema_dump_path(config_for("development", "primary"))
|
|
1700
|
+
end
|
|
1513
1701
|
end
|
|
1514
1702
|
end
|
|
1515
|
-
end
|
|
1516
1703
|
|
|
1517
|
-
|
|
1704
|
+
def test_check_dump_filename_with_schema_env
|
|
1705
|
+
schema = ENV["SCHEMA"]
|
|
1706
|
+
ENV["SCHEMA"] = "schema_path"
|
|
1707
|
+
ActiveRecord::Tasks::DatabaseTasks.stub(:db_dir, "/tmp") do
|
|
1708
|
+
with_stubbed_configurations do
|
|
1709
|
+
assert_equal "schema_path", ActiveRecord::Tasks::DatabaseTasks.schema_dump_path(config_for("development", "primary"))
|
|
1710
|
+
end
|
|
1711
|
+
end
|
|
1712
|
+
ensure
|
|
1713
|
+
ENV["SCHEMA"] = schema
|
|
1714
|
+
end
|
|
1715
|
+
|
|
1716
|
+
{ ruby: "schema.rb", sql: "structure.sql" }.each_pair do |fmt, filename|
|
|
1717
|
+
define_method("test_check_dump_filename_for_#{fmt}_format") do
|
|
1718
|
+
ActiveRecord::Tasks::DatabaseTasks.stub(:db_dir, "/tmp") do
|
|
1719
|
+
with_stubbed_configurations do
|
|
1720
|
+
assert_equal "/tmp/#{filename}", ActiveRecord::Tasks::DatabaseTasks.schema_dump_path(config_for("development", "primary"), fmt)
|
|
1721
|
+
end
|
|
1722
|
+
end
|
|
1723
|
+
end
|
|
1724
|
+
end
|
|
1725
|
+
|
|
1726
|
+
def test_check_dump_filename_defaults_for_non_primary_databases
|
|
1727
|
+
ActiveRecord::Tasks::DatabaseTasks.stub(:db_dir, "/tmp") do
|
|
1728
|
+
configurations = {
|
|
1729
|
+
"development" => {
|
|
1730
|
+
"primary" => { "adapter" => "abstract", "database" => "dev-db" },
|
|
1731
|
+
"secondary" => { "adapter" => "abstract", "database" => "secondary-dev-db" },
|
|
1732
|
+
},
|
|
1733
|
+
}
|
|
1734
|
+
with_stubbed_configurations(configurations) do
|
|
1735
|
+
assert_equal "/tmp/secondary_schema.rb", ActiveRecord::Tasks::DatabaseTasks.schema_dump_path(config_for("development", "secondary"))
|
|
1736
|
+
end
|
|
1737
|
+
end
|
|
1738
|
+
end
|
|
1739
|
+
|
|
1740
|
+
def test_setting_schema_dump_to_nil
|
|
1741
|
+
ActiveRecord::Tasks::DatabaseTasks.stub(:db_dir, "/tmp") do
|
|
1742
|
+
configurations = {
|
|
1743
|
+
"development" => { "primary" => { "adapter" => "abstract", "database" => "dev-db", "schema_dump" => false } },
|
|
1744
|
+
}
|
|
1745
|
+
with_stubbed_configurations(configurations) do
|
|
1746
|
+
assert_nil ActiveRecord::Tasks::DatabaseTasks.schema_dump_path(config_for("development", "primary"))
|
|
1747
|
+
end
|
|
1748
|
+
end
|
|
1749
|
+
end
|
|
1750
|
+
|
|
1751
|
+
def test_check_dump_filename_with_schema_env_with_non_primary_databases
|
|
1752
|
+
schema = ENV["SCHEMA"]
|
|
1753
|
+
ENV["SCHEMA"] = "schema_path"
|
|
1754
|
+
ActiveRecord::Tasks::DatabaseTasks.stub(:db_dir, "/tmp") do
|
|
1755
|
+
configurations = {
|
|
1756
|
+
"development" => {
|
|
1757
|
+
"primary" => { "adapter" => "abstract", "database" => "dev-db" },
|
|
1758
|
+
"secondary" => { "adapter" => "abstract", "database" => "secondary-dev-db" },
|
|
1759
|
+
},
|
|
1760
|
+
}
|
|
1761
|
+
with_stubbed_configurations(configurations) do
|
|
1762
|
+
assert_equal "schema_path", ActiveRecord::Tasks::DatabaseTasks.schema_dump_path(config_for("development", "secondary"))
|
|
1763
|
+
end
|
|
1764
|
+
end
|
|
1765
|
+
ensure
|
|
1766
|
+
ENV["SCHEMA"] = schema
|
|
1767
|
+
end
|
|
1768
|
+
|
|
1518
1769
|
{ ruby: "schema.rb", sql: "structure.sql" }.each_pair do |fmt, filename|
|
|
1519
|
-
define_method("
|
|
1770
|
+
define_method("test_check_dump_filename_for_#{fmt}_format_with_non_primary_databases") do
|
|
1520
1771
|
ActiveRecord::Tasks::DatabaseTasks.stub(:db_dir, "/tmp") do
|
|
1521
|
-
|
|
1772
|
+
configurations = {
|
|
1773
|
+
"development" => {
|
|
1774
|
+
"primary" => { "adapter" => "abstract", "database" => "dev-db" },
|
|
1775
|
+
"secondary" => { "adapter" => "abstract", "database" => "secondary-dev-db" },
|
|
1776
|
+
},
|
|
1777
|
+
}
|
|
1778
|
+
with_stubbed_configurations(configurations) do
|
|
1779
|
+
assert_equal "/tmp/secondary_#{filename}", ActiveRecord::Tasks::DatabaseTasks.schema_dump_path(config_for("development", "secondary"), fmt)
|
|
1780
|
+
end
|
|
1522
1781
|
end
|
|
1523
1782
|
end
|
|
1524
1783
|
end
|
|
1784
|
+
|
|
1785
|
+
private
|
|
1786
|
+
def config_for(env_name, name)
|
|
1787
|
+
ActiveRecord::Base.configurations.configs_for(env_name: env_name, name: name)
|
|
1788
|
+
end
|
|
1789
|
+
|
|
1790
|
+
def with_stubbed_configurations(configurations = @configurations)
|
|
1791
|
+
old_configurations = ActiveRecord::Base.configurations
|
|
1792
|
+
ActiveRecord::Base.configurations = configurations
|
|
1793
|
+
|
|
1794
|
+
yield
|
|
1795
|
+
ensure
|
|
1796
|
+
ActiveRecord::Base.configurations = old_configurations
|
|
1797
|
+
end
|
|
1525
1798
|
end
|
|
1526
1799
|
end
|