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,15 @@
|
|
1
|
+
require "cases/helper"
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
module Coders
|
5
|
+
class JSONTest < ActiveRecord::TestCase
|
6
|
+
def test_returns_nil_if_empty_string_given
|
7
|
+
assert_nil JSON.load("")
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_returns_nil_if_nil_given
|
11
|
+
assert_nil JSON.load(nil)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
require "cases/helper"
|
2
|
+
require "models/computer"
|
3
|
+
require "models/developer"
|
4
|
+
require "models/project"
|
5
|
+
require "models/topic"
|
6
|
+
require "models/post"
|
7
|
+
require "models/comment"
|
8
|
+
|
9
|
+
module ActiveRecord
|
10
|
+
class CollectionCacheKeyTest < ActiveRecord::TestCase
|
11
|
+
fixtures :developers, :projects, :developers_projects, :topics, :comments, :posts
|
12
|
+
|
13
|
+
test "collection_cache_key on model" do
|
14
|
+
assert_match(/\Adevelopers\/query-(\h+)-(\d+)-(\d+)\Z/, Developer.collection_cache_key)
|
15
|
+
end
|
16
|
+
|
17
|
+
test "cache_key for relation" do
|
18
|
+
developers = Developer.where(salary: 100000).order(updated_at: :desc)
|
19
|
+
last_developer_timestamp = developers.first.updated_at
|
20
|
+
|
21
|
+
assert_match(/\Adevelopers\/query-(\h+)-(\d+)-(\d+)\Z/, developers.cache_key)
|
22
|
+
|
23
|
+
/\Adevelopers\/query-(\h+)-(\d+)-(\d+)\Z/ =~ developers.cache_key
|
24
|
+
|
25
|
+
assert_equal Digest::MD5.hexdigest(developers.to_sql), $1
|
26
|
+
assert_equal developers.count.to_s, $2
|
27
|
+
assert_equal last_developer_timestamp.to_s(ActiveRecord::Base.cache_timestamp_format), $3
|
28
|
+
end
|
29
|
+
|
30
|
+
test "cache_key for relation with limit" do
|
31
|
+
developers = Developer.where(salary: 100000).order(updated_at: :desc).limit(5)
|
32
|
+
last_developer_timestamp = developers.first.updated_at
|
33
|
+
|
34
|
+
assert_match(/\Adevelopers\/query-(\h+)-(\d+)-(\d+)\Z/, developers.cache_key)
|
35
|
+
|
36
|
+
/\Adevelopers\/query-(\h+)-(\d+)-(\d+)\Z/ =~ developers.cache_key
|
37
|
+
|
38
|
+
assert_equal Digest::MD5.hexdigest(developers.to_sql), $1
|
39
|
+
assert_equal developers.count.to_s, $2
|
40
|
+
assert_equal last_developer_timestamp.to_s(ActiveRecord::Base.cache_timestamp_format), $3
|
41
|
+
end
|
42
|
+
|
43
|
+
test "cache_key for loaded relation" do
|
44
|
+
developers = Developer.where(salary: 100000).order(updated_at: :desc).limit(5).load
|
45
|
+
last_developer_timestamp = developers.first.updated_at
|
46
|
+
|
47
|
+
assert_match(/\Adevelopers\/query-(\h+)-(\d+)-(\d+)\Z/, developers.cache_key)
|
48
|
+
|
49
|
+
/\Adevelopers\/query-(\h+)-(\d+)-(\d+)\Z/ =~ developers.cache_key
|
50
|
+
|
51
|
+
assert_equal Digest::MD5.hexdigest(developers.to_sql), $1
|
52
|
+
assert_equal developers.count.to_s, $2
|
53
|
+
assert_equal last_developer_timestamp.to_s(ActiveRecord::Base.cache_timestamp_format), $3
|
54
|
+
end
|
55
|
+
|
56
|
+
test "it triggers at most one query" do
|
57
|
+
developers = Developer.where(name: "David")
|
58
|
+
|
59
|
+
assert_queries(1) { developers.cache_key }
|
60
|
+
assert_queries(0) { developers.cache_key }
|
61
|
+
end
|
62
|
+
|
63
|
+
test "it doesn't trigger any query if the relation is already loaded" do
|
64
|
+
developers = Developer.where(name: "David").load
|
65
|
+
assert_queries(0) { developers.cache_key }
|
66
|
+
end
|
67
|
+
|
68
|
+
test "relation cache_key changes when the sql query changes" do
|
69
|
+
developers = Developer.where(name: "David")
|
70
|
+
other_relation = Developer.where(name: "David").where("1 = 1")
|
71
|
+
|
72
|
+
assert_not_equal developers.cache_key, other_relation.cache_key
|
73
|
+
end
|
74
|
+
|
75
|
+
test "cache_key for empty relation" do
|
76
|
+
developers = Developer.where(name: "Non Existent Developer")
|
77
|
+
assert_match(/\Adevelopers\/query-(\h+)-0\Z/, developers.cache_key)
|
78
|
+
end
|
79
|
+
|
80
|
+
test "cache_key with custom timestamp column" do
|
81
|
+
topics = Topic.where("title like ?", "%Topic%")
|
82
|
+
last_topic_timestamp = topics(:fifth).written_on.utc.to_s(:usec)
|
83
|
+
assert_match(last_topic_timestamp, topics.cache_key(:written_on))
|
84
|
+
end
|
85
|
+
|
86
|
+
test "cache_key with unknown timestamp column" do
|
87
|
+
topics = Topic.where("title like ?", "%Topic%")
|
88
|
+
assert_raises(ActiveRecord::StatementInvalid) { topics.cache_key(:published_at) }
|
89
|
+
end
|
90
|
+
|
91
|
+
test "collection proxy provides a cache_key" do
|
92
|
+
developers = projects(:active_record).developers
|
93
|
+
assert_match(/\Adevelopers\/query-(\h+)-(\d+)-(\d+)\Z/, developers.cache_key)
|
94
|
+
end
|
95
|
+
|
96
|
+
test "cache_key for loaded collection with zero size" do
|
97
|
+
Comment.delete_all
|
98
|
+
posts = Post.includes(:comments)
|
99
|
+
empty_loaded_collection = posts.first.comments
|
100
|
+
|
101
|
+
assert_match(/\Acomments\/query-(\h+)-0\Z/, empty_loaded_collection.cache_key)
|
102
|
+
end
|
103
|
+
|
104
|
+
test "cache_key for queries with offset which return 0 rows" do
|
105
|
+
developers = Developer.offset(20)
|
106
|
+
assert_match(/\Adevelopers\/query-(\h+)-0\Z/, developers.cache_key)
|
107
|
+
end
|
108
|
+
|
109
|
+
test "cache_key with a relation having selected columns" do
|
110
|
+
developers = Developer.select(:salary)
|
111
|
+
|
112
|
+
assert_match(/\Adevelopers\/query-(\h+)-(\d+)-(\d+)\Z/, developers.cache_key)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
@@ -14,7 +14,7 @@ module ActiveRecord
|
|
14
14
|
# Avoid column definitions in create table statements like:
|
15
15
|
# `title` varchar(255) DEFAULT NULL
|
16
16
|
def test_should_not_include_default_clause_when_default_is_null
|
17
|
-
column = Column.new("title", nil,
|
17
|
+
column = Column.new("title", nil, SqlTypeMetadata.new(limit: 20))
|
18
18
|
column_def = ColumnDefinition.new(
|
19
19
|
column.name, "string",
|
20
20
|
column.limit, column.precision, column.scale, column.default, column.null)
|
@@ -22,7 +22,7 @@ module ActiveRecord
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def test_should_include_default_clause_when_default_is_present
|
25
|
-
column = Column.new("title", "Hello",
|
25
|
+
column = Column.new("title", "Hello", SqlTypeMetadata.new(limit: 20))
|
26
26
|
column_def = ColumnDefinition.new(
|
27
27
|
column.name, "string",
|
28
28
|
column.limit, column.precision, column.scale, column.default, column.null)
|
@@ -30,94 +30,63 @@ module ActiveRecord
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def test_should_specify_not_null_if_null_option_is_false
|
33
|
-
|
33
|
+
type_metadata = SqlTypeMetadata.new(limit: 20)
|
34
|
+
column = Column.new("title", "Hello", type_metadata, false)
|
34
35
|
column_def = ColumnDefinition.new(
|
35
36
|
column.name, "string",
|
36
37
|
column.limit, column.precision, column.scale, column.default, column.null)
|
37
38
|
assert_equal %Q{title varchar(20) DEFAULT 'Hello' NOT NULL}, @viz.accept(column_def)
|
38
39
|
end
|
39
40
|
|
40
|
-
if current_adapter?(:
|
41
|
+
if current_adapter?(:Mysql2Adapter)
|
41
42
|
def test_should_set_default_for_mysql_binary_data_types
|
42
|
-
|
43
|
+
type = SqlTypeMetadata.new(type: :binary, sql_type: "binary(1)")
|
44
|
+
binary_column = MySQL::Column.new("title", "a", type)
|
43
45
|
assert_equal "a", binary_column.default
|
44
46
|
|
45
|
-
|
47
|
+
type = SqlTypeMetadata.new(type: :binary, sql_type: "varbinary")
|
48
|
+
varbinary_column = MySQL::Column.new("title", "a", type)
|
46
49
|
assert_equal "a", varbinary_column.default
|
47
50
|
end
|
48
51
|
|
49
|
-
def
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
assert_raise ArgumentError do
|
55
|
-
MysqlAdapter::Column.new("title", "Hello", Type::Text.new)
|
56
|
-
end
|
52
|
+
def test_should_be_empty_string_default_for_mysql_binary_data_types
|
53
|
+
type = SqlTypeMetadata.new(type: :binary, sql_type: "binary(1)")
|
54
|
+
binary_column = MySQL::Column.new("title", "", type, false)
|
55
|
+
assert_equal "", binary_column.default
|
57
56
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
not_null_text_column = MysqlAdapter::Column.new("title", nil, Type::Text.new, "text", false)
|
62
|
-
assert_equal "", not_null_text_column.default
|
63
|
-
end
|
64
|
-
|
65
|
-
def test_has_default_should_return_false_for_blob_and_text_data_types
|
66
|
-
blob_column = MysqlAdapter::Column.new("title", nil, Type::Binary.new, "blob")
|
67
|
-
assert !blob_column.has_default?
|
68
|
-
|
69
|
-
text_column = MysqlAdapter::Column.new("title", nil, Type::Text.new)
|
70
|
-
assert !text_column.has_default?
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
if current_adapter?(:Mysql2Adapter)
|
75
|
-
def test_should_set_default_for_mysql_binary_data_types
|
76
|
-
binary_column = Mysql2Adapter::Column.new("title", "a", Type::Binary.new, "binary(1)")
|
77
|
-
assert_equal "a", binary_column.default
|
78
|
-
|
79
|
-
varbinary_column = Mysql2Adapter::Column.new("title", "a", Type::Binary.new, "varbinary(1)")
|
80
|
-
assert_equal "a", varbinary_column.default
|
57
|
+
type = SqlTypeMetadata.new(type: :binary, sql_type: "varbinary")
|
58
|
+
varbinary_column = MySQL::Column.new("title", "", type, false)
|
59
|
+
assert_equal "", varbinary_column.default
|
81
60
|
end
|
82
61
|
|
83
62
|
def test_should_not_set_default_for_blob_and_text_data_types
|
84
63
|
assert_raise ArgumentError do
|
85
|
-
|
64
|
+
MySQL::Column.new("title", "a", SqlTypeMetadata.new(sql_type: "blob"))
|
86
65
|
end
|
87
66
|
|
67
|
+
text_type = MySQL::TypeMetadata.new(
|
68
|
+
SqlTypeMetadata.new(type: :text))
|
88
69
|
assert_raise ArgumentError do
|
89
|
-
|
70
|
+
MySQL::Column.new("title", "Hello", text_type)
|
90
71
|
end
|
91
72
|
|
92
|
-
text_column =
|
73
|
+
text_column = MySQL::Column.new("title", nil, text_type)
|
93
74
|
assert_equal nil, text_column.default
|
94
75
|
|
95
|
-
not_null_text_column =
|
76
|
+
not_null_text_column = MySQL::Column.new("title", nil, text_type, false)
|
96
77
|
assert_equal "", not_null_text_column.default
|
97
78
|
end
|
98
79
|
|
99
80
|
def test_has_default_should_return_false_for_blob_and_text_data_types
|
100
|
-
|
81
|
+
binary_type = SqlTypeMetadata.new(sql_type: "blob")
|
82
|
+
blob_column = MySQL::Column.new("title", nil, binary_type)
|
101
83
|
assert !blob_column.has_default?
|
102
84
|
|
103
|
-
|
85
|
+
text_type = SqlTypeMetadata.new(type: :text)
|
86
|
+
text_column = MySQL::Column.new("title", nil, text_type)
|
104
87
|
assert !text_column.has_default?
|
105
88
|
end
|
106
89
|
end
|
107
|
-
|
108
|
-
if current_adapter?(:PostgreSQLAdapter)
|
109
|
-
def test_bigint_column_should_map_to_integer
|
110
|
-
oid = PostgreSQLAdapter::OID::Integer.new
|
111
|
-
bigint_column = PostgreSQLColumn.new('number', nil, oid, "bigint")
|
112
|
-
assert_equal :integer, bigint_column.type
|
113
|
-
end
|
114
|
-
|
115
|
-
def test_smallint_column_should_map_to_integer
|
116
|
-
oid = PostgreSQLAdapter::OID::Integer.new
|
117
|
-
smallint_column = PostgreSQLColumn.new('number', nil, oid, "smallint")
|
118
|
-
assert_equal :integer, smallint_column.type
|
119
|
-
end
|
120
|
-
end
|
121
90
|
end
|
122
91
|
end
|
123
92
|
end
|
@@ -0,0 +1,145 @@
|
|
1
|
+
require 'cases/helper'
|
2
|
+
require 'support/schema_dumping_helper'
|
3
|
+
|
4
|
+
if ActiveRecord::Base.connection.supports_comments?
|
5
|
+
|
6
|
+
class CommentTest < ActiveRecord::TestCase
|
7
|
+
include SchemaDumpingHelper
|
8
|
+
|
9
|
+
class Commented < ActiveRecord::Base
|
10
|
+
self.table_name = 'commenteds'
|
11
|
+
end
|
12
|
+
|
13
|
+
class BlankComment < ActiveRecord::Base
|
14
|
+
end
|
15
|
+
|
16
|
+
setup do
|
17
|
+
@connection = ActiveRecord::Base.connection
|
18
|
+
|
19
|
+
@connection.create_table('commenteds', comment: 'A table with comment', force: true) do |t|
|
20
|
+
t.string 'name', comment: 'Comment should help clarify the column purpose'
|
21
|
+
t.boolean 'obvious', comment: 'Question is: should you comment obviously named objects?'
|
22
|
+
t.string 'content'
|
23
|
+
t.index 'name', comment: %Q["Very important" index that powers all the performance.\nAnd it's fun!]
|
24
|
+
end
|
25
|
+
|
26
|
+
@connection.create_table('blank_comments', comment: ' ', force: true) do |t|
|
27
|
+
t.string :space_comment, comment: ' '
|
28
|
+
t.string :empty_comment, comment: ''
|
29
|
+
t.string :nil_comment, comment: nil
|
30
|
+
t.string :absent_comment
|
31
|
+
t.index :space_comment, comment: ' '
|
32
|
+
t.index :empty_comment, comment: ''
|
33
|
+
t.index :nil_comment, comment: nil
|
34
|
+
t.index :absent_comment
|
35
|
+
end
|
36
|
+
|
37
|
+
Commented.reset_column_information
|
38
|
+
BlankComment.reset_column_information
|
39
|
+
end
|
40
|
+
|
41
|
+
teardown do
|
42
|
+
@connection.drop_table 'commenteds'
|
43
|
+
#, if_exists: true
|
44
|
+
@connection.drop_table 'blank_comments'
|
45
|
+
#, if_exists: true
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_column_created_in_block
|
49
|
+
column = Commented.columns_hash['name']
|
50
|
+
assert_equal :string, column.type
|
51
|
+
assert_equal 'Comment should help clarify the column purpose', column.comment
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_blank_columns_created_in_block
|
55
|
+
%w[ space_comment empty_comment nil_comment absent_comment ].each do |field|
|
56
|
+
column = BlankComment.columns_hash[field]
|
57
|
+
assert_equal :string, column.type
|
58
|
+
assert_nil column.comment
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_blank_indexes_created_in_block
|
63
|
+
@connection.indexes('blank_comments').each do |index|
|
64
|
+
assert_nil index.comment
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_add_column_with_comment_later
|
69
|
+
@connection.add_column :commenteds, :rating, :integer, comment: 'I am running out of imagination'
|
70
|
+
Commented.reset_column_information
|
71
|
+
column = Commented.columns_hash['rating']
|
72
|
+
|
73
|
+
assert_equal :integer, column.type
|
74
|
+
assert_equal 'I am running out of imagination', column.comment
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_add_index_with_comment_later
|
78
|
+
unless current_adapter?(:OracleAdapter)
|
79
|
+
@connection.add_index :commenteds, :obvious, name: 'idx_obvious', comment: 'We need to see obvious comments'
|
80
|
+
index = @connection.indexes('commenteds').find { |idef| idef.name == 'idx_obvious' }
|
81
|
+
assert_equal 'We need to see obvious comments', index.comment
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_add_comment_to_column
|
86
|
+
@connection.change_column :commenteds, :content, :string, comment: 'Whoa, content describes itself!'
|
87
|
+
|
88
|
+
Commented.reset_column_information
|
89
|
+
column = Commented.columns_hash['content']
|
90
|
+
|
91
|
+
assert_equal :string, column.type
|
92
|
+
assert_equal 'Whoa, content describes itself!', column.comment
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_remove_comment_from_column
|
96
|
+
@connection.change_column :commenteds, :obvious, :string, comment: nil
|
97
|
+
|
98
|
+
Commented.reset_column_information
|
99
|
+
column = Commented.columns_hash['obvious']
|
100
|
+
|
101
|
+
assert_equal :string, column.type
|
102
|
+
assert_nil column.comment
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_schema_dump_with_comments
|
106
|
+
# Do all the stuff from other tests
|
107
|
+
@connection.add_column :commenteds, :rating, :integer, comment: 'I am running out of imagination'
|
108
|
+
@connection.change_column :commenteds, :content, :string, comment: 'Whoa, content describes itself!'
|
109
|
+
@connection.change_column :commenteds, :obvious, :string, comment: nil
|
110
|
+
@connection.add_index :commenteds, :obvious, name: 'idx_obvious', comment: 'We need to see obvious comments'
|
111
|
+
|
112
|
+
# And check that these changes are reflected in dump
|
113
|
+
output = dump_table_schema 'commenteds'
|
114
|
+
assert_match %r[create_table "commenteds",.+\s+comment: "A table with comment"], output
|
115
|
+
assert_match %r[t\.string\s+"name",\s+comment: "Comment should help clarify the column purpose"], output
|
116
|
+
assert_match %r[t\.string\s+"obvious"\n], output
|
117
|
+
assert_match %r[t\.string\s+"content",\s+comment: "Whoa, content describes itself!"], output
|
118
|
+
assert_match %r[t\.integer\s+"rating",\s+comment: "I am running out of imagination"], output
|
119
|
+
unless current_adapter?(:OracleAdapter)
|
120
|
+
assert_match %r[t\.index\s+.+\s+comment: "\\\"Very important\\\" index that powers all the performance.\\nAnd it's fun!"], output
|
121
|
+
assert_match %r[t\.index\s+.+\s+name: "idx_obvious",.+\s+comment: "We need to see obvious comments"], output
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_schema_dump_omits_blank_comments
|
126
|
+
output = dump_table_schema 'blank_comments'
|
127
|
+
|
128
|
+
assert_match %r[create_table "blank_comments"], output
|
129
|
+
assert_no_match %r[create_table "blank_comments",.+comment:], output
|
130
|
+
|
131
|
+
assert_match %r[t\.string\s+"space_comment"\n], output
|
132
|
+
assert_no_match %r[t\.string\s+"space_comment", comment:\n], output
|
133
|
+
|
134
|
+
assert_match %r[t\.string\s+"empty_comment"\n], output
|
135
|
+
assert_no_match %r[t\.string\s+"empty_comment", comment:\n], output
|
136
|
+
|
137
|
+
assert_match %r[t\.string\s+"nil_comment"\n], output
|
138
|
+
assert_no_match %r[t\.string\s+"nil_comment", comment:\n], output
|
139
|
+
|
140
|
+
assert_match %r[t\.string\s+"absent_comment"\n], output
|
141
|
+
assert_no_match %r[t\.string\s+"absent_comment", comment:\n], output
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
end
|
@@ -6,7 +6,7 @@ module ActiveRecord
|
|
6
6
|
class Pool < ConnectionPool
|
7
7
|
def insert_connection_for_test!(c)
|
8
8
|
synchronize do
|
9
|
-
|
9
|
+
adopt_connection(c)
|
10
10
|
@available.add c
|
11
11
|
end
|
12
12
|
end
|
@@ -24,7 +24,9 @@ module ActiveRecord
|
|
24
24
|
|
25
25
|
def test_lease_twice
|
26
26
|
assert @adapter.lease, 'should lease adapter'
|
27
|
-
|
27
|
+
assert_raises(ActiveRecordError) do
|
28
|
+
@adapter.lease
|
29
|
+
end
|
28
30
|
end
|
29
31
|
|
30
32
|
def test_expire_mutates_in_use
|
@@ -35,7 +37,7 @@ module ActiveRecord
|
|
35
37
|
end
|
36
38
|
|
37
39
|
def test_close
|
38
|
-
pool = Pool.new(ConnectionSpecification.new({}, nil))
|
40
|
+
pool = Pool.new(ConnectionSpecification.new("primary", {}, nil))
|
39
41
|
pool.insert_connection_for_test! @adapter
|
40
42
|
@adapter.pool = pool
|
41
43
|
|
@@ -4,48 +4,155 @@ module ActiveRecord
|
|
4
4
|
module ConnectionAdapters
|
5
5
|
class ConnectionHandlerTest < ActiveRecord::TestCase
|
6
6
|
def setup
|
7
|
-
@klass = Class.new(Base) { def self.name; 'klass'; end }
|
8
|
-
@subklass = Class.new(@klass) { def self.name; 'subklass'; end }
|
9
|
-
|
10
7
|
@handler = ConnectionHandler.new
|
11
|
-
|
8
|
+
resolver = ConnectionAdapters::ConnectionSpecification::Resolver.new Base.configurations
|
9
|
+
@spec_name = "primary"
|
10
|
+
@pool = @handler.establish_connection(resolver.spec(:arunit, @spec_name))
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_establish_connection_uses_spec_name
|
14
|
+
config = {"readonly" => {"adapter" => 'sqlite3'}}
|
15
|
+
resolver = ConnectionAdapters::ConnectionSpecification::Resolver.new(config)
|
16
|
+
spec = resolver.spec(:readonly)
|
17
|
+
@handler.establish_connection(spec)
|
18
|
+
|
19
|
+
assert_not_nil @handler.retrieve_connection_pool('readonly')
|
20
|
+
ensure
|
21
|
+
@handler.remove_connection('readonly')
|
12
22
|
end
|
13
23
|
|
14
24
|
def test_retrieve_connection
|
15
|
-
assert @handler.retrieve_connection(@
|
25
|
+
assert @handler.retrieve_connection(@spec_name)
|
16
26
|
end
|
17
27
|
|
18
28
|
def test_active_connections?
|
19
29
|
assert !@handler.active_connections?
|
20
|
-
assert @handler.retrieve_connection(@
|
30
|
+
assert @handler.retrieve_connection(@spec_name)
|
21
31
|
assert @handler.active_connections?
|
22
32
|
@handler.clear_active_connections!
|
23
33
|
assert !@handler.active_connections?
|
24
34
|
end
|
25
35
|
|
26
|
-
def
|
27
|
-
|
36
|
+
def test_retrieve_connection_pool
|
37
|
+
assert_not_nil @handler.retrieve_connection_pool(@spec_name)
|
28
38
|
end
|
29
39
|
|
30
|
-
def
|
31
|
-
|
40
|
+
def test_retrieve_connection_pool_with_invalid_id
|
41
|
+
assert_nil @handler.retrieve_connection_pool("foo")
|
32
42
|
end
|
33
43
|
|
34
|
-
def
|
35
|
-
|
44
|
+
def test_connection_pools
|
45
|
+
assert_equal([@pool], @handler.connection_pools)
|
36
46
|
end
|
37
47
|
|
38
|
-
|
39
|
-
|
40
|
-
|
48
|
+
if Process.respond_to?(:fork)
|
49
|
+
def test_connection_pool_per_pid
|
50
|
+
object_id = ActiveRecord::Base.connection.object_id
|
41
51
|
|
42
|
-
|
43
|
-
|
44
|
-
|
52
|
+
rd, wr = IO.pipe
|
53
|
+
rd.binmode
|
54
|
+
wr.binmode
|
45
55
|
|
46
|
-
|
47
|
-
|
48
|
-
|
56
|
+
pid = fork {
|
57
|
+
rd.close
|
58
|
+
wr.write Marshal.dump ActiveRecord::Base.connection.object_id
|
59
|
+
wr.close
|
60
|
+
exit!
|
61
|
+
}
|
62
|
+
|
63
|
+
wr.close
|
64
|
+
|
65
|
+
Process.waitpid pid
|
66
|
+
assert_not_equal object_id, Marshal.load(rd.read)
|
67
|
+
rd.close
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_retrieve_connection_pool_copies_schema_cache_from_ancestor_pool
|
71
|
+
@pool.schema_cache = @pool.connection.schema_cache
|
72
|
+
@pool.schema_cache.add('posts')
|
73
|
+
|
74
|
+
rd, wr = IO.pipe
|
75
|
+
rd.binmode
|
76
|
+
wr.binmode
|
77
|
+
|
78
|
+
pid = fork {
|
79
|
+
rd.close
|
80
|
+
pool = @handler.retrieve_connection_pool(@spec_name)
|
81
|
+
wr.write Marshal.dump pool.schema_cache.size
|
82
|
+
wr.close
|
83
|
+
exit!
|
84
|
+
}
|
85
|
+
|
86
|
+
wr.close
|
87
|
+
|
88
|
+
Process.waitpid pid
|
89
|
+
assert_equal @pool.schema_cache.size, Marshal.load(rd.read)
|
90
|
+
rd.close
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_pool_from_any_process_for_uses_most_recent_spec
|
94
|
+
skip unless current_adapter?(:SQLite3Adapter)
|
95
|
+
|
96
|
+
file = Tempfile.new "lol.sqlite3"
|
97
|
+
|
98
|
+
rd, wr = IO.pipe
|
99
|
+
rd.binmode
|
100
|
+
wr.binmode
|
101
|
+
|
102
|
+
pid = fork do
|
103
|
+
ActiveRecord::Base.configurations["arunit"]["database"] = file.path
|
104
|
+
ActiveRecord::Base.establish_connection(:arunit)
|
105
|
+
|
106
|
+
pid2 = fork do
|
107
|
+
wr.write ActiveRecord::Base.connection_config[:database]
|
108
|
+
wr.close
|
109
|
+
end
|
110
|
+
|
111
|
+
Process.waitpid pid2
|
112
|
+
end
|
113
|
+
|
114
|
+
Process.waitpid pid
|
115
|
+
|
116
|
+
wr.close
|
117
|
+
|
118
|
+
assert_equal file.path, rd.read
|
119
|
+
|
120
|
+
rd.close
|
121
|
+
ensure
|
122
|
+
if file
|
123
|
+
file.close
|
124
|
+
file.unlink
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_a_class_using_custom_pool_and_switching_back_to_primary
|
129
|
+
klass2 = Class.new(Base) { def self.name; 'klass2'; end }
|
130
|
+
|
131
|
+
assert_equal klass2.connection.object_id, ActiveRecord::Base.connection.object_id
|
132
|
+
|
133
|
+
pool = klass2.establish_connection(ActiveRecord::Base.connection_pool.spec.config)
|
134
|
+
assert_equal klass2.connection.object_id, pool.connection.object_id
|
135
|
+
refute_equal klass2.connection.object_id, ActiveRecord::Base.connection.object_id
|
136
|
+
|
137
|
+
klass2.remove_connection
|
138
|
+
|
139
|
+
assert_equal klass2.connection.object_id, ActiveRecord::Base.connection.object_id
|
140
|
+
end
|
141
|
+
|
142
|
+
def test_connection_specification_name_should_fallback_to_parent
|
143
|
+
klassA = Class.new(Base)
|
144
|
+
klassB = Class.new(klassA)
|
145
|
+
|
146
|
+
assert_equal klassB.connection_specification_name, klassA.connection_specification_name
|
147
|
+
klassA.connection_specification_name = "readonly"
|
148
|
+
assert_equal "readonly", klassB.connection_specification_name
|
149
|
+
end
|
150
|
+
|
151
|
+
def test_remove_connection_should_not_remove_parent
|
152
|
+
klass2 = Class.new(Base) { def self.name; 'klass2'; end }
|
153
|
+
klass2.remove_connection
|
154
|
+
refute_nil ActiveRecord::Base.connection.object_id
|
155
|
+
assert_equal klass2.connection.object_id, ActiveRecord::Base.connection.object_id
|
49
156
|
end
|
50
157
|
end
|
51
158
|
end
|