ibm_db 5.1.0-x86-mingw32 → 5.3.2-x86-mingw32
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/CHANGES +9 -0
- data/LICENSE +55 -18
- data/ext/Makefile +14 -14
- data/ext/extconf.rb +4 -4
- data/ext/ibm_db.c +62 -57
- data/ext/ibm_db.o +0 -0
- data/ext/ibm_db.so +0 -0
- data/ext/mkmf.log +11 -11
- data/ext/ruby_ibm_db_cli.c +1 -0
- data/ext/ruby_ibm_db_cli.o +0 -0
- data/lib/active_record/connection_adapters/ibm_db_adapter.rb +1463 -1279
- data/lib/ibm_db.so +1 -0
- data/lib/mswin32/ibm_db.rb +7 -3
- data/lib/mswin32/rb2x/i386/ruby25/ibm_db.so +0 -0
- data/lib/mswin32/rb3x/i386/ruby30/ibm_db.so +0 -0
- data/test/active_record/connection_adapters/fake_adapter.rb +5 -2
- data/test/activejob/destroy_association_async_test.rb +305 -0
- data/test/activejob/destroy_async_job_not_present_test.rb +31 -0
- data/test/activejob/helper.rb +15 -0
- data/test/assets/schema_dump_5_1.yml +345 -0
- data/test/cases/adapter_prevent_writes_test.rb +334 -0
- data/test/cases/adapter_test.rb +432 -218
- data/test/cases/adapters/mysql2/active_schema_test.rb +85 -75
- data/test/cases/adapters/mysql2/auto_increment_test.rb +34 -0
- data/test/cases/adapters/mysql2/bind_parameter_test.rb +5 -3
- data/test/cases/adapters/mysql2/boolean_test.rb +6 -4
- data/test/cases/adapters/mysql2/case_sensitivity_test.rb +26 -24
- data/test/cases/adapters/mysql2/charset_collation_test.rb +20 -17
- data/test/cases/adapters/mysql2/connection_test.rb +48 -50
- data/test/cases/adapters/mysql2/count_deleted_rows_with_lock_test.rb +28 -0
- data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +23 -19
- data/test/cases/adapters/mysql2/enum_test.rb +32 -11
- data/test/cases/adapters/mysql2/explain_test.rb +13 -11
- data/test/cases/adapters/mysql2/json_test.rb +17 -188
- data/test/cases/adapters/mysql2/mysql2_adapter_prevent_writes_test.rb +208 -0
- data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +183 -28
- data/test/cases/adapters/mysql2/nested_deadlock_test.rb +75 -0
- data/test/cases/adapters/mysql2/optimizer_hints_test.rb +69 -0
- data/test/cases/adapters/mysql2/schema_migrations_test.rb +26 -21
- data/test/cases/adapters/mysql2/schema_test.rb +24 -22
- data/test/cases/adapters/mysql2/set_test.rb +32 -0
- data/test/cases/adapters/mysql2/sp_test.rb +10 -8
- data/test/cases/adapters/mysql2/sql_types_test.rb +8 -6
- data/test/cases/adapters/mysql2/table_options_test.rb +93 -10
- data/test/cases/adapters/mysql2/transaction_test.rb +151 -0
- data/test/cases/adapters/mysql2/unsigned_type_test.rb +11 -9
- data/test/cases/adapters/mysql2/virtual_column_test.rb +66 -0
- data/test/cases/adapters/postgresql/active_schema_test.rb +40 -25
- data/test/cases/adapters/postgresql/array_test.rb +118 -63
- data/test/cases/adapters/postgresql/bit_string_test.rb +12 -10
- data/test/cases/adapters/postgresql/bytea_test.rb +26 -25
- data/test/cases/adapters/postgresql/case_insensitive_test.rb +10 -9
- data/test/cases/adapters/postgresql/change_schema_test.rb +7 -5
- data/test/cases/adapters/postgresql/cidr_test.rb +2 -0
- data/test/cases/adapters/postgresql/citext_test.rb +58 -58
- data/test/cases/adapters/postgresql/collation_test.rb +17 -15
- data/test/cases/adapters/postgresql/composite_test.rb +25 -23
- data/test/cases/adapters/postgresql/connection_test.rb +73 -85
- data/test/cases/adapters/postgresql/create_unlogged_tables_test.rb +74 -0
- data/test/cases/adapters/postgresql/datatype_test.rb +19 -22
- data/test/cases/adapters/postgresql/date_test.rb +42 -0
- data/test/cases/adapters/postgresql/domain_test.rb +9 -7
- data/test/cases/adapters/postgresql/enum_test.rb +12 -10
- data/test/cases/adapters/postgresql/explain_test.rb +10 -8
- data/test/cases/adapters/postgresql/extension_migration_test.rb +13 -12
- data/test/cases/adapters/postgresql/foreign_table_test.rb +109 -0
- data/test/cases/adapters/postgresql/full_text_test.rb +8 -6
- data/test/cases/adapters/postgresql/geometric_test.rb +57 -63
- data/test/cases/adapters/postgresql/hstore_test.rb +288 -280
- data/test/cases/adapters/postgresql/infinity_test.rb +54 -15
- data/test/cases/adapters/postgresql/integer_test.rb +2 -0
- data/test/cases/adapters/postgresql/interval_test.rb +99 -0
- data/test/cases/adapters/postgresql/json_test.rb +16 -201
- data/test/cases/adapters/postgresql/ltree_test.rb +14 -16
- data/test/cases/adapters/postgresql/money_test.rb +47 -16
- data/test/cases/adapters/postgresql/network_test.rb +36 -28
- data/test/cases/adapters/postgresql/numbers_test.rb +7 -5
- data/test/cases/adapters/postgresql/optimizer_hints_test.rb +71 -0
- data/test/cases/adapters/postgresql/partitions_test.rb +22 -0
- data/test/cases/adapters/postgresql/postgresql_adapter_prevent_writes_test.rb +205 -0
- data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +178 -136
- data/test/cases/adapters/postgresql/prepared_statements_disabled_test.rb +27 -0
- data/test/cases/adapters/postgresql/quoting_test.rb +12 -6
- data/test/cases/adapters/postgresql/range_test.rb +406 -292
- data/test/cases/adapters/postgresql/referential_integrity_test.rb +16 -15
- data/test/cases/adapters/postgresql/rename_table_test.rb +9 -8
- data/test/cases/adapters/postgresql/schema_authorization_test.rb +14 -23
- data/test/cases/adapters/postgresql/schema_test.rb +207 -91
- data/test/cases/adapters/postgresql/serial_test.rb +9 -7
- data/test/cases/adapters/postgresql/statement_pool_test.rb +26 -6
- data/test/cases/adapters/postgresql/timestamp_test.rb +17 -15
- data/test/cases/adapters/postgresql/transaction_nested_test.rb +114 -0
- data/test/cases/adapters/postgresql/transaction_test.rb +189 -0
- data/test/cases/adapters/postgresql/type_lookup_test.rb +12 -10
- data/test/cases/adapters/postgresql/utils_test.rb +11 -9
- data/test/cases/adapters/postgresql/uuid_test.rb +226 -109
- data/test/cases/adapters/postgresql/xml_test.rb +10 -14
- data/test/cases/adapters/sqlite3/collation_test.rb +26 -15
- data/test/cases/adapters/sqlite3/copy_table_test.rb +31 -28
- data/test/cases/adapters/sqlite3/explain_test.rb +13 -11
- data/test/cases/adapters/sqlite3/json_test.rb +29 -0
- data/test/cases/adapters/sqlite3/quoting_test.rb +35 -57
- data/test/cases/adapters/sqlite3/sqlite3_adapter_prevent_writes_test.rb +186 -0
- data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +318 -131
- data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +11 -11
- data/test/cases/adapters/sqlite3/statement_pool_test.rb +7 -6
- data/test/cases/adapters/sqlite3/transaction_test.rb +123 -0
- data/test/cases/aggregations_test.rb +14 -12
- data/test/cases/annotate_test.rb +46 -0
- data/test/cases/ar_schema_test.rb +153 -86
- data/test/cases/arel/attributes/attribute_test.rb +1145 -0
- data/test/cases/arel/attributes/math_test.rb +83 -0
- data/test/cases/arel/attributes_test.rb +27 -0
- data/test/cases/arel/collectors/bind_test.rb +40 -0
- data/test/cases/arel/collectors/composite_test.rb +47 -0
- data/test/cases/arel/collectors/sql_string_test.rb +41 -0
- data/test/cases/arel/collectors/substitute_bind_collector_test.rb +48 -0
- data/test/cases/arel/crud_test.rb +65 -0
- data/test/cases/arel/delete_manager_test.rb +53 -0
- data/test/cases/arel/factory_methods_test.rb +46 -0
- data/test/cases/arel/helper.rb +45 -0
- data/test/cases/arel/insert_manager_test.rb +241 -0
- data/test/cases/arel/nodes/and_test.rb +30 -0
- data/test/cases/arel/nodes/as_test.rb +36 -0
- data/test/cases/arel/nodes/ascending_test.rb +46 -0
- data/test/cases/arel/nodes/bin_test.rb +35 -0
- data/test/cases/arel/nodes/binary_test.rb +29 -0
- data/test/cases/arel/nodes/bind_param_test.rb +22 -0
- data/test/cases/arel/nodes/case_test.rb +96 -0
- data/test/cases/arel/nodes/casted_test.rb +18 -0
- data/test/cases/arel/nodes/comment_test.rb +22 -0
- data/test/cases/arel/nodes/count_test.rb +35 -0
- data/test/cases/arel/nodes/delete_statement_test.rb +36 -0
- data/test/cases/arel/nodes/descending_test.rb +46 -0
- data/test/cases/arel/nodes/distinct_test.rb +21 -0
- data/test/cases/arel/nodes/equality_test.rb +62 -0
- data/test/cases/arel/nodes/extract_test.rb +43 -0
- data/test/cases/arel/nodes/false_test.rb +21 -0
- data/test/cases/arel/nodes/grouping_test.rb +26 -0
- data/test/cases/arel/nodes/infix_operation_test.rb +42 -0
- data/test/cases/arel/nodes/insert_statement_test.rb +44 -0
- data/test/cases/arel/nodes/named_function_test.rb +48 -0
- data/test/cases/arel/nodes/node_test.rb +22 -0
- data/test/cases/arel/nodes/not_test.rb +31 -0
- data/test/cases/arel/nodes/or_test.rb +36 -0
- data/test/cases/arel/nodes/over_test.rb +69 -0
- data/test/cases/arel/nodes/select_core_test.rb +79 -0
- data/test/cases/arel/nodes/select_statement_test.rb +51 -0
- data/test/cases/arel/nodes/sql_literal_test.rb +75 -0
- data/test/cases/arel/nodes/sum_test.rb +35 -0
- data/test/cases/arel/nodes/table_alias_test.rb +29 -0
- data/test/cases/arel/nodes/true_test.rb +21 -0
- data/test/cases/arel/nodes/unary_operation_test.rb +41 -0
- data/test/cases/arel/nodes/update_statement_test.rb +60 -0
- data/test/cases/arel/nodes/window_test.rb +81 -0
- data/test/cases/arel/nodes_test.rb +34 -0
- data/test/cases/arel/select_manager_test.rb +1238 -0
- data/test/cases/arel/support/fake_record.rb +135 -0
- data/test/cases/arel/table_test.rb +216 -0
- data/test/cases/arel/update_manager_test.rb +126 -0
- data/test/cases/arel/visitors/dispatch_contamination_test.rb +78 -0
- data/test/cases/arel/visitors/dot_test.rb +90 -0
- data/test/cases/arel/visitors/mysql_test.rb +157 -0
- data/test/cases/arel/visitors/postgres_test.rb +366 -0
- data/test/cases/arel/visitors/sqlite_test.rb +75 -0
- data/test/cases/arel/visitors/to_sql_test.rb +750 -0
- data/test/cases/associations/belongs_to_associations_test.rb +510 -158
- data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +4 -2
- data/test/cases/associations/callbacks_test.rb +56 -38
- data/test/cases/associations/cascaded_eager_loading_test.rb +118 -61
- data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +138 -18
- data/test/cases/associations/eager_load_nested_include_test.rb +38 -37
- data/test/cases/associations/eager_singularization_test.rb +21 -21
- data/test/cases/associations/eager_test.rb +559 -415
- data/test/cases/associations/extension_test.rb +18 -12
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +234 -213
- data/test/cases/associations/has_many_associations_test.rb +1038 -465
- data/test/cases/associations/has_many_through_associations_test.rb +558 -249
- data/test/cases/associations/has_one_associations_test.rb +294 -129
- data/test/cases/associations/has_one_through_associations_test.rb +121 -75
- data/test/cases/associations/inner_join_association_test.rb +114 -38
- data/test/cases/associations/inverse_associations_test.rb +606 -398
- data/test/cases/associations/join_model_test.rb +158 -148
- data/test/cases/associations/left_outer_join_association_test.rb +59 -24
- data/test/cases/associations/nested_through_associations_test.rb +166 -109
- data/test/cases/associations/required_test.rb +35 -10
- data/test/cases/associations_test.rb +241 -110
- data/test/cases/attribute_methods/read_test.rb +11 -11
- data/test/cases/attribute_methods_test.rb +413 -298
- data/test/cases/attributes_test.rb +145 -27
- data/test/cases/autosave_association_test.rb +681 -436
- data/test/cases/base_prevent_writes_test.rb +229 -0
- data/test/cases/base_test.rb +599 -542
- data/test/cases/batches_test.rb +288 -82
- data/test/cases/binary_test.rb +26 -31
- data/test/cases/bind_parameter_test.rb +194 -21
- data/test/cases/boolean_test.rb +52 -0
- data/test/cases/cache_key_test.rb +110 -5
- data/test/cases/calculations_test.rb +740 -177
- data/test/cases/callbacks_test.rb +74 -207
- data/test/cases/clone_test.rb +15 -10
- data/test/cases/coders/json_test.rb +2 -0
- data/test/cases/coders/yaml_column_test.rb +16 -13
- data/test/cases/collection_cache_key_test.rb +177 -20
- data/test/cases/column_alias_test.rb +9 -7
- data/test/cases/column_definition_test.rb +10 -68
- data/test/cases/comment_test.rb +166 -107
- data/test/cases/connection_adapters/adapter_leasing_test.rb +14 -10
- data/test/cases/connection_adapters/connection_handler_test.rb +358 -51
- data/test/cases/connection_adapters/connection_handlers_multi_db_test.rb +400 -0
- data/test/cases/connection_adapters/connection_handlers_multi_pool_config_test.rb +103 -0
- data/test/cases/connection_adapters/connection_handlers_sharding_db_test.rb +499 -0
- data/test/cases/connection_adapters/connection_swapping_nested_test.rb +457 -0
- data/test/cases/connection_adapters/legacy_connection_handlers_multi_db_test.rb +486 -0
- data/test/cases/connection_adapters/legacy_connection_handlers_sharding_db_test.rb +586 -0
- data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +319 -138
- data/test/cases/connection_adapters/mysql_type_lookup_test.rb +62 -50
- data/test/cases/connection_adapters/schema_cache_test.rb +259 -26
- data/test/cases/connection_adapters/type_lookup_test.rb +96 -95
- data/test/cases/connection_management_test.rb +13 -11
- data/test/cases/connection_pool_test.rb +316 -83
- data/test/cases/core_test.rb +82 -58
- data/test/cases/counter_cache_test.rb +204 -50
- data/test/cases/custom_locking_test.rb +5 -3
- data/test/cases/database_configurations/hash_config_test.rb +74 -0
- data/test/cases/database_configurations/resolver_test.rb +150 -0
- data/test/cases/database_configurations_test.rb +145 -0
- data/test/cases/database_selector_test.rb +296 -0
- data/test/cases/database_statements_test.rb +18 -16
- data/test/cases/date_test.rb +8 -16
- data/test/cases/date_time_precision_test.rb +100 -78
- data/test/cases/date_time_test.rb +23 -8
- data/test/cases/defaults_test.rb +106 -71
- data/test/cases/delegated_type_test.rb +57 -0
- data/test/cases/dirty_test.rb +419 -223
- data/test/cases/disconnected_test.rb +6 -6
- data/test/cases/dup_test.rb +54 -27
- data/test/cases/enum_test.rb +461 -82
- data/test/cases/errors_test.rb +7 -7
- data/test/cases/explain_subscriber_test.rb +17 -15
- data/test/cases/explain_test.rb +11 -19
- data/test/cases/filter_attributes_test.rb +153 -0
- data/test/cases/finder_respond_to_test.rb +14 -14
- data/test/cases/finder_test.rb +669 -287
- data/test/cases/fixture_set/file_test.rb +34 -38
- data/test/cases/fixtures_test.rb +833 -176
- data/test/cases/forbidden_attributes_protection_test.rb +32 -67
- data/test/cases/habtm_destroy_order_test.rb +25 -25
- data/test/cases/helper.rb +78 -49
- data/test/cases/hot_compatibility_test.rb +33 -32
- data/test/cases/i18n_test.rb +18 -17
- data/test/cases/inheritance_test.rb +180 -115
- data/test/cases/insert_all_test.rb +489 -0
- data/test/cases/instrumentation_test.rb +101 -0
- data/test/cases/integration_test.rb +119 -31
- data/test/cases/invalid_connection_test.rb +18 -16
- data/test/cases/invertible_migration_test.rb +183 -43
- data/test/cases/json_attribute_test.rb +35 -0
- data/test/cases/json_serialization_test.rb +57 -58
- data/test/cases/json_shared_test_cases.rb +290 -0
- data/test/cases/locking_test.rb +413 -119
- data/test/cases/log_subscriber_test.rb +68 -26
- data/test/cases/marshal_serialization_test.rb +39 -0
- data/test/cases/migration/change_schema_test.rb +118 -72
- data/test/cases/migration/change_table_test.rb +138 -30
- data/test/cases/migration/check_constraint_test.rb +162 -0
- data/test/cases/migration/column_attributes_test.rb +45 -35
- data/test/cases/migration/column_positioning_test.rb +18 -6
- data/test/cases/migration/columns_test.rb +93 -77
- data/test/cases/migration/command_recorder_test.rb +121 -34
- data/test/cases/migration/compatibility_test.rb +578 -23
- data/test/cases/migration/create_join_table_test.rb +35 -25
- data/test/cases/migration/foreign_key_test.rb +503 -284
- data/test/cases/migration/helper.rb +4 -3
- data/test/cases/migration/index_test.rb +119 -70
- data/test/cases/migration/logger_test.rb +9 -6
- data/test/cases/migration/pending_migrations_test.rb +88 -34
- data/test/cases/migration/references_foreign_key_test.rb +164 -150
- data/test/cases/migration/references_index_test.rb +38 -19
- data/test/cases/migration/references_statements_test.rb +15 -14
- data/test/cases/migration/rename_table_test.rb +53 -30
- data/test/cases/migration_test.rb +637 -269
- data/test/cases/migrator_test.rb +191 -135
- data/test/cases/mixin_test.rb +7 -11
- data/test/cases/modules_test.rb +36 -34
- data/test/cases/multi_db_migrator_test.rb +223 -0
- data/test/cases/multiparameter_attributes_test.rb +60 -33
- data/test/cases/multiple_db_test.rb +16 -22
- data/test/cases/nested_attributes_test.rb +341 -320
- data/test/cases/nested_attributes_with_callbacks_test.rb +26 -24
- data/test/cases/null_relation_test.rb +84 -0
- data/test/cases/numeric_data_test.rb +93 -0
- data/test/cases/persistence_test.rb +361 -269
- data/test/cases/pooled_connections_test.rb +18 -26
- data/test/cases/prepared_statement_status_test.rb +48 -0
- data/test/cases/primary_keys_test.rb +210 -104
- data/test/cases/query_cache_test.rb +610 -141
- data/test/cases/quoting_test.rb +132 -31
- data/test/cases/readonly_test.rb +49 -48
- data/test/cases/reaper_test.rb +146 -32
- data/test/cases/reflection_test.rb +167 -156
- data/test/cases/relation/delegation_test.rb +49 -36
- data/test/cases/relation/delete_all_test.rb +117 -0
- data/test/cases/relation/merging_test.rb +319 -42
- data/test/cases/relation/mutation_test.rb +55 -93
- data/test/cases/relation/or_test.rb +129 -29
- data/test/cases/relation/predicate_builder_test.rb +21 -6
- data/test/cases/relation/record_fetch_warning_test.rb +5 -3
- data/test/cases/relation/select_test.rb +67 -0
- data/test/cases/relation/update_all_test.rb +317 -0
- data/test/cases/relation/where_chain_test.rb +68 -32
- data/test/cases/relation/where_clause_test.rb +136 -61
- data/test/cases/relation/where_test.rb +155 -48
- data/test/cases/relation_test.rb +266 -112
- data/test/cases/relations_test.rb +969 -744
- data/test/cases/reload_models_test.rb +13 -9
- data/test/cases/reserved_word_test.rb +141 -0
- data/test/cases/result_test.rb +68 -17
- data/test/cases/sanitize_test.rb +87 -71
- data/test/cases/schema_dumper_test.rb +221 -128
- data/test/cases/schema_loading_test.rb +3 -2
- data/test/cases/scoping/default_scoping_test.rb +185 -144
- data/test/cases/scoping/named_scoping_test.rb +177 -89
- data/test/cases/scoping/relation_scoping_test.rb +197 -75
- data/test/cases/secure_token_test.rb +18 -3
- data/test/cases/serialization_test.rb +30 -28
- data/test/cases/serialized_attribute_test.rb +133 -42
- data/test/cases/signed_id_test.rb +168 -0
- data/test/cases/statement_cache_test.rb +41 -24
- data/test/cases/statement_invalid_test.rb +42 -0
- data/test/cases/store_test.rb +180 -55
- data/test/cases/strict_loading_test.rb +473 -0
- data/test/cases/suppressor_test.rb +26 -12
- data/test/cases/tasks/database_tasks_test.rb +1258 -194
- data/test/cases/tasks/mysql_rake_test.rb +370 -298
- data/test/cases/tasks/postgresql_rake_test.rb +481 -251
- data/test/cases/tasks/sqlite_rake_test.rb +225 -178
- data/test/cases/test_case.rb +51 -40
- data/test/cases/test_databases_test.rb +79 -0
- data/test/cases/test_fixtures_test.rb +79 -19
- data/test/cases/time_precision_test.rb +98 -76
- data/test/cases/timestamp_test.rb +102 -99
- data/test/cases/touch_later_test.rb +12 -10
- data/test/cases/transaction_callbacks_test.rb +344 -90
- data/test/cases/transaction_isolation_test.rb +12 -12
- data/test/cases/transactions_test.rb +612 -162
- data/test/cases/type/adapter_specific_registry_test.rb +14 -2
- data/test/cases/type/date_time_test.rb +4 -2
- data/test/cases/type/integer_test.rb +4 -2
- data/test/cases/type/string_test.rb +10 -8
- data/test/cases/type/time_test.rb +28 -0
- data/test/cases/type/type_map_test.rb +29 -28
- data/test/cases/type/unsigned_integer_test.rb +19 -0
- data/test/cases/type_test.rb +2 -0
- data/test/cases/types_test.rb +3 -1
- data/test/cases/unconnected_test.rb +14 -1
- data/test/cases/unsafe_raw_sql_test.rb +274 -0
- data/test/cases/validations/absence_validation_test.rb +19 -17
- data/test/cases/validations/association_validation_test.rb +30 -28
- data/test/cases/validations/i18n_generate_message_validation_test.rb +34 -16
- data/test/cases/validations/i18n_validation_test.rb +22 -21
- data/test/cases/validations/length_validation_test.rb +34 -33
- data/test/cases/validations/numericality_validation_test.rb +181 -0
- data/test/cases/validations/presence_validation_test.rb +21 -19
- data/test/cases/validations/uniqueness_validation_test.rb +156 -86
- data/test/cases/validations_repair_helper.rb +2 -0
- data/test/cases/validations_test.rb +61 -26
- data/test/cases/view_test.rb +122 -116
- data/test/cases/yaml_serialization_test.rb +79 -34
- data/test/config.example.yml +19 -19
- data/test/config.rb +3 -1
- data/test/config.yml +16 -6
- data/test/fixtures/all/namespaced/accounts.yml +2 -0
- data/test/fixtures/author_addresses.yml +1 -8
- data/test/fixtures/authors.yml +1 -7
- data/test/fixtures/binaries.yml +4 -0
- data/test/fixtures/books.yml +9 -2
- data/test/fixtures/categories_posts.yml +3 -0
- data/test/fixtures/citations.yml +5 -0
- data/test/fixtures/comments.yml +7 -0
- data/test/fixtures/companies.yml +5 -0
- data/test/fixtures/computers.yml +2 -0
- data/test/fixtures/customers.yml +10 -1
- data/test/fixtures/developers.yml +1 -1
- data/test/fixtures/essays.yml +10 -0
- data/test/fixtures/faces.yml +3 -3
- data/test/fixtures/humans.yml +5 -0
- data/test/fixtures/interests.yml +7 -7
- data/test/fixtures/memberships.yml +7 -0
- data/test/fixtures/minimalistics.yml +3 -0
- data/test/fixtures/mixed_case_monkeys.yml +2 -2
- data/test/fixtures/naked/yml/courses_with_invalid_key.yml +3 -0
- data/test/fixtures/naked/yml/parrots.yml +1 -0
- data/test/fixtures/other_books.yml +26 -0
- data/test/fixtures/other_posts.yml +1 -0
- data/test/fixtures/parrots.yml +7 -1
- data/test/fixtures/pirates.yml +3 -0
- data/test/fixtures/posts.yml +11 -3
- data/test/fixtures/readers.yml +6 -0
- data/test/fixtures/reserved_words/values.yml +2 -2
- data/test/fixtures/sponsors.yml +3 -0
- data/test/fixtures/strict_zines.yml +2 -0
- data/test/fixtures/subscribers.yml +1 -1
- data/test/fixtures/tasks.yml +1 -1
- data/test/fixtures/warehouse-things.yml +3 -0
- data/test/migrations/10_urban/9_add_expressions.rb +2 -0
- data/test/migrations/decimal/1_give_me_big_numbers.rb +6 -4
- data/test/migrations/magic/1_currencies_have_symbols.rb +3 -2
- data/test/migrations/missing/1000_people_have_middle_names.rb +2 -0
- data/test/migrations/missing/1_people_have_last_names.rb +2 -0
- data/test/migrations/missing/3_we_need_reminders.rb +2 -0
- data/test/migrations/missing/4_innocent_jointable.rb +3 -1
- data/test/migrations/rename/1_we_need_things.rb +2 -0
- data/test/migrations/rename/2_rename_things.rb +2 -0
- data/test/migrations/to_copy/1_people_have_hobbies.rb +3 -1
- data/test/migrations/to_copy/2_people_have_descriptions.rb +3 -1
- data/test/migrations/to_copy2/1_create_articles.rb +2 -0
- data/test/migrations/to_copy2/2_create_comments.rb +3 -1
- data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +3 -1
- data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +3 -1
- data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +3 -1
- data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +2 -0
- data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +2 -0
- data/test/migrations/valid/1_valid_people_have_last_names.rb +2 -0
- data/test/migrations/valid/2_we_need_reminders.rb +2 -0
- data/test/migrations/valid/3_innocent_jointable.rb +3 -1
- data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +2 -0
- data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -0
- data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +3 -1
- data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +2 -0
- data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +2 -0
- data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +3 -1
- data/test/migrations/version_check/20131219224947_migration_version_check.rb +2 -0
- data/test/models/account.rb +46 -0
- data/test/models/admin/account.rb +3 -1
- data/test/models/admin/randomly_named_c1.rb +2 -0
- data/test/models/admin/user.rb +16 -8
- data/test/models/admin.rb +4 -2
- data/test/models/aircraft.rb +3 -1
- data/test/models/arunit2_model.rb +2 -0
- data/test/models/author.rb +153 -102
- data/test/models/auto_id.rb +2 -0
- data/test/models/autoloadable/extra_firm.rb +2 -0
- data/test/models/binary.rb +3 -1
- data/test/models/binary_field.rb +6 -0
- data/test/models/bird.rb +13 -1
- data/test/models/book.rb +14 -4
- data/test/models/book_destroy_async.rb +24 -0
- data/test/models/boolean.rb +5 -0
- data/test/models/bulb.rb +13 -4
- data/test/models/cake_designer.rb +2 -0
- data/test/models/car.rb +17 -10
- data/test/models/carrier.rb +2 -0
- data/test/models/cart.rb +5 -0
- data/test/models/cat.rb +2 -0
- data/test/models/categorization.rb +8 -6
- data/test/models/category.rb +28 -16
- data/test/models/chef.rb +2 -0
- data/test/models/citation.rb +5 -1
- data/test/models/club.rb +13 -10
- data/test/models/college.rb +4 -2
- data/test/models/column.rb +2 -0
- data/test/models/column_name.rb +2 -0
- data/test/models/comment.rb +32 -10
- data/test/models/company.rb +102 -106
- data/test/models/company_in_module.rb +27 -26
- data/test/models/computer.rb +3 -1
- data/test/models/contact.rb +15 -13
- data/test/models/content.rb +5 -3
- data/test/models/contract.rb +21 -3
- data/test/models/country.rb +2 -4
- data/test/models/course.rb +3 -1
- data/test/models/customer.rb +10 -8
- data/test/models/customer_carrier.rb +2 -0
- data/test/models/dashboard.rb +2 -0
- data/test/models/default.rb +2 -0
- data/test/models/department.rb +2 -0
- data/test/models/destroy_async_parent.rb +15 -0
- data/test/models/destroy_async_parent_soft_delete.rb +20 -0
- data/test/models/developer.rb +152 -85
- data/test/models/dl_keyed_belongs_to.rb +13 -0
- data/test/models/dl_keyed_belongs_to_soft_delete.rb +19 -0
- data/test/models/dl_keyed_has_many.rb +5 -0
- data/test/models/dl_keyed_has_many_through.rb +5 -0
- data/test/models/dl_keyed_has_one.rb +5 -0
- data/test/models/dl_keyed_join.rb +10 -0
- data/test/models/dog.rb +2 -0
- data/test/models/dog_lover.rb +2 -0
- data/test/models/doubloon.rb +3 -1
- data/test/models/drink_designer.rb +17 -0
- data/test/models/edge.rb +4 -2
- data/test/models/electron.rb +2 -0
- data/test/models/engine.rb +3 -2
- data/test/models/entrant.rb +2 -0
- data/test/models/entry.rb +5 -0
- data/test/models/essay.rb +6 -3
- data/test/models/essay_destroy_async.rb +12 -0
- data/test/models/event.rb +3 -1
- data/test/models/eye.rb +5 -3
- data/test/models/face.rb +14 -6
- data/test/models/family.rb +6 -0
- data/test/models/family_tree.rb +6 -0
- data/test/models/friendship.rb +5 -3
- data/test/models/frog.rb +8 -0
- data/test/models/guid.rb +3 -1
- data/test/models/guitar.rb +2 -0
- data/test/models/hotel.rb +5 -3
- data/test/models/human.rb +39 -0
- data/test/models/image.rb +3 -1
- data/test/models/interest.rb +14 -3
- data/test/models/invoice.rb +4 -2
- data/test/models/item.rb +3 -1
- data/test/models/job.rb +5 -3
- data/test/models/joke.rb +4 -2
- data/test/models/keyboard.rb +3 -1
- data/test/models/legacy_thing.rb +2 -0
- data/test/models/lesson.rb +2 -0
- data/test/models/line_item.rb +3 -1
- data/test/models/liquid.rb +2 -0
- data/test/models/matey.rb +3 -1
- data/test/models/measurement.rb +4 -0
- data/test/models/member.rb +23 -20
- data/test/models/member_detail.rb +3 -0
- data/test/models/member_type.rb +2 -0
- data/test/models/membership.rb +4 -1
- data/test/models/mentor.rb +3 -1
- data/test/models/message.rb +5 -0
- data/test/models/minimalistic.rb +2 -0
- data/test/models/minivan.rb +3 -2
- data/test/models/mixed_case_monkey.rb +3 -1
- data/test/models/molecule.rb +2 -0
- data/test/models/mouse.rb +6 -0
- data/test/models/movie.rb +2 -0
- data/test/models/node.rb +4 -2
- data/test/models/non_primary_key.rb +2 -0
- data/test/models/notification.rb +2 -0
- data/test/models/numeric_data.rb +12 -0
- data/test/models/order.rb +4 -2
- data/test/models/organization.rb +9 -7
- data/test/models/other_dog.rb +3 -1
- data/test/models/owner.rb +6 -4
- data/test/models/parrot.rb +12 -4
- data/test/models/person.rb +59 -54
- data/test/models/personal_legacy_thing.rb +3 -1
- data/test/models/pet.rb +4 -2
- data/test/models/pet_treasure.rb +2 -0
- data/test/models/pirate.rb +67 -43
- data/test/models/possession.rb +3 -1
- data/test/models/post.rb +184 -86
- data/test/models/price_estimate.rb +11 -1
- data/test/models/professor.rb +3 -1
- data/test/models/project.rb +14 -12
- data/test/models/publisher/article.rb +2 -0
- data/test/models/publisher/magazine.rb +2 -0
- data/test/models/publisher.rb +2 -0
- data/test/models/randomly_named_c1.rb +2 -0
- data/test/models/rating.rb +5 -1
- data/test/models/reader.rb +7 -5
- data/test/models/recipe.rb +2 -0
- data/test/models/record.rb +2 -0
- data/test/models/reference.rb +6 -3
- data/test/models/reply.rb +39 -21
- data/test/models/room.rb +6 -0
- data/test/models/section.rb +6 -0
- data/test/models/seminar.rb +6 -0
- data/test/models/session.rb +6 -0
- data/test/models/ship.rb +12 -9
- data/test/models/ship_part.rb +5 -3
- data/test/models/shop.rb +4 -2
- data/test/models/shop_account.rb +2 -0
- data/test/models/speedometer.rb +2 -0
- data/test/models/sponsor.rb +8 -5
- data/test/models/squeak.rb +6 -0
- data/test/models/strict_zine.rb +7 -0
- data/test/models/string_key_object.rb +2 -0
- data/test/models/student.rb +2 -0
- data/test/models/subscriber.rb +4 -2
- data/test/models/subscription.rb +5 -1
- data/test/models/tag.rb +6 -3
- data/test/models/tagging.rb +13 -6
- data/test/models/task.rb +2 -0
- data/test/models/topic.rb +54 -19
- data/test/models/toy.rb +4 -0
- data/test/models/traffic_light.rb +2 -0
- data/test/models/treasure.rb +5 -3
- data/test/models/treaty.rb +2 -4
- data/test/models/tree.rb +2 -0
- data/test/models/tuning_peg.rb +2 -0
- data/test/models/tyre.rb +2 -0
- data/test/models/user.rb +12 -4
- data/test/models/uuid_child.rb +2 -0
- data/test/models/uuid_item.rb +2 -0
- data/test/models/uuid_parent.rb +2 -0
- data/test/models/vegetables.rb +12 -3
- data/test/models/vertex.rb +6 -4
- data/test/models/warehouse_thing.rb +2 -0
- data/test/models/wheel.rb +3 -1
- data/test/models/without_table.rb +3 -1
- data/test/models/zine.rb +3 -1
- data/test/schema/mysql2_specific_schema.rb +49 -35
- data/test/schema/oracle_specific_schema.rb +13 -15
- data/test/schema/postgresql_specific_schema.rb +51 -40
- data/test/schema/schema.rb +334 -154
- data/test/schema/sqlite_specific_schema.rb +9 -16
- data/test/support/config.rb +26 -26
- data/test/support/connection.rb +14 -8
- data/test/support/connection_helper.rb +3 -1
- data/test/support/ddl_helper.rb +2 -0
- data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/legacy_6_0_record_mysql.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/legacy_relation.dump +0 -0
- data/test/support/schema_dumping_helper.rb +2 -0
- data/test/support/stubs/strong_parameters.rb +40 -0
- data/test/support/yaml_compatibility_fixtures/rails_v1_mysql.yml +206 -0
- data/test/support/yaml_compatibility_fixtures/rails_v2.yml +55 -0
- metadata +196 -11
@@ -1,10 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
3
|
+
require "cases/helper"
|
4
|
+
require "models/company"
|
5
|
+
require "models/developer"
|
6
|
+
require "models/computer"
|
7
|
+
require "models/owner"
|
8
|
+
require "models/pet"
|
8
9
|
|
9
10
|
class IntegrationTest < ActiveRecord::TestCase
|
10
11
|
fixtures :companies, :developers, :owners, :pets
|
@@ -15,59 +16,85 @@ class IntegrationTest < ActiveRecord::TestCase
|
|
15
16
|
|
16
17
|
def test_to_param_returns_nil_if_not_persisted
|
17
18
|
client = Client.new
|
18
|
-
|
19
|
+
assert_nil client.to_param
|
19
20
|
end
|
20
21
|
|
21
22
|
def test_to_param_returns_id_if_not_persisted_but_id_is_set
|
22
23
|
client = Client.new
|
23
24
|
client.id = 1
|
24
|
-
assert_equal
|
25
|
+
assert_equal "1", client.to_param
|
25
26
|
end
|
26
27
|
|
27
28
|
def test_to_param_class_method
|
28
29
|
firm = Firm.find(4)
|
29
|
-
assert_equal
|
30
|
+
assert_equal "4-flamboyant-software", firm.to_param
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_to_param_class_method_truncates_words_properly
|
34
|
+
firm = Firm.find(4)
|
35
|
+
firm.name << ", Inc."
|
36
|
+
assert_equal "4-flamboyant-software", firm.to_param
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_to_param_class_method_truncates_after_parameterize
|
40
|
+
firm = Firm.find(4)
|
41
|
+
firm.name = "Huey, Dewey, & Louie LLC"
|
42
|
+
# 123456789T123456789v
|
43
|
+
assert_equal "4-huey-dewey-louie-llc", firm.to_param
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_to_param_class_method_truncates_after_parameterize_with_hyphens
|
47
|
+
firm = Firm.find(4)
|
48
|
+
firm.name = "Door-to-Door Wash-n-Fold Service"
|
49
|
+
# 123456789T123456789v
|
50
|
+
assert_equal "4-door-to-door-wash-n", firm.to_param
|
30
51
|
end
|
31
52
|
|
32
53
|
def test_to_param_class_method_truncates
|
33
54
|
firm = Firm.find(4)
|
34
|
-
firm.name =
|
35
|
-
assert_equal
|
55
|
+
firm.name = "a " * 100
|
56
|
+
assert_equal "4-a-a-a-a-a-a-a-a-a-a", firm.to_param
|
36
57
|
end
|
37
58
|
|
38
59
|
def test_to_param_class_method_truncates_edge_case
|
39
60
|
firm = Firm.find(4)
|
40
|
-
firm.name =
|
41
|
-
assert_equal
|
61
|
+
firm.name = "David HeinemeierHansson"
|
62
|
+
assert_equal "4-david", firm.to_param
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_to_param_class_method_truncates_case_shown_in_doc
|
66
|
+
firm = Firm.find(4)
|
67
|
+
firm.name = "David Heinemeier Hansson"
|
68
|
+
assert_equal "4-david-heinemeier", firm.to_param
|
42
69
|
end
|
43
70
|
|
44
71
|
def test_to_param_class_method_squishes
|
45
72
|
firm = Firm.find(4)
|
46
73
|
firm.name = "ab \n" * 100
|
47
|
-
assert_equal
|
74
|
+
assert_equal "4-ab-ab-ab-ab-ab-ab-ab", firm.to_param
|
48
75
|
end
|
49
76
|
|
50
77
|
def test_to_param_class_method_multibyte_character
|
51
78
|
firm = Firm.find(4)
|
52
79
|
firm.name = "戦場ヶ原 ひたぎ"
|
53
|
-
assert_equal
|
80
|
+
assert_equal "4", firm.to_param
|
54
81
|
end
|
55
82
|
|
56
83
|
def test_to_param_class_method_uses_default_if_blank
|
57
84
|
firm = Firm.find(4)
|
58
85
|
firm.name = nil
|
59
|
-
assert_equal
|
60
|
-
firm.name =
|
61
|
-
assert_equal
|
86
|
+
assert_equal "4", firm.to_param
|
87
|
+
firm.name = " "
|
88
|
+
assert_equal "4", firm.to_param
|
62
89
|
end
|
63
90
|
|
64
91
|
def test_to_param_class_method_uses_default_if_not_persisted
|
65
|
-
firm = Firm.new(name:
|
66
|
-
|
92
|
+
firm = Firm.new(name: "Fancy Shirts")
|
93
|
+
assert_nil firm.to_param
|
67
94
|
end
|
68
95
|
|
69
96
|
def test_to_param_with_no_arguments
|
70
|
-
assert_equal
|
97
|
+
assert_equal "Firm", Firm.to_param
|
71
98
|
end
|
72
99
|
|
73
100
|
def test_cache_key_for_existing_record_is_not_timezone_dependent
|
@@ -127,29 +154,90 @@ class IntegrationTest < ActiveRecord::TestCase
|
|
127
154
|
end
|
128
155
|
|
129
156
|
def test_cache_key_format_is_precise_enough
|
130
|
-
skip("Subsecond precision is not supported") unless
|
157
|
+
skip("Subsecond precision is not supported") unless supports_datetime_with_precision?
|
131
158
|
dev = Developer.first
|
132
159
|
key = dev.cache_key
|
133
|
-
dev.
|
160
|
+
travel_to dev.updated_at + 0.000001 do
|
161
|
+
dev.touch
|
162
|
+
end
|
134
163
|
assert_not_equal key, dev.cache_key
|
135
164
|
end
|
136
165
|
|
137
166
|
def test_cache_key_format_is_not_too_precise
|
138
|
-
skip("Subsecond precision is not supported") unless subsecond_precision_supported?
|
139
167
|
dev = Developer.first
|
140
168
|
dev.touch
|
141
169
|
key = dev.cache_key
|
142
170
|
assert_equal key, dev.reload.cache_key
|
143
171
|
end
|
144
172
|
|
145
|
-
def
|
146
|
-
|
147
|
-
|
173
|
+
def test_cache_version_format_is_precise_enough
|
174
|
+
skip("Subsecond precision is not supported") unless supports_datetime_with_precision?
|
175
|
+
with_cache_versioning do
|
176
|
+
dev = Developer.first
|
177
|
+
version = dev.cache_version.to_param
|
178
|
+
travel_to Developer.first.updated_at + 0.000001 do
|
179
|
+
dev.touch
|
180
|
+
end
|
181
|
+
assert_not_equal version, dev.cache_version.to_param
|
182
|
+
end
|
148
183
|
end
|
149
184
|
|
150
|
-
def
|
151
|
-
|
152
|
-
|
153
|
-
|
185
|
+
def test_cache_version_format_is_not_too_precise
|
186
|
+
with_cache_versioning do
|
187
|
+
dev = Developer.first
|
188
|
+
dev.touch
|
189
|
+
key = dev.cache_version.to_param
|
190
|
+
assert_equal key, dev.reload.cache_version.to_param
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
def test_cache_key_is_stable_with_versioning_on
|
195
|
+
with_cache_versioning do
|
196
|
+
developer = Developer.first
|
197
|
+
first_key = developer.cache_key
|
198
|
+
|
199
|
+
developer.touch
|
200
|
+
second_key = developer.cache_key
|
201
|
+
|
202
|
+
assert_equal first_key, second_key
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
def test_cache_version_changes_with_versioning_on
|
207
|
+
with_cache_versioning do
|
208
|
+
developer = Developer.first
|
209
|
+
first_version = developer.cache_version
|
210
|
+
|
211
|
+
travel 10.seconds do
|
212
|
+
developer.touch
|
213
|
+
end
|
214
|
+
|
215
|
+
second_version = developer.cache_version
|
216
|
+
|
217
|
+
assert_not_equal first_version, second_version
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
def test_cache_key_retains_version_when_custom_timestamp_is_used
|
222
|
+
with_cache_versioning do
|
223
|
+
developer = Developer.first
|
224
|
+
first_key = developer.cache_key_with_version
|
225
|
+
|
226
|
+
travel 10.seconds do
|
227
|
+
developer.touch
|
228
|
+
end
|
229
|
+
|
230
|
+
second_key = developer.cache_key_with_version
|
231
|
+
|
232
|
+
assert_not_equal first_key, second_key
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
def with_cache_versioning(value = true)
|
237
|
+
@old_cache_versioning = ActiveRecord::Base.cache_versioning
|
238
|
+
ActiveRecord::Base.cache_versioning = value
|
239
|
+
yield
|
240
|
+
ensure
|
241
|
+
ActiveRecord::Base.cache_versioning = @old_cache_versioning
|
154
242
|
end
|
155
243
|
end
|
@@ -1,24 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "cases/helper"
|
2
4
|
|
3
|
-
if current_adapter?(:Mysql2Adapter)
|
4
|
-
class TestAdapterWithInvalidConnection < ActiveRecord::TestCase
|
5
|
-
|
5
|
+
if current_adapter?(:Mysql2Adapter) or current_adapter?(:IBM_DBAdapter)
|
6
|
+
class TestAdapterWithInvalidConnection < ActiveRecord::TestCase
|
7
|
+
self.use_transactional_tests = false
|
6
8
|
|
7
|
-
|
8
|
-
|
9
|
+
class Bird < ActiveRecord::Base
|
10
|
+
end
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
def setup
|
13
|
+
# Can't just use current adapter; sqlite3 will create a database
|
14
|
+
# file on the fly.
|
15
|
+
Bird.establish_connection adapter: "ibm_db", database: "i_do_not_exist"
|
16
|
+
end
|
15
17
|
|
16
|
-
|
17
|
-
|
18
|
-
|
18
|
+
teardown do
|
19
|
+
Bird.remove_connection
|
20
|
+
end
|
19
21
|
|
20
|
-
|
21
|
-
|
22
|
+
test "inspect on Model class does not raise" do
|
23
|
+
assert_equal "#{Bird.name} (call '#{Bird.name}.connection' to establish a connection)", Bird.inspect
|
24
|
+
end
|
22
25
|
end
|
23
26
|
end
|
24
|
-
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "cases/helper"
|
2
4
|
|
3
5
|
class Horse < ActiveRecord::Base
|
@@ -6,7 +8,7 @@ end
|
|
6
8
|
module ActiveRecord
|
7
9
|
class InvertibleMigrationTest < ActiveRecord::TestCase
|
8
10
|
class SilentMigration < ActiveRecord::Migration::Current
|
9
|
-
def write(text =
|
11
|
+
def write(text = "")
|
10
12
|
# sssshhhhh!!
|
11
13
|
end
|
12
14
|
end
|
@@ -16,6 +18,24 @@ module ActiveRecord
|
|
16
18
|
create_table("horses") do |t|
|
17
19
|
t.column :content, :text
|
18
20
|
t.column :remind_at, :datetime
|
21
|
+
t.column :place_id, :integer
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class InvertibleChangeTableMigration < SilentMigration
|
27
|
+
def change
|
28
|
+
change_table("horses") do |t|
|
29
|
+
t.column :name, :string
|
30
|
+
t.remove :remind_at, type: :datetime
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class InvertibleTransactionMigration < InvertibleMigration
|
36
|
+
def change
|
37
|
+
transaction do
|
38
|
+
super
|
19
39
|
end
|
20
40
|
end
|
21
41
|
end
|
@@ -67,6 +87,7 @@ module ActiveRecord
|
|
67
87
|
t.column :name, :string
|
68
88
|
t.column :color, :string
|
69
89
|
t.index [:name, :color]
|
90
|
+
t.index [:color]
|
70
91
|
end
|
71
92
|
end
|
72
93
|
end
|
@@ -75,6 +96,7 @@ module ActiveRecord
|
|
75
96
|
def change
|
76
97
|
change_table("horses") do |t|
|
77
98
|
t.remove_index [:name, :color]
|
99
|
+
t.remove_index [:color], if_exists: true
|
78
100
|
end
|
79
101
|
end
|
80
102
|
end
|
@@ -93,6 +115,32 @@ module ActiveRecord
|
|
93
115
|
end
|
94
116
|
end
|
95
117
|
|
118
|
+
class ChangeColumnComment1 < SilentMigration
|
119
|
+
def change
|
120
|
+
create_table("horses") do |t|
|
121
|
+
t.column :name, :string, comment: "Sekitoba"
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
class ChangeColumnComment2 < SilentMigration
|
127
|
+
def change
|
128
|
+
change_column_comment :horses, :name, from: "Sekitoba", to: "Diomed"
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
class ChangeTableComment1 < SilentMigration
|
133
|
+
def change
|
134
|
+
create_table("horses", comment: "Sekitoba")
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
class ChangeTableComment2 < SilentMigration
|
139
|
+
def change
|
140
|
+
change_table_comment :horses, from: "Sekitoba", to: "Diomed"
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
96
144
|
class DisableExtension1 < SilentMigration
|
97
145
|
def change
|
98
146
|
enable_extension "hstore"
|
@@ -151,6 +199,12 @@ module ActiveRecord
|
|
151
199
|
end
|
152
200
|
end
|
153
201
|
|
202
|
+
class RevertNonNamedExpressionIndexMigration < SilentMigration
|
203
|
+
def change
|
204
|
+
add_index :horses, "remind_at, place_id"
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
154
208
|
class RevertCustomForeignKeyTable < SilentMigration
|
155
209
|
def change
|
156
210
|
change_table(:horses) do |t|
|
@@ -159,16 +213,23 @@ module ActiveRecord
|
|
159
213
|
end
|
160
214
|
end
|
161
215
|
|
216
|
+
class UpOnlyMigration < SilentMigration
|
217
|
+
def change
|
218
|
+
add_column :horses, :oldie, :integer, default: 0
|
219
|
+
up_only { execute "update horses set oldie = 1" }
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
self.use_transactional_tests = false
|
224
|
+
|
162
225
|
setup do
|
163
226
|
@verbose_was, ActiveRecord::Migration.verbose = ActiveRecord::Migration.verbose, false
|
164
227
|
end
|
165
228
|
|
166
229
|
teardown do
|
167
230
|
%w[horses new_horses].each do |table|
|
168
|
-
|
169
|
-
|
170
|
-
ActiveRecord::Base.connection.drop_table(table)
|
171
|
-
end
|
231
|
+
if ActiveRecord::Base.connection.table_exists?(table)
|
232
|
+
ActiveRecord::Base.connection.drop_table(table)
|
172
233
|
end
|
173
234
|
end
|
174
235
|
ActiveRecord::Migration.verbose = @verbose_was
|
@@ -199,14 +260,14 @@ module ActiveRecord
|
|
199
260
|
def test_migrate_up
|
200
261
|
migration = InvertibleMigration.new
|
201
262
|
migration.migrate(:up)
|
202
|
-
|
263
|
+
assert migration.connection.table_exists?("horses"), "horses should exist"
|
203
264
|
end
|
204
265
|
|
205
266
|
def test_migrate_down
|
206
267
|
migration = InvertibleMigration.new
|
207
268
|
migration.migrate :up
|
208
269
|
migration.migrate :down
|
209
|
-
|
270
|
+
assert_not migration.connection.table_exists?("horses")
|
210
271
|
end
|
211
272
|
|
212
273
|
def test_migrate_revert
|
@@ -214,36 +275,39 @@ module ActiveRecord
|
|
214
275
|
revert = InvertibleRevertMigration.new
|
215
276
|
migration.migrate :up
|
216
277
|
revert.migrate :up
|
217
|
-
|
278
|
+
assert_not migration.connection.table_exists?("horses")
|
218
279
|
revert.migrate :down
|
219
|
-
|
280
|
+
assert migration.connection.table_exists?("horses")
|
281
|
+
migration.migrate :down
|
282
|
+
assert_not migration.connection.table_exists?("horses")
|
283
|
+
end
|
284
|
+
|
285
|
+
def test_migrate_revert_change_table
|
286
|
+
InvertibleMigration.new.migrate :up
|
287
|
+
migration = InvertibleChangeTableMigration.new
|
288
|
+
migration.migrate :up
|
289
|
+
assert_not migration.connection.column_exists?(:horses, :remind_at)
|
220
290
|
migration.migrate :down
|
221
|
-
|
291
|
+
assert migration.connection.column_exists?(:horses, :remind_at)
|
222
292
|
end
|
223
293
|
|
224
294
|
def test_migrate_revert_by_part
|
225
295
|
InvertibleMigration.new.migrate :up
|
226
296
|
received = []
|
227
297
|
migration = InvertibleByPartsMigration.new
|
228
|
-
migration.test = ->(dir){
|
229
|
-
|
230
|
-
|
231
|
-
assert migration.connection.table_exists?("new_horses")
|
232
|
-
end
|
298
|
+
migration.test = ->(dir) {
|
299
|
+
assert migration.connection.table_exists?("horses")
|
300
|
+
assert migration.connection.table_exists?("new_horses")
|
233
301
|
received << dir
|
234
302
|
}
|
235
303
|
migration.migrate :up
|
236
304
|
assert_equal [:both, :up], received
|
237
|
-
|
238
|
-
|
239
|
-
assert migration.connection.table_exists?("new_horses")
|
240
|
-
end
|
305
|
+
assert_not migration.connection.table_exists?("horses")
|
306
|
+
assert migration.connection.table_exists?("new_horses")
|
241
307
|
migration.migrate :down
|
242
308
|
assert_equal [:both, :up, :both, :down], received
|
243
|
-
|
244
|
-
|
245
|
-
assert !migration.connection.table_exists?("new_horses")
|
246
|
-
end
|
309
|
+
assert migration.connection.table_exists?("horses")
|
310
|
+
assert_not migration.connection.table_exists?("new_horses")
|
247
311
|
end
|
248
312
|
|
249
313
|
def test_migrate_revert_whole_migration
|
@@ -252,25 +316,34 @@ module ActiveRecord
|
|
252
316
|
revert = RevertWholeMigration.new(klass)
|
253
317
|
migration.migrate :up
|
254
318
|
revert.migrate :up
|
255
|
-
|
319
|
+
assert_not migration.connection.table_exists?("horses")
|
256
320
|
revert.migrate :down
|
257
|
-
|
321
|
+
assert migration.connection.table_exists?("horses")
|
258
322
|
migration.migrate :down
|
259
|
-
|
323
|
+
assert_not migration.connection.table_exists?("horses")
|
260
324
|
end
|
261
325
|
end
|
262
326
|
|
263
327
|
def test_migrate_nested_revert_whole_migration
|
264
328
|
revert = NestedRevertWholeMigration.new(InvertibleRevertMigration)
|
265
329
|
revert.migrate :down
|
266
|
-
|
330
|
+
assert revert.connection.table_exists?("horses")
|
267
331
|
revert.migrate :up
|
268
|
-
|
332
|
+
assert_not revert.connection.table_exists?("horses")
|
333
|
+
end
|
334
|
+
|
335
|
+
def test_migrate_revert_transaction
|
336
|
+
migration = InvertibleTransactionMigration.new
|
337
|
+
migration.migrate :up
|
338
|
+
assert migration.connection.table_exists?("horses")
|
339
|
+
migration.migrate :down
|
340
|
+
assert_not migration.connection.table_exists?("horses")
|
269
341
|
end
|
270
342
|
|
271
343
|
def test_migrate_revert_change_column_default
|
272
344
|
migration1 = ChangeColumnDefault1.new
|
273
345
|
migration1.migrate(:up)
|
346
|
+
Horse.reset_column_information
|
274
347
|
assert_equal "Sekitoba", Horse.new.name
|
275
348
|
|
276
349
|
migration2 = ChangeColumnDefault2.new
|
@@ -283,29 +356,65 @@ module ActiveRecord
|
|
283
356
|
assert_equal "Sekitoba", Horse.new.name
|
284
357
|
end
|
285
358
|
|
359
|
+
if ActiveRecord::Base.connection.supports_comments?
|
360
|
+
def test_migrate_revert_change_column_comment
|
361
|
+
migration1 = ChangeColumnComment1.new
|
362
|
+
migration1.migrate(:up)
|
363
|
+
Horse.reset_column_information
|
364
|
+
assert_equal "Sekitoba", Horse.columns_hash["name"].comment
|
365
|
+
|
366
|
+
migration2 = ChangeColumnComment2.new
|
367
|
+
migration2.migrate(:up)
|
368
|
+
Horse.reset_column_information
|
369
|
+
assert_equal "Diomed", Horse.columns_hash["name"].comment
|
370
|
+
|
371
|
+
migration2.migrate(:down)
|
372
|
+
Horse.reset_column_information
|
373
|
+
assert_equal "Sekitoba", Horse.columns_hash["name"].comment
|
374
|
+
end
|
375
|
+
|
376
|
+
def test_migrate_revert_change_table_comment
|
377
|
+
connection = ActiveRecord::Base.connection
|
378
|
+
migration1 = ChangeTableComment1.new
|
379
|
+
migration1.migrate(:up)
|
380
|
+
assert_equal "Sekitoba", connection.table_comment("horses")
|
381
|
+
|
382
|
+
migration2 = ChangeTableComment2.new
|
383
|
+
migration2.migrate(:up)
|
384
|
+
assert_equal "Diomed", connection.table_comment("horses")
|
385
|
+
|
386
|
+
migration2.migrate(:down)
|
387
|
+
assert_equal "Sekitoba", connection.table_comment("horses")
|
388
|
+
end
|
389
|
+
end
|
390
|
+
|
286
391
|
if current_adapter?(:PostgreSQLAdapter)
|
287
392
|
def test_migrate_enable_and_disable_extension
|
288
393
|
migration1 = InvertibleMigration.new
|
289
394
|
migration2 = DisableExtension1.new
|
290
395
|
migration3 = DisableExtension2.new
|
291
396
|
|
397
|
+
assert_equal true, Horse.connection.extension_available?("hstore")
|
398
|
+
|
292
399
|
migration1.migrate(:up)
|
293
400
|
migration2.migrate(:up)
|
294
|
-
assert_equal true, Horse.connection.extension_enabled?(
|
401
|
+
assert_equal true, Horse.connection.extension_enabled?("hstore")
|
295
402
|
|
296
403
|
migration3.migrate(:up)
|
297
|
-
assert_equal false, Horse.connection.extension_enabled?(
|
404
|
+
assert_equal false, Horse.connection.extension_enabled?("hstore")
|
298
405
|
|
299
406
|
migration3.migrate(:down)
|
300
|
-
assert_equal true, Horse.connection.extension_enabled?(
|
407
|
+
assert_equal true, Horse.connection.extension_enabled?("hstore")
|
301
408
|
|
302
409
|
migration2.migrate(:down)
|
303
|
-
assert_equal false, Horse.connection.extension_enabled?(
|
410
|
+
assert_equal false, Horse.connection.extension_enabled?("hstore")
|
411
|
+
ensure
|
412
|
+
enable_extension!("hstore", ActiveRecord::Base.connection)
|
304
413
|
end
|
305
414
|
end
|
306
415
|
|
307
416
|
def test_revert_order
|
308
|
-
block = Proc.new{|t| t.string :name }
|
417
|
+
block = Proc.new { |t| t.string :name }
|
309
418
|
recorder = ActiveRecord::Migration::CommandRecorder.new(ActiveRecord::Base.connection)
|
310
419
|
recorder.instance_eval do
|
311
420
|
create_table("apples", &block)
|
@@ -330,35 +439,35 @@ module ActiveRecord
|
|
330
439
|
|
331
440
|
def test_legacy_up
|
332
441
|
LegacyMigration.migrate :up
|
333
|
-
|
442
|
+
assert ActiveRecord::Base.connection.table_exists?("horses"), "horses should exist"
|
334
443
|
end
|
335
444
|
|
336
445
|
def test_legacy_down
|
337
446
|
LegacyMigration.migrate :up
|
338
447
|
LegacyMigration.migrate :down
|
339
|
-
|
448
|
+
assert_not ActiveRecord::Base.connection.table_exists?("horses"), "horses should not exist"
|
340
449
|
end
|
341
450
|
|
342
451
|
def test_up
|
343
452
|
LegacyMigration.up
|
344
|
-
|
453
|
+
assert ActiveRecord::Base.connection.table_exists?("horses"), "horses should exist"
|
345
454
|
end
|
346
455
|
|
347
456
|
def test_down
|
348
457
|
LegacyMigration.up
|
349
458
|
LegacyMigration.down
|
350
|
-
|
459
|
+
assert_not ActiveRecord::Base.connection.table_exists?("horses"), "horses should not exist"
|
351
460
|
end
|
352
461
|
|
353
462
|
def test_migrate_down_with_table_name_prefix
|
354
|
-
ActiveRecord::Base.table_name_prefix =
|
355
|
-
ActiveRecord::Base.table_name_suffix =
|
463
|
+
ActiveRecord::Base.table_name_prefix = "p_"
|
464
|
+
ActiveRecord::Base.table_name_suffix = "_s"
|
356
465
|
migration = InvertibleMigration.new
|
357
466
|
migration.migrate(:up)
|
358
467
|
assert_nothing_raised { migration.migrate(:down) }
|
359
|
-
|
468
|
+
assert_not ActiveRecord::Base.connection.table_exists?("p_horses_s"), "p_horses_s should not exist"
|
360
469
|
ensure
|
361
|
-
ActiveRecord::Base.table_name_prefix = ActiveRecord::Base.table_name_suffix =
|
470
|
+
ActiveRecord::Base.table_name_prefix = ActiveRecord::Base.table_name_suffix = ""
|
362
471
|
end
|
363
472
|
|
364
473
|
def test_migrations_can_handle_foreign_keys_to_specific_tables
|
@@ -369,7 +478,7 @@ module ActiveRecord
|
|
369
478
|
end
|
370
479
|
|
371
480
|
# MySQL 5.7 and Oracle do not allow to create duplicate indexes on the same columns
|
372
|
-
unless current_adapter?(:Mysql2Adapter, :OracleAdapter)
|
481
|
+
unless current_adapter?(:Mysql2Adapter, :OracleAdapter, :IBM_DBAdapter)
|
373
482
|
def test_migrate_revert_add_index_with_name
|
374
483
|
RevertNamedIndexMigration1.new.migrate(:up)
|
375
484
|
RevertNamedIndexMigration2.new.migrate(:up)
|
@@ -378,10 +487,41 @@ module ActiveRecord
|
|
378
487
|
connection = ActiveRecord::Base.connection
|
379
488
|
assert connection.index_exists?(:horses, :content),
|
380
489
|
"index on content should exist"
|
381
|
-
|
490
|
+
assert_not connection.index_exists?(:horses, :content, name: "horses_index_named"),
|
382
491
|
"horses_index_named index should not exist"
|
383
492
|
end
|
384
493
|
end
|
385
494
|
|
495
|
+
def test_migrate_revert_add_index_without_name_on_expression
|
496
|
+
InvertibleMigration.new.migrate(:up)
|
497
|
+
RevertNonNamedExpressionIndexMigration.new.migrate(:up)
|
498
|
+
|
499
|
+
connection = ActiveRecord::Base.connection
|
500
|
+
assert connection.index_exists?(:horses, [:remind_at, :place_id]),
|
501
|
+
"index on remind_at and place_id should exist"
|
502
|
+
|
503
|
+
RevertNonNamedExpressionIndexMigration.new.migrate(:down)
|
504
|
+
|
505
|
+
assert_not connection.index_exists?(:horses, [:remind_at, :place_id]),
|
506
|
+
"index on remind_at and place_id should not exist"
|
507
|
+
end
|
508
|
+
|
509
|
+
def test_up_only
|
510
|
+
InvertibleMigration.new.migrate(:up)
|
511
|
+
horse1 = Horse.create
|
512
|
+
# populates existing horses with oldie = 1 but new ones have default 0
|
513
|
+
UpOnlyMigration.new.migrate(:up)
|
514
|
+
Horse.reset_column_information
|
515
|
+
horse1.reload
|
516
|
+
horse2 = Horse.create
|
517
|
+
|
518
|
+
assert 1, horse1.oldie # created before migration
|
519
|
+
assert 0, horse2.oldie # created after migration
|
520
|
+
|
521
|
+
UpOnlyMigration.new.migrate(:down) # should be no error
|
522
|
+
connection = ActiveRecord::Base.connection
|
523
|
+
assert_not connection.column_exists?(:horses, :oldie)
|
524
|
+
Horse.reset_column_information
|
525
|
+
end
|
386
526
|
end
|
387
527
|
end
|