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,51 +1,56 @@
|
|
1
|
-
require "cases/helper"
|
2
|
-
|
3
|
-
module ActiveRecord
|
4
|
-
module Type
|
5
|
-
class DecimalTest < ActiveRecord::TestCase
|
6
|
-
def test_type_cast_decimal
|
7
|
-
type = Decimal.new
|
8
|
-
assert_equal BigDecimal.new("0"), type.type_cast_from_user(BigDecimal.new("0"))
|
9
|
-
assert_equal BigDecimal.new("123"), type.type_cast_from_user(123.0)
|
10
|
-
assert_equal BigDecimal.new("1"), type.type_cast_from_user(:"1")
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_type_cast_decimal_from_float_with_large_precision
|
14
|
-
type = Decimal.new(precision: ::Float::DIG + 2)
|
15
|
-
assert_equal BigDecimal.new("123.0"), type.type_cast_from_user(123.0)
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_type_cast_from_float_with_unspecified_precision
|
19
|
-
type = Decimal.new
|
20
|
-
assert_equal 22.68.to_d, type.type_cast_from_user(22.68)
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_type_cast_decimal_from_rational_with_precision
|
24
|
-
type = Decimal.new(precision: 2)
|
25
|
-
assert_equal BigDecimal("0.33"), type.type_cast_from_user(Rational(1, 3))
|
26
|
-
end
|
27
|
-
|
28
|
-
def
|
29
|
-
type = Decimal.new
|
30
|
-
assert_equal BigDecimal("0.
|
31
|
-
end
|
32
|
-
|
33
|
-
def
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
type = Decimal.new
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
1
|
+
require "cases/helper"
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
module Type
|
5
|
+
class DecimalTest < ActiveRecord::TestCase
|
6
|
+
def test_type_cast_decimal
|
7
|
+
type = Decimal.new
|
8
|
+
assert_equal BigDecimal.new("0"), type.type_cast_from_user(BigDecimal.new("0"))
|
9
|
+
assert_equal BigDecimal.new("123"), type.type_cast_from_user(123.0)
|
10
|
+
assert_equal BigDecimal.new("1"), type.type_cast_from_user(:"1")
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_type_cast_decimal_from_float_with_large_precision
|
14
|
+
type = Decimal.new(precision: ::Float::DIG + 2)
|
15
|
+
assert_equal BigDecimal.new("123.0"), type.type_cast_from_user(123.0)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_type_cast_from_float_with_unspecified_precision
|
19
|
+
type = Decimal.new
|
20
|
+
assert_equal 22.68.to_d, type.type_cast_from_user(22.68)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_type_cast_decimal_from_rational_with_precision
|
24
|
+
type = Decimal.new(precision: 2)
|
25
|
+
assert_equal BigDecimal("0.33"), type.type_cast_from_user(Rational(1, 3))
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_type_cast_decimal_from_rational_with_precision_and_scale
|
29
|
+
type = Decimal.new(precision: 4, scale: 2)
|
30
|
+
assert_equal BigDecimal("0.33"), type.type_cast_from_user(Rational(1, 3))
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_type_cast_decimal_from_rational_without_precision_defaults_to_18_36
|
34
|
+
type = Decimal.new
|
35
|
+
assert_equal BigDecimal("0.333333333333333333E0"), type.type_cast_from_user(Rational(1, 3))
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_type_cast_decimal_from_object_responding_to_d
|
39
|
+
value = Object.new
|
40
|
+
def value.to_d
|
41
|
+
BigDecimal.new("1")
|
42
|
+
end
|
43
|
+
type = Decimal.new
|
44
|
+
assert_equal BigDecimal("1"), type.type_cast_from_user(value)
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_changed?
|
48
|
+
type = Decimal.new
|
49
|
+
|
50
|
+
assert type.changed?(5.0, 5.0, '5.0wibble')
|
51
|
+
assert_not type.changed?(5.0, 5.0, '5.0')
|
52
|
+
assert_not type.changed?(-5.0, -5.0, '-5.0')
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -1,121 +1,121 @@
|
|
1
|
-
require "cases/helper"
|
2
|
-
require "models/company"
|
3
|
-
|
4
|
-
module ActiveRecord
|
5
|
-
module Type
|
6
|
-
class IntegerTest < ActiveRecord::TestCase
|
7
|
-
test "simple values" do
|
8
|
-
type = Type::Integer.new
|
9
|
-
assert_equal 1, type.type_cast_from_user(1)
|
10
|
-
assert_equal 1, type.type_cast_from_user('1')
|
11
|
-
assert_equal 1, type.type_cast_from_user('1ignore')
|
12
|
-
assert_equal 0, type.type_cast_from_user('bad1')
|
13
|
-
assert_equal 0, type.type_cast_from_user('bad')
|
14
|
-
assert_equal 1, type.type_cast_from_user(1.7)
|
15
|
-
assert_equal 0, type.type_cast_from_user(false)
|
16
|
-
assert_equal 1, type.type_cast_from_user(true)
|
17
|
-
assert_nil type.type_cast_from_user(nil)
|
18
|
-
end
|
19
|
-
|
20
|
-
test "random objects cast to nil" do
|
21
|
-
type = Type::Integer.new
|
22
|
-
assert_nil type.type_cast_from_user([1,2])
|
23
|
-
assert_nil type.type_cast_from_user({1 => 2})
|
24
|
-
assert_nil type.type_cast_from_user((1..2))
|
25
|
-
end
|
26
|
-
|
27
|
-
test "casting ActiveRecord models" do
|
28
|
-
type = Type::Integer.new
|
29
|
-
firm = Firm.create(:name => 'Apple')
|
30
|
-
assert_nil type.type_cast_from_user(firm)
|
31
|
-
end
|
32
|
-
|
33
|
-
test "casting objects without to_i" do
|
34
|
-
type = Type::Integer.new
|
35
|
-
assert_nil type.type_cast_from_user(::Object.new)
|
36
|
-
end
|
37
|
-
|
38
|
-
test "casting nan and infinity" do
|
39
|
-
type = Type::Integer.new
|
40
|
-
assert_nil type.type_cast_from_user(::Float::NAN)
|
41
|
-
assert_nil type.type_cast_from_user(1.0/0.0)
|
42
|
-
end
|
43
|
-
|
44
|
-
test "changed?" do
|
45
|
-
type = Type::Integer.new
|
46
|
-
|
47
|
-
assert type.changed?(5, 5, '5wibble')
|
48
|
-
assert_not type.changed?(5, 5, '5')
|
49
|
-
assert_not type.changed?(5, 5, '5.0')
|
50
|
-
assert_not type.changed?(-5, -5, '-5')
|
51
|
-
assert_not type.changed?(-5, -5, '-5.0')
|
52
|
-
assert_not type.changed?(nil, nil, nil)
|
53
|
-
end
|
54
|
-
|
55
|
-
test "values below int min value are out of range" do
|
56
|
-
assert_raises(::RangeError) do
|
57
|
-
Integer.new.type_cast_for_database(-2147483649)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
test "values above int max value are out of range" do
|
62
|
-
assert_raises(::RangeError) do
|
63
|
-
Integer.new.type_cast_for_database(2147483648)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
test "very small numbers are out of range" do
|
68
|
-
assert_raises(::RangeError) do
|
69
|
-
Integer.new.type_cast_for_database(-9999999999999999999999999999999)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
test "very large numbers are out of range" do
|
74
|
-
assert_raises(::RangeError) do
|
75
|
-
Integer.new.type_cast_for_database(9999999999999999999999999999999)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
test "normal numbers are in range" do
|
80
|
-
type = Integer.new
|
81
|
-
assert_equal(0, type.type_cast_for_database(0))
|
82
|
-
assert_equal(-1, type.type_cast_for_database(-1))
|
83
|
-
assert_equal(1, type.type_cast_for_database(1))
|
84
|
-
end
|
85
|
-
|
86
|
-
test "int max value is in range" do
|
87
|
-
assert_equal(2147483647, Integer.new.type_cast_for_database(2147483647))
|
88
|
-
end
|
89
|
-
|
90
|
-
test "int min value is in range" do
|
91
|
-
assert_equal(-2147483648, Integer.new.type_cast_for_database(-2147483648))
|
92
|
-
end
|
93
|
-
|
94
|
-
test "columns with a larger limit have larger ranges" do
|
95
|
-
type = Integer.new(limit: 8)
|
96
|
-
|
97
|
-
assert_equal(9223372036854775807, type.type_cast_for_database(9223372036854775807))
|
98
|
-
assert_equal(-9223372036854775808, type.type_cast_for_database(-9223372036854775808))
|
99
|
-
assert_raises(::RangeError) do
|
100
|
-
type.type_cast_for_database(-9999999999999999999999999999999)
|
101
|
-
end
|
102
|
-
assert_raises(::RangeError) do
|
103
|
-
type.type_cast_for_database(9999999999999999999999999999999)
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
test "values which are out of range can be re-assigned" do
|
108
|
-
klass = Class.new(ActiveRecord::Base) do
|
109
|
-
self.table_name = 'posts'
|
110
|
-
attribute :foo, Type::Integer.new
|
111
|
-
end
|
112
|
-
model = klass.new
|
113
|
-
|
114
|
-
model.foo = 2147483648
|
115
|
-
model.foo = 1
|
116
|
-
|
117
|
-
assert_equal 1, model.foo
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
1
|
+
require "cases/helper"
|
2
|
+
require "models/company"
|
3
|
+
|
4
|
+
module ActiveRecord
|
5
|
+
module Type
|
6
|
+
class IntegerTest < ActiveRecord::TestCase
|
7
|
+
test "simple values" do
|
8
|
+
type = Type::Integer.new
|
9
|
+
assert_equal 1, type.type_cast_from_user(1)
|
10
|
+
assert_equal 1, type.type_cast_from_user('1')
|
11
|
+
assert_equal 1, type.type_cast_from_user('1ignore')
|
12
|
+
assert_equal 0, type.type_cast_from_user('bad1')
|
13
|
+
assert_equal 0, type.type_cast_from_user('bad')
|
14
|
+
assert_equal 1, type.type_cast_from_user(1.7)
|
15
|
+
assert_equal 0, type.type_cast_from_user(false)
|
16
|
+
assert_equal 1, type.type_cast_from_user(true)
|
17
|
+
assert_nil type.type_cast_from_user(nil)
|
18
|
+
end
|
19
|
+
|
20
|
+
test "random objects cast to nil" do
|
21
|
+
type = Type::Integer.new
|
22
|
+
assert_nil type.type_cast_from_user([1,2])
|
23
|
+
assert_nil type.type_cast_from_user({1 => 2})
|
24
|
+
assert_nil type.type_cast_from_user((1..2))
|
25
|
+
end
|
26
|
+
|
27
|
+
test "casting ActiveRecord models" do
|
28
|
+
type = Type::Integer.new
|
29
|
+
firm = Firm.create(:name => 'Apple')
|
30
|
+
assert_nil type.type_cast_from_user(firm)
|
31
|
+
end
|
32
|
+
|
33
|
+
test "casting objects without to_i" do
|
34
|
+
type = Type::Integer.new
|
35
|
+
assert_nil type.type_cast_from_user(::Object.new)
|
36
|
+
end
|
37
|
+
|
38
|
+
test "casting nan and infinity" do
|
39
|
+
type = Type::Integer.new
|
40
|
+
assert_nil type.type_cast_from_user(::Float::NAN)
|
41
|
+
assert_nil type.type_cast_from_user(1.0/0.0)
|
42
|
+
end
|
43
|
+
|
44
|
+
test "changed?" do
|
45
|
+
type = Type::Integer.new
|
46
|
+
|
47
|
+
assert type.changed?(5, 5, '5wibble')
|
48
|
+
assert_not type.changed?(5, 5, '5')
|
49
|
+
assert_not type.changed?(5, 5, '5.0')
|
50
|
+
assert_not type.changed?(-5, -5, '-5')
|
51
|
+
assert_not type.changed?(-5, -5, '-5.0')
|
52
|
+
assert_not type.changed?(nil, nil, nil)
|
53
|
+
end
|
54
|
+
|
55
|
+
test "values below int min value are out of range" do
|
56
|
+
assert_raises(::RangeError) do
|
57
|
+
Integer.new.type_cast_for_database(-2147483649)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
test "values above int max value are out of range" do
|
62
|
+
assert_raises(::RangeError) do
|
63
|
+
Integer.new.type_cast_for_database(2147483648)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
test "very small numbers are out of range" do
|
68
|
+
assert_raises(::RangeError) do
|
69
|
+
Integer.new.type_cast_for_database(-9999999999999999999999999999999)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
test "very large numbers are out of range" do
|
74
|
+
assert_raises(::RangeError) do
|
75
|
+
Integer.new.type_cast_for_database(9999999999999999999999999999999)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
test "normal numbers are in range" do
|
80
|
+
type = Integer.new
|
81
|
+
assert_equal(0, type.type_cast_for_database(0))
|
82
|
+
assert_equal(-1, type.type_cast_for_database(-1))
|
83
|
+
assert_equal(1, type.type_cast_for_database(1))
|
84
|
+
end
|
85
|
+
|
86
|
+
test "int max value is in range" do
|
87
|
+
assert_equal(2147483647, Integer.new.type_cast_for_database(2147483647))
|
88
|
+
end
|
89
|
+
|
90
|
+
test "int min value is in range" do
|
91
|
+
assert_equal(-2147483648, Integer.new.type_cast_for_database(-2147483648))
|
92
|
+
end
|
93
|
+
|
94
|
+
test "columns with a larger limit have larger ranges" do
|
95
|
+
type = Integer.new(limit: 8)
|
96
|
+
|
97
|
+
assert_equal(9223372036854775807, type.type_cast_for_database(9223372036854775807))
|
98
|
+
assert_equal(-9223372036854775808, type.type_cast_for_database(-9223372036854775808))
|
99
|
+
assert_raises(::RangeError) do
|
100
|
+
type.type_cast_for_database(-9999999999999999999999999999999)
|
101
|
+
end
|
102
|
+
assert_raises(::RangeError) do
|
103
|
+
type.type_cast_for_database(9999999999999999999999999999999)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
test "values which are out of range can be re-assigned" do
|
108
|
+
klass = Class.new(ActiveRecord::Base) do
|
109
|
+
self.table_name = 'posts'
|
110
|
+
attribute :foo, Type::Integer.new
|
111
|
+
end
|
112
|
+
model = klass.new
|
113
|
+
|
114
|
+
model.foo = 2147483648
|
115
|
+
model.foo = 1
|
116
|
+
|
117
|
+
assert_equal 1, model.foo
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
@@ -1,36 +1,36 @@
|
|
1
|
-
require 'cases/helper'
|
2
|
-
|
3
|
-
module ActiveRecord
|
4
|
-
class StringTypeTest < ActiveRecord::TestCase
|
5
|
-
test "type casting" do
|
6
|
-
type = Type::String.new
|
7
|
-
assert_equal "t", type.type_cast_from_user(true)
|
8
|
-
assert_equal "f", type.type_cast_from_user(false)
|
9
|
-
assert_equal "123", type.type_cast_from_user(123)
|
10
|
-
end
|
11
|
-
|
12
|
-
test "values are duped coming out" do
|
13
|
-
s = "foo"
|
14
|
-
type = Type::String.new
|
15
|
-
assert_not_same s, type.type_cast_from_user(s)
|
16
|
-
assert_not_same s, type.type_cast_from_database(s)
|
17
|
-
end
|
18
|
-
|
19
|
-
test "string mutations are detected" do
|
20
|
-
klass = Class.new(Base)
|
21
|
-
klass.table_name = 'authors'
|
22
|
-
|
23
|
-
author = klass.create!(name: 'Sean')
|
24
|
-
assert_not author.changed?
|
25
|
-
|
26
|
-
author.name << ' Griffin'
|
27
|
-
assert author.name_changed?
|
28
|
-
|
29
|
-
author.save!
|
30
|
-
author.reload
|
31
|
-
|
32
|
-
assert_equal 'Sean Griffin', author.name
|
33
|
-
assert_not author.changed?
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
1
|
+
require 'cases/helper'
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
class StringTypeTest < ActiveRecord::TestCase
|
5
|
+
test "type casting" do
|
6
|
+
type = Type::String.new
|
7
|
+
assert_equal "t", type.type_cast_from_user(true)
|
8
|
+
assert_equal "f", type.type_cast_from_user(false)
|
9
|
+
assert_equal "123", type.type_cast_from_user(123)
|
10
|
+
end
|
11
|
+
|
12
|
+
test "values are duped coming out" do
|
13
|
+
s = "foo"
|
14
|
+
type = Type::String.new
|
15
|
+
assert_not_same s, type.type_cast_from_user(s)
|
16
|
+
assert_not_same s, type.type_cast_from_database(s)
|
17
|
+
end
|
18
|
+
|
19
|
+
test "string mutations are detected" do
|
20
|
+
klass = Class.new(Base)
|
21
|
+
klass.table_name = 'authors'
|
22
|
+
|
23
|
+
author = klass.create!(name: 'Sean')
|
24
|
+
assert_not author.changed?
|
25
|
+
|
26
|
+
author.name << ' Griffin'
|
27
|
+
assert author.name_changed?
|
28
|
+
|
29
|
+
author.save!
|
30
|
+
author.reload
|
31
|
+
|
32
|
+
assert_equal 'Sean Griffin', author.name
|
33
|
+
assert_not author.changed?
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -1,177 +1,177 @@
|
|
1
|
-
require "cases/helper"
|
2
|
-
|
3
|
-
module ActiveRecord
|
4
|
-
module Type
|
5
|
-
class TypeMapTest < ActiveRecord::TestCase
|
6
|
-
def test_default_type
|
7
|
-
mapping = TypeMap.new
|
8
|
-
|
9
|
-
assert_kind_of Value, mapping.lookup(:undefined)
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_registering_types
|
13
|
-
boolean = Boolean.new
|
14
|
-
mapping = TypeMap.new
|
15
|
-
|
16
|
-
mapping.register_type(/boolean/i, boolean)
|
17
|
-
|
18
|
-
assert_equal mapping.lookup('boolean'), boolean
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_overriding_registered_types
|
22
|
-
time = Time.new
|
23
|
-
timestamp = DateTime.new
|
24
|
-
mapping = TypeMap.new
|
25
|
-
|
26
|
-
mapping.register_type(/time/i, time)
|
27
|
-
mapping.register_type(/time/i, timestamp)
|
28
|
-
|
29
|
-
assert_equal mapping.lookup('time'), timestamp
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_fuzzy_lookup
|
33
|
-
string = String.new
|
34
|
-
mapping = TypeMap.new
|
35
|
-
|
36
|
-
mapping.register_type(/varchar/i, string)
|
37
|
-
|
38
|
-
assert_equal mapping.lookup('varchar(20)'), string
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_aliasing_types
|
42
|
-
string = String.new
|
43
|
-
mapping = TypeMap.new
|
44
|
-
|
45
|
-
mapping.register_type(/string/i, string)
|
46
|
-
mapping.alias_type(/varchar/i, 'string')
|
47
|
-
|
48
|
-
assert_equal mapping.lookup('varchar'), string
|
49
|
-
end
|
50
|
-
|
51
|
-
def test_changing_type_changes_aliases
|
52
|
-
time = Time.new
|
53
|
-
timestamp = DateTime.new
|
54
|
-
mapping = TypeMap.new
|
55
|
-
|
56
|
-
mapping.register_type(/timestamp/i, time)
|
57
|
-
mapping.alias_type(/datetime/i, 'timestamp')
|
58
|
-
mapping.register_type(/timestamp/i, timestamp)
|
59
|
-
|
60
|
-
assert_equal mapping.lookup('datetime'), timestamp
|
61
|
-
end
|
62
|
-
|
63
|
-
def test_aliases_keep_metadata
|
64
|
-
mapping = TypeMap.new
|
65
|
-
|
66
|
-
mapping.register_type(/decimal/i) { |sql_type| sql_type }
|
67
|
-
mapping.alias_type(/number/i, 'decimal')
|
68
|
-
|
69
|
-
assert_equal mapping.lookup('number(20)'), 'decimal(20)'
|
70
|
-
assert_equal mapping.lookup('number'), 'decimal'
|
71
|
-
end
|
72
|
-
|
73
|
-
def test_register_proc
|
74
|
-
string = String.new
|
75
|
-
binary = Binary.new
|
76
|
-
mapping = TypeMap.new
|
77
|
-
|
78
|
-
mapping.register_type(/varchar/i) do |type|
|
79
|
-
if type.include?('(')
|
80
|
-
string
|
81
|
-
else
|
82
|
-
binary
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
assert_equal mapping.lookup('varchar(20)'), string
|
87
|
-
assert_equal mapping.lookup('varchar'), binary
|
88
|
-
end
|
89
|
-
|
90
|
-
def test_additional_lookup_args
|
91
|
-
mapping = TypeMap.new
|
92
|
-
|
93
|
-
mapping.register_type(/varchar/i) do |type, limit|
|
94
|
-
if limit > 255
|
95
|
-
'text'
|
96
|
-
else
|
97
|
-
'string'
|
98
|
-
end
|
99
|
-
end
|
100
|
-
mapping.alias_type(/string/i, 'varchar')
|
101
|
-
|
102
|
-
assert_equal mapping.lookup('varchar', 200), 'string'
|
103
|
-
assert_equal mapping.lookup('varchar', 400), 'text'
|
104
|
-
assert_equal mapping.lookup('string', 400), 'text'
|
105
|
-
end
|
106
|
-
|
107
|
-
def test_requires_value_or_block
|
108
|
-
mapping = TypeMap.new
|
109
|
-
|
110
|
-
assert_raises(ArgumentError) do
|
111
|
-
mapping.register_type(/only key/i)
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
def test_lookup_non_strings
|
116
|
-
mapping = HashLookupTypeMap.new
|
117
|
-
|
118
|
-
mapping.register_type(1, 'string')
|
119
|
-
mapping.register_type(2, 'int')
|
120
|
-
mapping.alias_type(3, 1)
|
121
|
-
|
122
|
-
assert_equal mapping.lookup(1), 'string'
|
123
|
-
assert_equal mapping.lookup(2), 'int'
|
124
|
-
assert_equal mapping.lookup(3), 'string'
|
125
|
-
assert_kind_of Type::Value, mapping.lookup(4)
|
126
|
-
end
|
127
|
-
|
128
|
-
def test_fetch
|
129
|
-
mapping = TypeMap.new
|
130
|
-
mapping.register_type(1, "string")
|
131
|
-
|
132
|
-
assert_equal "string", mapping.fetch(1) { "int" }
|
133
|
-
assert_equal "int", mapping.fetch(2) { "int" }
|
134
|
-
end
|
135
|
-
|
136
|
-
def test_fetch_yields_args
|
137
|
-
mapping = TypeMap.new
|
138
|
-
|
139
|
-
assert_equal "foo-1-2-3", mapping.fetch("foo", 1, 2, 3) { |*args| args.join("-") }
|
140
|
-
assert_equal "bar-1-2-3", mapping.fetch("bar", 1, 2, 3) { |*args| args.join("-") }
|
141
|
-
end
|
142
|
-
|
143
|
-
def test_fetch_memoizes
|
144
|
-
mapping = TypeMap.new
|
145
|
-
|
146
|
-
looked_up = false
|
147
|
-
mapping.register_type(1) do
|
148
|
-
fail if looked_up
|
149
|
-
looked_up = true
|
150
|
-
"string"
|
151
|
-
end
|
152
|
-
|
153
|
-
assert_equal "string", mapping.fetch(1)
|
154
|
-
assert_equal "string", mapping.fetch(1)
|
155
|
-
end
|
156
|
-
|
157
|
-
def test_fetch_memoizes_on_args
|
158
|
-
mapping = TypeMap.new
|
159
|
-
mapping.register_type("foo") { |*args| args.join("-") }
|
160
|
-
|
161
|
-
assert_equal "foo-1-2-3", mapping.fetch("foo", 1, 2, 3) { |*args| args.join("-") }
|
162
|
-
assert_equal "foo-2-3-4", mapping.fetch("foo", 2, 3, 4) { |*args| args.join("-") }
|
163
|
-
end
|
164
|
-
|
165
|
-
def test_register_clears_cache
|
166
|
-
mapping = TypeMap.new
|
167
|
-
|
168
|
-
mapping.register_type(1, "string")
|
169
|
-
mapping.lookup(1)
|
170
|
-
mapping.register_type(1, "int")
|
171
|
-
|
172
|
-
assert_equal "int", mapping.lookup(1)
|
173
|
-
end
|
174
|
-
end
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
1
|
+
require "cases/helper"
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
module Type
|
5
|
+
class TypeMapTest < ActiveRecord::TestCase
|
6
|
+
def test_default_type
|
7
|
+
mapping = TypeMap.new
|
8
|
+
|
9
|
+
assert_kind_of Value, mapping.lookup(:undefined)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_registering_types
|
13
|
+
boolean = Boolean.new
|
14
|
+
mapping = TypeMap.new
|
15
|
+
|
16
|
+
mapping.register_type(/boolean/i, boolean)
|
17
|
+
|
18
|
+
assert_equal mapping.lookup('boolean'), boolean
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_overriding_registered_types
|
22
|
+
time = Time.new
|
23
|
+
timestamp = DateTime.new
|
24
|
+
mapping = TypeMap.new
|
25
|
+
|
26
|
+
mapping.register_type(/time/i, time)
|
27
|
+
mapping.register_type(/time/i, timestamp)
|
28
|
+
|
29
|
+
assert_equal mapping.lookup('time'), timestamp
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_fuzzy_lookup
|
33
|
+
string = String.new
|
34
|
+
mapping = TypeMap.new
|
35
|
+
|
36
|
+
mapping.register_type(/varchar/i, string)
|
37
|
+
|
38
|
+
assert_equal mapping.lookup('varchar(20)'), string
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_aliasing_types
|
42
|
+
string = String.new
|
43
|
+
mapping = TypeMap.new
|
44
|
+
|
45
|
+
mapping.register_type(/string/i, string)
|
46
|
+
mapping.alias_type(/varchar/i, 'string')
|
47
|
+
|
48
|
+
assert_equal mapping.lookup('varchar'), string
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_changing_type_changes_aliases
|
52
|
+
time = Time.new
|
53
|
+
timestamp = DateTime.new
|
54
|
+
mapping = TypeMap.new
|
55
|
+
|
56
|
+
mapping.register_type(/timestamp/i, time)
|
57
|
+
mapping.alias_type(/datetime/i, 'timestamp')
|
58
|
+
mapping.register_type(/timestamp/i, timestamp)
|
59
|
+
|
60
|
+
assert_equal mapping.lookup('datetime'), timestamp
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_aliases_keep_metadata
|
64
|
+
mapping = TypeMap.new
|
65
|
+
|
66
|
+
mapping.register_type(/decimal/i) { |sql_type| sql_type }
|
67
|
+
mapping.alias_type(/number/i, 'decimal')
|
68
|
+
|
69
|
+
assert_equal mapping.lookup('number(20)'), 'decimal(20)'
|
70
|
+
assert_equal mapping.lookup('number'), 'decimal'
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_register_proc
|
74
|
+
string = String.new
|
75
|
+
binary = Binary.new
|
76
|
+
mapping = TypeMap.new
|
77
|
+
|
78
|
+
mapping.register_type(/varchar/i) do |type|
|
79
|
+
if type.include?('(')
|
80
|
+
string
|
81
|
+
else
|
82
|
+
binary
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
assert_equal mapping.lookup('varchar(20)'), string
|
87
|
+
assert_equal mapping.lookup('varchar'), binary
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_additional_lookup_args
|
91
|
+
mapping = TypeMap.new
|
92
|
+
|
93
|
+
mapping.register_type(/varchar/i) do |type, limit|
|
94
|
+
if limit > 255
|
95
|
+
'text'
|
96
|
+
else
|
97
|
+
'string'
|
98
|
+
end
|
99
|
+
end
|
100
|
+
mapping.alias_type(/string/i, 'varchar')
|
101
|
+
|
102
|
+
assert_equal mapping.lookup('varchar', 200), 'string'
|
103
|
+
assert_equal mapping.lookup('varchar', 400), 'text'
|
104
|
+
assert_equal mapping.lookup('string', 400), 'text'
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_requires_value_or_block
|
108
|
+
mapping = TypeMap.new
|
109
|
+
|
110
|
+
assert_raises(ArgumentError) do
|
111
|
+
mapping.register_type(/only key/i)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_lookup_non_strings
|
116
|
+
mapping = HashLookupTypeMap.new
|
117
|
+
|
118
|
+
mapping.register_type(1, 'string')
|
119
|
+
mapping.register_type(2, 'int')
|
120
|
+
mapping.alias_type(3, 1)
|
121
|
+
|
122
|
+
assert_equal mapping.lookup(1), 'string'
|
123
|
+
assert_equal mapping.lookup(2), 'int'
|
124
|
+
assert_equal mapping.lookup(3), 'string'
|
125
|
+
assert_kind_of Type::Value, mapping.lookup(4)
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_fetch
|
129
|
+
mapping = TypeMap.new
|
130
|
+
mapping.register_type(1, "string")
|
131
|
+
|
132
|
+
assert_equal "string", mapping.fetch(1) { "int" }
|
133
|
+
assert_equal "int", mapping.fetch(2) { "int" }
|
134
|
+
end
|
135
|
+
|
136
|
+
def test_fetch_yields_args
|
137
|
+
mapping = TypeMap.new
|
138
|
+
|
139
|
+
assert_equal "foo-1-2-3", mapping.fetch("foo", 1, 2, 3) { |*args| args.join("-") }
|
140
|
+
assert_equal "bar-1-2-3", mapping.fetch("bar", 1, 2, 3) { |*args| args.join("-") }
|
141
|
+
end
|
142
|
+
|
143
|
+
def test_fetch_memoizes
|
144
|
+
mapping = TypeMap.new
|
145
|
+
|
146
|
+
looked_up = false
|
147
|
+
mapping.register_type(1) do
|
148
|
+
fail if looked_up
|
149
|
+
looked_up = true
|
150
|
+
"string"
|
151
|
+
end
|
152
|
+
|
153
|
+
assert_equal "string", mapping.fetch(1)
|
154
|
+
assert_equal "string", mapping.fetch(1)
|
155
|
+
end
|
156
|
+
|
157
|
+
def test_fetch_memoizes_on_args
|
158
|
+
mapping = TypeMap.new
|
159
|
+
mapping.register_type("foo") { |*args| args.join("-") }
|
160
|
+
|
161
|
+
assert_equal "foo-1-2-3", mapping.fetch("foo", 1, 2, 3) { |*args| args.join("-") }
|
162
|
+
assert_equal "foo-2-3-4", mapping.fetch("foo", 2, 3, 4) { |*args| args.join("-") }
|
163
|
+
end
|
164
|
+
|
165
|
+
def test_register_clears_cache
|
166
|
+
mapping = TypeMap.new
|
167
|
+
|
168
|
+
mapping.register_type(1, "string")
|
169
|
+
mapping.lookup(1)
|
170
|
+
mapping.register_type(1, "int")
|
171
|
+
|
172
|
+
assert_equal "int", mapping.lookup(1)
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|