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
@@ -12,7 +12,9 @@ module ActiveRecord
|
|
12
12
|
|
13
13
|
teardown do
|
14
14
|
%w(artists_musics musics_videos catalog).each do |table_name|
|
15
|
-
|
15
|
+
ActiveSupport::Deprecation.silence do
|
16
|
+
connection.drop_table table_name if connection.table_exists?(table_name)
|
17
|
+
end
|
16
18
|
end
|
17
19
|
end
|
18
20
|
|
@@ -82,65 +84,72 @@ module ActiveRecord
|
|
82
84
|
connection.create_join_table :artists, :musics
|
83
85
|
connection.drop_join_table :artists, :musics
|
84
86
|
|
85
|
-
assert !connection.
|
87
|
+
ActiveSupport::Deprecation.silence { assert !connection.table_exists?('artists_musics') }
|
86
88
|
end
|
87
89
|
|
88
90
|
def test_drop_join_table_with_strings
|
89
91
|
connection.create_join_table :artists, :musics
|
90
92
|
connection.drop_join_table 'artists', 'musics'
|
91
93
|
|
92
|
-
assert !connection.
|
94
|
+
ActiveSupport::Deprecation.silence { assert !connection.table_exists?('artists_musics') }
|
93
95
|
end
|
94
96
|
|
95
97
|
def test_drop_join_table_with_the_proper_order
|
96
98
|
connection.create_join_table :videos, :musics
|
97
99
|
connection.drop_join_table :videos, :musics
|
98
100
|
|
99
|
-
assert !connection.
|
101
|
+
ActiveSupport::Deprecation.silence { assert !connection.table_exists?('musics_videos') }
|
100
102
|
end
|
101
103
|
|
102
104
|
def test_drop_join_table_with_the_table_name
|
103
105
|
connection.create_join_table :artists, :musics, table_name: :catalog
|
104
106
|
connection.drop_join_table :artists, :musics, table_name: :catalog
|
105
107
|
|
106
|
-
assert !connection.
|
108
|
+
ActiveSupport::Deprecation.silence { assert !connection.table_exists?('catalog') }
|
107
109
|
end
|
108
110
|
|
109
111
|
def test_drop_join_table_with_the_table_name_as_string
|
110
112
|
connection.create_join_table :artists, :musics, table_name: 'catalog'
|
111
113
|
connection.drop_join_table :artists, :musics, table_name: 'catalog'
|
112
114
|
|
113
|
-
assert !connection.
|
115
|
+
ActiveSupport::Deprecation.silence { assert !connection.table_exists?('catalog') }
|
114
116
|
end
|
115
117
|
|
116
118
|
def test_drop_join_table_with_column_options
|
117
119
|
connection.create_join_table :artists, :musics, column_options: {null: true}
|
118
120
|
connection.drop_join_table :artists, :musics, column_options: {null: true}
|
119
121
|
|
120
|
-
assert !connection.
|
122
|
+
ActiveSupport::Deprecation.silence { assert !connection.table_exists?('artists_musics') }
|
121
123
|
end
|
122
124
|
|
123
125
|
def test_create_and_drop_join_table_with_common_prefix
|
124
126
|
with_table_cleanup do
|
125
127
|
connection.create_join_table 'audio_artists', 'audio_musics'
|
126
|
-
|
128
|
+
ActiveSupport::Deprecation.silence { assert connection.table_exists?('audio_artists_musics') }
|
127
129
|
|
128
130
|
connection.drop_join_table 'audio_artists', 'audio_musics'
|
129
|
-
assert !connection.
|
131
|
+
ActiveSupport::Deprecation.silence { assert !connection.table_exists?('audio_artists_musics'), "Should have dropped join table, but didn't" }
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
if current_adapter?(:PostgreSQLAdapter)
|
136
|
+
def test_create_join_table_with_uuid
|
137
|
+
connection.create_join_table :artists, :musics, column_options: { type: :uuid }
|
138
|
+
assert_equal [:uuid, :uuid], connection.columns(:artists_musics).map(&:type)
|
130
139
|
end
|
131
140
|
end
|
132
141
|
|
133
142
|
private
|
134
143
|
|
135
144
|
def with_table_cleanup
|
136
|
-
tables_before = connection.
|
145
|
+
tables_before = connection.data_sources
|
137
146
|
|
138
147
|
yield
|
139
148
|
ensure
|
140
|
-
tables_after = connection.
|
149
|
+
tables_after = connection.data_sources - tables_before
|
141
150
|
|
142
151
|
tables_after.each do |table|
|
143
|
-
connection.
|
152
|
+
connection.drop_table table
|
144
153
|
end
|
145
154
|
end
|
146
155
|
end
|
@@ -8,6 +8,7 @@ module ActiveRecord
|
|
8
8
|
class ForeignKeyTest < ActiveRecord::TestCase
|
9
9
|
include DdlHelper
|
10
10
|
include SchemaDumpingHelper
|
11
|
+
include ActiveSupport::Testing::Stream
|
11
12
|
|
12
13
|
class Rocket < ActiveRecord::Base
|
13
14
|
end
|
@@ -29,8 +30,10 @@ module ActiveRecord
|
|
29
30
|
|
30
31
|
teardown do
|
31
32
|
if defined?(@connection)
|
32
|
-
@connection.drop_table "astronauts"
|
33
|
-
|
33
|
+
@connection.drop_table "astronauts"
|
34
|
+
#, if_exists: true
|
35
|
+
@connection.drop_table "rockets"
|
36
|
+
#, if_exists: true
|
34
37
|
end
|
35
38
|
end
|
36
39
|
|
@@ -141,10 +144,10 @@ module ActiveRecord
|
|
141
144
|
assert_equal 1, foreign_keys.size
|
142
145
|
|
143
146
|
fk = foreign_keys.first
|
144
|
-
if current_adapter?(:
|
147
|
+
if current_adapter?(:Mysql2Adapter)
|
145
148
|
# ON DELETE RESTRICT is the default on MySQL
|
146
149
|
assert_equal nil, fk.on_delete
|
147
|
-
|
150
|
+
else
|
148
151
|
assert_equal :restrict, fk.on_delete
|
149
152
|
end
|
150
153
|
end
|
@@ -155,8 +158,8 @@ module ActiveRecord
|
|
155
158
|
foreign_keys = @connection.foreign_keys("astronauts")
|
156
159
|
assert_equal 1, foreign_keys.size
|
157
160
|
|
158
|
-
fk = foreign_keys.first
|
159
|
-
assert_equal :cascade, fk.on_delete
|
161
|
+
fk = foreign_keys.first
|
162
|
+
assert_equal :cascade, fk.on_delete
|
160
163
|
end
|
161
164
|
|
162
165
|
def test_add_on_delete_nullify_foreign_key
|
@@ -180,15 +183,34 @@ module ActiveRecord
|
|
180
183
|
end
|
181
184
|
|
182
185
|
def test_add_foreign_key_with_on_update
|
183
|
-
|
184
|
-
@connection.add_foreign_key :astronauts, :rockets, column: "rocket_id"
|
186
|
+
@connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_update: :nullify
|
185
187
|
|
186
188
|
foreign_keys = @connection.foreign_keys("astronauts")
|
187
189
|
assert_equal 1, foreign_keys.size
|
188
190
|
|
189
191
|
fk = foreign_keys.first
|
190
|
-
assert_equal :
|
191
|
-
|
192
|
+
assert_equal :nullify, fk.on_update
|
193
|
+
end
|
194
|
+
|
195
|
+
def test_foreign_key_exists
|
196
|
+
@connection.add_foreign_key :astronauts, :rockets
|
197
|
+
|
198
|
+
assert @connection.foreign_key_exists?(:astronauts, :rockets)
|
199
|
+
assert_not @connection.foreign_key_exists?(:astronauts, :stars)
|
200
|
+
end
|
201
|
+
|
202
|
+
def test_foreign_key_exists_by_column
|
203
|
+
@connection.add_foreign_key :astronauts, :rockets, column: "rocket_id"
|
204
|
+
|
205
|
+
assert @connection.foreign_key_exists?(:astronauts, column: "rocket_id")
|
206
|
+
assert_not @connection.foreign_key_exists?(:astronauts, column: "star_id")
|
207
|
+
end
|
208
|
+
|
209
|
+
def test_foreign_key_exists_by_name
|
210
|
+
@connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", name: "fancy_named_fk"
|
211
|
+
|
212
|
+
assert @connection.foreign_key_exists?(:astronauts, name: "fancy_named_fk")
|
213
|
+
assert_not @connection.foreign_key_exists?(:astronauts, name: "other_fancy_named_fk")
|
192
214
|
end
|
193
215
|
|
194
216
|
def test_remove_foreign_key_inferes_column
|
@@ -232,24 +254,22 @@ module ActiveRecord
|
|
232
254
|
def test_schema_dumping
|
233
255
|
@connection.add_foreign_key :astronauts, :rockets
|
234
256
|
output = dump_table_schema "astronauts"
|
235
|
-
assert_match %r{\s+add_foreign_key "
|
257
|
+
assert_match %r{\s+add_foreign_key "astronauts", "rockets"$}, output
|
236
258
|
end
|
237
259
|
|
238
260
|
def test_schema_dumping_with_options
|
239
261
|
output = dump_table_schema "fk_test_has_fk"
|
240
|
-
assert_match %r{\s+add_foreign_key "
|
262
|
+
assert_match %r{\s+add_foreign_key "fk_test_has_fk", "fk_test_has_pk", column: "fk_id", primary_key: "pk_id", name: "fk_name"$}, output
|
241
263
|
end
|
242
264
|
|
243
265
|
def test_schema_dumping_on_delete_and_on_update_options
|
244
|
-
|
245
|
-
@connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :cascade, on_update: :restrict
|
266
|
+
@connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :nullify, on_update: :cascade
|
246
267
|
|
247
268
|
output = dump_table_schema "astronauts"
|
248
|
-
|
249
|
-
assert_match %r{\s+add_foreign_key "ASTRONAUTS",.+on_update: :restrict,.+on_delete: :cascade$}, output
|
269
|
+
assert_match %r{\s+add_foreign_key "astronauts",.+on_update: :cascade,.+on_delete: :nullify$}, output
|
250
270
|
end
|
251
271
|
|
252
|
-
class CreateCitiesAndHousesMigration < ActiveRecord::Migration
|
272
|
+
class CreateCitiesAndHousesMigration < ActiveRecord::Migration::Current
|
253
273
|
def change
|
254
274
|
create_table("cities") { |t| }
|
255
275
|
|
@@ -257,6 +277,10 @@ module ActiveRecord
|
|
257
277
|
t.column :city_id, :integer
|
258
278
|
end
|
259
279
|
add_foreign_key :houses, :cities, column: "city_id"
|
280
|
+
|
281
|
+
# remove and re-add to test that schema is updated and not accidently cached
|
282
|
+
remove_foreign_key :houses, :cities
|
283
|
+
add_foreign_key :houses, :cities, column: "city_id", on_delete: :cascade
|
260
284
|
end
|
261
285
|
end
|
262
286
|
|
@@ -268,7 +292,16 @@ module ActiveRecord
|
|
268
292
|
silence_stream($stdout) { migration.migrate(:down) }
|
269
293
|
end
|
270
294
|
|
271
|
-
|
295
|
+
def test_foreign_key_constraint_is_not_cached_incorrectly
|
296
|
+
migration = CreateCitiesAndHousesMigration.new
|
297
|
+
silence_stream($stdout) { migration.migrate(:up) }
|
298
|
+
output = dump_table_schema "houses"
|
299
|
+
assert_match %r{\s+add_foreign_key "houses",.+on_delete: :cascade$}, output
|
300
|
+
ensure
|
301
|
+
silence_stream($stdout) { migration.migrate(:down) }
|
302
|
+
end
|
303
|
+
|
304
|
+
class CreateSchoolsAndClassesMigration < ActiveRecord::Migration::Current
|
272
305
|
def change
|
273
306
|
create_table(:schools)
|
274
307
|
|
@@ -298,6 +331,7 @@ module ActiveRecord
|
|
298
331
|
silence_stream($stdout) { migration.migrate(:down) }
|
299
332
|
ActiveRecord::Base.table_name_suffix = nil
|
300
333
|
end
|
334
|
+
|
301
335
|
end
|
302
336
|
end
|
303
337
|
end
|
@@ -9,12 +9,8 @@ module ActiveRecord
|
|
9
9
|
super
|
10
10
|
@connection = ActiveRecord::Base.connection
|
11
11
|
@table_name = :testings
|
12
|
-
|
13
|
-
|
14
|
-
connection.drop_table :testings rescue nil
|
15
|
-
end
|
16
|
-
|
17
|
-
connection.create_table table_name do |t|
|
12
|
+
|
13
|
+
connection.create_table table_name do |t|
|
18
14
|
t.column :foo, :string, :limit => 100
|
19
15
|
t.column :bar, :string, :limit => 100
|
20
16
|
|
@@ -62,11 +58,7 @@ module ActiveRecord
|
|
62
58
|
end
|
63
59
|
|
64
60
|
def test_remove_nonexistent_index
|
65
|
-
|
66
|
-
assert_raise(ArgumentError) { connection.remove_index(table_name, "no_such_index") }
|
67
|
-
else
|
68
|
-
assert_raise(ArgumentError) { connection.remove_index(table_name, "no_such_index") }
|
69
|
-
end
|
61
|
+
assert_raise(ArgumentError) { connection.remove_index(table_name, "no_such_index") }
|
70
62
|
end
|
71
63
|
|
72
64
|
def test_add_index_works_with_long_index_names
|
@@ -138,7 +130,17 @@ module ActiveRecord
|
|
138
130
|
def test_named_index_exists
|
139
131
|
connection.add_index :testings, :foo, :name => "custom_index_name"
|
140
132
|
|
133
|
+
assert connection.index_exists?(:testings, :foo)
|
141
134
|
assert connection.index_exists?(:testings, :foo, :name => "custom_index_name")
|
135
|
+
assert !connection.index_exists?(:testings, :foo, :name => "other_index_name")
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_remove_named_index
|
139
|
+
connection.add_index :testings, :foo, :name => "custom_index_name"
|
140
|
+
|
141
|
+
assert connection.index_exists?(:testings, :foo)
|
142
|
+
connection.remove_index :testings, :foo
|
143
|
+
assert !connection.index_exists?(:testings, :foo)
|
142
144
|
end
|
143
145
|
|
144
146
|
def test_add_index_attribute_length_limit
|
@@ -184,7 +186,7 @@ module ActiveRecord
|
|
184
186
|
connection.remove_index("testings", :name => "named_admin")
|
185
187
|
|
186
188
|
# Selected adapters support index sort order
|
187
|
-
if current_adapter?(:SQLite3Adapter, :
|
189
|
+
if current_adapter?(:SQLite3Adapter, :Mysql2Adapter, :PostgreSQLAdapter)
|
188
190
|
connection.add_index("testings", ["last_name"], :order => {:last_name => :desc})
|
189
191
|
connection.remove_index("testings", ["last_name"])
|
190
192
|
connection.add_index("testings", ["last_name", "first_name"], :order => {:last_name => :desc})
|
@@ -4,7 +4,7 @@ module ActiveRecord
|
|
4
4
|
class Migration
|
5
5
|
class LoggerTest < ActiveRecord::TestCase
|
6
6
|
# MySQL can't roll back ddl changes
|
7
|
-
self.
|
7
|
+
self.use_transactional_tests = false
|
8
8
|
|
9
9
|
Migration = Struct.new(:name, :version) do
|
10
10
|
def disable_ddl_transaction; false end
|
@@ -10,8 +10,10 @@ module ActiveRecord
|
|
10
10
|
end
|
11
11
|
|
12
12
|
teardown do
|
13
|
-
@connection.drop_table
|
14
|
-
|
13
|
+
@connection.drop_table "testings"
|
14
|
+
#, if_exists: true
|
15
|
+
@connection.drop_table "testing_parents"
|
16
|
+
#, if_exists: true
|
15
17
|
end
|
16
18
|
|
17
19
|
test "foreign keys can be created with the table" do
|
@@ -32,6 +34,14 @@ module ActiveRecord
|
|
32
34
|
assert_equal [], @connection.foreign_keys("testings")
|
33
35
|
end
|
34
36
|
|
37
|
+
test "foreign keys can be created in one query when index is not added" do
|
38
|
+
assert_queries(1) do
|
39
|
+
@connection.create_table :testings do |t|
|
40
|
+
t.references :testing_parent, foreign_key: true, index: false
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
35
45
|
test "options hash can be passed" do
|
36
46
|
@connection.change_table :testing_parents do |t|
|
37
47
|
t.integer :other_id
|
@@ -45,6 +55,15 @@ module ActiveRecord
|
|
45
55
|
assert_equal "other_id", fk.primary_key
|
46
56
|
end
|
47
57
|
|
58
|
+
test "to_table option can be passed" do
|
59
|
+
@connection.create_table :testings do |t|
|
60
|
+
t.references :parent, foreign_key: { to_table: :testing_parents }
|
61
|
+
end
|
62
|
+
fks = @connection.foreign_keys("testings")
|
63
|
+
assert_equal([["testings", "testing_parents", "parent_id"]],
|
64
|
+
fks.map {|fk| [fk.from_table, fk.to_table, fk.column] })
|
65
|
+
end
|
66
|
+
|
48
67
|
test "foreign keys cannot be added to polymorphic relations when creating the table" do
|
49
68
|
@connection.create_table :testings do |t|
|
50
69
|
assert_raises(ArgumentError) do
|
@@ -124,10 +143,41 @@ module ActiveRecord
|
|
124
143
|
end
|
125
144
|
ensure
|
126
145
|
ActiveRecord::Base.pluralize_table_names = original_pluralize_table_names
|
127
|
-
@connection.drop_table "testing"
|
146
|
+
@connection.drop_table "testing"
|
147
|
+
#, if_exists: true
|
128
148
|
end
|
129
149
|
end
|
130
150
|
|
151
|
+
class CreateDogsMigration < ActiveRecord::Migration::Current
|
152
|
+
def change
|
153
|
+
create_table :dog_owners
|
154
|
+
|
155
|
+
create_table :dogs do |t|
|
156
|
+
t.references :dog_owner, foreign_key: true
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
def test_references_foreign_key_with_prefix
|
162
|
+
ActiveRecord::Base.table_name_prefix = 'p_'
|
163
|
+
migration = CreateDogsMigration.new
|
164
|
+
silence_stream($stdout) { migration.migrate(:up) }
|
165
|
+
assert_equal 1, @connection.foreign_keys("p_dogs").size
|
166
|
+
ensure
|
167
|
+
silence_stream($stdout) { migration.migrate(:down) }
|
168
|
+
ActiveRecord::Base.table_name_prefix = nil
|
169
|
+
end
|
170
|
+
|
171
|
+
def test_references_foreign_key_with_suffix
|
172
|
+
ActiveRecord::Base.table_name_suffix = '_s'
|
173
|
+
migration = CreateDogsMigration.new
|
174
|
+
silence_stream($stdout) { migration.migrate(:up) }
|
175
|
+
assert_equal 1, @connection.foreign_keys("dogs_s").size
|
176
|
+
ensure
|
177
|
+
silence_stream($stdout) { migration.migrate(:down) }
|
178
|
+
ActiveRecord::Base.table_name_suffix = nil
|
179
|
+
end
|
180
|
+
|
131
181
|
test "multiple foreign keys can be added to the same table" do
|
132
182
|
@connection.create_table :testings do |t|
|
133
183
|
t.integer :col_1
|
@@ -137,7 +187,7 @@ module ActiveRecord
|
|
137
187
|
t.foreign_key :testing_parents, column: :col_2
|
138
188
|
end
|
139
189
|
|
140
|
-
fks = @connection.foreign_keys("testings")
|
190
|
+
fks = @connection.foreign_keys("testings")
|
141
191
|
|
142
192
|
fk_definitions = fks.map {|fk| [fk.from_table, fk.to_table, fk.column] }
|
143
193
|
assert_equal([["testings", "testing_parents", "col_1"],
|
@@ -154,8 +204,10 @@ class ReferencesWithoutForeignKeySupportTest < ActiveRecord::TestCase
|
|
154
204
|
end
|
155
205
|
|
156
206
|
teardown do
|
157
|
-
@connection.drop_table("testings"
|
158
|
-
|
207
|
+
@connection.drop_table("testings")
|
208
|
+
#, if_exists: true)
|
209
|
+
@connection.drop_table("testing_parents")
|
210
|
+
#, if_exists: true)
|
159
211
|
end
|
160
212
|
|
161
213
|
test "ignores foreign keys defined with the table" do
|
@@ -163,7 +215,7 @@ class ReferencesWithoutForeignKeySupportTest < ActiveRecord::TestCase
|
|
163
215
|
t.references :testing_parent, foreign_key: true
|
164
216
|
end
|
165
217
|
|
166
|
-
assert_includes @connection.
|
218
|
+
assert_includes @connection.data_sources, "testings"
|
167
219
|
end
|
168
220
|
end
|
169
221
|
end
|
@@ -23,12 +23,12 @@ module ActiveRecord
|
|
23
23
|
assert connection.index_exists?(table_name, :foo_id, :name => :index_testings_on_foo_id)
|
24
24
|
end
|
25
25
|
|
26
|
-
def
|
26
|
+
def test_creates_index_by_default_even_if_index_option_is_not_passed
|
27
27
|
connection.create_table table_name do |t|
|
28
28
|
t.references :foo
|
29
29
|
end
|
30
30
|
|
31
|
-
|
31
|
+
assert connection.index_exists?(table_name, :foo_id, :name => :index_testings_on_foo_id)
|
32
32
|
end
|
33
33
|
|
34
34
|
def test_does_not_create_index_explicit
|
@@ -68,13 +68,13 @@ module ActiveRecord
|
|
68
68
|
assert connection.index_exists?(table_name, :foo_id, :name => :index_testings_on_foo_id)
|
69
69
|
end
|
70
70
|
|
71
|
-
def
|
71
|
+
def test_creates_index_for_existing_table_even_if_index_option_is_not_passed
|
72
72
|
connection.create_table table_name
|
73
73
|
connection.change_table table_name do |t|
|
74
74
|
t.references :foo
|
75
75
|
end
|
76
76
|
|
77
|
-
|
77
|
+
assert connection.index_exists?(table_name, :foo_id, :name => :index_testings_on_foo_id)
|
78
78
|
end
|
79
79
|
|
80
80
|
def test_does_not_create_index_for_existing_table_explicit
|