ibm_db 5.2.0-x86-mingw32 → 5.4.0-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/README +1 -1
- data/debug.log +1 -0
- data/ext/Makefile +28 -24
- data/ext/ibm_db.c +66 -65
- data/ext/ibm_db.o +0 -0
- data/ext/ibm_db.so +0 -0
- data/ext/mkmf.log +26 -24
- 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 +1520 -1282
- data/lib/ibm_db.so +1 -0
- data/lib/mswin32/ibm_db.rb +3 -1
- data/lib/mswin32/rb3x/i386/ruby30/ibm_db.so +0 -0
- data/lib/mswin32/rb3x/i386/ruby31/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 +192 -14
@@ -1,11 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "cases/helper"
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
4
|
+
require "models/topic"
|
5
|
+
require "models/reply"
|
6
|
+
require "models/developer"
|
7
|
+
require "models/computer"
|
8
|
+
require "models/parrot"
|
9
|
+
require "models/company"
|
10
|
+
require "models/price_estimate"
|
9
11
|
|
10
12
|
class ValidationsTest < ActiveRecord::TestCase
|
11
13
|
fixtures :topics, :developers
|
@@ -17,7 +19,7 @@ class ValidationsTest < ActiveRecord::TestCase
|
|
17
19
|
def test_valid_uses_create_context_when_new
|
18
20
|
r = WrongReply.new
|
19
21
|
r.title = "Wrong Create"
|
20
|
-
|
22
|
+
assert_not_predicate r, :valid?
|
21
23
|
assert r.errors[:title].any?, "A reply with a bad title should mark that attribute as invalid"
|
22
24
|
assert_equal ["is Wrong Create"], r.errors[:title], "A reply with a bad content should contain an error"
|
23
25
|
end
|
@@ -36,8 +38,8 @@ class ValidationsTest < ActiveRecord::TestCase
|
|
36
38
|
end
|
37
39
|
|
38
40
|
def test_valid_using_special_context
|
39
|
-
r = WrongReply.new(:
|
40
|
-
|
41
|
+
r = WrongReply.new(title: "Valid title")
|
42
|
+
assert_not r.valid?(:special_case)
|
41
43
|
assert_equal "Invalid", r.errors[:author_name].join
|
42
44
|
|
43
45
|
r.author_name = "secret"
|
@@ -53,7 +55,7 @@ class ValidationsTest < ActiveRecord::TestCase
|
|
53
55
|
end
|
54
56
|
|
55
57
|
def test_invalid_using_multiple_contexts
|
56
|
-
r = WrongReply.new(:
|
58
|
+
r = WrongReply.new(title: "Wrong Create")
|
57
59
|
assert r.invalid?([:special_case, :create])
|
58
60
|
assert_equal "Invalid", r.errors[:author_name].join
|
59
61
|
assert_equal "is Wrong Create", r.errors[:title].join
|
@@ -95,7 +97,7 @@ class ValidationsTest < ActiveRecord::TestCase
|
|
95
97
|
assert_raise(ActiveRecord::RecordInvalid) do
|
96
98
|
WrongReply.new.validate!(:special_case)
|
97
99
|
end
|
98
|
-
r = WrongReply.new(:
|
100
|
+
r = WrongReply.new(title: "Valid title", author_name: "secret", content: "Good")
|
99
101
|
assert r.validate!(:special_case)
|
100
102
|
end
|
101
103
|
|
@@ -107,7 +109,7 @@ class ValidationsTest < ActiveRecord::TestCase
|
|
107
109
|
|
108
110
|
def test_exception_on_create_bang_with_block
|
109
111
|
assert_raise(ActiveRecord::RecordInvalid) do
|
110
|
-
WrongReply.create!(
|
112
|
+
WrongReply.create!("title" => "OK") do |r|
|
111
113
|
r.content = nil
|
112
114
|
end
|
113
115
|
end
|
@@ -123,8 +125,8 @@ class ValidationsTest < ActiveRecord::TestCase
|
|
123
125
|
|
124
126
|
def test_save_without_validation
|
125
127
|
reply = WrongReply.new
|
126
|
-
|
127
|
-
assert reply.save(:
|
128
|
+
assert_not reply.save
|
129
|
+
assert reply.save(validate: false)
|
128
130
|
end
|
129
131
|
|
130
132
|
def test_validates_acceptance_of_with_non_existent_table
|
@@ -137,14 +139,23 @@ class ValidationsTest < ActiveRecord::TestCase
|
|
137
139
|
|
138
140
|
def test_throw_away_typing
|
139
141
|
d = Developer.new("name" => "David", "salary" => "100,000")
|
140
|
-
|
142
|
+
assert_not_predicate d, :valid?
|
141
143
|
assert_equal 100, d.salary
|
142
144
|
assert_equal "100,000", d.salary_before_type_cast
|
143
145
|
end
|
144
146
|
|
147
|
+
def test_validates_acceptance_of_with_undefined_attribute_methods
|
148
|
+
klass = Class.new(Topic)
|
149
|
+
klass.validates_acceptance_of(:approved)
|
150
|
+
topic = klass.new(approved: true)
|
151
|
+
klass.undefine_attribute_methods
|
152
|
+
assert topic.approved
|
153
|
+
end
|
154
|
+
|
145
155
|
def test_validates_acceptance_of_as_database_column
|
146
|
-
|
147
|
-
|
156
|
+
klass = Class.new(Topic)
|
157
|
+
klass.validates_acceptance_of(:approved)
|
158
|
+
topic = klass.create("approved" => true)
|
148
159
|
assert topic["approved"]
|
149
160
|
end
|
150
161
|
|
@@ -161,10 +172,10 @@ class ValidationsTest < ActiveRecord::TestCase
|
|
161
172
|
validates_numericality_of :wibble, only_integer: true
|
162
173
|
end
|
163
174
|
|
164
|
-
topic = klass.new(wibble:
|
165
|
-
topic.wibble.gsub!(
|
175
|
+
topic = klass.new(wibble: "123-4567")
|
176
|
+
topic.wibble.gsub!("-", "")
|
166
177
|
|
167
|
-
|
178
|
+
assert_predicate topic, :valid?
|
168
179
|
end
|
169
180
|
|
170
181
|
def test_numericality_validation_checks_against_raw_value
|
@@ -173,17 +184,41 @@ class ValidationsTest < ActiveRecord::TestCase
|
|
173
184
|
ActiveModel::Name.new(self, nil, "Topic")
|
174
185
|
end
|
175
186
|
attribute :wibble, :decimal, scale: 2, precision: 9
|
176
|
-
validates_numericality_of :wibble, greater_than_or_equal_to: BigDecimal
|
187
|
+
validates_numericality_of :wibble, greater_than_or_equal_to: BigDecimal("97.18")
|
177
188
|
end
|
178
189
|
|
179
|
-
|
180
|
-
|
181
|
-
|
190
|
+
["97.179", 97.179, BigDecimal("97.179")].each do |raw_value|
|
191
|
+
subject = klass.new(wibble: raw_value)
|
192
|
+
assert_equal BigDecimal("97.18"), subject.wibble
|
193
|
+
assert_predicate subject, :valid?
|
194
|
+
end
|
195
|
+
|
196
|
+
["97.174", 97.174, BigDecimal("97.174")].each do |raw_value|
|
197
|
+
subject = klass.new(wibble: raw_value)
|
198
|
+
assert_equal BigDecimal("97.17"), subject.wibble
|
199
|
+
assert_not_predicate subject, :valid?
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
def test_numericality_validator_wont_be_affected_by_custom_getter
|
204
|
+
price_estimate = PriceEstimate.new(price: 50)
|
205
|
+
|
206
|
+
assert_equal "$50.00", price_estimate.price
|
207
|
+
assert_equal 50, price_estimate.price_before_type_cast
|
208
|
+
assert_equal 50, price_estimate.read_attribute(:price)
|
209
|
+
|
210
|
+
assert_predicate price_estimate, :price_came_from_user?
|
211
|
+
assert_predicate price_estimate, :valid?
|
212
|
+
|
213
|
+
price_estimate.save!
|
214
|
+
|
215
|
+
assert_not_predicate price_estimate, :price_came_from_user?
|
216
|
+
assert_predicate price_estimate, :valid?
|
182
217
|
end
|
183
218
|
|
184
219
|
def test_acceptance_validator_doesnt_require_db_connection
|
185
220
|
klass = Class.new(ActiveRecord::Base) do
|
186
|
-
self.table_name =
|
221
|
+
self.table_name = "posts"
|
187
222
|
end
|
188
223
|
klass.reset_column_information
|
189
224
|
|
data/test/cases/view_test.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "cases/helper"
|
2
4
|
require "models/book"
|
3
5
|
require "support/schema_dumping_helper"
|
@@ -11,13 +13,14 @@ module ViewBehavior
|
|
11
13
|
end
|
12
14
|
|
13
15
|
class Ebook < ActiveRecord::Base
|
16
|
+
self.table_name = "ebooks"
|
14
17
|
self.primary_key = "id"
|
15
18
|
end
|
16
19
|
|
17
20
|
def setup
|
18
21
|
super
|
19
22
|
@connection = ActiveRecord::Base.connection
|
20
|
-
create_view "ebooks",
|
23
|
+
create_view "ebooks", <<~SQL
|
21
24
|
SELECT id, name, status FROM books WHERE format = 'ebook'
|
22
25
|
SQL
|
23
26
|
end
|
@@ -44,8 +47,7 @@ module ViewBehavior
|
|
44
47
|
|
45
48
|
def test_table_exists
|
46
49
|
view_name = Ebook.table_name
|
47
|
-
|
48
|
-
ActiveSupport::Deprecation.silence { assert @connection.table_exists?(view_name), "'#{view_name}' table should exist" }
|
50
|
+
assert_not @connection.table_exists?(view_name), "'#{view_name}' table should not exist"
|
49
51
|
end
|
50
52
|
|
51
53
|
def test_views_ara_valid_data_sources
|
@@ -60,7 +62,7 @@ module ViewBehavior
|
|
60
62
|
end
|
61
63
|
|
62
64
|
def test_attributes
|
63
|
-
assert_equal({"id" => 2, "name" => "Ruby for Rails", "status" => 0},
|
65
|
+
assert_equal({ "id" => 2, "name" => "Ruby for Rails", "status" => 0 },
|
64
66
|
Ebook.first.attributes)
|
65
67
|
end
|
66
68
|
|
@@ -75,142 +77,146 @@ module ViewBehavior
|
|
75
77
|
schema = dump_table_schema "ebooks"
|
76
78
|
assert_no_match %r{create_table "ebooks"}, schema
|
77
79
|
end
|
78
|
-
end
|
79
|
-
|
80
|
-
if ActiveRecord::Base.connection.supports_views?
|
81
|
-
class ViewWithPrimaryKeyTest < ActiveRecord::TestCase
|
82
|
-
include ViewBehavior
|
83
80
|
|
84
81
|
private
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
def drop_view(name)
|
90
|
-
@connection.execute "DROP VIEW #{name}" if @connection.view_exists? name
|
91
|
-
end
|
82
|
+
def quote_table_name(name)
|
83
|
+
@connection.quote_table_name(name)
|
84
|
+
end
|
92
85
|
end
|
93
86
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
class Paperback < ActiveRecord::Base; end
|
99
|
-
|
100
|
-
setup do
|
101
|
-
@connection = ActiveRecord::Base.connection
|
102
|
-
@connection.execute <<-SQL
|
103
|
-
CREATE VIEW paperbacks
|
104
|
-
AS SELECT name, status FROM books WHERE format = 'paperback'
|
105
|
-
SQL
|
106
|
-
end
|
107
|
-
|
108
|
-
teardown do
|
109
|
-
@connection.execute "DROP VIEW paperbacks" if @connection.view_exists? "paperbacks"
|
110
|
-
end
|
111
|
-
|
112
|
-
def test_reading
|
113
|
-
books = Paperback.all
|
114
|
-
assert_equal ["Agile Web Development with Rails"], books.map(&:name)
|
115
|
-
end
|
87
|
+
if ActiveRecord::Base.connection.supports_views?
|
88
|
+
class ViewWithPrimaryKeyTest < ActiveRecord::TestCase
|
89
|
+
include ViewBehavior
|
116
90
|
|
117
|
-
|
118
|
-
|
119
|
-
|
91
|
+
private
|
92
|
+
def create_view(name, query)
|
93
|
+
@connection.execute "CREATE VIEW #{quote_table_name(name)} AS #{query}"
|
94
|
+
end
|
120
95
|
|
121
|
-
|
122
|
-
|
123
|
-
|
96
|
+
def drop_view(name)
|
97
|
+
@connection.execute "DROP VIEW #{quote_table_name(name)}" if @connection.view_exists? name
|
98
|
+
end
|
124
99
|
end
|
125
100
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
ActiveSupport::Deprecation.silence { assert @connection.table_exists?(view_name), "'#{view_name}' table should exist" }
|
130
|
-
end
|
101
|
+
class ViewWithoutPrimaryKeyTest < ActiveRecord::TestCase
|
102
|
+
include SchemaDumpingHelper
|
103
|
+
fixtures :books
|
131
104
|
|
132
|
-
|
133
|
-
assert_equal([["name", :string],
|
134
|
-
["status", :integer]], Paperback.columns.map { |c| [c.name, c.type] })
|
135
|
-
end
|
105
|
+
class Paperback < ActiveRecord::Base; end
|
136
106
|
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
107
|
+
setup do
|
108
|
+
@connection = ActiveRecord::Base.connection
|
109
|
+
@connection.execute <<~SQL
|
110
|
+
CREATE VIEW paperbacks
|
111
|
+
AS SELECT name, status FROM books WHERE format = 'paperback'
|
112
|
+
SQL
|
113
|
+
end
|
141
114
|
|
142
|
-
|
143
|
-
|
144
|
-
|
115
|
+
teardown do
|
116
|
+
@connection.execute "DROP VIEW paperbacks" if @connection.view_exists? "paperbacks"
|
117
|
+
end
|
145
118
|
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
end
|
119
|
+
def test_reading
|
120
|
+
books = Paperback.all
|
121
|
+
assert_equal ["Agile Web Development with Rails"], books.map(&:name)
|
122
|
+
end
|
151
123
|
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
self.use_transactional_tests = false
|
156
|
-
fixtures :books
|
124
|
+
def test_views
|
125
|
+
assert_equal [Paperback.table_name], @connection.views
|
126
|
+
end
|
157
127
|
|
158
|
-
|
159
|
-
|
160
|
-
|
128
|
+
def test_view_exists
|
129
|
+
view_name = Paperback.table_name
|
130
|
+
assert @connection.view_exists?(view_name), "'#{view_name}' view should exist"
|
131
|
+
end
|
161
132
|
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
AS SELECT id, name, status, format FROM books WHERE format = 'paperback'
|
167
|
-
SQL
|
168
|
-
end
|
133
|
+
def test_table_exists
|
134
|
+
view_name = Paperback.table_name
|
135
|
+
assert_not @connection.table_exists?(view_name), "'#{view_name}' table should not exist"
|
136
|
+
end
|
169
137
|
|
170
|
-
|
171
|
-
|
172
|
-
|
138
|
+
def test_column_definitions
|
139
|
+
assert_equal([["name", :string],
|
140
|
+
["status", :integer]], Paperback.columns.map { |c| [c.name, c.type] })
|
141
|
+
end
|
173
142
|
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
book.reload
|
179
|
-
assert_equal "AWDwR", book.name
|
180
|
-
end
|
143
|
+
def test_attributes
|
144
|
+
assert_equal({ "name" => "Agile Web Development with Rails", "status" => 2 },
|
145
|
+
Paperback.first.attributes)
|
146
|
+
end
|
181
147
|
|
182
|
-
|
183
|
-
|
148
|
+
def test_does_not_have_a_primary_key
|
149
|
+
assert_nil Paperback.primary_key
|
150
|
+
end
|
184
151
|
|
185
|
-
|
186
|
-
|
152
|
+
def test_does_not_dump_view_as_table
|
153
|
+
schema = dump_table_schema "paperbacks"
|
154
|
+
assert_no_match %r{create_table "paperbacks"}, schema
|
155
|
+
end
|
187
156
|
end
|
188
157
|
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
158
|
+
# sqlite dose not support CREATE, INSERT, and DELETE for VIEW
|
159
|
+
if current_adapter?(:Mysql2Adapter, :SQLServerAdapter, :PostgreSQLAdapter, :IBM_DBAdapter)
|
160
|
+
|
161
|
+
class UpdateableViewTest < ActiveRecord::TestCase
|
162
|
+
self.use_transactional_tests = false
|
163
|
+
fixtures :books
|
164
|
+
|
165
|
+
class PrintedBook < ActiveRecord::Base
|
166
|
+
self.primary_key = "id"
|
167
|
+
end
|
168
|
+
|
169
|
+
setup do
|
170
|
+
@connection = ActiveRecord::Base.connection
|
171
|
+
@connection.execute <<~SQL
|
172
|
+
CREATE VIEW printed_books
|
173
|
+
AS SELECT id, name, status, format FROM books WHERE format = 'paperback'
|
174
|
+
SQL
|
175
|
+
end
|
176
|
+
|
177
|
+
teardown do
|
178
|
+
@connection.execute "DROP VIEW printed_books" if @connection.view_exists? "printed_books"
|
179
|
+
end
|
180
|
+
|
181
|
+
def test_update_record
|
182
|
+
book = PrintedBook.first
|
183
|
+
book.name = "AWDwR"
|
184
|
+
book.save!
|
185
|
+
book.reload
|
186
|
+
assert_equal "AWDwR", book.name
|
187
|
+
end
|
188
|
+
|
189
|
+
def test_insert_record
|
190
|
+
PrintedBook.create! name: "Rails in Action", status: 0, format: "paperback"
|
191
|
+
|
192
|
+
new_book = PrintedBook.last
|
193
|
+
assert_equal "Rails in Action", new_book.name
|
194
|
+
end
|
195
|
+
|
196
|
+
def test_update_record_to_fail_view_conditions
|
197
|
+
book = PrintedBook.first
|
198
|
+
book.format = "ebook"
|
199
|
+
book.save!
|
200
|
+
|
201
|
+
assert_raises ActiveRecord::RecordNotFound do
|
202
|
+
book.reload
|
203
|
+
end
|
204
|
+
end
|
196
205
|
end
|
197
|
-
end
|
198
|
-
end
|
199
|
-
end # end fo `if current_adapter?(:Mysql2Adapter, :PostgreSQLAdapter, :SQLServerAdapter)`
|
200
|
-
end # end fo `if ActiveRecord::Base.connection.supports_views?`
|
206
|
+
end # end of `if current_adapter?(:Mysql2Adapter, :PostgreSQLAdapter, :SQLServerAdapter)`
|
207
|
+
end # end of `if ActiveRecord::Base.connection.supports_views?`
|
201
208
|
|
202
|
-
if ActiveRecord::Base.connection.
|
203
|
-
|
204
|
-
|
205
|
-
include ViewBehavior
|
209
|
+
if ActiveRecord::Base.connection.supports_materialized_views?
|
210
|
+
class MaterializedViewTest < ActiveRecord::PostgreSQLTestCase
|
211
|
+
include ViewBehavior
|
206
212
|
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
213
|
+
private
|
214
|
+
def create_view(name, query)
|
215
|
+
@connection.execute "CREATE MATERIALIZED VIEW #{quote_table_name(name)} AS #{query}"
|
216
|
+
end
|
211
217
|
|
212
|
-
|
213
|
-
|
218
|
+
def drop_view(name)
|
219
|
+
@connection.execute "DROP MATERIALIZED VIEW #{quote_table_name(name)}" if @connection.view_exists? name
|
220
|
+
end
|
214
221
|
end
|
215
222
|
end
|
216
|
-
end
|
@@ -1,15 +1,17 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "cases/helper"
|
4
|
+
require "models/topic"
|
5
|
+
require "models/reply"
|
6
|
+
require "models/post"
|
7
|
+
require "models/author"
|
6
8
|
|
7
9
|
class YamlSerializationTest < ActiveRecord::TestCase
|
8
|
-
fixtures :topics, :authors, :posts
|
10
|
+
fixtures :topics, :authors, :author_addresses, :posts
|
9
11
|
|
10
12
|
def test_to_yaml_with_time_with_zone_should_not_raise_exception
|
11
13
|
with_timezone_config aware_attributes: true, zone: "Pacific Time (US & Canada)" do
|
12
|
-
topic = Topic.new(:
|
14
|
+
topic = Topic.new(written_on: DateTime.now)
|
13
15
|
assert_nothing_raised { topic.to_yaml }
|
14
16
|
end
|
15
17
|
end
|
@@ -17,26 +19,26 @@ class YamlSerializationTest < ActiveRecord::TestCase
|
|
17
19
|
def test_roundtrip
|
18
20
|
topic = Topic.first
|
19
21
|
assert topic
|
20
|
-
t =
|
22
|
+
t = yaml_load YAML.dump topic
|
21
23
|
assert_equal topic, t
|
22
24
|
end
|
23
25
|
|
24
26
|
def test_roundtrip_serialized_column
|
25
|
-
topic = Topic.new(:
|
26
|
-
assert_equal({:
|
27
|
+
topic = Topic.new(content: { omg: :lol })
|
28
|
+
assert_equal({ omg: :lol }, yaml_load(YAML.dump(topic)).content)
|
27
29
|
end
|
28
30
|
|
29
31
|
def test_psych_roundtrip
|
30
32
|
topic = Topic.first
|
31
33
|
assert topic
|
32
|
-
t =
|
34
|
+
t = yaml_load Psych.dump topic
|
33
35
|
assert_equal topic, t
|
34
36
|
end
|
35
37
|
|
36
38
|
def test_psych_roundtrip_new_object
|
37
39
|
topic = Topic.new
|
38
40
|
assert topic
|
39
|
-
t =
|
41
|
+
t = yaml_load Psych.dump topic
|
40
42
|
assert_equal topic.attributes, t.attributes
|
41
43
|
end
|
42
44
|
|
@@ -47,38 +49,38 @@ class YamlSerializationTest < ActiveRecord::TestCase
|
|
47
49
|
def test_raw_types_are_not_changed_on_round_trip
|
48
50
|
topic = Topic.new(parent_id: "123")
|
49
51
|
assert_equal "123", topic.parent_id_before_type_cast
|
50
|
-
assert_equal "123",
|
52
|
+
assert_equal "123", yaml_load(YAML.dump(topic)).parent_id_before_type_cast
|
51
53
|
end
|
52
54
|
|
53
55
|
def test_cast_types_are_not_changed_on_round_trip
|
54
56
|
topic = Topic.new(parent_id: "123")
|
55
57
|
assert_equal 123, topic.parent_id
|
56
|
-
assert_equal 123,
|
58
|
+
assert_equal 123, yaml_load(YAML.dump(topic)).parent_id
|
57
59
|
end
|
58
60
|
|
59
61
|
def test_new_records_remain_new_after_round_trip
|
60
62
|
topic = Topic.new
|
61
63
|
|
62
64
|
assert topic.new_record?, "Sanity check that new records are new"
|
63
|
-
assert
|
65
|
+
assert yaml_load(YAML.dump(topic)).new_record?, "Record should be new after deserialization"
|
64
66
|
|
65
67
|
topic.save!
|
66
68
|
|
67
69
|
assert_not topic.new_record?, "Saved records are not new"
|
68
|
-
assert_not
|
70
|
+
assert_not yaml_load(YAML.dump(topic)).new_record?, "Saved record should not be new after deserialization"
|
69
71
|
|
70
|
-
topic = Topic.select(
|
72
|
+
topic = Topic.select("title").last
|
71
73
|
|
72
74
|
assert_not topic.new_record?, "Loaded records without ID are not new"
|
73
|
-
assert_not
|
75
|
+
assert_not yaml_load(YAML.dump(topic)).new_record?, "Record should not be new after deserialization"
|
74
76
|
end
|
75
77
|
|
76
78
|
def test_types_of_virtual_columns_are_not_changed_on_round_trip
|
77
|
-
author = Author.select(
|
79
|
+
author = Author.select("authors.*, count(posts.id) as posts_count")
|
78
80
|
.joins(:posts)
|
79
|
-
.group(
|
81
|
+
.group("authors.id", "authors.name", "authors.author_address_id", "authors.author_address_extra_id", "authors.organization_id", "authors.owned_essay_id")
|
80
82
|
.first
|
81
|
-
dumped =
|
83
|
+
dumped = yaml_load(YAML.dump(author))
|
82
84
|
|
83
85
|
assert_equal 5, author.posts_count
|
84
86
|
assert_equal 5, dumped.posts_count
|
@@ -88,34 +90,77 @@ class YamlSerializationTest < ActiveRecord::TestCase
|
|
88
90
|
coder = {}
|
89
91
|
Topic.first.encode_with(coder)
|
90
92
|
|
91
|
-
assert coder[
|
93
|
+
assert coder["active_record_yaml_version"]
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_deserializing_rails_v2_yaml
|
97
|
+
topic = yaml_load(yaml_fixture("rails_v2"))
|
98
|
+
|
99
|
+
assert_not_predicate topic, :new_record?
|
100
|
+
assert_equal 1, topic.id
|
101
|
+
assert_equal "The First Topic", topic.title
|
102
|
+
assert_equal "Have a nice day", topic.content
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_deserializing_rails_v1_mysql_yaml
|
106
|
+
topic = yaml_load(yaml_fixture("rails_v1_mysql"))
|
107
|
+
|
108
|
+
assert_not_predicate topic, :new_record?
|
109
|
+
assert_equal 1, topic.id
|
110
|
+
assert_equal "The First Topic", topic.title
|
111
|
+
assert_equal "Have a nice day", topic.content
|
92
112
|
end
|
93
113
|
|
94
114
|
def test_deserializing_rails_41_yaml
|
95
|
-
topic =
|
115
|
+
topic = assert_deprecated do
|
116
|
+
yaml_load(yaml_fixture("rails_4_1"))
|
117
|
+
end
|
96
118
|
|
97
|
-
|
98
|
-
|
119
|
+
assert_predicate topic, :new_record?
|
120
|
+
assert_nil topic.id
|
99
121
|
assert_equal "The First Topic", topic.title
|
100
122
|
assert_equal({ omg: :lol }, topic.content)
|
101
123
|
end
|
102
124
|
|
103
125
|
def test_deserializing_rails_4_2_0_yaml
|
104
|
-
topic =
|
126
|
+
topic = assert_deprecated do
|
127
|
+
yaml_load(yaml_fixture("rails_4_2_0"))
|
128
|
+
end
|
105
129
|
|
106
|
-
|
130
|
+
assert_not_predicate topic, :new_record?
|
107
131
|
assert_equal 1, topic.id
|
108
132
|
assert_equal "The First Topic", topic.title
|
109
133
|
assert_equal("Have a nice day", topic.content)
|
110
134
|
end
|
111
135
|
|
112
|
-
|
136
|
+
def test_yaml_encoding_keeps_mutations
|
137
|
+
author = Author.first
|
138
|
+
author.name = "Sean"
|
139
|
+
dumped = yaml_load(YAML.dump(author))
|
140
|
+
|
141
|
+
assert_equal "Sean", dumped.name
|
142
|
+
assert_equal author.name_was, dumped.name_was
|
143
|
+
assert_equal author.changes, dumped.changes
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_yaml_encoding_keeps_false_values
|
147
|
+
topic = Topic.first
|
148
|
+
topic.approved = false
|
149
|
+
dumped = yaml_load(YAML.dump(topic))
|
113
150
|
|
114
|
-
|
115
|
-
path = File.expand_path(
|
116
|
-
"../../support/yaml_compatibility_fixtures/#{file_name}.yml",
|
117
|
-
__FILE__
|
118
|
-
)
|
119
|
-
File.read(path)
|
151
|
+
assert_equal false, dumped.approved
|
120
152
|
end
|
153
|
+
|
154
|
+
private
|
155
|
+
def yaml_load(payload)
|
156
|
+
YAML.respond_to?(:unsafe_load) ? YAML.unsafe_load(payload) : YAML.load(payload)
|
157
|
+
end
|
158
|
+
|
159
|
+
def yaml_fixture(file_name)
|
160
|
+
path = File.expand_path(
|
161
|
+
"support/yaml_compatibility_fixtures/#{file_name}.yml",
|
162
|
+
TEST_ROOT
|
163
|
+
)
|
164
|
+
File.read(path)
|
165
|
+
end
|
121
166
|
end
|