ibm_db 3.0.5 → 4.0.0
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 +4 -4
- data/CHANGES +4 -0
- data/LICENSE +1 -1
- data/MANIFEST +14 -14
- data/ParameterizedQueries README +6 -6
- data/README +208 -225
- data/ext/Makefile.nt32 +181 -181
- data/ext/Makefile.nt32.191 +212 -212
- data/ext/extconf.rb +291 -291
- data/ext/ibm_db.c +11887 -11887
- data/ext/ruby_ibm_db.h +241 -241
- data/ext/ruby_ibm_db_cli.c +866 -866
- data/ext/ruby_ibm_db_cli.h +500 -500
- data/init.rb +41 -41
- data/lib/IBM_DB.rb +27 -27
- data/lib/active_record/connection_adapters/ibm_db_adapter.rb +3452 -3177
- data/lib/active_record/connection_adapters/ibmdb_adapter.rb +5 -2
- data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -328
- data/test/active_record/connection_adapters/fake_adapter.rb +49 -46
- data/test/assets/example.log +1 -1
- data/test/assets/test.txt +1 -1
- data/test/cases/adapter_test.rb +351 -276
- 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 +168 -158
- data/test/cases/ar_schema_test.rb +146 -161
- data/test/cases/associations/association_scope_test.rb +16 -21
- data/test/cases/associations/belongs_to_associations_test.rb +1141 -1029
- data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +41 -0
- data/test/cases/associations/callbacks_test.rb +190 -192
- data/test/cases/associations/cascaded_eager_loading_test.rb +188 -188
- data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -36
- data/test/cases/associations/eager_load_nested_include_test.rb +126 -128
- data/test/cases/associations/eager_singularization_test.rb +148 -148
- data/test/cases/associations/eager_test.rb +1514 -1429
- data/test/cases/associations/extension_test.rb +87 -82
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +1004 -972
- data/test/cases/associations/has_many_associations_test.rb +2501 -2182
- data/test/cases/associations/has_many_through_associations_test.rb +1271 -1204
- data/test/cases/associations/has_one_associations_test.rb +707 -610
- data/test/cases/associations/has_one_through_associations_test.rb +383 -380
- data/test/cases/associations/inner_join_association_test.rb +139 -139
- data/test/cases/associations/inverse_associations_test.rb +733 -706
- data/test/cases/associations/join_model_test.rb +777 -754
- data/test/cases/associations/left_outer_join_association_test.rb +88 -0
- data/test/cases/associations/nested_through_associations_test.rb +579 -579
- data/test/cases/associations/required_test.rb +102 -82
- data/test/cases/associations_test.rb +385 -380
- data/test/cases/attribute_decorators_test.rb +125 -125
- data/test/cases/attribute_methods/read_test.rb +60 -60
- data/test/cases/attribute_methods_test.rb +1009 -952
- data/test/cases/attribute_set_test.rb +270 -210
- data/test/cases/attribute_test.rb +246 -180
- data/test/cases/attributes_test.rb +253 -136
- data/test/cases/autosave_association_test.rb +1708 -1595
- data/test/cases/base_test.rb +1713 -1664
- data/test/cases/batches_test.rb +489 -212
- data/test/cases/binary_test.rb +44 -52
- data/test/cases/bind_parameter_test.rb +110 -100
- data/test/cases/cache_key_test.rb +25 -0
- data/test/cases/calculations_test.rb +798 -646
- data/test/cases/callbacks_test.rb +636 -543
- data/test/cases/clone_test.rb +40 -40
- data/test/cases/coders/json_test.rb +15 -0
- data/test/cases/coders/yaml_column_test.rb +63 -63
- data/test/cases/collection_cache_key_test.rb +115 -0
- data/test/cases/column_alias_test.rb +17 -17
- data/test/cases/column_definition_test.rb +92 -123
- data/test/cases/comment_test.rb +143 -0
- data/test/cases/connection_adapters/adapter_leasing_test.rb +56 -54
- data/test/cases/connection_adapters/connection_handler_test.rb +160 -53
- data/test/cases/connection_adapters/connection_specification_test.rb +12 -12
- data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +255 -293
- data/test/cases/connection_adapters/mysql_type_lookup_test.rb +69 -65
- data/test/cases/connection_adapters/quoting_test.rb +13 -13
- data/test/cases/connection_adapters/schema_cache_test.rb +61 -56
- data/test/cases/connection_adapters/type_lookup_test.rb +118 -110
- data/test/cases/connection_management_test.rb +112 -122
- data/test/cases/connection_pool_test.rb +521 -346
- data/test/cases/connection_specification/resolver_test.rb +131 -116
- data/test/cases/core_test.rb +112 -112
- data/test/cases/counter_cache_test.rb +214 -209
- data/test/cases/custom_locking_test.rb +17 -17
- data/test/cases/database_statements_test.rb +34 -19
- data/test/cases/{invalid_date_test.rb → date_test.rb} +44 -32
- data/test/cases/date_time_precision_test.rb +106 -0
- data/test/cases/date_time_test.rb +61 -61
- data/test/cases/defaults_test.rb +218 -223
- data/test/cases/dirty_test.rb +763 -785
- data/test/cases/disconnected_test.rb +30 -28
- data/test/cases/dup_test.rb +157 -157
- data/test/cases/enum_test.rb +444 -290
- data/test/cases/errors_test.rb +16 -0
- data/test/cases/explain_subscriber_test.rb +64 -64
- data/test/cases/explain_test.rb +87 -76
- data/test/cases/finder_respond_to_test.rb +60 -60
- data/test/cases/finder_test.rb +1294 -1169
- data/test/cases/fixture_set/file_test.rb +156 -138
- data/test/cases/fixtures_test.rb +988 -908
- data/test/cases/forbidden_attributes_protection_test.rb +165 -99
- data/test/cases/habtm_destroy_order_test.rb +61 -61
- data/test/cases/helper.rb +204 -210
- data/test/cases/hot_compatibility_test.rb +142 -54
- data/test/cases/i18n_test.rb +45 -45
- data/test/cases/inheritance_test.rb +606 -375
- data/test/cases/integration_test.rb +155 -139
- data/test/cases/invalid_connection_test.rb +24 -22
- data/test/cases/invertible_migration_test.rb +387 -295
- data/test/cases/json_serialization_test.rb +311 -302
- data/test/cases/locking_test.rb +493 -477
- data/test/cases/log_subscriber_test.rb +225 -136
- data/test/cases/migration/change_schema_test.rb +458 -512
- data/test/cases/migration/change_table_test.rb +256 -224
- data/test/cases/migration/column_attributes_test.rb +176 -192
- data/test/cases/migration/column_positioning_test.rb +56 -56
- data/test/cases/migration/columns_test.rb +310 -304
- data/test/cases/migration/command_recorder_test.rb +350 -305
- data/test/cases/migration/compatibility_test.rb +118 -0
- data/test/cases/migration/create_join_table_test.rb +157 -148
- data/test/cases/migration/foreign_key_test.rb +360 -328
- data/test/cases/migration/helper.rb +39 -39
- data/test/cases/migration/index_test.rb +218 -216
- data/test/cases/migration/logger_test.rb +36 -36
- data/test/cases/migration/pending_migrations_test.rb +52 -53
- data/test/cases/migration/references_foreign_key_test.rb +216 -169
- data/test/cases/migration/references_index_test.rb +101 -101
- data/test/cases/migration/references_statements_test.rb +136 -116
- data/test/cases/migration/rename_table_test.rb +93 -93
- data/test/cases/migration_test.rb +1157 -959
- data/test/cases/migrator_test.rb +470 -388
- data/test/cases/mixin_test.rb +68 -70
- data/test/cases/modules_test.rb +172 -173
- data/test/cases/multiparameter_attributes_test.rb +372 -350
- data/test/cases/multiple_db_test.rb +122 -115
- data/test/cases/nested_attributes_test.rb +1098 -1070
- data/test/cases/nested_attributes_with_callbacks_test.rb +144 -144
- data/test/cases/persistence_test.rb +1001 -909
- data/test/cases/pooled_connections_test.rb +81 -81
- data/test/cases/primary_keys_test.rb +376 -237
- data/test/cases/query_cache_test.rb +446 -326
- data/test/cases/quoting_test.rb +202 -156
- data/test/cases/readonly_test.rb +119 -118
- data/test/cases/reaper_test.rb +85 -85
- data/test/cases/reflection_test.rb +509 -463
- data/test/cases/relation/delegation_test.rb +63 -68
- data/test/cases/relation/merging_test.rb +157 -161
- data/test/cases/relation/mutation_test.rb +183 -165
- data/test/cases/relation/or_test.rb +92 -0
- data/test/cases/relation/predicate_builder_test.rb +16 -14
- data/test/cases/relation/record_fetch_warning_test.rb +40 -0
- data/test/cases/relation/where_chain_test.rb +105 -181
- data/test/cases/relation/where_clause_test.rb +182 -0
- data/test/cases/relation/where_test.rb +322 -300
- data/test/cases/relation_test.rb +328 -319
- data/test/cases/relations_test.rb +2026 -1815
- data/test/cases/reload_models_test.rb +22 -22
- data/test/cases/result_test.rb +90 -80
- data/test/cases/sanitize_test.rb +176 -83
- data/test/cases/schema_dumper_test.rb +457 -463
- data/test/cases/schema_loading_test.rb +52 -0
- data/test/cases/scoping/default_scoping_test.rb +528 -454
- data/test/cases/scoping/named_scoping_test.rb +561 -524
- data/test/cases/scoping/relation_scoping_test.rb +400 -357
- data/test/cases/secure_token_test.rb +32 -0
- data/test/cases/serialization_test.rb +104 -104
- data/test/cases/serialized_attribute_test.rb +364 -277
- data/test/cases/statement_cache_test.rb +136 -98
- data/test/cases/store_test.rb +195 -194
- data/test/cases/suppressor_test.rb +63 -0
- data/test/cases/tasks/database_tasks_test.rb +462 -398
- data/test/cases/tasks/mysql_rake_test.rb +345 -324
- data/test/cases/tasks/postgresql_rake_test.rb +304 -250
- data/test/cases/tasks/sqlite_rake_test.rb +220 -193
- data/test/cases/test_case.rb +131 -123
- data/test/cases/test_fixtures_test.rb +36 -0
- data/test/cases/time_precision_test.rb +102 -0
- data/test/cases/timestamp_test.rb +501 -467
- data/test/cases/touch_later_test.rb +121 -0
- data/test/cases/transaction_callbacks_test.rb +518 -452
- data/test/cases/transaction_isolation_test.rb +106 -106
- data/test/cases/transactions_test.rb +834 -817
- 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 +27 -121
- data/test/cases/type/string_test.rb +22 -36
- data/test/cases/type/type_map_test.rb +177 -177
- data/test/cases/type_test.rb +39 -0
- data/test/cases/types_test.rb +24 -141
- data/test/cases/unconnected_test.rb +33 -33
- data/test/cases/validations/absence_validation_test.rb +73 -0
- data/test/cases/validations/association_validation_test.rb +97 -86
- data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -84
- data/test/cases/validations/i18n_validation_test.rb +86 -90
- data/test/cases/validations/length_validation_test.rb +79 -47
- data/test/cases/validations/presence_validation_test.rb +103 -68
- data/test/cases/validations/uniqueness_validation_test.rb +548 -457
- data/test/cases/validations_repair_helper.rb +19 -23
- data/test/cases/validations_test.rb +194 -165
- data/test/cases/view_test.rb +216 -119
- data/test/cases/yaml_serialization_test.rb +121 -126
- data/test/config.example.yml +97 -0
- data/test/config.rb +5 -5
- data/test/fixtures/accounts.yml +29 -29
- data/test/fixtures/admin/accounts.yml +2 -2
- data/test/fixtures/admin/users.yml +10 -10
- data/test/fixtures/author_addresses.original +11 -0
- data/test/fixtures/author_addresses.yml +17 -17
- data/test/fixtures/author_favorites.yml +3 -3
- data/test/fixtures/authors.original +17 -0
- data/test/fixtures/authors.yml +23 -23
- data/test/fixtures/bad_posts.yml +9 -0
- data/test/fixtures/binaries.yml +133 -133
- data/test/fixtures/books.yml +31 -11
- data/test/fixtures/bulbs.yml +5 -5
- data/test/fixtures/cars.yml +9 -9
- data/test/fixtures/categories.yml +19 -19
- data/test/fixtures/categories/special_categories.yml +9 -9
- data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -4
- data/test/fixtures/categories_ordered.yml +7 -7
- data/test/fixtures/categories_posts.yml +31 -31
- data/test/fixtures/categorizations.yml +23 -23
- data/test/fixtures/clubs.yml +8 -8
- data/test/fixtures/collections.yml +3 -3
- data/test/fixtures/colleges.yml +3 -3
- data/test/fixtures/comments.yml +65 -65
- data/test/fixtures/companies.yml +67 -67
- data/test/fixtures/computers.yml +10 -10
- data/test/fixtures/content.yml +3 -0
- data/test/fixtures/content_positions.yml +3 -0
- data/test/fixtures/courses.yml +8 -8
- data/test/fixtures/customers.yml +25 -25
- data/test/fixtures/dashboards.yml +6 -6
- data/test/fixtures/dead_parrots.yml +5 -0
- data/test/fixtures/developers.yml +22 -22
- data/test/fixtures/developers_projects.yml +16 -16
- data/test/fixtures/dog_lovers.yml +7 -7
- data/test/fixtures/dogs.yml +4 -4
- data/test/fixtures/doubloons.yml +3 -3
- data/test/fixtures/edges.yml +5 -5
- data/test/fixtures/entrants.yml +14 -14
- data/test/fixtures/essays.yml +6 -6
- data/test/fixtures/faces.yml +11 -11
- data/test/fixtures/fk_test_has_fk.yml +3 -3
- data/test/fixtures/fk_test_has_pk.yml +1 -1
- data/test/fixtures/friendships.yml +4 -4
- data/test/fixtures/funny_jokes.yml +10 -10
- data/test/fixtures/interests.yml +33 -33
- data/test/fixtures/items.yml +3 -3
- data/test/fixtures/jobs.yml +7 -7
- data/test/fixtures/legacy_things.yml +3 -3
- data/test/fixtures/live_parrots.yml +4 -0
- data/test/fixtures/mateys.yml +4 -4
- data/test/fixtures/member_details.yml +8 -8
- data/test/fixtures/member_types.yml +6 -6
- data/test/fixtures/members.yml +11 -11
- data/test/fixtures/memberships.yml +34 -34
- data/test/fixtures/men.yml +5 -5
- data/test/fixtures/minimalistics.yml +2 -2
- data/test/fixtures/minivans.yml +5 -5
- data/test/fixtures/mixed_case_monkeys.yml +6 -6
- data/test/fixtures/mixins.yml +29 -29
- data/test/fixtures/movies.yml +7 -7
- data/test/fixtures/naked/yml/accounts.yml +1 -1
- data/test/fixtures/naked/yml/companies.yml +1 -1
- data/test/fixtures/naked/yml/courses.yml +1 -1
- 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/organizations.yml +5 -5
- 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/other_topics.yml +42 -42
- data/test/fixtures/owners.yml +9 -9
- data/test/fixtures/parrots.yml +27 -27
- data/test/fixtures/parrots_pirates.yml +7 -7
- data/test/fixtures/people.yml +24 -24
- data/test/fixtures/peoples_treasures.yml +3 -3
- data/test/fixtures/pets.yml +19 -19
- data/test/fixtures/pirates.yml +15 -12
- data/test/fixtures/posts.yml +80 -80
- data/test/fixtures/price_estimates.yml +16 -7
- data/test/fixtures/products.yml +4 -4
- data/test/fixtures/projects.yml +7 -7
- data/test/fixtures/ratings.yml +14 -14
- data/test/fixtures/readers.yml +11 -11
- data/test/fixtures/references.yml +17 -17
- data/test/fixtures/reserved_words/distinct.yml +5 -5
- data/test/fixtures/reserved_words/distinct_select.yml +11 -11
- data/test/fixtures/reserved_words/group.yml +14 -14
- data/test/fixtures/reserved_words/select.yml +8 -8
- data/test/fixtures/reserved_words/values.yml +7 -7
- data/test/fixtures/ships.yml +6 -6
- data/test/fixtures/speedometers.yml +8 -8
- data/test/fixtures/sponsors.yml +12 -12
- data/test/fixtures/string_key_objects.yml +7 -7
- data/test/fixtures/subscribers.yml +10 -10
- data/test/fixtures/subscriptions.yml +12 -12
- data/test/fixtures/taggings.yml +78 -78
- data/test/fixtures/tags.yml +11 -11
- data/test/fixtures/tasks.yml +7 -7
- data/test/fixtures/teapots.yml +3 -3
- data/test/fixtures/to_be_linked/accounts.yml +2 -2
- data/test/fixtures/to_be_linked/users.yml +10 -10
- data/test/fixtures/topics.yml +49 -49
- data/test/fixtures/toys.yml +14 -14
- data/test/fixtures/traffic_lights.yml +9 -9
- data/test/fixtures/treasures.yml +10 -10
- data/test/fixtures/trees.yml +3 -0
- data/test/fixtures/uuid_children.yml +3 -3
- data/test/fixtures/uuid_parents.yml +2 -2
- data/test/fixtures/variants.yml +4 -4
- data/test/fixtures/vegetables.yml +19 -19
- data/test/fixtures/vertices.yml +3 -3
- data/test/fixtures/warehouse_things.yml +2 -2
- data/test/fixtures/zines.yml +5 -5
- data/test/migrations/10_urban/9_add_expressions.rb +11 -11
- data/test/migrations/decimal/1_give_me_big_numbers.rb +15 -15
- data/test/migrations/magic/1_currencies_have_symbols.rb +12 -12
- data/test/migrations/missing/1000_people_have_middle_names.rb +9 -9
- data/test/migrations/missing/1_people_have_last_names.rb +9 -9
- data/test/migrations/missing/3_we_need_reminders.rb +12 -12
- data/test/migrations/missing/4_innocent_jointable.rb +12 -12
- data/test/migrations/rename/1_we_need_things.rb +11 -11
- data/test/migrations/rename/2_rename_things.rb +9 -9
- data/test/migrations/to_copy/1_people_have_hobbies.rb +9 -9
- data/test/migrations/to_copy/2_people_have_descriptions.rb +9 -9
- data/test/migrations/to_copy2/1_create_articles.rb +7 -7
- data/test/migrations/to_copy2/2_create_comments.rb +7 -7
- data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -9
- data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -9
- data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -9
- data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -7
- data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -7
- data/test/migrations/valid/1_valid_people_have_last_names.rb +9 -9
- data/test/migrations/valid/2_we_need_reminders.rb +12 -12
- data/test/migrations/valid/3_innocent_jointable.rb +12 -12
- data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -9
- data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +12 -12
- data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +12 -12
- data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -9
- data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -12
- data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -12
- data/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -8
- data/test/models/admin.rb +5 -5
- data/test/models/admin/account.rb +3 -3
- data/test/models/admin/randomly_named_c1.rb +6 -2
- data/test/models/admin/user.rb +40 -40
- data/test/models/aircraft.rb +5 -4
- data/test/models/arunit2_model.rb +3 -3
- data/test/models/author.rb +209 -212
- data/test/models/auto_id.rb +4 -4
- data/test/models/autoloadable/extra_firm.rb +2 -2
- data/test/models/binary.rb +2 -2
- data/test/models/bird.rb +12 -12
- data/test/models/book.rb +23 -18
- data/test/models/boolean.rb +2 -2
- data/test/models/bulb.rb +52 -51
- data/test/models/cake_designer.rb +3 -3
- data/test/models/car.rb +29 -26
- data/test/models/carrier.rb +2 -2
- data/test/models/cat.rb +10 -0
- data/test/models/categorization.rb +19 -19
- data/test/models/category.rb +35 -35
- data/test/models/chef.rb +8 -7
- data/test/models/citation.rb +3 -3
- data/test/models/club.rb +25 -23
- data/test/models/college.rb +10 -10
- data/test/models/column.rb +3 -3
- data/test/models/column_name.rb +3 -3
- data/test/models/comment.rb +76 -64
- data/test/models/company.rb +230 -228
- data/test/models/company_in_module.rb +98 -98
- data/test/models/computer.rb +3 -3
- data/test/models/contact.rb +41 -41
- data/test/models/content.rb +40 -0
- data/test/models/contract.rb +20 -20
- data/test/models/country.rb +7 -7
- data/test/models/course.rb +6 -6
- data/test/models/customer.rb +83 -77
- data/test/models/customer_carrier.rb +14 -14
- data/test/models/dashboard.rb +3 -3
- data/test/models/default.rb +2 -2
- data/test/models/department.rb +4 -4
- data/test/models/developer.rb +274 -255
- data/test/models/dog.rb +5 -5
- data/test/models/dog_lover.rb +5 -5
- data/test/models/doubloon.rb +12 -12
- data/test/models/drink_designer.rb +3 -3
- data/test/models/edge.rb +5 -5
- data/test/models/electron.rb +5 -5
- data/test/models/engine.rb +4 -4
- data/test/models/entrant.rb +3 -3
- data/test/models/essay.rb +5 -5
- data/test/models/event.rb +3 -3
- data/test/models/eye.rb +37 -37
- data/test/models/face.rb +9 -9
- data/test/models/friendship.rb +6 -6
- data/test/models/guid.rb +2 -2
- data/test/models/guitar.rb +4 -0
- data/test/models/hotel.rb +11 -9
- data/test/models/image.rb +3 -3
- data/test/models/interest.rb +5 -5
- data/test/models/invoice.rb +4 -4
- data/test/models/item.rb +7 -7
- data/test/models/job.rb +7 -7
- data/test/models/joke.rb +7 -7
- data/test/models/keyboard.rb +3 -3
- data/test/models/legacy_thing.rb +3 -3
- data/test/models/lesson.rb +11 -11
- data/test/models/line_item.rb +3 -3
- data/test/models/liquid.rb +4 -4
- data/test/models/man.rb +11 -11
- data/test/models/matey.rb +4 -4
- data/test/models/member.rb +42 -41
- data/test/models/member_detail.rb +8 -7
- data/test/models/member_type.rb +3 -3
- data/test/models/membership.rb +35 -35
- data/test/models/mentor.rb +3 -0
- data/test/models/minimalistic.rb +2 -2
- data/test/models/minivan.rb +9 -9
- data/test/models/mixed_case_monkey.rb +3 -3
- data/test/models/mocktail_designer.rb +2 -0
- data/test/models/molecule.rb +6 -6
- data/test/models/movie.rb +5 -5
- 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/order.rb +4 -4
- data/test/models/organization.rb +14 -14
- data/test/models/other_dog.rb +5 -0
- data/test/models/owner.rb +37 -34
- data/test/models/parrot.rb +28 -29
- data/test/models/person.rb +142 -143
- data/test/models/personal_legacy_thing.rb +4 -4
- data/test/models/pet.rb +18 -15
- data/test/models/pet_treasure.rb +6 -0
- data/test/models/pirate.rb +92 -92
- data/test/models/possession.rb +3 -3
- data/test/models/post.rb +273 -264
- data/test/models/price_estimate.rb +4 -4
- data/test/models/professor.rb +5 -5
- data/test/models/project.rb +40 -31
- data/test/models/publisher.rb +2 -2
- data/test/models/publisher/article.rb +4 -4
- data/test/models/publisher/magazine.rb +3 -3
- data/test/models/randomly_named_c1.rb +1 -1
- data/test/models/rating.rb +4 -4
- data/test/models/reader.rb +23 -23
- data/test/models/recipe.rb +3 -0
- data/test/models/record.rb +2 -2
- data/test/models/reference.rb +22 -22
- data/test/models/reply.rb +61 -61
- data/test/models/ship.rb +39 -33
- data/test/models/ship_part.rb +8 -8
- data/test/models/shop.rb +17 -17
- data/test/models/shop_account.rb +6 -6
- data/test/models/speedometer.rb +6 -6
- data/test/models/sponsor.rb +7 -7
- data/test/models/string_key_object.rb +3 -3
- data/test/models/student.rb +4 -4
- data/test/models/subject.rb +16 -16
- data/test/models/subscriber.rb +8 -8
- data/test/models/subscription.rb +4 -4
- data/test/models/tag.rb +13 -7
- data/test/models/tagging.rb +13 -13
- data/test/models/task.rb +5 -5
- data/test/models/topic.rb +118 -124
- data/test/models/toy.rb +6 -6
- data/test/models/traffic_light.rb +4 -4
- data/test/models/treasure.rb +14 -14
- data/test/models/treaty.rb +7 -7
- data/test/models/tree.rb +3 -0
- data/test/models/tuning_peg.rb +4 -0
- data/test/models/tyre.rb +11 -11
- data/test/models/user.rb +14 -0
- data/test/models/uuid_child.rb +3 -3
- data/test/models/uuid_item.rb +6 -0
- data/test/models/uuid_parent.rb +3 -3
- data/test/models/vegetables.rb +24 -24
- data/test/models/vehicle.rb +6 -6
- data/test/models/vertex.rb +9 -9
- data/test/models/warehouse_thing.rb +5 -5
- data/test/models/wheel.rb +3 -3
- data/test/models/without_table.rb +3 -3
- data/test/models/zine.rb +3 -3
- data/test/schema/mysql2_specific_schema.rb +68 -58
- data/test/schema/oracle_specific_schema.rb +40 -43
- data/test/schema/postgresql_specific_schema.rb +114 -202
- data/test/schema/schema.rb +1057 -952
- data/test/schema/schema.rb.original +1057 -0
- data/test/schema/sqlite_specific_schema.rb +18 -22
- data/test/support/config.rb +43 -43
- data/test/support/connection.rb +23 -22
- data/test/support/connection_helper.rb +14 -14
- data/test/support/ddl_helper.rb +8 -8
- data/test/support/schema_dumping_helper.rb +20 -20
- 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 +129 -24
- 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/connections/native_ibm_db/connection.rb +0 -44
- data/test/fixtures/naked/csv/accounts.csv +0 -1
- data/test/schema/i5/ibm_db_specific_schema.rb +0 -137
- data/test/schema/ids/ibm_db_specific_schema.rb +0 -140
- data/test/schema/luw/ibm_db_specific_schema.rb +0 -137
- data/test/schema/mysql_specific_schema.rb +0 -70
- data/test/schema/zOS/ibm_db_specific_schema.rb +0 -208
|
@@ -1,448 +0,0 @@
|
|
|
1
|
-
require 'cases/helper'
|
|
2
|
-
|
|
3
|
-
module ActiveRecord
|
|
4
|
-
class Migration
|
|
5
|
-
class ChangeSchemaTest < ActiveRecord::TestCase
|
|
6
|
-
attr_reader :connection, :table_name
|
|
7
|
-
|
|
8
|
-
def setup
|
|
9
|
-
super
|
|
10
|
-
@connection = ActiveRecord::Base.connection
|
|
11
|
-
@table_name = :testings
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
teardown do
|
|
15
|
-
connection.drop_table :testings rescue nil
|
|
16
|
-
ActiveRecord::Base.primary_key_prefix_type = nil
|
|
17
|
-
ActiveRecord::Base.clear_cache!
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def test_create_table_without_id
|
|
21
|
-
testing_table_with_only_foo_attribute do
|
|
22
|
-
assert_equal connection.columns(:testings).size, 1
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
unless current_adapter?(:IBM_DBAdapter)
|
|
27
|
-
# For DB2: Cannot add a primary key to a table with some rows already in it as it violates the unique constraint
|
|
28
|
-
# Secondly GENERATED BY DEFAULT AS IDENTITY cannot be applied in a alter table command.
|
|
29
|
-
# as this will be wrong sql syntax for DB
|
|
30
|
-
def test_add_column_with_primary_key_attribute
|
|
31
|
-
testing_table_with_only_foo_attribute do
|
|
32
|
-
connection.add_column :testings, :id, :primary_key
|
|
33
|
-
assert_equal connection.columns(:testings).size, 2
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def test_create_table_adds_id
|
|
39
|
-
connection.create_table :testings do |t|
|
|
40
|
-
t.column :foo, :string
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
assert_equal %w(id foo), connection.columns(:testings).map(&:name)
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def test_create_table_with_not_null_column
|
|
47
|
-
connection.create_table :testings do |t|
|
|
48
|
-
t.column :foo, :string, :null => false
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
assert_raises(ActiveRecord::StatementInvalid) do
|
|
52
|
-
connection.execute "insert into testings (foo) values (NULL)"
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def test_create_table_with_defaults
|
|
57
|
-
# MySQL doesn't allow defaults on TEXT or BLOB columns.
|
|
58
|
-
mysql = current_adapter?(:MysqlAdapter, :Mysql2Adapter)
|
|
59
|
-
|
|
60
|
-
connection.create_table :testings do |t|
|
|
61
|
-
t.column :one, :string, :default => "hello"
|
|
62
|
-
t.column :two, :boolean, :default => true
|
|
63
|
-
t.column :three, :boolean, :default => false
|
|
64
|
-
t.column :four, :integer, :default => 1
|
|
65
|
-
t.column :five, :text, :default => "hello" unless mysql
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
columns = connection.columns(:testings)
|
|
69
|
-
one = columns.detect { |c| c.name == "one" }
|
|
70
|
-
two = columns.detect { |c| c.name == "two" }
|
|
71
|
-
three = columns.detect { |c| c.name == "three" }
|
|
72
|
-
four = columns.detect { |c| c.name == "four" }
|
|
73
|
-
five = columns.detect { |c| c.name == "five" } unless mysql
|
|
74
|
-
|
|
75
|
-
assert_equal "hello", one.default
|
|
76
|
-
assert_equal true, two.type_cast_from_database(two.default)
|
|
77
|
-
assert_equal false, three.type_cast_from_database(three.default)
|
|
78
|
-
assert_equal '1', four.default
|
|
79
|
-
assert_equal "hello", five.default unless mysql
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
if current_adapter?(:PostgreSQLAdapter)
|
|
83
|
-
def test_add_column_with_array
|
|
84
|
-
connection.create_table :testings
|
|
85
|
-
connection.add_column :testings, :foo, :string, :array => true
|
|
86
|
-
|
|
87
|
-
columns = connection.columns(:testings)
|
|
88
|
-
array_column = columns.detect { |c| c.name == "foo" }
|
|
89
|
-
|
|
90
|
-
assert array_column.array
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
def test_create_table_with_array_column
|
|
94
|
-
connection.create_table :testings do |t|
|
|
95
|
-
t.string :foo, :array => true
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
columns = connection.columns(:testings)
|
|
99
|
-
array_column = columns.detect { |c| c.name == "foo" }
|
|
100
|
-
|
|
101
|
-
assert array_column.array
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
def test_create_table_with_bigint
|
|
106
|
-
connection.create_table :testings do |t|
|
|
107
|
-
t.bigint :eight_int
|
|
108
|
-
end
|
|
109
|
-
columns = connection.columns(:testings)
|
|
110
|
-
eight = columns.detect { |c| c.name == "eight_int" }
|
|
111
|
-
|
|
112
|
-
if current_adapter?(:OracleAdapter)
|
|
113
|
-
assert_equal 'NUMBER(19)', eight.sql_type
|
|
114
|
-
elsif current_adapter?(:SQLite3Adapter)
|
|
115
|
-
assert_equal 'bigint', eight.sql_type
|
|
116
|
-
else
|
|
117
|
-
assert_equal :integer, eight.type
|
|
118
|
-
assert_equal 8, eight.limit
|
|
119
|
-
end
|
|
120
|
-
ensure
|
|
121
|
-
connection.drop_table :testings
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
def test_create_table_with_limits
|
|
125
|
-
connection.create_table :testings do |t|
|
|
126
|
-
t.column :foo, :string, :limit => 255
|
|
127
|
-
|
|
128
|
-
t.column :default_int, :integer
|
|
129
|
-
|
|
130
|
-
t.column :one_int, :integer, :limit => 1
|
|
131
|
-
t.column :four_int, :integer, :limit => 4
|
|
132
|
-
t.column :eight_int, :integer, :limit => 8
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
columns = connection.columns(:testings)
|
|
136
|
-
foo = columns.detect { |c| c.name == "foo" }
|
|
137
|
-
assert_equal 255, foo.limit
|
|
138
|
-
|
|
139
|
-
default = columns.detect { |c| c.name == "default_int" }
|
|
140
|
-
one = columns.detect { |c| c.name == "one_int" }
|
|
141
|
-
four = columns.detect { |c| c.name == "four_int" }
|
|
142
|
-
eight = columns.detect { |c| c.name == "eight_int" }
|
|
143
|
-
|
|
144
|
-
if current_adapter?(:PostgreSQLAdapter)
|
|
145
|
-
assert_equal 'integer', default.sql_type
|
|
146
|
-
assert_equal 'smallint', one.sql_type
|
|
147
|
-
assert_equal 'integer', four.sql_type
|
|
148
|
-
assert_equal 'bigint', eight.sql_type
|
|
149
|
-
elsif current_adapter?(:MysqlAdapter, :Mysql2Adapter)
|
|
150
|
-
assert_match 'int(11)', default.sql_type
|
|
151
|
-
assert_match 'tinyint', one.sql_type
|
|
152
|
-
assert_match 'int', four.sql_type
|
|
153
|
-
assert_match 'bigint', eight.sql_type
|
|
154
|
-
elsif current_adapter?(:OracleAdapter)
|
|
155
|
-
assert_equal 'NUMBER(38)', default.sql_type
|
|
156
|
-
assert_equal 'NUMBER(1)', one.sql_type
|
|
157
|
-
assert_equal 'NUMBER(4)', four.sql_type
|
|
158
|
-
assert_equal 'NUMBER(8)', eight.sql_type
|
|
159
|
-
end
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
def test_create_table_with_primary_key_prefix_as_table_name_with_underscore
|
|
163
|
-
ActiveRecord::Base.primary_key_prefix_type = :table_name_with_underscore
|
|
164
|
-
|
|
165
|
-
connection.create_table :testings do |t|
|
|
166
|
-
t.column :foo, :string
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
assert_equal %w(testing_id foo), connection.columns(:testings).map(&:name)
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
def test_create_table_with_primary_key_prefix_as_table_name
|
|
173
|
-
ActiveRecord::Base.primary_key_prefix_type = :table_name
|
|
174
|
-
|
|
175
|
-
connection.create_table :testings do |t|
|
|
176
|
-
t.column :foo, :string
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
assert_equal %w(testingid foo), connection.columns(:testings).map(&:name)
|
|
180
|
-
end
|
|
181
|
-
|
|
182
|
-
def test_create_table_raises_when_redefining_primary_key_column
|
|
183
|
-
error = assert_raise(ArgumentError) do
|
|
184
|
-
connection.create_table :testings do |t|
|
|
185
|
-
t.column :id, :string
|
|
186
|
-
end
|
|
187
|
-
end
|
|
188
|
-
|
|
189
|
-
assert_equal "you can't redefine the primary key column 'id'. To define a custom primary key, pass { id: false } to create_table.", error.message
|
|
190
|
-
end
|
|
191
|
-
|
|
192
|
-
def test_create_table_raises_when_redefining_custom_primary_key_column
|
|
193
|
-
error = assert_raise(ArgumentError) do
|
|
194
|
-
connection.create_table :testings, primary_key: :testing_id do |t|
|
|
195
|
-
t.column :testing_id, :string
|
|
196
|
-
end
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
assert_equal "you can't redefine the primary key column 'testing_id'. To define a custom primary key, pass { id: false } to create_table.", error.message
|
|
200
|
-
end
|
|
201
|
-
|
|
202
|
-
def test_create_table_with_timestamps_should_create_datetime_columns
|
|
203
|
-
# FIXME: Remove the silence when we change the default `null` behavior
|
|
204
|
-
ActiveSupport::Deprecation.silence do
|
|
205
|
-
connection.create_table table_name do |t|
|
|
206
|
-
t.timestamps
|
|
207
|
-
end
|
|
208
|
-
end
|
|
209
|
-
created_columns = connection.columns(table_name)
|
|
210
|
-
|
|
211
|
-
created_at_column = created_columns.detect {|c| c.name == 'created_at' }
|
|
212
|
-
updated_at_column = created_columns.detect {|c| c.name == 'updated_at' }
|
|
213
|
-
|
|
214
|
-
assert created_at_column.null
|
|
215
|
-
assert updated_at_column.null
|
|
216
|
-
end
|
|
217
|
-
|
|
218
|
-
def test_create_table_with_timestamps_should_create_datetime_columns_with_options
|
|
219
|
-
connection.create_table table_name do |t|
|
|
220
|
-
t.timestamps :null => false
|
|
221
|
-
end
|
|
222
|
-
created_columns = connection.columns(table_name)
|
|
223
|
-
|
|
224
|
-
created_at_column = created_columns.detect {|c| c.name == 'created_at' }
|
|
225
|
-
updated_at_column = created_columns.detect {|c| c.name == 'updated_at' }
|
|
226
|
-
|
|
227
|
-
assert !created_at_column.null
|
|
228
|
-
assert !updated_at_column.null
|
|
229
|
-
end
|
|
230
|
-
|
|
231
|
-
def test_create_table_without_a_block
|
|
232
|
-
connection.create_table table_name
|
|
233
|
-
end
|
|
234
|
-
|
|
235
|
-
# Sybase, and SQLite3 will not allow you to add a NOT NULL
|
|
236
|
-
# column to a table without a default value.
|
|
237
|
-
unless current_adapter?(:SybaseAdapter, :SQLite3Adapter, :IBM_DBAdapter)
|
|
238
|
-
def test_add_column_not_null_without_default
|
|
239
|
-
connection.create_table :testings do |t|
|
|
240
|
-
t.column :foo, :string
|
|
241
|
-
end
|
|
242
|
-
connection.add_column :testings, :bar, :string, :null => false
|
|
243
|
-
|
|
244
|
-
assert_raise(ActiveRecord::StatementInvalid) do
|
|
245
|
-
connection.execute "insert into testings (foo, bar) values ('hello', NULL)"
|
|
246
|
-
end
|
|
247
|
-
end
|
|
248
|
-
end
|
|
249
|
-
|
|
250
|
-
def test_add_column_not_null_with_default
|
|
251
|
-
connection.create_table :testings do |t|
|
|
252
|
-
t.column :foo, :string
|
|
253
|
-
end
|
|
254
|
-
|
|
255
|
-
con = connection
|
|
256
|
-
connection.enable_identity_insert("testings", true) if current_adapter?(:SybaseAdapter)
|
|
257
|
-
connection.execute "insert into testings (#{con.quote_column_name('id')}, #{con.quote_column_name('foo')}) values (1, 'hello')"
|
|
258
|
-
connection.enable_identity_insert("testings", false) if current_adapter?(:SybaseAdapter)
|
|
259
|
-
assert_nothing_raised {connection.add_column :testings, :bar, :string, :null => false, :default => "default" }
|
|
260
|
-
|
|
261
|
-
assert_raises(ActiveRecord::StatementInvalid) do
|
|
262
|
-
unless current_adapter?(:OpenBaseAdapter)
|
|
263
|
-
connection.execute "insert into testings (#{con.quote_column_name('id')}, #{con.quote_column_name('foo')}, #{con.quote_column_name('bar')}) values (2, 'hello', NULL)"
|
|
264
|
-
else
|
|
265
|
-
connection.insert("INSERT INTO testings (#{con.quote_column_name('id')}, #{con.quote_column_name('foo')}, #{con.quote_column_name('bar')}) VALUES (2, 'hello', NULL)",
|
|
266
|
-
"Testing Insert","id",2)
|
|
267
|
-
end
|
|
268
|
-
end
|
|
269
|
-
end
|
|
270
|
-
|
|
271
|
-
def test_change_column_quotes_column_names
|
|
272
|
-
connection.create_table :testings do |t|
|
|
273
|
-
unless current_adapter?(:IBM_DBAdapter)
|
|
274
|
-
t.column :select, :string
|
|
275
|
-
else
|
|
276
|
-
# If no limit specified by default column of length 255 is created, which later cannot be scaled down to 10
|
|
277
|
-
t.column :select, :string, :limit => 5
|
|
278
|
-
end
|
|
279
|
-
end
|
|
280
|
-
|
|
281
|
-
connection.change_column :testings, :select, :string, :limit => 10
|
|
282
|
-
|
|
283
|
-
# Oracle needs primary key value from sequence
|
|
284
|
-
if current_adapter?(:OracleAdapter)
|
|
285
|
-
connection.execute "insert into testings (id, #{connection.quote_column_name('select')}) values (testings_seq.nextval, '7 chars')"
|
|
286
|
-
else
|
|
287
|
-
connection.execute "insert into testings (#{connection.quote_column_name('select')}) values ('7 chars')"
|
|
288
|
-
end
|
|
289
|
-
end
|
|
290
|
-
|
|
291
|
-
def test_keeping_default_and_notnull_constraints_on_change
|
|
292
|
-
connection.create_table :testings do |t|
|
|
293
|
-
t.column :title, :string
|
|
294
|
-
end
|
|
295
|
-
person_klass = Class.new(ActiveRecord::Base)
|
|
296
|
-
person_klass.table_name = 'testings'
|
|
297
|
-
|
|
298
|
-
person_klass.connection.add_column "testings", "wealth", :integer, :null => false, :default => 99
|
|
299
|
-
person_klass.reset_column_information
|
|
300
|
-
assert_equal 99, person_klass.columns_hash["wealth"].default
|
|
301
|
-
assert_equal false, person_klass.columns_hash["wealth"].null
|
|
302
|
-
# Oracle needs primary key value from sequence
|
|
303
|
-
if current_adapter?(:OracleAdapter)
|
|
304
|
-
assert_nothing_raised {person_klass.connection.execute("insert into testings (id, title) values (testings_seq.nextval, 'tester')")}
|
|
305
|
-
else
|
|
306
|
-
assert_nothing_raised {person_klass.connection.execute("insert into testings (title) values ('tester')")}
|
|
307
|
-
end
|
|
308
|
-
|
|
309
|
-
# change column default to see that column doesn't lose its not null definition
|
|
310
|
-
person_klass.connection.change_column_default "testings", "wealth", 100
|
|
311
|
-
person_klass.reset_column_information
|
|
312
|
-
assert_equal 100, person_klass.columns_hash["wealth"].default
|
|
313
|
-
assert_equal false, person_klass.columns_hash["wealth"].null
|
|
314
|
-
|
|
315
|
-
if (!current_adapter?(:IBM_DBAdapter))
|
|
316
|
-
# rename column to see that column doesn't lose its not null and/or default definition
|
|
317
|
-
person_klass.connection.rename_column "testings", "wealth", "money"
|
|
318
|
-
person_klass.reset_column_information
|
|
319
|
-
assert_nil person_klass.columns_hash["wealth"]
|
|
320
|
-
assert_equal 100, person_klass.columns_hash["money"].default
|
|
321
|
-
assert_equal false, person_klass.columns_hash["money"].null
|
|
322
|
-
end
|
|
323
|
-
|
|
324
|
-
# change column
|
|
325
|
-
unless current_adapter?(:IBM_DBAdapter)
|
|
326
|
-
person_klass.connection.change_column "testings", "money", :integer, :null => false, :default => 1000
|
|
327
|
-
person_klass.reset_column_information
|
|
328
|
-
assert_equal 1000, person_klass.columns_hash["money"].default
|
|
329
|
-
assert_equal false, person_klass.columns_hash["money"].null
|
|
330
|
-
else
|
|
331
|
-
person_klass.connection.change_column "testings", "wealth", :decimal, :precision => 15, :scale => 1,:null => false, :default => 1000
|
|
332
|
-
person_klass.reset_column_information
|
|
333
|
-
assert_equal 1000, person_klass.columns_hash["wealth"].default
|
|
334
|
-
assert_equal false, person_klass.columns_hash["wealth"].null
|
|
335
|
-
end
|
|
336
|
-
|
|
337
|
-
# change column, make it nullable and clear default
|
|
338
|
-
unless current_adapter?(:IBM_DBAdapter)
|
|
339
|
-
person_klass.connection.change_column "testings", "money", :integer, :null => true, :default => nil
|
|
340
|
-
person_klass.reset_column_information
|
|
341
|
-
assert_nil person_klass.columns_hash["money"].default
|
|
342
|
-
assert_equal true, person_klass.columns_hash["money"].null
|
|
343
|
-
else
|
|
344
|
-
person_klass.connection.change_column "testings", "wealth", :decimal, :precision => 20, :scale => 2, :null => true, :default => nil
|
|
345
|
-
person_klass.reset_column_information
|
|
346
|
-
assert_nil person_klass.columns_hash["wealth"].default
|
|
347
|
-
assert_equal true, person_klass.columns_hash["wealth"].null
|
|
348
|
-
end
|
|
349
|
-
|
|
350
|
-
# change_column_null, make it not nullable and set null values to a default value
|
|
351
|
-
unless current_adapter?(:IBM_DBAdapter)
|
|
352
|
-
person_klass.connection.execute('UPDATE testings SET money = NULL')
|
|
353
|
-
person_klass.connection.change_column_null "testings", "money", false, 2000
|
|
354
|
-
person_klass.reset_column_information
|
|
355
|
-
assert_nil person_klass.columns_hash["money"].default
|
|
356
|
-
assert_equal false, person_klass.columns_hash["money"].null
|
|
357
|
-
assert_equal [2000], Person.connection.select_values("SELECT money FROM testings").map { |s| s.to_i }.sort
|
|
358
|
-
else
|
|
359
|
-
# Trying to set the value of the column wealth to NULL and
|
|
360
|
-
# in the next statement a not null constraint is being applied which is wrong
|
|
361
|
-
#person_klass.connection.execute('UPDATE testings SET money = NULL')
|
|
362
|
-
person_klass.connection.change_column_null "testings", "wealth", false, 2000
|
|
363
|
-
person_klass.reset_column_information
|
|
364
|
-
#assert_nil person_klass.columns_hash["wealth"].default #Setting default to 2000 and expecting nil is nor correct
|
|
365
|
-
assert_not_nil person_klass.columns_hash["wealth"].default
|
|
366
|
-
assert_equal false, person_klass.columns_hash["wealth"].null
|
|
367
|
-
#Changing default does not change the already inserted value. Hence expecting 2000 is wrong.
|
|
368
|
-
assert_equal [99], Person.connection.select_values("SELECT wealth FROM testings").map { |s| s.to_i }.sort
|
|
369
|
-
end
|
|
370
|
-
end
|
|
371
|
-
|
|
372
|
-
def test_change_column_null
|
|
373
|
-
testing_table_with_only_foo_attribute do
|
|
374
|
-
notnull_migration = Class.new(ActiveRecord::Migration) do
|
|
375
|
-
def change
|
|
376
|
-
change_column_null :testings, :foo, false
|
|
377
|
-
end
|
|
378
|
-
end
|
|
379
|
-
notnull_migration.new.suppress_messages do
|
|
380
|
-
notnull_migration.migrate(:up)
|
|
381
|
-
assert_equal false, connection.columns(:testings).find{ |c| c.name == "foo"}.null
|
|
382
|
-
notnull_migration.migrate(:down)
|
|
383
|
-
assert connection.columns(:testings).find{ |c| c.name == "foo"}.null
|
|
384
|
-
end
|
|
385
|
-
end
|
|
386
|
-
end
|
|
387
|
-
|
|
388
|
-
def test_column_exists
|
|
389
|
-
connection.create_table :testings do |t|
|
|
390
|
-
t.column :foo, :string
|
|
391
|
-
end
|
|
392
|
-
|
|
393
|
-
assert connection.column_exists?(:testings, :foo)
|
|
394
|
-
assert_not connection.column_exists?(:testings, :bar)
|
|
395
|
-
end
|
|
396
|
-
|
|
397
|
-
def test_column_exists_with_type
|
|
398
|
-
connection.create_table :testings do |t|
|
|
399
|
-
t.column :foo, :string
|
|
400
|
-
t.column :bar, :decimal, :precision => 8, :scale => 2
|
|
401
|
-
end
|
|
402
|
-
|
|
403
|
-
assert connection.column_exists?(:testings, :foo, :string)
|
|
404
|
-
assert_not connection.column_exists?(:testings, :foo, :integer)
|
|
405
|
-
|
|
406
|
-
assert connection.column_exists?(:testings, :bar, :decimal)
|
|
407
|
-
assert_not connection.column_exists?(:testings, :bar, :integer)
|
|
408
|
-
end
|
|
409
|
-
|
|
410
|
-
def test_column_exists_with_definition
|
|
411
|
-
connection.create_table :testings do |t|
|
|
412
|
-
t.column :foo, :string, limit: 100
|
|
413
|
-
t.column :bar, :decimal, precision: 8, scale: 2
|
|
414
|
-
t.column :taggable_id, :integer, null: false
|
|
415
|
-
t.column :taggable_type, :string, default: 'Photo'
|
|
416
|
-
end
|
|
417
|
-
|
|
418
|
-
assert connection.column_exists?(:testings, :foo, :string, limit: 100)
|
|
419
|
-
assert_not connection.column_exists?(:testings, :foo, :string, limit: nil)
|
|
420
|
-
assert connection.column_exists?(:testings, :bar, :decimal, precision: 8, scale: 2)
|
|
421
|
-
assert_not connection.column_exists?(:testings, :bar, :decimal, precision: nil, scale: nil)
|
|
422
|
-
assert connection.column_exists?(:testings, :taggable_id, :integer, null: false)
|
|
423
|
-
assert_not connection.column_exists?(:testings, :taggable_id, :integer, null: true)
|
|
424
|
-
assert connection.column_exists?(:testings, :taggable_type, :string, default: 'Photo')
|
|
425
|
-
assert_not connection.column_exists?(:testings, :taggable_type, :string, default: nil)
|
|
426
|
-
end
|
|
427
|
-
|
|
428
|
-
def test_column_exists_on_table_with_no_options_parameter_supplied
|
|
429
|
-
connection.create_table :testings do |t|
|
|
430
|
-
t.string :foo
|
|
431
|
-
end
|
|
432
|
-
connection.change_table :testings do |t|
|
|
433
|
-
assert t.column_exists?(:foo)
|
|
434
|
-
assert !(t.column_exists?(:bar))
|
|
435
|
-
end
|
|
436
|
-
end
|
|
437
|
-
|
|
438
|
-
private
|
|
439
|
-
def testing_table_with_only_foo_attribute
|
|
440
|
-
connection.create_table :testings, :id => false do |t|
|
|
441
|
-
t.column :foo, :string
|
|
442
|
-
end
|
|
443
|
-
|
|
444
|
-
yield
|
|
445
|
-
end
|
|
446
|
-
end
|
|
447
|
-
end
|
|
448
|
-
end
|
|
@@ -1,325 +0,0 @@
|
|
|
1
|
-
require 'cases/helper'
|
|
2
|
-
require 'support/ddl_helper'
|
|
3
|
-
require 'support/schema_dumping_helper'
|
|
4
|
-
|
|
5
|
-
if ActiveRecord::Base.connection.supports_foreign_keys?
|
|
6
|
-
module ActiveRecord
|
|
7
|
-
class Migration
|
|
8
|
-
class ForeignKeyTest < ActiveRecord::TestCase
|
|
9
|
-
include DdlHelper
|
|
10
|
-
include SchemaDumpingHelper
|
|
11
|
-
|
|
12
|
-
class Rocket < ActiveRecord::Base
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
class Astronaut < ActiveRecord::Base
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
setup do
|
|
19
|
-
@connection = ActiveRecord::Base.connection
|
|
20
|
-
@connection.create_table "rockets", force: true do |t|
|
|
21
|
-
t.string :name
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
@connection.create_table "astronauts", force: true do |t|
|
|
25
|
-
t.string :name
|
|
26
|
-
t.references :rocket
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
teardown do
|
|
32
|
-
if defined?(@connection)
|
|
33
|
-
#@connection.drop_table "astronauts" if @connection.table_exists? 'astronauts'
|
|
34
|
-
#@connection.drop_table "rockets" if @connection.table_exists? 'rockets'
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def test_foreign_keys
|
|
39
|
-
foreign_keys = @connection.foreign_keys("fk_test_has_fk")
|
|
40
|
-
assert_equal 1, foreign_keys.size
|
|
41
|
-
|
|
42
|
-
fk = foreign_keys.first
|
|
43
|
-
if current_adapter?(:IBM_DBAdapter)
|
|
44
|
-
assert_equal "fk_test_has_fk".upcase, fk.from_table.upcase
|
|
45
|
-
assert_equal "fk_test_has_pk".upcase, fk.to_table.upcase
|
|
46
|
-
else
|
|
47
|
-
assert_equal "fk_test_has_fk", fk.from_table
|
|
48
|
-
assert_equal "fk_test_has_pk", fk.to_table
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
assert_equal "fk_id", fk.column
|
|
52
|
-
assert_equal "pk_id", fk.primary_key
|
|
53
|
-
assert_equal "fk_name", fk.name
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def test_add_foreign_key_inferes_column
|
|
57
|
-
@connection.add_foreign_key :astronauts, :rockets
|
|
58
|
-
|
|
59
|
-
foreign_keys = @connection.foreign_keys("astronauts")
|
|
60
|
-
assert_equal 1, foreign_keys.size
|
|
61
|
-
|
|
62
|
-
fk = foreign_keys.first
|
|
63
|
-
if current_adapter?(:IBM_DBAdapter)
|
|
64
|
-
assert_equal "astronauts".upcase, fk.from_table.upcase
|
|
65
|
-
else
|
|
66
|
-
assert_equal "astronauts", fk.from_table
|
|
67
|
-
end
|
|
68
|
-
assert_equal "rockets", fk.to_table
|
|
69
|
-
assert_equal "rocket_id", fk.column
|
|
70
|
-
assert_equal "id", fk.primary_key
|
|
71
|
-
assert_equal("fk_rails_78146ddd2e", fk.name)
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
def test_add_foreign_key_with_column
|
|
75
|
-
@connection.add_foreign_key :astronauts, :rockets, column: "rocket_id"
|
|
76
|
-
|
|
77
|
-
foreign_keys = @connection.foreign_keys("astronauts")
|
|
78
|
-
assert_equal 1, foreign_keys.size
|
|
79
|
-
|
|
80
|
-
fk = foreign_keys.first
|
|
81
|
-
if current_adapter?(:IBM_DBAdapter)
|
|
82
|
-
assert_equal "astronauts".upcase, fk.from_table.upcase
|
|
83
|
-
else
|
|
84
|
-
assert_equal "astronauts", fk.from_table
|
|
85
|
-
end
|
|
86
|
-
assert_equal "rockets", fk.to_table
|
|
87
|
-
assert_equal "rocket_id", fk.column
|
|
88
|
-
assert_equal "id", fk.primary_key
|
|
89
|
-
assert_equal("fk_rails_78146ddd2e", fk.name)
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
def test_add_foreign_key_with_non_standard_primary_key
|
|
93
|
-
#@connection.create_table :space_shuttles, force: true, id: false do |t|
|
|
94
|
-
# t.primary_key :pk
|
|
95
|
-
#end
|
|
96
|
-
with_example_table @connection, "space_shuttles", "pk integer PRIMARY KEY" do
|
|
97
|
-
@connection.add_foreign_key(:astronauts, :space_shuttles,
|
|
98
|
-
column: "rocket_id", primary_key: "pk", name: "custom_pk")
|
|
99
|
-
|
|
100
|
-
foreign_keys = @connection.foreign_keys("astronauts")
|
|
101
|
-
assert_equal 1, foreign_keys.size
|
|
102
|
-
|
|
103
|
-
fk = foreign_keys.first
|
|
104
|
-
if current_adapter?(:IBM_DBAdapter)
|
|
105
|
-
assert_equal "astronauts".upcase, fk.from_table.upcase
|
|
106
|
-
else
|
|
107
|
-
assert_equal "astronauts", fk.from_table
|
|
108
|
-
end
|
|
109
|
-
assert_equal "space_shuttles", fk.to_table
|
|
110
|
-
assert_equal "pk", fk.primary_key
|
|
111
|
-
|
|
112
|
-
@connection.remove_foreign_key :astronauts, name: "custom_pk"
|
|
113
|
-
end
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
def test_add_on_delete_restrict_foreign_key
|
|
117
|
-
@connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :restrict
|
|
118
|
-
|
|
119
|
-
foreign_keys = @connection.foreign_keys("astronauts")
|
|
120
|
-
assert_equal 1, foreign_keys.size
|
|
121
|
-
|
|
122
|
-
fk = foreign_keys.first
|
|
123
|
-
if current_adapter?(:MysqlAdapter, :Mysql2Adapter)
|
|
124
|
-
# ON DELETE RESTRICT is the default on MySQL
|
|
125
|
-
assert_equal "noaction", fk.on_delete
|
|
126
|
-
elsif current_adapter?(:IBM_DBAdapter)
|
|
127
|
-
assert_equal :noaction, fk.on_update
|
|
128
|
-
else
|
|
129
|
-
assert_equal :restrict, fk.on_delete
|
|
130
|
-
end
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
def test_add_on_delete_cascade_foreign_key
|
|
134
|
-
@connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :cascade
|
|
135
|
-
|
|
136
|
-
foreign_keys = @connection.foreign_keys("astronauts")
|
|
137
|
-
assert_equal 1, foreign_keys.size
|
|
138
|
-
|
|
139
|
-
fk = foreign_keys.first
|
|
140
|
-
|
|
141
|
-
if current_adapter?(:IBM_DBAdapter)
|
|
142
|
-
assert_equal :noaction, fk.on_update
|
|
143
|
-
else
|
|
144
|
-
assert_equal :cascade, fk.on_delete
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
def test_add_on_delete_nullify_foreign_key
|
|
150
|
-
@connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :nullify
|
|
151
|
-
|
|
152
|
-
foreign_keys = @connection.foreign_keys("astronauts")
|
|
153
|
-
assert_equal 1, foreign_keys.size
|
|
154
|
-
|
|
155
|
-
fk = foreign_keys.first
|
|
156
|
-
|
|
157
|
-
if current_adapter?(:IBM_DBAdapter)
|
|
158
|
-
assert_equal :noaction, fk.on_update
|
|
159
|
-
else
|
|
160
|
-
assert_equal :nullify, fk.on_delete
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
def test_on_update_and_on_delete_raises_with_invalid_values
|
|
166
|
-
assert_raises ArgumentError do
|
|
167
|
-
@connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :invalid
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
assert_raises ArgumentError do
|
|
171
|
-
@connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_update: :invalid
|
|
172
|
-
end
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
def test_add_foreign_key_with_on_update
|
|
176
|
-
#@connection.add_foreign_key :astronauts, :rockets, column: "rocket_id" , on_update: :nullify
|
|
177
|
-
@connection.add_foreign_key :astronauts, :rockets, column: "rocket_id"
|
|
178
|
-
|
|
179
|
-
foreign_keys = @connection.foreign_keys("astronauts")
|
|
180
|
-
assert_equal 1, foreign_keys.size
|
|
181
|
-
|
|
182
|
-
fk = foreign_keys.first
|
|
183
|
-
|
|
184
|
-
if current_adapter?(:IBM_DBAdapter)
|
|
185
|
-
assert_equal :noaction, fk.on_update
|
|
186
|
-
else
|
|
187
|
-
assert_equal :nullify, fk.on_update
|
|
188
|
-
end
|
|
189
|
-
|
|
190
|
-
end
|
|
191
|
-
|
|
192
|
-
def test_remove_foreign_key_inferes_column
|
|
193
|
-
@connection.add_foreign_key :astronauts, :rockets
|
|
194
|
-
|
|
195
|
-
assert_equal 1, @connection.foreign_keys("astronauts").size
|
|
196
|
-
@connection.remove_foreign_key :astronauts, :rockets
|
|
197
|
-
assert_equal [], @connection.foreign_keys("astronauts")
|
|
198
|
-
end
|
|
199
|
-
|
|
200
|
-
def test_remove_foreign_key_by_column
|
|
201
|
-
@connection.add_foreign_key :astronauts, :rockets, column: "rocket_id"
|
|
202
|
-
|
|
203
|
-
assert_equal 1, @connection.foreign_keys("astronauts").size
|
|
204
|
-
@connection.remove_foreign_key :astronauts, column: "rocket_id"
|
|
205
|
-
assert_equal [], @connection.foreign_keys("astronauts")
|
|
206
|
-
end
|
|
207
|
-
|
|
208
|
-
def test_remove_foreign_key_by_symbol_column
|
|
209
|
-
@connection.add_foreign_key :astronauts, :rockets, column: :rocket_id
|
|
210
|
-
|
|
211
|
-
assert_equal 1, @connection.foreign_keys("astronauts").size
|
|
212
|
-
@connection.remove_foreign_key :astronauts, column: :rocket_id
|
|
213
|
-
assert_equal [], @connection.foreign_keys("astronauts")
|
|
214
|
-
end
|
|
215
|
-
|
|
216
|
-
def test_remove_foreign_key_by_name
|
|
217
|
-
@connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", name: "fancy_named_fk"
|
|
218
|
-
|
|
219
|
-
assert_equal 1, @connection.foreign_keys("astronauts").size
|
|
220
|
-
@connection.remove_foreign_key :astronauts, name: "fancy_named_fk"
|
|
221
|
-
assert_equal [], @connection.foreign_keys("astronauts")
|
|
222
|
-
end
|
|
223
|
-
|
|
224
|
-
def test_remove_foreign_non_existing_foreign_key_raises
|
|
225
|
-
assert_raises ArgumentError do
|
|
226
|
-
@connection.remove_foreign_key :astronauts, :rockets
|
|
227
|
-
end
|
|
228
|
-
end
|
|
229
|
-
|
|
230
|
-
def test_schema_dumping
|
|
231
|
-
@connection.add_foreign_key :astronauts, :rockets
|
|
232
|
-
output = dump_table_schema "astronauts"
|
|
233
|
-
assert_match %r{\s+add_foreign_key "astronauts", "rockets"$}, output
|
|
234
|
-
end
|
|
235
|
-
|
|
236
|
-
def test_schema_dumping_with_options
|
|
237
|
-
output = dump_table_schema "fk_test_has_fk"
|
|
238
|
-
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
|
|
239
|
-
end
|
|
240
|
-
|
|
241
|
-
def test_schema_dumping_on_delete_and_on_update_options
|
|
242
|
-
#@connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :nullify, on_update: :cascade
|
|
243
|
-
@connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :nullify, on_update: :restrict
|
|
244
|
-
|
|
245
|
-
output = dump_table_schema "astronauts"
|
|
246
|
-
#assert_match %r{\s+add_foreign_key "astronauts",.+on_update: :cascade,.+on_delete: :nullify$}, output
|
|
247
|
-
assert_match %r{\s+add_foreign_key "astronauts",.+on_update: :restrict,.+on_delete: :nullify$}, output
|
|
248
|
-
end
|
|
249
|
-
|
|
250
|
-
class CreateCitiesAndHousesMigration < ActiveRecord::Migration
|
|
251
|
-
def change
|
|
252
|
-
create_table("cities") { |t| }
|
|
253
|
-
|
|
254
|
-
create_table("houses") do |t|
|
|
255
|
-
t.column :city_id, :integer
|
|
256
|
-
end
|
|
257
|
-
add_foreign_key :houses, :cities, column: "city_id"
|
|
258
|
-
end
|
|
259
|
-
end
|
|
260
|
-
|
|
261
|
-
def test_add_foreign_key_is_reversible
|
|
262
|
-
migration = CreateCitiesAndHousesMigration.new
|
|
263
|
-
silence_stream($stdout) { migration.migrate(:up) }
|
|
264
|
-
assert_equal 1, @connection.foreign_keys("houses").size
|
|
265
|
-
ensure
|
|
266
|
-
silence_stream($stdout) { migration.migrate(:down) }
|
|
267
|
-
end
|
|
268
|
-
class CreateSchoolsAndClassesMigration < ActiveRecord::Migration
|
|
269
|
-
def change
|
|
270
|
-
create_table(:schools)
|
|
271
|
-
|
|
272
|
-
create_table(:classes) do |t|
|
|
273
|
-
t.column :school_id, :integer
|
|
274
|
-
end
|
|
275
|
-
add_foreign_key :classes, :schools
|
|
276
|
-
end
|
|
277
|
-
end
|
|
278
|
-
|
|
279
|
-
def test_add_foreign_key_with_prefix
|
|
280
|
-
ActiveRecord::Base.table_name_prefix = 'p_'
|
|
281
|
-
migration = CreateSchoolsAndClassesMigration.new
|
|
282
|
-
silence_stream($stdout) { migration.migrate(:up) }
|
|
283
|
-
assert_equal 1, @connection.foreign_keys("p_classes").size
|
|
284
|
-
ensure
|
|
285
|
-
silence_stream($stdout) { migration.migrate(:down) }
|
|
286
|
-
ActiveRecord::Base.table_name_prefix = nil
|
|
287
|
-
end
|
|
288
|
-
|
|
289
|
-
def test_add_foreign_key_with_suffix
|
|
290
|
-
ActiveRecord::Base.table_name_suffix = '_s'
|
|
291
|
-
migration = CreateSchoolsAndClassesMigration.new
|
|
292
|
-
silence_stream($stdout) { migration.migrate(:up) }
|
|
293
|
-
assert_equal 1, @connection.foreign_keys("classes_s").size
|
|
294
|
-
ensure
|
|
295
|
-
silence_stream($stdout) { migration.migrate(:down) }
|
|
296
|
-
ActiveRecord::Base.table_name_suffix = nil
|
|
297
|
-
end
|
|
298
|
-
end
|
|
299
|
-
end
|
|
300
|
-
end
|
|
301
|
-
else
|
|
302
|
-
module ActiveRecord
|
|
303
|
-
class Migration
|
|
304
|
-
class NoForeignKeySupportTest < ActiveRecord::TestCase
|
|
305
|
-
setup do
|
|
306
|
-
@connection = ActiveRecord::Base.connection
|
|
307
|
-
end
|
|
308
|
-
|
|
309
|
-
def test_add_foreign_key_should_be_noop
|
|
310
|
-
@connection.add_foreign_key :clubs, :categories
|
|
311
|
-
end
|
|
312
|
-
|
|
313
|
-
def test_remove_foreign_key_should_be_noop
|
|
314
|
-
@connection.remove_foreign_key :clubs, :categories
|
|
315
|
-
end
|
|
316
|
-
|
|
317
|
-
def test_foreign_keys_should_raise_not_implemented
|
|
318
|
-
assert_raises NotImplementedError do
|
|
319
|
-
@connection.foreign_keys("clubs")
|
|
320
|
-
end
|
|
321
|
-
end
|
|
322
|
-
end
|
|
323
|
-
end
|
|
324
|
-
end
|
|
325
|
-
end
|