ibm_db 3.0.0-x86-mingw32 → 3.0.1-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 -0
- data/MANIFEST +14 -14
- data/README +225 -225
- data/ext/Makefile.nt32 +181 -181
- data/ext/Makefile.nt32.191 +212 -212
- data/ext/OLD/extconf.rb +264 -0
- data/ext/{extconf_MacOS.rb → OLD/extconf_MacOS.rb} +269 -269
- data/ext/extconf.rb +291 -264
- data/ext/ibm_db.c +2 -2
- data/ext/ruby_ibm_db.h +241 -241
- 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 +4 -4
- 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 +115 -115
- data/test/active_record/connection_adapters/fake_adapter.rb +46 -0
- data/test/assets/example.log +1 -0
- data/test/assets/flowers.jpg +0 -0
- data/test/assets/test.txt +1 -0
- data/test/cases/adapter_test.rb +261 -207
- data/test/cases/aggregations_test.rb +158 -0
- data/test/cases/ar_schema_test.rb +161 -0
- data/test/cases/associations/association_scope_test.rb +21 -0
- data/test/cases/associations/belongs_to_associations_test.rb +1029 -711
- data/test/cases/associations/callbacks_test.rb +192 -0
- data/test/cases/associations/cascaded_eager_loading_test.rb +188 -181
- data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +26 -0
- data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -0
- data/test/cases/associations/eager_load_nested_include_test.rb +128 -0
- data/test/cases/associations/eager_singularization_test.rb +148 -0
- data/test/cases/associations/eager_test.rb +1411 -0
- data/test/cases/associations/extension_test.rb +82 -0
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +932 -851
- data/test/cases/associations/has_many_associations_test.rb +2162 -0
- data/test/cases/associations/has_many_through_associations_test.rb +1204 -0
- data/test/cases/associations/has_one_associations_test.rb +610 -0
- data/test/cases/associations/has_one_through_associations_test.rb +380 -0
- data/test/cases/associations/inner_join_association_test.rb +139 -0
- data/test/cases/associations/inverse_associations_test.rb +693 -0
- data/test/cases/associations/join_model_test.rb +754 -743
- data/test/cases/associations/nested_through_associations_test.rb +579 -0
- data/test/cases/associations/required_test.rb +82 -0
- data/test/cases/associations_test.rb +380 -0
- data/test/cases/attribute_decorators_test.rb +125 -0
- data/test/cases/attribute_methods/read_test.rb +60 -0
- data/test/cases/attribute_methods/serialization_test.rb +29 -0
- data/test/cases/attribute_methods_test.rb +952 -822
- data/test/cases/attribute_set_test.rb +200 -0
- data/test/cases/attribute_test.rb +180 -0
- data/test/cases/attributes_test.rb +136 -0
- data/test/cases/autosave_association_test.rb +1595 -0
- data/test/cases/base_test.rb +1638 -2133
- data/test/cases/batches_test.rb +212 -0
- data/test/cases/binary_test.rb +52 -0
- data/test/cases/bind_parameter_test.rb +100 -0
- data/test/cases/calculations_test.rb +646 -482
- data/test/cases/callbacks_test.rb +543 -0
- data/test/cases/clone_test.rb +40 -0
- data/test/cases/coders/yaml_column_test.rb +63 -0
- data/test/cases/column_alias_test.rb +17 -0
- data/test/cases/column_definition_test.rb +123 -0
- data/test/cases/connection_adapters/adapter_leasing_test.rb +54 -0
- data/test/cases/connection_adapters/connection_handler_test.rb +53 -0
- data/test/cases/connection_adapters/connection_specification_test.rb +12 -0
- data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +293 -0
- data/test/cases/connection_adapters/mysql_type_lookup_test.rb +65 -0
- data/test/cases/connection_adapters/quoting_test.rb +13 -0
- data/test/cases/connection_adapters/schema_cache_test.rb +56 -0
- data/test/cases/connection_adapters/type_lookup_test.rb +110 -0
- data/test/cases/connection_management_test.rb +122 -0
- data/test/cases/connection_pool_test.rb +346 -0
- data/test/cases/connection_specification/resolver_test.rb +116 -0
- data/test/cases/core_test.rb +112 -0
- data/test/cases/counter_cache_test.rb +209 -0
- data/test/cases/custom_locking_test.rb +17 -0
- data/test/cases/database_statements_test.rb +19 -0
- data/test/cases/date_time_test.rb +61 -0
- data/test/cases/defaults_test.rb +223 -0
- data/test/cases/dirty_test.rb +775 -0
- data/test/cases/disconnected_test.rb +28 -0
- data/test/cases/dup_test.rb +157 -0
- data/test/cases/enum_test.rb +290 -0
- data/test/cases/explain_subscriber_test.rb +64 -0
- data/test/cases/explain_test.rb +76 -0
- data/test/cases/finder_respond_to_test.rb +60 -0
- data/test/cases/finder_test.rb +1166 -0
- data/test/cases/fixture_set/file_test.rb +138 -0
- data/test/cases/fixtures_test.rb +897 -0
- data/test/cases/forbidden_attributes_protection_test.rb +99 -0
- data/test/cases/habtm_destroy_order_test.rb +61 -0
- data/test/cases/helper.rb +210 -0
- data/test/cases/hot_compatibility_test.rb +54 -0
- data/test/cases/i18n_test.rb +45 -0
- data/test/cases/inheritance_test.rb +375 -0
- data/test/cases/integration_test.rb +139 -0
- data/test/cases/invalid_connection_test.rb +22 -0
- data/test/cases/invalid_date_test.rb +32 -0
- data/test/cases/invertible_migration_test.rb +295 -0
- data/test/cases/json_serialization_test.rb +302 -0
- data/test/cases/locking_test.rb +477 -0
- data/test/cases/log_subscriber_test.rb +136 -0
- data/test/cases/migration/change_schema_test - Copy.rb +448 -0
- data/test/cases/migration/change_schema_test.rb +472 -0
- data/test/cases/migration/change_table_test.rb +224 -0
- data/test/cases/migration/column_attributes_test.rb +192 -0
- data/test/cases/migration/column_positioning_test.rb +56 -0
- data/test/cases/migration/columns_test.rb +304 -0
- data/test/cases/migration/command_recorder_test.rb +305 -0
- data/test/cases/migration/create_join_table_test.rb +148 -0
- data/test/cases/migration/foreign_key_test - Changed.rb +325 -0
- data/test/cases/migration/foreign_key_test.rb +360 -0
- data/test/cases/migration/helper.rb +39 -0
- data/test/cases/migration/index_test.rb +216 -0
- data/test/cases/migration/logger_test.rb +36 -0
- data/test/cases/migration/pending_migrations_test.rb +53 -0
- data/test/cases/migration/references_foreign_key_test.rb +214 -0
- data/test/cases/migration/references_index_test.rb +101 -0
- data/test/cases/migration/references_statements_test.rb +116 -0
- data/test/cases/migration/rename_table_test.rb +93 -0
- data/test/cases/migration/table_and_index_test.rb +24 -0
- data/test/cases/migration_test.rb +959 -2408
- data/test/cases/migrator_test.rb +388 -0
- data/test/cases/mixin_test.rb +70 -0
- data/test/cases/modules_test.rb +173 -0
- data/test/cases/multiparameter_attributes_test.rb +350 -0
- data/test/cases/multiple_db_test.rb +115 -0
- data/test/cases/nested_attributes_test.rb +1057 -0
- data/test/cases/nested_attributes_with_callbacks_test.rb +144 -0
- data/test/cases/persistence_test.rb +909 -642
- data/test/cases/pooled_connections_test.rb +81 -0
- data/test/cases/primary_keys_test.rb +237 -0
- data/test/cases/query_cache_test.rb +326 -257
- data/test/cases/quoting_test.rb +156 -0
- data/test/cases/readonly_test.rb +118 -0
- data/test/cases/reaper_test.rb +85 -0
- data/test/cases/reflection_test.rb +454 -0
- data/test/cases/relation/delegation_test.rb +68 -0
- data/test/cases/relation/merging_test.rb +161 -0
- data/test/cases/relation/mutation_test.rb +165 -0
- data/test/cases/relation/predicate_builder_test.rb +14 -0
- data/test/cases/relation/where_chain_test.rb +181 -0
- data/test/cases/relation/where_test.rb +300 -0
- data/test/cases/relation/where_test2.rb +36 -0
- data/test/cases/relation_test.rb +297 -0
- data/test/cases/relations_test.rb +1815 -1182
- data/test/cases/reload_models_test.rb +22 -0
- data/test/cases/result_test.rb +80 -0
- data/test/cases/sanitize_test.rb +83 -0
- data/test/cases/schema_dumper_test.rb +463 -256
- data/test/cases/scoping/default_scoping_test.rb +454 -0
- data/test/cases/scoping/named_scoping_test.rb +524 -0
- data/test/cases/scoping/relation_scoping_test.rb +357 -0
- data/test/cases/serialization_test.rb +104 -0
- data/test/cases/serialized_attribute_test.rb +277 -0
- data/test/cases/statement_cache_test.rb +98 -0
- data/test/cases/store_test.rb +194 -0
- data/test/cases/tasks/database_tasks_test.rb +396 -0
- data/test/cases/tasks/mysql_rake_test.rb +311 -0
- data/test/cases/tasks/postgresql_rake_test.rb +245 -0
- data/test/cases/tasks/sqlite_rake_test.rb +193 -0
- data/test/cases/test_case.rb +123 -0
- data/test/cases/timestamp_test.rb +468 -0
- data/test/cases/transaction_callbacks_test.rb +452 -300
- data/test/cases/transaction_isolation_test.rb +106 -0
- data/test/cases/transactions_test.rb +817 -0
- data/test/cases/type/decimal_test.rb +51 -0
- data/test/cases/type/integer_test.rb +121 -0
- data/test/cases/type/string_test.rb +36 -0
- data/test/cases/type/type_map_test.rb +177 -0
- data/test/cases/type/unsigned_integer_test.rb +18 -0
- data/test/cases/types_test.rb +141 -0
- data/test/cases/unconnected_test.rb +33 -0
- data/test/cases/validations/association_validation_test.rb +86 -0
- data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -0
- data/test/cases/validations/i18n_validation_test.rb +90 -0
- data/test/cases/validations/length_validation_test.rb +47 -0
- data/test/cases/validations/presence_validation_test.rb +68 -0
- data/test/cases/validations/uniqueness_validation_test.rb +434 -299
- data/test/cases/validations_repair_helper.rb +23 -0
- data/test/cases/validations_test.rb +165 -0
- data/test/cases/view_test.rb +113 -0
- data/test/cases/xml_serialization_test.rb +457 -408
- data/test/cases/yaml_serialization_test.rb +86 -0
- data/test/config.rb +5 -0
- data/test/config.yml +154 -154
- data/test/connections/native_ibm_db/connection.rb +43 -43
- data/test/fixtures/accounts.yml +29 -0
- data/test/fixtures/admin/accounts.yml +2 -0
- data/test/fixtures/admin/randomly_named_a9.yml +7 -0
- data/test/fixtures/admin/randomly_named_b0.yml +7 -0
- data/test/fixtures/admin/users.yml +10 -0
- data/test/fixtures/all/admin +1 -0
- data/test/fixtures/all/developers.yml +0 -0
- data/test/fixtures/all/people.yml +0 -0
- data/test/fixtures/all/tasks.yml +0 -0
- data/test/fixtures/author_addresses.yml +18 -0
- data/test/fixtures/author_favorites.yml +4 -0
- data/test/fixtures/authors.yml +23 -0
- data/test/fixtures/binaries.yml +133 -0
- data/test/fixtures/books.yml +11 -0
- data/test/fixtures/bulbs.yml +5 -0
- data/test/fixtures/cars.yml +9 -0
- data/test/fixtures/categories.yml +19 -0
- data/test/fixtures/categories/special_categories.yml +9 -0
- data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -0
- data/test/fixtures/categories_ordered.yml +7 -0
- data/test/fixtures/categories_posts.yml +31 -0
- data/test/fixtures/categorizations.yml +23 -0
- data/test/fixtures/clubs.yml +8 -0
- data/test/fixtures/collections.yml +3 -0
- data/test/fixtures/colleges.yml +3 -0
- data/test/fixtures/comments.yml +65 -0
- data/test/fixtures/companies.yml +67 -0
- data/test/fixtures/computers.yml +10 -0
- data/test/fixtures/courses.yml +8 -0
- data/test/fixtures/customers.yml +26 -0
- data/test/fixtures/dashboards.yml +6 -0
- data/test/fixtures/developers.yml +22 -0
- data/test/fixtures/developers_projects.yml +17 -0
- data/test/fixtures/dog_lovers.yml +7 -0
- data/test/fixtures/dogs.yml +4 -0
- data/test/fixtures/doubloons.yml +3 -0
- data/test/fixtures/edges.yml +5 -0
- data/test/fixtures/entrants.yml +14 -0
- data/test/fixtures/essays.yml +6 -0
- data/test/fixtures/faces.yml +11 -0
- data/test/fixtures/fk_test_has_fk.yml +3 -0
- data/test/fixtures/fk_test_has_pk.yml +2 -0
- data/test/fixtures/friendships.yml +4 -0
- data/test/fixtures/funny_jokes.yml +10 -0
- data/test/fixtures/interests.yml +33 -0
- data/test/fixtures/items.yml +3 -0
- data/test/fixtures/jobs.yml +7 -0
- data/test/fixtures/legacy_things.yml +3 -0
- data/test/fixtures/mateys.yml +4 -0
- data/test/fixtures/member_details.yml +8 -0
- data/test/fixtures/member_types.yml +6 -0
- data/test/fixtures/members.yml +11 -0
- data/test/fixtures/memberships.yml +34 -0
- data/test/fixtures/men.yml +5 -0
- data/test/fixtures/minimalistics.yml +2 -0
- data/test/fixtures/minivans.yml +5 -0
- data/test/fixtures/mixed_case_monkeys.yml +6 -0
- data/test/fixtures/mixins.yml +29 -0
- data/test/fixtures/movies.yml +7 -0
- data/test/fixtures/naked/csv/accounts.csv +1 -0
- data/test/fixtures/naked/yml/accounts.yml +1 -0
- data/test/fixtures/naked/yml/companies.yml +1 -0
- data/test/fixtures/naked/yml/courses.yml +1 -0
- data/test/fixtures/organizations.yml +5 -0
- data/test/fixtures/other_topics.yml +42 -0
- data/test/fixtures/owners.yml +9 -0
- data/test/fixtures/parrots.yml +27 -0
- data/test/fixtures/parrots_pirates.yml +7 -0
- data/test/fixtures/people.yml +24 -0
- data/test/fixtures/peoples_treasures.yml +3 -0
- data/test/fixtures/pets.yml +19 -0
- data/test/fixtures/pirates.yml +12 -0
- data/test/fixtures/posts.yml +80 -0
- data/test/fixtures/price_estimates.yml +7 -0
- data/test/fixtures/products.yml +4 -0
- data/test/fixtures/projects.yml +7 -0
- data/test/fixtures/randomly_named_a9.yml +7 -0
- data/test/fixtures/ratings.yml +14 -0
- data/test/fixtures/readers.yml +11 -0
- data/test/fixtures/references.yml +17 -0
- data/test/fixtures/reserved_words/distinct.yml +5 -0
- data/test/fixtures/reserved_words/distinct_select.yml +11 -0
- data/test/fixtures/reserved_words/group.yml +14 -0
- data/test/fixtures/reserved_words/select.yml +8 -0
- data/test/fixtures/reserved_words/values.yml +7 -0
- data/test/fixtures/ships.yml +6 -0
- data/test/fixtures/speedometers.yml +8 -0
- data/test/fixtures/sponsors.yml +12 -0
- data/test/fixtures/string_key_objects.yml +7 -0
- data/test/fixtures/subscribers.yml +11 -0
- data/test/fixtures/subscriptions.yml +12 -0
- data/test/fixtures/taggings.yml +78 -0
- data/test/fixtures/tags.yml +11 -0
- data/test/fixtures/tasks.yml +7 -0
- data/test/fixtures/teapots.yml +3 -0
- data/test/fixtures/to_be_linked/accounts.yml +2 -0
- data/test/fixtures/to_be_linked/users.yml +10 -0
- data/test/fixtures/topics.yml +49 -0
- data/test/fixtures/toys.yml +14 -0
- data/test/fixtures/traffic_lights.yml +10 -0
- data/test/fixtures/treasures.yml +10 -0
- data/test/fixtures/uuid_children.yml +3 -0
- data/test/fixtures/uuid_parents.yml +2 -0
- data/test/fixtures/variants.yml +4 -0
- data/test/fixtures/vegetables.yml +20 -0
- data/test/fixtures/vertices.yml +4 -0
- data/test/fixtures/warehouse_things.yml +3 -0
- data/test/fixtures/zines.yml +5 -0
- data/test/ibm_db_test.rb +24 -24
- data/test/migrations/10_urban/9_add_expressions.rb +11 -0
- data/test/migrations/decimal/1_give_me_big_numbers.rb +15 -0
- data/test/migrations/magic/1_currencies_have_symbols.rb +12 -0
- data/test/migrations/missing/1000_people_have_middle_names.rb +9 -0
- data/test/migrations/missing/1_people_have_last_names.rb +9 -0
- data/test/migrations/missing/3_we_need_reminders.rb +12 -0
- data/test/migrations/missing/4_innocent_jointable.rb +12 -0
- data/test/migrations/rename/1_we_need_things.rb +11 -0
- data/test/migrations/rename/2_rename_things.rb +9 -0
- data/test/migrations/to_copy/1_people_have_hobbies.rb +9 -0
- data/test/migrations/to_copy/2_people_have_descriptions.rb +9 -0
- data/test/migrations/to_copy2/1_create_articles.rb +7 -0
- data/test/migrations/to_copy2/2_create_comments.rb +7 -0
- data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -0
- data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -0
- data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -0
- data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -0
- data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -0
- data/test/migrations/valid/1_valid_people_have_last_names.rb +9 -0
- data/test/migrations/valid/2_we_need_reminders.rb +12 -0
- data/test/migrations/valid/3_innocent_jointable.rb +12 -0
- data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -0
- data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +12 -0
- data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +12 -0
- data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -0
- data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -0
- data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -0
- data/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -0
- data/test/models/admin.rb +5 -0
- data/test/models/admin/account.rb +3 -0
- data/test/models/admin/randomly_named_c1.rb +3 -0
- data/test/models/admin/user.rb +40 -0
- data/test/models/aircraft.rb +4 -0
- data/test/models/arunit2_model.rb +3 -0
- data/test/models/author.rb +212 -0
- data/test/models/auto_id.rb +4 -0
- data/test/models/autoloadable/extra_firm.rb +2 -0
- data/test/models/binary.rb +2 -0
- data/test/models/bird.rb +12 -0
- data/test/models/book.rb +18 -0
- data/test/models/boolean.rb +2 -0
- data/test/models/bulb.rb +51 -0
- data/test/models/cake_designer.rb +3 -0
- data/test/models/car.rb +26 -0
- data/test/models/carrier.rb +2 -0
- data/test/models/categorization.rb +19 -0
- data/test/models/category.rb +35 -0
- data/test/models/chef.rb +3 -0
- data/test/models/citation.rb +3 -0
- data/test/models/club.rb +23 -0
- data/test/models/college.rb +10 -0
- data/test/models/column.rb +3 -0
- data/test/models/column_name.rb +3 -0
- data/test/models/comment.rb +64 -0
- data/test/models/company.rb +225 -0
- data/test/models/company_in_module.rb +98 -0
- data/test/models/computer.rb +3 -0
- data/test/models/contact.rb +41 -0
- data/test/models/contract.rb +20 -0
- data/test/models/country.rb +7 -0
- data/test/models/course.rb +6 -0
- data/test/models/customer.rb +77 -0
- data/test/models/customer_carrier.rb +14 -0
- data/test/models/dashboard.rb +3 -0
- data/test/models/default.rb +2 -0
- data/test/models/department.rb +4 -0
- data/test/models/developer.rb +252 -0
- data/test/models/dog.rb +5 -0
- data/test/models/dog_lover.rb +5 -0
- data/test/models/doubloon.rb +12 -0
- data/test/models/drink_designer.rb +3 -0
- data/test/models/edge.rb +5 -0
- data/test/models/electron.rb +5 -0
- data/test/models/engine.rb +4 -0
- data/test/models/entrant.rb +3 -0
- data/test/models/essay.rb +5 -0
- data/test/models/event.rb +3 -0
- data/test/models/eye.rb +37 -0
- data/test/models/face.rb +9 -0
- data/test/models/friendship.rb +6 -0
- data/test/models/guid.rb +2 -0
- data/test/models/hotel.rb +6 -0
- data/test/models/image.rb +3 -0
- data/test/models/interest.rb +5 -0
- data/test/models/invoice.rb +4 -0
- data/test/models/item.rb +7 -0
- data/test/models/job.rb +7 -0
- data/test/models/joke.rb +7 -0
- data/test/models/keyboard.rb +3 -0
- data/test/models/legacy_thing.rb +3 -0
- data/test/models/lesson.rb +11 -0
- data/test/models/line_item.rb +3 -0
- data/test/models/liquid.rb +4 -0
- data/test/models/man.rb +11 -0
- data/test/models/matey.rb +4 -0
- data/test/models/member.rb +41 -0
- data/test/models/member_detail.rb +7 -0
- data/test/models/member_type.rb +3 -0
- data/test/models/membership.rb +35 -0
- data/test/models/minimalistic.rb +2 -0
- data/test/models/minivan.rb +9 -0
- data/test/models/mixed_case_monkey.rb +3 -0
- data/test/models/molecule.rb +6 -0
- data/test/models/movie.rb +5 -0
- data/test/models/order.rb +4 -0
- data/test/models/organization.rb +14 -0
- data/test/models/owner.rb +34 -0
- data/test/models/parrot.rb +29 -0
- data/test/models/person.rb +143 -0
- data/test/models/personal_legacy_thing.rb +4 -0
- data/test/models/pet.rb +15 -0
- data/test/models/pirate.rb +92 -0
- data/test/models/possession.rb +3 -0
- data/test/models/post.rb +264 -0
- data/test/models/price_estimate.rb +4 -0
- data/test/models/professor.rb +5 -0
- data/test/models/project.rb +29 -0
- data/test/models/publisher.rb +2 -0
- data/test/models/publisher/article.rb +4 -0
- data/test/models/publisher/magazine.rb +3 -0
- data/test/models/randomly_named_c1.rb +3 -0
- data/test/models/rating.rb +4 -0
- data/test/models/reader.rb +23 -0
- data/test/models/record.rb +2 -0
- data/test/models/reference.rb +22 -0
- data/test/models/reply.rb +61 -0
- data/test/models/ship.rb +33 -0
- data/test/models/ship_part.rb +8 -0
- data/test/models/shop.rb +17 -0
- data/test/models/shop_account.rb +6 -0
- data/test/models/speedometer.rb +6 -0
- data/test/models/sponsor.rb +7 -0
- data/test/models/string_key_object.rb +3 -0
- data/test/models/student.rb +4 -0
- data/test/models/subject.rb +16 -0
- data/test/models/subscriber.rb +8 -0
- data/test/models/subscription.rb +4 -0
- data/test/models/tag.rb +7 -0
- data/test/models/tagging.rb +13 -0
- data/test/models/task.rb +5 -0
- data/test/models/topic.rb +124 -0
- data/test/models/toy.rb +6 -0
- data/test/models/traffic_light.rb +4 -0
- data/test/models/treasure.rb +14 -0
- data/test/models/treaty.rb +7 -0
- data/test/models/tyre.rb +11 -0
- data/test/models/uuid_child.rb +3 -0
- data/test/models/uuid_parent.rb +3 -0
- data/test/models/vegetables.rb +24 -0
- data/test/models/vehicle.rb +7 -0
- data/test/models/vertex.rb +9 -0
- data/test/models/warehouse_thing.rb +5 -5
- data/test/models/wheel.rb +3 -0
- data/test/models/without_table.rb +3 -0
- data/test/models/zine.rb +3 -0
- data/test/schema/mysql2_specific_schema.rb +58 -0
- data/test/schema/mysql_specific_schema.rb +70 -0
- data/test/schema/oracle_specific_schema.rb +43 -0
- data/test/schema/postgresql_specific_schema.rb +202 -0
- data/test/schema/schema.rb +938 -751
- data/test/schema/sqlite_specific_schema.rb +22 -0
- data/test/support/config.rb +43 -0
- data/test/support/connection.rb +22 -0
- data/test/support/connection_helper.rb +14 -0
- data/test/support/ddl_helper.rb +8 -0
- data/test/support/schema_dumping_helper.rb +20 -0
- metadata +444 -18
@@ -0,0 +1,357 @@
|
|
1
|
+
require "cases/helper"
|
2
|
+
require 'models/post'
|
3
|
+
require 'models/author'
|
4
|
+
require 'models/developer'
|
5
|
+
require 'models/computer'
|
6
|
+
require 'models/project'
|
7
|
+
require 'models/comment'
|
8
|
+
require 'models/category'
|
9
|
+
require 'models/person'
|
10
|
+
require 'models/reference'
|
11
|
+
|
12
|
+
class RelationScopingTest < ActiveRecord::TestCase
|
13
|
+
fixtures :authors, :developers, :projects, :comments, :posts, :developers_projects, :author_addresses
|
14
|
+
|
15
|
+
setup do
|
16
|
+
developers(:david)
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_unscoped_breaks_caching
|
20
|
+
author = authors :mary
|
21
|
+
assert_nil author.first_post
|
22
|
+
post = FirstPost.unscoped do
|
23
|
+
author.reload.first_post
|
24
|
+
end
|
25
|
+
assert post
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_scope_breaks_caching_on_collections
|
29
|
+
author = authors :david
|
30
|
+
ids = author.reload.special_posts_with_default_scope.map(&:id)
|
31
|
+
assert_equal [1,5,6], ids.sort
|
32
|
+
scoped_posts = SpecialPostWithDefaultScope.unscoped do
|
33
|
+
author = authors :david
|
34
|
+
author.reload.special_posts_with_default_scope.to_a
|
35
|
+
end
|
36
|
+
assert_equal author.posts.map(&:id).sort, scoped_posts.map(&:id).sort
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_reverse_order
|
40
|
+
assert_equal Developer.order("id DESC").to_a.reverse, Developer.order("id DESC").reverse_order
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_reverse_order_with_arel_node
|
44
|
+
assert_equal Developer.order("id DESC").to_a.reverse, Developer.order(Developer.arel_table[:id].desc).reverse_order
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_reverse_order_with_multiple_arel_nodes
|
48
|
+
assert_equal Developer.order("id DESC").order("name DESC").to_a.reverse, Developer.order(Developer.arel_table[:id].desc).order(Developer.arel_table[:name].desc).reverse_order
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_reverse_order_with_arel_nodes_and_strings
|
52
|
+
assert_equal Developer.order("id DESC").order("name DESC").to_a.reverse, Developer.order("id DESC").order(Developer.arel_table[:name].desc).reverse_order
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_double_reverse_order_produces_original_order
|
56
|
+
assert_equal Developer.order("name DESC"), Developer.order("name DESC").reverse_order.reverse_order
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_scoped_find
|
60
|
+
Developer.where("name = 'David'").scoping do
|
61
|
+
assert_nothing_raised { Developer.find(1) }
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_scoped_find_first
|
66
|
+
developer = Developer.find(10)
|
67
|
+
Developer.where("salary = 100000").scoping do
|
68
|
+
assert_equal developer, Developer.order("name").first
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_scoped_find_last
|
73
|
+
highest_salary = Developer.order("salary DESC").first
|
74
|
+
|
75
|
+
Developer.order("salary").scoping do
|
76
|
+
assert_equal highest_salary, Developer.last
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_scoped_find_last_preserves_scope
|
81
|
+
lowest_salary = Developer.order("salary ASC").first
|
82
|
+
highest_salary = Developer.order("salary DESC").first
|
83
|
+
|
84
|
+
Developer.order("salary").scoping do
|
85
|
+
assert_equal highest_salary, Developer.last
|
86
|
+
assert_equal lowest_salary, Developer.first
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_scoped_find_combines_and_sanitizes_conditions
|
91
|
+
Developer.where("salary = 9000").scoping do
|
92
|
+
assert_equal developers(:poor_jamis), Developer.where("name = 'Jamis'").first
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_scoped_find_all
|
97
|
+
Developer.where("name = 'David'").scoping do
|
98
|
+
assert_equal [developers(:david)], Developer.all
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_scoped_find_select
|
103
|
+
Developer.select("id, name").scoping do
|
104
|
+
developer = Developer.where("name = 'David'").first
|
105
|
+
assert_equal "David", developer.name
|
106
|
+
assert !developer.has_attribute?(:salary)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_scope_select_concatenates
|
111
|
+
Developer.select("id, name").scoping do
|
112
|
+
developer = Developer.select('salary').where("name = 'David'").first
|
113
|
+
assert_equal 80000, developer.salary
|
114
|
+
assert developer.has_attribute?(:id)
|
115
|
+
assert developer.has_attribute?(:name)
|
116
|
+
assert developer.has_attribute?(:salary)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_scoped_count
|
121
|
+
Developer.where("name = 'David'").scoping do
|
122
|
+
assert_equal 1, Developer.count
|
123
|
+
end
|
124
|
+
|
125
|
+
Developer.where('salary = 100000').scoping do
|
126
|
+
assert_equal 8, Developer.count
|
127
|
+
assert_equal 1, Developer.where("name LIKE 'fixture_1%'").count
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def test_scoped_find_include
|
132
|
+
# with the include, will retrieve only developers for the given project
|
133
|
+
scoped_developers = Developer.includes(:projects).scoping do
|
134
|
+
Developer.where('projects.id' => 2).to_a
|
135
|
+
end
|
136
|
+
assert scoped_developers.include?(developers(:david))
|
137
|
+
assert !scoped_developers.include?(developers(:jamis))
|
138
|
+
assert_equal 1, scoped_developers.size
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_scoped_find_joins
|
142
|
+
scoped_developers = Developer.joins('JOIN developers_projects ON id = developer_id').scoping do
|
143
|
+
Developer.where('developers_projects.project_id = 2').to_a
|
144
|
+
end
|
145
|
+
|
146
|
+
assert scoped_developers.include?(developers(:david))
|
147
|
+
assert !scoped_developers.include?(developers(:jamis))
|
148
|
+
assert_equal 1, scoped_developers.size
|
149
|
+
assert_equal developers(:david).attributes, scoped_developers.first.attributes
|
150
|
+
end
|
151
|
+
|
152
|
+
def test_scoped_create_with_where
|
153
|
+
new_comment = VerySpecialComment.where(:post_id => 1).scoping do
|
154
|
+
VerySpecialComment.create :body => "Wonderful world"
|
155
|
+
end
|
156
|
+
|
157
|
+
assert_equal 1, new_comment.post_id
|
158
|
+
assert Post.find(1).comments.include?(new_comment)
|
159
|
+
end
|
160
|
+
|
161
|
+
def test_scoped_create_with_create_with
|
162
|
+
new_comment = VerySpecialComment.create_with(:post_id => 1).scoping do
|
163
|
+
VerySpecialComment.create :body => "Wonderful world"
|
164
|
+
end
|
165
|
+
|
166
|
+
assert_equal 1, new_comment.post_id
|
167
|
+
assert Post.find(1).comments.include?(new_comment)
|
168
|
+
end
|
169
|
+
|
170
|
+
def test_scoped_create_with_create_with_has_higher_priority
|
171
|
+
new_comment = VerySpecialComment.where(:post_id => 2).create_with(:post_id => 1).scoping do
|
172
|
+
VerySpecialComment.create :body => "Wonderful world"
|
173
|
+
end
|
174
|
+
|
175
|
+
assert_equal 1, new_comment.post_id
|
176
|
+
assert Post.find(1).comments.include?(new_comment)
|
177
|
+
end
|
178
|
+
|
179
|
+
def test_ensure_that_method_scoping_is_correctly_restored
|
180
|
+
begin
|
181
|
+
Developer.where("name = 'Jamis'").scoping do
|
182
|
+
raise "an exception"
|
183
|
+
end
|
184
|
+
rescue
|
185
|
+
end
|
186
|
+
|
187
|
+
assert !Developer.all.where_values.include?("name = 'Jamis'")
|
188
|
+
end
|
189
|
+
|
190
|
+
def test_default_scope_filters_on_joins
|
191
|
+
assert_equal 1, DeveloperFilteredOnJoins.all.count
|
192
|
+
assert_equal DeveloperFilteredOnJoins.all.first, developers(:david).becomes(DeveloperFilteredOnJoins)
|
193
|
+
end
|
194
|
+
|
195
|
+
def test_update_all_default_scope_filters_on_joins
|
196
|
+
DeveloperFilteredOnJoins.update_all(:salary => 65000)
|
197
|
+
assert_equal 65000, Developer.find(developers(:david).id).salary
|
198
|
+
|
199
|
+
# has not changed jamis
|
200
|
+
assert_not_equal 65000, Developer.find(developers(:jamis).id).salary
|
201
|
+
end
|
202
|
+
|
203
|
+
def test_delete_all_default_scope_filters_on_joins
|
204
|
+
assert_not_equal [], DeveloperFilteredOnJoins.all
|
205
|
+
|
206
|
+
DeveloperFilteredOnJoins.delete_all()
|
207
|
+
|
208
|
+
assert_equal [], DeveloperFilteredOnJoins.all
|
209
|
+
assert_not_equal [], Developer.all
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
class NestedRelationScopingTest < ActiveRecord::TestCase
|
214
|
+
fixtures :authors, :developers, :projects, :comments, :posts
|
215
|
+
|
216
|
+
def test_merge_options
|
217
|
+
Developer.where('salary = 80000').scoping do
|
218
|
+
Developer.limit(10).scoping do
|
219
|
+
devs = Developer.all
|
220
|
+
sql = devs.to_sql
|
221
|
+
assert_match '(salary = 80000)', sql
|
222
|
+
assert_match 'LIMIT 10', sql
|
223
|
+
end
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
def test_merge_inner_scope_has_priority
|
228
|
+
Developer.limit(5).scoping do
|
229
|
+
Developer.limit(10).scoping do
|
230
|
+
assert_equal 10, Developer.all.size
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
def test_replace_options
|
236
|
+
Developer.where(:name => 'David').scoping do
|
237
|
+
Developer.unscoped do
|
238
|
+
assert_equal 'Jamis', Developer.where(:name => 'Jamis').first[:name]
|
239
|
+
end
|
240
|
+
|
241
|
+
assert_equal 'David', Developer.first[:name]
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
def test_three_level_nested_exclusive_scoped_find
|
246
|
+
Developer.where("name = 'Jamis'").scoping do
|
247
|
+
assert_equal 'Jamis', Developer.first.name
|
248
|
+
|
249
|
+
Developer.unscoped.where("name = 'David'") do
|
250
|
+
assert_equal 'David', Developer.first.name
|
251
|
+
|
252
|
+
Developer.unscoped.where("name = 'Maiha'") do
|
253
|
+
assert_equal nil, Developer.first
|
254
|
+
end
|
255
|
+
|
256
|
+
# ensure that scoping is restored
|
257
|
+
assert_equal 'David', Developer.first.name
|
258
|
+
end
|
259
|
+
|
260
|
+
# ensure that scoping is restored
|
261
|
+
assert_equal 'Jamis', Developer.first.name
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
def test_nested_scoped_create
|
266
|
+
comment = Comment.create_with(:post_id => 1).scoping do
|
267
|
+
Comment.create_with(:post_id => 2).scoping do
|
268
|
+
Comment.create :body => "Hey guys, nested scopes are broken. Please fix!"
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
assert_equal 2, comment.post_id
|
273
|
+
end
|
274
|
+
|
275
|
+
def test_nested_exclusive_scope_for_create
|
276
|
+
comment = Comment.create_with(:body => "Hey guys, nested scopes are broken. Please fix!").scoping do
|
277
|
+
Comment.unscoped.create_with(:post_id => 1).scoping do
|
278
|
+
assert Comment.new.body.blank?
|
279
|
+
Comment.create :body => "Hey guys"
|
280
|
+
end
|
281
|
+
end
|
282
|
+
|
283
|
+
assert_equal 1, comment.post_id
|
284
|
+
assert_equal 'Hey guys', comment.body
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
288
|
+
class HasManyScopingTest < ActiveRecord::TestCase
|
289
|
+
fixtures :comments, :posts, :people, :references
|
290
|
+
|
291
|
+
def setup
|
292
|
+
@welcome = Post.find(1)
|
293
|
+
end
|
294
|
+
|
295
|
+
def test_forwarding_of_static_methods
|
296
|
+
assert_equal 'a comment...', Comment.what_are_you
|
297
|
+
assert_equal 'a comment...', @welcome.comments.what_are_you
|
298
|
+
end
|
299
|
+
|
300
|
+
def test_forwarding_to_scoped
|
301
|
+
assert_equal 4, Comment.search_by_type('Comment').size
|
302
|
+
assert_equal 2, @welcome.comments.search_by_type('Comment').size
|
303
|
+
end
|
304
|
+
|
305
|
+
def test_nested_scope_finder
|
306
|
+
Comment.where('1=0').scoping do
|
307
|
+
assert_equal 0, @welcome.comments.count
|
308
|
+
assert_equal 'a comment...', @welcome.comments.what_are_you
|
309
|
+
end
|
310
|
+
|
311
|
+
Comment.where('1=1').scoping do
|
312
|
+
assert_equal 2, @welcome.comments.count
|
313
|
+
assert_equal 'a comment...', @welcome.comments.what_are_you
|
314
|
+
end
|
315
|
+
end
|
316
|
+
|
317
|
+
def test_should_maintain_default_scope_on_associations
|
318
|
+
magician = BadReference.find(1)
|
319
|
+
assert_equal [magician], people(:michael).bad_references
|
320
|
+
end
|
321
|
+
|
322
|
+
def test_should_default_scope_on_associations_is_overridden_by_association_conditions
|
323
|
+
reference = references(:michael_unicyclist).becomes(BadReference)
|
324
|
+
assert_equal [reference], people(:michael).fixed_bad_references
|
325
|
+
end
|
326
|
+
|
327
|
+
def test_should_maintain_default_scope_on_eager_loaded_associations
|
328
|
+
michael = Person.where(:id => people(:michael).id).includes(:bad_references).first
|
329
|
+
magician = BadReference.find(1)
|
330
|
+
assert_equal [magician], michael.bad_references
|
331
|
+
end
|
332
|
+
end
|
333
|
+
|
334
|
+
class HasAndBelongsToManyScopingTest < ActiveRecord::TestCase
|
335
|
+
fixtures :posts, :categories, :categories_posts
|
336
|
+
|
337
|
+
def setup
|
338
|
+
@welcome = Post.find(1)
|
339
|
+
end
|
340
|
+
|
341
|
+
def test_forwarding_of_static_methods
|
342
|
+
assert_equal 'a category...', Category.what_are_you
|
343
|
+
assert_equal 'a category...', @welcome.categories.what_are_you
|
344
|
+
end
|
345
|
+
|
346
|
+
def test_nested_scope_finder
|
347
|
+
Category.where('1=0').scoping do
|
348
|
+
assert_equal 0, @welcome.categories.count
|
349
|
+
assert_equal 'a category...', @welcome.categories.what_are_you
|
350
|
+
end
|
351
|
+
|
352
|
+
Category.where('1=1').scoping do
|
353
|
+
assert_equal 2, @welcome.categories.count
|
354
|
+
assert_equal 'a category...', @welcome.categories.what_are_you
|
355
|
+
end
|
356
|
+
end
|
357
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
require "cases/helper"
|
2
|
+
require 'models/contact'
|
3
|
+
require 'models/topic'
|
4
|
+
require 'models/book'
|
5
|
+
require 'models/author'
|
6
|
+
require 'models/post'
|
7
|
+
|
8
|
+
class SerializationTest < ActiveRecord::TestCase
|
9
|
+
fixtures :books
|
10
|
+
|
11
|
+
FORMATS = [ :xml, :json ]
|
12
|
+
|
13
|
+
def setup
|
14
|
+
@contact_attributes = {
|
15
|
+
:name => 'aaron stack',
|
16
|
+
:age => 25,
|
17
|
+
:avatar => 'binarydata',
|
18
|
+
:created_at => Time.utc(2006, 8, 1),
|
19
|
+
:awesome => false,
|
20
|
+
:preferences => { :gem => '<strong>ruby</strong>' },
|
21
|
+
:alternative_id => nil,
|
22
|
+
:id => nil
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_include_root_in_json_is_false_by_default
|
27
|
+
assert_equal false, ActiveRecord::Base.include_root_in_json, "include_root_in_json should be false by default but was not"
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_serialize_should_be_reversible
|
31
|
+
FORMATS.each do |format|
|
32
|
+
@serialized = Contact.new.send("to_#{format}")
|
33
|
+
contact = Contact.new.send("from_#{format}", @serialized)
|
34
|
+
|
35
|
+
assert_equal @contact_attributes.keys.collect(&:to_s).sort, contact.attributes.keys.collect(&:to_s).sort, "For #{format}"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_serialize_should_allow_attribute_only_filtering
|
40
|
+
FORMATS.each do |format|
|
41
|
+
@serialized = Contact.new(@contact_attributes).send("to_#{format}", :only => [ :age, :name ])
|
42
|
+
contact = Contact.new.send("from_#{format}", @serialized)
|
43
|
+
assert_equal @contact_attributes[:name], contact.name, "For #{format}"
|
44
|
+
assert_nil contact.avatar, "For #{format}"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_serialize_should_allow_attribute_except_filtering
|
49
|
+
FORMATS.each do |format|
|
50
|
+
@serialized = Contact.new(@contact_attributes).send("to_#{format}", :except => [ :age, :name ])
|
51
|
+
contact = Contact.new.send("from_#{format}", @serialized)
|
52
|
+
assert_nil contact.name, "For #{format}"
|
53
|
+
assert_nil contact.age, "For #{format}"
|
54
|
+
assert_equal @contact_attributes[:awesome], contact.awesome, "For #{format}"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_include_root_in_json_allows_inheritance
|
59
|
+
original_root_in_json = ActiveRecord::Base.include_root_in_json
|
60
|
+
ActiveRecord::Base.include_root_in_json = true
|
61
|
+
|
62
|
+
klazz = Class.new(ActiveRecord::Base)
|
63
|
+
klazz.table_name = 'topics'
|
64
|
+
assert klazz.include_root_in_json
|
65
|
+
|
66
|
+
klazz.include_root_in_json = false
|
67
|
+
assert ActiveRecord::Base.include_root_in_json
|
68
|
+
assert !klazz.include_root_in_json
|
69
|
+
assert !klazz.new.include_root_in_json
|
70
|
+
ensure
|
71
|
+
ActiveRecord::Base.include_root_in_json = original_root_in_json
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_read_attribute_for_serialization_with_format_without_method_missing
|
75
|
+
klazz = Class.new(ActiveRecord::Base)
|
76
|
+
klazz.table_name = 'books'
|
77
|
+
|
78
|
+
book = klazz.new
|
79
|
+
assert_nil book.read_attribute_for_serialization(:format)
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_read_attribute_for_serialization_with_format_after_init
|
83
|
+
klazz = Class.new(ActiveRecord::Base)
|
84
|
+
klazz.table_name = 'books'
|
85
|
+
|
86
|
+
book = klazz.new(format: 'paperback')
|
87
|
+
assert_equal 'paperback', book.read_attribute_for_serialization(:format)
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_read_attribute_for_serialization_with_format_after_find
|
91
|
+
klazz = Class.new(ActiveRecord::Base)
|
92
|
+
klazz.table_name = 'books'
|
93
|
+
|
94
|
+
book = klazz.find(books(:awdr).id)
|
95
|
+
assert_equal 'paperback', book.read_attribute_for_serialization(:format)
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_find_records_by_serialized_attributes_through_join
|
99
|
+
author = Author.create!(name: "David")
|
100
|
+
author.serialized_posts.create!(title: "Hello")
|
101
|
+
|
102
|
+
assert_equal 1, Author.joins(:serialized_posts).where(name: "David", serialized_posts: { title: "Hello" }).length
|
103
|
+
end
|
104
|
+
end
|