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,6 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "cases/helper"
|
2
|
-
require
|
3
|
-
require
|
4
|
+
require "support/ddl_helper"
|
5
|
+
require "support/connection_helper"
|
4
6
|
|
5
7
|
module ActiveRecord
|
6
8
|
module ConnectionAdapters
|
@@ -11,167 +13,200 @@ module ActiveRecord
|
|
11
13
|
|
12
14
|
def setup
|
13
15
|
@connection = ActiveRecord::Base.connection
|
16
|
+
@connection_handler = ActiveRecord::Base.connection_handler
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_connection_error
|
20
|
+
assert_raises ActiveRecord::ConnectionNotEstablished do
|
21
|
+
ActiveRecord::Base.postgresql_connection(host: File::NULL)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_reconnection_error
|
26
|
+
fake_connection = Class.new do
|
27
|
+
def async_exec(*)
|
28
|
+
[{}]
|
29
|
+
end
|
30
|
+
|
31
|
+
def type_map_for_queries=(_)
|
32
|
+
end
|
33
|
+
|
34
|
+
def type_map_for_results=(_)
|
35
|
+
end
|
36
|
+
|
37
|
+
def exec_params(*)
|
38
|
+
{}
|
39
|
+
end
|
40
|
+
|
41
|
+
def reset
|
42
|
+
raise PG::ConnectionBad
|
43
|
+
end
|
44
|
+
|
45
|
+
def close
|
46
|
+
end
|
47
|
+
end.new
|
48
|
+
|
49
|
+
@conn = ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.new(
|
50
|
+
fake_connection,
|
51
|
+
ActiveRecord::Base.logger,
|
52
|
+
nil,
|
53
|
+
{ host: File::NULL }
|
54
|
+
)
|
55
|
+
|
56
|
+
assert_raises ActiveRecord::ConnectionNotEstablished do
|
57
|
+
@conn.reconnect!
|
58
|
+
end
|
14
59
|
end
|
15
60
|
|
16
61
|
def test_bad_connection
|
17
62
|
assert_raise ActiveRecord::NoDatabaseError do
|
18
|
-
|
63
|
+
db_config = ActiveRecord::Base.configurations.configs_for(env_name: "arunit", name: "primary")
|
64
|
+
configuration = db_config.configuration_hash.merge(database: "should_not_exist-cinco-dog-db")
|
19
65
|
connection = ActiveRecord::Base.postgresql_connection(configuration)
|
20
|
-
connection.exec_query(
|
66
|
+
connection.exec_query("SELECT 1")
|
21
67
|
end
|
22
68
|
end
|
23
69
|
|
24
|
-
def
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
end
|
70
|
+
def test_database_exists_returns_false_when_the_database_does_not_exist
|
71
|
+
config = { database: "non_extant_database", adapter: "postgresql" }
|
72
|
+
assert_not ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.database_exists?(config),
|
73
|
+
"expected database #{config[:database]} to not exist"
|
29
74
|
end
|
30
75
|
|
31
|
-
def
|
32
|
-
|
76
|
+
def test_database_exists_returns_true_when_the_database_exists
|
77
|
+
db_config = ActiveRecord::Base.configurations.configs_for(env_name: "arunit", name: "primary")
|
78
|
+
assert ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.database_exists?(db_config.configuration_hash),
|
79
|
+
"expected database #{db_config.database} to exist"
|
33
80
|
end
|
34
81
|
|
35
82
|
def test_primary_key
|
36
83
|
with_example_table do
|
37
|
-
assert_equal
|
84
|
+
assert_equal "id", @connection.primary_key("ex")
|
38
85
|
end
|
39
86
|
end
|
40
87
|
|
41
88
|
def test_primary_key_works_tables_containing_capital_letters
|
42
|
-
assert_equal
|
89
|
+
assert_equal "id", @connection.primary_key("CamelCase")
|
43
90
|
end
|
44
91
|
|
45
92
|
def test_non_standard_primary_key
|
46
|
-
with_example_table
|
47
|
-
assert_equal
|
93
|
+
with_example_table "data character varying(255) primary key" do
|
94
|
+
assert_equal "data", @connection.primary_key("ex")
|
48
95
|
end
|
49
96
|
end
|
50
97
|
|
51
98
|
def test_primary_key_returns_nil_for_no_pk
|
52
|
-
with_example_table
|
53
|
-
assert_nil @connection.primary_key(
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_primary_key_raises_error_if_table_not_found
|
58
|
-
assert_raises(ActiveRecord::StatementInvalid) do
|
59
|
-
@connection.primary_key('unobtainium')
|
99
|
+
with_example_table "id integer" do
|
100
|
+
assert_nil @connection.primary_key("ex")
|
60
101
|
end
|
61
102
|
end
|
62
103
|
|
63
104
|
def test_exec_insert_with_returning_disabled
|
64
105
|
connection = connection_without_insert_returning
|
65
|
-
result = connection.exec_insert("insert into postgresql_partitioned_table_parent (number) VALUES (1)", nil, [],
|
66
|
-
expect = connection.query(
|
106
|
+
result = connection.exec_insert("insert into postgresql_partitioned_table_parent (number) VALUES (1)", nil, [], "id", "postgresql_partitioned_table_parent_id_seq")
|
107
|
+
expect = connection.query("select max(id) from postgresql_partitioned_table_parent").first.first
|
67
108
|
assert_equal expect.to_i, result.rows.first.first
|
68
109
|
end
|
69
110
|
|
70
111
|
def test_exec_insert_with_returning_disabled_and_no_sequence_name_given
|
71
112
|
connection = connection_without_insert_returning
|
72
|
-
result = connection.exec_insert("insert into postgresql_partitioned_table_parent (number) VALUES (1)", nil, [],
|
73
|
-
expect = connection.query(
|
113
|
+
result = connection.exec_insert("insert into postgresql_partitioned_table_parent (number) VALUES (1)", nil, [], "id")
|
114
|
+
expect = connection.query("select max(id) from postgresql_partitioned_table_parent").first.first
|
74
115
|
assert_equal expect.to_i, result.rows.first.first
|
75
116
|
end
|
76
117
|
|
77
118
|
def test_exec_insert_default_values_with_returning_disabled_and_no_sequence_name_given
|
78
119
|
connection = connection_without_insert_returning
|
79
|
-
result = connection.exec_insert("insert into postgresql_partitioned_table_parent DEFAULT VALUES", nil, [],
|
80
|
-
expect = connection.query(
|
120
|
+
result = connection.exec_insert("insert into postgresql_partitioned_table_parent DEFAULT VALUES", nil, [], "id")
|
121
|
+
expect = connection.query("select max(id) from postgresql_partitioned_table_parent").first.first
|
81
122
|
assert_equal expect.to_i, result.rows.first.first
|
82
123
|
end
|
83
124
|
|
84
125
|
def test_exec_insert_default_values_quoted_schema_with_returning_disabled_and_no_sequence_name_given
|
85
126
|
connection = connection_without_insert_returning
|
86
|
-
result = connection.exec_insert('insert into "public"."postgresql_partitioned_table_parent" DEFAULT VALUES', nil, [],
|
87
|
-
expect = connection.query(
|
127
|
+
result = connection.exec_insert('insert into "public"."postgresql_partitioned_table_parent" DEFAULT VALUES', nil, [], "id")
|
128
|
+
expect = connection.query("select max(id) from postgresql_partitioned_table_parent").first.first
|
88
129
|
assert_equal expect.to_i, result.rows.first.first
|
89
130
|
end
|
90
131
|
|
91
|
-
def test_sql_for_insert_with_returning_disabled
|
92
|
-
connection = connection_without_insert_returning
|
93
|
-
sql, binds = connection.sql_for_insert('sql', nil, nil, nil, 'binds')
|
94
|
-
assert_equal ['sql', 'binds'], [sql, binds]
|
95
|
-
end
|
96
|
-
|
97
132
|
def test_serial_sequence
|
98
|
-
assert_equal
|
99
|
-
@connection.serial_sequence(
|
133
|
+
assert_equal "public.accounts_id_seq",
|
134
|
+
@connection.serial_sequence("accounts", "id")
|
100
135
|
|
101
136
|
assert_raises(ActiveRecord::StatementInvalid) do
|
102
|
-
@connection.serial_sequence(
|
137
|
+
@connection.serial_sequence("zomg", "id")
|
103
138
|
end
|
104
139
|
end
|
105
140
|
|
106
141
|
def test_default_sequence_name
|
107
|
-
assert_equal
|
108
|
-
@connection.default_sequence_name(
|
142
|
+
assert_equal "public.accounts_id_seq",
|
143
|
+
@connection.default_sequence_name("accounts", "id")
|
109
144
|
|
110
|
-
assert_equal
|
111
|
-
@connection.default_sequence_name(
|
145
|
+
assert_equal "public.accounts_id_seq",
|
146
|
+
@connection.default_sequence_name("accounts")
|
112
147
|
end
|
113
148
|
|
114
149
|
def test_default_sequence_name_bad_table
|
115
|
-
assert_equal
|
116
|
-
@connection.default_sequence_name(
|
150
|
+
assert_equal "zomg_id_seq",
|
151
|
+
@connection.default_sequence_name("zomg", "id")
|
117
152
|
|
118
|
-
assert_equal
|
119
|
-
@connection.default_sequence_name(
|
153
|
+
assert_equal "zomg_id_seq",
|
154
|
+
@connection.default_sequence_name("zomg")
|
120
155
|
end
|
121
156
|
|
122
157
|
def test_pk_and_sequence_for
|
123
158
|
with_example_table do
|
124
|
-
pk, seq = @connection.pk_and_sequence_for(
|
125
|
-
assert_equal
|
126
|
-
assert_equal @connection.default_sequence_name(
|
159
|
+
pk, seq = @connection.pk_and_sequence_for("ex")
|
160
|
+
assert_equal "id", pk
|
161
|
+
assert_equal @connection.default_sequence_name("ex", "id"), seq.to_s
|
127
162
|
end
|
128
163
|
end
|
129
164
|
|
130
165
|
def test_pk_and_sequence_for_with_non_standard_primary_key
|
131
|
-
with_example_table
|
132
|
-
pk, seq = @connection.pk_and_sequence_for(
|
133
|
-
assert_equal
|
134
|
-
assert_equal @connection.default_sequence_name(
|
166
|
+
with_example_table "code serial primary key" do
|
167
|
+
pk, seq = @connection.pk_and_sequence_for("ex")
|
168
|
+
assert_equal "code", pk
|
169
|
+
assert_equal @connection.default_sequence_name("ex", "code"), seq.to_s
|
135
170
|
end
|
136
171
|
end
|
137
172
|
|
138
173
|
def test_pk_and_sequence_for_returns_nil_if_no_seq
|
139
|
-
with_example_table
|
140
|
-
assert_nil @connection.pk_and_sequence_for(
|
174
|
+
with_example_table "id integer primary key" do
|
175
|
+
assert_nil @connection.pk_and_sequence_for("ex")
|
141
176
|
end
|
142
177
|
end
|
143
178
|
|
144
179
|
def test_pk_and_sequence_for_returns_nil_if_no_pk
|
145
|
-
with_example_table
|
146
|
-
assert_nil @connection.pk_and_sequence_for(
|
180
|
+
with_example_table "id integer" do
|
181
|
+
assert_nil @connection.pk_and_sequence_for("ex")
|
147
182
|
end
|
148
183
|
end
|
149
184
|
|
150
185
|
def test_pk_and_sequence_for_returns_nil_if_table_not_found
|
151
|
-
assert_nil @connection.pk_and_sequence_for(
|
186
|
+
assert_nil @connection.pk_and_sequence_for("unobtainium")
|
152
187
|
end
|
153
188
|
|
154
189
|
def test_pk_and_sequence_for_with_collision_pg_class_oid
|
155
|
-
@connection.exec_query(
|
156
|
-
@connection.exec_query(
|
190
|
+
@connection.exec_query("create table ex(id serial primary key)")
|
191
|
+
@connection.exec_query("create table ex2(id serial primary key)")
|
157
192
|
|
158
193
|
correct_depend_record = [
|
159
194
|
"'pg_class'::regclass",
|
160
195
|
"'ex_id_seq'::regclass",
|
161
|
-
|
196
|
+
"0",
|
162
197
|
"'pg_class'::regclass",
|
163
198
|
"'ex'::regclass",
|
164
|
-
|
199
|
+
"1",
|
165
200
|
"'a'"
|
166
201
|
]
|
167
202
|
|
168
203
|
collision_depend_record = [
|
169
204
|
"'pg_attrdef'::regclass",
|
170
205
|
"'ex2_id_seq'::regclass",
|
171
|
-
|
206
|
+
"0",
|
172
207
|
"'pg_class'::regclass",
|
173
208
|
"'ex'::regclass",
|
174
|
-
|
209
|
+
"1",
|
175
210
|
"'a'"
|
176
211
|
]
|
177
212
|
|
@@ -185,15 +220,15 @@ module ActiveRecord
|
|
185
220
|
"INSERT INTO pg_depend VALUES(#{correct_depend_record.join(',')})"
|
186
221
|
)
|
187
222
|
|
188
|
-
seq = @connection.pk_and_sequence_for(
|
223
|
+
seq = @connection.pk_and_sequence_for("ex").last
|
189
224
|
assert_equal PostgreSQL::Name.new("public", "ex_id_seq"), seq
|
190
225
|
|
191
226
|
@connection.exec_query(
|
192
227
|
"DELETE FROM pg_depend WHERE objid = 'ex2_id_seq'::regclass AND refobjid = 'ex'::regclass AND deptype = 'a'"
|
193
228
|
)
|
194
229
|
ensure
|
195
|
-
@connection.drop_table
|
196
|
-
@connection.drop_table
|
230
|
+
@connection.drop_table "ex", if_exists: true
|
231
|
+
@connection.drop_table "ex2", if_exists: true
|
197
232
|
end
|
198
233
|
|
199
234
|
def test_table_alias_length
|
@@ -204,77 +239,77 @@ module ActiveRecord
|
|
204
239
|
|
205
240
|
def test_exec_no_binds
|
206
241
|
with_example_table do
|
207
|
-
result = @connection.exec_query(
|
242
|
+
result = @connection.exec_query("SELECT id, data FROM ex")
|
208
243
|
assert_equal 0, result.rows.length
|
209
244
|
assert_equal 2, result.columns.length
|
210
245
|
assert_equal %w{ id data }, result.columns
|
211
246
|
|
212
|
-
string = @connection.quote(
|
247
|
+
string = @connection.quote("foo")
|
213
248
|
@connection.exec_query("INSERT INTO ex (id, data) VALUES (1, #{string})")
|
214
|
-
result = @connection.exec_query(
|
249
|
+
result = @connection.exec_query("SELECT id, data FROM ex")
|
215
250
|
assert_equal 1, result.rows.length
|
216
251
|
assert_equal 2, result.columns.length
|
217
252
|
|
218
|
-
assert_equal [[1,
|
253
|
+
assert_equal [[1, "foo"]], result.rows
|
219
254
|
end
|
220
255
|
end
|
221
256
|
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
@connection.exec_query("INSERT INTO ex (id, data) VALUES (1, #{string})")
|
257
|
+
def test_exec_with_binds
|
258
|
+
with_example_table do
|
259
|
+
string = @connection.quote("foo")
|
260
|
+
@connection.exec_query("INSERT INTO ex (id, data) VALUES (1, #{string})")
|
227
261
|
|
228
|
-
|
229
|
-
|
262
|
+
bind = Relation::QueryAttribute.new("id", 1, Type::Value.new)
|
263
|
+
result = @connection.exec_query("SELECT id, data FROM ex WHERE id = $1", nil, [bind])
|
230
264
|
|
231
|
-
|
232
|
-
|
265
|
+
assert_equal 1, result.rows.length
|
266
|
+
assert_equal 2, result.columns.length
|
233
267
|
|
234
|
-
|
235
|
-
end
|
268
|
+
assert_equal [[1, "foo"]], result.rows
|
236
269
|
end
|
270
|
+
end
|
237
271
|
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
272
|
+
def test_exec_typecasts_bind_vals
|
273
|
+
with_example_table do
|
274
|
+
string = @connection.quote("foo")
|
275
|
+
@connection.exec_query("INSERT INTO ex (id, data) VALUES (1, #{string})")
|
242
276
|
|
243
|
-
|
244
|
-
|
277
|
+
bind = Relation::QueryAttribute.new("id", "1-fuu", Type::Integer.new)
|
278
|
+
result = @connection.exec_query("SELECT id, data FROM ex WHERE id = $1", nil, [bind])
|
245
279
|
|
246
|
-
|
247
|
-
|
280
|
+
assert_equal 1, result.rows.length
|
281
|
+
assert_equal 2, result.columns.length
|
248
282
|
|
249
|
-
|
250
|
-
end
|
283
|
+
assert_equal [[1, "foo"]], result.rows
|
251
284
|
end
|
252
285
|
end
|
253
286
|
|
254
287
|
def test_partial_index
|
255
288
|
with_example_table do
|
256
|
-
@connection.add_index
|
257
|
-
index = @connection.indexes(
|
289
|
+
@connection.add_index "ex", %w{ id number }, name: "partial", where: "number > 100"
|
290
|
+
index = @connection.indexes("ex").find { |idx| idx.name == "partial" }
|
258
291
|
assert_equal "(number > 100)", index.where
|
259
292
|
end
|
260
293
|
end
|
261
294
|
|
262
295
|
def test_expression_index
|
263
296
|
with_example_table do
|
264
|
-
|
265
|
-
|
266
|
-
|
297
|
+
expr = "mod(id, 10), abs(number)"
|
298
|
+
@connection.add_index "ex", expr, name: "expression"
|
299
|
+
index = @connection.indexes("ex").find { |idx| idx.name == "expression" }
|
300
|
+
assert_equal expr, index.columns
|
301
|
+
assert_equal true, @connection.index_exists?("ex", expr, name: "expression")
|
267
302
|
end
|
268
303
|
end
|
269
304
|
|
270
305
|
def test_index_with_opclass
|
271
306
|
with_example_table do
|
272
|
-
@connection.add_index "ex", "data varchar_pattern_ops"
|
273
|
-
index = @connection.indexes("ex").find { |idx| idx.name == "
|
274
|
-
assert_equal "data
|
307
|
+
@connection.add_index "ex", "data", opclass: "varchar_pattern_ops"
|
308
|
+
index = @connection.indexes("ex").find { |idx| idx.name == "index_ex_on_data" }
|
309
|
+
assert_equal ["data"], index.columns
|
275
310
|
|
276
|
-
@connection.remove_index "ex", "data
|
277
|
-
assert_not @connection.indexes("ex").find { |idx| idx.name == "
|
311
|
+
@connection.remove_index "ex", "data"
|
312
|
+
assert_not @connection.indexes("ex").find { |idx| idx.name == "index_ex_on_data" }
|
278
313
|
end
|
279
314
|
end
|
280
315
|
|
@@ -284,50 +319,51 @@ module ActiveRecord
|
|
284
319
|
end
|
285
320
|
|
286
321
|
def test_columns_for_distinct_one_order
|
287
|
-
assert_equal "posts.
|
322
|
+
assert_equal "posts.created_at AS alias_0, posts.id",
|
288
323
|
@connection.columns_for_distinct("posts.id", ["posts.created_at desc"])
|
289
324
|
end
|
290
325
|
|
291
326
|
def test_columns_for_distinct_few_orders
|
292
|
-
assert_equal "posts.
|
327
|
+
assert_equal "posts.created_at AS alias_0, posts.position AS alias_1, posts.id",
|
293
328
|
@connection.columns_for_distinct("posts.id", ["posts.created_at desc", "posts.position asc"])
|
294
329
|
end
|
295
330
|
|
296
331
|
def test_columns_for_distinct_with_case
|
297
332
|
assert_equal(
|
298
|
-
|
299
|
-
@connection.columns_for_distinct(
|
333
|
+
"CASE WHEN author.is_active THEN UPPER(author.name) ELSE UPPER(author.email) END AS alias_0, posts.id",
|
334
|
+
@connection.columns_for_distinct("posts.id",
|
300
335
|
["CASE WHEN author.is_active THEN UPPER(author.name) ELSE UPPER(author.email) END"])
|
301
336
|
)
|
302
337
|
end
|
303
338
|
|
304
339
|
def test_columns_for_distinct_blank_not_nil_orders
|
305
|
-
assert_equal "posts.
|
340
|
+
assert_equal "posts.created_at AS alias_0, posts.id",
|
306
341
|
@connection.columns_for_distinct("posts.id", ["posts.created_at desc", "", " "])
|
307
342
|
end
|
308
343
|
|
309
344
|
def test_columns_for_distinct_with_arel_order
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
assert_equal "posts.id, posts.created_at AS alias_0",
|
345
|
+
Arel::Table.engine = nil # should not rely on the global Arel::Table.engine
|
346
|
+
|
347
|
+
order = Arel.sql("posts.created_at").desc
|
348
|
+
assert_equal "posts.created_at AS alias_0, posts.id",
|
315
349
|
@connection.columns_for_distinct("posts.id", [order])
|
350
|
+
ensure
|
351
|
+
Arel::Table.engine = ActiveRecord::Base
|
316
352
|
end
|
317
353
|
|
318
354
|
def test_columns_for_distinct_with_nulls
|
319
|
-
assert_equal "posts.
|
320
|
-
assert_equal "posts.
|
355
|
+
assert_equal "posts.updater_id AS alias_0, posts.title", @connection.columns_for_distinct("posts.title", ["posts.updater_id desc nulls first"])
|
356
|
+
assert_equal "posts.updater_id AS alias_0, posts.title", @connection.columns_for_distinct("posts.title", ["posts.updater_id desc nulls last"])
|
321
357
|
end
|
322
358
|
|
323
359
|
def test_columns_for_distinct_without_order_specifiers
|
324
|
-
assert_equal "posts.
|
360
|
+
assert_equal "posts.updater_id AS alias_0, posts.title",
|
325
361
|
@connection.columns_for_distinct("posts.title", ["posts.updater_id"])
|
326
362
|
|
327
|
-
assert_equal "posts.
|
363
|
+
assert_equal "posts.updater_id AS alias_0, posts.title",
|
328
364
|
@connection.columns_for_distinct("posts.title", ["posts.updater_id nulls last"])
|
329
365
|
|
330
|
-
assert_equal "posts.
|
366
|
+
assert_equal "posts.updater_id AS alias_0, posts.title",
|
331
367
|
@connection.columns_for_distinct("posts.title", ["posts.updater_id nulls first"])
|
332
368
|
end
|
333
369
|
|
@@ -347,29 +383,35 @@ module ActiveRecord
|
|
347
383
|
reset_connection
|
348
384
|
end
|
349
385
|
|
350
|
-
def
|
386
|
+
def test_only_reload_type_map_once_for_every_unrecognized_type
|
387
|
+
reset_connection
|
388
|
+
connection = ActiveRecord::Base.connection
|
389
|
+
|
351
390
|
silence_warnings do
|
352
391
|
assert_queries 2, ignore_none: true do
|
353
|
-
|
392
|
+
connection.select_all "select 'pg_catalog.pg_class'::regclass"
|
354
393
|
end
|
355
394
|
assert_queries 1, ignore_none: true do
|
356
|
-
|
395
|
+
connection.select_all "select 'pg_catalog.pg_class'::regclass"
|
357
396
|
end
|
358
397
|
assert_queries 2, ignore_none: true do
|
359
|
-
|
398
|
+
connection.select_all "SELECT NULL::anyarray"
|
360
399
|
end
|
361
400
|
end
|
362
401
|
ensure
|
363
402
|
reset_connection
|
364
403
|
end
|
365
404
|
|
366
|
-
def
|
405
|
+
def test_only_warn_on_first_encounter_of_unrecognized_oid
|
406
|
+
reset_connection
|
407
|
+
connection = ActiveRecord::Base.connection
|
408
|
+
|
367
409
|
warning = capture(:stderr) {
|
368
|
-
|
369
|
-
|
370
|
-
|
410
|
+
connection.select_all "select 'pg_catalog.pg_class'::regclass"
|
411
|
+
connection.select_all "select 'pg_catalog.pg_class'::regclass"
|
412
|
+
connection.select_all "select 'pg_catalog.pg_class'::regclass"
|
371
413
|
}
|
372
|
-
assert_match(/\Aunknown OID \d+: failed to recognize type of '
|
414
|
+
assert_match(/\Aunknown OID \d+: failed to recognize type of 'regclass'\. It will be treated as String\.\n\z/, warning)
|
373
415
|
ensure
|
374
416
|
reset_connection
|
375
417
|
end
|
@@ -377,7 +419,7 @@ module ActiveRecord
|
|
377
419
|
def test_unparsed_defaults_are_at_least_set_when_saving
|
378
420
|
with_example_table "id SERIAL PRIMARY KEY, number INTEGER NOT NULL DEFAULT (4 + 4) * 2 / 4" do
|
379
421
|
number_klass = Class.new(ActiveRecord::Base) do
|
380
|
-
self.table_name =
|
422
|
+
self.table_name = "ex"
|
381
423
|
end
|
382
424
|
column = number_klass.columns_hash["number"]
|
383
425
|
assert_nil column.default
|
@@ -392,14 +434,14 @@ module ActiveRecord
|
|
392
434
|
end
|
393
435
|
|
394
436
|
private
|
437
|
+
def with_example_table(definition = "id serial primary key, number integer, data character varying(255)", &block)
|
438
|
+
super(@connection, "ex", definition, &block)
|
439
|
+
end
|
395
440
|
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
def connection_without_insert_returning
|
401
|
-
ActiveRecord::Base.postgresql_connection(ActiveRecord::Base.configurations['arunit'].merge(:insert_returning => false))
|
402
|
-
end
|
441
|
+
def connection_without_insert_returning
|
442
|
+
db_config = ActiveRecord::Base.configurations.configs_for(env_name: "arunit", name: "primary")
|
443
|
+
ActiveRecord::Base.postgresql_connection(db_config.configuration_hash.merge(insert_returning: false))
|
444
|
+
end
|
403
445
|
end
|
404
446
|
end
|
405
447
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "cases/helper"
|
4
|
+
require "models/computer"
|
5
|
+
require "models/developer"
|
6
|
+
|
7
|
+
class PreparedStatementsDisabledTest < ActiveRecord::PostgreSQLTestCase
|
8
|
+
fixtures :developers
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@conn = ActiveRecord::Base.establish_connection :arunit_without_prepared_statements
|
12
|
+
end
|
13
|
+
|
14
|
+
def teardown
|
15
|
+
@conn.release_connection
|
16
|
+
ActiveRecord::Base.establish_connection :arunit
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_select_query_works_even_when_prepared_statements_are_disabled
|
20
|
+
assert_not Developer.connection.prepared_statements
|
21
|
+
|
22
|
+
david = developers(:david)
|
23
|
+
|
24
|
+
assert_equal david, Developer.where(name: "David").last # With Binds
|
25
|
+
assert_operator Developer.count, :>, 0 # Without Binds
|
26
|
+
end
|
27
|
+
end
|
@@ -1,5 +1,6 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "cases/helper"
|
2
|
-
require 'ipaddr'
|
3
4
|
|
4
5
|
module ActiveRecord
|
5
6
|
module ConnectionAdapters
|
@@ -10,20 +11,20 @@ module ActiveRecord
|
|
10
11
|
end
|
11
12
|
|
12
13
|
def test_type_cast_true
|
13
|
-
assert_equal
|
14
|
+
assert_equal true, @conn.type_cast(true)
|
14
15
|
end
|
15
16
|
|
16
17
|
def test_type_cast_false
|
17
|
-
assert_equal
|
18
|
+
assert_equal false, @conn.type_cast(false)
|
18
19
|
end
|
19
20
|
|
20
21
|
def test_quote_float_nan
|
21
|
-
nan = 0.0/0
|
22
|
+
nan = 0.0 / 0
|
22
23
|
assert_equal "'NaN'", @conn.quote(nan)
|
23
24
|
end
|
24
25
|
|
25
26
|
def test_quote_float_infinity
|
26
|
-
infinity = 1.0/0
|
27
|
+
infinity = 1.0 / 0
|
27
28
|
assert_equal "'Infinity'", @conn.quote(infinity)
|
28
29
|
end
|
29
30
|
|
@@ -36,7 +37,12 @@ module ActiveRecord
|
|
36
37
|
def test_quote_bit_string
|
37
38
|
value = "'); SELECT * FROM users; /*\n01\n*/--"
|
38
39
|
type = OID::Bit.new
|
39
|
-
|
40
|
+
assert_nil @conn.quote(type.serialize(value))
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_quote_table_name_with_spaces
|
44
|
+
value = "user posts"
|
45
|
+
assert_equal "\"user posts\"", @conn.quote_table_name(value)
|
40
46
|
end
|
41
47
|
end
|
42
48
|
end
|