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
|
@@ -17,6 +17,7 @@ end
|
|
|
17
17
|
|
|
18
18
|
class SchemaTest < ActiveRecord::PostgreSQLTestCase
|
|
19
19
|
include PGSchemaHelper
|
|
20
|
+
include SchemaDumpingHelper
|
|
20
21
|
self.use_transactional_tests = false
|
|
21
22
|
|
|
22
23
|
SCHEMA_NAME = "test_schema"
|
|
@@ -80,7 +81,7 @@ class SchemaTest < ActiveRecord::PostgreSQLTestCase
|
|
|
80
81
|
end
|
|
81
82
|
|
|
82
83
|
def setup
|
|
83
|
-
@connection = ActiveRecord::Base.
|
|
84
|
+
@connection = ActiveRecord::Base.lease_connection
|
|
84
85
|
@connection.execute "CREATE SCHEMA #{SCHEMA_NAME} CREATE TABLE #{TABLE_NAME} (#{COLUMNS.join(',')})"
|
|
85
86
|
@connection.execute "CREATE TABLE #{SCHEMA_NAME}.\"#{TABLE_NAME}.table\" (#{COLUMNS.join(',')})"
|
|
86
87
|
@connection.execute "CREATE TABLE #{SCHEMA_NAME}.\"#{CAPITALIZED_TABLE_NAME}\" (#{COLUMNS.join(',')})"
|
|
@@ -130,6 +131,32 @@ class SchemaTest < ActiveRecord::PostgreSQLTestCase
|
|
|
130
131
|
@connection.drop_schema "test_schema3"
|
|
131
132
|
end
|
|
132
133
|
|
|
134
|
+
def test_force_create_schema
|
|
135
|
+
@connection.create_schema "test_schema3"
|
|
136
|
+
assert_queries_match(/DROP SCHEMA IF EXISTS "test_schema3"/) do
|
|
137
|
+
@connection.create_schema "test_schema3", force: true
|
|
138
|
+
end
|
|
139
|
+
assert @connection.schema_names.include?("test_schema3")
|
|
140
|
+
ensure
|
|
141
|
+
@connection.drop_schema "test_schema3"
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def test_create_schema_if_not_exists
|
|
145
|
+
@connection.create_schema "test_schema3"
|
|
146
|
+
assert_queries_match('CREATE SCHEMA IF NOT EXISTS "test_schema3"') do
|
|
147
|
+
@connection.create_schema "test_schema3", if_not_exists: true
|
|
148
|
+
end
|
|
149
|
+
assert @connection.schema_names.include?("test_schema3")
|
|
150
|
+
ensure
|
|
151
|
+
@connection.drop_schema "test_schema3"
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def test_create_schema_raises_if_both_force_and_if_not_exists_provided
|
|
155
|
+
assert_raises(ArgumentError, match: "Options `:force` and `:if_not_exists` cannot be used simultaneously.") do
|
|
156
|
+
@connection.create_schema "test_schema3", force: true, if_not_exists: true
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
|
|
133
160
|
def test_drop_schema
|
|
134
161
|
begin
|
|
135
162
|
@connection.create_schema "test_schema3"
|
|
@@ -147,9 +174,9 @@ class SchemaTest < ActiveRecord::PostgreSQLTestCase
|
|
|
147
174
|
end
|
|
148
175
|
|
|
149
176
|
def test_habtm_table_name_with_schema
|
|
150
|
-
ActiveRecord::Base.
|
|
151
|
-
ActiveRecord::Base.
|
|
152
|
-
ActiveRecord::Base.
|
|
177
|
+
ActiveRecord::Base.lease_connection.drop_schema "music", if_exists: true
|
|
178
|
+
ActiveRecord::Base.lease_connection.create_schema "music"
|
|
179
|
+
ActiveRecord::Base.lease_connection.execute <<~SQL
|
|
153
180
|
CREATE TABLE music.albums (id serial primary key, deleted boolean default false);
|
|
154
181
|
CREATE TABLE music.songs (id serial primary key);
|
|
155
182
|
CREATE TABLE music.albums_songs (album_id integer, song_id integer);
|
|
@@ -158,8 +185,10 @@ class SchemaTest < ActiveRecord::PostgreSQLTestCase
|
|
|
158
185
|
song = Song.create
|
|
159
186
|
album = song.albums.create
|
|
160
187
|
assert_equal song, Song.includes(:albums).where("albums.id": album.id).first
|
|
188
|
+
assert_equal [album.id], Song.joins(:albums).pluck("albums.id")
|
|
189
|
+
assert_equal [album.id], Song.joins(:albums).pluck("music.albums.id")
|
|
161
190
|
ensure
|
|
162
|
-
ActiveRecord::Base.
|
|
191
|
+
ActiveRecord::Base.lease_connection.drop_schema "music", if_exists: true
|
|
163
192
|
end
|
|
164
193
|
|
|
165
194
|
def test_drop_schema_with_nonexisting_schema
|
|
@@ -178,13 +207,16 @@ class SchemaTest < ActiveRecord::PostgreSQLTestCase
|
|
|
178
207
|
end
|
|
179
208
|
end
|
|
180
209
|
|
|
181
|
-
if ActiveRecord::Base.
|
|
210
|
+
if ActiveRecord::Base.lease_connection.prepared_statements
|
|
182
211
|
def test_schema_change_with_prepared_stmt
|
|
183
212
|
altered = false
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
213
|
+
assert_nothing_raised do
|
|
214
|
+
@connection.exec_query "select * from developers where id = $1", "sql", [bind_param(1)]
|
|
215
|
+
@connection.exec_query "alter table developers add column zomg int", "sql", []
|
|
216
|
+
altered = true
|
|
217
|
+
@connection.exec_query "select * from developers where id = $1", "sql", [bind_param(1)]
|
|
218
|
+
end
|
|
219
|
+
pass
|
|
188
220
|
ensure
|
|
189
221
|
# We are not using DROP COLUMN IF EXISTS because that syntax is only
|
|
190
222
|
# supported by pg 9.X
|
|
@@ -260,6 +292,16 @@ class SchemaTest < ActiveRecord::PostgreSQLTestCase
|
|
|
260
292
|
assert_equal '"schema.name"."table.name"', @connection.quote_table_name('"schema.name"."table.name"')
|
|
261
293
|
end
|
|
262
294
|
|
|
295
|
+
def test_where_with_qualified_schema_name
|
|
296
|
+
Thing1.create(id: 1, name: "thing1", email: "thing1@localhost", moment: Time.now)
|
|
297
|
+
assert_equal ["thing1"], Thing1.where("test_schema.things.name": "thing1").map(&:name)
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
def test_pluck_with_qualified_schema_name
|
|
301
|
+
Thing1.create(id: 1, name: "thing1", email: "thing1@localhost", moment: Time.now)
|
|
302
|
+
assert_equal ["thing1"], Thing1.pluck(:"test_schema.things.name")
|
|
303
|
+
end
|
|
304
|
+
|
|
263
305
|
def test_classes_with_qualified_schema_name
|
|
264
306
|
assert_equal 0, Thing1.count
|
|
265
307
|
assert_equal 0, Thing2.count
|
|
@@ -321,6 +363,8 @@ class SchemaTest < ActiveRecord::PostgreSQLTestCase
|
|
|
321
363
|
assert @connection.index_name_exists?(PARTITIONED_TABLE, PARTITIONED_TABLE_INDEX)
|
|
322
364
|
end
|
|
323
365
|
end
|
|
366
|
+
|
|
367
|
+
assert @connection.index_name_exists?("#{SCHEMA_NAME}.#{TABLE_NAME}", INDEX_A_NAME)
|
|
324
368
|
end
|
|
325
369
|
|
|
326
370
|
def test_dump_indexes_for_schema_one
|
|
@@ -475,6 +519,22 @@ class SchemaTest < ActiveRecord::PostgreSQLTestCase
|
|
|
475
519
|
@connection.reset_pk_sequence! table_name
|
|
476
520
|
end
|
|
477
521
|
|
|
522
|
+
def test_rename_index
|
|
523
|
+
old_name = INDEX_A_NAME
|
|
524
|
+
new_name = "#{old_name}_new"
|
|
525
|
+
@connection.rename_index("#{SCHEMA_NAME}.#{TABLE_NAME}", old_name, new_name)
|
|
526
|
+
assert_not @connection.index_name_exists?("#{SCHEMA_NAME}.#{TABLE_NAME}", old_name)
|
|
527
|
+
assert @connection.index_name_exists?("#{SCHEMA_NAME}.#{TABLE_NAME}", new_name)
|
|
528
|
+
end
|
|
529
|
+
|
|
530
|
+
def test_dumping_schemas
|
|
531
|
+
output = dump_all_table_schema(/./)
|
|
532
|
+
|
|
533
|
+
assert_no_match %r{create_schema "public"}, output
|
|
534
|
+
assert_match %r{create_schema "test_schema"}, output
|
|
535
|
+
assert_match %r{create_schema "test_schema2"}, output
|
|
536
|
+
end
|
|
537
|
+
|
|
478
538
|
private
|
|
479
539
|
def columns(table_name)
|
|
480
540
|
@connection.send(:column_definitions, table_name).map do |name, type, default|
|
|
@@ -528,24 +588,48 @@ class SchemaForeignKeyTest < ActiveRecord::PostgreSQLTestCase
|
|
|
528
588
|
include SchemaDumpingHelper
|
|
529
589
|
|
|
530
590
|
setup do
|
|
531
|
-
@connection = ActiveRecord::Base.
|
|
591
|
+
@connection = ActiveRecord::Base.lease_connection
|
|
592
|
+
@connection.create_schema("my_schema")
|
|
593
|
+
end
|
|
594
|
+
|
|
595
|
+
teardown do
|
|
596
|
+
@connection.drop_schema("my_schema", if_exists: true)
|
|
532
597
|
end
|
|
533
598
|
|
|
534
599
|
def test_dump_foreign_key_targeting_different_schema
|
|
535
|
-
@connection.create_schema "my_schema"
|
|
536
600
|
@connection.create_table "my_schema.trains" do |t|
|
|
537
601
|
t.string :name
|
|
538
602
|
end
|
|
539
603
|
@connection.create_table "wagons" do |t|
|
|
540
604
|
t.integer :train_id
|
|
541
605
|
end
|
|
542
|
-
@connection.add_foreign_key "wagons", "my_schema.trains"
|
|
606
|
+
@connection.add_foreign_key "wagons", "my_schema.trains"
|
|
543
607
|
output = dump_table_schema "wagons"
|
|
544
|
-
assert_match %r{\s+add_foreign_key "wagons", "my_schema\.trains"
|
|
608
|
+
assert_match %r{\s+add_foreign_key "wagons", "my_schema\.trains"$}, output
|
|
545
609
|
ensure
|
|
546
610
|
@connection.drop_table "wagons", if_exists: true
|
|
547
611
|
@connection.drop_table "my_schema.trains", if_exists: true
|
|
548
|
-
|
|
612
|
+
end
|
|
613
|
+
|
|
614
|
+
def test_create_foreign_key_same_schema
|
|
615
|
+
@connection.create_table "my_schema.trains"
|
|
616
|
+
@connection.create_table "my_schema.wagons" do |t|
|
|
617
|
+
t.integer :train_id
|
|
618
|
+
end
|
|
619
|
+
@connection.add_foreign_key "my_schema.wagons", "my_schema.trains"
|
|
620
|
+
assert @connection.foreign_key_exists?("my_schema.wagons", "my_schema.trains")
|
|
621
|
+
end
|
|
622
|
+
|
|
623
|
+
def test_create_foreign_key_different_schemas
|
|
624
|
+
@connection.create_schema "my_other_schema"
|
|
625
|
+
@connection.create_table "my_schema.trains"
|
|
626
|
+
@connection.create_table "my_other_schema.wagons" do |t|
|
|
627
|
+
t.integer :train_id
|
|
628
|
+
end
|
|
629
|
+
@connection.add_foreign_key "my_other_schema.wagons", "my_schema.trains"
|
|
630
|
+
assert @connection.foreign_key_exists?("my_other_schema.wagons", "my_schema.trains")
|
|
631
|
+
ensure
|
|
632
|
+
@connection.drop_schema "my_other_schema", if_exists: true
|
|
549
633
|
end
|
|
550
634
|
end
|
|
551
635
|
|
|
@@ -553,7 +637,7 @@ class SchemaIndexOpclassTest < ActiveRecord::PostgreSQLTestCase
|
|
|
553
637
|
include SchemaDumpingHelper
|
|
554
638
|
|
|
555
639
|
setup do
|
|
556
|
-
@connection = ActiveRecord::Base.
|
|
640
|
+
@connection = ActiveRecord::Base.lease_connection
|
|
557
641
|
@connection.create_table "trains" do |t|
|
|
558
642
|
t.string :name
|
|
559
643
|
t.string :position
|
|
@@ -597,7 +681,7 @@ class SchemaIndexNullsOrderTest < ActiveRecord::PostgreSQLTestCase
|
|
|
597
681
|
include SchemaDumpingHelper
|
|
598
682
|
|
|
599
683
|
setup do
|
|
600
|
-
@connection = ActiveRecord::Base.
|
|
684
|
+
@connection = ActiveRecord::Base.lease_connection
|
|
601
685
|
@connection.create_table "trains" do |t|
|
|
602
686
|
t.string :name
|
|
603
687
|
t.text :description
|
|
@@ -623,7 +707,7 @@ end
|
|
|
623
707
|
|
|
624
708
|
class DefaultsUsingMultipleSchemasAndDomainTest < ActiveRecord::PostgreSQLTestCase
|
|
625
709
|
setup do
|
|
626
|
-
@connection = ActiveRecord::Base.
|
|
710
|
+
@connection = ActiveRecord::Base.lease_connection
|
|
627
711
|
@connection.drop_schema "schema_1", if_exists: true
|
|
628
712
|
@connection.execute "CREATE SCHEMA schema_1"
|
|
629
713
|
@connection.execute "CREATE DOMAIN schema_1.text AS text"
|
|
@@ -677,10 +761,9 @@ end
|
|
|
677
761
|
|
|
678
762
|
class SchemaWithDotsTest < ActiveRecord::PostgreSQLTestCase
|
|
679
763
|
include PGSchemaHelper
|
|
680
|
-
self.use_transactional_tests = false
|
|
681
764
|
|
|
682
765
|
setup do
|
|
683
|
-
@connection = ActiveRecord::Base.
|
|
766
|
+
@connection = ActiveRecord::Base.lease_connection
|
|
684
767
|
@connection.create_schema "my.schema"
|
|
685
768
|
end
|
|
686
769
|
|
|
@@ -711,3 +794,170 @@ class SchemaWithDotsTest < ActiveRecord::PostgreSQLTestCase
|
|
|
711
794
|
end
|
|
712
795
|
end
|
|
713
796
|
end
|
|
797
|
+
|
|
798
|
+
class SchemaJoinTablesTest < ActiveRecord::PostgreSQLTestCase
|
|
799
|
+
def setup
|
|
800
|
+
@connection = ActiveRecord::Base.lease_connection
|
|
801
|
+
@connection.create_schema("test_schema")
|
|
802
|
+
end
|
|
803
|
+
|
|
804
|
+
def teardown
|
|
805
|
+
@connection.drop_schema("test_schema", if_exists: true)
|
|
806
|
+
end
|
|
807
|
+
|
|
808
|
+
def test_create_join_table
|
|
809
|
+
@connection.create_join_table("test_schema.posts", "test_schema.comments")
|
|
810
|
+
assert @connection.table_exists?("test_schema.comments_posts")
|
|
811
|
+
columns = @connection.columns("test_schema.comments_posts").map(&:name)
|
|
812
|
+
assert_equal ["comment_id", "post_id"], columns.sort
|
|
813
|
+
|
|
814
|
+
@connection.drop_join_table("test_schema.posts", "test_schema.comments")
|
|
815
|
+
assert_not @connection.table_exists?("test_schema.comments_posts")
|
|
816
|
+
end
|
|
817
|
+
end
|
|
818
|
+
|
|
819
|
+
class SchemaIndexIncludeColumnsTest < ActiveRecord::PostgreSQLTestCase
|
|
820
|
+
include SchemaDumpingHelper
|
|
821
|
+
|
|
822
|
+
def test_schema_dumps_index_included_columns
|
|
823
|
+
index_definition = dump_table_schema("companies").split(/\n/).grep(/t\.index.*company_include_index/).first.strip
|
|
824
|
+
if ActiveRecord::Base.lease_connection.supports_index_include?
|
|
825
|
+
assert_equal 't.index ["firm_id", "type"], name: "company_include_index", include: ["name", "account_id"]', index_definition
|
|
826
|
+
else
|
|
827
|
+
assert_equal 't.index ["firm_id", "type"], name: "company_include_index"', index_definition
|
|
828
|
+
end
|
|
829
|
+
end
|
|
830
|
+
end
|
|
831
|
+
|
|
832
|
+
class SchemaIndexNullsNotDistinctTest < ActiveRecord::PostgreSQLTestCase
|
|
833
|
+
include SchemaDumpingHelper
|
|
834
|
+
|
|
835
|
+
setup do
|
|
836
|
+
@connection = ActiveRecord::Base.lease_connection
|
|
837
|
+
@connection.create_table "trains" do |t|
|
|
838
|
+
t.string :name
|
|
839
|
+
end
|
|
840
|
+
end
|
|
841
|
+
|
|
842
|
+
teardown do
|
|
843
|
+
@connection.drop_table "trains", if_exists: true
|
|
844
|
+
end
|
|
845
|
+
|
|
846
|
+
def test_nulls_not_distinct_is_dumped
|
|
847
|
+
skip("current adapter doesn't support nulls not distinct") unless supports_nulls_not_distinct?
|
|
848
|
+
|
|
849
|
+
@connection.execute "CREATE INDEX trains_name ON trains USING btree(name) NULLS NOT DISTINCT"
|
|
850
|
+
|
|
851
|
+
output = dump_table_schema "trains"
|
|
852
|
+
|
|
853
|
+
assert_match(/nulls_not_distinct: true/, output)
|
|
854
|
+
end
|
|
855
|
+
|
|
856
|
+
def test_nulls_distinct_is_dumped
|
|
857
|
+
skip("current adapter doesn't support nulls not distinct") unless supports_nulls_not_distinct?
|
|
858
|
+
|
|
859
|
+
@connection.execute "CREATE INDEX trains_name ON trains USING btree(name) NULLS DISTINCT"
|
|
860
|
+
|
|
861
|
+
output = dump_table_schema "trains"
|
|
862
|
+
|
|
863
|
+
assert_no_match(/nulls_not_distinct/, output)
|
|
864
|
+
end
|
|
865
|
+
|
|
866
|
+
def test_nulls_not_set_is_dumped
|
|
867
|
+
@connection.execute "CREATE INDEX trains_name ON trains USING btree(name)"
|
|
868
|
+
|
|
869
|
+
output = dump_table_schema "trains"
|
|
870
|
+
|
|
871
|
+
assert_no_match(/nulls_not_distinct/, output)
|
|
872
|
+
end
|
|
873
|
+
end
|
|
874
|
+
|
|
875
|
+
class SchemaCreateTableOptionsTest < ActiveRecord::PostgreSQLTestCase
|
|
876
|
+
include SchemaDumpingHelper
|
|
877
|
+
|
|
878
|
+
setup do
|
|
879
|
+
@previous_unlogged_tables = ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.create_unlogged_tables
|
|
880
|
+
@connection = ActiveRecord::Base.connection
|
|
881
|
+
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.create_unlogged_tables = false
|
|
882
|
+
end
|
|
883
|
+
|
|
884
|
+
teardown do
|
|
885
|
+
@connection.drop_table "trains", if_exists: true
|
|
886
|
+
@connection.drop_table "transportation_modes", if_exists: true
|
|
887
|
+
@connection.drop_table "vehicles", if_exists: true
|
|
888
|
+
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.create_unlogged_tables = @previous_unlogged_tables
|
|
889
|
+
end
|
|
890
|
+
|
|
891
|
+
def test_list_partition_options_is_dumped
|
|
892
|
+
skip("current adapter doesn't support native partitioning") unless supports_native_partitioning?
|
|
893
|
+
|
|
894
|
+
options = "PARTITION BY LIST (kind)"
|
|
895
|
+
|
|
896
|
+
@connection.create_table "trains", id: false, options: options do |t|
|
|
897
|
+
t.string :name
|
|
898
|
+
t.string :kind
|
|
899
|
+
end
|
|
900
|
+
|
|
901
|
+
output = dump_table_schema "trains"
|
|
902
|
+
|
|
903
|
+
assert_match("options: \"#{options}\"", output)
|
|
904
|
+
end
|
|
905
|
+
|
|
906
|
+
def test_range_partition_options_is_dumped
|
|
907
|
+
skip("current adapter doesn't support native partitioning") unless supports_native_partitioning?
|
|
908
|
+
|
|
909
|
+
options = "PARTITION BY RANGE (created_at)"
|
|
910
|
+
|
|
911
|
+
@connection.create_table "trains", id: false, options: options do |t|
|
|
912
|
+
t.string :name
|
|
913
|
+
t.datetime :created_at, null: false
|
|
914
|
+
end
|
|
915
|
+
|
|
916
|
+
output = dump_table_schema "trains"
|
|
917
|
+
|
|
918
|
+
assert_match("options: \"#{options}\"", output)
|
|
919
|
+
end
|
|
920
|
+
|
|
921
|
+
def test_inherited_table_options_is_dumped
|
|
922
|
+
@connection.create_table "transportation_modes" do |t|
|
|
923
|
+
t.string :name
|
|
924
|
+
t.string :kind
|
|
925
|
+
end
|
|
926
|
+
|
|
927
|
+
options = "INHERITS (transportation_modes)"
|
|
928
|
+
|
|
929
|
+
@connection.create_table "trains", options: options
|
|
930
|
+
|
|
931
|
+
output = dump_table_schema "trains"
|
|
932
|
+
|
|
933
|
+
assert_match("options: \"#{options}\"", output)
|
|
934
|
+
end
|
|
935
|
+
|
|
936
|
+
def test_multiple_inherited_table_options_is_dumped
|
|
937
|
+
@connection.create_table "vehicles" do |t|
|
|
938
|
+
t.string :name
|
|
939
|
+
end
|
|
940
|
+
|
|
941
|
+
@connection.create_table "transportation_modes" do |t|
|
|
942
|
+
t.string :kind
|
|
943
|
+
end
|
|
944
|
+
|
|
945
|
+
options = "INHERITS (transportation_modes, vehicles)"
|
|
946
|
+
|
|
947
|
+
@connection.create_table "trains", options: options
|
|
948
|
+
|
|
949
|
+
output = dump_table_schema "trains"
|
|
950
|
+
|
|
951
|
+
assert_match("options: \"#{options}\"", output)
|
|
952
|
+
end
|
|
953
|
+
|
|
954
|
+
def test_no_partition_options_are_dumped
|
|
955
|
+
@connection.create_table "trains" do |t|
|
|
956
|
+
t.string :name
|
|
957
|
+
end
|
|
958
|
+
|
|
959
|
+
output = dump_table_schema "trains"
|
|
960
|
+
|
|
961
|
+
assert_no_match("options:", output)
|
|
962
|
+
end
|
|
963
|
+
end
|
|
@@ -9,7 +9,7 @@ class PostgresqlSerialTest < ActiveRecord::PostgreSQLTestCase
|
|
|
9
9
|
class PostgresqlSerial < ActiveRecord::Base; end
|
|
10
10
|
|
|
11
11
|
setup do
|
|
12
|
-
@connection = ActiveRecord::Base.
|
|
12
|
+
@connection = ActiveRecord::Base.lease_connection
|
|
13
13
|
@connection.create_table "postgresql_serials", force: true do |t|
|
|
14
14
|
t.serial :seq
|
|
15
15
|
t.integer :serials_id, default: -> { "nextval('postgresql_serials_id_seq')" }
|
|
@@ -51,7 +51,7 @@ class PostgresqlBigSerialTest < ActiveRecord::PostgreSQLTestCase
|
|
|
51
51
|
class PostgresqlBigSerial < ActiveRecord::Base; end
|
|
52
52
|
|
|
53
53
|
setup do
|
|
54
|
-
@connection = ActiveRecord::Base.
|
|
54
|
+
@connection = ActiveRecord::Base.lease_connection
|
|
55
55
|
@connection.create_table "postgresql_big_serials", force: true do |t|
|
|
56
56
|
t.bigserial :seq
|
|
57
57
|
t.bigint :serials_id, default: -> { "nextval('postgresql_big_serials_id_seq')" }
|
|
@@ -92,7 +92,7 @@ module SequenceNameDetectionTestCases
|
|
|
92
92
|
include SchemaDumpingHelper
|
|
93
93
|
|
|
94
94
|
def setup
|
|
95
|
-
@connection = ActiveRecord::Base.
|
|
95
|
+
@connection = ActiveRecord::Base.lease_connection
|
|
96
96
|
@connection.create_table :foo_bar, force: true do |t|
|
|
97
97
|
t.serial :baz_id
|
|
98
98
|
end
|
|
@@ -127,8 +127,8 @@ module SequenceNameDetectionTestCases
|
|
|
127
127
|
|
|
128
128
|
def setup
|
|
129
129
|
@table_name = "long_table_name_to_test_sequence_name_detection_for_serial_cols"
|
|
130
|
-
@connection = ActiveRecord::Base.
|
|
131
|
-
@connection.create_table @table_name, force: true do |t|
|
|
130
|
+
@connection = ActiveRecord::Base.lease_connection
|
|
131
|
+
@connection.create_table @table_name, force: true, _uses_legacy_table_name: true do |t|
|
|
132
132
|
t.serial :seq
|
|
133
133
|
t.bigserial :bigseq
|
|
134
134
|
end
|
|
@@ -8,6 +8,10 @@ module ActiveRecord
|
|
|
8
8
|
module ConnectionAdapters
|
|
9
9
|
class PostgreSQLAdapter < AbstractAdapter
|
|
10
10
|
class InactivePgConnection
|
|
11
|
+
def initialize
|
|
12
|
+
@raw_connection = nil
|
|
13
|
+
end
|
|
14
|
+
|
|
11
15
|
def query(*args)
|
|
12
16
|
raise PG::Error
|
|
13
17
|
end
|
|
@@ -32,7 +36,7 @@ module ActiveRecord
|
|
|
32
36
|
}
|
|
33
37
|
|
|
34
38
|
Process.waitpid pid
|
|
35
|
-
|
|
39
|
+
assert_predicate $?, :success?, "process should exit successfully"
|
|
36
40
|
end
|
|
37
41
|
end
|
|
38
42
|
|
|
@@ -43,7 +47,7 @@ module ActiveRecord
|
|
|
43
47
|
end
|
|
44
48
|
|
|
45
49
|
def test_prepared_statements_do_not_get_stuck_on_query_interruption
|
|
46
|
-
pg_connection = ActiveRecord::Base.
|
|
50
|
+
pg_connection = ActiveRecord::Base.lease_connection.connect!.instance_variable_get(:@raw_connection)
|
|
47
51
|
pg_connection.stub(:get_last_result, -> { raise "random error" }) do
|
|
48
52
|
assert_raises(RuntimeError) do
|
|
49
53
|
Developer.where(name: "David").last
|
|
@@ -10,7 +10,7 @@ class PostgresqlTimestampTest < ActiveRecord::PostgreSQLTestCase
|
|
|
10
10
|
self.use_transactional_tests = false
|
|
11
11
|
|
|
12
12
|
setup do
|
|
13
|
-
@connection = ActiveRecord::Base.
|
|
13
|
+
@connection = ActiveRecord::Base.lease_connection
|
|
14
14
|
@connection.execute("INSERT INTO postgresql_timestamp_with_zones (id, time) VALUES (1, '2010-01-01 10:00:00-1')")
|
|
15
15
|
end
|
|
16
16
|
|
|
@@ -18,7 +18,7 @@ class PostgresqlTimestampTest < ActiveRecord::PostgreSQLTestCase
|
|
|
18
18
|
PostgresqlTimestampWithZone.delete_all
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
def
|
|
21
|
+
def test_timestamp_with_zone_values_with_rails_time_zone_support_and_no_time_zone_set
|
|
22
22
|
with_timezone_config default: :utc, aware_attributes: true do
|
|
23
23
|
@connection.reconnect!
|
|
24
24
|
|
|
@@ -45,6 +45,78 @@ class PostgresqlTimestampTest < ActiveRecord::PostgreSQLTestCase
|
|
|
45
45
|
end
|
|
46
46
|
end
|
|
47
47
|
|
|
48
|
+
class PostgresqlTimestampWithAwareTypesTest < ActiveRecord::PostgreSQLTestCase
|
|
49
|
+
class PostgresqlTimestampWithZone < ActiveRecord::Base; end
|
|
50
|
+
|
|
51
|
+
self.use_transactional_tests = false
|
|
52
|
+
|
|
53
|
+
setup do
|
|
54
|
+
@connection = ActiveRecord::Base.lease_connection
|
|
55
|
+
@connection.execute("INSERT INTO postgresql_timestamp_with_zones (id, time) VALUES (1, '2010-01-01 10:00:00-1')")
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
teardown do
|
|
59
|
+
PostgresqlTimestampWithZone.delete_all
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def test_timestamp_with_zone_values_with_rails_time_zone_support_and_time_zone_set
|
|
63
|
+
with_timezone_config default: :utc, aware_attributes: true, zone: "Pacific Time (US & Canada)", aware_types: [:timestamptz, :datetime, :time] do
|
|
64
|
+
@connection.reconnect!
|
|
65
|
+
|
|
66
|
+
timestamp = PostgresqlTimestampWithZone.find(1)
|
|
67
|
+
assert_equal Time.utc(2010, 1, 1, 11, 0, 0), timestamp.time
|
|
68
|
+
assert_instance_of ActiveSupport::TimeWithZone, timestamp.time
|
|
69
|
+
end
|
|
70
|
+
ensure
|
|
71
|
+
@connection.reconnect!
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
class PostgresqlTimestampWithTimeZoneTest < ActiveRecord::PostgreSQLTestCase
|
|
76
|
+
class PostgresqlTimestampWithZone < ActiveRecord::Base; end
|
|
77
|
+
|
|
78
|
+
self.use_transactional_tests = false
|
|
79
|
+
|
|
80
|
+
setup do
|
|
81
|
+
with_postgresql_datetime_type(:timestamptz) do
|
|
82
|
+
@connection = ActiveRecord::Base.lease_connection
|
|
83
|
+
@connection.execute("INSERT INTO postgresql_timestamp_with_zones (id, time) VALUES (1, '2010-01-01 10:00:00-1')")
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
teardown do
|
|
88
|
+
PostgresqlTimestampWithZone.delete_all
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def test_timestamp_with_zone_values_with_rails_time_zone_support_and_timestamptz_and_no_time_zone_set
|
|
92
|
+
with_postgresql_datetime_type(:timestamptz) do
|
|
93
|
+
with_timezone_config default: :utc, aware_attributes: true, aware_types: [:timestamptz, :datetime, :time] do
|
|
94
|
+
@connection.reconnect!
|
|
95
|
+
|
|
96
|
+
timestamp = PostgresqlTimestampWithZone.find(1)
|
|
97
|
+
assert_equal Time.utc(2010, 1, 1, 11, 0, 0), timestamp.time
|
|
98
|
+
assert_instance_of Time, timestamp.time
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
ensure
|
|
102
|
+
@connection.reconnect!
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def test_timestamp_with_zone_values_with_rails_time_zone_support_and_timestamptz_and_time_zone_set
|
|
106
|
+
with_postgresql_datetime_type(:timestamptz) do
|
|
107
|
+
with_timezone_config default: :utc, aware_attributes: true, zone: "Pacific Time (US & Canada)", aware_types: [:timestamptz, :datetime, :time] do
|
|
108
|
+
@connection.reconnect!
|
|
109
|
+
|
|
110
|
+
timestamp = PostgresqlTimestampWithZone.find(1)
|
|
111
|
+
assert_equal Time.utc(2010, 1, 1, 11, 0, 0), timestamp.time
|
|
112
|
+
assert_instance_of ActiveSupport::TimeWithZone, timestamp.time
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
ensure
|
|
116
|
+
@connection.reconnect!
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
48
120
|
class PostgresqlTimestampFixtureTest < ActiveRecord::PostgreSQLTestCase
|
|
49
121
|
fixtures :topics
|
|
50
122
|
|
|
@@ -56,11 +128,11 @@ class PostgresqlTimestampFixtureTest < ActiveRecord::PostgreSQLTestCase
|
|
|
56
128
|
|
|
57
129
|
def test_load_infinity_and_beyond
|
|
58
130
|
d = Developer.find_by_sql("select 'infinity'::timestamp as legacy_updated_at")
|
|
59
|
-
|
|
131
|
+
assert_predicate d.first.updated_at, :infinite?, "timestamp should be infinite"
|
|
60
132
|
|
|
61
133
|
d = Developer.find_by_sql("select '-infinity'::timestamp as legacy_updated_at")
|
|
62
134
|
time = d.first.updated_at
|
|
63
|
-
|
|
135
|
+
assert_predicate time, :infinite?, "timestamp should be infinite"
|
|
64
136
|
assert_operator time, :<, 0
|
|
65
137
|
end
|
|
66
138
|
|
|
@@ -73,7 +145,7 @@ class PostgresqlTimestampFixtureTest < ActiveRecord::PostgreSQLTestCase
|
|
|
73
145
|
end
|
|
74
146
|
|
|
75
147
|
def test_bc_timestamp
|
|
76
|
-
date =
|
|
148
|
+
date = Time.new(0) - 1.week
|
|
77
149
|
Developer.create!(name: "aaron", updated_at: date)
|
|
78
150
|
assert_equal date, Developer.find_by_name("aaron").updated_at
|
|
79
151
|
end
|
|
@@ -90,3 +162,48 @@ class PostgresqlTimestampFixtureTest < ActiveRecord::PostgreSQLTestCase
|
|
|
90
162
|
assert_equal date, Developer.find_by_name("yahagi").updated_at
|
|
91
163
|
end
|
|
92
164
|
end
|
|
165
|
+
|
|
166
|
+
class PostgresqlTimestampMigrationTest < ActiveRecord::PostgreSQLTestCase
|
|
167
|
+
class PostgresqlTimestampWithZone < ActiveRecord::Base; end
|
|
168
|
+
|
|
169
|
+
def test_adds_column_as_timestamp
|
|
170
|
+
original, $stdout = $stdout, StringIO.new
|
|
171
|
+
|
|
172
|
+
ActiveRecord::Migration.new.add_column :postgresql_timestamp_with_zones, :times, :datetime
|
|
173
|
+
|
|
174
|
+
assert_equal({ "data_type" => "timestamp without time zone" },
|
|
175
|
+
PostgresqlTimestampWithZone.lease_connection.execute("select data_type from information_schema.columns where column_name = 'times'").to_a.first)
|
|
176
|
+
ensure
|
|
177
|
+
$stdout = original
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def test_adds_column_as_timestamptz_if_datetime_type_changed
|
|
181
|
+
original, $stdout = $stdout, StringIO.new
|
|
182
|
+
|
|
183
|
+
with_postgresql_datetime_type(:timestamptz) do
|
|
184
|
+
ActiveRecord::Migration.new.add_column :postgresql_timestamp_with_zones, :times, :datetime
|
|
185
|
+
|
|
186
|
+
assert_equal({ "data_type" => "timestamp with time zone" },
|
|
187
|
+
PostgresqlTimestampWithZone.lease_connection.execute("select data_type from information_schema.columns where column_name = 'times'").to_a.first)
|
|
188
|
+
end
|
|
189
|
+
ensure
|
|
190
|
+
$stdout = original
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def test_adds_column_as_custom_type
|
|
194
|
+
original, $stdout = $stdout, StringIO.new
|
|
195
|
+
|
|
196
|
+
PostgresqlTimestampWithZone.lease_connection.execute("CREATE TYPE custom_time_format AS ENUM ('past', 'present', 'future');")
|
|
197
|
+
|
|
198
|
+
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:datetimes_as_enum] = { name: "custom_time_format" }
|
|
199
|
+
with_postgresql_datetime_type(:datetimes_as_enum) do
|
|
200
|
+
ActiveRecord::Migration.new.add_column :postgresql_timestamp_with_zones, :times, :datetime, precision: nil
|
|
201
|
+
|
|
202
|
+
assert_equal({ "data_type" => "USER-DEFINED", "udt_name" => "custom_time_format" },
|
|
203
|
+
PostgresqlTimestampWithZone.lease_connection.execute("select data_type, udt_name from information_schema.columns where column_name = 'times'").to_a.first)
|
|
204
|
+
end
|
|
205
|
+
ensure
|
|
206
|
+
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::NATIVE_DATABASE_TYPES.delete(:datetimes_as_enum)
|
|
207
|
+
$stdout = original
|
|
208
|
+
end
|
|
209
|
+
end
|