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,24 @@
|
|
1
|
+
require "cases/helper"
|
2
|
+
require 'models/owner'
|
3
|
+
|
4
|
+
module ActiveRecord
|
5
|
+
module ConnectionAdapters
|
6
|
+
class SQLite3CreateFolder < ActiveRecord::SQLite3TestCase
|
7
|
+
def test_sqlite_creates_directory
|
8
|
+
Dir.mktmpdir do |dir|
|
9
|
+
begin
|
10
|
+
dir = Pathname.new(dir)
|
11
|
+
@conn = Base.sqlite3_connection :database => dir.join("db/foo.sqlite3"),
|
12
|
+
:adapter => 'sqlite3',
|
13
|
+
:timeout => 100
|
14
|
+
|
15
|
+
assert Dir.exist? dir.join('db')
|
16
|
+
assert File.exist? dir.join('db/foo.sqlite3')
|
17
|
+
ensure
|
18
|
+
@conn.disconnect! if @conn
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'cases/helper'
|
2
|
+
|
3
|
+
class SQLite3StatementPoolTest < ActiveRecord::SQLite3TestCase
|
4
|
+
if Process.respond_to?(:fork)
|
5
|
+
def test_cache_is_per_pid
|
6
|
+
|
7
|
+
cache = ActiveRecord::ConnectionAdapters::SQLite3Adapter::StatementPool.new(10)
|
8
|
+
cache['foo'] = 'bar'
|
9
|
+
assert_equal 'bar', cache['foo']
|
10
|
+
|
11
|
+
pid = fork {
|
12
|
+
lookup = cache['foo'];
|
13
|
+
exit!(!lookup)
|
14
|
+
}
|
15
|
+
|
16
|
+
Process.waitpid pid
|
17
|
+
assert $?.success?, 'process should exit successfully'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -25,7 +25,7 @@ class AggregationsTest < ActiveRecord::TestCase
|
|
25
25
|
|
26
26
|
def test_immutable_value_objects
|
27
27
|
customers(:david).balance = Money.new(100)
|
28
|
-
assert_raise(
|
28
|
+
assert_raise(frozen_error_class) { customers(:david).balance.instance_eval { @amount = 20 } }
|
29
29
|
end
|
30
30
|
|
31
31
|
def test_inferred_mapping
|
@@ -138,6 +138,16 @@ class AggregationsTest < ActiveRecord::TestCase
|
|
138
138
|
assert_equal 'Barnoit GUMBLEAU', customers(:barney).fullname.to_s
|
139
139
|
assert_kind_of Fullname, customers(:barney).fullname
|
140
140
|
end
|
141
|
+
|
142
|
+
def test_assigning_hash_to_custom_converter
|
143
|
+
customers(:barney).fullname = { first: "Barney", last: "Stinson" }
|
144
|
+
assert_equal "Barney STINSON", customers(:barney).name
|
145
|
+
end
|
146
|
+
|
147
|
+
def test_assigning_hash_without_custom_converter
|
148
|
+
customers(:barney).fullname_no_converter = { first: "Barney", last: "Stinson" }
|
149
|
+
assert_equal({ first: "Barney", last: "Stinson" }.to_s, customers(:barney).name)
|
150
|
+
end
|
141
151
|
end
|
142
152
|
|
143
153
|
class OverridingAggregationsTest < ActiveRecord::TestCase
|
@@ -3,7 +3,7 @@ require "cases/helper"
|
|
3
3
|
if ActiveRecord::Base.connection.supports_migrations?
|
4
4
|
|
5
5
|
class ActiveRecordSchemaTest < ActiveRecord::TestCase
|
6
|
-
self.
|
6
|
+
self.use_transactional_tests = false
|
7
7
|
|
8
8
|
setup do
|
9
9
|
@original_verbose = ActiveRecord::Migration.verbose
|
@@ -17,14 +17,15 @@ if ActiveRecord::Base.connection.supports_migrations?
|
|
17
17
|
@connection.drop_table :nep_fruits rescue nil
|
18
18
|
@connection.drop_table :nep_schema_migrations rescue nil
|
19
19
|
@connection.drop_table :has_timestamps rescue nil
|
20
|
+
@connection.drop_table :multiple_indexes rescue nil
|
20
21
|
ActiveRecord::SchemaMigration.delete_all rescue nil
|
21
22
|
ActiveRecord::Migration.verbose = @original_verbose
|
22
23
|
end
|
23
24
|
|
24
|
-
def
|
25
|
+
def test_has_primary_key
|
25
26
|
old_primary_key_prefix_type = ActiveRecord::Base.primary_key_prefix_type
|
26
27
|
ActiveRecord::Base.primary_key_prefix_type = :table_name_with_underscore
|
27
|
-
|
28
|
+
assert_equal "version", ActiveRecord::SchemaMigration.primary_key
|
28
29
|
|
29
30
|
ActiveRecord::SchemaMigration.create_table
|
30
31
|
assert_difference "ActiveRecord::SchemaMigration.count", 1 do
|
@@ -93,69 +94,53 @@ if ActiveRecord::Base.connection.supports_migrations?
|
|
93
94
|
assert_equal "20131219224947", ActiveRecord::SchemaMigration.normalize_migration_number("20131219224947")
|
94
95
|
end
|
95
96
|
|
96
|
-
def
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
97
|
+
def test_schema_load_with_multiple_indexes_for_column_of_different_names
|
98
|
+
ActiveRecord::Schema.define do
|
99
|
+
create_table :multiple_indexes do |t|
|
100
|
+
t.string "foo"
|
101
|
+
t.index ["foo"], name: "multiple_indexes_foo_1"
|
102
|
+
t.index ["foo"], name: "multiple_indexes_foo_2"
|
102
103
|
end
|
103
104
|
end
|
104
|
-
end
|
105
105
|
|
106
|
-
|
107
|
-
assert_deprecated do
|
108
|
-
ActiveRecord::Schema.define do
|
109
|
-
create_table :has_timestamps
|
106
|
+
indexes = @connection.indexes("multiple_indexes")
|
110
107
|
|
111
|
-
|
112
|
-
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
108
|
+
assert_equal 2, indexes.length
|
109
|
+
assert_equal ["multiple_indexes_foo_1", "multiple_indexes_foo_2"], indexes.collect(&:name).sort
|
116
110
|
end
|
117
111
|
|
118
|
-
def
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
add_timestamps :has_timestamps
|
112
|
+
def test_timestamps_without_null_set_null_to_false_on_create_table
|
113
|
+
ActiveRecord::Schema.define do
|
114
|
+
create_table :has_timestamps do |t|
|
115
|
+
t.timestamps
|
123
116
|
end
|
124
117
|
end
|
125
|
-
end
|
126
118
|
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
create_table :has_timestamps do |t|
|
131
|
-
t.timestamps null: true
|
132
|
-
end
|
119
|
+
assert !@connection.columns(:has_timestamps).find { |c| c.name == 'created_at' }.null
|
120
|
+
assert !@connection.columns(:has_timestamps).find { |c| c.name == 'updated_at' }.null
|
121
|
+
end
|
133
122
|
|
134
|
-
|
123
|
+
def test_timestamps_without_null_set_null_to_false_on_change_table
|
124
|
+
ActiveRecord::Schema.define do
|
125
|
+
create_table :has_timestamps
|
135
126
|
|
136
|
-
|
137
|
-
|
138
|
-
end
|
127
|
+
change_table :has_timestamps do |t|
|
128
|
+
t.timestamps default: Time.now
|
139
129
|
end
|
140
130
|
end
|
141
|
-
end
|
142
|
-
|
143
|
-
def test_no_deprecation_warning_from_timestamps_on_change_table
|
144
|
-
assert_not_deprecated do
|
145
|
-
ActiveRecord::Schema.define do
|
146
|
-
create_table :has_timestamps
|
147
|
-
change_table :has_timestamps do |t|
|
148
|
-
t.timestamps null: true
|
149
|
-
end
|
150
131
|
|
151
|
-
|
132
|
+
assert !@connection.columns(:has_timestamps).find { |c| c.name == 'created_at' }.null
|
133
|
+
assert !@connection.columns(:has_timestamps).find { |c| c.name == 'updated_at' }.null
|
134
|
+
end
|
152
135
|
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
end
|
136
|
+
def test_timestamps_without_null_set_null_to_false_on_add_timestamps
|
137
|
+
ActiveRecord::Schema.define do
|
138
|
+
create_table :has_timestamps
|
139
|
+
add_timestamps :has_timestamps, default: Time.now
|
158
140
|
end
|
141
|
+
|
142
|
+
assert !@connection.columns(:has_timestamps).find { |c| c.name == 'created_at' }.null
|
143
|
+
assert !@connection.columns(:has_timestamps).find { |c| c.name == 'updated_at' }.null
|
159
144
|
end
|
160
145
|
end
|
161
146
|
end
|
@@ -8,12 +8,7 @@ module ActiveRecord
|
|
8
8
|
test 'does not duplicate conditions' do
|
9
9
|
scope = AssociationScope.scope(Author.new.association(:welcome_posts),
|
10
10
|
Author.connection)
|
11
|
-
|
12
|
-
binds = scope.bind_values.map(&:last)
|
13
|
-
wheres = scope.where_values.map(&:right).reject { |node|
|
14
|
-
Arel::Nodes::BindParam === node
|
15
|
-
}
|
16
|
-
assert_equal wheres.uniq, wheres
|
11
|
+
binds = scope.where_clause.binds.map(&:value)
|
17
12
|
assert_equal binds.uniq, binds
|
18
13
|
end
|
19
14
|
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'cases/helper'
|
2
2
|
require 'models/developer'
|
3
|
-
require 'models/computer'
|
4
3
|
require 'models/project'
|
5
4
|
require 'models/company'
|
6
5
|
require 'models/topic'
|
@@ -36,6 +35,10 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
|
|
36
35
|
assert_equal companies(:first_firm).name, firm.name
|
37
36
|
end
|
38
37
|
|
38
|
+
def test_missing_attribute_error_is_raised_when_no_foreign_key_attribute
|
39
|
+
assert_raises(ActiveModel::MissingAttributeError) { Client.select(:id).first.firm }
|
40
|
+
end
|
41
|
+
|
39
42
|
def test_belongs_to_does_not_use_order_by
|
40
43
|
ActiveRecord::SQLCounter.clear_log
|
41
44
|
Client.find(3).firm
|
@@ -50,7 +53,7 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
|
|
50
53
|
|
51
54
|
def test_belongs_to_with_primary_key_joins_on_correct_column
|
52
55
|
sql = Client.joins(:firm_with_primary_key).to_sql
|
53
|
-
if current_adapter?(:
|
56
|
+
if current_adapter?(:Mysql2Adapter)
|
54
57
|
assert_no_match(/`firm_with_primary_keys_companies`\.`id`/, sql)
|
55
58
|
assert_match(/`firm_with_primary_keys_companies`\.`name`/, sql)
|
56
59
|
elsif current_adapter?(:OracleAdapter)
|
@@ -67,6 +70,56 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
|
|
67
70
|
end
|
68
71
|
end
|
69
72
|
|
73
|
+
def test_optional_relation
|
74
|
+
original_value = ActiveRecord::Base.belongs_to_required_by_default
|
75
|
+
ActiveRecord::Base.belongs_to_required_by_default = true
|
76
|
+
|
77
|
+
model = Class.new(ActiveRecord::Base) do
|
78
|
+
self.table_name = "accounts"
|
79
|
+
def self.name; "Temp"; end
|
80
|
+
belongs_to :company, optional: true
|
81
|
+
end
|
82
|
+
|
83
|
+
account = model.new
|
84
|
+
assert account.valid?
|
85
|
+
ensure
|
86
|
+
ActiveRecord::Base.belongs_to_required_by_default = original_value
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_not_optional_relation
|
90
|
+
original_value = ActiveRecord::Base.belongs_to_required_by_default
|
91
|
+
ActiveRecord::Base.belongs_to_required_by_default = true
|
92
|
+
|
93
|
+
model = Class.new(ActiveRecord::Base) do
|
94
|
+
self.table_name = "accounts"
|
95
|
+
def self.name; "Temp"; end
|
96
|
+
belongs_to :company, optional: false
|
97
|
+
end
|
98
|
+
|
99
|
+
account = model.new
|
100
|
+
assert_not account.valid?
|
101
|
+
assert_equal [{error: :blank}], account.errors.details[:company]
|
102
|
+
ensure
|
103
|
+
ActiveRecord::Base.belongs_to_required_by_default = original_value
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_required_belongs_to_config
|
107
|
+
original_value = ActiveRecord::Base.belongs_to_required_by_default
|
108
|
+
ActiveRecord::Base.belongs_to_required_by_default = true
|
109
|
+
|
110
|
+
model = Class.new(ActiveRecord::Base) do
|
111
|
+
self.table_name = "accounts"
|
112
|
+
def self.name; "Temp"; end
|
113
|
+
belongs_to :company
|
114
|
+
end
|
115
|
+
|
116
|
+
account = model.new
|
117
|
+
assert_not account.valid?
|
118
|
+
assert_equal [{error: :blank}], account.errors.details[:company]
|
119
|
+
ensure
|
120
|
+
ActiveRecord::Base.belongs_to_required_by_default = original_value
|
121
|
+
end
|
122
|
+
|
70
123
|
def test_default_scope_on_relations_is_not_cached
|
71
124
|
counter = 0
|
72
125
|
|
@@ -242,11 +295,22 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
|
|
242
295
|
assert client.account.new_record?
|
243
296
|
end
|
244
297
|
|
298
|
+
def test_reloading_the_belonging_object
|
299
|
+
odegy_account = accounts(:odegy_account)
|
300
|
+
|
301
|
+
assert_equal "Odegy", odegy_account.firm.name
|
302
|
+
Company.where(id: odegy_account.firm_id).update_all(name: "ODEGY")
|
303
|
+
assert_equal "Odegy", odegy_account.firm.name
|
304
|
+
|
305
|
+
assert_equal "ODEGY", odegy_account.reload_firm.name
|
306
|
+
end
|
307
|
+
|
245
308
|
def test_natural_assignment_to_nil
|
246
309
|
client = Client.find(3)
|
247
310
|
client.firm = nil
|
248
311
|
client.save
|
249
|
-
|
312
|
+
client.association(:firm).reload
|
313
|
+
assert_nil client.firm
|
250
314
|
assert_nil client.client_of
|
251
315
|
end
|
252
316
|
|
@@ -254,7 +318,8 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
|
|
254
318
|
client = Client.create(:name => "Primary key client", :firm_name => companies(:first_firm).name)
|
255
319
|
client.firm_with_primary_key = nil
|
256
320
|
client.save
|
257
|
-
|
321
|
+
client.association(:firm_with_primary_key).reload
|
322
|
+
assert_nil client.firm_with_primary_key
|
258
323
|
assert_nil client.client_of
|
259
324
|
end
|
260
325
|
|
@@ -271,11 +336,13 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
|
|
271
336
|
def test_polymorphic_association_class
|
272
337
|
sponsor = Sponsor.new
|
273
338
|
assert_nil sponsor.association(:sponsorable).send(:klass)
|
274
|
-
|
339
|
+
sponsor.association(:sponsorable).reload
|
340
|
+
assert_nil sponsor.sponsorable
|
275
341
|
|
276
342
|
sponsor.sponsorable_type = '' # the column doesn't have to be declared NOT NULL
|
277
343
|
assert_nil sponsor.association(:sponsorable).send(:klass)
|
278
|
-
|
344
|
+
sponsor.association(:sponsorable).reload
|
345
|
+
assert_nil sponsor.sponsorable
|
279
346
|
|
280
347
|
sponsor.sponsorable = Member.new :name => "Bert"
|
281
348
|
assert_equal Member, sponsor.association(:sponsorable).send(:klass)
|
@@ -423,13 +490,33 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
|
|
423
490
|
assert_queries(1) { line_item.touch }
|
424
491
|
end
|
425
492
|
|
493
|
+
def test_belongs_to_with_touch_on_multiple_records
|
494
|
+
line_item = LineItem.create!(amount: 1)
|
495
|
+
line_item2 = LineItem.create!(amount: 2)
|
496
|
+
Invoice.create!(line_items: [line_item, line_item2])
|
497
|
+
|
498
|
+
assert_queries(1) do
|
499
|
+
LineItem.transaction do
|
500
|
+
line_item.touch
|
501
|
+
line_item2.touch
|
502
|
+
end
|
503
|
+
end
|
504
|
+
|
505
|
+
assert_queries(2) do
|
506
|
+
line_item.touch
|
507
|
+
line_item2.touch
|
508
|
+
end
|
509
|
+
end
|
510
|
+
|
426
511
|
def test_belongs_to_with_touch_option_on_touch_without_updated_at_attributes
|
427
512
|
assert_not LineItem.column_names.include?("updated_at")
|
428
513
|
|
429
514
|
line_item = LineItem.create!
|
430
515
|
invoice = Invoice.create!(line_items: [line_item])
|
431
516
|
initial = invoice.updated_at
|
432
|
-
|
517
|
+
travel(1.second) do
|
518
|
+
line_item.touch
|
519
|
+
end
|
433
520
|
|
434
521
|
assert_not_equal initial, invoice.reload.updated_at
|
435
522
|
end
|
@@ -508,7 +595,8 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
|
|
508
595
|
assert final_cut.persisted?
|
509
596
|
assert firm.persisted?
|
510
597
|
assert_equal firm, final_cut.firm
|
511
|
-
|
598
|
+
final_cut.association(:firm).reload
|
599
|
+
assert_equal firm, final_cut.firm
|
512
600
|
end
|
513
601
|
|
514
602
|
def test_assignment_before_child_saved_with_primary_key
|
@@ -520,7 +608,8 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
|
|
520
608
|
assert final_cut.persisted?
|
521
609
|
assert firm.persisted?
|
522
610
|
assert_equal firm, final_cut.firm_with_primary_key
|
523
|
-
|
611
|
+
final_cut.association(:firm_with_primary_key).reload
|
612
|
+
assert_equal firm, final_cut.firm_with_primary_key
|
524
613
|
end
|
525
614
|
|
526
615
|
def test_new_record_with_foreign_key_but_no_object
|
@@ -551,6 +640,12 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
|
|
551
640
|
assert_queries(0) { tagging.super_tag }
|
552
641
|
end
|
553
642
|
|
643
|
+
def test_dont_find_target_when_saving_foreign_key_after_stale_association_loaded
|
644
|
+
client = Client.create!(name: "Test client", firm_with_basic_id: Firm.find(1))
|
645
|
+
client.firm_id = Firm.create!(name: "Test firm").id
|
646
|
+
assert_queries(1) { client.save! }
|
647
|
+
end
|
648
|
+
|
554
649
|
def test_field_name_same_as_foreign_key
|
555
650
|
computer = Computer.find(1)
|
556
651
|
assert_not_nil computer.developer, ":foreign key == attribute didn't lock up" # '
|
@@ -625,6 +720,17 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
|
|
625
720
|
assert_equal 17, reply.replies.size
|
626
721
|
end
|
627
722
|
|
723
|
+
def test_replace_counter_cache
|
724
|
+
topic = Topic.create(title: "Zoom-zoom-zoom")
|
725
|
+
reply = Reply.create(title: "re: zoom", content: "speedy quick!")
|
726
|
+
|
727
|
+
reply.topic = topic
|
728
|
+
reply.save
|
729
|
+
topic.reload
|
730
|
+
|
731
|
+
assert_equal 1, topic.replies_count
|
732
|
+
end
|
733
|
+
|
628
734
|
def test_association_assignment_sticks
|
629
735
|
post = Post.first
|
630
736
|
|
@@ -651,7 +757,7 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
|
|
651
757
|
assert companies(:first_client).readonly_firm.readonly?
|
652
758
|
end
|
653
759
|
|
654
|
-
def
|
760
|
+
def test_polymorphic_assignment_foreign_key_type_string
|
655
761
|
comment = Comment.first
|
656
762
|
comment.author = Author.first
|
657
763
|
comment.resource = Member.first
|
@@ -1015,6 +1121,12 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
|
|
1015
1121
|
Column.create! record: record
|
1016
1122
|
assert_equal 1, Column.count
|
1017
1123
|
end
|
1124
|
+
|
1125
|
+
def test_association_force_reload_with_only_true_is_deprecated
|
1126
|
+
client = Client.find(3)
|
1127
|
+
|
1128
|
+
assert_deprecated { client.firm(true) }
|
1129
|
+
end
|
1018
1130
|
end
|
1019
1131
|
|
1020
1132
|
class BelongsToWithForeignKeyTest < ActiveRecord::TestCase
|