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
@@ -1,100 +1,100 @@
|
|
1
|
-
require "cases/helper"
|
2
|
-
|
3
|
-
class Mysql2BooleanTest < ActiveRecord::Mysql2TestCase
|
4
|
-
self.use_transactional_tests = false
|
5
|
-
|
6
|
-
class BooleanType < ActiveRecord::Base
|
7
|
-
self.table_name = "mysql_booleans"
|
8
|
-
end
|
9
|
-
|
10
|
-
setup do
|
11
|
-
@connection = ActiveRecord::Base.connection
|
12
|
-
@connection.clear_cache!
|
13
|
-
@connection.create_table("mysql_booleans") do |t|
|
14
|
-
t.boolean "archived"
|
15
|
-
t.string "published", limit: 1
|
16
|
-
end
|
17
|
-
BooleanType.reset_column_information
|
18
|
-
|
19
|
-
@emulate_booleans = ActiveRecord::ConnectionAdapters::Mysql2Adapter.emulate_booleans
|
20
|
-
end
|
21
|
-
|
22
|
-
teardown do
|
23
|
-
emulate_booleans @emulate_booleans
|
24
|
-
@connection.drop_table "mysql_booleans"
|
25
|
-
end
|
26
|
-
|
27
|
-
test "column type with emulated booleans" do
|
28
|
-
emulate_booleans true
|
29
|
-
|
30
|
-
assert_equal :boolean, boolean_column.type
|
31
|
-
assert_equal :string, string_column.type
|
32
|
-
end
|
33
|
-
|
34
|
-
test "column type without emulated booleans" do
|
35
|
-
emulate_booleans false
|
36
|
-
|
37
|
-
assert_equal :integer, boolean_column.type
|
38
|
-
assert_equal :string, string_column.type
|
39
|
-
end
|
40
|
-
|
41
|
-
test "test type casting with emulated booleans" do
|
42
|
-
emulate_booleans true
|
43
|
-
|
44
|
-
boolean = BooleanType.create!(archived: true, published: true)
|
45
|
-
attributes = boolean.reload.attributes_before_type_cast
|
46
|
-
assert_equal 1, attributes["archived"]
|
47
|
-
assert_equal "1", attributes["published"]
|
48
|
-
|
49
|
-
boolean = BooleanType.create!(archived: false, published: false)
|
50
|
-
attributes = boolean.reload.attributes_before_type_cast
|
51
|
-
assert_equal 0, attributes["archived"]
|
52
|
-
assert_equal "0", attributes["published"]
|
53
|
-
|
54
|
-
assert_equal 1, @connection.type_cast(true)
|
55
|
-
assert_equal 0, @connection.type_cast(false)
|
56
|
-
end
|
57
|
-
|
58
|
-
test "test type casting without emulated booleans" do
|
59
|
-
emulate_booleans false
|
60
|
-
|
61
|
-
boolean = BooleanType.create!(archived: true, published: true)
|
62
|
-
attributes = boolean.reload.attributes_before_type_cast
|
63
|
-
assert_equal 1, attributes["archived"]
|
64
|
-
assert_equal "1", attributes["published"]
|
65
|
-
|
66
|
-
boolean = BooleanType.create!(archived: false, published: false)
|
67
|
-
attributes = boolean.reload.attributes_before_type_cast
|
68
|
-
assert_equal 0, attributes["archived"]
|
69
|
-
assert_equal "0", attributes["published"]
|
70
|
-
|
71
|
-
assert_equal 1, @connection.type_cast(true)
|
72
|
-
assert_equal 0, @connection.type_cast(false)
|
73
|
-
end
|
74
|
-
|
75
|
-
test "with booleans stored as 1 and 0" do
|
76
|
-
@connection.execute "INSERT INTO mysql_booleans(archived, published) VALUES(1, '1')"
|
77
|
-
boolean = BooleanType.first
|
78
|
-
assert_equal true, boolean.archived
|
79
|
-
assert_equal "1", boolean.published
|
80
|
-
end
|
81
|
-
|
82
|
-
test "with booleans stored as t" do
|
83
|
-
@connection.execute "INSERT INTO mysql_booleans(published) VALUES('t')"
|
84
|
-
boolean = BooleanType.first
|
85
|
-
assert_equal "t", boolean.published
|
86
|
-
end
|
87
|
-
|
88
|
-
def boolean_column
|
89
|
-
BooleanType.columns.find { |c| c.name == 'archived' }
|
90
|
-
end
|
91
|
-
|
92
|
-
def string_column
|
93
|
-
BooleanType.columns.find { |c| c.name == 'published' }
|
94
|
-
end
|
95
|
-
|
96
|
-
def emulate_booleans(value)
|
97
|
-
ActiveRecord::ConnectionAdapters::Mysql2Adapter.emulate_booleans = value
|
98
|
-
BooleanType.reset_column_information
|
99
|
-
end
|
100
|
-
end
|
1
|
+
require "cases/helper"
|
2
|
+
|
3
|
+
class Mysql2BooleanTest < ActiveRecord::Mysql2TestCase
|
4
|
+
self.use_transactional_tests = false
|
5
|
+
|
6
|
+
class BooleanType < ActiveRecord::Base
|
7
|
+
self.table_name = "mysql_booleans"
|
8
|
+
end
|
9
|
+
|
10
|
+
setup do
|
11
|
+
@connection = ActiveRecord::Base.connection
|
12
|
+
@connection.clear_cache!
|
13
|
+
@connection.create_table("mysql_booleans") do |t|
|
14
|
+
t.boolean "archived"
|
15
|
+
t.string "published", limit: 1
|
16
|
+
end
|
17
|
+
BooleanType.reset_column_information
|
18
|
+
|
19
|
+
@emulate_booleans = ActiveRecord::ConnectionAdapters::Mysql2Adapter.emulate_booleans
|
20
|
+
end
|
21
|
+
|
22
|
+
teardown do
|
23
|
+
emulate_booleans @emulate_booleans
|
24
|
+
@connection.drop_table "mysql_booleans"
|
25
|
+
end
|
26
|
+
|
27
|
+
test "column type with emulated booleans" do
|
28
|
+
emulate_booleans true
|
29
|
+
|
30
|
+
assert_equal :boolean, boolean_column.type
|
31
|
+
assert_equal :string, string_column.type
|
32
|
+
end
|
33
|
+
|
34
|
+
test "column type without emulated booleans" do
|
35
|
+
emulate_booleans false
|
36
|
+
|
37
|
+
assert_equal :integer, boolean_column.type
|
38
|
+
assert_equal :string, string_column.type
|
39
|
+
end
|
40
|
+
|
41
|
+
test "test type casting with emulated booleans" do
|
42
|
+
emulate_booleans true
|
43
|
+
|
44
|
+
boolean = BooleanType.create!(archived: true, published: true)
|
45
|
+
attributes = boolean.reload.attributes_before_type_cast
|
46
|
+
assert_equal 1, attributes["archived"]
|
47
|
+
assert_equal "1", attributes["published"]
|
48
|
+
|
49
|
+
boolean = BooleanType.create!(archived: false, published: false)
|
50
|
+
attributes = boolean.reload.attributes_before_type_cast
|
51
|
+
assert_equal 0, attributes["archived"]
|
52
|
+
assert_equal "0", attributes["published"]
|
53
|
+
|
54
|
+
assert_equal 1, @connection.type_cast(true)
|
55
|
+
assert_equal 0, @connection.type_cast(false)
|
56
|
+
end
|
57
|
+
|
58
|
+
test "test type casting without emulated booleans" do
|
59
|
+
emulate_booleans false
|
60
|
+
|
61
|
+
boolean = BooleanType.create!(archived: true, published: true)
|
62
|
+
attributes = boolean.reload.attributes_before_type_cast
|
63
|
+
assert_equal 1, attributes["archived"]
|
64
|
+
assert_equal "1", attributes["published"]
|
65
|
+
|
66
|
+
boolean = BooleanType.create!(archived: false, published: false)
|
67
|
+
attributes = boolean.reload.attributes_before_type_cast
|
68
|
+
assert_equal 0, attributes["archived"]
|
69
|
+
assert_equal "0", attributes["published"]
|
70
|
+
|
71
|
+
assert_equal 1, @connection.type_cast(true)
|
72
|
+
assert_equal 0, @connection.type_cast(false)
|
73
|
+
end
|
74
|
+
|
75
|
+
test "with booleans stored as 1 and 0" do
|
76
|
+
@connection.execute "INSERT INTO mysql_booleans(archived, published) VALUES(1, '1')"
|
77
|
+
boolean = BooleanType.first
|
78
|
+
assert_equal true, boolean.archived
|
79
|
+
assert_equal "1", boolean.published
|
80
|
+
end
|
81
|
+
|
82
|
+
test "with booleans stored as t" do
|
83
|
+
@connection.execute "INSERT INTO mysql_booleans(published) VALUES('t')"
|
84
|
+
boolean = BooleanType.first
|
85
|
+
assert_equal "t", boolean.published
|
86
|
+
end
|
87
|
+
|
88
|
+
def boolean_column
|
89
|
+
BooleanType.columns.find { |c| c.name == 'archived' }
|
90
|
+
end
|
91
|
+
|
92
|
+
def string_column
|
93
|
+
BooleanType.columns.find { |c| c.name == 'published' }
|
94
|
+
end
|
95
|
+
|
96
|
+
def emulate_booleans(value)
|
97
|
+
ActiveRecord::ConnectionAdapters::Mysql2Adapter.emulate_booleans = value
|
98
|
+
BooleanType.reset_column_information
|
99
|
+
end
|
100
|
+
end
|
@@ -1,63 +1,63 @@
|
|
1
|
-
require "cases/helper"
|
2
|
-
|
3
|
-
class Mysql2CaseSensitivityTest < ActiveRecord::Mysql2TestCase
|
4
|
-
class CollationTest < ActiveRecord::Base
|
5
|
-
end
|
6
|
-
|
7
|
-
repair_validations(CollationTest)
|
8
|
-
|
9
|
-
def test_columns_include_collation_different_from_table
|
10
|
-
assert_equal 'utf8_bin', CollationTest.columns_hash['string_cs_column'].collation
|
11
|
-
assert_equal 'utf8_general_ci', CollationTest.columns_hash['string_ci_column'].collation
|
12
|
-
end
|
13
|
-
|
14
|
-
def test_case_sensitive
|
15
|
-
assert !CollationTest.columns_hash['string_ci_column'].case_sensitive?
|
16
|
-
assert CollationTest.columns_hash['string_cs_column'].case_sensitive?
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_case_insensitive_comparison_for_ci_column
|
20
|
-
CollationTest.validates_uniqueness_of(:string_ci_column, :case_sensitive => false)
|
21
|
-
CollationTest.create!(:string_ci_column => 'A')
|
22
|
-
invalid = CollationTest.new(:string_ci_column => 'a')
|
23
|
-
queries = assert_sql { invalid.save }
|
24
|
-
ci_uniqueness_query = queries.detect { |q| q.match(/string_ci_column/) }
|
25
|
-
assert_no_match(/lower/i, ci_uniqueness_query)
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_case_insensitive_comparison_for_cs_column
|
29
|
-
CollationTest.validates_uniqueness_of(:string_cs_column, :case_sensitive => false)
|
30
|
-
CollationTest.create!(:string_cs_column => 'A')
|
31
|
-
invalid = CollationTest.new(:string_cs_column => 'a')
|
32
|
-
queries = assert_sql { invalid.save }
|
33
|
-
cs_uniqueness_query = queries.detect { |q| q.match(/string_cs_column/)}
|
34
|
-
assert_match(/lower/i, cs_uniqueness_query)
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_case_sensitive_comparison_for_ci_column
|
38
|
-
CollationTest.validates_uniqueness_of(:string_ci_column, :case_sensitive => true)
|
39
|
-
CollationTest.create!(:string_ci_column => 'A')
|
40
|
-
invalid = CollationTest.new(:string_ci_column => 'A')
|
41
|
-
queries = assert_sql { invalid.save }
|
42
|
-
ci_uniqueness_query = queries.detect { |q| q.match(/string_ci_column/) }
|
43
|
-
assert_match(/binary/i, ci_uniqueness_query)
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_case_sensitive_comparison_for_cs_column
|
47
|
-
CollationTest.validates_uniqueness_of(:string_cs_column, :case_sensitive => true)
|
48
|
-
CollationTest.create!(:string_cs_column => 'A')
|
49
|
-
invalid = CollationTest.new(:string_cs_column => 'A')
|
50
|
-
queries = assert_sql { invalid.save }
|
51
|
-
cs_uniqueness_query = queries.detect { |q| q.match(/string_cs_column/) }
|
52
|
-
assert_no_match(/binary/i, cs_uniqueness_query)
|
53
|
-
end
|
54
|
-
|
55
|
-
def test_case_sensitive_comparison_for_binary_column
|
56
|
-
CollationTest.validates_uniqueness_of(:binary_column, case_sensitive: true)
|
57
|
-
CollationTest.create!(binary_column: 'A')
|
58
|
-
invalid = CollationTest.new(binary_column: 'A')
|
59
|
-
queries = assert_sql { invalid.save }
|
60
|
-
bin_uniqueness_query = queries.detect { |q| q.match(/binary_column/) }
|
61
|
-
assert_no_match(/\bBINARY\b/, bin_uniqueness_query)
|
62
|
-
end
|
63
|
-
end
|
1
|
+
require "cases/helper"
|
2
|
+
|
3
|
+
class Mysql2CaseSensitivityTest < ActiveRecord::Mysql2TestCase
|
4
|
+
class CollationTest < ActiveRecord::Base
|
5
|
+
end
|
6
|
+
|
7
|
+
repair_validations(CollationTest)
|
8
|
+
|
9
|
+
def test_columns_include_collation_different_from_table
|
10
|
+
assert_equal 'utf8_bin', CollationTest.columns_hash['string_cs_column'].collation
|
11
|
+
assert_equal 'utf8_general_ci', CollationTest.columns_hash['string_ci_column'].collation
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_case_sensitive
|
15
|
+
assert !CollationTest.columns_hash['string_ci_column'].case_sensitive?
|
16
|
+
assert CollationTest.columns_hash['string_cs_column'].case_sensitive?
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_case_insensitive_comparison_for_ci_column
|
20
|
+
CollationTest.validates_uniqueness_of(:string_ci_column, :case_sensitive => false)
|
21
|
+
CollationTest.create!(:string_ci_column => 'A')
|
22
|
+
invalid = CollationTest.new(:string_ci_column => 'a')
|
23
|
+
queries = assert_sql { invalid.save }
|
24
|
+
ci_uniqueness_query = queries.detect { |q| q.match(/string_ci_column/) }
|
25
|
+
assert_no_match(/lower/i, ci_uniqueness_query)
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_case_insensitive_comparison_for_cs_column
|
29
|
+
CollationTest.validates_uniqueness_of(:string_cs_column, :case_sensitive => false)
|
30
|
+
CollationTest.create!(:string_cs_column => 'A')
|
31
|
+
invalid = CollationTest.new(:string_cs_column => 'a')
|
32
|
+
queries = assert_sql { invalid.save }
|
33
|
+
cs_uniqueness_query = queries.detect { |q| q.match(/string_cs_column/)}
|
34
|
+
assert_match(/lower/i, cs_uniqueness_query)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_case_sensitive_comparison_for_ci_column
|
38
|
+
CollationTest.validates_uniqueness_of(:string_ci_column, :case_sensitive => true)
|
39
|
+
CollationTest.create!(:string_ci_column => 'A')
|
40
|
+
invalid = CollationTest.new(:string_ci_column => 'A')
|
41
|
+
queries = assert_sql { invalid.save }
|
42
|
+
ci_uniqueness_query = queries.detect { |q| q.match(/string_ci_column/) }
|
43
|
+
assert_match(/binary/i, ci_uniqueness_query)
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_case_sensitive_comparison_for_cs_column
|
47
|
+
CollationTest.validates_uniqueness_of(:string_cs_column, :case_sensitive => true)
|
48
|
+
CollationTest.create!(:string_cs_column => 'A')
|
49
|
+
invalid = CollationTest.new(:string_cs_column => 'A')
|
50
|
+
queries = assert_sql { invalid.save }
|
51
|
+
cs_uniqueness_query = queries.detect { |q| q.match(/string_cs_column/) }
|
52
|
+
assert_no_match(/binary/i, cs_uniqueness_query)
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_case_sensitive_comparison_for_binary_column
|
56
|
+
CollationTest.validates_uniqueness_of(:binary_column, case_sensitive: true)
|
57
|
+
CollationTest.create!(binary_column: 'A')
|
58
|
+
invalid = CollationTest.new(binary_column: 'A')
|
59
|
+
queries = assert_sql { invalid.save }
|
60
|
+
bin_uniqueness_query = queries.detect { |q| q.match(/binary_column/) }
|
61
|
+
assert_no_match(/\bBINARY\b/, bin_uniqueness_query)
|
62
|
+
end
|
63
|
+
end
|
@@ -1,54 +1,54 @@
|
|
1
|
-
require "cases/helper"
|
2
|
-
require 'support/schema_dumping_helper'
|
3
|
-
|
4
|
-
class Mysql2CharsetCollationTest < ActiveRecord::Mysql2TestCase
|
5
|
-
include SchemaDumpingHelper
|
6
|
-
self.use_transactional_tests = false
|
7
|
-
|
8
|
-
setup do
|
9
|
-
@connection = ActiveRecord::Base.connection
|
10
|
-
@connection.create_table :charset_collations, force: true do |t|
|
11
|
-
t.string :string_ascii_bin, charset: 'ascii', collation: 'ascii_bin'
|
12
|
-
t.text :text_ucs2_unicode_ci, charset: 'ucs2', collation: 'ucs2_unicode_ci'
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
teardown do
|
17
|
-
@connection.drop_table :charset_collations, if_exists: true
|
18
|
-
end
|
19
|
-
|
20
|
-
test "string column with charset and collation" do
|
21
|
-
column = @connection.columns(:charset_collations).find { |c| c.name == 'string_ascii_bin' }
|
22
|
-
assert_equal :string, column.type
|
23
|
-
assert_equal 'ascii_bin', column.collation
|
24
|
-
end
|
25
|
-
|
26
|
-
test "text column with charset and collation" do
|
27
|
-
column = @connection.columns(:charset_collations).find { |c| c.name == 'text_ucs2_unicode_ci' }
|
28
|
-
assert_equal :text, column.type
|
29
|
-
assert_equal 'ucs2_unicode_ci', column.collation
|
30
|
-
end
|
31
|
-
|
32
|
-
test "add column with charset and collation" do
|
33
|
-
@connection.add_column :charset_collations, :title, :string, charset: 'utf8', collation: 'utf8_bin'
|
34
|
-
|
35
|
-
column = @connection.columns(:charset_collations).find { |c| c.name == 'title' }
|
36
|
-
assert_equal :string, column.type
|
37
|
-
assert_equal 'utf8_bin', column.collation
|
38
|
-
end
|
39
|
-
|
40
|
-
test "change column with charset and collation" do
|
41
|
-
@connection.add_column :charset_collations, :description, :string, charset: 'utf8', collation: 'utf8_unicode_ci'
|
42
|
-
@connection.change_column :charset_collations, :description, :text, charset: 'utf8', collation: 'utf8_general_ci'
|
43
|
-
|
44
|
-
column = @connection.columns(:charset_collations).find { |c| c.name == 'description' }
|
45
|
-
assert_equal :text, column.type
|
46
|
-
assert_equal 'utf8_general_ci', column.collation
|
47
|
-
end
|
48
|
-
|
49
|
-
test "schema dump includes collation" do
|
50
|
-
output = dump_table_schema("charset_collations")
|
51
|
-
assert_match %r{t.string\s+"string_ascii_bin",\s+collation: "ascii_bin"$}, output
|
52
|
-
assert_match %r{t.text\s+"text_ucs2_unicode_ci",\s+limit: 65535,\s+collation: "ucs2_unicode_ci"$}, output
|
53
|
-
end
|
54
|
-
end
|
1
|
+
require "cases/helper"
|
2
|
+
require 'support/schema_dumping_helper'
|
3
|
+
|
4
|
+
class Mysql2CharsetCollationTest < ActiveRecord::Mysql2TestCase
|
5
|
+
include SchemaDumpingHelper
|
6
|
+
self.use_transactional_tests = false
|
7
|
+
|
8
|
+
setup do
|
9
|
+
@connection = ActiveRecord::Base.connection
|
10
|
+
@connection.create_table :charset_collations, force: true do |t|
|
11
|
+
t.string :string_ascii_bin, charset: 'ascii', collation: 'ascii_bin'
|
12
|
+
t.text :text_ucs2_unicode_ci, charset: 'ucs2', collation: 'ucs2_unicode_ci'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
teardown do
|
17
|
+
@connection.drop_table :charset_collations, if_exists: true
|
18
|
+
end
|
19
|
+
|
20
|
+
test "string column with charset and collation" do
|
21
|
+
column = @connection.columns(:charset_collations).find { |c| c.name == 'string_ascii_bin' }
|
22
|
+
assert_equal :string, column.type
|
23
|
+
assert_equal 'ascii_bin', column.collation
|
24
|
+
end
|
25
|
+
|
26
|
+
test "text column with charset and collation" do
|
27
|
+
column = @connection.columns(:charset_collations).find { |c| c.name == 'text_ucs2_unicode_ci' }
|
28
|
+
assert_equal :text, column.type
|
29
|
+
assert_equal 'ucs2_unicode_ci', column.collation
|
30
|
+
end
|
31
|
+
|
32
|
+
test "add column with charset and collation" do
|
33
|
+
@connection.add_column :charset_collations, :title, :string, charset: 'utf8', collation: 'utf8_bin'
|
34
|
+
|
35
|
+
column = @connection.columns(:charset_collations).find { |c| c.name == 'title' }
|
36
|
+
assert_equal :string, column.type
|
37
|
+
assert_equal 'utf8_bin', column.collation
|
38
|
+
end
|
39
|
+
|
40
|
+
test "change column with charset and collation" do
|
41
|
+
@connection.add_column :charset_collations, :description, :string, charset: 'utf8', collation: 'utf8_unicode_ci'
|
42
|
+
@connection.change_column :charset_collations, :description, :text, charset: 'utf8', collation: 'utf8_general_ci'
|
43
|
+
|
44
|
+
column = @connection.columns(:charset_collations).find { |c| c.name == 'description' }
|
45
|
+
assert_equal :text, column.type
|
46
|
+
assert_equal 'utf8_general_ci', column.collation
|
47
|
+
end
|
48
|
+
|
49
|
+
test "schema dump includes collation" do
|
50
|
+
output = dump_table_schema("charset_collations")
|
51
|
+
assert_match %r{t.string\s+"string_ascii_bin",\s+collation: "ascii_bin"$}, output
|
52
|
+
assert_match %r{t.text\s+"text_ucs2_unicode_ci",\s+limit: 65535,\s+collation: "ucs2_unicode_ci"$}, output
|
53
|
+
end
|
54
|
+
end
|
@@ -1,210 +1,210 @@
|
|
1
|
-
require "cases/helper"
|
2
|
-
require 'support/connection_helper'
|
3
|
-
|
4
|
-
class Mysql2ConnectionTest < ActiveRecord::Mysql2TestCase
|
5
|
-
include ConnectionHelper
|
6
|
-
|
7
|
-
fixtures :comments
|
8
|
-
|
9
|
-
def setup
|
10
|
-
super
|
11
|
-
@subscriber = SQLSubscriber.new
|
12
|
-
@subscription = ActiveSupport::Notifications.subscribe('sql.active_record', @subscriber)
|
13
|
-
@connection = ActiveRecord::Base.connection
|
14
|
-
end
|
15
|
-
|
16
|
-
def teardown
|
17
|
-
ActiveSupport::Notifications.unsubscribe(@subscription)
|
18
|
-
super
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_bad_connection
|
22
|
-
assert_raise ActiveRecord::NoDatabaseError do
|
23
|
-
configuration = ActiveRecord::Base.configurations['arunit'].merge(database: 'inexistent_activerecord_unittest')
|
24
|
-
connection = ActiveRecord::Base.mysql2_connection(configuration)
|
25
|
-
connection.drop_table 'ex', if_exists: true
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_truncate
|
30
|
-
rows = ActiveRecord::Base.connection.exec_query("select count(*) from comments")
|
31
|
-
count = rows.first.values.first
|
32
|
-
assert_operator count, :>, 0
|
33
|
-
|
34
|
-
ActiveRecord::Base.connection.truncate("comments")
|
35
|
-
rows = ActiveRecord::Base.connection.exec_query("select count(*) from comments")
|
36
|
-
count = rows.first.values.first
|
37
|
-
assert_equal 0, count
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_no_automatic_reconnection_after_timeout
|
41
|
-
assert @connection.active?
|
42
|
-
@connection.update('set @@wait_timeout=1')
|
43
|
-
sleep 2
|
44
|
-
assert !@connection.active?
|
45
|
-
|
46
|
-
# Repair all fixture connections so other tests won't break.
|
47
|
-
@fixture_connections.each(&:verify!)
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_successful_reconnection_after_timeout_with_manual_reconnect
|
51
|
-
assert @connection.active?
|
52
|
-
@connection.update('set @@wait_timeout=1')
|
53
|
-
sleep 2
|
54
|
-
@connection.reconnect!
|
55
|
-
assert @connection.active?
|
56
|
-
end
|
57
|
-
|
58
|
-
def test_successful_reconnection_after_timeout_with_verify
|
59
|
-
assert @connection.active?
|
60
|
-
@connection.update('set @@wait_timeout=1')
|
61
|
-
sleep 2
|
62
|
-
@connection.verify!
|
63
|
-
assert @connection.active?
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_execute_after_disconnect
|
67
|
-
@connection.disconnect!
|
68
|
-
|
69
|
-
assert_raise(ActiveRecord::StatementInvalid) do
|
70
|
-
@connection.execute("SELECT 1")
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def test_quote_after_disconnect
|
75
|
-
@connection.disconnect!
|
76
|
-
|
77
|
-
assert_raise(Mysql2::Error) do
|
78
|
-
@connection.quote("string")
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
def test_active_after_disconnect
|
83
|
-
@connection.disconnect!
|
84
|
-
assert_equal false, @connection.active?
|
85
|
-
end
|
86
|
-
|
87
|
-
def test_wait_timeout_as_string
|
88
|
-
run_without_connection do |orig_connection|
|
89
|
-
ActiveRecord::Base.establish_connection(orig_connection.merge(wait_timeout: "60"))
|
90
|
-
result = ActiveRecord::Base.connection.select_value("SELECT @@SESSION.wait_timeout")
|
91
|
-
assert_equal 60, result
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
def test_wait_timeout_as_url
|
96
|
-
run_without_connection do |orig_connection|
|
97
|
-
ActiveRecord::Base.establish_connection(orig_connection.merge("url" => "mysql2:///?wait_timeout=60"))
|
98
|
-
result = ActiveRecord::Base.connection.select_value("SELECT @@SESSION.wait_timeout")
|
99
|
-
assert_equal 60, result
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
def test_mysql_connection_collation_is_configured
|
104
|
-
assert_equal 'utf8_unicode_ci', @connection.show_variable('collation_connection')
|
105
|
-
assert_equal 'utf8_general_ci', ARUnit2Model.connection.show_variable('collation_connection')
|
106
|
-
end
|
107
|
-
|
108
|
-
def test_mysql_default_in_strict_mode
|
109
|
-
result = @connection.select_value("SELECT @@SESSION.sql_mode")
|
110
|
-
assert_match %r(STRICT_ALL_TABLES), result
|
111
|
-
end
|
112
|
-
|
113
|
-
def test_mysql_strict_mode_disabled
|
114
|
-
run_without_connection do |orig_connection|
|
115
|
-
ActiveRecord::Base.establish_connection(orig_connection.merge(strict: false))
|
116
|
-
result = ActiveRecord::Base.connection.select_value("SELECT @@SESSION.sql_mode")
|
117
|
-
assert_no_match %r(STRICT_ALL_TABLES), result
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
def test_mysql_strict_mode_specified_default
|
122
|
-
run_without_connection do |orig_connection|
|
123
|
-
ActiveRecord::Base.establish_connection(orig_connection.merge(strict: :default))
|
124
|
-
global_sql_mode = ActiveRecord::Base.connection.select_value("SELECT @@GLOBAL.sql_mode")
|
125
|
-
session_sql_mode = ActiveRecord::Base.connection.select_value("SELECT @@SESSION.sql_mode")
|
126
|
-
assert_equal global_sql_mode, session_sql_mode
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
def test_mysql_sql_mode_variable_overrides_strict_mode
|
131
|
-
run_without_connection do |orig_connection|
|
132
|
-
ActiveRecord::Base.establish_connection(orig_connection.deep_merge(variables: { 'sql_mode' => 'ansi' }))
|
133
|
-
result = ActiveRecord::Base.connection.select_value('SELECT @@SESSION.sql_mode')
|
134
|
-
assert_no_match %r(STRICT_ALL_TABLES), result
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
def test_passing_arbitary_flags_to_adapter
|
139
|
-
run_without_connection do |orig_connection|
|
140
|
-
ActiveRecord::Base.establish_connection(orig_connection.merge({flags: Mysql2::Client::COMPRESS}))
|
141
|
-
assert_equal (Mysql2::Client::COMPRESS | Mysql2::Client::FOUND_ROWS), ActiveRecord::Base.connection.raw_connection.query_options[:flags]
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
def test_passing_flags_by_array_to_adapter
|
146
|
-
run_without_connection do |orig_connection|
|
147
|
-
ActiveRecord::Base.establish_connection(orig_connection.merge({flags: ['COMPRESS'] }))
|
148
|
-
assert_equal ["COMPRESS", "FOUND_ROWS"], ActiveRecord::Base.connection.raw_connection.query_options[:flags]
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
def test_mysql_set_session_variable
|
153
|
-
run_without_connection do |orig_connection|
|
154
|
-
ActiveRecord::Base.establish_connection(orig_connection.deep_merge({:variables => {:default_week_format => 3}}))
|
155
|
-
session_mode = ActiveRecord::Base.connection.exec_query "SELECT @@SESSION.DEFAULT_WEEK_FORMAT"
|
156
|
-
assert_equal 3, session_mode.rows.first.first.to_i
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
def test_mysql_set_session_variable_to_default
|
161
|
-
run_without_connection do |orig_connection|
|
162
|
-
ActiveRecord::Base.establish_connection(orig_connection.deep_merge({:variables => {:default_week_format => :default}}))
|
163
|
-
global_mode = ActiveRecord::Base.connection.exec_query "SELECT @@GLOBAL.DEFAULT_WEEK_FORMAT"
|
164
|
-
session_mode = ActiveRecord::Base.connection.exec_query "SELECT @@SESSION.DEFAULT_WEEK_FORMAT"
|
165
|
-
assert_equal global_mode.rows, session_mode.rows
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
def test_logs_name_show_variable
|
170
|
-
@connection.show_variable 'foo'
|
171
|
-
assert_equal "SCHEMA", @subscriber.logged[0][1]
|
172
|
-
end
|
173
|
-
|
174
|
-
def test_logs_name_rename_column_sql
|
175
|
-
@connection.execute "CREATE TABLE `bar_baz` (`foo` varchar(255))"
|
176
|
-
@subscriber.logged.clear
|
177
|
-
@connection.send(:rename_column_sql, 'bar_baz', 'foo', 'foo2')
|
178
|
-
assert_equal "SCHEMA", @subscriber.logged[0][1]
|
179
|
-
ensure
|
180
|
-
@connection.execute "DROP TABLE `bar_baz`"
|
181
|
-
end
|
182
|
-
|
183
|
-
def test_get_and_release_advisory_lock
|
184
|
-
lock_name = "test_lock_name"
|
185
|
-
|
186
|
-
got_lock = @connection.get_advisory_lock(lock_name)
|
187
|
-
assert got_lock, "get_advisory_lock should have returned true but it didn't"
|
188
|
-
|
189
|
-
assert_equal test_lock_free(lock_name), false,
|
190
|
-
"expected the test advisory lock to be held but it wasn't"
|
191
|
-
|
192
|
-
released_lock = @connection.release_advisory_lock(lock_name)
|
193
|
-
assert released_lock, "expected release_advisory_lock to return true but it didn't"
|
194
|
-
|
195
|
-
assert test_lock_free(lock_name), 'expected the test lock to be available after releasing'
|
196
|
-
end
|
197
|
-
|
198
|
-
def test_release_non_existent_advisory_lock
|
199
|
-
lock_name = "fake_lock_name"
|
200
|
-
released_non_existent_lock = @connection.release_advisory_lock(lock_name)
|
201
|
-
assert_equal released_non_existent_lock, false,
|
202
|
-
'expected release_advisory_lock to return false when there was no lock to release'
|
203
|
-
end
|
204
|
-
|
205
|
-
protected
|
206
|
-
|
207
|
-
def test_lock_free(lock_name)
|
208
|
-
@connection.select_value("SELECT IS_FREE_LOCK('#{lock_name}');") == 1
|
209
|
-
end
|
210
|
-
end
|
1
|
+
require "cases/helper"
|
2
|
+
require 'support/connection_helper'
|
3
|
+
|
4
|
+
class Mysql2ConnectionTest < ActiveRecord::Mysql2TestCase
|
5
|
+
include ConnectionHelper
|
6
|
+
|
7
|
+
fixtures :comments
|
8
|
+
|
9
|
+
def setup
|
10
|
+
super
|
11
|
+
@subscriber = SQLSubscriber.new
|
12
|
+
@subscription = ActiveSupport::Notifications.subscribe('sql.active_record', @subscriber)
|
13
|
+
@connection = ActiveRecord::Base.connection
|
14
|
+
end
|
15
|
+
|
16
|
+
def teardown
|
17
|
+
ActiveSupport::Notifications.unsubscribe(@subscription)
|
18
|
+
super
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_bad_connection
|
22
|
+
assert_raise ActiveRecord::NoDatabaseError do
|
23
|
+
configuration = ActiveRecord::Base.configurations['arunit'].merge(database: 'inexistent_activerecord_unittest')
|
24
|
+
connection = ActiveRecord::Base.mysql2_connection(configuration)
|
25
|
+
connection.drop_table 'ex', if_exists: true
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_truncate
|
30
|
+
rows = ActiveRecord::Base.connection.exec_query("select count(*) from comments")
|
31
|
+
count = rows.first.values.first
|
32
|
+
assert_operator count, :>, 0
|
33
|
+
|
34
|
+
ActiveRecord::Base.connection.truncate("comments")
|
35
|
+
rows = ActiveRecord::Base.connection.exec_query("select count(*) from comments")
|
36
|
+
count = rows.first.values.first
|
37
|
+
assert_equal 0, count
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_no_automatic_reconnection_after_timeout
|
41
|
+
assert @connection.active?
|
42
|
+
@connection.update('set @@wait_timeout=1')
|
43
|
+
sleep 2
|
44
|
+
assert !@connection.active?
|
45
|
+
|
46
|
+
# Repair all fixture connections so other tests won't break.
|
47
|
+
@fixture_connections.each(&:verify!)
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_successful_reconnection_after_timeout_with_manual_reconnect
|
51
|
+
assert @connection.active?
|
52
|
+
@connection.update('set @@wait_timeout=1')
|
53
|
+
sleep 2
|
54
|
+
@connection.reconnect!
|
55
|
+
assert @connection.active?
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_successful_reconnection_after_timeout_with_verify
|
59
|
+
assert @connection.active?
|
60
|
+
@connection.update('set @@wait_timeout=1')
|
61
|
+
sleep 2
|
62
|
+
@connection.verify!
|
63
|
+
assert @connection.active?
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_execute_after_disconnect
|
67
|
+
@connection.disconnect!
|
68
|
+
|
69
|
+
assert_raise(ActiveRecord::StatementInvalid) do
|
70
|
+
@connection.execute("SELECT 1")
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_quote_after_disconnect
|
75
|
+
@connection.disconnect!
|
76
|
+
|
77
|
+
assert_raise(Mysql2::Error) do
|
78
|
+
@connection.quote("string")
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_active_after_disconnect
|
83
|
+
@connection.disconnect!
|
84
|
+
assert_equal false, @connection.active?
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_wait_timeout_as_string
|
88
|
+
run_without_connection do |orig_connection|
|
89
|
+
ActiveRecord::Base.establish_connection(orig_connection.merge(wait_timeout: "60"))
|
90
|
+
result = ActiveRecord::Base.connection.select_value("SELECT @@SESSION.wait_timeout")
|
91
|
+
assert_equal 60, result
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_wait_timeout_as_url
|
96
|
+
run_without_connection do |orig_connection|
|
97
|
+
ActiveRecord::Base.establish_connection(orig_connection.merge("url" => "mysql2:///?wait_timeout=60"))
|
98
|
+
result = ActiveRecord::Base.connection.select_value("SELECT @@SESSION.wait_timeout")
|
99
|
+
assert_equal 60, result
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_mysql_connection_collation_is_configured
|
104
|
+
assert_equal 'utf8_unicode_ci', @connection.show_variable('collation_connection')
|
105
|
+
assert_equal 'utf8_general_ci', ARUnit2Model.connection.show_variable('collation_connection')
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_mysql_default_in_strict_mode
|
109
|
+
result = @connection.select_value("SELECT @@SESSION.sql_mode")
|
110
|
+
assert_match %r(STRICT_ALL_TABLES), result
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_mysql_strict_mode_disabled
|
114
|
+
run_without_connection do |orig_connection|
|
115
|
+
ActiveRecord::Base.establish_connection(orig_connection.merge(strict: false))
|
116
|
+
result = ActiveRecord::Base.connection.select_value("SELECT @@SESSION.sql_mode")
|
117
|
+
assert_no_match %r(STRICT_ALL_TABLES), result
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_mysql_strict_mode_specified_default
|
122
|
+
run_without_connection do |orig_connection|
|
123
|
+
ActiveRecord::Base.establish_connection(orig_connection.merge(strict: :default))
|
124
|
+
global_sql_mode = ActiveRecord::Base.connection.select_value("SELECT @@GLOBAL.sql_mode")
|
125
|
+
session_sql_mode = ActiveRecord::Base.connection.select_value("SELECT @@SESSION.sql_mode")
|
126
|
+
assert_equal global_sql_mode, session_sql_mode
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_mysql_sql_mode_variable_overrides_strict_mode
|
131
|
+
run_without_connection do |orig_connection|
|
132
|
+
ActiveRecord::Base.establish_connection(orig_connection.deep_merge(variables: { 'sql_mode' => 'ansi' }))
|
133
|
+
result = ActiveRecord::Base.connection.select_value('SELECT @@SESSION.sql_mode')
|
134
|
+
assert_no_match %r(STRICT_ALL_TABLES), result
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_passing_arbitary_flags_to_adapter
|
139
|
+
run_without_connection do |orig_connection|
|
140
|
+
ActiveRecord::Base.establish_connection(orig_connection.merge({flags: Mysql2::Client::COMPRESS}))
|
141
|
+
assert_equal (Mysql2::Client::COMPRESS | Mysql2::Client::FOUND_ROWS), ActiveRecord::Base.connection.raw_connection.query_options[:flags]
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_passing_flags_by_array_to_adapter
|
146
|
+
run_without_connection do |orig_connection|
|
147
|
+
ActiveRecord::Base.establish_connection(orig_connection.merge({flags: ['COMPRESS'] }))
|
148
|
+
assert_equal ["COMPRESS", "FOUND_ROWS"], ActiveRecord::Base.connection.raw_connection.query_options[:flags]
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
def test_mysql_set_session_variable
|
153
|
+
run_without_connection do |orig_connection|
|
154
|
+
ActiveRecord::Base.establish_connection(orig_connection.deep_merge({:variables => {:default_week_format => 3}}))
|
155
|
+
session_mode = ActiveRecord::Base.connection.exec_query "SELECT @@SESSION.DEFAULT_WEEK_FORMAT"
|
156
|
+
assert_equal 3, session_mode.rows.first.first.to_i
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
def test_mysql_set_session_variable_to_default
|
161
|
+
run_without_connection do |orig_connection|
|
162
|
+
ActiveRecord::Base.establish_connection(orig_connection.deep_merge({:variables => {:default_week_format => :default}}))
|
163
|
+
global_mode = ActiveRecord::Base.connection.exec_query "SELECT @@GLOBAL.DEFAULT_WEEK_FORMAT"
|
164
|
+
session_mode = ActiveRecord::Base.connection.exec_query "SELECT @@SESSION.DEFAULT_WEEK_FORMAT"
|
165
|
+
assert_equal global_mode.rows, session_mode.rows
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
def test_logs_name_show_variable
|
170
|
+
@connection.show_variable 'foo'
|
171
|
+
assert_equal "SCHEMA", @subscriber.logged[0][1]
|
172
|
+
end
|
173
|
+
|
174
|
+
def test_logs_name_rename_column_sql
|
175
|
+
@connection.execute "CREATE TABLE `bar_baz` (`foo` varchar(255))"
|
176
|
+
@subscriber.logged.clear
|
177
|
+
@connection.send(:rename_column_sql, 'bar_baz', 'foo', 'foo2')
|
178
|
+
assert_equal "SCHEMA", @subscriber.logged[0][1]
|
179
|
+
ensure
|
180
|
+
@connection.execute "DROP TABLE `bar_baz`"
|
181
|
+
end
|
182
|
+
|
183
|
+
def test_get_and_release_advisory_lock
|
184
|
+
lock_name = "test_lock_name"
|
185
|
+
|
186
|
+
got_lock = @connection.get_advisory_lock(lock_name)
|
187
|
+
assert got_lock, "get_advisory_lock should have returned true but it didn't"
|
188
|
+
|
189
|
+
assert_equal test_lock_free(lock_name), false,
|
190
|
+
"expected the test advisory lock to be held but it wasn't"
|
191
|
+
|
192
|
+
released_lock = @connection.release_advisory_lock(lock_name)
|
193
|
+
assert released_lock, "expected release_advisory_lock to return true but it didn't"
|
194
|
+
|
195
|
+
assert test_lock_free(lock_name), 'expected the test lock to be available after releasing'
|
196
|
+
end
|
197
|
+
|
198
|
+
def test_release_non_existent_advisory_lock
|
199
|
+
lock_name = "fake_lock_name"
|
200
|
+
released_non_existent_lock = @connection.release_advisory_lock(lock_name)
|
201
|
+
assert_equal released_non_existent_lock, false,
|
202
|
+
'expected release_advisory_lock to return false when there was no lock to release'
|
203
|
+
end
|
204
|
+
|
205
|
+
protected
|
206
|
+
|
207
|
+
def test_lock_free(lock_name)
|
208
|
+
@connection.select_value("SELECT IS_FREE_LOCK('#{lock_name}');") == 1
|
209
|
+
end
|
210
|
+
end
|