ibm_db 3.0.5-x86-mingw32 → 5.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 +5 -5
- data/CHANGES +4 -0
- data/LICENSE +1 -1
- data/ParameterizedQueries README +6 -6
- data/README +38 -55
- data/ext/Makefile +269 -0
- data/ext/extconf.rb +34 -3
- data/ext/gil_release_version +3 -0
- data/ext/ibm_db-i386-mingw32.def +2 -0
- data/ext/ibm_db.c +100 -108
- data/ext/ibm_db.o +0 -0
- data/ext/ibm_db.so +0 -0
- data/ext/mkmf.log +110 -0
- data/ext/ruby_ibm_db_cli.o +0 -0
- data/ext/unicode_support_version +3 -0
- data/lib/active_record/connection_adapters/ibm_db_adapter.rb +923 -527
- data/lib/active_record/connection_adapters/ibmdb_adapter.rb +4 -1
- data/lib/mswin32/ibm_db.rb +7 -39
- data/lib/mswin32/rb2x/i386/ibm_db.so +0 -0
- data/test/active_record/connection_adapters/fake_adapter.rb +8 -5
- data/test/cases/adapter_test.rb +133 -58
- data/test/cases/adapters/mysql2/active_schema_test.rb +193 -0
- data/test/cases/adapters/mysql2/bind_parameter_test.rb +50 -0
- data/test/cases/adapters/mysql2/boolean_test.rb +100 -0
- data/test/cases/adapters/mysql2/case_sensitivity_test.rb +63 -0
- data/test/cases/adapters/mysql2/charset_collation_test.rb +54 -0
- data/test/cases/adapters/mysql2/connection_test.rb +210 -0
- data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +45 -0
- data/test/cases/adapters/mysql2/enum_test.rb +26 -0
- data/test/cases/adapters/mysql2/explain_test.rb +21 -0
- data/test/cases/adapters/mysql2/json_test.rb +195 -0
- data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +83 -0
- data/test/cases/adapters/mysql2/reserved_word_test.rb +152 -0
- data/test/cases/adapters/mysql2/schema_migrations_test.rb +59 -0
- data/test/cases/adapters/mysql2/schema_test.rb +126 -0
- data/test/cases/adapters/mysql2/sp_test.rb +36 -0
- data/test/cases/adapters/mysql2/sql_types_test.rb +14 -0
- data/test/cases/adapters/mysql2/table_options_test.rb +42 -0
- data/test/cases/adapters/mysql2/unsigned_type_test.rb +66 -0
- data/test/cases/adapters/postgresql/active_schema_test.rb +98 -0
- data/test/cases/adapters/postgresql/array_test.rb +339 -0
- data/test/cases/adapters/postgresql/bit_string_test.rb +82 -0
- data/test/cases/adapters/postgresql/bytea_test.rb +134 -0
- data/test/cases/adapters/postgresql/case_insensitive_test.rb +26 -0
- data/test/cases/adapters/postgresql/change_schema_test.rb +38 -0
- data/test/cases/adapters/postgresql/cidr_test.rb +25 -0
- data/test/cases/adapters/postgresql/citext_test.rb +78 -0
- data/test/cases/adapters/postgresql/collation_test.rb +53 -0
- data/test/cases/adapters/postgresql/composite_test.rb +132 -0
- data/test/cases/adapters/postgresql/connection_test.rb +257 -0
- data/test/cases/adapters/postgresql/datatype_test.rb +92 -0
- data/test/cases/adapters/postgresql/domain_test.rb +47 -0
- data/test/cases/adapters/postgresql/enum_test.rb +91 -0
- data/test/cases/adapters/postgresql/explain_test.rb +20 -0
- data/test/cases/adapters/postgresql/extension_migration_test.rb +63 -0
- data/test/cases/adapters/postgresql/full_text_test.rb +44 -0
- data/test/cases/adapters/postgresql/geometric_test.rb +378 -0
- data/test/cases/adapters/postgresql/hstore_test.rb +382 -0
- data/test/cases/adapters/postgresql/infinity_test.rb +69 -0
- data/test/cases/adapters/postgresql/integer_test.rb +25 -0
- data/test/cases/adapters/postgresql/json_test.rb +237 -0
- data/test/cases/adapters/postgresql/ltree_test.rb +53 -0
- data/test/cases/adapters/postgresql/money_test.rb +96 -0
- data/test/cases/adapters/postgresql/network_test.rb +94 -0
- data/test/cases/adapters/postgresql/numbers_test.rb +49 -0
- data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +405 -0
- data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -0
- data/test/cases/adapters/postgresql/quoting_test.rb +44 -0
- data/test/cases/adapters/postgresql/range_test.rb +343 -0
- data/test/cases/adapters/postgresql/referential_integrity_test.rb +111 -0
- data/test/cases/adapters/postgresql/rename_table_test.rb +34 -0
- data/test/cases/adapters/postgresql/schema_authorization_test.rb +119 -0
- data/test/cases/adapters/postgresql/schema_test.rb +597 -0
- data/test/cases/adapters/postgresql/serial_test.rb +154 -0
- data/test/cases/adapters/postgresql/statement_pool_test.rb +41 -0
- data/test/cases/adapters/postgresql/timestamp_test.rb +90 -0
- data/test/cases/adapters/postgresql/type_lookup_test.rb +33 -0
- data/test/cases/adapters/postgresql/utils_test.rb +62 -0
- data/test/cases/adapters/postgresql/uuid_test.rb +294 -0
- data/test/cases/adapters/postgresql/xml_test.rb +54 -0
- data/test/cases/adapters/sqlite3/collation_test.rb +53 -0
- data/test/cases/adapters/sqlite3/copy_table_test.rb +98 -0
- data/test/cases/adapters/sqlite3/explain_test.rb +21 -0
- data/test/cases/adapters/sqlite3/quoting_test.rb +101 -0
- data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +441 -0
- data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +24 -0
- data/test/cases/adapters/sqlite3/statement_pool_test.rb +20 -0
- data/test/cases/aggregations_test.rb +11 -1
- data/test/cases/ar_schema_test.rb +35 -50
- data/test/cases/associations/association_scope_test.rb +1 -6
- data/test/cases/associations/belongs_to_associations_test.rb +122 -10
- data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +41 -0
- data/test/cases/associations/callbacks_test.rb +5 -7
- data/test/cases/associations/cascaded_eager_loading_test.rb +1 -1
- data/test/cases/associations/eager_load_nested_include_test.rb +1 -3
- data/test/cases/associations/eager_test.rb +158 -73
- data/test/cases/associations/extension_test.rb +7 -2
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +64 -32
- data/test/cases/associations/has_many_associations_test.rb +362 -43
- data/test/cases/associations/has_many_through_associations_test.rb +108 -41
- data/test/cases/associations/has_one_associations_test.rb +105 -8
- data/test/cases/associations/has_one_through_associations_test.rb +6 -3
- data/test/cases/associations/inner_join_association_test.rb +3 -3
- data/test/cases/associations/inverse_associations_test.rb +38 -11
- data/test/cases/associations/join_model_test.rb +59 -36
- data/test/cases/associations/left_outer_join_association_test.rb +88 -0
- data/test/cases/associations/nested_through_associations_test.rb +2 -2
- data/test/cases/associations/required_test.rb +25 -5
- data/test/cases/associations_test.rb +39 -34
- data/test/cases/attribute_decorators_test.rb +9 -8
- data/test/cases/attribute_methods/read_test.rb +5 -5
- data/test/cases/attribute_methods_test.rb +97 -40
- data/test/cases/attribute_set_test.rb +64 -4
- data/test/cases/attribute_test.rb +84 -18
- data/test/cases/attributes_test.rb +151 -34
- data/test/cases/autosave_association_test.rb +149 -36
- data/test/cases/base_test.rb +290 -241
- data/test/cases/batches_test.rb +299 -22
- data/test/cases/binary_test.rb +2 -10
- data/test/cases/bind_parameter_test.rb +76 -66
- data/test/cases/cache_key_test.rb +26 -0
- data/test/cases/calculations_test.rb +167 -15
- data/test/cases/callbacks_test.rb +161 -68
- data/test/cases/coders/json_test.rb +15 -0
- data/test/cases/collection_cache_key_test.rb +115 -0
- data/test/cases/column_definition_test.rb +26 -57
- data/test/cases/comment_test.rb +145 -0
- data/test/cases/connection_adapters/adapter_leasing_test.rb +5 -3
- data/test/cases/connection_adapters/connection_handler_test.rb +128 -21
- data/test/cases/connection_adapters/connection_specification_test.rb +1 -1
- data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +0 -38
- data/test/cases/connection_adapters/mysql_type_lookup_test.rb +5 -1
- data/test/cases/connection_adapters/schema_cache_test.rb +8 -3
- data/test/cases/connection_adapters/type_lookup_test.rb +15 -7
- data/test/cases/connection_management_test.rb +46 -56
- data/test/cases/connection_pool_test.rb +195 -20
- data/test/cases/connection_specification/resolver_test.rb +15 -0
- data/test/cases/counter_cache_test.rb +10 -5
- data/test/cases/custom_locking_test.rb +1 -1
- data/test/cases/database_statements_test.rb +18 -3
- data/test/cases/{invalid_date_test.rb → date_test.rb} +13 -1
- data/test/cases/date_time_precision_test.rb +107 -0
- data/test/cases/defaults_test.rb +85 -89
- data/test/cases/dirty_test.rb +30 -52
- data/test/cases/disconnected_test.rb +4 -2
- data/test/cases/enum_test.rb +178 -24
- data/test/cases/errors_test.rb +16 -0
- data/test/cases/explain_test.rb +32 -21
- data/test/cases/finder_test.rb +273 -148
- data/test/cases/fixture_set/file_test.rb +18 -0
- data/test/cases/fixtures_test.rb +112 -32
- data/test/cases/forbidden_attributes_protection_test.rb +69 -3
- data/test/cases/helper.rb +10 -16
- data/test/cases/hot_compatibility_test.rb +89 -1
- data/test/cases/inheritance_test.rb +284 -53
- data/test/cases/integration_test.rb +23 -7
- data/test/cases/invalid_connection_test.rb +4 -2
- data/test/cases/invertible_migration_test.rb +124 -32
- data/test/cases/json_serialization_test.rb +11 -2
- data/test/cases/locking_test.rb +22 -6
- data/test/cases/log_subscriber_test.rb +106 -17
- data/test/cases/migration/change_schema_test.rb +60 -114
- data/test/cases/migration/change_table_test.rb +34 -2
- data/test/cases/migration/column_attributes_test.rb +7 -23
- data/test/cases/migration/column_positioning_test.rb +8 -8
- data/test/cases/migration/columns_test.rb +17 -11
- data/test/cases/migration/command_recorder_test.rb +47 -2
- data/test/cases/migration/compatibility_test.rb +118 -0
- data/test/cases/migration/create_join_table_test.rb +21 -12
- data/test/cases/migration/foreign_key_test.rb +52 -18
- data/test/cases/migration/index_test.rb +14 -12
- data/test/cases/migration/logger_test.rb +1 -1
- data/test/cases/migration/pending_migrations_test.rb +0 -1
- data/test/cases/migration/references_foreign_key_test.rb +59 -7
- data/test/cases/migration/references_index_test.rb +4 -4
- data/test/cases/migration/references_statements_test.rb +26 -6
- data/test/cases/migration/rename_table_test.rb +25 -25
- data/test/cases/migration_test.rb +279 -81
- data/test/cases/migrator_test.rb +91 -8
- data/test/cases/mixin_test.rb +0 -2
- data/test/cases/modules_test.rb +3 -4
- data/test/cases/multiparameter_attributes_test.rb +24 -2
- data/test/cases/multiple_db_test.rb +11 -4
- data/test/cases/nested_attributes_test.rb +61 -33
- data/test/cases/persistence_test.rb +102 -10
- data/test/cases/pooled_connections_test.rb +3 -3
- data/test/cases/primary_keys_test.rb +170 -31
- data/test/cases/query_cache_test.rb +216 -96
- data/test/cases/quoting_test.rb +65 -19
- data/test/cases/readonly_test.rb +2 -1
- data/test/cases/reflection_test.rb +68 -22
- data/test/cases/relation/delegation_test.rb +3 -8
- data/test/cases/relation/merging_test.rb +10 -14
- data/test/cases/relation/mutation_test.rb +42 -24
- data/test/cases/relation/or_test.rb +92 -0
- data/test/cases/relation/predicate_builder_test.rb +4 -2
- data/test/cases/relation/record_fetch_warning_test.rb +40 -0
- data/test/cases/relation/where_chain_test.rb +23 -99
- data/test/cases/relation/where_clause_test.rb +182 -0
- data/test/cases/relation/where_test.rb +45 -23
- data/test/cases/relation_test.rb +67 -58
- data/test/cases/relations_test.rb +249 -38
- data/test/cases/result_test.rb +10 -0
- data/test/cases/sanitize_test.rb +108 -15
- data/test/cases/schema_dumper_test.rb +119 -125
- data/test/cases/schema_loading_test.rb +52 -0
- data/test/cases/scoping/default_scoping_test.rb +113 -39
- data/test/cases/scoping/named_scoping_test.rb +46 -9
- data/test/cases/scoping/relation_scoping_test.rb +47 -4
- data/test/cases/secure_token_test.rb +32 -0
- data/test/cases/serialization_test.rb +1 -1
- data/test/cases/serialized_attribute_test.rb +93 -6
- data/test/cases/statement_cache_test.rb +38 -0
- data/test/cases/store_test.rb +2 -1
- data/test/cases/suppressor_test.rb +63 -0
- data/test/cases/tasks/database_tasks_test.rb +73 -9
- data/test/cases/tasks/mysql_rake_test.rb +139 -118
- data/test/cases/tasks/postgresql_rake_test.rb +60 -6
- data/test/cases/tasks/sqlite_rake_test.rb +30 -3
- data/test/cases/test_case.rb +28 -20
- data/test/cases/test_fixtures_test.rb +36 -0
- data/test/cases/time_precision_test.rb +103 -0
- data/test/cases/timestamp_test.rb +44 -10
- data/test/cases/touch_later_test.rb +121 -0
- data/test/cases/transaction_callbacks_test.rb +128 -62
- data/test/cases/transaction_isolation_test.rb +2 -2
- data/test/cases/transactions_test.rb +61 -43
- data/test/cases/type/adapter_specific_registry_test.rb +133 -0
- data/test/cases/type/date_time_test.rb +14 -0
- data/test/cases/type/integer_test.rb +2 -96
- data/test/cases/type/string_test.rb +0 -14
- data/test/cases/type_test.rb +39 -0
- data/test/cases/types_test.rb +1 -118
- data/test/cases/unconnected_test.rb +1 -1
- data/test/cases/validations/absence_validation_test.rb +73 -0
- data/test/cases/validations/association_validation_test.rb +13 -2
- data/test/cases/validations/i18n_validation_test.rb +6 -10
- data/test/cases/validations/length_validation_test.rb +62 -30
- data/test/cases/validations/presence_validation_test.rb +36 -1
- data/test/cases/validations/uniqueness_validation_test.rb +128 -37
- data/test/cases/validations_repair_helper.rb +2 -6
- data/test/cases/validations_test.rb +36 -7
- data/test/cases/view_test.rb +102 -5
- data/test/cases/yaml_serialization_test.rb +21 -26
- data/test/config.example.yml +97 -0
- data/test/fixtures/bad_posts.yml +9 -0
- data/test/fixtures/books.yml +20 -0
- data/test/fixtures/content.yml +3 -0
- data/test/fixtures/content_positions.yml +3 -0
- data/test/fixtures/dead_parrots.yml +5 -0
- data/test/fixtures/live_parrots.yml +4 -0
- data/test/fixtures/naked/yml/parrots.yml +2 -0
- data/test/fixtures/naked/yml/trees.yml +3 -0
- data/test/fixtures/nodes.yml +29 -0
- data/test/fixtures/other_comments.yml +6 -0
- data/test/fixtures/other_dogs.yml +2 -0
- data/test/fixtures/other_posts.yml +7 -0
- data/test/fixtures/price_estimates.yml +10 -1
- data/test/fixtures/trees.yml +3 -0
- data/test/migrations/10_urban/9_add_expressions.rb +1 -1
- data/test/migrations/decimal/1_give_me_big_numbers.rb +1 -1
- data/test/migrations/magic/1_currencies_have_symbols.rb +1 -1
- data/test/migrations/missing/1000_people_have_middle_names.rb +2 -2
- data/test/migrations/missing/1_people_have_last_names.rb +2 -2
- data/test/migrations/missing/3_we_need_reminders.rb +2 -2
- data/test/migrations/missing/4_innocent_jointable.rb +2 -2
- data/test/migrations/rename/1_we_need_things.rb +2 -2
- data/test/migrations/rename/2_rename_things.rb +2 -2
- data/test/migrations/to_copy/1_people_have_hobbies.rb +1 -1
- data/test/migrations/to_copy/2_people_have_descriptions.rb +1 -1
- data/test/migrations/to_copy2/1_create_articles.rb +1 -1
- data/test/migrations/to_copy2/2_create_comments.rb +1 -1
- data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +1 -1
- data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +1 -1
- data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +1 -1
- data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +1 -1
- data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +1 -1
- data/test/migrations/valid/1_valid_people_have_last_names.rb +1 -1
- data/test/migrations/valid/2_we_need_reminders.rb +2 -2
- data/test/migrations/valid/3_innocent_jointable.rb +2 -2
- data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +1 -1
- data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -2
- data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +2 -2
- data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +1 -1
- data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +1 -1
- data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +1 -1
- data/test/migrations/version_check/20131219224947_migration_version_check.rb +1 -1
- data/test/models/admin/randomly_named_c1.rb +6 -2
- data/test/models/aircraft.rb +1 -0
- data/test/models/author.rb +4 -7
- data/test/models/bird.rb +1 -1
- data/test/models/book.rb +5 -0
- data/test/models/bulb.rb +2 -1
- data/test/models/car.rb +3 -0
- data/test/models/cat.rb +10 -0
- data/test/models/chef.rb +1 -0
- data/test/models/club.rb +2 -0
- data/test/models/comment.rb +17 -5
- data/test/models/company.rb +4 -2
- data/test/models/company_in_module.rb +1 -1
- data/test/models/contact.rb +1 -1
- data/test/models/content.rb +40 -0
- data/test/models/customer.rb +8 -2
- data/test/models/developer.rb +19 -0
- data/test/models/face.rb +1 -1
- data/test/models/guitar.rb +4 -0
- data/test/models/hotel.rb +2 -0
- data/test/models/member.rb +1 -0
- data/test/models/member_detail.rb +4 -3
- data/test/models/mentor.rb +3 -0
- data/test/models/mocktail_designer.rb +2 -0
- data/test/models/node.rb +5 -0
- data/test/models/non_primary_key.rb +2 -0
- data/test/models/notification.rb +3 -0
- data/test/models/other_dog.rb +5 -0
- data/test/models/owner.rb +4 -1
- data/test/models/parrot.rb +6 -7
- data/test/models/person.rb +0 -1
- data/test/models/pet.rb +3 -0
- data/test/models/pet_treasure.rb +6 -0
- data/test/models/pirate.rb +3 -3
- data/test/models/post.rb +18 -9
- data/test/models/project.rb +9 -0
- data/test/models/randomly_named_c1.rb +1 -1
- data/test/models/recipe.rb +3 -0
- data/test/models/ship.rb +8 -2
- data/test/models/tag.rb +6 -0
- data/test/models/topic.rb +2 -8
- data/test/models/tree.rb +3 -0
- data/test/models/tuning_peg.rb +4 -0
- data/test/models/user.rb +14 -0
- data/test/models/uuid_item.rb +6 -0
- data/test/schema/mysql2_specific_schema.rb +33 -23
- data/test/schema/oracle_specific_schema.rb +1 -4
- data/test/schema/postgresql_specific_schema.rb +36 -124
- data/test/schema/schema.rb +170 -65
- data/test/schema/schema.rb.original +1057 -0
- data/test/schema/sqlite_specific_schema.rb +1 -5
- data/test/support/connection.rb +1 -0
- data/test/support/schema_dumping_helper.rb +1 -1
- data/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -0
- data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -0
- metadata +146 -30
- data/lib/mswin32/rb19x/ibm_db.so +0 -0
- 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/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +0 -26
- data/test/cases/attribute_methods/serialization_test.rb +0 -29
- data/test/cases/migration/change_schema_test - Copy.rb +0 -448
- data/test/cases/migration/foreign_key_test - Changed.rb +0 -325
- data/test/cases/migration/table_and_index_test.rb +0 -24
- data/test/cases/relation/where_test2.rb +0 -36
- data/test/cases/type/decimal_test.rb +0 -56
- data/test/cases/type/unsigned_integer_test.rb +0 -18
- data/test/cases/xml_serialization_test.rb +0 -457
- data/test/fixtures/naked/csv/accounts.csv +0 -1
- data/test/schema/mysql_specific_schema.rb +0 -70
@@ -0,0 +1,133 @@
|
|
1
|
+
require "cases/helper"
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
class AdapterSpecificRegistryTest < ActiveRecord::TestCase
|
5
|
+
test "a class can be registered for a symbol" do
|
6
|
+
registry = Type::AdapterSpecificRegistry.new
|
7
|
+
registry.register(:foo, ::String)
|
8
|
+
registry.register(:bar, ::Array)
|
9
|
+
|
10
|
+
assert_equal "", registry.lookup(:foo)
|
11
|
+
assert_equal [], registry.lookup(:bar)
|
12
|
+
end
|
13
|
+
|
14
|
+
test "a block can be registered" do
|
15
|
+
registry = Type::AdapterSpecificRegistry.new
|
16
|
+
registry.register(:foo) do |*args|
|
17
|
+
[*args, "block for foo"]
|
18
|
+
end
|
19
|
+
registry.register(:bar) do |*args|
|
20
|
+
[*args, "block for bar"]
|
21
|
+
end
|
22
|
+
|
23
|
+
assert_equal [:foo, 1, "block for foo"], registry.lookup(:foo, 1)
|
24
|
+
assert_equal [:foo, 2, "block for foo"], registry.lookup(:foo, 2)
|
25
|
+
assert_equal [:bar, 1, 2, 3, "block for bar"], registry.lookup(:bar, 1, 2, 3)
|
26
|
+
end
|
27
|
+
|
28
|
+
test "filtering by adapter" do
|
29
|
+
registry = Type::AdapterSpecificRegistry.new
|
30
|
+
registry.register(:foo, String, adapter: :sqlite3)
|
31
|
+
registry.register(:foo, Array, adapter: :postgresql)
|
32
|
+
|
33
|
+
assert_equal "", registry.lookup(:foo, adapter: :sqlite3)
|
34
|
+
assert_equal [], registry.lookup(:foo, adapter: :postgresql)
|
35
|
+
end
|
36
|
+
|
37
|
+
test "an error is raised if both a generic and adapter specific type match" do
|
38
|
+
registry = Type::AdapterSpecificRegistry.new
|
39
|
+
registry.register(:foo, String)
|
40
|
+
registry.register(:foo, Array, adapter: :postgresql)
|
41
|
+
|
42
|
+
assert_raises TypeConflictError do
|
43
|
+
registry.lookup(:foo, adapter: :postgresql)
|
44
|
+
end
|
45
|
+
assert_equal "", registry.lookup(:foo, adapter: :sqlite3)
|
46
|
+
end
|
47
|
+
|
48
|
+
test "a generic type can explicitly override an adapter specific type" do
|
49
|
+
registry = Type::AdapterSpecificRegistry.new
|
50
|
+
registry.register(:foo, String, override: true)
|
51
|
+
registry.register(:foo, Array, adapter: :postgresql)
|
52
|
+
|
53
|
+
assert_equal "", registry.lookup(:foo, adapter: :postgresql)
|
54
|
+
assert_equal "", registry.lookup(:foo, adapter: :sqlite3)
|
55
|
+
end
|
56
|
+
|
57
|
+
test "a generic type can explicitly allow an adapter type to be used instead" do
|
58
|
+
registry = Type::AdapterSpecificRegistry.new
|
59
|
+
registry.register(:foo, String, override: false)
|
60
|
+
registry.register(:foo, Array, adapter: :postgresql)
|
61
|
+
|
62
|
+
assert_equal [], registry.lookup(:foo, adapter: :postgresql)
|
63
|
+
assert_equal "", registry.lookup(:foo, adapter: :sqlite3)
|
64
|
+
end
|
65
|
+
|
66
|
+
test "a reasonable error is given when no type is found" do
|
67
|
+
registry = Type::AdapterSpecificRegistry.new
|
68
|
+
|
69
|
+
e = assert_raises(ArgumentError) do
|
70
|
+
registry.lookup(:foo)
|
71
|
+
end
|
72
|
+
|
73
|
+
assert_equal "Unknown type :foo", e.message
|
74
|
+
end
|
75
|
+
|
76
|
+
test "construct args are passed to the type" do
|
77
|
+
type = Struct.new(:args)
|
78
|
+
registry = Type::AdapterSpecificRegistry.new
|
79
|
+
registry.register(:foo, type)
|
80
|
+
|
81
|
+
assert_equal type.new, registry.lookup(:foo)
|
82
|
+
assert_equal type.new(:ordered_arg), registry.lookup(:foo, :ordered_arg)
|
83
|
+
assert_equal type.new(keyword: :arg), registry.lookup(:foo, keyword: :arg)
|
84
|
+
assert_equal type.new(keyword: :arg), registry.lookup(:foo, keyword: :arg, adapter: :postgresql)
|
85
|
+
end
|
86
|
+
|
87
|
+
test "registering a modifier" do
|
88
|
+
decoration = Struct.new(:value)
|
89
|
+
registry = Type::AdapterSpecificRegistry.new
|
90
|
+
registry.register(:foo, String)
|
91
|
+
registry.register(:bar, Hash)
|
92
|
+
registry.add_modifier({ array: true }, decoration)
|
93
|
+
|
94
|
+
assert_equal decoration.new(""), registry.lookup(:foo, array: true)
|
95
|
+
assert_equal decoration.new({}), registry.lookup(:bar, array: true)
|
96
|
+
assert_equal "", registry.lookup(:foo)
|
97
|
+
end
|
98
|
+
|
99
|
+
test "registering multiple modifiers" do
|
100
|
+
decoration = Struct.new(:value)
|
101
|
+
other_decoration = Struct.new(:value)
|
102
|
+
registry = Type::AdapterSpecificRegistry.new
|
103
|
+
registry.register(:foo, String)
|
104
|
+
registry.add_modifier({ array: true }, decoration)
|
105
|
+
registry.add_modifier({ range: true }, other_decoration)
|
106
|
+
|
107
|
+
assert_equal "", registry.lookup(:foo)
|
108
|
+
assert_equal decoration.new(""), registry.lookup(:foo, array: true)
|
109
|
+
assert_equal other_decoration.new(""), registry.lookup(:foo, range: true)
|
110
|
+
assert_equal(
|
111
|
+
decoration.new(other_decoration.new("")),
|
112
|
+
registry.lookup(:foo, array: true, range: true)
|
113
|
+
)
|
114
|
+
end
|
115
|
+
|
116
|
+
test "registering adapter specific modifiers" do
|
117
|
+
decoration = Struct.new(:value)
|
118
|
+
type = Struct.new(:args)
|
119
|
+
registry = Type::AdapterSpecificRegistry.new
|
120
|
+
registry.register(:foo, type)
|
121
|
+
registry.add_modifier({ array: true }, decoration, adapter: :postgresql)
|
122
|
+
|
123
|
+
assert_equal(
|
124
|
+
decoration.new(type.new(keyword: :arg)),
|
125
|
+
registry.lookup(:foo, array: true, adapter: :postgresql, keyword: :arg)
|
126
|
+
)
|
127
|
+
assert_equal(
|
128
|
+
type.new(array: true),
|
129
|
+
registry.lookup(:foo, array: true, adapter: :sqlite3)
|
130
|
+
)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require "cases/helper"
|
2
|
+
require "models/task"
|
3
|
+
|
4
|
+
module ActiveRecord
|
5
|
+
module Type
|
6
|
+
class IntegerTest < ActiveRecord::TestCase
|
7
|
+
def test_datetime_seconds_precision_applied_to_timestamp
|
8
|
+
skip "This test is invalid if subsecond precision isn't supported" unless subsecond_precision_supported?
|
9
|
+
p = Task.create!(starting: ::Time.now)
|
10
|
+
assert_equal p.starting.usec, p.reload.starting.usec
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -4,110 +4,16 @@ require "models/company"
|
|
4
4
|
module ActiveRecord
|
5
5
|
module Type
|
6
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
7
|
test "casting ActiveRecord models" do
|
28
8
|
type = Type::Integer.new
|
29
9
|
firm = Firm.create(:name => 'Apple')
|
30
|
-
assert_nil type.
|
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
|
10
|
+
assert_nil type.cast(firm)
|
105
11
|
end
|
106
12
|
|
107
13
|
test "values which are out of range can be re-assigned" do
|
108
14
|
klass = Class.new(ActiveRecord::Base) do
|
109
15
|
self.table_name = 'posts'
|
110
|
-
attribute :foo,
|
16
|
+
attribute :foo, :integer
|
111
17
|
end
|
112
18
|
model = klass.new
|
113
19
|
|
@@ -2,20 +2,6 @@ require 'cases/helper'
|
|
2
2
|
|
3
3
|
module ActiveRecord
|
4
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
5
|
test "string mutations are detected" do
|
20
6
|
klass = Class.new(Base)
|
21
7
|
klass.table_name = 'authors'
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require "cases/helper"
|
2
|
+
|
3
|
+
class TypeTest < ActiveRecord::TestCase
|
4
|
+
setup do
|
5
|
+
@old_registry = ActiveRecord::Type.registry
|
6
|
+
ActiveRecord::Type.registry = ActiveRecord::Type::AdapterSpecificRegistry.new
|
7
|
+
end
|
8
|
+
|
9
|
+
teardown do
|
10
|
+
ActiveRecord::Type.registry = @old_registry
|
11
|
+
end
|
12
|
+
|
13
|
+
test "registering a new type" do
|
14
|
+
type = Struct.new(:args)
|
15
|
+
ActiveRecord::Type.register(:foo, type)
|
16
|
+
|
17
|
+
assert_equal type.new(:arg), ActiveRecord::Type.lookup(:foo, :arg)
|
18
|
+
end
|
19
|
+
|
20
|
+
test "looking up a type for a specific adapter" do
|
21
|
+
type = Struct.new(:args)
|
22
|
+
pgtype = Struct.new(:args)
|
23
|
+
ActiveRecord::Type.register(:foo, type, override: false)
|
24
|
+
ActiveRecord::Type.register(:foo, pgtype, adapter: :postgresql)
|
25
|
+
|
26
|
+
assert_equal type.new, ActiveRecord::Type.lookup(:foo, adapter: :sqlite)
|
27
|
+
assert_equal pgtype.new, ActiveRecord::Type.lookup(:foo, adapter: :postgresql)
|
28
|
+
end
|
29
|
+
|
30
|
+
test "lookup defaults to the current adapter" do
|
31
|
+
current_adapter = ActiveRecord::Base.connection.adapter_name.downcase.to_sym
|
32
|
+
type = Struct.new(:args)
|
33
|
+
adapter_type = Struct.new(:args)
|
34
|
+
ActiveRecord::Type.register(:foo, type, override: false)
|
35
|
+
ActiveRecord::Type.register(:foo, adapter_type, adapter: current_adapter)
|
36
|
+
|
37
|
+
assert_equal adapter_type.new, ActiveRecord::Type.lookup(:foo)
|
38
|
+
end
|
39
|
+
end
|
data/test/cases/types_test.rb
CHANGED
@@ -3,126 +3,9 @@ require "cases/helper"
|
|
3
3
|
module ActiveRecord
|
4
4
|
module ConnectionAdapters
|
5
5
|
class TypesTest < ActiveRecord::TestCase
|
6
|
-
def test_type_cast_boolean
|
7
|
-
type = Type::Boolean.new
|
8
|
-
assert type.type_cast_from_user('').nil?
|
9
|
-
assert type.type_cast_from_user(nil).nil?
|
10
|
-
|
11
|
-
assert type.type_cast_from_user(true)
|
12
|
-
assert type.type_cast_from_user(1)
|
13
|
-
assert type.type_cast_from_user('1')
|
14
|
-
assert type.type_cast_from_user('t')
|
15
|
-
assert type.type_cast_from_user('T')
|
16
|
-
assert type.type_cast_from_user('true')
|
17
|
-
assert type.type_cast_from_user('TRUE')
|
18
|
-
assert type.type_cast_from_user('on')
|
19
|
-
assert type.type_cast_from_user('ON')
|
20
|
-
|
21
|
-
# explicitly check for false vs nil
|
22
|
-
assert_equal false, type.type_cast_from_user(false)
|
23
|
-
assert_equal false, type.type_cast_from_user(0)
|
24
|
-
assert_equal false, type.type_cast_from_user('0')
|
25
|
-
assert_equal false, type.type_cast_from_user('f')
|
26
|
-
assert_equal false, type.type_cast_from_user('F')
|
27
|
-
assert_equal false, type.type_cast_from_user('false')
|
28
|
-
assert_equal false, type.type_cast_from_user('FALSE')
|
29
|
-
assert_equal false, type.type_cast_from_user('off')
|
30
|
-
assert_equal false, type.type_cast_from_user('OFF')
|
31
|
-
assert_deprecated do
|
32
|
-
assert_equal false, type.type_cast_from_user(' ')
|
33
|
-
assert_equal false, type.type_cast_from_user("\u3000\r\n")
|
34
|
-
assert_equal false, type.type_cast_from_user("\u0000")
|
35
|
-
assert_equal false, type.type_cast_from_user('SOMETHING RANDOM')
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_type_cast_float
|
40
|
-
type = Type::Float.new
|
41
|
-
assert_equal 1.0, type.type_cast_from_user("1")
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_changing_float
|
45
|
-
type = Type::Float.new
|
46
|
-
|
47
|
-
assert type.changed?(5.0, 5.0, '5wibble')
|
48
|
-
assert_not type.changed?(5.0, 5.0, '5')
|
49
|
-
assert_not type.changed?(5.0, 5.0, '5.0')
|
50
|
-
assert_not type.changed?(nil, nil, nil)
|
51
|
-
end
|
52
|
-
|
53
|
-
def test_type_cast_binary
|
54
|
-
type = Type::Binary.new
|
55
|
-
assert_equal nil, type.type_cast_from_user(nil)
|
56
|
-
assert_equal "1", type.type_cast_from_user("1")
|
57
|
-
assert_equal 1, type.type_cast_from_user(1)
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_type_cast_time
|
61
|
-
type = Type::Time.new
|
62
|
-
assert_equal nil, type.type_cast_from_user(nil)
|
63
|
-
assert_equal nil, type.type_cast_from_user('')
|
64
|
-
assert_equal nil, type.type_cast_from_user('ABC')
|
65
|
-
|
66
|
-
time_string = Time.now.utc.strftime("%T")
|
67
|
-
assert_equal time_string, type.type_cast_from_user(time_string).strftime("%T")
|
68
|
-
end
|
69
|
-
|
70
|
-
def test_type_cast_datetime_and_timestamp
|
71
|
-
type = Type::DateTime.new
|
72
|
-
assert_equal nil, type.type_cast_from_user(nil)
|
73
|
-
assert_equal nil, type.type_cast_from_user('')
|
74
|
-
assert_equal nil, type.type_cast_from_user(' ')
|
75
|
-
assert_equal nil, type.type_cast_from_user('ABC')
|
76
|
-
|
77
|
-
datetime_string = Time.now.utc.strftime("%FT%T")
|
78
|
-
assert_equal datetime_string, type.type_cast_from_user(datetime_string).strftime("%FT%T")
|
79
|
-
end
|
80
|
-
|
81
|
-
def test_type_cast_date
|
82
|
-
type = Type::Date.new
|
83
|
-
assert_equal nil, type.type_cast_from_user(nil)
|
84
|
-
assert_equal nil, type.type_cast_from_user('')
|
85
|
-
assert_equal nil, type.type_cast_from_user(' ')
|
86
|
-
assert_equal nil, type.type_cast_from_user('ABC')
|
87
|
-
|
88
|
-
date_string = Time.now.utc.strftime("%F")
|
89
|
-
assert_equal date_string, type.type_cast_from_user(date_string).strftime("%F")
|
90
|
-
end
|
91
|
-
|
92
|
-
def test_type_cast_duration_to_integer
|
93
|
-
type = Type::Integer.new
|
94
|
-
assert_equal 1800, type.type_cast_from_user(30.minutes)
|
95
|
-
assert_equal 7200, type.type_cast_from_user(2.hours)
|
96
|
-
end
|
97
|
-
|
98
|
-
def test_string_to_time_with_timezone
|
99
|
-
[:utc, :local].each do |zone|
|
100
|
-
with_timezone_config default: zone do
|
101
|
-
type = Type::DateTime.new
|
102
|
-
assert_equal Time.utc(2013, 9, 4, 0, 0, 0), type.type_cast_from_user("Wed, 04 Sep 2013 03:00:00 EAT")
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
def test_type_equality
|
108
|
-
assert_equal Type::Value.new, Type::Value.new
|
109
|
-
assert_not_equal Type::Value.new, Type::Integer.new
|
110
|
-
assert_not_equal Type::Value.new(precision: 1), Type::Value.new(precision: 2)
|
111
|
-
end
|
112
|
-
|
113
|
-
if current_adapter?(:SQLite3Adapter)
|
114
|
-
def test_binary_encoding
|
115
|
-
type = SQLite3Binary.new
|
116
|
-
utf8_string = "a string".encode(Encoding::UTF_8)
|
117
|
-
type_cast = type.type_cast_from_user(utf8_string)
|
118
|
-
|
119
|
-
assert_equal Encoding::ASCII_8BIT, type_cast.encoding
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
6
|
def test_attributes_which_are_invalid_for_database_can_still_be_reassigned
|
124
7
|
type_which_cannot_go_to_the_database = Type::Value.new
|
125
|
-
def type_which_cannot_go_to_the_database.
|
8
|
+
def type_which_cannot_go_to_the_database.serialize(*)
|
126
9
|
raise
|
127
10
|
end
|
128
11
|
klass = Class.new(ActiveRecord::Base) do
|