ibm_db 3.0.4-x86-mingw32 → 3.0.5-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 +4 -1
- data/LICENSE +1 -1
- data/MANIFEST +14 -14
- data/README +225 -225
- data/ext/Makefile.nt32 +181 -181
- data/ext/Makefile.nt32.191 +212 -212
- data/ext/extconf.rb +291 -291
- data/ext/ibm_db.c +11887 -11884
- data/ext/ruby_ibm_db.h +241 -241
- data/ext/ruby_ibm_db_cli.c +866 -866
- data/ext/ruby_ibm_db_cli.h +500 -500
- data/init.rb +41 -41
- data/lib/IBM_DB.rb +27 -27
- data/lib/active_record/connection_adapters/ibm_db_adapter.rb +3177 -3177
- data/lib/active_record/connection_adapters/ibmdb_adapter.rb +1 -1
- data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -328
- data/lib/mswin32/ibm_db.rb +122 -122
- data/lib/mswin32/rb21x/i386/ibm_db.so +0 -0
- data/lib/mswin32/rb22x/i386/ibm_db.so +0 -0
- data/lib/mswin32/rb23x/i386/ibm_db.so +0 -0
- data/test/active_record/connection_adapters/fake_adapter.rb +46 -46
- data/test/assets/example.log +1 -1
- data/test/assets/test.txt +1 -1
- data/test/cases/adapter_test.rb +276 -261
- data/test/cases/aggregations_test.rb +158 -158
- data/test/cases/ar_schema_test.rb +161 -161
- data/test/cases/associations/association_scope_test.rb +21 -21
- data/test/cases/associations/belongs_to_associations_test.rb +1029 -1029
- data/test/cases/associations/callbacks_test.rb +192 -192
- data/test/cases/associations/cascaded_eager_loading_test.rb +188 -188
- data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +26 -26
- data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -36
- data/test/cases/associations/eager_load_nested_include_test.rb +128 -128
- data/test/cases/associations/eager_singularization_test.rb +148 -148
- data/test/cases/associations/eager_test.rb +1429 -1411
- data/test/cases/associations/extension_test.rb +82 -82
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +972 -932
- data/test/cases/associations/has_many_associations_test.rb +2182 -2162
- data/test/cases/associations/has_many_through_associations_test.rb +1204 -1204
- data/test/cases/associations/has_one_associations_test.rb +610 -610
- data/test/cases/associations/has_one_through_associations_test.rb +380 -380
- data/test/cases/associations/inner_join_association_test.rb +139 -139
- data/test/cases/associations/inverse_associations_test.rb +706 -693
- data/test/cases/associations/join_model_test.rb +754 -754
- data/test/cases/associations/nested_through_associations_test.rb +579 -579
- data/test/cases/associations/required_test.rb +82 -82
- data/test/cases/associations_test.rb +380 -380
- data/test/cases/attribute_decorators_test.rb +125 -125
- data/test/cases/attribute_methods/read_test.rb +60 -60
- data/test/cases/attribute_methods/serialization_test.rb +29 -29
- data/test/cases/attribute_methods_test.rb +952 -952
- data/test/cases/attribute_set_test.rb +210 -200
- data/test/cases/attribute_test.rb +180 -180
- data/test/cases/attributes_test.rb +136 -136
- data/test/cases/autosave_association_test.rb +1595 -1595
- data/test/cases/base_test.rb +1664 -1638
- data/test/cases/batches_test.rb +212 -212
- data/test/cases/binary_test.rb +52 -52
- data/test/cases/bind_parameter_test.rb +100 -100
- data/test/cases/calculations_test.rb +646 -646
- data/test/cases/callbacks_test.rb +543 -543
- data/test/cases/clone_test.rb +40 -40
- data/test/cases/coders/yaml_column_test.rb +63 -63
- data/test/cases/column_alias_test.rb +17 -17
- data/test/cases/column_definition_test.rb +123 -123
- data/test/cases/connection_adapters/adapter_leasing_test.rb +54 -54
- data/test/cases/connection_adapters/connection_handler_test.rb +53 -53
- data/test/cases/connection_adapters/connection_specification_test.rb +12 -12
- data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +293 -293
- data/test/cases/connection_adapters/mysql_type_lookup_test.rb +65 -65
- data/test/cases/connection_adapters/quoting_test.rb +13 -13
- data/test/cases/connection_adapters/schema_cache_test.rb +56 -56
- data/test/cases/connection_adapters/type_lookup_test.rb +110 -110
- data/test/cases/connection_management_test.rb +122 -122
- data/test/cases/connection_pool_test.rb +346 -346
- data/test/cases/connection_specification/resolver_test.rb +116 -116
- data/test/cases/core_test.rb +112 -112
- data/test/cases/counter_cache_test.rb +209 -209
- data/test/cases/custom_locking_test.rb +17 -17
- data/test/cases/database_statements_test.rb +19 -19
- data/test/cases/date_time_test.rb +61 -61
- data/test/cases/defaults_test.rb +223 -223
- data/test/cases/dirty_test.rb +785 -775
- data/test/cases/disconnected_test.rb +28 -28
- data/test/cases/dup_test.rb +157 -157
- data/test/cases/enum_test.rb +290 -290
- data/test/cases/explain_subscriber_test.rb +64 -64
- data/test/cases/explain_test.rb +76 -76
- data/test/cases/finder_respond_to_test.rb +60 -60
- data/test/cases/finder_test.rb +1169 -1166
- data/test/cases/fixture_set/file_test.rb +138 -138
- data/test/cases/fixtures_test.rb +908 -897
- data/test/cases/forbidden_attributes_protection_test.rb +99 -99
- data/test/cases/habtm_destroy_order_test.rb +61 -61
- data/test/cases/helper.rb +210 -210
- data/test/cases/hot_compatibility_test.rb +54 -54
- data/test/cases/i18n_test.rb +45 -45
- data/test/cases/inheritance_test.rb +375 -375
- data/test/cases/integration_test.rb +139 -139
- data/test/cases/invalid_connection_test.rb +22 -22
- data/test/cases/invalid_date_test.rb +32 -32
- data/test/cases/invertible_migration_test.rb +295 -295
- data/test/cases/json_serialization_test.rb +302 -302
- data/test/cases/locking_test.rb +477 -477
- data/test/cases/log_subscriber_test.rb +136 -136
- data/test/cases/migration/change_schema_test - Copy.rb +448 -448
- data/test/cases/migration/change_schema_test.rb +512 -472
- data/test/cases/migration/change_table_test.rb +224 -224
- data/test/cases/migration/column_attributes_test.rb +192 -192
- data/test/cases/migration/column_positioning_test.rb +56 -56
- data/test/cases/migration/columns_test.rb +304 -304
- data/test/cases/migration/command_recorder_test.rb +305 -305
- data/test/cases/migration/create_join_table_test.rb +148 -148
- data/test/cases/migration/foreign_key_test - Changed.rb +325 -325
- data/test/cases/migration/foreign_key_test.rb +328 -360
- data/test/cases/migration/helper.rb +39 -39
- data/test/cases/migration/index_test.rb +216 -216
- data/test/cases/migration/logger_test.rb +36 -36
- data/test/cases/migration/pending_migrations_test.rb +53 -53
- data/test/cases/migration/references_foreign_key_test.rb +169 -214
- data/test/cases/migration/references_index_test.rb +101 -101
- data/test/cases/migration/references_statements_test.rb +116 -116
- data/test/cases/migration/rename_table_test.rb +93 -93
- data/test/cases/migration/table_and_index_test.rb +24 -24
- data/test/cases/migration_test.rb +959 -959
- data/test/cases/migrator_test.rb +388 -388
- data/test/cases/mixin_test.rb +70 -70
- data/test/cases/modules_test.rb +173 -173
- data/test/cases/multiparameter_attributes_test.rb +350 -350
- data/test/cases/multiple_db_test.rb +115 -115
- data/test/cases/nested_attributes_test.rb +1070 -1057
- data/test/cases/nested_attributes_with_callbacks_test.rb +144 -144
- data/test/cases/persistence_test.rb +909 -909
- data/test/cases/pooled_connections_test.rb +81 -81
- data/test/cases/primary_keys_test.rb +237 -237
- data/test/cases/query_cache_test.rb +326 -326
- data/test/cases/quoting_test.rb +156 -156
- data/test/cases/readonly_test.rb +118 -118
- data/test/cases/reaper_test.rb +85 -85
- data/test/cases/reflection_test.rb +463 -454
- data/test/cases/relation/delegation_test.rb +68 -68
- data/test/cases/relation/merging_test.rb +161 -161
- data/test/cases/relation/mutation_test.rb +165 -165
- data/test/cases/relation/predicate_builder_test.rb +14 -14
- data/test/cases/relation/where_chain_test.rb +181 -181
- data/test/cases/relation/where_test.rb +300 -300
- data/test/cases/relation/where_test2.rb +36 -36
- data/test/cases/relation_test.rb +319 -297
- data/test/cases/relations_test.rb +1815 -1815
- data/test/cases/reload_models_test.rb +22 -22
- data/test/cases/result_test.rb +80 -80
- data/test/cases/sanitize_test.rb +83 -83
- data/test/cases/schema_dumper_test.rb +463 -463
- data/test/cases/scoping/default_scoping_test.rb +454 -454
- data/test/cases/scoping/named_scoping_test.rb +524 -524
- data/test/cases/scoping/relation_scoping_test.rb +357 -357
- data/test/cases/serialization_test.rb +104 -104
- data/test/cases/serialized_attribute_test.rb +277 -277
- data/test/cases/statement_cache_test.rb +98 -98
- data/test/cases/store_test.rb +194 -194
- data/test/cases/tasks/database_tasks_test.rb +398 -396
- data/test/cases/tasks/mysql_rake_test.rb +324 -311
- data/test/cases/tasks/postgresql_rake_test.rb +250 -245
- data/test/cases/tasks/sqlite_rake_test.rb +193 -193
- data/test/cases/test_case.rb +123 -123
- data/test/cases/timestamp_test.rb +467 -468
- data/test/cases/transaction_callbacks_test.rb +452 -452
- data/test/cases/transaction_isolation_test.rb +106 -106
- data/test/cases/transactions_test.rb +817 -817
- data/test/cases/type/decimal_test.rb +56 -51
- data/test/cases/type/integer_test.rb +121 -121
- data/test/cases/type/string_test.rb +36 -36
- data/test/cases/type/type_map_test.rb +177 -177
- data/test/cases/type/unsigned_integer_test.rb +18 -18
- data/test/cases/types_test.rb +141 -141
- data/test/cases/unconnected_test.rb +33 -33
- data/test/cases/validations/association_validation_test.rb +86 -86
- data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -84
- data/test/cases/validations/i18n_validation_test.rb +90 -90
- data/test/cases/validations/length_validation_test.rb +47 -47
- data/test/cases/validations/presence_validation_test.rb +68 -68
- data/test/cases/validations/uniqueness_validation_test.rb +457 -434
- data/test/cases/validations_repair_helper.rb +23 -23
- data/test/cases/validations_test.rb +165 -165
- data/test/cases/view_test.rb +119 -113
- data/test/cases/xml_serialization_test.rb +457 -457
- data/test/cases/yaml_serialization_test.rb +126 -86
- data/test/config.rb +5 -5
- data/test/config.yml +154 -154
- data/test/connections/native_ibm_db/connection.rb +43 -43
- data/test/fixtures/accounts.yml +29 -29
- data/test/fixtures/admin/accounts.yml +2 -2
- data/test/fixtures/admin/randomly_named_a9.yml +7 -7
- data/test/fixtures/admin/randomly_named_b0.yml +7 -7
- data/test/fixtures/admin/users.yml +10 -10
- data/test/fixtures/author_addresses.yml +17 -17
- data/test/fixtures/author_favorites.yml +3 -3
- data/test/fixtures/authors.yml +23 -23
- data/test/fixtures/binaries.yml +133 -133
- data/test/fixtures/books.yml +11 -11
- data/test/fixtures/bulbs.yml +5 -5
- data/test/fixtures/cars.yml +9 -9
- data/test/fixtures/categories.yml +19 -19
- data/test/fixtures/categories/special_categories.yml +9 -9
- data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -4
- data/test/fixtures/categories_ordered.yml +7 -7
- data/test/fixtures/categories_posts.yml +31 -31
- data/test/fixtures/categorizations.yml +23 -23
- data/test/fixtures/clubs.yml +8 -8
- data/test/fixtures/collections.yml +3 -3
- data/test/fixtures/colleges.yml +3 -3
- data/test/fixtures/comments.yml +65 -65
- data/test/fixtures/companies.yml +67 -67
- data/test/fixtures/computers.yml +10 -10
- data/test/fixtures/courses.yml +8 -8
- data/test/fixtures/customers.yml +25 -25
- data/test/fixtures/dashboards.yml +6 -6
- data/test/fixtures/developers.yml +21 -21
- data/test/fixtures/developers_projects.yml +16 -16
- data/test/fixtures/dog_lovers.yml +7 -7
- data/test/fixtures/dogs.yml +4 -4
- data/test/fixtures/doubloons.yml +3 -3
- data/test/fixtures/edges.yml +5 -5
- data/test/fixtures/entrants.yml +14 -14
- data/test/fixtures/essays.yml +6 -6
- data/test/fixtures/faces.yml +11 -11
- data/test/fixtures/fk_test_has_fk.yml +3 -3
- data/test/fixtures/fk_test_has_pk.yml +1 -1
- data/test/fixtures/friendships.yml +4 -4
- data/test/fixtures/funny_jokes.yml +10 -10
- data/test/fixtures/interests.yml +33 -33
- data/test/fixtures/items.yml +3 -3
- data/test/fixtures/jobs.yml +7 -7
- data/test/fixtures/legacy_things.yml +3 -3
- data/test/fixtures/mateys.yml +4 -4
- data/test/fixtures/member_details.yml +8 -8
- data/test/fixtures/member_types.yml +6 -6
- data/test/fixtures/members.yml +11 -11
- data/test/fixtures/memberships.yml +34 -34
- data/test/fixtures/men.yml +5 -5
- data/test/fixtures/minimalistics.yml +2 -2
- data/test/fixtures/minivans.yml +5 -5
- data/test/fixtures/mixed_case_monkeys.yml +6 -6
- data/test/fixtures/mixins.yml +29 -29
- data/test/fixtures/movies.yml +7 -7
- data/test/fixtures/naked/csv/accounts.csv +1 -1
- data/test/fixtures/naked/yml/accounts.yml +1 -1
- data/test/fixtures/naked/yml/companies.yml +1 -1
- data/test/fixtures/naked/yml/courses.yml +1 -1
- data/test/fixtures/organizations.yml +5 -5
- data/test/fixtures/other_topics.yml +42 -42
- data/test/fixtures/owners.yml +9 -9
- data/test/fixtures/parrots.yml +27 -27
- data/test/fixtures/parrots_pirates.yml +7 -7
- data/test/fixtures/people.yml +24 -24
- data/test/fixtures/peoples_treasures.yml +3 -3
- data/test/fixtures/pets.yml +19 -19
- data/test/fixtures/pirates.yml +12 -12
- data/test/fixtures/posts.yml +80 -80
- data/test/fixtures/price_estimates.yml +7 -7
- data/test/fixtures/products.yml +4 -4
- data/test/fixtures/projects.yml +7 -7
- data/test/fixtures/randomly_named_a9.yml +7 -7
- data/test/fixtures/ratings.yml +14 -14
- data/test/fixtures/readers.yml +11 -11
- data/test/fixtures/references.yml +17 -17
- data/test/fixtures/reserved_words/distinct.yml +5 -5
- data/test/fixtures/reserved_words/distinct_select.yml +11 -11
- data/test/fixtures/reserved_words/group.yml +14 -14
- data/test/fixtures/reserved_words/select.yml +8 -8
- data/test/fixtures/reserved_words/values.yml +7 -7
- data/test/fixtures/ships.yml +6 -6
- data/test/fixtures/speedometers.yml +8 -8
- data/test/fixtures/sponsors.yml +12 -12
- data/test/fixtures/string_key_objects.yml +7 -7
- data/test/fixtures/subscribers.yml +10 -10
- data/test/fixtures/subscriptions.yml +12 -12
- data/test/fixtures/taggings.yml +78 -78
- data/test/fixtures/tags.yml +11 -11
- data/test/fixtures/tasks.yml +7 -7
- data/test/fixtures/teapots.yml +3 -3
- data/test/fixtures/to_be_linked/accounts.yml +2 -2
- data/test/fixtures/to_be_linked/users.yml +10 -10
- data/test/fixtures/topics.yml +49 -49
- data/test/fixtures/toys.yml +14 -14
- data/test/fixtures/traffic_lights.yml +9 -9
- data/test/fixtures/treasures.yml +10 -10
- data/test/fixtures/uuid_children.yml +3 -3
- data/test/fixtures/uuid_parents.yml +2 -2
- data/test/fixtures/variants.yml +4 -4
- data/test/fixtures/vegetables.yml +19 -19
- data/test/fixtures/vertices.yml +3 -3
- data/test/fixtures/warehouse_things.yml +2 -2
- data/test/fixtures/zines.yml +5 -5
- data/test/ibm_db_test.rb +24 -24
- data/test/migrations/10_urban/9_add_expressions.rb +11 -11
- data/test/migrations/decimal/1_give_me_big_numbers.rb +15 -15
- data/test/migrations/magic/1_currencies_have_symbols.rb +12 -12
- data/test/migrations/missing/1000_people_have_middle_names.rb +8 -8
- data/test/migrations/missing/1_people_have_last_names.rb +8 -8
- data/test/migrations/missing/3_we_need_reminders.rb +11 -11
- data/test/migrations/missing/4_innocent_jointable.rb +11 -11
- data/test/migrations/rename/1_we_need_things.rb +10 -10
- data/test/migrations/rename/2_rename_things.rb +8 -8
- data/test/migrations/to_copy/1_people_have_hobbies.rb +9 -9
- data/test/migrations/to_copy/2_people_have_descriptions.rb +9 -9
- data/test/migrations/to_copy2/1_create_articles.rb +7 -7
- data/test/migrations/to_copy2/2_create_comments.rb +7 -7
- data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -9
- data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -9
- data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -9
- data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -7
- data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -7
- data/test/migrations/valid/1_valid_people_have_last_names.rb +9 -9
- data/test/migrations/valid/2_we_need_reminders.rb +11 -11
- data/test/migrations/valid/3_innocent_jointable.rb +11 -11
- data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -9
- data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +11 -11
- data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +11 -11
- data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -9
- data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -12
- data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -12
- data/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -8
- data/test/models/admin.rb +4 -4
- data/test/models/admin/account.rb +2 -2
- data/test/models/admin/randomly_named_c1.rb +3 -3
- data/test/models/admin/user.rb +40 -40
- data/test/models/aircraft.rb +4 -4
- data/test/models/arunit2_model.rb +3 -3
- data/test/models/author.rb +212 -212
- data/test/models/auto_id.rb +4 -4
- data/test/models/autoloadable/extra_firm.rb +2 -2
- data/test/models/binary.rb +1 -1
- data/test/models/bird.rb +12 -12
- data/test/models/book.rb +18 -18
- data/test/models/boolean.rb +2 -2
- data/test/models/bulb.rb +51 -51
- data/test/models/cake_designer.rb +3 -3
- data/test/models/car.rb +26 -26
- data/test/models/carrier.rb +2 -2
- data/test/models/categorization.rb +19 -19
- data/test/models/category.rb +35 -35
- data/test/models/chef.rb +7 -3
- data/test/models/citation.rb +3 -3
- data/test/models/club.rb +23 -23
- data/test/models/college.rb +10 -10
- data/test/models/column.rb +3 -3
- data/test/models/column_name.rb +3 -3
- data/test/models/comment.rb +64 -64
- data/test/models/company.rb +228 -225
- data/test/models/company_in_module.rb +98 -98
- data/test/models/computer.rb +3 -3
- data/test/models/contact.rb +41 -41
- data/test/models/contract.rb +20 -20
- data/test/models/country.rb +7 -7
- data/test/models/course.rb +6 -6
- data/test/models/customer.rb +77 -77
- data/test/models/customer_carrier.rb +14 -14
- data/test/models/dashboard.rb +3 -3
- data/test/models/default.rb +2 -2
- data/test/models/department.rb +4 -4
- data/test/models/developer.rb +255 -252
- data/test/models/dog.rb +5 -5
- data/test/models/dog_lover.rb +5 -5
- data/test/models/doubloon.rb +12 -12
- data/test/models/drink_designer.rb +3 -3
- data/test/models/edge.rb +5 -5
- data/test/models/electron.rb +5 -5
- data/test/models/engine.rb +4 -4
- data/test/models/entrant.rb +3 -3
- data/test/models/essay.rb +5 -5
- data/test/models/event.rb +2 -2
- data/test/models/eye.rb +37 -37
- data/test/models/face.rb +9 -9
- data/test/models/friendship.rb +6 -6
- data/test/models/guid.rb +1 -1
- data/test/models/hotel.rb +9 -6
- data/test/models/image.rb +3 -3
- data/test/models/interest.rb +5 -5
- data/test/models/invoice.rb +4 -4
- data/test/models/item.rb +7 -7
- data/test/models/job.rb +7 -7
- data/test/models/joke.rb +7 -7
- data/test/models/keyboard.rb +3 -3
- data/test/models/legacy_thing.rb +3 -3
- data/test/models/lesson.rb +11 -11
- data/test/models/line_item.rb +3 -3
- data/test/models/liquid.rb +4 -4
- data/test/models/man.rb +11 -11
- data/test/models/matey.rb +4 -4
- data/test/models/member.rb +41 -41
- data/test/models/member_detail.rb +7 -7
- data/test/models/member_type.rb +3 -3
- data/test/models/membership.rb +35 -35
- data/test/models/minimalistic.rb +2 -2
- data/test/models/minivan.rb +9 -9
- data/test/models/mixed_case_monkey.rb +3 -3
- data/test/models/molecule.rb +6 -6
- data/test/models/movie.rb +5 -5
- data/test/models/order.rb +4 -4
- data/test/models/organization.rb +14 -14
- data/test/models/owner.rb +34 -34
- data/test/models/parrot.rb +29 -29
- data/test/models/person.rb +143 -143
- data/test/models/personal_legacy_thing.rb +4 -4
- data/test/models/pet.rb +15 -15
- data/test/models/pirate.rb +92 -92
- data/test/models/possession.rb +3 -3
- data/test/models/post.rb +264 -264
- data/test/models/price_estimate.rb +4 -4
- data/test/models/professor.rb +5 -5
- data/test/models/project.rb +31 -29
- data/test/models/publisher.rb +2 -2
- data/test/models/publisher/article.rb +4 -4
- data/test/models/publisher/magazine.rb +3 -3
- data/test/models/randomly_named_c1.rb +3 -3
- data/test/models/rating.rb +4 -4
- data/test/models/reader.rb +23 -23
- data/test/models/record.rb +2 -2
- data/test/models/reference.rb +22 -22
- data/test/models/reply.rb +61 -61
- data/test/models/ship.rb +33 -33
- data/test/models/ship_part.rb +7 -7
- data/test/models/shop.rb +17 -17
- data/test/models/shop_account.rb +6 -6
- data/test/models/speedometer.rb +6 -6
- data/test/models/sponsor.rb +7 -7
- data/test/models/string_key_object.rb +3 -3
- data/test/models/student.rb +4 -4
- data/test/models/subject.rb +16 -16
- data/test/models/subscriber.rb +8 -8
- data/test/models/subscription.rb +4 -4
- data/test/models/tag.rb +7 -7
- data/test/models/tagging.rb +13 -13
- data/test/models/task.rb +5 -5
- data/test/models/topic.rb +124 -124
- data/test/models/toy.rb +6 -6
- data/test/models/traffic_light.rb +4 -4
- data/test/models/treasure.rb +14 -14
- data/test/models/treaty.rb +7 -7
- data/test/models/tyre.rb +11 -11
- data/test/models/uuid_child.rb +3 -3
- data/test/models/uuid_parent.rb +3 -3
- data/test/models/vegetables.rb +24 -24
- data/test/models/vehicle.rb +6 -6
- data/test/models/vertex.rb +9 -9
- data/test/models/warehouse_thing.rb +5 -5
- data/test/models/wheel.rb +3 -3
- data/test/models/without_table.rb +3 -3
- data/test/models/zine.rb +3 -3
- data/test/schema/mysql2_specific_schema.rb +58 -58
- data/test/schema/mysql_specific_schema.rb +70 -70
- data/test/schema/oracle_specific_schema.rb +43 -43
- data/test/schema/postgresql_specific_schema.rb +202 -202
- data/test/schema/schema.rb +952 -938
- data/test/schema/sqlite_specific_schema.rb +21 -21
- data/test/support/config.rb +43 -43
- data/test/support/connection.rb +22 -22
- data/test/support/connection_helper.rb +14 -14
- data/test/support/ddl_helper.rb +8 -8
- data/test/support/schema_dumping_helper.rb +20 -20
- metadata +2 -2
@@ -1,192 +1,192 @@
|
|
1
|
-
require "cases/helper"
|
2
|
-
require 'models/post'
|
3
|
-
require 'models/author'
|
4
|
-
require 'models/project'
|
5
|
-
require 'models/developer'
|
6
|
-
require 'models/computer'
|
7
|
-
require 'models/company'
|
8
|
-
|
9
|
-
class AssociationCallbacksTest < ActiveRecord::TestCase
|
10
|
-
fixtures :posts, :authors, :projects, :developers, :author_addresses
|
11
|
-
|
12
|
-
def setup
|
13
|
-
@david = authors(:david)
|
14
|
-
@thinking = posts(:thinking)
|
15
|
-
@authorless = posts(:authorless)
|
16
|
-
assert @david.post_log.empty?
|
17
|
-
end
|
18
|
-
|
19
|
-
|
20
|
-
def test_adding_macro_callbacks
|
21
|
-
@david.posts_with_callbacks << @thinking
|
22
|
-
assert_equal ["before_adding#{@thinking.id}", "after_adding#{@thinking.id}"], @david.post_log
|
23
|
-
@david.posts_with_callbacks << @thinking
|
24
|
-
assert_equal ["before_adding#{@thinking.id}", "after_adding#{@thinking.id}", "before_adding#{@thinking.id}",
|
25
|
-
"after_adding#{@thinking.id}"], @david.post_log
|
26
|
-
end
|
27
|
-
|
28
|
-
|
29
|
-
def test_adding_with_proc_callbacks
|
30
|
-
@david.posts_with_proc_callbacks << @thinking
|
31
|
-
assert_equal ["before_adding#{@thinking.id}", "after_adding#{@thinking.id}"], @david.post_log
|
32
|
-
@david.posts_with_proc_callbacks << @thinking
|
33
|
-
assert_equal ["before_adding#{@thinking.id}", "after_adding#{@thinking.id}", "before_adding#{@thinking.id}",
|
34
|
-
"after_adding#{@thinking.id}"], @david.post_log
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_removing_with_macro_callbacks
|
38
|
-
first_post, second_post = @david.posts_with_callbacks[0, 2]
|
39
|
-
@david.posts_with_callbacks.delete(first_post)
|
40
|
-
assert_equal ["before_removing#{first_post.id}", "after_removing#{first_post.id}"], @david.post_log
|
41
|
-
@david.posts_with_callbacks.delete(second_post)
|
42
|
-
assert_equal ["before_removing#{first_post.id}", "after_removing#{first_post.id}", "before_removing#{second_post.id}",
|
43
|
-
"after_removing#{second_post.id}"], @david.post_log
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_removing_with_proc_callbacks
|
47
|
-
first_post, second_post = @david.posts_with_callbacks[0, 2]
|
48
|
-
@david.posts_with_proc_callbacks.delete(first_post)
|
49
|
-
assert_equal ["before_removing#{first_post.id}", "after_removing#{first_post.id}"], @david.post_log
|
50
|
-
@david.posts_with_proc_callbacks.delete(second_post)
|
51
|
-
assert_equal ["before_removing#{first_post.id}", "after_removing#{first_post.id}", "before_removing#{second_post.id}",
|
52
|
-
"after_removing#{second_post.id}"], @david.post_log
|
53
|
-
end
|
54
|
-
|
55
|
-
def test_multiple_callbacks
|
56
|
-
@david.posts_with_multiple_callbacks << @thinking
|
57
|
-
assert_equal ["before_adding#{@thinking.id}", "before_adding_proc#{@thinking.id}", "after_adding#{@thinking.id}",
|
58
|
-
"after_adding_proc#{@thinking.id}"], @david.post_log
|
59
|
-
@david.posts_with_multiple_callbacks << @thinking
|
60
|
-
assert_equal ["before_adding#{@thinking.id}", "before_adding_proc#{@thinking.id}", "after_adding#{@thinking.id}",
|
61
|
-
"after_adding_proc#{@thinking.id}", "before_adding#{@thinking.id}", "before_adding_proc#{@thinking.id}",
|
62
|
-
"after_adding#{@thinking.id}", "after_adding_proc#{@thinking.id}"], @david.post_log
|
63
|
-
end
|
64
|
-
|
65
|
-
def test_has_many_callbacks_with_create
|
66
|
-
morten = Author.create :name => "Morten"
|
67
|
-
post = morten.posts_with_proc_callbacks.create! :title => "Hello", :body => "How are you doing?"
|
68
|
-
assert_equal ["before_adding<new>", "after_adding#{post.id}"], morten.post_log
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_has_many_callbacks_with_create!
|
72
|
-
morten = Author.create! :name => "Morten"
|
73
|
-
post = morten.posts_with_proc_callbacks.create :title => "Hello", :body => "How are you doing?"
|
74
|
-
assert_equal ["before_adding<new>", "after_adding#{post.id}"], morten.post_log
|
75
|
-
end
|
76
|
-
|
77
|
-
def test_has_many_callbacks_for_save_on_parent
|
78
|
-
jack = Author.new :name => "Jack"
|
79
|
-
jack.posts_with_callbacks.build :title => "Call me back!", :body => "Before you wake up and after you sleep"
|
80
|
-
|
81
|
-
callback_log = ["before_adding<new>", "after_adding#{jack.posts_with_callbacks.first.id}"]
|
82
|
-
assert_equal callback_log, jack.post_log
|
83
|
-
assert jack.save
|
84
|
-
assert_equal 1, jack.posts_with_callbacks.count
|
85
|
-
assert_equal callback_log, jack.post_log
|
86
|
-
end
|
87
|
-
|
88
|
-
def test_has_many_callbacks_for_destroy_on_parent
|
89
|
-
firm = Firm.create! :name => "Firm"
|
90
|
-
client = firm.clients.create! :name => "Client"
|
91
|
-
firm.destroy
|
92
|
-
|
93
|
-
assert_equal ["before_remove#{client.id}", "after_remove#{client.id}"], firm.log
|
94
|
-
end
|
95
|
-
|
96
|
-
def test_has_and_belongs_to_many_add_callback
|
97
|
-
david = developers(:david)
|
98
|
-
ar = projects(:active_record)
|
99
|
-
assert ar.developers_log.empty?
|
100
|
-
ar.developers_with_callbacks << david
|
101
|
-
assert_equal ["before_adding#{david.id}", "after_adding#{david.id}"], ar.developers_log
|
102
|
-
ar.developers_with_callbacks << david
|
103
|
-
assert_equal ["before_adding#{david.id}", "after_adding#{david.id}", "before_adding#{david.id}",
|
104
|
-
"after_adding#{david.id}"], ar.developers_log
|
105
|
-
end
|
106
|
-
|
107
|
-
def test_has_and_belongs_to_many_before_add_called_before_save
|
108
|
-
dev = nil
|
109
|
-
new_dev = nil
|
110
|
-
klass = Class.new(Project) do
|
111
|
-
def self.name; Project.name; end
|
112
|
-
has_and_belongs_to_many :developers_with_callbacks,
|
113
|
-
:class_name => "Developer",
|
114
|
-
:before_add => lambda { |o,r|
|
115
|
-
dev = r
|
116
|
-
new_dev = r.new_record?
|
117
|
-
}
|
118
|
-
end
|
119
|
-
rec = klass.create!
|
120
|
-
alice = Developer.new(:name => 'alice')
|
121
|
-
rec.developers_with_callbacks << alice
|
122
|
-
assert_equal alice, dev
|
123
|
-
assert_not_nil new_dev
|
124
|
-
assert new_dev, "record should not have been saved"
|
125
|
-
assert_not alice.new_record?
|
126
|
-
end
|
127
|
-
|
128
|
-
def test_has_and_belongs_to_many_after_add_called_after_save
|
129
|
-
ar = projects(:active_record)
|
130
|
-
assert ar.developers_log.empty?
|
131
|
-
alice = Developer.new(:name => 'alice')
|
132
|
-
ar.developers_with_callbacks << alice
|
133
|
-
assert_equal"after_adding#{alice.id}", ar.developers_log.last
|
134
|
-
|
135
|
-
bob = ar.developers_with_callbacks.create(:name => 'bob')
|
136
|
-
assert_equal "after_adding#{bob.id}", ar.developers_log.last
|
137
|
-
|
138
|
-
ar.developers_with_callbacks.build(:name => 'charlie')
|
139
|
-
assert_equal "after_adding<new>", ar.developers_log.last
|
140
|
-
end
|
141
|
-
|
142
|
-
|
143
|
-
def test_has_and_belongs_to_many_remove_callback
|
144
|
-
david = developers(:david)
|
145
|
-
jamis = developers(:jamis)
|
146
|
-
activerecord = projects(:active_record)
|
147
|
-
assert activerecord.developers_log.empty?
|
148
|
-
activerecord.developers_with_callbacks.delete(david)
|
149
|
-
assert_equal ["before_removing#{david.id}", "after_removing#{david.id}"], activerecord.developers_log
|
150
|
-
|
151
|
-
activerecord.developers_with_callbacks.delete(jamis)
|
152
|
-
assert_equal ["before_removing#{david.id}", "after_removing#{david.id}", "before_removing#{jamis.id}",
|
153
|
-
"after_removing#{jamis.id}"], activerecord.developers_log
|
154
|
-
end
|
155
|
-
|
156
|
-
def test_has_and_belongs_to_many_does_not_fire_callbacks_on_clear
|
157
|
-
activerecord = projects(:active_record)
|
158
|
-
assert activerecord.developers_log.empty?
|
159
|
-
if activerecord.developers_with_callbacks.size == 0
|
160
|
-
activerecord.developers << developers(:david)
|
161
|
-
activerecord.developers << developers(:jamis)
|
162
|
-
activerecord.reload
|
163
|
-
assert activerecord.developers_with_callbacks.size == 2
|
164
|
-
end
|
165
|
-
activerecord.developers_with_callbacks.flat_map {|d| ["before_removing#{d.id}","after_removing#{d.id}"]}.sort
|
166
|
-
assert activerecord.developers_with_callbacks.clear
|
167
|
-
assert_predicate activerecord.developers_log, :empty?
|
168
|
-
end
|
169
|
-
|
170
|
-
def test_has_many_and_belongs_to_many_callbacks_for_save_on_parent
|
171
|
-
project = Project.new :name => "Callbacks"
|
172
|
-
project.developers_with_callbacks.build :name => "Jack", :salary => 95000
|
173
|
-
|
174
|
-
callback_log = ["before_adding<new>", "after_adding<new>"]
|
175
|
-
assert_equal callback_log, project.developers_log
|
176
|
-
assert project.save
|
177
|
-
assert_equal 1, project.developers_with_callbacks.size
|
178
|
-
assert_equal callback_log, project.developers_log
|
179
|
-
end
|
180
|
-
|
181
|
-
def test_dont_add_if_before_callback_raises_exception
|
182
|
-
assert !@david.unchangable_posts.include?(@authorless)
|
183
|
-
begin
|
184
|
-
@david.unchangable_posts << @authorless
|
185
|
-
rescue Exception
|
186
|
-
end
|
187
|
-
assert @david.post_log.empty?
|
188
|
-
assert !@david.unchangable_posts.include?(@authorless)
|
189
|
-
@david.reload
|
190
|
-
assert !@david.unchangable_posts.include?(@authorless)
|
191
|
-
end
|
192
|
-
end
|
1
|
+
require "cases/helper"
|
2
|
+
require 'models/post'
|
3
|
+
require 'models/author'
|
4
|
+
require 'models/project'
|
5
|
+
require 'models/developer'
|
6
|
+
require 'models/computer'
|
7
|
+
require 'models/company'
|
8
|
+
|
9
|
+
class AssociationCallbacksTest < ActiveRecord::TestCase
|
10
|
+
fixtures :posts, :authors, :projects, :developers, :author_addresses
|
11
|
+
|
12
|
+
def setup
|
13
|
+
@david = authors(:david)
|
14
|
+
@thinking = posts(:thinking)
|
15
|
+
@authorless = posts(:authorless)
|
16
|
+
assert @david.post_log.empty?
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
def test_adding_macro_callbacks
|
21
|
+
@david.posts_with_callbacks << @thinking
|
22
|
+
assert_equal ["before_adding#{@thinking.id}", "after_adding#{@thinking.id}"], @david.post_log
|
23
|
+
@david.posts_with_callbacks << @thinking
|
24
|
+
assert_equal ["before_adding#{@thinking.id}", "after_adding#{@thinking.id}", "before_adding#{@thinking.id}",
|
25
|
+
"after_adding#{@thinking.id}"], @david.post_log
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
def test_adding_with_proc_callbacks
|
30
|
+
@david.posts_with_proc_callbacks << @thinking
|
31
|
+
assert_equal ["before_adding#{@thinking.id}", "after_adding#{@thinking.id}"], @david.post_log
|
32
|
+
@david.posts_with_proc_callbacks << @thinking
|
33
|
+
assert_equal ["before_adding#{@thinking.id}", "after_adding#{@thinking.id}", "before_adding#{@thinking.id}",
|
34
|
+
"after_adding#{@thinking.id}"], @david.post_log
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_removing_with_macro_callbacks
|
38
|
+
first_post, second_post = @david.posts_with_callbacks[0, 2]
|
39
|
+
@david.posts_with_callbacks.delete(first_post)
|
40
|
+
assert_equal ["before_removing#{first_post.id}", "after_removing#{first_post.id}"], @david.post_log
|
41
|
+
@david.posts_with_callbacks.delete(second_post)
|
42
|
+
assert_equal ["before_removing#{first_post.id}", "after_removing#{first_post.id}", "before_removing#{second_post.id}",
|
43
|
+
"after_removing#{second_post.id}"], @david.post_log
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_removing_with_proc_callbacks
|
47
|
+
first_post, second_post = @david.posts_with_callbacks[0, 2]
|
48
|
+
@david.posts_with_proc_callbacks.delete(first_post)
|
49
|
+
assert_equal ["before_removing#{first_post.id}", "after_removing#{first_post.id}"], @david.post_log
|
50
|
+
@david.posts_with_proc_callbacks.delete(second_post)
|
51
|
+
assert_equal ["before_removing#{first_post.id}", "after_removing#{first_post.id}", "before_removing#{second_post.id}",
|
52
|
+
"after_removing#{second_post.id}"], @david.post_log
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_multiple_callbacks
|
56
|
+
@david.posts_with_multiple_callbacks << @thinking
|
57
|
+
assert_equal ["before_adding#{@thinking.id}", "before_adding_proc#{@thinking.id}", "after_adding#{@thinking.id}",
|
58
|
+
"after_adding_proc#{@thinking.id}"], @david.post_log
|
59
|
+
@david.posts_with_multiple_callbacks << @thinking
|
60
|
+
assert_equal ["before_adding#{@thinking.id}", "before_adding_proc#{@thinking.id}", "after_adding#{@thinking.id}",
|
61
|
+
"after_adding_proc#{@thinking.id}", "before_adding#{@thinking.id}", "before_adding_proc#{@thinking.id}",
|
62
|
+
"after_adding#{@thinking.id}", "after_adding_proc#{@thinking.id}"], @david.post_log
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_has_many_callbacks_with_create
|
66
|
+
morten = Author.create :name => "Morten"
|
67
|
+
post = morten.posts_with_proc_callbacks.create! :title => "Hello", :body => "How are you doing?"
|
68
|
+
assert_equal ["before_adding<new>", "after_adding#{post.id}"], morten.post_log
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_has_many_callbacks_with_create!
|
72
|
+
morten = Author.create! :name => "Morten"
|
73
|
+
post = morten.posts_with_proc_callbacks.create :title => "Hello", :body => "How are you doing?"
|
74
|
+
assert_equal ["before_adding<new>", "after_adding#{post.id}"], morten.post_log
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_has_many_callbacks_for_save_on_parent
|
78
|
+
jack = Author.new :name => "Jack"
|
79
|
+
jack.posts_with_callbacks.build :title => "Call me back!", :body => "Before you wake up and after you sleep"
|
80
|
+
|
81
|
+
callback_log = ["before_adding<new>", "after_adding#{jack.posts_with_callbacks.first.id}"]
|
82
|
+
assert_equal callback_log, jack.post_log
|
83
|
+
assert jack.save
|
84
|
+
assert_equal 1, jack.posts_with_callbacks.count
|
85
|
+
assert_equal callback_log, jack.post_log
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_has_many_callbacks_for_destroy_on_parent
|
89
|
+
firm = Firm.create! :name => "Firm"
|
90
|
+
client = firm.clients.create! :name => "Client"
|
91
|
+
firm.destroy
|
92
|
+
|
93
|
+
assert_equal ["before_remove#{client.id}", "after_remove#{client.id}"], firm.log
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_has_and_belongs_to_many_add_callback
|
97
|
+
david = developers(:david)
|
98
|
+
ar = projects(:active_record)
|
99
|
+
assert ar.developers_log.empty?
|
100
|
+
ar.developers_with_callbacks << david
|
101
|
+
assert_equal ["before_adding#{david.id}", "after_adding#{david.id}"], ar.developers_log
|
102
|
+
ar.developers_with_callbacks << david
|
103
|
+
assert_equal ["before_adding#{david.id}", "after_adding#{david.id}", "before_adding#{david.id}",
|
104
|
+
"after_adding#{david.id}"], ar.developers_log
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_has_and_belongs_to_many_before_add_called_before_save
|
108
|
+
dev = nil
|
109
|
+
new_dev = nil
|
110
|
+
klass = Class.new(Project) do
|
111
|
+
def self.name; Project.name; end
|
112
|
+
has_and_belongs_to_many :developers_with_callbacks,
|
113
|
+
:class_name => "Developer",
|
114
|
+
:before_add => lambda { |o,r|
|
115
|
+
dev = r
|
116
|
+
new_dev = r.new_record?
|
117
|
+
}
|
118
|
+
end
|
119
|
+
rec = klass.create!
|
120
|
+
alice = Developer.new(:name => 'alice')
|
121
|
+
rec.developers_with_callbacks << alice
|
122
|
+
assert_equal alice, dev
|
123
|
+
assert_not_nil new_dev
|
124
|
+
assert new_dev, "record should not have been saved"
|
125
|
+
assert_not alice.new_record?
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_has_and_belongs_to_many_after_add_called_after_save
|
129
|
+
ar = projects(:active_record)
|
130
|
+
assert ar.developers_log.empty?
|
131
|
+
alice = Developer.new(:name => 'alice')
|
132
|
+
ar.developers_with_callbacks << alice
|
133
|
+
assert_equal"after_adding#{alice.id}", ar.developers_log.last
|
134
|
+
|
135
|
+
bob = ar.developers_with_callbacks.create(:name => 'bob')
|
136
|
+
assert_equal "after_adding#{bob.id}", ar.developers_log.last
|
137
|
+
|
138
|
+
ar.developers_with_callbacks.build(:name => 'charlie')
|
139
|
+
assert_equal "after_adding<new>", ar.developers_log.last
|
140
|
+
end
|
141
|
+
|
142
|
+
|
143
|
+
def test_has_and_belongs_to_many_remove_callback
|
144
|
+
david = developers(:david)
|
145
|
+
jamis = developers(:jamis)
|
146
|
+
activerecord = projects(:active_record)
|
147
|
+
assert activerecord.developers_log.empty?
|
148
|
+
activerecord.developers_with_callbacks.delete(david)
|
149
|
+
assert_equal ["before_removing#{david.id}", "after_removing#{david.id}"], activerecord.developers_log
|
150
|
+
|
151
|
+
activerecord.developers_with_callbacks.delete(jamis)
|
152
|
+
assert_equal ["before_removing#{david.id}", "after_removing#{david.id}", "before_removing#{jamis.id}",
|
153
|
+
"after_removing#{jamis.id}"], activerecord.developers_log
|
154
|
+
end
|
155
|
+
|
156
|
+
def test_has_and_belongs_to_many_does_not_fire_callbacks_on_clear
|
157
|
+
activerecord = projects(:active_record)
|
158
|
+
assert activerecord.developers_log.empty?
|
159
|
+
if activerecord.developers_with_callbacks.size == 0
|
160
|
+
activerecord.developers << developers(:david)
|
161
|
+
activerecord.developers << developers(:jamis)
|
162
|
+
activerecord.reload
|
163
|
+
assert activerecord.developers_with_callbacks.size == 2
|
164
|
+
end
|
165
|
+
activerecord.developers_with_callbacks.flat_map {|d| ["before_removing#{d.id}","after_removing#{d.id}"]}.sort
|
166
|
+
assert activerecord.developers_with_callbacks.clear
|
167
|
+
assert_predicate activerecord.developers_log, :empty?
|
168
|
+
end
|
169
|
+
|
170
|
+
def test_has_many_and_belongs_to_many_callbacks_for_save_on_parent
|
171
|
+
project = Project.new :name => "Callbacks"
|
172
|
+
project.developers_with_callbacks.build :name => "Jack", :salary => 95000
|
173
|
+
|
174
|
+
callback_log = ["before_adding<new>", "after_adding<new>"]
|
175
|
+
assert_equal callback_log, project.developers_log
|
176
|
+
assert project.save
|
177
|
+
assert_equal 1, project.developers_with_callbacks.size
|
178
|
+
assert_equal callback_log, project.developers_log
|
179
|
+
end
|
180
|
+
|
181
|
+
def test_dont_add_if_before_callback_raises_exception
|
182
|
+
assert !@david.unchangable_posts.include?(@authorless)
|
183
|
+
begin
|
184
|
+
@david.unchangable_posts << @authorless
|
185
|
+
rescue Exception
|
186
|
+
end
|
187
|
+
assert @david.post_log.empty?
|
188
|
+
assert !@david.unchangable_posts.include?(@authorless)
|
189
|
+
@david.reload
|
190
|
+
assert !@david.unchangable_posts.include?(@authorless)
|
191
|
+
end
|
192
|
+
end
|
@@ -1,188 +1,188 @@
|
|
1
|
-
require "cases/helper"
|
2
|
-
require 'models/post'
|
3
|
-
require 'models/comment'
|
4
|
-
require 'models/author'
|
5
|
-
require 'models/categorization'
|
6
|
-
require 'models/category'
|
7
|
-
require 'models/company'
|
8
|
-
require 'models/topic'
|
9
|
-
require 'models/reply'
|
10
|
-
require 'models/person'
|
11
|
-
require 'models/vertex'
|
12
|
-
require 'models/edge'
|
13
|
-
|
14
|
-
class CascadedEagerLoadingTest < ActiveRecord::TestCase
|
15
|
-
fixtures :authors, :mixins, :companies, :posts, :topics, :accounts, :comments,
|
16
|
-
:categorizations, :people, :categories, :edges, :vertices, :author_addresses
|
17
|
-
|
18
|
-
def test_eager_association_loading_with_cascaded_two_levels
|
19
|
-
authors = Author.all.merge!(:includes=>{:posts=>:comments}, :order=>"authors.id").to_a
|
20
|
-
assert_equal 3, authors.size
|
21
|
-
assert_equal 5, authors[0].posts.size
|
22
|
-
assert_equal 3, authors[1].posts.size
|
23
|
-
assert_equal 10, authors[0].posts.collect{|post| post.comments.size }.inject(0){|sum,i| sum+i}
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_eager_association_loading_with_cascaded_two_levels_and_one_level
|
27
|
-
authors = Author.all.merge!(:includes=>[{:posts=>:comments}, :categorizations], :order=>"authors.id").to_a
|
28
|
-
assert_equal 3, authors.size
|
29
|
-
assert_equal 5, authors[0].posts.size
|
30
|
-
assert_equal 3, authors[1].posts.size
|
31
|
-
assert_equal 10, authors[0].posts.collect{|post| post.comments.size }.inject(0){|sum,i| sum+i}
|
32
|
-
assert_equal 1, authors[0].categorizations.size
|
33
|
-
assert_equal 2, authors[1].categorizations.size
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_eager_association_loading_with_hmt_does_not_table_name_collide_when_joining_associations
|
37
|
-
assert_nothing_raised do
|
38
|
-
Author.joins(:posts).eager_load(:comments).where(:posts => {:tags_count => 1}).to_a
|
39
|
-
end
|
40
|
-
authors = Author.joins(:posts).eager_load(:comments).where(:posts => {:tags_count => 1}).to_a
|
41
|
-
assert_equal 1, assert_no_queries { authors.size }
|
42
|
-
assert_equal 10, assert_no_queries { authors[0].comments.size }
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_eager_association_loading_grafts_stashed_associations_to_correct_parent
|
46
|
-
assert_nothing_raised do
|
47
|
-
Person.eager_load(:primary_contact => :primary_contact).where('primary_contacts_people_2.first_name = ?', 'Susan').order('people.id').to_a
|
48
|
-
end
|
49
|
-
assert_equal people(:michael), Person.eager_load(:primary_contact => :primary_contact).where('primary_contacts_people_2.first_name = ?', 'Susan').order('people.id').first
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_cascaded_eager_association_loading_with_join_for_count
|
53
|
-
categories = Category.joins(:categorizations).includes([{:posts=>:comments}, :authors])
|
54
|
-
|
55
|
-
assert_equal 4, categories.count
|
56
|
-
assert_equal 4, categories.to_a.count
|
57
|
-
assert_equal 3, categories.distinct.count
|
58
|
-
assert_equal 3, categories.to_a.uniq.size # Must uniq since instantiating with inner joins will get dupes
|
59
|
-
end
|
60
|
-
|
61
|
-
def test_cascaded_eager_association_loading_with_duplicated_includes
|
62
|
-
categories = Category.includes(:categorizations).includes(:categorizations => :author).where("categorizations.id is not null").references(:categorizations)
|
63
|
-
assert_nothing_raised do
|
64
|
-
assert_equal 3, categories.count
|
65
|
-
assert_equal 3, categories.to_a.size
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
def test_cascaded_eager_association_loading_with_twice_includes_edge_cases
|
70
|
-
categories = Category.includes(:categorizations => :author).includes(:categorizations => :post).where("posts.id is not null").references(:posts)
|
71
|
-
assert_nothing_raised do
|
72
|
-
assert_equal 3, categories.count
|
73
|
-
assert_equal 3, categories.to_a.size
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
def test_eager_association_loading_with_join_for_count
|
78
|
-
authors = Author.joins(:special_posts).includes([:posts, :categorizations])
|
79
|
-
|
80
|
-
assert_nothing_raised { authors.count }
|
81
|
-
assert_queries(3) { authors.to_a }
|
82
|
-
end
|
83
|
-
|
84
|
-
def test_eager_association_loading_with_cascaded_two_levels_with_two_has_many_associations
|
85
|
-
authors = Author.all.merge!(:includes=>{:posts=>[:comments, :categorizations]}, :order=>"authors.id").to_a
|
86
|
-
assert_equal 3, authors.size
|
87
|
-
assert_equal 5, authors[0].posts.size
|
88
|
-
assert_equal 3, authors[1].posts.size
|
89
|
-
assert_equal 10, authors[0].posts.collect{|post| post.comments.size }.inject(0){|sum,i| sum+i}
|
90
|
-
end
|
91
|
-
|
92
|
-
def test_eager_association_loading_with_cascaded_two_levels_and_self_table_reference
|
93
|
-
authors = Author.all.merge!(:includes=>{:posts=>[:comments, :author]}, :order=>"authors.id").to_a
|
94
|
-
assert_equal 3, authors.size
|
95
|
-
assert_equal 5, authors[0].posts.size
|
96
|
-
assert_equal authors(:david).name, authors[0].name
|
97
|
-
assert_equal [authors(:david).name], authors[0].posts.collect{|post| post.author.name}.uniq
|
98
|
-
end
|
99
|
-
|
100
|
-
def test_eager_association_loading_with_cascaded_two_levels_with_condition
|
101
|
-
authors = Author.all.merge!(:includes=>{:posts=>:comments}, :where=>"authors.id=1", :order=>"authors.id").to_a
|
102
|
-
assert_equal 1, authors.size
|
103
|
-
assert_equal 5, authors[0].posts.size
|
104
|
-
end
|
105
|
-
|
106
|
-
def test_eager_association_loading_with_cascaded_three_levels_by_ping_pong
|
107
|
-
firms = Firm.all.merge!(:includes=>{:account=>{:firm=>:account}}, :order=>"companies.id").to_a
|
108
|
-
assert_equal 2, firms.size
|
109
|
-
assert_equal firms.first.account, firms.first.account.firm.account
|
110
|
-
assert_equal companies(:first_firm).account, assert_no_queries { firms.first.account.firm.account }
|
111
|
-
assert_equal companies(:first_firm).account.firm.account, assert_no_queries { firms.first.account.firm.account }
|
112
|
-
end
|
113
|
-
|
114
|
-
def test_eager_association_loading_with_has_many_sti
|
115
|
-
topics = Topic.all.merge!(:includes => :replies, :order => 'topics.id').to_a
|
116
|
-
first, second, = topics(:first).replies.size, topics(:second).replies.size
|
117
|
-
assert_no_queries do
|
118
|
-
assert_equal first, topics[0].replies.size
|
119
|
-
assert_equal second, topics[1].replies.size
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
def test_eager_association_loading_with_has_many_sti_and_subclasses
|
124
|
-
silly = SillyReply.new(:title => "gaga", :content => "boo-boo", :parent_id => 1)
|
125
|
-
silly.parent_id = 1
|
126
|
-
assert silly.save
|
127
|
-
|
128
|
-
topics = Topic.all.merge!(:includes => :replies, :order => ['topics.id', 'replies_topics.id']).to_a
|
129
|
-
assert_no_queries do
|
130
|
-
assert_equal 2, topics[0].replies.size
|
131
|
-
assert_equal 0, topics[1].replies.size
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
def test_eager_association_loading_with_belongs_to_sti
|
136
|
-
replies = Reply.all.merge!(:includes => :topic, :order => 'topics.id').to_a
|
137
|
-
assert replies.include?(topics(:second))
|
138
|
-
assert !replies.include?(topics(:first))
|
139
|
-
assert_equal topics(:first), assert_no_queries { replies.first.topic }
|
140
|
-
end
|
141
|
-
|
142
|
-
def test_eager_association_loading_with_multiple_stis_and_order
|
143
|
-
author = Author.all.merge!(:includes => { :posts => [ :special_comments , :very_special_comment ] }, :order => ['authors.name', 'comments.body', 'very_special_comments_posts.body'], :where => 'posts.id = 4').first
|
144
|
-
assert_equal authors(:david), author
|
145
|
-
assert_no_queries do
|
146
|
-
author.posts.first.special_comments
|
147
|
-
author.posts.first.very_special_comment
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
def test_eager_association_loading_of_stis_with_multiple_references
|
152
|
-
authors = Author.all.merge!(:includes => { :posts => { :special_comments => { :post => [ :special_comments, :very_special_comment ] } } }, :order => 'comments.body, very_special_comments_posts.body', :where => 'posts.id = 4').to_a
|
153
|
-
assert_equal [authors(:david)], authors
|
154
|
-
assert_no_queries do
|
155
|
-
authors.first.posts.first.special_comments.first.post.special_comments
|
156
|
-
authors.first.posts.first.special_comments.first.post.very_special_comment
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
def test_eager_association_loading_where_first_level_returns_nil
|
161
|
-
authors = Author.all.merge!(:includes => {:post_about_thinking => :comments}, :order => 'authors.id DESC').to_a
|
162
|
-
assert_equal [authors(:bob), authors(:mary), authors(:david)], authors
|
163
|
-
assert_no_queries do
|
164
|
-
authors[2].post_about_thinking.comments.first
|
165
|
-
end
|
166
|
-
end
|
167
|
-
|
168
|
-
def test_eager_association_loading_with_recursive_cascading_four_levels_has_many_through
|
169
|
-
source = Vertex.all.merge!(:includes=>{:sinks=>{:sinks=>{:sinks=>:sinks}}}, :order => 'vertices.id').first
|
170
|
-
assert_equal vertices(:vertex_4), assert_no_queries { source.sinks.first.sinks.first.sinks.first }
|
171
|
-
end
|
172
|
-
|
173
|
-
def test_eager_association_loading_with_recursive_cascading_four_levels_has_and_belongs_to_many
|
174
|
-
sink = Vertex.all.merge!(:includes=>{:sources=>{:sources=>{:sources=>:sources}}}, :order => 'vertices.id DESC').first
|
175
|
-
assert_equal vertices(:vertex_1), assert_no_queries { sink.sources.first.sources.first.sources.first.sources.first }
|
176
|
-
end
|
177
|
-
|
178
|
-
def test_eager_association_loading_with_cascaded_interdependent_one_level_and_two_levels
|
179
|
-
authors_relation = Author.all.merge!(includes: [:comments, { posts: :categorizations }], order: "authors.id")
|
180
|
-
authors = authors_relation.to_a
|
181
|
-
assert_equal 3, authors.size
|
182
|
-
assert_equal 10, authors[0].comments.size
|
183
|
-
assert_equal 1, authors[1].comments.size
|
184
|
-
assert_equal 5, authors[0].posts.size
|
185
|
-
assert_equal 3, authors[1].posts.size
|
186
|
-
assert_equal 3, authors[0].posts.collect { |post| post.categorizations.size }.inject(0) { |sum, i| sum+i }
|
187
|
-
end
|
188
|
-
end
|
1
|
+
require "cases/helper"
|
2
|
+
require 'models/post'
|
3
|
+
require 'models/comment'
|
4
|
+
require 'models/author'
|
5
|
+
require 'models/categorization'
|
6
|
+
require 'models/category'
|
7
|
+
require 'models/company'
|
8
|
+
require 'models/topic'
|
9
|
+
require 'models/reply'
|
10
|
+
require 'models/person'
|
11
|
+
require 'models/vertex'
|
12
|
+
require 'models/edge'
|
13
|
+
|
14
|
+
class CascadedEagerLoadingTest < ActiveRecord::TestCase
|
15
|
+
fixtures :authors, :mixins, :companies, :posts, :topics, :accounts, :comments,
|
16
|
+
:categorizations, :people, :categories, :edges, :vertices, :author_addresses
|
17
|
+
|
18
|
+
def test_eager_association_loading_with_cascaded_two_levels
|
19
|
+
authors = Author.all.merge!(:includes=>{:posts=>:comments}, :order=>"authors.id").to_a
|
20
|
+
assert_equal 3, authors.size
|
21
|
+
assert_equal 5, authors[0].posts.size
|
22
|
+
assert_equal 3, authors[1].posts.size
|
23
|
+
assert_equal 10, authors[0].posts.collect{|post| post.comments.size }.inject(0){|sum,i| sum+i}
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_eager_association_loading_with_cascaded_two_levels_and_one_level
|
27
|
+
authors = Author.all.merge!(:includes=>[{:posts=>:comments}, :categorizations], :order=>"authors.id").to_a
|
28
|
+
assert_equal 3, authors.size
|
29
|
+
assert_equal 5, authors[0].posts.size
|
30
|
+
assert_equal 3, authors[1].posts.size
|
31
|
+
assert_equal 10, authors[0].posts.collect{|post| post.comments.size }.inject(0){|sum,i| sum+i}
|
32
|
+
assert_equal 1, authors[0].categorizations.size
|
33
|
+
assert_equal 2, authors[1].categorizations.size
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_eager_association_loading_with_hmt_does_not_table_name_collide_when_joining_associations
|
37
|
+
assert_nothing_raised do
|
38
|
+
Author.joins(:posts).eager_load(:comments).where(:posts => {:tags_count => 1}).to_a
|
39
|
+
end
|
40
|
+
authors = Author.joins(:posts).eager_load(:comments).where(:posts => {:tags_count => 1}).to_a
|
41
|
+
assert_equal 1, assert_no_queries { authors.size }
|
42
|
+
assert_equal 10, assert_no_queries { authors[0].comments.size }
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_eager_association_loading_grafts_stashed_associations_to_correct_parent
|
46
|
+
assert_nothing_raised do
|
47
|
+
Person.eager_load(:primary_contact => :primary_contact).where('primary_contacts_people_2.first_name = ?', 'Susan').order('people.id').to_a
|
48
|
+
end
|
49
|
+
assert_equal people(:michael), Person.eager_load(:primary_contact => :primary_contact).where('primary_contacts_people_2.first_name = ?', 'Susan').order('people.id').first
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_cascaded_eager_association_loading_with_join_for_count
|
53
|
+
categories = Category.joins(:categorizations).includes([{:posts=>:comments}, :authors])
|
54
|
+
|
55
|
+
assert_equal 4, categories.count
|
56
|
+
assert_equal 4, categories.to_a.count
|
57
|
+
assert_equal 3, categories.distinct.count
|
58
|
+
assert_equal 3, categories.to_a.uniq.size # Must uniq since instantiating with inner joins will get dupes
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_cascaded_eager_association_loading_with_duplicated_includes
|
62
|
+
categories = Category.includes(:categorizations).includes(:categorizations => :author).where("categorizations.id is not null").references(:categorizations)
|
63
|
+
assert_nothing_raised do
|
64
|
+
assert_equal 3, categories.count
|
65
|
+
assert_equal 3, categories.to_a.size
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_cascaded_eager_association_loading_with_twice_includes_edge_cases
|
70
|
+
categories = Category.includes(:categorizations => :author).includes(:categorizations => :post).where("posts.id is not null").references(:posts)
|
71
|
+
assert_nothing_raised do
|
72
|
+
assert_equal 3, categories.count
|
73
|
+
assert_equal 3, categories.to_a.size
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_eager_association_loading_with_join_for_count
|
78
|
+
authors = Author.joins(:special_posts).includes([:posts, :categorizations])
|
79
|
+
|
80
|
+
assert_nothing_raised { authors.count }
|
81
|
+
assert_queries(3) { authors.to_a }
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_eager_association_loading_with_cascaded_two_levels_with_two_has_many_associations
|
85
|
+
authors = Author.all.merge!(:includes=>{:posts=>[:comments, :categorizations]}, :order=>"authors.id").to_a
|
86
|
+
assert_equal 3, authors.size
|
87
|
+
assert_equal 5, authors[0].posts.size
|
88
|
+
assert_equal 3, authors[1].posts.size
|
89
|
+
assert_equal 10, authors[0].posts.collect{|post| post.comments.size }.inject(0){|sum,i| sum+i}
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_eager_association_loading_with_cascaded_two_levels_and_self_table_reference
|
93
|
+
authors = Author.all.merge!(:includes=>{:posts=>[:comments, :author]}, :order=>"authors.id").to_a
|
94
|
+
assert_equal 3, authors.size
|
95
|
+
assert_equal 5, authors[0].posts.size
|
96
|
+
assert_equal authors(:david).name, authors[0].name
|
97
|
+
assert_equal [authors(:david).name], authors[0].posts.collect{|post| post.author.name}.uniq
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_eager_association_loading_with_cascaded_two_levels_with_condition
|
101
|
+
authors = Author.all.merge!(:includes=>{:posts=>:comments}, :where=>"authors.id=1", :order=>"authors.id").to_a
|
102
|
+
assert_equal 1, authors.size
|
103
|
+
assert_equal 5, authors[0].posts.size
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_eager_association_loading_with_cascaded_three_levels_by_ping_pong
|
107
|
+
firms = Firm.all.merge!(:includes=>{:account=>{:firm=>:account}}, :order=>"companies.id").to_a
|
108
|
+
assert_equal 2, firms.size
|
109
|
+
assert_equal firms.first.account, firms.first.account.firm.account
|
110
|
+
assert_equal companies(:first_firm).account, assert_no_queries { firms.first.account.firm.account }
|
111
|
+
assert_equal companies(:first_firm).account.firm.account, assert_no_queries { firms.first.account.firm.account }
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_eager_association_loading_with_has_many_sti
|
115
|
+
topics = Topic.all.merge!(:includes => :replies, :order => 'topics.id').to_a
|
116
|
+
first, second, = topics(:first).replies.size, topics(:second).replies.size
|
117
|
+
assert_no_queries do
|
118
|
+
assert_equal first, topics[0].replies.size
|
119
|
+
assert_equal second, topics[1].replies.size
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_eager_association_loading_with_has_many_sti_and_subclasses
|
124
|
+
silly = SillyReply.new(:title => "gaga", :content => "boo-boo", :parent_id => 1)
|
125
|
+
silly.parent_id = 1
|
126
|
+
assert silly.save
|
127
|
+
|
128
|
+
topics = Topic.all.merge!(:includes => :replies, :order => ['topics.id', 'replies_topics.id']).to_a
|
129
|
+
assert_no_queries do
|
130
|
+
assert_equal 2, topics[0].replies.size
|
131
|
+
assert_equal 0, topics[1].replies.size
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
def test_eager_association_loading_with_belongs_to_sti
|
136
|
+
replies = Reply.all.merge!(:includes => :topic, :order => 'topics.id').to_a
|
137
|
+
assert replies.include?(topics(:second))
|
138
|
+
assert !replies.include?(topics(:first))
|
139
|
+
assert_equal topics(:first), assert_no_queries { replies.first.topic }
|
140
|
+
end
|
141
|
+
|
142
|
+
def test_eager_association_loading_with_multiple_stis_and_order
|
143
|
+
author = Author.all.merge!(:includes => { :posts => [ :special_comments , :very_special_comment ] }, :order => ['authors.name', 'comments.body', 'very_special_comments_posts.body'], :where => 'posts.id = 4').first
|
144
|
+
assert_equal authors(:david), author
|
145
|
+
assert_no_queries do
|
146
|
+
author.posts.first.special_comments
|
147
|
+
author.posts.first.very_special_comment
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
def test_eager_association_loading_of_stis_with_multiple_references
|
152
|
+
authors = Author.all.merge!(:includes => { :posts => { :special_comments => { :post => [ :special_comments, :very_special_comment ] } } }, :order => 'comments.body, very_special_comments_posts.body', :where => 'posts.id = 4').to_a
|
153
|
+
assert_equal [authors(:david)], authors
|
154
|
+
assert_no_queries do
|
155
|
+
authors.first.posts.first.special_comments.first.post.special_comments
|
156
|
+
authors.first.posts.first.special_comments.first.post.very_special_comment
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
def test_eager_association_loading_where_first_level_returns_nil
|
161
|
+
authors = Author.all.merge!(:includes => {:post_about_thinking => :comments}, :order => 'authors.id DESC').to_a
|
162
|
+
assert_equal [authors(:bob), authors(:mary), authors(:david)], authors
|
163
|
+
assert_no_queries do
|
164
|
+
authors[2].post_about_thinking.comments.first
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
def test_eager_association_loading_with_recursive_cascading_four_levels_has_many_through
|
169
|
+
source = Vertex.all.merge!(:includes=>{:sinks=>{:sinks=>{:sinks=>:sinks}}}, :order => 'vertices.id').first
|
170
|
+
assert_equal vertices(:vertex_4), assert_no_queries { source.sinks.first.sinks.first.sinks.first }
|
171
|
+
end
|
172
|
+
|
173
|
+
def test_eager_association_loading_with_recursive_cascading_four_levels_has_and_belongs_to_many
|
174
|
+
sink = Vertex.all.merge!(:includes=>{:sources=>{:sources=>{:sources=>:sources}}}, :order => 'vertices.id DESC').first
|
175
|
+
assert_equal vertices(:vertex_1), assert_no_queries { sink.sources.first.sources.first.sources.first.sources.first }
|
176
|
+
end
|
177
|
+
|
178
|
+
def test_eager_association_loading_with_cascaded_interdependent_one_level_and_two_levels
|
179
|
+
authors_relation = Author.all.merge!(includes: [:comments, { posts: :categorizations }], order: "authors.id")
|
180
|
+
authors = authors_relation.to_a
|
181
|
+
assert_equal 3, authors.size
|
182
|
+
assert_equal 10, authors[0].comments.size
|
183
|
+
assert_equal 1, authors[1].comments.size
|
184
|
+
assert_equal 5, authors[0].posts.size
|
185
|
+
assert_equal 3, authors[1].posts.size
|
186
|
+
assert_equal 3, authors[0].posts.collect { |post| post.categorizations.size }.inject(0) { |sum, i| sum+i }
|
187
|
+
end
|
188
|
+
end
|