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
@@ -57,6 +57,12 @@ module ActiveRecord
|
|
57
57
|
"encoding" => "utf8" }, spec)
|
58
58
|
end
|
59
59
|
|
60
|
+
def test_url_missing_scheme
|
61
|
+
spec = resolve 'foo'
|
62
|
+
assert_equal({
|
63
|
+
"database" => "foo" }, spec)
|
64
|
+
end
|
65
|
+
|
60
66
|
def test_url_host_db
|
61
67
|
spec = resolve 'abstract://foo/bar?encoding=utf8'
|
62
68
|
assert_equal({
|
@@ -110,6 +116,15 @@ module ActiveRecord
|
|
110
116
|
"encoding" => "utf8" }, spec)
|
111
117
|
end
|
112
118
|
|
119
|
+
def test_spec_name_on_key_lookup
|
120
|
+
spec = spec(:readonly, 'readonly' => {'adapter' => 'sqlite3'})
|
121
|
+
assert_equal "readonly", spec.name
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_spec_name_with_inline_config
|
125
|
+
spec = spec({'adapter' => 'sqlite3'})
|
126
|
+
assert_equal "primary", spec.name, "should default to primary id"
|
127
|
+
end
|
113
128
|
end
|
114
129
|
end
|
115
130
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'cases/helper'
|
2
2
|
require 'models/topic'
|
3
3
|
require 'models/car'
|
4
|
+
require 'models/aircraft'
|
4
5
|
require 'models/wheel'
|
5
6
|
require 'models/engine'
|
6
7
|
require 'models/reply'
|
@@ -150,7 +151,7 @@ class CounterCacheTest < ActiveRecord::TestCase
|
|
150
151
|
|
151
152
|
test "reset the right counter if two have the same foreign key" do
|
152
153
|
michael = people(:michael)
|
153
|
-
assert_nothing_raised
|
154
|
+
assert_nothing_raised do
|
154
155
|
Person.reset_counters(michael.id, :friends_too)
|
155
156
|
end
|
156
157
|
end
|
@@ -199,11 +200,15 @@ class CounterCacheTest < ActiveRecord::TestCase
|
|
199
200
|
assert_equal 2, car.reload.engines_count
|
200
201
|
end
|
201
202
|
|
202
|
-
test "
|
203
|
-
|
203
|
+
test "update counters in a polymorphic relationship" do
|
204
|
+
aircraft = Aircraft.create!
|
204
205
|
|
205
|
-
|
206
|
-
|
206
|
+
assert_difference 'aircraft.reload.wheels_count' do
|
207
|
+
aircraft.wheels << Wheel.create!
|
208
|
+
end
|
209
|
+
|
210
|
+
assert_difference 'aircraft.reload.wheels_count', -1 do
|
211
|
+
aircraft.wheels.first.destroy
|
207
212
|
end
|
208
213
|
end
|
209
214
|
end
|
@@ -6,7 +6,7 @@ module ActiveRecord
|
|
6
6
|
fixtures :people
|
7
7
|
|
8
8
|
def test_custom_lock
|
9
|
-
if current_adapter?(:
|
9
|
+
if current_adapter?(:Mysql2Adapter)
|
10
10
|
assert_match 'SHARE MODE', Person.lock('LOCK IN SHARE MODE').to_sql
|
11
11
|
assert_sql(/LOCK IN SHARE MODE/) do
|
12
12
|
Person.all.merge!(:lock => 'LOCK IN SHARE MODE').find(1)
|
@@ -6,14 +6,29 @@ class DatabaseStatementsTest < ActiveRecord::TestCase
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def test_insert_should_return_the_inserted_id
|
9
|
+
assert_not_nil return_the_inserted_id(method: :insert)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_create_should_return_the_inserted_id
|
13
|
+
assert_not_nil return_the_inserted_id(method: :create)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_insert_update_delete_sql_is_deprecated
|
17
|
+
assert_deprecated { @connection.insert_sql("INSERT INTO accounts (firm_id,credit_limit) VALUES (42,5000)") }
|
18
|
+
assert_deprecated { @connection.update_sql("UPDATE accounts SET credit_limit = 6000 WHERE firm_id = 42") }
|
19
|
+
assert_deprecated { @connection.delete_sql("DELETE FROM accounts WHERE firm_id = 42") }
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def return_the_inserted_id(method:)
|
9
25
|
# Oracle adapter uses prefetched primary key values from sequence and passes them to connection adapter insert method
|
10
26
|
if current_adapter?(:OracleAdapter)
|
11
27
|
sequence_name = "accounts_seq"
|
12
28
|
id_value = @connection.next_sequence_value(sequence_name)
|
13
|
-
|
29
|
+
@connection.send(method, "INSERT INTO accounts (id, firm_id,credit_limit) VALUES (accounts_seq.nextval,42,5000)", nil, :id, id_value, sequence_name)
|
14
30
|
else
|
15
|
-
|
31
|
+
@connection.send(method, "INSERT INTO accounts (firm_id,credit_limit) VALUES (42,5000)")
|
16
32
|
end
|
17
|
-
assert_not_nil id
|
18
33
|
end
|
19
34
|
end
|
@@ -1,7 +1,19 @@
|
|
1
1
|
require 'cases/helper'
|
2
2
|
require 'models/topic'
|
3
3
|
|
4
|
-
class
|
4
|
+
class DateTest < ActiveRecord::TestCase
|
5
|
+
def test_date_with_time_value
|
6
|
+
time_value = Time.new(2016, 05, 11, 19, 0, 0)
|
7
|
+
topic = Topic.create(last_read: time_value)
|
8
|
+
assert_equal topic, Topic.find_by(last_read: time_value)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_date_with_string_value
|
12
|
+
string_value = '2016-05-11 19:00:00'
|
13
|
+
topic = Topic.create(last_read: string_value)
|
14
|
+
assert_equal topic, Topic.find_by(last_read: string_value)
|
15
|
+
end
|
16
|
+
|
5
17
|
def test_assign_valid_dates
|
6
18
|
valid_dates = [[2007, 11, 30], [1993, 2, 28], [2008, 2, 29]]
|
7
19
|
|
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'cases/helper'
|
2
|
+
require 'support/schema_dumping_helper'
|
3
|
+
|
4
|
+
if subsecond_precision_supported?
|
5
|
+
class DateTimePrecisionTest < ActiveRecord::TestCase
|
6
|
+
include SchemaDumpingHelper
|
7
|
+
self.use_transactional_tests = false
|
8
|
+
|
9
|
+
class Foo < ActiveRecord::Base; end
|
10
|
+
|
11
|
+
setup do
|
12
|
+
@connection = ActiveRecord::Base.connection
|
13
|
+
Foo.reset_column_information
|
14
|
+
end
|
15
|
+
|
16
|
+
teardown do
|
17
|
+
@connection.drop_table :foos
|
18
|
+
#, if_exists: true
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_datetime_data_type_with_precision
|
22
|
+
@connection.create_table(:foos, force: true)
|
23
|
+
@connection.add_column :foos, :created_at, :datetime, precision: 0
|
24
|
+
@connection.add_column :foos, :updated_at, :datetime, precision: 5
|
25
|
+
assert_equal 0, Foo.columns_hash['created_at'].precision
|
26
|
+
assert_equal 5, Foo.columns_hash['updated_at'].precision
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_datetime_precision_is_truncated_on_assignment
|
30
|
+
@connection.create_table(:foos, force: true)
|
31
|
+
@connection.add_column :foos, :created_at, :datetime, precision: 0
|
32
|
+
@connection.add_column :foos, :updated_at, :datetime, precision: 6
|
33
|
+
|
34
|
+
time = ::Time.now.change(nsec: 123456789)
|
35
|
+
foo = Foo.new(created_at: time, updated_at: time)
|
36
|
+
|
37
|
+
assert_equal 0, foo.created_at.nsec
|
38
|
+
assert_equal 123456000, foo.updated_at.nsec
|
39
|
+
|
40
|
+
foo.save!
|
41
|
+
foo.reload
|
42
|
+
|
43
|
+
assert_equal 0, foo.created_at.nsec
|
44
|
+
assert_equal 123456000, foo.updated_at.nsec
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_timestamps_helper_with_custom_precision
|
48
|
+
@connection.create_table(:foos, force: true) do |t|
|
49
|
+
t.timestamps precision: 4
|
50
|
+
end
|
51
|
+
assert_equal 4, Foo.columns_hash['created_at'].precision
|
52
|
+
assert_equal 4, Foo.columns_hash['updated_at'].precision
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_passing_precision_to_datetime_does_not_set_limit
|
56
|
+
@connection.create_table(:foos, force: true) do |t|
|
57
|
+
t.timestamps precision: 4
|
58
|
+
end
|
59
|
+
assert_nil Foo.columns_hash['created_at'].limit
|
60
|
+
assert_nil Foo.columns_hash['updated_at'].limit
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_invalid_datetime_precision_raises_error
|
64
|
+
assert_raises ActiveRecord::ActiveRecordError do
|
65
|
+
@connection.create_table(:foos, force: true) do |t|
|
66
|
+
t.timestamps precision: 7
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_formatting_datetime_according_to_precision
|
72
|
+
@connection.create_table(:foos, force: true) do |t|
|
73
|
+
t.datetime :created_at, precision: 0
|
74
|
+
t.datetime :updated_at, precision: 4
|
75
|
+
end
|
76
|
+
date = ::Time.utc(2014, 8, 17, 12, 30, 0, 999999)
|
77
|
+
Foo.create!(created_at: date, updated_at: date)
|
78
|
+
assert foo = Foo.find_by(created_at: date)
|
79
|
+
assert_equal 1, Foo.where(updated_at: date).count
|
80
|
+
assert_equal date.to_s, foo.created_at.to_s
|
81
|
+
assert_equal date.to_s, foo.updated_at.to_s
|
82
|
+
assert_equal 000000, foo.created_at.usec
|
83
|
+
assert_equal 999900, foo.updated_at.usec
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_schema_dump_includes_datetime_precision
|
87
|
+
@connection.create_table(:foos, force: true) do |t|
|
88
|
+
t.timestamps precision: 6
|
89
|
+
end
|
90
|
+
output = dump_table_schema("foos")
|
91
|
+
assert_match %r{t\.datetime\s+"created_at",\s+precision: 6,\s+null: false$}, output
|
92
|
+
assert_match %r{t\.datetime\s+"updated_at",\s+precision: 6,\s+null: false$}, output
|
93
|
+
end
|
94
|
+
|
95
|
+
if current_adapter?(:PostgreSQLAdapter, :SQLServerAdapter)
|
96
|
+
def test_datetime_precision_with_zero_should_be_dumped
|
97
|
+
@connection.create_table(:foos, force: true) do |t|
|
98
|
+
t.timestamps precision: 0
|
99
|
+
end
|
100
|
+
output = dump_table_schema("foos")
|
101
|
+
assert_match %r{t\.datetime\s+"created_at",\s+precision: 0,\s+null: false$}, output
|
102
|
+
assert_match %r{t\.datetime\s+"updated_at",\s+precision: 0,\s+null: false$}, output
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
end
|
data/test/cases/defaults_test.rb
CHANGED
@@ -1,46 +1,60 @@
|
|
1
1
|
require "cases/helper"
|
2
|
+
require 'support/schema_dumping_helper'
|
2
3
|
require 'models/default'
|
3
4
|
require 'models/entrant'
|
4
5
|
|
5
6
|
class DefaultTest < ActiveRecord::TestCase
|
6
7
|
def test_nil_defaults_for_not_null_columns
|
7
|
-
|
8
|
-
if current_adapter?(:MysqlAdapter) && (Mysql.client_version < 50051 || (50100..50122).include?(Mysql.client_version))
|
9
|
-
{ 'id' => nil, 'name' => '', 'course_id' => nil }
|
10
|
-
else
|
11
|
-
{ 'id' => nil, 'name' => nil, 'course_id' => nil }
|
12
|
-
end
|
13
|
-
|
14
|
-
column_defaults.each do |name, default|
|
8
|
+
%w(id name course_id).each do |name|
|
15
9
|
column = Entrant.columns_hash[name]
|
16
10
|
assert !column.null, "#{name} column should be NOT NULL"
|
17
|
-
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
if current_adapter?(:PostgreSQLAdapter, :OracleAdapter)
|
22
|
-
def test_default_integers
|
23
|
-
default = Default.new
|
24
|
-
assert_instance_of Fixnum, default.positive_integer
|
25
|
-
assert_equal 1, default.positive_integer
|
26
|
-
assert_instance_of Fixnum, default.negative_integer
|
27
|
-
assert_equal(-1, default.negative_integer)
|
28
|
-
assert_instance_of BigDecimal, default.decimal_number
|
29
|
-
assert_equal BigDecimal.new("2.78"), default.decimal_number
|
11
|
+
assert_not column.default, "#{name} column should be DEFAULT 'nil'"
|
30
12
|
end
|
31
13
|
end
|
32
14
|
|
33
15
|
if current_adapter?(:PostgreSQLAdapter)
|
34
16
|
def test_multiline_default_text
|
17
|
+
record = Default.new
|
35
18
|
# older postgres versions represent the default with escapes ("\\012" for a newline)
|
36
|
-
assert(
|
37
|
-
"--- []\\012\\012" == Default.columns_hash['multiline_default'].default)
|
19
|
+
assert("--- []\n\n" == record.multiline_default || "--- []\\012\\012" == record.multiline_default)
|
38
20
|
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class DefaultNumbersTest < ActiveRecord::TestCase
|
25
|
+
class DefaultNumber < ActiveRecord::Base; end
|
39
26
|
|
40
|
-
|
41
|
-
|
27
|
+
setup do
|
28
|
+
@connection = ActiveRecord::Base.connection
|
29
|
+
@connection.create_table :default_numbers do |t|
|
30
|
+
t.integer :positive_integer, default: 7
|
31
|
+
t.integer :negative_integer, default: -5
|
32
|
+
t.decimal :decimal_number, default: "2.78", precision: 5, scale: 2
|
42
33
|
end
|
43
34
|
end
|
35
|
+
|
36
|
+
teardown do
|
37
|
+
@connection.drop_table :default_numbers
|
38
|
+
#, if_exists: true
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_default_positive_integer
|
42
|
+
record = DefaultNumber.new
|
43
|
+
assert_equal 7, record.positive_integer
|
44
|
+
assert_equal "7", record.positive_integer_before_type_cast
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_default_negative_integer
|
48
|
+
record = DefaultNumber.new
|
49
|
+
assert_equal (-5), record.negative_integer
|
50
|
+
assert_equal "-5", record.negative_integer_before_type_cast
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_default_decimal_number
|
54
|
+
record = DefaultNumber.new
|
55
|
+
assert_equal BigDecimal.new("2.78"), record.decimal_number
|
56
|
+
assert_equal "2.78", record.decimal_number_before_type_cast
|
57
|
+
end
|
44
58
|
end
|
45
59
|
|
46
60
|
class DefaultStringsTest < ActiveRecord::TestCase
|
@@ -68,17 +82,42 @@ class DefaultStringsTest < ActiveRecord::TestCase
|
|
68
82
|
end
|
69
83
|
end
|
70
84
|
|
71
|
-
if current_adapter?(:
|
85
|
+
if current_adapter?(:PostgreSQLAdapter)
|
86
|
+
class PostgresqlDefaultExpressionTest < ActiveRecord::TestCase
|
87
|
+
include SchemaDumpingHelper
|
88
|
+
|
89
|
+
test "schema dump includes default expression" do
|
90
|
+
output = dump_table_schema("defaults")
|
91
|
+
assert_match %r/t\.date\s+"modified_date",\s+default: -> { "\('now'::text\)::date" }/, output
|
92
|
+
assert_match %r/t\.date\s+"modified_date_function",\s+default: -> { "now\(\)" }/, output
|
93
|
+
assert_match %r/t\.datetime\s+"modified_time",\s+default: -> { "now\(\)" }/, output
|
94
|
+
assert_match %r/t\.datetime\s+"modified_time_function",\s+default: -> { "now\(\)" }/, output
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
if current_adapter?(:Mysql2Adapter)
|
100
|
+
class MysqlDefaultExpressionTest < ActiveRecord::TestCase
|
101
|
+
include SchemaDumpingHelper
|
102
|
+
|
103
|
+
if ActiveRecord::Base.connection.version >= '5.6.0'
|
104
|
+
test "schema dump includes default expression" do
|
105
|
+
output = dump_table_schema("datetime_defaults")
|
106
|
+
assert_match %r/t\.datetime\s+"modified_datetime",\s+default: -> { "CURRENT_TIMESTAMP" }/, output
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
72
111
|
class DefaultsTestWithoutTransactionalFixtures < ActiveRecord::TestCase
|
73
112
|
# ActiveRecord::Base#create! (and #save and other related methods) will
|
74
|
-
# open a new transaction. When in transactional
|
113
|
+
# open a new transaction. When in transactional tests mode, this will
|
75
114
|
# cause Active Record to create a new savepoint. However, since MySQL doesn't
|
76
115
|
# support DDL transactions, creating a table will result in any created
|
77
116
|
# savepoints to be automatically released. This in turn causes the savepoint
|
78
117
|
# release code in AbstractAdapter#transaction to fail.
|
79
118
|
#
|
80
|
-
# We don't want that to happen, so we disable transactional
|
81
|
-
self.
|
119
|
+
# We don't want that to happen, so we disable transactional tests here.
|
120
|
+
self.use_transactional_tests = false
|
82
121
|
|
83
122
|
def using_strict(strict)
|
84
123
|
connection = ActiveRecord::Base.remove_connection
|
@@ -103,19 +142,21 @@ if current_adapter?(:MysqlAdapter, :Mysql2Adapter)
|
|
103
142
|
def test_mysql_text_not_null_defaults_non_strict
|
104
143
|
using_strict(false) do
|
105
144
|
with_text_blob_not_null_table do |klass|
|
106
|
-
|
107
|
-
assert_equal '',
|
145
|
+
record = klass.new
|
146
|
+
assert_equal '', record.non_null_blob
|
147
|
+
assert_equal '', record.non_null_text
|
108
148
|
|
109
|
-
assert_nil
|
110
|
-
assert_nil
|
149
|
+
assert_nil record.null_blob
|
150
|
+
assert_nil record.null_text
|
111
151
|
|
112
|
-
|
152
|
+
record.save!
|
153
|
+
record.reload
|
113
154
|
|
114
|
-
assert_equal '',
|
115
|
-
assert_equal '',
|
155
|
+
assert_equal '', record.non_null_text
|
156
|
+
assert_equal '', record.non_null_blob
|
116
157
|
|
117
|
-
assert_nil
|
118
|
-
assert_nil
|
158
|
+
assert_nil record.null_text
|
159
|
+
assert_nil record.null_blob
|
119
160
|
end
|
120
161
|
end
|
121
162
|
end
|
@@ -123,10 +164,11 @@ if current_adapter?(:MysqlAdapter, :Mysql2Adapter)
|
|
123
164
|
def test_mysql_text_not_null_defaults_strict
|
124
165
|
using_strict(true) do
|
125
166
|
with_text_blob_not_null_table do |klass|
|
126
|
-
|
127
|
-
assert_nil
|
128
|
-
assert_nil
|
129
|
-
assert_nil
|
167
|
+
record = klass.new
|
168
|
+
assert_nil record.non_null_blob
|
169
|
+
assert_nil record.non_null_text
|
170
|
+
assert_nil record.null_blob
|
171
|
+
assert_nil record.null_text
|
130
172
|
|
131
173
|
assert_raises(ActiveRecord::StatementInvalid) { klass.create }
|
132
174
|
end
|
@@ -160,8 +202,7 @@ if current_adapter?(:MysqlAdapter, :Mysql2Adapter)
|
|
160
202
|
|
161
203
|
assert_equal '0', klass.columns_hash['zero'].default
|
162
204
|
assert !klass.columns_hash['zero'].null
|
163
|
-
|
164
|
-
assert [0, nil].include?(klass.columns_hash['omit'].default)
|
205
|
+
assert_equal nil, klass.columns_hash['omit'].default
|
165
206
|
assert !klass.columns_hash['omit'].null
|
166
207
|
|
167
208
|
assert_raise(ActiveRecord::StatementInvalid) { klass.create! }
|
@@ -176,48 +217,3 @@ if current_adapter?(:MysqlAdapter, :Mysql2Adapter)
|
|
176
217
|
end
|
177
218
|
end
|
178
219
|
end
|
179
|
-
|
180
|
-
if current_adapter?(:PostgreSQLAdapter)
|
181
|
-
class DefaultsUsingMultipleSchemasAndDomainTest < ActiveSupport::TestCase
|
182
|
-
def setup
|
183
|
-
@connection = ActiveRecord::Base.connection
|
184
|
-
|
185
|
-
@old_search_path = @connection.schema_search_path
|
186
|
-
@connection.schema_search_path = "schema_1, pg_catalog"
|
187
|
-
@connection.create_table "defaults" do |t|
|
188
|
-
t.text "text_col", :default => "some value"
|
189
|
-
t.string "string_col", :default => "some value"
|
190
|
-
end
|
191
|
-
Default.reset_column_information
|
192
|
-
end
|
193
|
-
|
194
|
-
def test_text_defaults_in_new_schema_when_overriding_domain
|
195
|
-
assert_equal "some value", Default.new.text_col, "Default of text column was not correctly parse"
|
196
|
-
end
|
197
|
-
|
198
|
-
def test_string_defaults_in_new_schema_when_overriding_domain
|
199
|
-
assert_equal "some value", Default.new.string_col, "Default of string column was not correctly parse"
|
200
|
-
end
|
201
|
-
|
202
|
-
def test_bpchar_defaults_in_new_schema_when_overriding_domain
|
203
|
-
@connection.execute "ALTER TABLE defaults ADD bpchar_col bpchar DEFAULT 'some value'"
|
204
|
-
Default.reset_column_information
|
205
|
-
assert_equal "some value", Default.new.bpchar_col, "Default of bpchar column was not correctly parse"
|
206
|
-
end
|
207
|
-
|
208
|
-
def test_text_defaults_after_updating_column_default
|
209
|
-
@connection.execute "ALTER TABLE defaults ALTER COLUMN text_col SET DEFAULT 'some text'::schema_1.text"
|
210
|
-
assert_equal "some text", Default.new.text_col, "Default of text column was not correctly parse after updating default using '::text' since postgreSQL will add parens to the default in db"
|
211
|
-
end
|
212
|
-
|
213
|
-
def test_default_containing_quote_and_colons
|
214
|
-
@connection.execute "ALTER TABLE defaults ALTER COLUMN string_col SET DEFAULT 'foo''::bar'"
|
215
|
-
assert_equal "foo'::bar", Default.new.string_col
|
216
|
-
end
|
217
|
-
|
218
|
-
teardown do
|
219
|
-
@connection.schema_search_path = @old_search_path
|
220
|
-
Default.reset_column_information
|
221
|
-
end
|
222
|
-
end
|
223
|
-
end
|