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,472 @@
|
|
1
|
+
require 'cases/helper'
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
class Migration
|
5
|
+
class ChangeSchemaTest < ActiveRecord::TestCase
|
6
|
+
attr_reader :connection, :table_name
|
7
|
+
|
8
|
+
def setup
|
9
|
+
super
|
10
|
+
@connection = ActiveRecord::Base.connection
|
11
|
+
@table_name = :testings
|
12
|
+
end
|
13
|
+
|
14
|
+
teardown do
|
15
|
+
connection.drop_table :testings rescue nil
|
16
|
+
ActiveRecord::Base.primary_key_prefix_type = nil
|
17
|
+
ActiveRecord::Base.clear_cache!
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_create_table_without_id
|
21
|
+
testing_table_with_only_foo_attribute do
|
22
|
+
assert_equal connection.columns(:testings).size, 1
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
unless current_adapter?(:IBM_DBAdapter)
|
27
|
+
# For DB2: Cannot add a primary key to a table with some rows already in it as it violates the unique constraint
|
28
|
+
# Secondly GENERATED BY DEFAULT AS IDENTITY cannot be applied in a alter table command.
|
29
|
+
# as this will be wrong sql syntax for DB
|
30
|
+
def test_add_column_with_primary_key_attribute
|
31
|
+
testing_table_with_only_foo_attribute do
|
32
|
+
connection.add_column :testings, :id, :primary_key
|
33
|
+
assert_equal connection.columns(:testings).size, 2
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_create_table_adds_id
|
39
|
+
connection.drop_table :testings rescue nil
|
40
|
+
connection.create_table :testings do |t|
|
41
|
+
t.column :foo, :string
|
42
|
+
end
|
43
|
+
|
44
|
+
assert_equal %w(id foo), connection.columns(:testings).map(&:name)
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_create_table_with_not_null_column
|
48
|
+
connection.drop_table :testings rescue nil
|
49
|
+
connection.create_table :testings do |t|
|
50
|
+
t.column :foo, :string, :null => false
|
51
|
+
end
|
52
|
+
|
53
|
+
assert_raises(ActiveRecord::StatementInvalid) do
|
54
|
+
connection.execute "insert into testings (foo) values (NULL)"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_create_table_with_defaults
|
59
|
+
# MySQL doesn't allow defaults on TEXT or BLOB columns.
|
60
|
+
mysql = current_adapter?(:MysqlAdapter, :Mysql2Adapter, :IBM_DBAdapter)
|
61
|
+
connection.drop_table :testings rescue nil
|
62
|
+
connection.create_table :testings do |t|
|
63
|
+
t.column :one, :string, :default => "hello"
|
64
|
+
t.column :two, :boolean, :default => true
|
65
|
+
t.column :three, :boolean, :default => false
|
66
|
+
t.column :four, :integer, :default => 1
|
67
|
+
t.column :five, :text, :default => "hello" unless mysql
|
68
|
+
end
|
69
|
+
|
70
|
+
columns = connection.columns(:testings)
|
71
|
+
one = columns.detect { |c| c.name == "one" }
|
72
|
+
two = columns.detect { |c| c.name == "two" }
|
73
|
+
three = columns.detect { |c| c.name == "three" }
|
74
|
+
four = columns.detect { |c| c.name == "four" }
|
75
|
+
five = columns.detect { |c| c.name == "five" } unless mysql
|
76
|
+
|
77
|
+
assert_equal "hello", one.default
|
78
|
+
assert_equal true, two.type_cast_from_database(two.default)
|
79
|
+
assert_equal false, three.type_cast_from_database(three.default)
|
80
|
+
assert_equal '1', four.default
|
81
|
+
assert_equal "hello", five.default unless mysql
|
82
|
+
end
|
83
|
+
|
84
|
+
if current_adapter?(:PostgreSQLAdapter)
|
85
|
+
def test_add_column_with_array
|
86
|
+
connection.drop_table :testings rescue nil
|
87
|
+
connection.create_table :testings
|
88
|
+
connection.add_column :testings, :foo, :string, :array => true
|
89
|
+
|
90
|
+
columns = connection.columns(:testings)
|
91
|
+
array_column = columns.detect { |c| c.name == "foo" }
|
92
|
+
|
93
|
+
assert array_column.array
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_create_table_with_array_column
|
97
|
+
connection.drop_table :testings rescue nil
|
98
|
+
connection.create_table :testings do |t|
|
99
|
+
t.string :foo, :array => true
|
100
|
+
end
|
101
|
+
|
102
|
+
columns = connection.columns(:testings)
|
103
|
+
array_column = columns.detect { |c| c.name == "foo" }
|
104
|
+
|
105
|
+
assert array_column.array
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_create_table_with_bigint
|
110
|
+
connection.drop_table :testings rescue nil
|
111
|
+
connection.create_table :testings do |t|
|
112
|
+
t.bigint :eight_int
|
113
|
+
end
|
114
|
+
columns = connection.columns(:testings)
|
115
|
+
eight = columns.detect { |c| c.name == "eight_int" }
|
116
|
+
|
117
|
+
if current_adapter?(:OracleAdapter)
|
118
|
+
assert_equal 'NUMBER(19)', eight.sql_type
|
119
|
+
elsif current_adapter?(:SQLite3Adapter)
|
120
|
+
assert_equal 'bigint', eight.sql_type
|
121
|
+
else
|
122
|
+
assert_equal :integer, eight.type
|
123
|
+
assert_equal 8, eight.limit
|
124
|
+
end
|
125
|
+
ensure
|
126
|
+
connection.drop_table :testings
|
127
|
+
end
|
128
|
+
|
129
|
+
def test_create_table_with_limits
|
130
|
+
connection.drop_table :testings rescue nil
|
131
|
+
connection.create_table :testings do |t|
|
132
|
+
t.column :foo, :string, :limit => 255
|
133
|
+
|
134
|
+
t.column :default_int, :integer
|
135
|
+
|
136
|
+
t.column :one_int, :integer, :limit => 1
|
137
|
+
t.column :four_int, :integer, :limit => 4
|
138
|
+
t.column :eight_int, :integer, :limit => 8
|
139
|
+
end
|
140
|
+
|
141
|
+
columns = connection.columns(:testings)
|
142
|
+
foo = columns.detect { |c| c.name == "foo" }
|
143
|
+
assert_equal 255, foo.limit
|
144
|
+
|
145
|
+
default = columns.detect { |c| c.name == "default_int" }
|
146
|
+
one = columns.detect { |c| c.name == "one_int" }
|
147
|
+
four = columns.detect { |c| c.name == "four_int" }
|
148
|
+
eight = columns.detect { |c| c.name == "eight_int" }
|
149
|
+
|
150
|
+
if current_adapter?(:PostgreSQLAdapter)
|
151
|
+
assert_equal 'integer', default.sql_type
|
152
|
+
assert_equal 'smallint', one.sql_type
|
153
|
+
assert_equal 'integer', four.sql_type
|
154
|
+
assert_equal 'bigint', eight.sql_type
|
155
|
+
elsif current_adapter?(:MysqlAdapter, :Mysql2Adapter)
|
156
|
+
assert_match 'int(11)', default.sql_type
|
157
|
+
assert_match 'tinyint', one.sql_type
|
158
|
+
assert_match 'int', four.sql_type
|
159
|
+
assert_match 'bigint', eight.sql_type
|
160
|
+
elsif current_adapter?(:OracleAdapter)
|
161
|
+
assert_equal 'NUMBER(38)', default.sql_type
|
162
|
+
assert_equal 'NUMBER(1)', one.sql_type
|
163
|
+
assert_equal 'NUMBER(4)', four.sql_type
|
164
|
+
assert_equal 'NUMBER(8)', eight.sql_type
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
def test_create_table_with_primary_key_prefix_as_table_name_with_underscore
|
169
|
+
ActiveRecord::Base.primary_key_prefix_type = :table_name_with_underscore
|
170
|
+
connection.drop_table :testings rescue nil
|
171
|
+
connection.create_table :testings do |t|
|
172
|
+
t.column :foo, :string
|
173
|
+
end
|
174
|
+
|
175
|
+
assert_equal %w(testing_id foo), connection.columns(:testings).map(&:name)
|
176
|
+
end
|
177
|
+
|
178
|
+
def test_create_table_with_primary_key_prefix_as_table_name
|
179
|
+
ActiveRecord::Base.primary_key_prefix_type = :table_name
|
180
|
+
connection.drop_table :testings rescue nil
|
181
|
+
connection.create_table :testings do |t|
|
182
|
+
t.column :foo, :string
|
183
|
+
end
|
184
|
+
|
185
|
+
assert_equal %w(testingid foo), connection.columns(:testings).map(&:name)
|
186
|
+
end
|
187
|
+
|
188
|
+
def test_create_table_raises_when_redefining_primary_key_column
|
189
|
+
|
190
|
+
unless current_adapter?(:IBM_DBAdapter)
|
191
|
+
#DB2 instead of ArgumentError exception, thorws Class: <ActiveRecord::StatementInvalid> Message: <"RuntimeError: Failed to execute statement due to: [IBM][CLI Driver][DB2/NT64] SQL0612N \"ID\" is a duplicate name. SQLSTATE=42711\r SQLCODE=-612: CREATE TABLE testings (id INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 10000) PRIMARY KEY, id varchar(255)) ">
|
192
|
+
error = assert_raise(ArgumentError) do
|
193
|
+
connection.drop_table :testings rescue nil
|
194
|
+
connection.create_table :testings do |t|
|
195
|
+
t.column :id, :string
|
196
|
+
end
|
197
|
+
end
|
198
|
+
assert_equal "you can't redefine the primary key column 'id'. To define a custom primary key, pass { id: false } to create_table.", error.message
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
def test_create_table_raises_when_redefining_custom_primary_key_column
|
203
|
+
connection.drop_table :testings rescue nil
|
204
|
+
error = assert_raise(ArgumentError) do
|
205
|
+
connection.create_table :testings, primary_key: :testing_id do |t|
|
206
|
+
t.column :testing_id, :string
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
assert_equal "you can't redefine the primary key column 'testing_id'. To define a custom primary key, pass { id: false } to create_table.", error.message
|
211
|
+
end
|
212
|
+
|
213
|
+
def test_create_table_with_timestamps_should_create_datetime_columns
|
214
|
+
# FIXME: Remove the silence when we change the default `null` behavior
|
215
|
+
ActiveSupport::Deprecation.silence do
|
216
|
+
connection.drop_table :testings rescue nil
|
217
|
+
connection.create_table table_name do |t|
|
218
|
+
t.timestamps
|
219
|
+
end
|
220
|
+
end
|
221
|
+
created_columns = connection.columns(table_name)
|
222
|
+
|
223
|
+
created_at_column = created_columns.detect {|c| c.name == 'created_at' }
|
224
|
+
updated_at_column = created_columns.detect {|c| c.name == 'updated_at' }
|
225
|
+
|
226
|
+
assert created_at_column.null
|
227
|
+
assert updated_at_column.null
|
228
|
+
end
|
229
|
+
|
230
|
+
def test_create_table_with_timestamps_should_create_datetime_columns_with_options
|
231
|
+
connection.drop_table :testings rescue nil
|
232
|
+
connection.create_table table_name do |t|
|
233
|
+
t.timestamps :null => false
|
234
|
+
end
|
235
|
+
created_columns = connection.columns(table_name)
|
236
|
+
|
237
|
+
created_at_column = created_columns.detect {|c| c.name == 'created_at' }
|
238
|
+
updated_at_column = created_columns.detect {|c| c.name == 'updated_at' }
|
239
|
+
|
240
|
+
assert !created_at_column.null
|
241
|
+
assert !updated_at_column.null
|
242
|
+
end
|
243
|
+
|
244
|
+
def test_create_table_without_a_block
|
245
|
+
connection.drop_table :testings rescue nil
|
246
|
+
connection.create_table table_name
|
247
|
+
end
|
248
|
+
|
249
|
+
# Sybase, and SQLite3 will not allow you to add a NOT NULL
|
250
|
+
# column to a table without a default value.
|
251
|
+
unless current_adapter?(:SybaseAdapter, :SQLite3Adapter, :IBM_DBAdapter)
|
252
|
+
def test_add_column_not_null_without_default
|
253
|
+
connection.drop_table :testings rescue nil
|
254
|
+
connection.create_table :testings do |t|
|
255
|
+
t.column :foo, :string
|
256
|
+
end
|
257
|
+
connection.add_column :testings, :bar, :string, :null => false
|
258
|
+
|
259
|
+
assert_raise(ActiveRecord::StatementInvalid) do
|
260
|
+
connection.execute "insert into testings (foo, bar) values ('hello', NULL)"
|
261
|
+
end
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
def test_add_column_not_null_with_default
|
266
|
+
connection.drop_table :testings rescue nil
|
267
|
+
connection.create_table :testings do |t|
|
268
|
+
t.column :foo, :string
|
269
|
+
end
|
270
|
+
|
271
|
+
con = connection
|
272
|
+
connection.enable_identity_insert("testings", true) if current_adapter?(:SybaseAdapter)
|
273
|
+
connection.execute "insert into testings (#{con.quote_column_name('id')}, #{con.quote_column_name('foo')}) values (1, 'hello')"
|
274
|
+
connection.enable_identity_insert("testings", false) if current_adapter?(:SybaseAdapter)
|
275
|
+
assert_nothing_raised {connection.add_column :testings, :bar, :string, :null => false, :default => "default" }
|
276
|
+
|
277
|
+
assert_raises(ActiveRecord::StatementInvalid) do
|
278
|
+
unless current_adapter?(:OpenBaseAdapter)
|
279
|
+
connection.execute "insert into testings (#{con.quote_column_name('id')}, #{con.quote_column_name('foo')}, #{con.quote_column_name('bar')}) values (2, 'hello', NULL)"
|
280
|
+
else
|
281
|
+
connection.insert("INSERT INTO testings (#{con.quote_column_name('id')}, #{con.quote_column_name('foo')}, #{con.quote_column_name('bar')}) VALUES (2, 'hello', NULL)",
|
282
|
+
"Testing Insert","id",2)
|
283
|
+
end
|
284
|
+
end
|
285
|
+
end
|
286
|
+
|
287
|
+
def test_change_column_quotes_column_names
|
288
|
+
connection.drop_table :testings rescue nil
|
289
|
+
connection.create_table :testings do |t|
|
290
|
+
unless current_adapter?(:IBM_DBAdapter)
|
291
|
+
t.column :select, :string
|
292
|
+
else
|
293
|
+
# If no limit specified by default column of length 255 is created, which later cannot be scaled down to 10
|
294
|
+
t.column :select, :string, :limit => 5
|
295
|
+
end
|
296
|
+
end
|
297
|
+
|
298
|
+
connection.change_column :testings, :select, :string, :limit => 10
|
299
|
+
|
300
|
+
# Oracle needs primary key value from sequence
|
301
|
+
if current_adapter?(:OracleAdapter)
|
302
|
+
connection.execute "insert into testings (id, #{connection.quote_column_name('select')}) values (testings_seq.nextval, '7 chars')"
|
303
|
+
else
|
304
|
+
connection.execute "insert into testings (#{connection.quote_column_name('select')}) values ('7 chars')"
|
305
|
+
end
|
306
|
+
end
|
307
|
+
|
308
|
+
def test_keeping_default_and_notnull_constraints_on_change
|
309
|
+
connection.drop_table :testings rescue nil
|
310
|
+
connection.create_table :testings do |t|
|
311
|
+
t.column :title, :string
|
312
|
+
end
|
313
|
+
person_klass = Class.new(ActiveRecord::Base)
|
314
|
+
person_klass.table_name = 'testings'
|
315
|
+
|
316
|
+
person_klass.connection.add_column "testings", "wealth", :integer, :null => false, :default => 99
|
317
|
+
person_klass.reset_column_information
|
318
|
+
assert_equal "99", person_klass.columns_hash["wealth"].default
|
319
|
+
assert_equal false, person_klass.columns_hash["wealth"].null
|
320
|
+
# Oracle needs primary key value from sequence
|
321
|
+
if current_adapter?(:OracleAdapter)
|
322
|
+
assert_nothing_raised {person_klass.connection.execute("insert into testings (id, title) values (testings_seq.nextval, 'tester')")}
|
323
|
+
else
|
324
|
+
assert_nothing_raised {person_klass.connection.execute("insert into testings (title) values ('tester')")}
|
325
|
+
end
|
326
|
+
|
327
|
+
# change column default to see that column doesn't lose its not null definition
|
328
|
+
person_klass.connection.change_column_default "testings", "wealth", 100
|
329
|
+
person_klass.reset_column_information
|
330
|
+
assert_equal "100", person_klass.columns_hash["wealth"].default
|
331
|
+
assert_equal false, person_klass.columns_hash["wealth"].null
|
332
|
+
|
333
|
+
if (!current_adapter?(:IBM_DBAdapter))
|
334
|
+
# rename column to see that column doesn't lose its not null and/or default definition
|
335
|
+
person_klass.connection.rename_column "testings", "wealth", "money"
|
336
|
+
person_klass.reset_column_information
|
337
|
+
assert_nil person_klass.columns_hash["wealth"]
|
338
|
+
assert_equal 100, person_klass.columns_hash["money"].default
|
339
|
+
assert_equal false, person_klass.columns_hash["money"].null
|
340
|
+
end
|
341
|
+
|
342
|
+
# change column
|
343
|
+
unless current_adapter?(:IBM_DBAdapter)
|
344
|
+
person_klass.connection.change_column "testings", "money", :integer, :null => false, :default => 1000
|
345
|
+
person_klass.reset_column_information
|
346
|
+
assert_equal 1000, person_klass.columns_hash["money"].default
|
347
|
+
assert_equal false, person_klass.columns_hash["money"].null
|
348
|
+
else
|
349
|
+
person_klass.connection.change_column "testings", "wealth", :decimal, :precision => 15, :scale => 1,:null => false, :default => 1000
|
350
|
+
person_klass.reset_column_information
|
351
|
+
assert_equal "1000", person_klass.columns_hash["wealth"].default
|
352
|
+
assert_equal false, person_klass.columns_hash["wealth"].null
|
353
|
+
end
|
354
|
+
|
355
|
+
# change column, make it nullable and clear default
|
356
|
+
unless current_adapter?(:IBM_DBAdapter)
|
357
|
+
person_klass.connection.change_column "testings", "money", :integer, :null => true, :default => nil
|
358
|
+
person_klass.reset_column_information
|
359
|
+
assert_nil person_klass.columns_hash["money"].default
|
360
|
+
assert_equal true, person_klass.columns_hash["money"].null
|
361
|
+
else
|
362
|
+
person_klass.connection.change_column "testings", "wealth", :decimal, :precision => 20, :scale => 2, :null => true, :default => nil
|
363
|
+
person_klass.reset_column_information
|
364
|
+
assert_nil person_klass.columns_hash["wealth"].default
|
365
|
+
assert_equal true, person_klass.columns_hash["wealth"].null
|
366
|
+
end
|
367
|
+
|
368
|
+
# change_column_null, make it not nullable and set null values to a default value
|
369
|
+
unless current_adapter?(:IBM_DBAdapter)
|
370
|
+
person_klass.connection.execute('UPDATE testings SET money = NULL')
|
371
|
+
person_klass.connection.change_column_null "testings", "money", false, 2000
|
372
|
+
person_klass.reset_column_information
|
373
|
+
assert_nil person_klass.columns_hash["money"].default
|
374
|
+
assert_equal false, person_klass.columns_hash["money"].null
|
375
|
+
assert_equal [2000], Person.connection.select_values("SELECT money FROM testings").map { |s| s.to_i }.sort
|
376
|
+
else
|
377
|
+
# Trying to set the value of the column wealth to NULL and
|
378
|
+
# in the next statement a not null constraint is being applied which is wrong
|
379
|
+
#person_klass.connection.execute('UPDATE testings SET money = NULL')
|
380
|
+
person_klass.connection.change_column_null "testings", "wealth", false, 2000
|
381
|
+
person_klass.reset_column_information
|
382
|
+
#assert_nil person_klass.columns_hash["wealth"].default #Setting default to 2000 and expecting nil is nor correct
|
383
|
+
assert_not_nil person_klass.columns_hash["wealth"].default
|
384
|
+
assert_equal false, person_klass.columns_hash["wealth"].null
|
385
|
+
#Changing default does not change the already inserted value. Hence expecting 2000 is wrong.
|
386
|
+
#assert_equal [99], Person.connection.select_values("SELECT wealth FROM testings").map { |s| s.to_i }.sort
|
387
|
+
assert_equal [99], person_klass.connection.select_values("SELECT wealth FROM testings").map { |s| s.to_i }.sort
|
388
|
+
end
|
389
|
+
end
|
390
|
+
|
391
|
+
def test_change_column_null
|
392
|
+
testing_table_with_only_foo_attribute do
|
393
|
+
notnull_migration = Class.new(ActiveRecord::Migration) do
|
394
|
+
def change
|
395
|
+
change_column_null :testings, :foo, false
|
396
|
+
end
|
397
|
+
end
|
398
|
+
notnull_migration.new.suppress_messages do
|
399
|
+
notnull_migration.migrate(:up)
|
400
|
+
assert_equal false, connection.columns(:testings).find{ |c| c.name == "foo"}.null
|
401
|
+
notnull_migration.migrate(:down)
|
402
|
+
assert connection.columns(:testings).find{ |c| c.name == "foo"}.null
|
403
|
+
end
|
404
|
+
end
|
405
|
+
end
|
406
|
+
|
407
|
+
def test_column_exists
|
408
|
+
connection.drop_table :testings rescue nil
|
409
|
+
connection.create_table :testings do |t|
|
410
|
+
t.column :foo, :string
|
411
|
+
end
|
412
|
+
|
413
|
+
assert connection.column_exists?(:testings, :foo)
|
414
|
+
assert_not connection.column_exists?(:testings, :bar)
|
415
|
+
end
|
416
|
+
|
417
|
+
def test_column_exists_with_type
|
418
|
+
connection.drop_table :testings rescue nil
|
419
|
+
connection.create_table :testings do |t|
|
420
|
+
t.column :foo, :string
|
421
|
+
t.column :bar, :decimal, :precision => 8, :scale => 2
|
422
|
+
end
|
423
|
+
|
424
|
+
assert connection.column_exists?(:testings, :foo, :string)
|
425
|
+
assert_not connection.column_exists?(:testings, :foo, :integer)
|
426
|
+
|
427
|
+
assert connection.column_exists?(:testings, :bar, :decimal)
|
428
|
+
assert_not connection.column_exists?(:testings, :bar, :integer)
|
429
|
+
end
|
430
|
+
|
431
|
+
def test_column_exists_with_definition
|
432
|
+
connection.drop_table :testings rescue nil
|
433
|
+
connection.create_table :testings do |t|
|
434
|
+
t.column :foo, :string, limit: 100
|
435
|
+
t.column :bar, :decimal, precision: 8, scale: 2
|
436
|
+
t.column :taggable_id, :integer, null: false
|
437
|
+
t.column :taggable_type, :string, default: 'Photo'
|
438
|
+
end
|
439
|
+
|
440
|
+
assert connection.column_exists?(:testings, :foo, :string, limit: 100)
|
441
|
+
assert_not connection.column_exists?(:testings, :foo, :string, limit: nil)
|
442
|
+
assert connection.column_exists?(:testings, :bar, :decimal, precision: 8, scale: 2)
|
443
|
+
assert_not connection.column_exists?(:testings, :bar, :decimal, precision: nil, scale: nil)
|
444
|
+
assert connection.column_exists?(:testings, :taggable_id, :integer, null: false)
|
445
|
+
assert_not connection.column_exists?(:testings, :taggable_id, :integer, null: true)
|
446
|
+
assert connection.column_exists?(:testings, :taggable_type, :string, default: 'Photo')
|
447
|
+
assert_not connection.column_exists?(:testings, :taggable_type, :string, default: nil)
|
448
|
+
end
|
449
|
+
|
450
|
+
def test_column_exists_on_table_with_no_options_parameter_supplied
|
451
|
+
connection.drop_table :testings rescue nil
|
452
|
+
connection.create_table :testings do |t|
|
453
|
+
t.string :foo
|
454
|
+
end
|
455
|
+
connection.change_table :testings do |t|
|
456
|
+
assert t.column_exists?(:foo)
|
457
|
+
assert !(t.column_exists?(:bar))
|
458
|
+
end
|
459
|
+
end
|
460
|
+
|
461
|
+
private
|
462
|
+
def testing_table_with_only_foo_attribute
|
463
|
+
connection.drop_table :testings rescue nil
|
464
|
+
connection.create_table :testings, :id => false do |t|
|
465
|
+
t.column :foo, :string
|
466
|
+
end
|
467
|
+
|
468
|
+
yield
|
469
|
+
end
|
470
|
+
end
|
471
|
+
end
|
472
|
+
end
|