ibm_db 5.2.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 +15 -13
- 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 +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 +1463 -1279
- data/lib/ibm_db.so +1 -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 +190 -14
@@ -1,30 +1,37 @@
|
|
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
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
13
|
-
require
|
14
|
-
require
|
15
|
-
require
|
16
|
-
require
|
17
|
-
require
|
18
|
-
require
|
19
|
-
require
|
20
|
-
require
|
21
|
-
require
|
22
|
-
require
|
23
|
-
require
|
24
|
-
require
|
4
|
+
require "models/author"
|
5
|
+
require "models/post"
|
6
|
+
require "models/person"
|
7
|
+
require "models/reference"
|
8
|
+
require "models/job"
|
9
|
+
require "models/reader"
|
10
|
+
require "models/comment"
|
11
|
+
require "models/tag"
|
12
|
+
require "models/tagging"
|
13
|
+
require "models/subscriber"
|
14
|
+
require "models/book"
|
15
|
+
require "models/subscription"
|
16
|
+
require "models/rating"
|
17
|
+
require "models/member"
|
18
|
+
require "models/member_detail"
|
19
|
+
require "models/member_type"
|
20
|
+
require "models/sponsor"
|
21
|
+
require "models/club"
|
22
|
+
require "models/organization"
|
23
|
+
require "models/category"
|
24
|
+
require "models/categorization"
|
25
|
+
require "models/membership"
|
26
|
+
require "models/essay"
|
27
|
+
require "models/hotel"
|
28
|
+
require "models/department"
|
29
|
+
require "models/chef"
|
30
|
+
require "models/cake_designer"
|
31
|
+
require "models/drink_designer"
|
25
32
|
|
26
33
|
class NestedThroughAssociationsTest < ActiveRecord::TestCase
|
27
|
-
fixtures :authors, :books, :posts, :subscriptions, :subscribers, :tags, :taggings,
|
34
|
+
fixtures :authors, :author_addresses, :books, :posts, :subscriptions, :subscribers, :tags, :taggings,
|
28
35
|
:people, :readers, :references, :jobs, :ratings, :comments, :members, :member_details,
|
29
36
|
:member_types, :sponsors, :clubs, :organizations, :categories, :categories_posts,
|
30
37
|
:categorizations, :memberships, :essays
|
@@ -55,23 +62,23 @@ class NestedThroughAssociationsTest < ActiveRecord::TestCase
|
|
55
62
|
end
|
56
63
|
|
57
64
|
def test_has_many_through_has_many_with_has_many_through_source_reflection_preload
|
58
|
-
|
65
|
+
author = assert_queries(5) { Author.includes(:tags).first }
|
59
66
|
general = tags(:general)
|
60
67
|
|
61
68
|
assert_no_queries do
|
62
|
-
assert_equal [general, general],
|
69
|
+
assert_equal [general, general], author.tags
|
63
70
|
end
|
64
71
|
end
|
65
72
|
|
66
73
|
def test_has_many_through_has_many_with_has_many_through_source_reflection_preload_via_joins
|
67
74
|
assert_includes_and_joins_equal(
|
68
|
-
Author.where(
|
75
|
+
Author.where("tags.id" => tags(:general).id),
|
69
76
|
[authors(:david)], :tags
|
70
77
|
)
|
71
78
|
|
72
79
|
# This ensures that the polymorphism of taggings is being observed correctly
|
73
|
-
authors = Author.joins(:tags).where(
|
74
|
-
|
80
|
+
authors = Author.joins(:tags).where("taggings.taggable_type" => "FakeModel")
|
81
|
+
assert_empty authors
|
75
82
|
end
|
76
83
|
|
77
84
|
# has_many through
|
@@ -79,21 +86,21 @@ class NestedThroughAssociationsTest < ActiveRecord::TestCase
|
|
79
86
|
# Through: has_many through
|
80
87
|
def test_has_many_through_has_many_through_with_has_many_source_reflection
|
81
88
|
luke, david = subscribers(:first), subscribers(:second)
|
82
|
-
assert_equal [luke, david, david], authors(:david).subscribers.order(
|
89
|
+
assert_equal [luke, david, david], authors(:david).subscribers.order("subscribers.nick")
|
83
90
|
end
|
84
91
|
|
85
92
|
def test_has_many_through_has_many_through_with_has_many_source_reflection_preload
|
86
93
|
luke, david = subscribers(:first), subscribers(:second)
|
87
|
-
|
94
|
+
author = assert_queries(4) { Author.includes(:subscribers).first }
|
88
95
|
assert_no_queries do
|
89
|
-
assert_equal [luke, david, david],
|
96
|
+
assert_equal [luke, david, david], author.subscribers.sort_by(&:nick)
|
90
97
|
end
|
91
98
|
end
|
92
99
|
|
93
100
|
def test_has_many_through_has_many_through_with_has_many_source_reflection_preload_via_joins
|
94
101
|
# All authors with subscribers where one of the subscribers' nick is 'alterself'
|
95
102
|
assert_includes_and_joins_equal(
|
96
|
-
Author.where(
|
103
|
+
Author.where("subscribers.nick" => "alterself"),
|
97
104
|
[authors(:david)], :subscribers
|
98
105
|
)
|
99
106
|
end
|
@@ -106,16 +113,16 @@ class NestedThroughAssociationsTest < ActiveRecord::TestCase
|
|
106
113
|
end
|
107
114
|
|
108
115
|
def test_has_many_through_has_one_with_has_one_through_source_reflection_preload
|
109
|
-
|
116
|
+
member = assert_queries(4) { Member.includes(:nested_member_types).first }
|
110
117
|
founding = member_types(:founding)
|
111
118
|
assert_no_queries do
|
112
|
-
assert_equal [founding],
|
119
|
+
assert_equal [founding], member.nested_member_types
|
113
120
|
end
|
114
121
|
end
|
115
122
|
|
116
123
|
def test_has_many_through_has_one_with_has_one_through_source_reflection_preload_via_joins
|
117
124
|
assert_includes_and_joins_equal(
|
118
|
-
Member.where(
|
125
|
+
Member.where("member_types.id" => member_types(:founding).id),
|
119
126
|
[members(:groucho)], :nested_member_types
|
120
127
|
)
|
121
128
|
end
|
@@ -128,16 +135,16 @@ class NestedThroughAssociationsTest < ActiveRecord::TestCase
|
|
128
135
|
end
|
129
136
|
|
130
137
|
def test_has_many_through_has_one_through_with_has_one_source_reflection_preload
|
131
|
-
|
138
|
+
member = assert_queries(4) { Member.includes(:nested_sponsors).first }
|
132
139
|
mustache = sponsors(:moustache_club_sponsor_for_groucho)
|
133
|
-
assert_no_queries
|
134
|
-
assert_equal [mustache],
|
140
|
+
assert_no_queries do
|
141
|
+
assert_equal [mustache], member.nested_sponsors
|
135
142
|
end
|
136
143
|
end
|
137
144
|
|
138
145
|
def test_has_many_through_has_one_through_with_has_one_source_reflection_preload_via_joins
|
139
146
|
assert_includes_and_joins_equal(
|
140
|
-
Member.where(
|
147
|
+
Member.where("sponsors.id" => sponsors(:moustache_club_sponsor_for_groucho).id),
|
141
148
|
[members(:groucho)], :nested_sponsors
|
142
149
|
)
|
143
150
|
end
|
@@ -149,28 +156,27 @@ class NestedThroughAssociationsTest < ActiveRecord::TestCase
|
|
149
156
|
groucho_details, other_details = member_details(:groucho), member_details(:some_other_guy)
|
150
157
|
|
151
158
|
assert_equal [groucho_details, other_details],
|
152
|
-
members(:groucho).organization_member_details.order(
|
159
|
+
members(:groucho).organization_member_details.order("member_details.id")
|
153
160
|
end
|
154
161
|
|
155
162
|
def test_has_many_through_has_one_with_has_many_through_source_reflection_preload
|
156
163
|
ActiveRecord::Base.connection.table_alias_length # preheat cache
|
157
|
-
|
164
|
+
member = assert_queries(4) { Member.includes(:organization_member_details).first }
|
158
165
|
groucho_details, other_details = member_details(:groucho), member_details(:some_other_guy)
|
159
166
|
|
160
167
|
assert_no_queries do
|
161
|
-
assert_equal [groucho_details, other_details],
|
168
|
+
assert_equal [groucho_details, other_details], member.organization_member_details.sort_by(&:id)
|
162
169
|
end
|
163
170
|
end
|
164
171
|
|
165
172
|
def test_has_many_through_has_one_with_has_many_through_source_reflection_preload_via_joins
|
166
173
|
assert_includes_and_joins_equal(
|
167
|
-
Member.where(
|
174
|
+
Member.where("member_details.id" => member_details(:groucho).id).order("member_details.id"),
|
168
175
|
[members(:groucho), members(:some_other_guy)], :organization_member_details
|
169
176
|
)
|
170
177
|
|
171
|
-
members = Member.joins(:organization_member_details).
|
172
|
-
|
173
|
-
assert members.empty?
|
178
|
+
members = Member.joins(:organization_member_details).where("member_details.id" => 9)
|
179
|
+
assert_empty members
|
174
180
|
end
|
175
181
|
|
176
182
|
# has_many through
|
@@ -180,29 +186,28 @@ class NestedThroughAssociationsTest < ActiveRecord::TestCase
|
|
180
186
|
groucho_details, other_details = member_details(:groucho), member_details(:some_other_guy)
|
181
187
|
|
182
188
|
assert_equal [groucho_details, other_details],
|
183
|
-
members(:groucho).organization_member_details_2.order(
|
189
|
+
members(:groucho).organization_member_details_2.order("member_details.id")
|
184
190
|
end
|
185
191
|
|
186
192
|
def test_has_many_through_has_one_through_with_has_many_source_reflection_preload
|
187
|
-
|
193
|
+
member = assert_queries(4) { Member.includes(:organization_member_details_2).first }
|
188
194
|
groucho_details, other_details = member_details(:groucho), member_details(:some_other_guy)
|
189
195
|
|
190
196
|
# postgresql test if randomly executed then executes "SHOW max_identifier_length". Hence
|
191
197
|
# the need to ignore certain predefined sqls that deal with system calls.
|
192
|
-
assert_no_queries
|
193
|
-
assert_equal [groucho_details, other_details],
|
198
|
+
assert_no_queries do
|
199
|
+
assert_equal [groucho_details, other_details], member.organization_member_details_2.sort_by(&:id)
|
194
200
|
end
|
195
201
|
end
|
196
202
|
|
197
203
|
def test_has_many_through_has_one_through_with_has_many_source_reflection_preload_via_joins
|
198
204
|
assert_includes_and_joins_equal(
|
199
|
-
Member.where(
|
205
|
+
Member.where("member_details.id" => member_details(:groucho).id).order("member_details.id"),
|
200
206
|
[members(:groucho), members(:some_other_guy)], :organization_member_details_2
|
201
207
|
)
|
202
208
|
|
203
|
-
members = Member.joins(:organization_member_details_2).
|
204
|
-
|
205
|
-
assert members.empty?
|
209
|
+
members = Member.joins(:organization_member_details_2).where("member_details.id" => 9)
|
210
|
+
assert_empty members
|
206
211
|
end
|
207
212
|
|
208
213
|
# has_many through
|
@@ -211,15 +216,15 @@ class NestedThroughAssociationsTest < ActiveRecord::TestCase
|
|
211
216
|
def test_has_many_through_has_many_with_has_and_belongs_to_many_source_reflection
|
212
217
|
general, cooking = categories(:general), categories(:cooking)
|
213
218
|
|
214
|
-
assert_equal [general, cooking], authors(:bob).post_categories.order(
|
219
|
+
assert_equal [general, cooking], authors(:bob).post_categories.order("categories.id")
|
215
220
|
end
|
216
221
|
|
217
222
|
def test_has_many_through_has_many_with_has_and_belongs_to_many_source_reflection_preload
|
218
|
-
|
223
|
+
author = assert_queries(4) { Author.includes(:post_categories).third }
|
219
224
|
general, cooking = categories(:general), categories(:cooking)
|
220
225
|
|
221
226
|
assert_no_queries do
|
222
|
-
assert_equal [general, cooking],
|
227
|
+
assert_equal [general, cooking], author.post_categories.sort_by(&:id)
|
223
228
|
end
|
224
229
|
end
|
225
230
|
|
@@ -228,7 +233,7 @@ class NestedThroughAssociationsTest < ActiveRecord::TestCase
|
|
228
233
|
Author.joins(:post_categories).first
|
229
234
|
|
230
235
|
assert_includes_and_joins_equal(
|
231
|
-
Author.where(
|
236
|
+
Author.where("categories.id" => categories(:cooking).id),
|
232
237
|
[authors(:bob)], :post_categories
|
233
238
|
)
|
234
239
|
end
|
@@ -239,16 +244,16 @@ class NestedThroughAssociationsTest < ActiveRecord::TestCase
|
|
239
244
|
def test_has_many_through_has_and_belongs_to_many_with_has_many_source_reflection
|
240
245
|
greetings, more = comments(:greetings), comments(:more_greetings)
|
241
246
|
|
242
|
-
assert_equal [greetings, more], categories(:technology).post_comments.order(
|
247
|
+
assert_equal [greetings, more], categories(:technology).post_comments.order("comments.id")
|
243
248
|
end
|
244
249
|
|
245
250
|
def test_has_many_through_has_and_belongs_to_many_with_has_many_source_reflection_preload
|
246
251
|
Category.includes(:post_comments).to_a # preheat cache
|
247
|
-
|
252
|
+
category = assert_queries(4) { Category.includes(:post_comments).second }
|
248
253
|
greetings, more = comments(:greetings), comments(:more_greetings)
|
249
254
|
|
250
255
|
assert_no_queries do
|
251
|
-
assert_equal [greetings, more],
|
256
|
+
assert_equal [greetings, more], category.post_comments.sort_by(&:id)
|
252
257
|
end
|
253
258
|
end
|
254
259
|
|
@@ -257,7 +262,7 @@ class NestedThroughAssociationsTest < ActiveRecord::TestCase
|
|
257
262
|
Category.joins(:post_comments).first
|
258
263
|
|
259
264
|
assert_includes_and_joins_equal(
|
260
|
-
Category.where(
|
265
|
+
Category.where("comments.id" => comments(:more_greetings).id).order("categories.id"),
|
261
266
|
[categories(:general), categories(:technology)], :post_comments
|
262
267
|
)
|
263
268
|
end
|
@@ -268,15 +273,15 @@ class NestedThroughAssociationsTest < ActiveRecord::TestCase
|
|
268
273
|
def test_has_many_through_has_many_with_has_many_through_habtm_source_reflection
|
269
274
|
greetings, more = comments(:greetings), comments(:more_greetings)
|
270
275
|
|
271
|
-
assert_equal [greetings, more], authors(:bob).category_post_comments.order(
|
276
|
+
assert_equal [greetings, more], authors(:bob).category_post_comments.order("comments.id")
|
272
277
|
end
|
273
278
|
|
274
279
|
def test_has_many_through_has_many_with_has_many_through_habtm_source_reflection_preload
|
275
|
-
|
280
|
+
author = assert_queries(6) { Author.includes(:category_post_comments).third }
|
276
281
|
greetings, more = comments(:greetings), comments(:more_greetings)
|
277
282
|
|
278
283
|
assert_no_queries do
|
279
|
-
assert_equal [greetings, more],
|
284
|
+
assert_equal [greetings, more], author.category_post_comments.sort_by(&:id)
|
280
285
|
end
|
281
286
|
end
|
282
287
|
|
@@ -285,7 +290,7 @@ class NestedThroughAssociationsTest < ActiveRecord::TestCase
|
|
285
290
|
Author.joins(:category_post_comments).first
|
286
291
|
|
287
292
|
assert_includes_and_joins_equal(
|
288
|
-
Author.where(
|
293
|
+
Author.where("comments.id" => comments(:does_it_hurt).id).order("authors.id"),
|
289
294
|
[authors(:david), authors(:mary)], :category_post_comments
|
290
295
|
)
|
291
296
|
end
|
@@ -298,17 +303,17 @@ class NestedThroughAssociationsTest < ActiveRecord::TestCase
|
|
298
303
|
end
|
299
304
|
|
300
305
|
def test_has_many_through_has_many_through_with_belongs_to_source_reflection_preload
|
301
|
-
|
306
|
+
author = assert_queries(5) { Author.includes(:tagging_tags).first }
|
302
307
|
general = tags(:general)
|
303
308
|
|
304
309
|
assert_no_queries do
|
305
|
-
assert_equal [general, general],
|
310
|
+
assert_equal [general, general], author.tagging_tags
|
306
311
|
end
|
307
312
|
end
|
308
313
|
|
309
314
|
def test_has_many_through_has_many_through_with_belongs_to_source_reflection_preload_via_joins
|
310
315
|
assert_includes_and_joins_equal(
|
311
|
-
Author.where(
|
316
|
+
Author.where("tags.id" => tags(:general).id),
|
312
317
|
[authors(:david)], :tagging_tags
|
313
318
|
)
|
314
319
|
end
|
@@ -320,21 +325,21 @@ class NestedThroughAssociationsTest < ActiveRecord::TestCase
|
|
320
325
|
welcome_general, thinking_general = taggings(:welcome_general), taggings(:thinking_general)
|
321
326
|
|
322
327
|
assert_equal [welcome_general, thinking_general],
|
323
|
-
categorizations(:david_welcome_general).post_taggings.order(
|
328
|
+
categorizations(:david_welcome_general).post_taggings.order("taggings.id")
|
324
329
|
end
|
325
330
|
|
326
331
|
def test_has_many_through_belongs_to_with_has_many_through_source_reflection_preload
|
327
|
-
|
332
|
+
categorization = assert_queries(4) { Categorization.includes(:post_taggings).first }
|
328
333
|
welcome_general, thinking_general = taggings(:welcome_general), taggings(:thinking_general)
|
329
334
|
|
330
335
|
assert_no_queries do
|
331
|
-
assert_equal [welcome_general, thinking_general],
|
336
|
+
assert_equal [welcome_general, thinking_general], categorization.post_taggings.sort_by(&:id)
|
332
337
|
end
|
333
338
|
end
|
334
339
|
|
335
340
|
def test_has_many_through_belongs_to_with_has_many_through_source_reflection_preload_via_joins
|
336
341
|
assert_includes_and_joins_equal(
|
337
|
-
Categorization.where(
|
342
|
+
Categorization.where("taggings.id" => taggings(:welcome_general).id).order("taggings.id"),
|
338
343
|
[categorizations(:david_welcome_general)], :post_taggings
|
339
344
|
)
|
340
345
|
end
|
@@ -347,17 +352,17 @@ class NestedThroughAssociationsTest < ActiveRecord::TestCase
|
|
347
352
|
end
|
348
353
|
|
349
354
|
def test_has_one_through_has_one_with_has_one_through_source_reflection_preload
|
350
|
-
|
355
|
+
member = assert_queries(4) { Member.includes(:nested_member_type).first }
|
351
356
|
founding = member_types(:founding)
|
352
357
|
|
353
358
|
assert_no_queries do
|
354
|
-
assert_equal founding,
|
359
|
+
assert_equal founding, member.nested_member_type
|
355
360
|
end
|
356
361
|
end
|
357
362
|
|
358
363
|
def test_has_one_through_has_one_with_has_one_through_source_reflection_preload_via_joins
|
359
364
|
assert_includes_and_joins_equal(
|
360
|
-
Member.where(
|
365
|
+
Member.where("member_types.id" => member_types(:founding).id),
|
361
366
|
[members(:groucho)], :nested_member_type
|
362
367
|
)
|
363
368
|
end
|
@@ -373,7 +378,7 @@ class NestedThroughAssociationsTest < ActiveRecord::TestCase
|
|
373
378
|
prev_default_scope = Club.default_scopes
|
374
379
|
|
375
380
|
[:includes, :preload, :joins, :eager_load].each do |q|
|
376
|
-
Club.default_scopes = [proc { Club.
|
381
|
+
Club.default_scopes = [proc { Club.public_send(q, :category) }]
|
377
382
|
assert_equal categories(:general), members(:groucho).reload.club_category
|
378
383
|
end
|
379
384
|
ensure
|
@@ -381,17 +386,17 @@ class NestedThroughAssociationsTest < ActiveRecord::TestCase
|
|
381
386
|
end
|
382
387
|
|
383
388
|
def test_has_one_through_has_one_through_with_belongs_to_source_reflection_preload
|
384
|
-
|
389
|
+
member = assert_queries(4) { Member.includes(:club_category).first }
|
385
390
|
general = categories(:general)
|
386
391
|
|
387
392
|
assert_no_queries do
|
388
|
-
assert_equal general,
|
393
|
+
assert_equal general, member.club_category
|
389
394
|
end
|
390
395
|
end
|
391
396
|
|
392
397
|
def test_has_one_through_has_one_through_with_belongs_to_source_reflection_preload_via_joins
|
393
398
|
assert_includes_and_joins_equal(
|
394
|
-
Member.where(
|
399
|
+
Member.where("categories.id" => categories(:technology).id),
|
395
400
|
[members(:blarpy_winkup)], :club_category
|
396
401
|
)
|
397
402
|
end
|
@@ -404,7 +409,7 @@ class NestedThroughAssociationsTest < ActiveRecord::TestCase
|
|
404
409
|
def test_distinct_has_many_through_a_has_many_through_association_on_through_reflection
|
405
410
|
author = authors(:david)
|
406
411
|
assert_equal [subscribers(:first), subscribers(:second)],
|
407
|
-
author.distinct_subscribers.order(
|
412
|
+
author.distinct_subscribers.order("subscribers.nick")
|
408
413
|
end
|
409
414
|
|
410
415
|
def test_nested_has_many_through_with_a_table_referenced_multiple_times
|
@@ -413,26 +418,31 @@ class NestedThroughAssociationsTest < ActiveRecord::TestCase
|
|
413
418
|
author.similar_posts.sort_by(&:id)
|
414
419
|
|
415
420
|
# Mary and Bob both have posts in misc, but they are the only ones.
|
416
|
-
authors = Author.joins(:similar_posts).where(
|
421
|
+
authors = Author.joins(:similar_posts).where("posts.id" => posts(:misc_by_bob).id)
|
417
422
|
assert_equal [authors(:mary), authors(:bob)], authors.distinct.sort_by(&:id)
|
418
423
|
|
419
424
|
# Check the polymorphism of taggings is being observed correctly (in both joins)
|
420
|
-
authors = Author.joins(:similar_posts).where(
|
421
|
-
|
422
|
-
authors = Author.joins(:similar_posts).where(
|
423
|
-
|
425
|
+
authors = Author.joins(:similar_posts).where("taggings.taggable_type" => "FakeModel")
|
426
|
+
assert_empty authors
|
427
|
+
authors = Author.joins(:similar_posts).where("taggings_authors_join.taggable_type" => "FakeModel")
|
428
|
+
assert_empty authors
|
429
|
+
end
|
430
|
+
|
431
|
+
def test_nested_has_many_through_with_scope_on_polymorphic_reflection
|
432
|
+
authors = Author.joins(:ordered_posts).where("posts.id" => posts(:misc_by_bob).id)
|
433
|
+
assert_equal [authors(:mary), authors(:bob)], authors.distinct.sort_by(&:id)
|
424
434
|
end
|
425
435
|
|
426
436
|
def test_has_many_through_with_foreign_key_option_on_through_reflection
|
427
|
-
assert_equal [posts(:welcome), posts(:authorless)], people(:david).agents_posts.order(
|
437
|
+
assert_equal [posts(:welcome), posts(:authorless)], people(:david).agents_posts.order("posts.id")
|
428
438
|
assert_equal [authors(:david)], references(:david_unicyclist).agents_posts_authors
|
429
439
|
|
430
|
-
references = Reference.joins(:agents_posts_authors).where(
|
440
|
+
references = Reference.joins(:agents_posts_authors).where("authors.id" => authors(:david).id)
|
431
441
|
assert_equal [references(:david_unicyclist)], references
|
432
442
|
end
|
433
443
|
|
434
444
|
def test_has_many_through_with_foreign_key_option_on_source_reflection
|
435
|
-
assert_equal [people(:michael), people(:susan)], jobs(:unicyclist).agents.order(
|
445
|
+
assert_equal [people(:michael), people(:susan)], jobs(:unicyclist).agents.order("people.id")
|
436
446
|
|
437
447
|
jobs = Job.joins(:agents)
|
438
448
|
assert_equal [jobs(:unicyclist), jobs(:unicyclist)], jobs
|
@@ -443,19 +453,19 @@ class NestedThroughAssociationsTest < ActiveRecord::TestCase
|
|
443
453
|
assert_equal [ratings(:special_comment_rating), ratings(:sub_special_comment_rating)], ratings
|
444
454
|
|
445
455
|
# Ensure STI is respected in the join
|
446
|
-
scope = Post.joins(:special_comments_ratings).where(:
|
447
|
-
|
448
|
-
|
449
|
-
|
456
|
+
scope = Post.joins(:special_comments_ratings).where(id: posts(:sti_comments).id)
|
457
|
+
assert_empty scope.where("comments.type" => "Comment")
|
458
|
+
assert_not_empty scope.where("comments.type" => "SpecialComment")
|
459
|
+
assert_not_empty scope.where("comments.type" => "SubSpecialComment")
|
450
460
|
end
|
451
461
|
|
452
462
|
def test_has_many_through_with_sti_on_nested_through_reflection
|
453
463
|
taggings = posts(:sti_comments).special_comments_ratings_taggings
|
454
464
|
assert_equal [taggings(:special_comment_rating)], taggings
|
455
465
|
|
456
|
-
scope = Post.joins(:special_comments_ratings_taggings).where(:
|
457
|
-
|
458
|
-
|
466
|
+
scope = Post.joins(:special_comments_ratings_taggings).where(id: posts(:sti_comments).id)
|
467
|
+
assert_empty scope.where("comments.type" => "Comment")
|
468
|
+
assert_not_empty scope.where("comments.type" => "SpecialComment")
|
459
469
|
end
|
460
470
|
|
461
471
|
def test_nested_has_many_through_writers_should_raise_error
|
@@ -505,20 +515,20 @@ class NestedThroughAssociationsTest < ActiveRecord::TestCase
|
|
505
515
|
end
|
506
516
|
|
507
517
|
def test_nested_has_many_through_with_conditions_on_through_associations_preload
|
508
|
-
|
518
|
+
assert_empty Author.where("tags.id" => 100).joins(:misc_post_first_blue_tags)
|
509
519
|
|
510
|
-
|
520
|
+
author = assert_queries(2) { Author.includes(:misc_post_first_blue_tags).third }
|
511
521
|
blue = tags(:blue)
|
512
522
|
|
513
523
|
assert_no_queries do
|
514
|
-
assert_equal [blue],
|
524
|
+
assert_equal [blue], author.misc_post_first_blue_tags
|
515
525
|
end
|
516
526
|
end
|
517
527
|
|
518
528
|
def test_nested_has_many_through_with_conditions_on_through_associations_preload_via_joins
|
519
529
|
# Pointless condition to force single-query loading
|
520
530
|
assert_includes_and_joins_equal(
|
521
|
-
Author.where(
|
531
|
+
Author.where("tags.id = tags.id").references(:tags),
|
522
532
|
[authors(:bob)], :misc_post_first_blue_tags
|
523
533
|
)
|
524
534
|
end
|
@@ -528,18 +538,27 @@ class NestedThroughAssociationsTest < ActiveRecord::TestCase
|
|
528
538
|
end
|
529
539
|
|
530
540
|
def test_nested_has_many_through_with_conditions_on_source_associations_preload
|
531
|
-
|
541
|
+
author = assert_queries(2) { Author.includes(:misc_post_first_blue_tags_2).third }
|
532
542
|
blue = tags(:blue)
|
533
543
|
|
534
544
|
assert_no_queries do
|
535
|
-
assert_equal [blue],
|
545
|
+
assert_equal [blue], author.misc_post_first_blue_tags_2
|
546
|
+
end
|
547
|
+
end
|
548
|
+
|
549
|
+
def test_through_association_preload_doesnt_reset_source_association_if_already_preloaded
|
550
|
+
blue = tags(:blue)
|
551
|
+
author = Author.preload(posts: :first_blue_tags_2, misc_post_first_blue_tags_2: {}).third
|
552
|
+
|
553
|
+
assert_no_queries do
|
554
|
+
assert_equal [blue], author.posts.first.first_blue_tags_2
|
536
555
|
end
|
537
556
|
end
|
538
557
|
|
539
558
|
def test_nested_has_many_through_with_conditions_on_source_associations_preload_via_joins
|
540
559
|
# Pointless condition to force single-query loading
|
541
560
|
assert_includes_and_joins_equal(
|
542
|
-
Author.where(
|
561
|
+
Author.where("tags.id = tags.id").references(:tags),
|
543
562
|
[authors(:bob)], :misc_post_first_blue_tags_2
|
544
563
|
)
|
545
564
|
end
|
@@ -548,13 +567,13 @@ class NestedThroughAssociationsTest < ActiveRecord::TestCase
|
|
548
567
|
assert_equal [categories(:general)], organizations(:nsa).author_essay_categories
|
549
568
|
|
550
569
|
organizations = Organization.joins(:author_essay_categories).
|
551
|
-
where(
|
570
|
+
where("categories.id" => categories(:general).id)
|
552
571
|
assert_equal [organizations(:nsa)], organizations
|
553
572
|
|
554
573
|
assert_equal categories(:general), organizations(:nsa).author_owned_essay_category
|
555
574
|
|
556
575
|
organizations = Organization.joins(:author_owned_essay_category).
|
557
|
-
where(
|
576
|
+
where("categories.id" => categories(:general).id)
|
558
577
|
assert_equal [organizations(:nsa)], organizations
|
559
578
|
end
|
560
579
|
|
@@ -562,14 +581,52 @@ class NestedThroughAssociationsTest < ActiveRecord::TestCase
|
|
562
581
|
c = Categorization.new
|
563
582
|
c.author = authors(:david)
|
564
583
|
c.post_taggings.to_a
|
565
|
-
|
584
|
+
assert_not_empty c.post_taggings
|
566
585
|
c.save
|
567
|
-
|
586
|
+
assert_not_empty c.post_taggings
|
568
587
|
end
|
569
588
|
|
570
|
-
|
589
|
+
def test_polymorphic_has_many_through_when_through_association_has_not_loaded
|
590
|
+
cake_designer = CakeDesigner.create!(chef: Chef.new)
|
591
|
+
drink_designer = DrinkDesigner.create!(chef: Chef.new)
|
592
|
+
department = Department.create!(chefs: [cake_designer.chef, drink_designer.chef])
|
593
|
+
Hotel.create!(departments: [department])
|
594
|
+
hotel = Hotel.includes(:cake_designers, :drink_designers).take
|
571
595
|
|
596
|
+
assert_equal [cake_designer], hotel.cake_designers
|
597
|
+
assert_equal [drink_designer], hotel.drink_designers
|
598
|
+
end
|
599
|
+
|
600
|
+
def test_polymorphic_has_many_through_when_through_association_has_already_loaded
|
601
|
+
cake_designer = CakeDesigner.create!(chef: Chef.new)
|
602
|
+
drink_designer = DrinkDesigner.create!(chef: Chef.new)
|
603
|
+
department = Department.create!(chefs: [cake_designer.chef, drink_designer.chef])
|
604
|
+
Hotel.create!(departments: [department])
|
605
|
+
hotel = Hotel.includes(:chefs, :cake_designers, :drink_designers).take
|
606
|
+
|
607
|
+
assert_equal [cake_designer], hotel.cake_designers
|
608
|
+
assert_equal [drink_designer], hotel.drink_designers
|
609
|
+
end
|
610
|
+
|
611
|
+
def test_polymorphic_has_many_through_joined_different_table_twice
|
612
|
+
cake_designer = CakeDesigner.create!(chef: Chef.new)
|
613
|
+
drink_designer = DrinkDesigner.create!(chef: Chef.new)
|
614
|
+
department = Department.create!(chefs: [cake_designer.chef, drink_designer.chef])
|
615
|
+
hotel = Hotel.create!(departments: [department])
|
616
|
+
|
617
|
+
assert_equal hotel, Hotel.joins(:cake_designers, :drink_designers).take
|
618
|
+
end
|
619
|
+
|
620
|
+
def test_has_many_through_reset_source_reflection_after_loading_is_complete
|
621
|
+
preloaded = Category.preload(:ordered_post_comments).find(1, 2).last
|
622
|
+
original = Category.find(2)
|
623
|
+
assert_equal original.ordered_post_comments.ids, preloaded.ordered_post_comments.ids
|
624
|
+
end
|
625
|
+
|
626
|
+
private
|
572
627
|
def assert_includes_and_joins_equal(query, expected, association)
|
628
|
+
query = query.order(:id)
|
629
|
+
|
573
630
|
actual = assert_queries(1) { query.joins(association).to_a.uniq }
|
574
631
|
assert_equal expected, actual
|
575
632
|
|