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,16 +1,19 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "cases/helper"
|
4
|
+
require "models/post"
|
5
|
+
require "models/comment"
|
6
|
+
require "models/developer"
|
7
|
+
require "models/project"
|
8
|
+
require "models/computer"
|
9
|
+
require "models/cat"
|
10
|
+
require "concurrent/atomic/cyclic_barrier"
|
8
11
|
|
9
12
|
class DefaultScopingTest < ActiveRecord::TestCase
|
10
13
|
fixtures :developers, :posts, :comments
|
11
14
|
|
12
15
|
def test_default_scope
|
13
|
-
expected = Developer.all.merge!(:
|
16
|
+
expected = Developer.all.merge!(order: "salary DESC").to_a.collect(&:salary)
|
14
17
|
received = DeveloperOrderedBySalary.all.collect(&:salary)
|
15
18
|
assert_equal expected, received
|
16
19
|
end
|
@@ -49,59 +52,48 @@ class DefaultScopingTest < ActiveRecord::TestCase
|
|
49
52
|
end
|
50
53
|
|
51
54
|
def test_default_scope_with_conditions_string
|
52
|
-
assert_equal Developer.where(name:
|
53
|
-
|
55
|
+
assert_equal Developer.where(name: "David").map(&:id).sort, DeveloperCalledDavid.all.map(&:id).sort
|
56
|
+
assert_nil DeveloperCalledDavid.create!.name
|
54
57
|
end
|
55
58
|
|
56
59
|
def test_default_scope_with_conditions_hash
|
57
|
-
assert_equal Developer.where(name:
|
58
|
-
assert_equal
|
59
|
-
end
|
60
|
-
|
61
|
-
unless in_memory_db?
|
62
|
-
def test_default_scoping_with_threads
|
63
|
-
2.times do
|
64
|
-
Thread.new {
|
65
|
-
assert DeveloperOrderedBySalary.all.to_sql.include?('salary DESC')
|
66
|
-
DeveloperOrderedBySalary.connection.close
|
67
|
-
}.join
|
68
|
-
end
|
69
|
-
end
|
60
|
+
assert_equal Developer.where(name: "Jamis").map(&:id).sort, DeveloperCalledJamis.all.map(&:id).sort
|
61
|
+
assert_equal "Jamis", DeveloperCalledJamis.create!.name
|
70
62
|
end
|
71
63
|
|
72
64
|
def test_default_scope_with_inheritance
|
73
65
|
wheres = InheritedPoorDeveloperCalledJamis.all.where_values_hash
|
74
|
-
assert_equal "Jamis", wheres[
|
75
|
-
assert_equal 50000, wheres[
|
66
|
+
assert_equal "Jamis", wheres["name"]
|
67
|
+
assert_equal 50000, wheres["salary"]
|
76
68
|
end
|
77
69
|
|
78
70
|
def test_default_scope_with_module_includes
|
79
71
|
wheres = ModuleIncludedPoorDeveloperCalledJamis.all.where_values_hash
|
80
|
-
assert_equal "Jamis", wheres[
|
81
|
-
assert_equal 50000, wheres[
|
72
|
+
assert_equal "Jamis", wheres["name"]
|
73
|
+
assert_equal 50000, wheres["salary"]
|
82
74
|
end
|
83
75
|
|
84
76
|
def test_default_scope_with_multiple_calls
|
85
77
|
wheres = MultiplePoorDeveloperCalledJamis.all.where_values_hash
|
86
|
-
assert_equal "Jamis", wheres[
|
87
|
-
assert_equal 50000, wheres[
|
78
|
+
assert_equal "Jamis", wheres["name"]
|
79
|
+
assert_equal 50000, wheres["salary"]
|
88
80
|
end
|
89
81
|
|
90
82
|
def test_scope_overwrites_default
|
91
|
-
expected = Developer.all.merge!(order:
|
83
|
+
expected = Developer.all.merge!(order: "salary DESC, name DESC").to_a.collect(&:name)
|
92
84
|
received = DeveloperOrderedBySalary.by_name.to_a.collect(&:name)
|
93
85
|
assert_equal expected, received
|
94
86
|
end
|
95
87
|
|
96
88
|
def test_reorder_overrides_default_scope_order
|
97
|
-
expected = Developer.order(
|
98
|
-
received = DeveloperOrderedBySalary.reorder(
|
89
|
+
expected = Developer.order("name DESC").collect(&:name)
|
90
|
+
received = DeveloperOrderedBySalary.reorder("name DESC").collect(&:name)
|
99
91
|
assert_equal expected, received
|
100
92
|
end
|
101
93
|
|
102
94
|
def test_order_after_reorder_combines_orders
|
103
|
-
expected = Developer.order(
|
104
|
-
received = Developer.order(
|
95
|
+
expected = Developer.order("name DESC, id DESC").collect { |dev| [dev.name, dev.id] }
|
96
|
+
received = Developer.order("name ASC").reorder("name DESC").order("id DESC").collect { |dev| [dev.name, dev.id] }
|
105
97
|
assert_equal expected, received
|
106
98
|
end
|
107
99
|
|
@@ -112,107 +104,107 @@ class DefaultScopingTest < ActiveRecord::TestCase
|
|
112
104
|
end
|
113
105
|
|
114
106
|
def test_unscope_after_reordering_and_combining
|
115
|
-
expected = Developer.order(
|
116
|
-
received = DeveloperOrderedBySalary.reorder(
|
107
|
+
expected = Developer.order("id DESC, name DESC").collect { |dev| [dev.name, dev.id] }
|
108
|
+
received = DeveloperOrderedBySalary.reorder("name DESC").unscope(:order).order("id DESC, name DESC").collect { |dev| [dev.name, dev.id] }
|
117
109
|
assert_equal expected, received
|
118
110
|
|
119
111
|
expected_2 = Developer.all.collect { |dev| [dev.name, dev.id] }
|
120
|
-
received_2 = Developer.order(
|
112
|
+
received_2 = Developer.order("id DESC, name DESC").unscope(:order).collect { |dev| [dev.name, dev.id] }
|
121
113
|
assert_equal expected_2, received_2
|
122
114
|
|
123
115
|
expected_3 = Developer.all.collect { |dev| [dev.name, dev.id] }
|
124
|
-
received_3 = Developer.reorder(
|
116
|
+
received_3 = Developer.reorder("name DESC").unscope(:order).collect { |dev| [dev.name, dev.id] }
|
125
117
|
assert_equal expected_3, received_3
|
126
118
|
end
|
127
119
|
|
128
120
|
def test_unscope_with_where_attributes
|
129
|
-
expected = Developer.order(
|
130
|
-
received = DeveloperOrderedBySalary.where(name:
|
131
|
-
assert_equal expected, received
|
121
|
+
expected = Developer.order("salary DESC").collect(&:name)
|
122
|
+
received = DeveloperOrderedBySalary.where(name: "David").unscope(where: :name).collect(&:name)
|
123
|
+
assert_equal expected.sort, received.sort
|
132
124
|
|
133
|
-
expected_2 = Developer.order(
|
134
|
-
received_2 = DeveloperOrderedBySalary.select("id").where("name" => "Jamis").unscope({:
|
135
|
-
assert_equal expected_2, received_2
|
125
|
+
expected_2 = Developer.order("salary DESC").collect(&:name)
|
126
|
+
received_2 = DeveloperOrderedBySalary.select("id").where("name" => "Jamis").unscope({ where: :name }, :select).collect(&:name)
|
127
|
+
assert_equal expected_2.sort, received_2.sort
|
136
128
|
|
137
|
-
expected_3 = Developer.order(
|
129
|
+
expected_3 = Developer.order("salary DESC").collect(&:name)
|
138
130
|
received_3 = DeveloperOrderedBySalary.select("id").where("name" => "Jamis").unscope(:select, :where).collect(&:name)
|
139
|
-
assert_equal expected_3, received_3
|
131
|
+
assert_equal expected_3.sort, received_3.sort
|
140
132
|
|
141
|
-
expected_4 = Developer.order(
|
133
|
+
expected_4 = Developer.order("salary DESC").collect(&:name)
|
142
134
|
received_4 = DeveloperOrderedBySalary.where.not("name" => "Jamis").unscope(where: :name).collect(&:name)
|
143
|
-
assert_equal expected_4, received_4
|
135
|
+
assert_equal expected_4.sort, received_4.sort
|
144
136
|
|
145
|
-
expected_5 = Developer.order(
|
137
|
+
expected_5 = Developer.order("salary DESC").collect(&:name)
|
146
138
|
received_5 = DeveloperOrderedBySalary.where.not("name" => ["Jamis", "David"]).unscope(where: :name).collect(&:name)
|
147
|
-
assert_equal expected_5, received_5
|
139
|
+
assert_equal expected_5.sort, received_5.sort
|
148
140
|
|
149
|
-
expected_6 = Developer.order(
|
150
|
-
received_6 = DeveloperOrderedBySalary.where(Developer.arel_table[
|
151
|
-
assert_equal expected_6, received_6
|
141
|
+
expected_6 = Developer.order("salary DESC").collect(&:name)
|
142
|
+
received_6 = DeveloperOrderedBySalary.where(Developer.arel_table["name"].eq("David")).unscope(where: :name).collect(&:name)
|
143
|
+
assert_equal expected_6.sort, received_6.sort
|
152
144
|
|
153
|
-
expected_7 = Developer.order(
|
154
|
-
received_7 = DeveloperOrderedBySalary.where(Developer.arel_table[:name].eq(
|
155
|
-
assert_equal expected_7, received_7
|
145
|
+
expected_7 = Developer.order("salary DESC").collect(&:name)
|
146
|
+
received_7 = DeveloperOrderedBySalary.where(Developer.arel_table[:name].eq("David")).unscope(where: :name).collect(&:name)
|
147
|
+
assert_equal expected_7.sort, received_7.sort
|
156
148
|
end
|
157
149
|
|
158
150
|
def test_unscope_comparison_where_clauses
|
159
151
|
# unscoped for WHERE (`developers`.`id` <= 2)
|
160
|
-
expected = Developer.order(
|
152
|
+
expected = Developer.order("salary DESC").collect(&:name)
|
161
153
|
received = DeveloperOrderedBySalary.where(id: -Float::INFINITY..2).unscope(where: :id).collect { |dev| dev.name }
|
162
|
-
assert_equal expected, received
|
154
|
+
assert_equal expected.sort, received.sort
|
163
155
|
|
164
156
|
# unscoped for WHERE (`developers`.`id` < 2)
|
165
|
-
expected = Developer.order(
|
157
|
+
expected = Developer.order("salary DESC").collect(&:name)
|
166
158
|
received = DeveloperOrderedBySalary.where(id: -Float::INFINITY...2).unscope(where: :id).collect { |dev| dev.name }
|
167
|
-
assert_equal expected, received
|
159
|
+
assert_equal expected.sort, received.sort
|
168
160
|
end
|
169
161
|
|
170
162
|
def test_unscope_multiple_where_clauses
|
171
|
-
expected = Developer.order(
|
172
|
-
received = DeveloperOrderedBySalary.where(name:
|
173
|
-
assert_equal expected, received
|
163
|
+
expected = Developer.order("salary DESC").collect(&:name)
|
164
|
+
received = DeveloperOrderedBySalary.where(name: "Jamis").where(id: 1).unscope(where: [:name, :id]).collect(&:name)
|
165
|
+
assert_equal expected.sort, received.sort
|
174
166
|
end
|
175
167
|
|
176
168
|
def test_unscope_string_where_clauses_involved
|
177
|
-
dev_relation = Developer.order(
|
169
|
+
dev_relation = Developer.order("salary DESC").where("legacy_created_at > ?", 1.year.ago)
|
178
170
|
expected = dev_relation.collect(&:name)
|
179
171
|
|
180
|
-
dev_ordered_relation = DeveloperOrderedBySalary.where(name:
|
172
|
+
dev_ordered_relation = DeveloperOrderedBySalary.where(name: "Jamis").where("legacy_created_at > ?", 1.year.ago)
|
181
173
|
received = dev_ordered_relation.unscope(where: [:name]).collect(&:name)
|
182
174
|
|
183
|
-
assert_equal expected, received
|
175
|
+
assert_equal expected.sort, received.sort
|
184
176
|
end
|
185
177
|
|
186
178
|
def test_unscope_with_grouping_attributes
|
187
|
-
expected = Developer.order(
|
179
|
+
expected = Developer.order("salary DESC").collect(&:name)
|
188
180
|
received = DeveloperOrderedBySalary.group(:name).unscope(:group).collect(&:name)
|
189
|
-
assert_equal expected, received
|
181
|
+
assert_equal expected.sort, received.sort
|
190
182
|
|
191
|
-
expected_2 = Developer.order(
|
183
|
+
expected_2 = Developer.order("salary DESC").collect(&:name)
|
192
184
|
received_2 = DeveloperOrderedBySalary.group("name").unscope(:group).collect(&:name)
|
193
|
-
assert_equal expected_2, received_2
|
185
|
+
assert_equal expected_2.sort, received_2.sort
|
194
186
|
end
|
195
187
|
|
196
188
|
def test_unscope_with_limit_in_query
|
197
|
-
expected = Developer.order(
|
189
|
+
expected = Developer.order("salary DESC").collect(&:name)
|
198
190
|
received = DeveloperOrderedBySalary.limit(1).unscope(:limit).collect(&:name)
|
199
|
-
assert_equal expected, received
|
191
|
+
assert_equal expected.sort, received.sort
|
200
192
|
end
|
201
193
|
|
202
194
|
def test_order_to_unscope_reordering
|
203
|
-
scope = DeveloperOrderedBySalary.order(
|
204
|
-
|
195
|
+
scope = DeveloperOrderedBySalary.order("salary DESC, name ASC").reverse_order.unscope(:order)
|
196
|
+
assert_no_match(/order/i, scope.to_sql)
|
205
197
|
end
|
206
198
|
|
207
199
|
def test_unscope_reverse_order
|
208
200
|
expected = Developer.all.collect(&:name)
|
209
|
-
received = Developer.order(
|
201
|
+
received = Developer.order("salary DESC").reverse_order.unscope(:order).collect(&:name)
|
210
202
|
assert_equal expected, received
|
211
203
|
end
|
212
204
|
|
213
205
|
def test_unscope_select
|
214
|
-
expected = Developer.order(
|
215
|
-
received = Developer.order(
|
206
|
+
expected = Developer.order("salary ASC").collect(&:name)
|
207
|
+
received = Developer.order("salary DESC").reverse_order.select(:name).unscope(:select).collect(&:name)
|
216
208
|
assert_equal expected, received
|
217
209
|
|
218
210
|
expected_2 = Developer.all.collect(&:id)
|
@@ -228,7 +220,19 @@ class DefaultScopingTest < ActiveRecord::TestCase
|
|
228
220
|
|
229
221
|
def test_unscope_joins_and_select_on_developers_projects
|
230
222
|
expected = Developer.all.collect(&:name)
|
231
|
-
received = Developer.joins(
|
223
|
+
received = Developer.joins("JOIN developers_projects ON id = developer_id").select(:id).unscope(:joins, :select).collect(&:name)
|
224
|
+
assert_equal expected, received
|
225
|
+
end
|
226
|
+
|
227
|
+
def test_unscope_left_outer_joins
|
228
|
+
expected = Developer.all.collect(&:name)
|
229
|
+
received = Developer.left_outer_joins(:projects).select(:id).unscope(:left_outer_joins, :select).collect(&:name)
|
230
|
+
assert_equal expected, received
|
231
|
+
end
|
232
|
+
|
233
|
+
def test_unscope_left_joins
|
234
|
+
expected = Developer.all.collect(&:name)
|
235
|
+
received = Developer.left_joins(:projects).select(:id).unscope(:left_joins, :select).collect(&:name)
|
232
236
|
assert_equal expected, received
|
233
237
|
end
|
234
238
|
|
@@ -249,8 +253,8 @@ class DefaultScopingTest < ActiveRecord::TestCase
|
|
249
253
|
scope :by_name, -> name { unscope(where: :name).where(name: name) }
|
250
254
|
end
|
251
255
|
|
252
|
-
expected = developer_klass.where(name:
|
253
|
-
received = developer_klass.where(name:
|
256
|
+
expected = developer_klass.where(name: "Jamis").collect { |dev| [dev.name, dev.id] }
|
257
|
+
received = developer_klass.where(name: "David").by_name("Jamis").collect { |dev| [dev.name, dev.id] }
|
254
258
|
assert_equal expected, received
|
255
259
|
end
|
256
260
|
|
@@ -264,11 +268,11 @@ class DefaultScopingTest < ActiveRecord::TestCase
|
|
264
268
|
end
|
265
269
|
|
266
270
|
assert_raises(ArgumentError) do
|
267
|
-
Developer.order(
|
271
|
+
Developer.order("name DESC").reverse_order.unscope(:reverse_order)
|
268
272
|
end
|
269
273
|
|
270
274
|
assert_raises(ArgumentError) do
|
271
|
-
Developer.order(
|
275
|
+
Developer.order("name DESC").where(name: "Jamis").unscope()
|
272
276
|
end
|
273
277
|
end
|
274
278
|
|
@@ -298,40 +302,40 @@ class DefaultScopingTest < ActiveRecord::TestCase
|
|
298
302
|
|
299
303
|
def test_unscope_merging
|
300
304
|
merged = Developer.where(name: "Jamis").merge(Developer.unscope(:where))
|
301
|
-
|
302
|
-
|
305
|
+
assert_empty merged.where_clause
|
306
|
+
assert_not_empty merged.where(name: "Jon").where_clause
|
303
307
|
end
|
304
308
|
|
305
309
|
def test_order_in_default_scope_should_not_prevail
|
306
|
-
expected = Developer.all.merge!(order:
|
307
|
-
received = DeveloperOrderedBySalary.all.merge!(order:
|
310
|
+
expected = Developer.all.merge!(order: "salary desc").to_a.collect(&:salary)
|
311
|
+
received = DeveloperOrderedBySalary.all.merge!(order: "salary").to_a.collect(&:salary)
|
308
312
|
assert_equal expected, received
|
309
313
|
end
|
310
314
|
|
311
315
|
def test_create_attribute_overwrites_default_scoping
|
312
|
-
assert_equal
|
313
|
-
assert_equal 200000, PoorDeveloperCalledJamis.create!(:
|
316
|
+
assert_equal "David", PoorDeveloperCalledJamis.create!(name: "David").name
|
317
|
+
assert_equal 200000, PoorDeveloperCalledJamis.create!(name: "David", salary: 200000).salary
|
314
318
|
end
|
315
319
|
|
316
320
|
def test_create_attribute_overwrites_default_values
|
317
|
-
|
318
|
-
assert_equal 50000, PoorDeveloperCalledJamis.create!(:
|
321
|
+
assert_nil PoorDeveloperCalledJamis.create!(salary: nil).salary
|
322
|
+
assert_equal 50000, PoorDeveloperCalledJamis.create!(name: "David").salary
|
319
323
|
end
|
320
324
|
|
321
325
|
def test_default_scope_attribute
|
322
|
-
jamis = PoorDeveloperCalledJamis.new(:
|
326
|
+
jamis = PoorDeveloperCalledJamis.new(name: "David")
|
323
327
|
assert_equal 50000, jamis.salary
|
324
328
|
end
|
325
329
|
|
326
330
|
def test_where_attribute
|
327
|
-
aaron = PoorDeveloperCalledJamis.where(:
|
331
|
+
aaron = PoorDeveloperCalledJamis.where(salary: 20).new(name: "Aaron")
|
328
332
|
assert_equal 20, aaron.salary
|
329
|
-
assert_equal
|
333
|
+
assert_equal "Aaron", aaron.name
|
330
334
|
end
|
331
335
|
|
332
336
|
def test_where_attribute_merge
|
333
|
-
aaron = PoorDeveloperCalledJamis.where(:
|
334
|
-
assert_equal
|
337
|
+
aaron = PoorDeveloperCalledJamis.where(name: "foo").new(name: "Aaron")
|
338
|
+
assert_equal "Aaron", aaron.name
|
335
339
|
end
|
336
340
|
|
337
341
|
def test_scope_composed_by_limit_and_then_offset_is_equal_to_scope_composed_by_offset_and_then_limit
|
@@ -341,33 +345,53 @@ class DefaultScopingTest < ActiveRecord::TestCase
|
|
341
345
|
end
|
342
346
|
|
343
347
|
def test_create_with_merge
|
344
|
-
aaron = PoorDeveloperCalledJamis.create_with(:
|
345
|
-
|
348
|
+
aaron = PoorDeveloperCalledJamis.create_with(name: "foo", salary: 20).merge(
|
349
|
+
PoorDeveloperCalledJamis.create_with(name: "Aaron")).new
|
346
350
|
assert_equal 20, aaron.salary
|
347
|
-
assert_equal
|
351
|
+
assert_equal "Aaron", aaron.name
|
348
352
|
|
349
|
-
aaron = PoorDeveloperCalledJamis.create_with(:
|
350
|
-
create_with(:
|
353
|
+
aaron = PoorDeveloperCalledJamis.create_with(name: "foo", salary: 20).
|
354
|
+
create_with(name: "Aaron").new
|
351
355
|
assert_equal 20, aaron.salary
|
352
|
-
assert_equal
|
356
|
+
assert_equal "Aaron", aaron.name
|
357
|
+
end
|
358
|
+
|
359
|
+
def test_create_with_using_both_string_and_symbol
|
360
|
+
jamis = PoorDeveloperCalledJamis.create_with(name: "foo").create_with("name" => "Aaron").new
|
361
|
+
assert_equal "Aaron", jamis.name
|
353
362
|
end
|
354
363
|
|
355
364
|
def test_create_with_reset
|
356
|
-
jamis = PoorDeveloperCalledJamis.create_with(:
|
357
|
-
assert_equal
|
365
|
+
jamis = PoorDeveloperCalledJamis.create_with(name: "Aaron").create_with(nil).new
|
366
|
+
assert_equal "Jamis", jamis.name
|
367
|
+
end
|
368
|
+
|
369
|
+
def test_create_with_takes_precedence_over_where
|
370
|
+
developer = Developer.where(name: nil).create_with(name: "Aaron").new
|
371
|
+
assert_equal "Aaron", developer.name
|
372
|
+
end
|
373
|
+
|
374
|
+
def test_create_with_nested_attributes
|
375
|
+
assert_difference("Project.count", 1) do
|
376
|
+
Developer.create_with(
|
377
|
+
projects_attributes: [{ name: "p1" }]
|
378
|
+
).scoping do
|
379
|
+
Developer.create!(name: "Aaron")
|
380
|
+
end
|
381
|
+
end
|
358
382
|
end
|
359
383
|
|
360
384
|
# FIXME: I don't know if this is *desired* behavior, but it is *today's*
|
361
385
|
# behavior.
|
362
386
|
def test_create_with_empty_hash_will_not_reset
|
363
|
-
jamis = PoorDeveloperCalledJamis.create_with(:
|
364
|
-
assert_equal
|
387
|
+
jamis = PoorDeveloperCalledJamis.create_with(name: "Aaron").create_with({}).new
|
388
|
+
assert_equal "Aaron", jamis.name
|
365
389
|
end
|
366
390
|
|
367
391
|
def test_unscoped_with_named_scope_should_not_have_default_scope
|
368
392
|
assert_equal [DeveloperCalledJamis.find(developers(:poor_jamis).id)], DeveloperCalledJamis.poor
|
369
393
|
|
370
|
-
|
394
|
+
assert_includes DeveloperCalledJamis.unscoped.poor, developers(:david).becomes(DeveloperCalledJamis)
|
371
395
|
|
372
396
|
assert_equal 11, DeveloperCalledJamis.unscoped.length
|
373
397
|
assert_equal 1, DeveloperCalledJamis.poor.length
|
@@ -383,18 +407,18 @@ class DefaultScopingTest < ActiveRecord::TestCase
|
|
383
407
|
end
|
384
408
|
|
385
409
|
def test_joins_not_affected_by_scope_other_than_default_or_unscoped
|
386
|
-
without_scope_on_post = Comment.joins(:post).
|
410
|
+
without_scope_on_post = Comment.joins(:post).sort_by(&:id)
|
387
411
|
with_scope_on_post = nil
|
388
412
|
Post.where(id: [1, 5, 6]).scoping do
|
389
|
-
with_scope_on_post = Comment.joins(:post).
|
413
|
+
with_scope_on_post = Comment.joins(:post).sort_by(&:id)
|
390
414
|
end
|
391
415
|
|
392
|
-
assert_equal
|
416
|
+
assert_equal without_scope_on_post, with_scope_on_post
|
393
417
|
end
|
394
418
|
|
395
419
|
def test_unscoped_with_joins_should_not_have_default_scope
|
396
|
-
assert_equal
|
397
|
-
|
420
|
+
assert_equal Comment.joins(:post).sort_by(&:id),
|
421
|
+
SpecialPostWithDefaultScope.unscoped { Comment.joins(:special_post_with_default_scope).sort_by(&:id) }
|
398
422
|
end
|
399
423
|
|
400
424
|
def test_sti_association_with_unscoped_not_affected_by_default_scope
|
@@ -420,7 +444,7 @@ class DefaultScopingTest < ActiveRecord::TestCase
|
|
420
444
|
end
|
421
445
|
|
422
446
|
def test_default_scope_select_ignored_by_grouped_aggregations
|
423
|
-
assert_equal
|
447
|
+
assert_equal Developer.all.group_by(&:salary).transform_values(&:count),
|
424
448
|
DeveloperWithSelect.group(:salary).count
|
425
449
|
end
|
426
450
|
|
@@ -437,9 +461,9 @@ class DefaultScopingTest < ActiveRecord::TestCase
|
|
437
461
|
|
438
462
|
def test_default_scope_include_with_count
|
439
463
|
d = DeveloperWithIncludes.create!
|
440
|
-
d.audit_logs.create! :
|
464
|
+
d.audit_logs.create! message: "foo"
|
441
465
|
|
442
|
-
assert_equal 1, DeveloperWithIncludes.where(:
|
466
|
+
assert_equal 1, DeveloperWithIncludes.where(audit_logs: { message: "foo" }).count
|
443
467
|
end
|
444
468
|
|
445
469
|
def test_default_scope_with_references_works_through_collection_association
|
@@ -460,24 +484,6 @@ class DefaultScopingTest < ActiveRecord::TestCase
|
|
460
484
|
assert_equal comment, CommentWithDefaultScopeReferencesAssociation.find_by(id: comment.id)
|
461
485
|
end
|
462
486
|
|
463
|
-
unless in_memory_db?
|
464
|
-
def test_default_scope_is_threadsafe
|
465
|
-
threads = []
|
466
|
-
assert_not_equal 1, ThreadsafeDeveloper.unscoped.count
|
467
|
-
|
468
|
-
threads << Thread.new do
|
469
|
-
Thread.current[:long_default_scope] = true
|
470
|
-
assert_equal 1, ThreadsafeDeveloper.all.to_a.count
|
471
|
-
ThreadsafeDeveloper.connection.close
|
472
|
-
end
|
473
|
-
threads << Thread.new do
|
474
|
-
assert_equal 1, ThreadsafeDeveloper.all.to_a.count
|
475
|
-
ThreadsafeDeveloper.connection.close
|
476
|
-
end
|
477
|
-
threads.each(&:join)
|
478
|
-
end
|
479
|
-
end
|
480
|
-
|
481
487
|
test "additional conditions are ANDed with the default scope" do
|
482
488
|
scope = DeveloperCalledJamis.where(name: "David")
|
483
489
|
assert_equal 2, scope.where_clause.ast.children.length
|
@@ -492,19 +498,19 @@ class DefaultScopingTest < ActiveRecord::TestCase
|
|
492
498
|
|
493
499
|
test "a scope can remove the condition from the default scope" do
|
494
500
|
scope = DeveloperCalledJamis.david2
|
495
|
-
|
496
|
-
assert_equal Developer.where(name: "David"), scope
|
501
|
+
assert_instance_of Arel::Nodes::Equality, scope.where_clause.ast
|
502
|
+
assert_equal Developer.where(name: "David").map(&:id), scope.map(&:id)
|
497
503
|
end
|
498
504
|
|
499
505
|
def test_with_abstract_class_where_clause_should_not_be_duplicated
|
500
|
-
scope =
|
501
|
-
|
506
|
+
scope = Lion.all
|
507
|
+
assert_instance_of Arel::Nodes::Equality, scope.where_clause.ast
|
502
508
|
end
|
503
509
|
|
504
510
|
def test_sti_conditions_are_not_carried_in_default_scope
|
505
|
-
ConditionalStiPost.create! body:
|
506
|
-
SubConditionalStiPost.create! body:
|
507
|
-
SubConditionalStiPost.create! title:
|
511
|
+
ConditionalStiPost.create! body: ""
|
512
|
+
SubConditionalStiPost.create! body: ""
|
513
|
+
SubConditionalStiPost.create! title: "Hello world", body: ""
|
508
514
|
|
509
515
|
assert_equal 2, ConditionalStiPost.count
|
510
516
|
assert_equal 2, ConditionalStiPost.all.to_a.size
|
@@ -516,13 +522,48 @@ class DefaultScopingTest < ActiveRecord::TestCase
|
|
516
522
|
end
|
517
523
|
|
518
524
|
def test_with_abstract_class_scope_should_be_executed_in_correct_context
|
519
|
-
vegetarian_pattern
|
520
|
-
|
521
|
-
else
|
522
|
-
[/"lions"."is_vegetarian"/, /"lions"."gender"/]
|
523
|
-
end
|
525
|
+
vegetarian_pattern = /#{Regexp.escape(Lion.connection.quote_table_name("lions.is_vegetarian"))}/i
|
526
|
+
gender_pattern = /#{Regexp.escape(Lion.connection.quote_table_name("lions.gender"))}/i
|
524
527
|
|
525
528
|
assert_match vegetarian_pattern, Lion.all.to_sql
|
526
529
|
assert_match gender_pattern, Lion.female.to_sql
|
527
530
|
end
|
528
531
|
end
|
532
|
+
|
533
|
+
class DefaultScopingWithThreadTest < ActiveRecord::TestCase
|
534
|
+
self.use_transactional_tests = false
|
535
|
+
|
536
|
+
def test_default_scoping_with_threads
|
537
|
+
2.times do
|
538
|
+
Thread.new {
|
539
|
+
assert_includes DeveloperOrderedBySalary.all.to_sql, "salary DESC"
|
540
|
+
DeveloperOrderedBySalary.connection.close
|
541
|
+
}.join
|
542
|
+
end
|
543
|
+
end
|
544
|
+
|
545
|
+
def test_default_scope_is_threadsafe
|
546
|
+
2.times { ThreadsafeDeveloper.unscoped.create! }
|
547
|
+
|
548
|
+
threads = []
|
549
|
+
assert_not_equal 1, ThreadsafeDeveloper.unscoped.count
|
550
|
+
|
551
|
+
barrier_1 = Concurrent::CyclicBarrier.new(2)
|
552
|
+
barrier_2 = Concurrent::CyclicBarrier.new(2)
|
553
|
+
|
554
|
+
threads << Thread.new do
|
555
|
+
Thread.current[:default_scope_delay] = -> { barrier_1.wait; barrier_2.wait }
|
556
|
+
assert_equal 1, ThreadsafeDeveloper.all.to_a.count
|
557
|
+
ThreadsafeDeveloper.connection.close
|
558
|
+
end
|
559
|
+
threads << Thread.new do
|
560
|
+
Thread.current[:default_scope_delay] = -> { barrier_2.wait }
|
561
|
+
barrier_1.wait
|
562
|
+
assert_equal 1, ThreadsafeDeveloper.all.to_a.count
|
563
|
+
ThreadsafeDeveloper.connection.close
|
564
|
+
end
|
565
|
+
threads.each(&:join)
|
566
|
+
ensure
|
567
|
+
ThreadsafeDeveloper.unscoped.destroy_all
|
568
|
+
end
|
569
|
+
end unless in_memory_db?
|