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
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
|
3
2
|
require 'cases/helper'
|
4
3
|
require 'models/company'
|
@@ -82,7 +81,7 @@ class IntegrationTest < ActiveRecord::TestCase
|
|
82
81
|
|
83
82
|
def test_cache_key_format_for_existing_record_with_updated_at
|
84
83
|
dev = Developer.first
|
85
|
-
assert_equal "developers/#{dev.id}-#{dev.updated_at.utc.to_s(:
|
84
|
+
assert_equal "developers/#{dev.id}-#{dev.updated_at.utc.to_s(:usec)}", dev.cache_key
|
86
85
|
end
|
87
86
|
|
88
87
|
def test_cache_key_format_for_existing_record_with_updated_at_and_custom_cache_timestamp_format
|
@@ -97,7 +96,9 @@ class IntegrationTest < ActiveRecord::TestCase
|
|
97
96
|
owner.update_column :updated_at, Time.current
|
98
97
|
key = owner.cache_key
|
99
98
|
|
100
|
-
|
99
|
+
travel(1.second) do
|
100
|
+
assert pet.touch
|
101
|
+
end
|
101
102
|
assert_not_equal key, owner.reload.cache_key
|
102
103
|
end
|
103
104
|
|
@@ -110,30 +111,45 @@ class IntegrationTest < ActiveRecord::TestCase
|
|
110
111
|
def test_cache_key_for_updated_on
|
111
112
|
dev = Developer.first
|
112
113
|
dev.updated_at = nil
|
113
|
-
assert_equal "developers/#{dev.id}-#{dev.updated_on.utc.to_s(:
|
114
|
+
assert_equal "developers/#{dev.id}-#{dev.updated_on.utc.to_s(:usec)}", dev.cache_key
|
114
115
|
end
|
115
116
|
|
116
117
|
def test_cache_key_for_newer_updated_at
|
117
118
|
dev = Developer.first
|
118
119
|
dev.updated_at += 3600
|
119
|
-
assert_equal "developers/#{dev.id}-#{dev.updated_at.utc.to_s(:
|
120
|
+
assert_equal "developers/#{dev.id}-#{dev.updated_at.utc.to_s(:usec)}", dev.cache_key
|
120
121
|
end
|
121
122
|
|
122
123
|
def test_cache_key_for_newer_updated_on
|
123
124
|
dev = Developer.first
|
124
125
|
dev.updated_on += 3600
|
125
|
-
assert_equal "developers/#{dev.id}-#{dev.updated_on.utc.to_s(:
|
126
|
+
assert_equal "developers/#{dev.id}-#{dev.updated_on.utc.to_s(:usec)}", dev.cache_key
|
126
127
|
end
|
127
128
|
|
128
129
|
def test_cache_key_format_is_precise_enough
|
130
|
+
skip("Subsecond precision is not supported") unless subsecond_precision_supported?
|
129
131
|
dev = Developer.first
|
130
132
|
key = dev.cache_key
|
131
133
|
dev.touch
|
132
134
|
assert_not_equal key, dev.cache_key
|
133
135
|
end
|
134
136
|
|
137
|
+
def test_cache_key_format_is_not_too_precise
|
138
|
+
skip("Subsecond precision is not supported") unless subsecond_precision_supported?
|
139
|
+
dev = Developer.first
|
140
|
+
dev.touch
|
141
|
+
key = dev.cache_key
|
142
|
+
assert_equal key, dev.reload.cache_key
|
143
|
+
end
|
144
|
+
|
135
145
|
def test_named_timestamps_for_cache_key
|
136
146
|
owner = owners(:blackbeard)
|
137
|
-
assert_equal "owners/#{owner.id}-#{owner.happy_at.utc.to_s(:
|
147
|
+
assert_equal "owners/#{owner.id}-#{owner.happy_at.utc.to_s(:usec)}", owner.cache_key(:updated_at, :happy_at)
|
148
|
+
end
|
149
|
+
|
150
|
+
def test_cache_key_when_named_timestamp_is_nil
|
151
|
+
owner = owners(:blackbeard)
|
152
|
+
owner.happy_at = nil
|
153
|
+
assert_equal "owners/#{owner.id}", owner.cache_key(:happy_at)
|
138
154
|
end
|
139
155
|
end
|
@@ -1,7 +1,8 @@
|
|
1
1
|
require "cases/helper"
|
2
2
|
|
3
|
+
if current_adapter?(:Mysql2Adapter)
|
3
4
|
class TestAdapterWithInvalidConnection < ActiveRecord::TestCase
|
4
|
-
self.
|
5
|
+
self.use_transactional_tests = false
|
5
6
|
|
6
7
|
class Bird < ActiveRecord::Base
|
7
8
|
end
|
@@ -9,7 +10,7 @@ class TestAdapterWithInvalidConnection < ActiveRecord::TestCase
|
|
9
10
|
def setup
|
10
11
|
# Can't just use current adapter; sqlite3 will create a database
|
11
12
|
# file on the fly.
|
12
|
-
Bird.establish_connection adapter: '
|
13
|
+
Bird.establish_connection adapter: 'mysql2', database: 'i_do_not_exist'
|
13
14
|
end
|
14
15
|
|
15
16
|
teardown do
|
@@ -20,3 +21,4 @@ class TestAdapterWithInvalidConnection < ActiveRecord::TestCase
|
|
20
21
|
assert_equal "#{Bird.name} (call '#{Bird.name}.connection' to establish a connection)", Bird.inspect
|
21
22
|
end
|
22
23
|
end
|
24
|
+
end
|
@@ -1,8 +1,11 @@
|
|
1
1
|
require "cases/helper"
|
2
2
|
|
3
|
+
class Horse < ActiveRecord::Base
|
4
|
+
end
|
5
|
+
|
3
6
|
module ActiveRecord
|
4
7
|
class InvertibleMigrationTest < ActiveRecord::TestCase
|
5
|
-
class SilentMigration < ActiveRecord::Migration
|
8
|
+
class SilentMigration < ActiveRecord::Migration::Current
|
6
9
|
def write(text = '')
|
7
10
|
# sssshhhhh!!
|
8
11
|
end
|
@@ -76,7 +79,33 @@ module ActiveRecord
|
|
76
79
|
end
|
77
80
|
end
|
78
81
|
|
79
|
-
class
|
82
|
+
class ChangeColumnDefault1 < SilentMigration
|
83
|
+
def change
|
84
|
+
create_table("horses") do |t|
|
85
|
+
t.column :name, :string, default: "Sekitoba"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
class ChangeColumnDefault2 < SilentMigration
|
91
|
+
def change
|
92
|
+
change_column_default :horses, :name, from: "Sekitoba", to: "Diomed"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
class DisableExtension1 < SilentMigration
|
97
|
+
def change
|
98
|
+
enable_extension "hstore"
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
class DisableExtension2 < SilentMigration
|
103
|
+
def change
|
104
|
+
disable_extension "hstore"
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
class LegacyMigration < ActiveRecord::Migration::Current
|
80
109
|
def self.up
|
81
110
|
create_table("horses") do |t|
|
82
111
|
t.column :content, :text
|
@@ -122,14 +151,24 @@ module ActiveRecord
|
|
122
151
|
end
|
123
152
|
end
|
124
153
|
|
154
|
+
class RevertCustomForeignKeyTable < SilentMigration
|
155
|
+
def change
|
156
|
+
change_table(:horses) do |t|
|
157
|
+
t.references :owner, foreign_key: { to_table: :developers }
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
125
162
|
setup do
|
126
163
|
@verbose_was, ActiveRecord::Migration.verbose = ActiveRecord::Migration.verbose, false
|
127
164
|
end
|
128
165
|
|
129
166
|
teardown do
|
130
167
|
%w[horses new_horses].each do |table|
|
131
|
-
|
132
|
-
ActiveRecord::Base.connection.
|
168
|
+
ActiveSupport::Deprecation.silence do
|
169
|
+
if ActiveRecord::Base.connection.table_exists?(table)
|
170
|
+
ActiveRecord::Base.connection.drop_table(table)
|
171
|
+
end
|
133
172
|
end
|
134
173
|
end
|
135
174
|
ActiveRecord::Migration.verbose = @verbose_was
|
@@ -144,26 +183,30 @@ module ActiveRecord
|
|
144
183
|
end
|
145
184
|
|
146
185
|
def test_exception_on_removing_index_without_column_option
|
147
|
-
|
148
|
-
|
149
|
-
|
186
|
+
index_definition = ["horses", [:name, :color]]
|
187
|
+
migration1 = RemoveIndexMigration1.new
|
188
|
+
migration1.migrate(:up)
|
189
|
+
assert migration1.connection.index_exists?(*index_definition)
|
150
190
|
|
151
|
-
|
152
|
-
|
153
|
-
|
191
|
+
migration2 = RemoveIndexMigration2.new
|
192
|
+
migration2.migrate(:up)
|
193
|
+
assert_not migration2.connection.index_exists?(*index_definition)
|
194
|
+
|
195
|
+
migration2.migrate(:down)
|
196
|
+
assert migration2.connection.index_exists?(*index_definition)
|
154
197
|
end
|
155
198
|
|
156
199
|
def test_migrate_up
|
157
200
|
migration = InvertibleMigration.new
|
158
201
|
migration.migrate(:up)
|
159
|
-
assert migration.connection.table_exists?("horses"), "horses should exist"
|
202
|
+
ActiveSupport::Deprecation.silence { assert migration.connection.table_exists?("horses"), "horses should exist" }
|
160
203
|
end
|
161
204
|
|
162
205
|
def test_migrate_down
|
163
206
|
migration = InvertibleMigration.new
|
164
207
|
migration.migrate :up
|
165
208
|
migration.migrate :down
|
166
|
-
assert !migration.connection.table_exists?("horses")
|
209
|
+
ActiveSupport::Deprecation.silence { assert !migration.connection.table_exists?("horses") }
|
167
210
|
end
|
168
211
|
|
169
212
|
def test_migrate_revert
|
@@ -171,11 +214,11 @@ module ActiveRecord
|
|
171
214
|
revert = InvertibleRevertMigration.new
|
172
215
|
migration.migrate :up
|
173
216
|
revert.migrate :up
|
174
|
-
assert !migration.connection.table_exists?("horses")
|
217
|
+
ActiveSupport::Deprecation.silence { assert !migration.connection.table_exists?("horses") }
|
175
218
|
revert.migrate :down
|
176
|
-
assert migration.connection.table_exists?("horses")
|
219
|
+
ActiveSupport::Deprecation.silence { assert migration.connection.table_exists?("horses") }
|
177
220
|
migration.migrate :down
|
178
|
-
assert !migration.connection.table_exists?("horses")
|
221
|
+
ActiveSupport::Deprecation.silence { assert !migration.connection.table_exists?("horses") }
|
179
222
|
end
|
180
223
|
|
181
224
|
def test_migrate_revert_by_part
|
@@ -183,18 +226,24 @@ module ActiveRecord
|
|
183
226
|
received = []
|
184
227
|
migration = InvertibleByPartsMigration.new
|
185
228
|
migration.test = ->(dir){
|
186
|
-
|
187
|
-
|
229
|
+
ActiveSupport::Deprecation.silence do
|
230
|
+
assert migration.connection.table_exists?("horses")
|
231
|
+
assert migration.connection.table_exists?("new_horses")
|
232
|
+
end
|
188
233
|
received << dir
|
189
234
|
}
|
190
235
|
migration.migrate :up
|
191
236
|
assert_equal [:both, :up], received
|
192
|
-
|
193
|
-
|
237
|
+
ActiveSupport::Deprecation.silence do
|
238
|
+
assert !migration.connection.table_exists?("horses")
|
239
|
+
assert migration.connection.table_exists?("new_horses")
|
240
|
+
end
|
194
241
|
migration.migrate :down
|
195
242
|
assert_equal [:both, :up, :both, :down], received
|
196
|
-
|
197
|
-
|
243
|
+
ActiveSupport::Deprecation.silence do
|
244
|
+
assert migration.connection.table_exists?("horses")
|
245
|
+
assert !migration.connection.table_exists?("new_horses")
|
246
|
+
end
|
198
247
|
end
|
199
248
|
|
200
249
|
def test_migrate_revert_whole_migration
|
@@ -203,20 +252,56 @@ module ActiveRecord
|
|
203
252
|
revert = RevertWholeMigration.new(klass)
|
204
253
|
migration.migrate :up
|
205
254
|
revert.migrate :up
|
206
|
-
assert !migration.connection.table_exists?("horses")
|
255
|
+
ActiveSupport::Deprecation.silence { assert !migration.connection.table_exists?("horses") }
|
207
256
|
revert.migrate :down
|
208
|
-
assert migration.connection.table_exists?("horses")
|
257
|
+
ActiveSupport::Deprecation.silence { assert migration.connection.table_exists?("horses") }
|
209
258
|
migration.migrate :down
|
210
|
-
assert !migration.connection.table_exists?("horses")
|
259
|
+
ActiveSupport::Deprecation.silence { assert !migration.connection.table_exists?("horses") }
|
211
260
|
end
|
212
261
|
end
|
213
262
|
|
214
263
|
def test_migrate_nested_revert_whole_migration
|
215
264
|
revert = NestedRevertWholeMigration.new(InvertibleRevertMigration)
|
216
265
|
revert.migrate :down
|
217
|
-
assert revert.connection.table_exists?("horses")
|
266
|
+
ActiveSupport::Deprecation.silence { assert revert.connection.table_exists?("horses") }
|
218
267
|
revert.migrate :up
|
219
|
-
assert !revert.connection.table_exists?("horses")
|
268
|
+
ActiveSupport::Deprecation.silence { assert !revert.connection.table_exists?("horses") }
|
269
|
+
end
|
270
|
+
|
271
|
+
def test_migrate_revert_change_column_default
|
272
|
+
migration1 = ChangeColumnDefault1.new
|
273
|
+
migration1.migrate(:up)
|
274
|
+
assert_equal "Sekitoba", Horse.new.name
|
275
|
+
|
276
|
+
migration2 = ChangeColumnDefault2.new
|
277
|
+
migration2.migrate(:up)
|
278
|
+
Horse.reset_column_information
|
279
|
+
assert_equal "Diomed", Horse.new.name
|
280
|
+
|
281
|
+
migration2.migrate(:down)
|
282
|
+
Horse.reset_column_information
|
283
|
+
assert_equal "Sekitoba", Horse.new.name
|
284
|
+
end
|
285
|
+
|
286
|
+
if current_adapter?(:PostgreSQLAdapter)
|
287
|
+
def test_migrate_enable_and_disable_extension
|
288
|
+
migration1 = InvertibleMigration.new
|
289
|
+
migration2 = DisableExtension1.new
|
290
|
+
migration3 = DisableExtension2.new
|
291
|
+
|
292
|
+
migration1.migrate(:up)
|
293
|
+
migration2.migrate(:up)
|
294
|
+
assert_equal true, Horse.connection.extension_enabled?('hstore')
|
295
|
+
|
296
|
+
migration3.migrate(:up)
|
297
|
+
assert_equal false, Horse.connection.extension_enabled?('hstore')
|
298
|
+
|
299
|
+
migration3.migrate(:down)
|
300
|
+
assert_equal true, Horse.connection.extension_enabled?('hstore')
|
301
|
+
|
302
|
+
migration2.migrate(:down)
|
303
|
+
assert_equal false, Horse.connection.extension_enabled?('hstore')
|
304
|
+
end
|
220
305
|
end
|
221
306
|
|
222
307
|
def test_revert_order
|
@@ -245,24 +330,24 @@ module ActiveRecord
|
|
245
330
|
|
246
331
|
def test_legacy_up
|
247
332
|
LegacyMigration.migrate :up
|
248
|
-
assert ActiveRecord::Base.connection.table_exists?("horses"), "horses should exist"
|
333
|
+
ActiveSupport::Deprecation.silence { assert ActiveRecord::Base.connection.table_exists?("horses"), "horses should exist" }
|
249
334
|
end
|
250
335
|
|
251
336
|
def test_legacy_down
|
252
337
|
LegacyMigration.migrate :up
|
253
338
|
LegacyMigration.migrate :down
|
254
|
-
assert !ActiveRecord::Base.connection.table_exists?("horses"), "horses should not exist"
|
339
|
+
ActiveSupport::Deprecation.silence { assert !ActiveRecord::Base.connection.table_exists?("horses"), "horses should not exist" }
|
255
340
|
end
|
256
341
|
|
257
342
|
def test_up
|
258
343
|
LegacyMigration.up
|
259
|
-
assert ActiveRecord::Base.connection.table_exists?("horses"), "horses should exist"
|
344
|
+
ActiveSupport::Deprecation.silence { assert ActiveRecord::Base.connection.table_exists?("horses"), "horses should exist" }
|
260
345
|
end
|
261
346
|
|
262
347
|
def test_down
|
263
348
|
LegacyMigration.up
|
264
349
|
LegacyMigration.down
|
265
|
-
assert !ActiveRecord::Base.connection.table_exists?("horses"), "horses should not exist"
|
350
|
+
ActiveSupport::Deprecation.silence { assert !ActiveRecord::Base.connection.table_exists?("horses"), "horses should not exist" }
|
266
351
|
end
|
267
352
|
|
268
353
|
def test_migrate_down_with_table_name_prefix
|
@@ -271,13 +356,20 @@ module ActiveRecord
|
|
271
356
|
migration = InvertibleMigration.new
|
272
357
|
migration.migrate(:up)
|
273
358
|
assert_nothing_raised { migration.migrate(:down) }
|
274
|
-
assert !ActiveRecord::Base.connection.table_exists?("p_horses_s"), "p_horses_s should not exist"
|
359
|
+
ActiveSupport::Deprecation.silence { assert !ActiveRecord::Base.connection.table_exists?("p_horses_s"), "p_horses_s should not exist" }
|
275
360
|
ensure
|
276
361
|
ActiveRecord::Base.table_name_prefix = ActiveRecord::Base.table_name_suffix = ''
|
277
362
|
end
|
278
363
|
|
364
|
+
def test_migrations_can_handle_foreign_keys_to_specific_tables
|
365
|
+
migration = RevertCustomForeignKeyTable.new
|
366
|
+
InvertibleMigration.migrate(:up)
|
367
|
+
migration.migrate(:up)
|
368
|
+
migration.migrate(:down)
|
369
|
+
end
|
370
|
+
|
279
371
|
# MySQL 5.7 and Oracle do not allow to create duplicate indexes on the same columns
|
280
|
-
unless current_adapter?(:
|
372
|
+
unless current_adapter?(:Mysql2Adapter, :OracleAdapter)
|
281
373
|
def test_migrate_revert_add_index_with_name
|
282
374
|
RevertNamedIndexMigration1.new.migrate(:up)
|
283
375
|
RevertNamedIndexMigration2.new.migrate(:up)
|
@@ -7,7 +7,6 @@ require 'models/tag'
|
|
7
7
|
require 'models/comment'
|
8
8
|
|
9
9
|
module JsonSerializationHelpers
|
10
|
-
|
11
10
|
private
|
12
11
|
|
13
12
|
def set_include_root_in_json(value)
|
@@ -21,7 +20,6 @@ end
|
|
21
20
|
|
22
21
|
class JsonSerializationTest < ActiveRecord::TestCase
|
23
22
|
include JsonSerializationHelpers
|
24
|
-
fixtures :authors, :author_addresses
|
25
23
|
|
26
24
|
class NamespacedContact < Contact
|
27
25
|
column :name, :string
|
@@ -103,6 +101,17 @@ class JsonSerializationTest < ActiveRecord::TestCase
|
|
103
101
|
assert_match %r{"favorite_quote":"Constraints are liberating"}, methods_json
|
104
102
|
end
|
105
103
|
|
104
|
+
def test_uses_serializable_hash_with_frozen_hash
|
105
|
+
def @contact.serializable_hash(options = nil)
|
106
|
+
super({ only: %w(name) }.freeze)
|
107
|
+
end
|
108
|
+
|
109
|
+
json = @contact.to_json
|
110
|
+
assert_match %r{"name":"Konata Izumi"}, json
|
111
|
+
assert_no_match %r{awesome}, json
|
112
|
+
assert_no_match %r{age}, json
|
113
|
+
end
|
114
|
+
|
106
115
|
def test_uses_serializable_hash_with_only_option
|
107
116
|
def @contact.serializable_hash(options=nil)
|
108
117
|
super(only: %w(name))
|
data/test/cases/locking_test.rb
CHANGED
@@ -29,7 +29,7 @@ end
|
|
29
29
|
class OptimisticLockingTest < ActiveRecord::TestCase
|
30
30
|
fixtures :people, :legacy_things, :references, :string_key_objects, :peoples_treasures
|
31
31
|
|
32
|
-
def
|
32
|
+
def test_quote_value_passed_lock_col
|
33
33
|
p1 = Person.find(1)
|
34
34
|
assert_equal 0, p1.lock_version
|
35
35
|
|
@@ -169,6 +169,12 @@ class OptimisticLockingTest < ActiveRecord::TestCase
|
|
169
169
|
assert_equal 1, p1.lock_version
|
170
170
|
end
|
171
171
|
|
172
|
+
def test_lock_new_when_explicitly_passing_nil
|
173
|
+
p1 = Person.new(:first_name => 'anika', lock_version: nil)
|
174
|
+
p1.save!
|
175
|
+
assert_equal 0, p1.lock_version
|
176
|
+
end
|
177
|
+
|
172
178
|
def test_touch_existing_lock
|
173
179
|
p1 = Person.find(1)
|
174
180
|
assert_equal 0, p1.lock_version
|
@@ -177,6 +183,16 @@ class OptimisticLockingTest < ActiveRecord::TestCase
|
|
177
183
|
assert_equal 1, p1.lock_version
|
178
184
|
end
|
179
185
|
|
186
|
+
def test_touch_stale_object
|
187
|
+
person = Person.create!(first_name: 'Mehmet Emin')
|
188
|
+
stale_person = Person.find(person.id)
|
189
|
+
person.update_attribute(:gender, 'M')
|
190
|
+
|
191
|
+
assert_raises(ActiveRecord::StaleObjectError) do
|
192
|
+
stale_person.touch
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
180
196
|
def test_lock_column_name_existing
|
181
197
|
t1 = LegacyThing.find(1)
|
182
198
|
t2 = LegacyThing.find(1)
|
@@ -260,7 +276,7 @@ class OptimisticLockingTest < ActiveRecord::TestCase
|
|
260
276
|
car.wheels << Wheel.create!
|
261
277
|
end
|
262
278
|
assert_difference 'car.wheels.count', -1 do
|
263
|
-
car.destroy
|
279
|
+
car.reload.destroy
|
264
280
|
end
|
265
281
|
assert car.destroyed?
|
266
282
|
end
|
@@ -285,10 +301,10 @@ end
|
|
285
301
|
class OptimisticLockingWithSchemaChangeTest < ActiveRecord::TestCase
|
286
302
|
fixtures :people, :legacy_things, :references
|
287
303
|
|
288
|
-
# need to disable transactional
|
304
|
+
# need to disable transactional tests, because otherwise the sqlite3
|
289
305
|
# adapter (at least) chokes when we try and change the schema in the middle
|
290
306
|
# of a test (see test_increment_counter_*).
|
291
|
-
self.
|
307
|
+
self.use_transactional_tests = false
|
292
308
|
|
293
309
|
{ :lock_version => Person, :custom_lock_version => LegacyThing }.each do |name, model|
|
294
310
|
define_method("test_increment_counter_updates_#{name}") do
|
@@ -365,7 +381,7 @@ end
|
|
365
381
|
# (See exec vs. async_exec in the PostgreSQL adapter.)
|
366
382
|
unless in_memory_db?
|
367
383
|
class PessimisticLockingTest < ActiveRecord::TestCase
|
368
|
-
self.
|
384
|
+
self.use_transactional_tests = false
|
369
385
|
fixtures :people, :readers
|
370
386
|
|
371
387
|
def setup
|
@@ -431,7 +447,7 @@ unless in_memory_db?
|
|
431
447
|
def test_lock_sending_custom_lock_statement
|
432
448
|
Person.transaction do
|
433
449
|
person = Person.find(1)
|
434
|
-
assert_sql(/LIMIT
|
450
|
+
assert_sql(/LIMIT \$?\d FOR SHARE NOWAIT/) do
|
435
451
|
person.lock!('FOR SHARE NOWAIT')
|
436
452
|
end
|
437
453
|
end
|