ibm_db 4.0.0-x86-mingw32 → 5.0.2-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/MANIFEST +14 -14
- data/README +208 -208
- data/ext/Makefile +269 -0
- data/ext/Makefile.nt32 +181 -181
- data/ext/Makefile.nt32.191 +212 -212
- data/ext/extconf.rb +322 -291
- data/ext/gil_release_version +3 -0
- data/ext/ibm_db.c +11879 -11887
- data/ext/mkmf.log +110 -0
- 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/ext/unicode_support_version +3 -0
- data/init.rb +41 -41
- data/lib/IBM_DB.rb +27 -27
- data/lib/active_record/connection_adapters/ibm_db_adapter.rb +3533 -3452
- data/lib/active_record/connection_adapters/ibmdb_adapter.rb +5 -5
- data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -328
- data/lib/mswin32/ibm_db.rb +90 -90
- data/lib/mswin32/rb2x/i386/ibm_db.so +0 -0
- data/test/active_record/connection_adapters/fake_adapter.rb +49 -49
- data/test/assets/example.log +1 -1
- data/test/assets/test.txt +1 -1
- data/test/cases/adapter_test.rb +351 -351
- data/test/cases/adapters/mysql2/active_schema_test.rb +193 -193
- data/test/cases/adapters/mysql2/bind_parameter_test.rb +50 -50
- data/test/cases/adapters/mysql2/boolean_test.rb +100 -100
- data/test/cases/adapters/mysql2/case_sensitivity_test.rb +63 -63
- data/test/cases/adapters/mysql2/charset_collation_test.rb +54 -54
- data/test/cases/adapters/mysql2/connection_test.rb +210 -210
- data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +45 -45
- data/test/cases/adapters/mysql2/enum_test.rb +26 -26
- data/test/cases/adapters/mysql2/explain_test.rb +21 -21
- data/test/cases/adapters/mysql2/json_test.rb +195 -195
- data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +83 -83
- data/test/cases/adapters/mysql2/reserved_word_test.rb +152 -152
- data/test/cases/adapters/mysql2/schema_migrations_test.rb +59 -59
- data/test/cases/adapters/mysql2/schema_test.rb +126 -126
- data/test/cases/adapters/mysql2/sp_test.rb +36 -36
- data/test/cases/adapters/mysql2/sql_types_test.rb +14 -14
- data/test/cases/adapters/mysql2/table_options_test.rb +42 -42
- data/test/cases/adapters/mysql2/unsigned_type_test.rb +66 -66
- data/test/cases/adapters/postgresql/active_schema_test.rb +98 -98
- data/test/cases/adapters/postgresql/array_test.rb +339 -339
- data/test/cases/adapters/postgresql/bit_string_test.rb +82 -82
- data/test/cases/adapters/postgresql/bytea_test.rb +134 -134
- data/test/cases/adapters/postgresql/case_insensitive_test.rb +26 -26
- data/test/cases/adapters/postgresql/change_schema_test.rb +38 -38
- data/test/cases/adapters/postgresql/cidr_test.rb +25 -25
- data/test/cases/adapters/postgresql/citext_test.rb +78 -78
- data/test/cases/adapters/postgresql/collation_test.rb +53 -53
- data/test/cases/adapters/postgresql/composite_test.rb +132 -132
- data/test/cases/adapters/postgresql/connection_test.rb +257 -257
- data/test/cases/adapters/postgresql/datatype_test.rb +92 -92
- data/test/cases/adapters/postgresql/domain_test.rb +47 -47
- data/test/cases/adapters/postgresql/enum_test.rb +91 -91
- data/test/cases/adapters/postgresql/explain_test.rb +20 -20
- data/test/cases/adapters/postgresql/extension_migration_test.rb +63 -63
- data/test/cases/adapters/postgresql/full_text_test.rb +44 -44
- data/test/cases/adapters/postgresql/geometric_test.rb +378 -378
- data/test/cases/adapters/postgresql/hstore_test.rb +382 -382
- data/test/cases/adapters/postgresql/infinity_test.rb +69 -69
- data/test/cases/adapters/postgresql/integer_test.rb +25 -25
- data/test/cases/adapters/postgresql/json_test.rb +237 -237
- data/test/cases/adapters/postgresql/ltree_test.rb +53 -53
- data/test/cases/adapters/postgresql/money_test.rb +96 -96
- data/test/cases/adapters/postgresql/network_test.rb +94 -94
- data/test/cases/adapters/postgresql/numbers_test.rb +49 -49
- data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +405 -405
- data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -22
- data/test/cases/adapters/postgresql/quoting_test.rb +44 -44
- data/test/cases/adapters/postgresql/range_test.rb +343 -343
- data/test/cases/adapters/postgresql/referential_integrity_test.rb +111 -111
- data/test/cases/adapters/postgresql/rename_table_test.rb +34 -34
- data/test/cases/adapters/postgresql/schema_authorization_test.rb +119 -119
- data/test/cases/adapters/postgresql/schema_test.rb +597 -597
- data/test/cases/adapters/postgresql/serial_test.rb +154 -154
- data/test/cases/adapters/postgresql/statement_pool_test.rb +41 -41
- data/test/cases/adapters/postgresql/timestamp_test.rb +90 -90
- data/test/cases/adapters/postgresql/type_lookup_test.rb +33 -33
- data/test/cases/adapters/postgresql/utils_test.rb +62 -62
- data/test/cases/adapters/postgresql/uuid_test.rb +294 -294
- data/test/cases/adapters/postgresql/xml_test.rb +54 -54
- data/test/cases/adapters/sqlite3/collation_test.rb +53 -53
- data/test/cases/adapters/sqlite3/copy_table_test.rb +98 -98
- data/test/cases/adapters/sqlite3/explain_test.rb +21 -21
- data/test/cases/adapters/sqlite3/quoting_test.rb +101 -101
- data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +441 -441
- data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +24 -24
- data/test/cases/adapters/sqlite3/statement_pool_test.rb +20 -20
- data/test/cases/aggregations_test.rb +168 -168
- data/test/cases/ar_schema_test.rb +146 -146
- data/test/cases/associations/association_scope_test.rb +16 -16
- data/test/cases/associations/belongs_to_associations_test.rb +1141 -1141
- data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +41 -41
- data/test/cases/associations/callbacks_test.rb +190 -190
- 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 -126
- data/test/cases/associations/eager_singularization_test.rb +148 -148
- data/test/cases/associations/eager_test.rb +1514 -1514
- data/test/cases/associations/extension_test.rb +87 -87
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +1004 -1004
- data/test/cases/associations/has_many_associations_test.rb +2501 -2501
- data/test/cases/associations/has_many_through_associations_test.rb +1271 -1271
- data/test/cases/associations/has_one_associations_test.rb +707 -707
- data/test/cases/associations/has_one_through_associations_test.rb +383 -383
- data/test/cases/associations/inner_join_association_test.rb +139 -139
- data/test/cases/associations/inverse_associations_test.rb +733 -733
- data/test/cases/associations/join_model_test.rb +777 -777
- data/test/cases/associations/left_outer_join_association_test.rb +88 -88
- data/test/cases/associations/nested_through_associations_test.rb +579 -579
- data/test/cases/associations/required_test.rb +102 -102
- data/test/cases/associations_test.rb +385 -385
- data/test/cases/attribute_decorators_test.rb +126 -125
- data/test/cases/attribute_methods/read_test.rb +60 -60
- data/test/cases/attribute_methods_test.rb +1009 -1009
- data/test/cases/attribute_set_test.rb +270 -270
- data/test/cases/attribute_test.rb +246 -246
- data/test/cases/attributes_test.rb +253 -253
- data/test/cases/autosave_association_test.rb +1708 -1708
- data/test/cases/base_test.rb +1713 -1713
- data/test/cases/batches_test.rb +489 -489
- data/test/cases/binary_test.rb +44 -44
- data/test/cases/bind_parameter_test.rb +110 -110
- data/test/cases/cache_key_test.rb +26 -25
- data/test/cases/calculations_test.rb +798 -798
- data/test/cases/callbacks_test.rb +636 -636
- data/test/cases/clone_test.rb +40 -40
- data/test/cases/coders/json_test.rb +15 -15
- data/test/cases/coders/yaml_column_test.rb +63 -63
- data/test/cases/collection_cache_key_test.rb +115 -115
- data/test/cases/column_alias_test.rb +17 -17
- data/test/cases/column_definition_test.rb +92 -92
- data/test/cases/comment_test.rb +145 -143
- data/test/cases/connection_adapters/adapter_leasing_test.rb +56 -56
- data/test/cases/connection_adapters/connection_handler_test.rb +160 -160
- 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 -255
- data/test/cases/connection_adapters/mysql_type_lookup_test.rb +69 -69
- data/test/cases/connection_adapters/quoting_test.rb +13 -13
- data/test/cases/connection_adapters/schema_cache_test.rb +61 -61
- data/test/cases/connection_adapters/type_lookup_test.rb +118 -118
- data/test/cases/connection_management_test.rb +112 -112
- data/test/cases/connection_pool_test.rb +521 -521
- data/test/cases/connection_specification/resolver_test.rb +131 -131
- data/test/cases/core_test.rb +112 -112
- data/test/cases/counter_cache_test.rb +214 -214
- data/test/cases/custom_locking_test.rb +17 -17
- data/test/cases/database_statements_test.rb +34 -34
- data/test/cases/date_test.rb +44 -44
- data/test/cases/date_time_precision_test.rb +107 -106
- data/test/cases/date_time_test.rb +61 -61
- data/test/cases/defaults_test.rb +219 -218
- data/test/cases/dirty_test.rb +763 -763
- data/test/cases/disconnected_test.rb +30 -30
- data/test/cases/dup_test.rb +157 -157
- data/test/cases/enum_test.rb +444 -444
- data/test/cases/errors_test.rb +16 -16
- data/test/cases/explain_subscriber_test.rb +64 -64
- data/test/cases/explain_test.rb +87 -87
- data/test/cases/finder_respond_to_test.rb +60 -60
- data/test/cases/finder_test.rb +1294 -1294
- data/test/cases/fixture_set/file_test.rb +156 -156
- data/test/cases/fixtures_test.rb +988 -988
- data/test/cases/forbidden_attributes_protection_test.rb +165 -165
- data/test/cases/habtm_destroy_order_test.rb +61 -61
- data/test/cases/helper.rb +204 -204
- data/test/cases/hot_compatibility_test.rb +142 -142
- data/test/cases/i18n_test.rb +45 -45
- data/test/cases/inheritance_test.rb +606 -606
- data/test/cases/integration_test.rb +155 -155
- data/test/cases/invalid_connection_test.rb +24 -24
- data/test/cases/invertible_migration_test.rb +387 -387
- data/test/cases/json_serialization_test.rb +311 -311
- data/test/cases/locking_test.rb +493 -493
- data/test/cases/log_subscriber_test.rb +225 -225
- data/test/cases/migration/change_schema_test.rb +458 -458
- data/test/cases/migration/change_table_test.rb +256 -256
- data/test/cases/migration/column_attributes_test.rb +176 -176
- data/test/cases/migration/column_positioning_test.rb +56 -56
- data/test/cases/migration/columns_test.rb +310 -310
- data/test/cases/migration/command_recorder_test.rb +350 -350
- data/test/cases/migration/compatibility_test.rb +118 -118
- data/test/cases/migration/create_join_table_test.rb +157 -157
- data/test/cases/migration/foreign_key_test.rb +362 -360
- data/test/cases/migration/helper.rb +39 -39
- data/test/cases/migration/index_test.rb +218 -218
- data/test/cases/migration/logger_test.rb +36 -36
- data/test/cases/migration/pending_migrations_test.rb +52 -52
- data/test/cases/migration/references_foreign_key_test.rb +221 -216
- data/test/cases/migration/references_index_test.rb +101 -101
- data/test/cases/migration/references_statements_test.rb +136 -136
- data/test/cases/migration/rename_table_test.rb +93 -93
- data/test/cases/migration_test.rb +1157 -1157
- data/test/cases/migrator_test.rb +471 -470
- data/test/cases/mixin_test.rb +68 -68
- data/test/cases/modules_test.rb +172 -172
- data/test/cases/multiparameter_attributes_test.rb +372 -372
- data/test/cases/multiple_db_test.rb +122 -122
- data/test/cases/nested_attributes_test.rb +1098 -1098
- data/test/cases/nested_attributes_with_callbacks_test.rb +144 -144
- data/test/cases/persistence_test.rb +1001 -1001
- data/test/cases/pooled_connections_test.rb +81 -81
- data/test/cases/primary_keys_test.rb +376 -376
- data/test/cases/query_cache_test.rb +446 -446
- data/test/cases/quoting_test.rb +202 -202
- data/test/cases/readonly_test.rb +119 -119
- data/test/cases/reaper_test.rb +85 -85
- data/test/cases/reflection_test.rb +509 -509
- data/test/cases/relation/delegation_test.rb +63 -63
- data/test/cases/relation/merging_test.rb +157 -157
- data/test/cases/relation/mutation_test.rb +183 -183
- data/test/cases/relation/or_test.rb +92 -92
- data/test/cases/relation/predicate_builder_test.rb +16 -16
- data/test/cases/relation/record_fetch_warning_test.rb +40 -40
- data/test/cases/relation/where_chain_test.rb +105 -105
- data/test/cases/relation/where_clause_test.rb +182 -182
- data/test/cases/relation/where_test.rb +322 -322
- data/test/cases/relation_test.rb +328 -328
- data/test/cases/relations_test.rb +2026 -2026
- data/test/cases/reload_models_test.rb +22 -22
- data/test/cases/result_test.rb +90 -90
- data/test/cases/sanitize_test.rb +176 -176
- data/test/cases/schema_dumper_test.rb +457 -457
- data/test/cases/schema_loading_test.rb +52 -52
- data/test/cases/scoping/default_scoping_test.rb +528 -528
- data/test/cases/scoping/named_scoping_test.rb +561 -561
- data/test/cases/scoping/relation_scoping_test.rb +400 -400
- data/test/cases/secure_token_test.rb +32 -32
- data/test/cases/serialization_test.rb +104 -104
- data/test/cases/serialized_attribute_test.rb +364 -364
- data/test/cases/statement_cache_test.rb +136 -136
- data/test/cases/store_test.rb +195 -195
- data/test/cases/suppressor_test.rb +63 -63
- data/test/cases/tasks/database_tasks_test.rb +462 -462
- data/test/cases/tasks/mysql_rake_test.rb +345 -345
- data/test/cases/tasks/postgresql_rake_test.rb +304 -304
- data/test/cases/tasks/sqlite_rake_test.rb +220 -220
- data/test/cases/test_case.rb +131 -131
- data/test/cases/test_fixtures_test.rb +36 -36
- data/test/cases/time_precision_test.rb +103 -102
- data/test/cases/timestamp_test.rb +501 -501
- data/test/cases/touch_later_test.rb +121 -121
- data/test/cases/transaction_callbacks_test.rb +518 -518
- data/test/cases/transaction_isolation_test.rb +106 -106
- data/test/cases/transactions_test.rb +835 -834
- data/test/cases/type/adapter_specific_registry_test.rb +133 -133
- data/test/cases/type/date_time_test.rb +14 -14
- data/test/cases/type/integer_test.rb +27 -27
- data/test/cases/type/string_test.rb +22 -22
- data/test/cases/type/type_map_test.rb +177 -177
- data/test/cases/type_test.rb +39 -39
- data/test/cases/types_test.rb +24 -24
- data/test/cases/unconnected_test.rb +33 -33
- data/test/cases/validations/absence_validation_test.rb +73 -73
- data/test/cases/validations/association_validation_test.rb +97 -97
- data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -84
- data/test/cases/validations/i18n_validation_test.rb +86 -86
- data/test/cases/validations/length_validation_test.rb +79 -79
- data/test/cases/validations/presence_validation_test.rb +103 -103
- data/test/cases/validations/uniqueness_validation_test.rb +548 -548
- data/test/cases/validations_repair_helper.rb +19 -19
- data/test/cases/validations_test.rb +194 -194
- data/test/cases/view_test.rb +216 -216
- data/test/cases/yaml_serialization_test.rb +121 -121
- data/test/config.example.yml +97 -97
- data/test/config.rb +5 -5
- data/test/connections/native_ibm_db/connection.rb +44 -0
- 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.yml +17 -17
- data/test/fixtures/author_favorites.yml +3 -3
- data/test/fixtures/authors.yml +23 -23
- data/test/fixtures/bad_posts.yml +9 -9
- data/test/fixtures/binaries.yml +133 -133
- data/test/fixtures/books.yml +31 -31
- 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 -3
- data/test/fixtures/content_positions.yml +3 -3
- 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 -5
- 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 -4
- 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 -2
- data/test/fixtures/naked/yml/trees.yml +3 -3
- data/test/fixtures/nodes.yml +29 -29
- data/test/fixtures/organizations.yml +5 -5
- data/test/fixtures/other_comments.yml +6 -6
- data/test/fixtures/other_dogs.yml +2 -2
- data/test/fixtures/other_posts.yml +7 -7
- 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 +12 -15
- data/test/fixtures/posts.yml +80 -80
- data/test/fixtures/price_estimates.yml +16 -16
- 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 -3
- 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/user.rb +40 -40
- data/test/models/aircraft.rb +5 -5
- data/test/models/arunit2_model.rb +3 -3
- data/test/models/author.rb +209 -209
- 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 -23
- data/test/models/boolean.rb +2 -2
- data/test/models/bulb.rb +52 -52
- data/test/models/cake_designer.rb +3 -3
- data/test/models/car.rb +29 -29
- data/test/models/carrier.rb +2 -2
- data/test/models/cat.rb +10 -10
- data/test/models/categorization.rb +19 -19
- data/test/models/category.rb +35 -35
- data/test/models/chef.rb +8 -8
- data/test/models/citation.rb +3 -3
- data/test/models/club.rb +25 -25
- 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 -76
- data/test/models/company.rb +230 -230
- 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 -40
- 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 -83
- 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 -274
- 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 -4
- data/test/models/hotel.rb +11 -11
- 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 -42
- data/test/models/member_detail.rb +8 -8
- data/test/models/member_type.rb +3 -3
- data/test/models/membership.rb +35 -35
- data/test/models/mentor.rb +2 -2
- 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 -2
- data/test/models/molecule.rb +6 -6
- data/test/models/movie.rb +5 -5
- data/test/models/node.rb +5 -5
- data/test/models/non_primary_key.rb +2 -2
- data/test/models/notification.rb +3 -3
- data/test/models/order.rb +4 -4
- data/test/models/organization.rb +14 -14
- data/test/models/other_dog.rb +5 -5
- data/test/models/owner.rb +37 -37
- data/test/models/parrot.rb +28 -28
- data/test/models/person.rb +142 -142
- data/test/models/personal_legacy_thing.rb +4 -4
- data/test/models/pet.rb +18 -18
- data/test/models/pet_treasure.rb +6 -6
- data/test/models/pirate.rb +92 -92
- data/test/models/possession.rb +3 -3
- data/test/models/post.rb +273 -273
- data/test/models/price_estimate.rb +4 -4
- data/test/models/professor.rb +5 -5
- data/test/models/project.rb +40 -40
- 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/rating.rb +4 -4
- data/test/models/reader.rb +23 -23
- data/test/models/recipe.rb +3 -3
- 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 -39
- 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 -13
- data/test/models/tagging.rb +13 -13
- data/test/models/task.rb +5 -5
- data/test/models/topic.rb +118 -118
- 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 -3
- data/test/models/tuning_peg.rb +4 -4
- data/test/models/tyre.rb +11 -11
- data/test/models/user.rb +14 -14
- data/test/models/uuid_child.rb +3 -3
- data/test/models/uuid_item.rb +6 -6
- 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/i5/ibm_db_specific_schema.rb +137 -0
- data/test/schema/ids/ibm_db_specific_schema.rb +140 -0
- data/test/schema/luw/ibm_db_specific_schema.rb +137 -0
- data/test/schema/mysql2_specific_schema.rb +68 -68
- data/test/schema/oracle_specific_schema.rb +40 -40
- data/test/schema/postgresql_specific_schema.rb +114 -114
- data/test/schema/schema.rb +1057 -1057
- data/test/schema/schema.rb.original +1057 -1057
- data/test/schema/sqlite_specific_schema.rb +18 -18
- data/test/schema/zOS/ibm_db_specific_schema.rb +208 -0
- data/test/support/config.rb +43 -43
- data/test/support/connection.rb +23 -23
- 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 -22
- data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -182
- metadata +24 -13
- data/test/fixtures/author_addresses.original +0 -11
- data/test/fixtures/authors.original +0 -17
data/test/cases/helper.rb
CHANGED
@@ -1,204 +1,204 @@
|
|
1
|
-
require 'config'
|
2
|
-
|
3
|
-
require 'active_support/testing/autorun'
|
4
|
-
require 'active_support/testing/method_call_assertions'
|
5
|
-
require 'stringio'
|
6
|
-
|
7
|
-
require 'active_record'
|
8
|
-
require 'cases/test_case'
|
9
|
-
require 'active_support/dependencies'
|
10
|
-
require 'active_support/logger'
|
11
|
-
require 'active_support/core_ext/string/strip'
|
12
|
-
|
13
|
-
require 'support/config'
|
14
|
-
require 'support/connection'
|
15
|
-
|
16
|
-
# TODO: Move all these random hacks into the ARTest namespace and into the support/ dir
|
17
|
-
|
18
|
-
Thread.abort_on_exception = true
|
19
|
-
|
20
|
-
# Show backtraces for deprecated behavior for quicker cleanup.
|
21
|
-
ActiveSupport::Deprecation.debug = true
|
22
|
-
|
23
|
-
# Disable available locale checks to avoid warnings running the test suite.
|
24
|
-
I18n.enforce_available_locales = false
|
25
|
-
|
26
|
-
# Connect to the database
|
27
|
-
ARTest.connect
|
28
|
-
|
29
|
-
# Quote "type" if it's a reserved word for the current connection.
|
30
|
-
QUOTED_TYPE = ActiveRecord::Base.connection.quote_column_name('type')
|
31
|
-
|
32
|
-
# FIXME: Remove this when the deprecation cycle on TZ aware types by default ends.
|
33
|
-
ActiveRecord::Base.time_zone_aware_types << :time
|
34
|
-
|
35
|
-
def current_adapter?(*types)
|
36
|
-
types.any? do |type|
|
37
|
-
ActiveRecord::ConnectionAdapters.const_defined?(type) &&
|
38
|
-
ActiveRecord::Base.connection.is_a?(ActiveRecord::ConnectionAdapters.const_get(type))
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def in_memory_db?
|
43
|
-
current_adapter?(:SQLite3Adapter) &&
|
44
|
-
ActiveRecord::Base.connection_pool.spec.config[:database] == ":memory:"
|
45
|
-
end
|
46
|
-
|
47
|
-
def subsecond_precision_supported?
|
48
|
-
ActiveRecord::Base.connection.supports_datetime_with_precision?
|
49
|
-
end
|
50
|
-
|
51
|
-
def mysql_enforcing_gtid_consistency?
|
52
|
-
current_adapter?(:Mysql2Adapter) && 'ON' == ActiveRecord::Base.connection.show_variable('enforce_gtid_consistency')
|
53
|
-
end
|
54
|
-
|
55
|
-
def supports_savepoints?
|
56
|
-
ActiveRecord::Base.connection.supports_savepoints?
|
57
|
-
end
|
58
|
-
|
59
|
-
def with_env_tz(new_tz = 'US/Eastern')
|
60
|
-
old_tz, ENV['TZ'] = ENV['TZ'], new_tz
|
61
|
-
yield
|
62
|
-
ensure
|
63
|
-
old_tz ? ENV['TZ'] = old_tz : ENV.delete('TZ')
|
64
|
-
end
|
65
|
-
|
66
|
-
def with_timezone_config(cfg)
|
67
|
-
verify_default_timezone_config
|
68
|
-
|
69
|
-
old_default_zone = ActiveRecord::Base.default_timezone
|
70
|
-
old_awareness = ActiveRecord::Base.time_zone_aware_attributes
|
71
|
-
old_zone = Time.zone
|
72
|
-
|
73
|
-
if cfg.has_key?(:default)
|
74
|
-
ActiveRecord::Base.default_timezone = cfg[:default]
|
75
|
-
end
|
76
|
-
if cfg.has_key?(:aware_attributes)
|
77
|
-
ActiveRecord::Base.time_zone_aware_attributes = cfg[:aware_attributes]
|
78
|
-
end
|
79
|
-
if cfg.has_key?(:zone)
|
80
|
-
Time.zone = cfg[:zone]
|
81
|
-
end
|
82
|
-
yield
|
83
|
-
ensure
|
84
|
-
ActiveRecord::Base.default_timezone = old_default_zone
|
85
|
-
ActiveRecord::Base.time_zone_aware_attributes = old_awareness
|
86
|
-
Time.zone = old_zone
|
87
|
-
end
|
88
|
-
|
89
|
-
# This method makes sure that tests don't leak global state related to time zones.
|
90
|
-
EXPECTED_ZONE = nil
|
91
|
-
EXPECTED_DEFAULT_TIMEZONE = :utc
|
92
|
-
EXPECTED_TIME_ZONE_AWARE_ATTRIBUTES = false
|
93
|
-
def verify_default_timezone_config
|
94
|
-
if Time.zone != EXPECTED_ZONE
|
95
|
-
$stderr.puts <<-MSG
|
96
|
-
\n#{self}
|
97
|
-
Global state `Time.zone` was leaked.
|
98
|
-
Expected: #{EXPECTED_ZONE}
|
99
|
-
Got: #{Time.zone}
|
100
|
-
MSG
|
101
|
-
end
|
102
|
-
if ActiveRecord::Base.default_timezone != EXPECTED_DEFAULT_TIMEZONE
|
103
|
-
$stderr.puts <<-MSG
|
104
|
-
\n#{self}
|
105
|
-
Global state `ActiveRecord::Base.default_timezone` was leaked.
|
106
|
-
Expected: #{EXPECTED_DEFAULT_TIMEZONE}
|
107
|
-
Got: #{ActiveRecord::Base.default_timezone}
|
108
|
-
MSG
|
109
|
-
end
|
110
|
-
if ActiveRecord::Base.time_zone_aware_attributes != EXPECTED_TIME_ZONE_AWARE_ATTRIBUTES
|
111
|
-
$stderr.puts <<-MSG
|
112
|
-
\n#{self}
|
113
|
-
Global state `ActiveRecord::Base.time_zone_aware_attributes` was leaked.
|
114
|
-
Expected: #{EXPECTED_TIME_ZONE_AWARE_ATTRIBUTES}
|
115
|
-
Got: #{ActiveRecord::Base.time_zone_aware_attributes}
|
116
|
-
MSG
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
def enable_extension!(extension, connection)
|
121
|
-
return false unless connection.supports_extensions?
|
122
|
-
return connection.reconnect! if connection.extension_enabled?(extension)
|
123
|
-
|
124
|
-
connection.enable_extension extension
|
125
|
-
connection.commit_db_transaction if connection.transaction_open?
|
126
|
-
connection.reconnect!
|
127
|
-
end
|
128
|
-
|
129
|
-
def disable_extension!(extension, connection)
|
130
|
-
return false unless connection.supports_extensions?
|
131
|
-
return true unless connection.extension_enabled?(extension)
|
132
|
-
|
133
|
-
connection.disable_extension extension
|
134
|
-
connection.reconnect!
|
135
|
-
end
|
136
|
-
|
137
|
-
require "cases/validations_repair_helper"
|
138
|
-
class ActiveSupport::TestCase
|
139
|
-
include ActiveRecord::TestFixtures
|
140
|
-
include ActiveRecord::ValidationsRepairHelper
|
141
|
-
include ActiveSupport::Testing::MethodCallAssertions
|
142
|
-
|
143
|
-
self.fixture_path = FIXTURES_ROOT
|
144
|
-
self.use_instantiated_fixtures = false
|
145
|
-
self.use_transactional_tests = true
|
146
|
-
|
147
|
-
def create_fixtures(*fixture_set_names, &block)
|
148
|
-
ActiveRecord::FixtureSet.create_fixtures(ActiveSupport::TestCase.fixture_path, fixture_set_names, fixture_class_names, &block)
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
def load_schema
|
153
|
-
# silence verbose schema loading
|
154
|
-
original_stdout = $stdout
|
155
|
-
$stdout = StringIO.new
|
156
|
-
|
157
|
-
adapter_name = ActiveRecord::Base.connection.adapter_name.downcase
|
158
|
-
adapter_specific_schema_file = SCHEMA_ROOT + "/#{adapter_name}_specific_schema.rb"
|
159
|
-
|
160
|
-
load SCHEMA_ROOT + "/schema.rb"
|
161
|
-
|
162
|
-
if File.exist?(adapter_specific_schema_file)
|
163
|
-
load adapter_specific_schema_file
|
164
|
-
end
|
165
|
-
ensure
|
166
|
-
$stdout = original_stdout
|
167
|
-
end
|
168
|
-
|
169
|
-
load_schema
|
170
|
-
|
171
|
-
class SQLSubscriber
|
172
|
-
attr_reader :logged
|
173
|
-
attr_reader :payloads
|
174
|
-
|
175
|
-
def initialize
|
176
|
-
@logged = []
|
177
|
-
@payloads = []
|
178
|
-
end
|
179
|
-
|
180
|
-
def start(name, id, payload)
|
181
|
-
@payloads << payload
|
182
|
-
@logged << [payload[:sql].squish, payload[:name], payload[:binds]]
|
183
|
-
end
|
184
|
-
|
185
|
-
def finish(name, id, payload); end
|
186
|
-
end
|
187
|
-
|
188
|
-
module InTimeZone
|
189
|
-
private
|
190
|
-
|
191
|
-
def in_time_zone(zone)
|
192
|
-
old_zone = Time.zone
|
193
|
-
old_tz = ActiveRecord::Base.time_zone_aware_attributes
|
194
|
-
|
195
|
-
Time.zone = zone ? ActiveSupport::TimeZone[zone] : nil
|
196
|
-
ActiveRecord::Base.time_zone_aware_attributes = !zone.nil?
|
197
|
-
yield
|
198
|
-
ensure
|
199
|
-
Time.zone = old_zone
|
200
|
-
ActiveRecord::Base.time_zone_aware_attributes = old_tz
|
201
|
-
end
|
202
|
-
end
|
203
|
-
|
204
|
-
require 'mocha/setup' # FIXME: stop using mocha
|
1
|
+
require 'config'
|
2
|
+
|
3
|
+
require 'active_support/testing/autorun'
|
4
|
+
require 'active_support/testing/method_call_assertions'
|
5
|
+
require 'stringio'
|
6
|
+
|
7
|
+
require 'active_record'
|
8
|
+
require 'cases/test_case'
|
9
|
+
require 'active_support/dependencies'
|
10
|
+
require 'active_support/logger'
|
11
|
+
require 'active_support/core_ext/string/strip'
|
12
|
+
|
13
|
+
require 'support/config'
|
14
|
+
require 'support/connection'
|
15
|
+
|
16
|
+
# TODO: Move all these random hacks into the ARTest namespace and into the support/ dir
|
17
|
+
|
18
|
+
Thread.abort_on_exception = true
|
19
|
+
|
20
|
+
# Show backtraces for deprecated behavior for quicker cleanup.
|
21
|
+
ActiveSupport::Deprecation.debug = true
|
22
|
+
|
23
|
+
# Disable available locale checks to avoid warnings running the test suite.
|
24
|
+
I18n.enforce_available_locales = false
|
25
|
+
|
26
|
+
# Connect to the database
|
27
|
+
ARTest.connect
|
28
|
+
|
29
|
+
# Quote "type" if it's a reserved word for the current connection.
|
30
|
+
QUOTED_TYPE = ActiveRecord::Base.connection.quote_column_name('type')
|
31
|
+
|
32
|
+
# FIXME: Remove this when the deprecation cycle on TZ aware types by default ends.
|
33
|
+
ActiveRecord::Base.time_zone_aware_types << :time
|
34
|
+
|
35
|
+
def current_adapter?(*types)
|
36
|
+
types.any? do |type|
|
37
|
+
ActiveRecord::ConnectionAdapters.const_defined?(type) &&
|
38
|
+
ActiveRecord::Base.connection.is_a?(ActiveRecord::ConnectionAdapters.const_get(type))
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def in_memory_db?
|
43
|
+
current_adapter?(:SQLite3Adapter) &&
|
44
|
+
ActiveRecord::Base.connection_pool.spec.config[:database] == ":memory:"
|
45
|
+
end
|
46
|
+
|
47
|
+
def subsecond_precision_supported?
|
48
|
+
ActiveRecord::Base.connection.supports_datetime_with_precision?
|
49
|
+
end
|
50
|
+
|
51
|
+
def mysql_enforcing_gtid_consistency?
|
52
|
+
current_adapter?(:Mysql2Adapter) && 'ON' == ActiveRecord::Base.connection.show_variable('enforce_gtid_consistency')
|
53
|
+
end
|
54
|
+
|
55
|
+
def supports_savepoints?
|
56
|
+
ActiveRecord::Base.connection.supports_savepoints?
|
57
|
+
end
|
58
|
+
|
59
|
+
def with_env_tz(new_tz = 'US/Eastern')
|
60
|
+
old_tz, ENV['TZ'] = ENV['TZ'], new_tz
|
61
|
+
yield
|
62
|
+
ensure
|
63
|
+
old_tz ? ENV['TZ'] = old_tz : ENV.delete('TZ')
|
64
|
+
end
|
65
|
+
|
66
|
+
def with_timezone_config(cfg)
|
67
|
+
verify_default_timezone_config
|
68
|
+
|
69
|
+
old_default_zone = ActiveRecord::Base.default_timezone
|
70
|
+
old_awareness = ActiveRecord::Base.time_zone_aware_attributes
|
71
|
+
old_zone = Time.zone
|
72
|
+
|
73
|
+
if cfg.has_key?(:default)
|
74
|
+
ActiveRecord::Base.default_timezone = cfg[:default]
|
75
|
+
end
|
76
|
+
if cfg.has_key?(:aware_attributes)
|
77
|
+
ActiveRecord::Base.time_zone_aware_attributes = cfg[:aware_attributes]
|
78
|
+
end
|
79
|
+
if cfg.has_key?(:zone)
|
80
|
+
Time.zone = cfg[:zone]
|
81
|
+
end
|
82
|
+
yield
|
83
|
+
ensure
|
84
|
+
ActiveRecord::Base.default_timezone = old_default_zone
|
85
|
+
ActiveRecord::Base.time_zone_aware_attributes = old_awareness
|
86
|
+
Time.zone = old_zone
|
87
|
+
end
|
88
|
+
|
89
|
+
# This method makes sure that tests don't leak global state related to time zones.
|
90
|
+
EXPECTED_ZONE = nil
|
91
|
+
EXPECTED_DEFAULT_TIMEZONE = :utc
|
92
|
+
EXPECTED_TIME_ZONE_AWARE_ATTRIBUTES = false
|
93
|
+
def verify_default_timezone_config
|
94
|
+
if Time.zone != EXPECTED_ZONE
|
95
|
+
$stderr.puts <<-MSG
|
96
|
+
\n#{self}
|
97
|
+
Global state `Time.zone` was leaked.
|
98
|
+
Expected: #{EXPECTED_ZONE}
|
99
|
+
Got: #{Time.zone}
|
100
|
+
MSG
|
101
|
+
end
|
102
|
+
if ActiveRecord::Base.default_timezone != EXPECTED_DEFAULT_TIMEZONE
|
103
|
+
$stderr.puts <<-MSG
|
104
|
+
\n#{self}
|
105
|
+
Global state `ActiveRecord::Base.default_timezone` was leaked.
|
106
|
+
Expected: #{EXPECTED_DEFAULT_TIMEZONE}
|
107
|
+
Got: #{ActiveRecord::Base.default_timezone}
|
108
|
+
MSG
|
109
|
+
end
|
110
|
+
if ActiveRecord::Base.time_zone_aware_attributes != EXPECTED_TIME_ZONE_AWARE_ATTRIBUTES
|
111
|
+
$stderr.puts <<-MSG
|
112
|
+
\n#{self}
|
113
|
+
Global state `ActiveRecord::Base.time_zone_aware_attributes` was leaked.
|
114
|
+
Expected: #{EXPECTED_TIME_ZONE_AWARE_ATTRIBUTES}
|
115
|
+
Got: #{ActiveRecord::Base.time_zone_aware_attributes}
|
116
|
+
MSG
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def enable_extension!(extension, connection)
|
121
|
+
return false unless connection.supports_extensions?
|
122
|
+
return connection.reconnect! if connection.extension_enabled?(extension)
|
123
|
+
|
124
|
+
connection.enable_extension extension
|
125
|
+
connection.commit_db_transaction if connection.transaction_open?
|
126
|
+
connection.reconnect!
|
127
|
+
end
|
128
|
+
|
129
|
+
def disable_extension!(extension, connection)
|
130
|
+
return false unless connection.supports_extensions?
|
131
|
+
return true unless connection.extension_enabled?(extension)
|
132
|
+
|
133
|
+
connection.disable_extension extension
|
134
|
+
connection.reconnect!
|
135
|
+
end
|
136
|
+
|
137
|
+
require "cases/validations_repair_helper"
|
138
|
+
class ActiveSupport::TestCase
|
139
|
+
include ActiveRecord::TestFixtures
|
140
|
+
include ActiveRecord::ValidationsRepairHelper
|
141
|
+
include ActiveSupport::Testing::MethodCallAssertions
|
142
|
+
|
143
|
+
self.fixture_path = FIXTURES_ROOT
|
144
|
+
self.use_instantiated_fixtures = false
|
145
|
+
self.use_transactional_tests = true
|
146
|
+
|
147
|
+
def create_fixtures(*fixture_set_names, &block)
|
148
|
+
ActiveRecord::FixtureSet.create_fixtures(ActiveSupport::TestCase.fixture_path, fixture_set_names, fixture_class_names, &block)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
def load_schema
|
153
|
+
# silence verbose schema loading
|
154
|
+
original_stdout = $stdout
|
155
|
+
$stdout = StringIO.new
|
156
|
+
|
157
|
+
adapter_name = ActiveRecord::Base.connection.adapter_name.downcase
|
158
|
+
adapter_specific_schema_file = SCHEMA_ROOT + "/#{adapter_name}_specific_schema.rb"
|
159
|
+
|
160
|
+
load SCHEMA_ROOT + "/schema.rb"
|
161
|
+
|
162
|
+
if File.exist?(adapter_specific_schema_file)
|
163
|
+
load adapter_specific_schema_file
|
164
|
+
end
|
165
|
+
ensure
|
166
|
+
$stdout = original_stdout
|
167
|
+
end
|
168
|
+
|
169
|
+
load_schema
|
170
|
+
|
171
|
+
class SQLSubscriber
|
172
|
+
attr_reader :logged
|
173
|
+
attr_reader :payloads
|
174
|
+
|
175
|
+
def initialize
|
176
|
+
@logged = []
|
177
|
+
@payloads = []
|
178
|
+
end
|
179
|
+
|
180
|
+
def start(name, id, payload)
|
181
|
+
@payloads << payload
|
182
|
+
@logged << [payload[:sql].squish, payload[:name], payload[:binds]]
|
183
|
+
end
|
184
|
+
|
185
|
+
def finish(name, id, payload); end
|
186
|
+
end
|
187
|
+
|
188
|
+
module InTimeZone
|
189
|
+
private
|
190
|
+
|
191
|
+
def in_time_zone(zone)
|
192
|
+
old_zone = Time.zone
|
193
|
+
old_tz = ActiveRecord::Base.time_zone_aware_attributes
|
194
|
+
|
195
|
+
Time.zone = zone ? ActiveSupport::TimeZone[zone] : nil
|
196
|
+
ActiveRecord::Base.time_zone_aware_attributes = !zone.nil?
|
197
|
+
yield
|
198
|
+
ensure
|
199
|
+
Time.zone = old_zone
|
200
|
+
ActiveRecord::Base.time_zone_aware_attributes = old_tz
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
require 'mocha/setup' # FIXME: stop using mocha
|
@@ -1,142 +1,142 @@
|
|
1
|
-
require 'cases/helper'
|
2
|
-
require 'support/connection_helper'
|
3
|
-
|
4
|
-
class HotCompatibilityTest < ActiveRecord::TestCase
|
5
|
-
self.use_transactional_tests = false
|
6
|
-
include ConnectionHelper
|
7
|
-
|
8
|
-
setup do
|
9
|
-
@klass = Class.new(ActiveRecord::Base) do
|
10
|
-
connection.create_table :hot_compatibilities, force: true do |t|
|
11
|
-
t.string :foo
|
12
|
-
t.string :bar
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.name; 'HotCompatibility'; end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
teardown do
|
20
|
-
ActiveRecord::Base.connection.drop_table :hot_compatibilities
|
21
|
-
end
|
22
|
-
|
23
|
-
test "insert after remove_column" do
|
24
|
-
# warm cache
|
25
|
-
@klass.create!
|
26
|
-
|
27
|
-
# we have 3 columns
|
28
|
-
assert_equal 3, @klass.columns.length
|
29
|
-
|
30
|
-
# remove one of them
|
31
|
-
@klass.connection.remove_column :hot_compatibilities, :bar
|
32
|
-
|
33
|
-
# we still have 3 columns in the cache
|
34
|
-
assert_equal 3, @klass.columns.length
|
35
|
-
|
36
|
-
# but we can successfully create a record so long as we don't
|
37
|
-
# reference the removed column
|
38
|
-
record = @klass.create! foo: 'foo'
|
39
|
-
record.reload
|
40
|
-
assert_equal 'foo', record.foo
|
41
|
-
end
|
42
|
-
|
43
|
-
test "update after remove_column" do
|
44
|
-
record = @klass.create! foo: 'foo'
|
45
|
-
assert_equal 3, @klass.columns.length
|
46
|
-
@klass.connection.remove_column :hot_compatibilities, :bar
|
47
|
-
assert_equal 3, @klass.columns.length
|
48
|
-
|
49
|
-
record.reload
|
50
|
-
assert_equal 'foo', record.foo
|
51
|
-
record.foo = 'bar'
|
52
|
-
record.save!
|
53
|
-
record.reload
|
54
|
-
assert_equal 'bar', record.foo
|
55
|
-
end
|
56
|
-
|
57
|
-
if current_adapter?(:PostgreSQLAdapter)
|
58
|
-
test "cleans up after prepared statement failure in a transaction" do
|
59
|
-
with_two_connections do |original_connection, ddl_connection|
|
60
|
-
record = @klass.create! bar: 'bar'
|
61
|
-
|
62
|
-
# prepare the reload statement in a transaction
|
63
|
-
@klass.transaction do
|
64
|
-
record.reload
|
65
|
-
end
|
66
|
-
|
67
|
-
assert get_prepared_statement_cache(@klass.connection).any?,
|
68
|
-
"expected prepared statement cache to have something in it"
|
69
|
-
|
70
|
-
# add a new column
|
71
|
-
ddl_connection.add_column :hot_compatibilities, :baz, :string
|
72
|
-
|
73
|
-
assert_raise(ActiveRecord::PreparedStatementCacheExpired) do
|
74
|
-
@klass.transaction do
|
75
|
-
record.reload
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
assert_empty get_prepared_statement_cache(@klass.connection),
|
80
|
-
"expected prepared statement cache to be empty but it wasn't"
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
test "cleans up after prepared statement failure in nested transactions" do
|
85
|
-
with_two_connections do |original_connection, ddl_connection|
|
86
|
-
record = @klass.create! bar: 'bar'
|
87
|
-
|
88
|
-
# prepare the reload statement in a transaction
|
89
|
-
@klass.transaction do
|
90
|
-
record.reload
|
91
|
-
end
|
92
|
-
|
93
|
-
assert get_prepared_statement_cache(@klass.connection).any?,
|
94
|
-
"expected prepared statement cache to have something in it"
|
95
|
-
|
96
|
-
# add a new column
|
97
|
-
ddl_connection.add_column :hot_compatibilities, :baz, :string
|
98
|
-
|
99
|
-
assert_raise(ActiveRecord::PreparedStatementCacheExpired) do
|
100
|
-
@klass.transaction do
|
101
|
-
@klass.transaction do
|
102
|
-
@klass.transaction do
|
103
|
-
record.reload
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
assert_empty get_prepared_statement_cache(@klass.connection),
|
110
|
-
"expected prepared statement cache to be empty but it wasn't"
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
private
|
116
|
-
|
117
|
-
def get_prepared_statement_cache(connection)
|
118
|
-
connection.instance_variable_get(:@statements)
|
119
|
-
.instance_variable_get(:@cache)[Process.pid]
|
120
|
-
end
|
121
|
-
|
122
|
-
# Rails will automatically clear the prepared statements on the connection
|
123
|
-
# that runs the migration, so we use two connections to simulate what would
|
124
|
-
# actually happen on a production system; we'd have one connection running the
|
125
|
-
# migration from the rake task ("ddl_connection" here), and we'd have another
|
126
|
-
# connection in a web worker.
|
127
|
-
def with_two_connections
|
128
|
-
run_without_connection do |original_connection|
|
129
|
-
ActiveRecord::Base.establish_connection(original_connection.merge(pool_size: 2))
|
130
|
-
begin
|
131
|
-
ddl_connection = ActiveRecord::Base.connection_pool.checkout
|
132
|
-
begin
|
133
|
-
yield original_connection, ddl_connection
|
134
|
-
ensure
|
135
|
-
ActiveRecord::Base.connection_pool.checkin ddl_connection
|
136
|
-
end
|
137
|
-
ensure
|
138
|
-
ActiveRecord::Base.clear_all_connections!
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
142
|
-
end
|
1
|
+
require 'cases/helper'
|
2
|
+
require 'support/connection_helper'
|
3
|
+
|
4
|
+
class HotCompatibilityTest < ActiveRecord::TestCase
|
5
|
+
self.use_transactional_tests = false
|
6
|
+
include ConnectionHelper
|
7
|
+
|
8
|
+
setup do
|
9
|
+
@klass = Class.new(ActiveRecord::Base) do
|
10
|
+
connection.create_table :hot_compatibilities, force: true do |t|
|
11
|
+
t.string :foo
|
12
|
+
t.string :bar
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.name; 'HotCompatibility'; end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
teardown do
|
20
|
+
ActiveRecord::Base.connection.drop_table :hot_compatibilities
|
21
|
+
end
|
22
|
+
|
23
|
+
test "insert after remove_column" do
|
24
|
+
# warm cache
|
25
|
+
@klass.create!
|
26
|
+
|
27
|
+
# we have 3 columns
|
28
|
+
assert_equal 3, @klass.columns.length
|
29
|
+
|
30
|
+
# remove one of them
|
31
|
+
@klass.connection.remove_column :hot_compatibilities, :bar
|
32
|
+
|
33
|
+
# we still have 3 columns in the cache
|
34
|
+
assert_equal 3, @klass.columns.length
|
35
|
+
|
36
|
+
# but we can successfully create a record so long as we don't
|
37
|
+
# reference the removed column
|
38
|
+
record = @klass.create! foo: 'foo'
|
39
|
+
record.reload
|
40
|
+
assert_equal 'foo', record.foo
|
41
|
+
end
|
42
|
+
|
43
|
+
test "update after remove_column" do
|
44
|
+
record = @klass.create! foo: 'foo'
|
45
|
+
assert_equal 3, @klass.columns.length
|
46
|
+
@klass.connection.remove_column :hot_compatibilities, :bar
|
47
|
+
assert_equal 3, @klass.columns.length
|
48
|
+
|
49
|
+
record.reload
|
50
|
+
assert_equal 'foo', record.foo
|
51
|
+
record.foo = 'bar'
|
52
|
+
record.save!
|
53
|
+
record.reload
|
54
|
+
assert_equal 'bar', record.foo
|
55
|
+
end
|
56
|
+
|
57
|
+
if current_adapter?(:PostgreSQLAdapter)
|
58
|
+
test "cleans up after prepared statement failure in a transaction" do
|
59
|
+
with_two_connections do |original_connection, ddl_connection|
|
60
|
+
record = @klass.create! bar: 'bar'
|
61
|
+
|
62
|
+
# prepare the reload statement in a transaction
|
63
|
+
@klass.transaction do
|
64
|
+
record.reload
|
65
|
+
end
|
66
|
+
|
67
|
+
assert get_prepared_statement_cache(@klass.connection).any?,
|
68
|
+
"expected prepared statement cache to have something in it"
|
69
|
+
|
70
|
+
# add a new column
|
71
|
+
ddl_connection.add_column :hot_compatibilities, :baz, :string
|
72
|
+
|
73
|
+
assert_raise(ActiveRecord::PreparedStatementCacheExpired) do
|
74
|
+
@klass.transaction do
|
75
|
+
record.reload
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
assert_empty get_prepared_statement_cache(@klass.connection),
|
80
|
+
"expected prepared statement cache to be empty but it wasn't"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
test "cleans up after prepared statement failure in nested transactions" do
|
85
|
+
with_two_connections do |original_connection, ddl_connection|
|
86
|
+
record = @klass.create! bar: 'bar'
|
87
|
+
|
88
|
+
# prepare the reload statement in a transaction
|
89
|
+
@klass.transaction do
|
90
|
+
record.reload
|
91
|
+
end
|
92
|
+
|
93
|
+
assert get_prepared_statement_cache(@klass.connection).any?,
|
94
|
+
"expected prepared statement cache to have something in it"
|
95
|
+
|
96
|
+
# add a new column
|
97
|
+
ddl_connection.add_column :hot_compatibilities, :baz, :string
|
98
|
+
|
99
|
+
assert_raise(ActiveRecord::PreparedStatementCacheExpired) do
|
100
|
+
@klass.transaction do
|
101
|
+
@klass.transaction do
|
102
|
+
@klass.transaction do
|
103
|
+
record.reload
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
assert_empty get_prepared_statement_cache(@klass.connection),
|
110
|
+
"expected prepared statement cache to be empty but it wasn't"
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
private
|
116
|
+
|
117
|
+
def get_prepared_statement_cache(connection)
|
118
|
+
connection.instance_variable_get(:@statements)
|
119
|
+
.instance_variable_get(:@cache)[Process.pid]
|
120
|
+
end
|
121
|
+
|
122
|
+
# Rails will automatically clear the prepared statements on the connection
|
123
|
+
# that runs the migration, so we use two connections to simulate what would
|
124
|
+
# actually happen on a production system; we'd have one connection running the
|
125
|
+
# migration from the rake task ("ddl_connection" here), and we'd have another
|
126
|
+
# connection in a web worker.
|
127
|
+
def with_two_connections
|
128
|
+
run_without_connection do |original_connection|
|
129
|
+
ActiveRecord::Base.establish_connection(original_connection.merge(pool_size: 2))
|
130
|
+
begin
|
131
|
+
ddl_connection = ActiveRecord::Base.connection_pool.checkout
|
132
|
+
begin
|
133
|
+
yield original_connection, ddl_connection
|
134
|
+
ensure
|
135
|
+
ActiveRecord::Base.connection_pool.checkin ddl_connection
|
136
|
+
end
|
137
|
+
ensure
|
138
|
+
ActiveRecord::Base.clear_all_connections!
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|