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,257 +1,257 @@
|
|
1
|
-
require "cases/helper"
|
2
|
-
require 'support/connection_helper'
|
3
|
-
|
4
|
-
module ActiveRecord
|
5
|
-
class PostgresqlConnectionTest < ActiveRecord::PostgreSQLTestCase
|
6
|
-
include ConnectionHelper
|
7
|
-
|
8
|
-
class NonExistentTable < ActiveRecord::Base
|
9
|
-
end
|
10
|
-
|
11
|
-
fixtures :comments
|
12
|
-
|
13
|
-
def setup
|
14
|
-
super
|
15
|
-
@subscriber = SQLSubscriber.new
|
16
|
-
@subscription = ActiveSupport::Notifications.subscribe('sql.active_record', @subscriber)
|
17
|
-
@connection = ActiveRecord::Base.connection
|
18
|
-
end
|
19
|
-
|
20
|
-
def teardown
|
21
|
-
ActiveSupport::Notifications.unsubscribe(@subscription)
|
22
|
-
super
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_truncate
|
26
|
-
count = ActiveRecord::Base.connection.execute("select count(*) from comments").first['count'].to_i
|
27
|
-
assert_operator count, :>, 0
|
28
|
-
ActiveRecord::Base.connection.truncate("comments")
|
29
|
-
count = ActiveRecord::Base.connection.execute("select count(*) from comments").first['count'].to_i
|
30
|
-
assert_equal 0, count
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_encoding
|
34
|
-
assert_not_nil @connection.encoding
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_collation
|
38
|
-
assert_not_nil @connection.collation
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_ctype
|
42
|
-
assert_not_nil @connection.ctype
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_default_client_min_messages
|
46
|
-
assert_equal "warning", @connection.client_min_messages
|
47
|
-
end
|
48
|
-
|
49
|
-
# Ensure, we can set connection params using the example of Generic
|
50
|
-
# Query Optimizer (geqo). It is 'on' per default.
|
51
|
-
def test_connection_options
|
52
|
-
params = ActiveRecord::Base.connection_config.dup
|
53
|
-
params[:options] = "-c geqo=off"
|
54
|
-
NonExistentTable.establish_connection(params)
|
55
|
-
|
56
|
-
# Verify the connection param has been applied.
|
57
|
-
expect = NonExistentTable.connection.query('show geqo').first.first
|
58
|
-
assert_equal 'off', expect
|
59
|
-
end
|
60
|
-
|
61
|
-
def test_reset
|
62
|
-
@connection.query('ROLLBACK')
|
63
|
-
@connection.query('SET geqo TO off')
|
64
|
-
|
65
|
-
# Verify the setting has been applied.
|
66
|
-
expect = @connection.query('show geqo').first.first
|
67
|
-
assert_equal 'off', expect
|
68
|
-
|
69
|
-
@connection.reset!
|
70
|
-
|
71
|
-
# Verify the setting has been cleared.
|
72
|
-
expect = @connection.query('show geqo').first.first
|
73
|
-
assert_equal 'on', expect
|
74
|
-
end
|
75
|
-
|
76
|
-
def test_reset_with_transaction
|
77
|
-
@connection.query('ROLLBACK')
|
78
|
-
@connection.query('SET geqo TO off')
|
79
|
-
|
80
|
-
# Verify the setting has been applied.
|
81
|
-
expect = @connection.query('show geqo').first.first
|
82
|
-
assert_equal 'off', expect
|
83
|
-
|
84
|
-
@connection.query('BEGIN')
|
85
|
-
@connection.reset!
|
86
|
-
|
87
|
-
# Verify the setting has been cleared.
|
88
|
-
expect = @connection.query('show geqo').first.first
|
89
|
-
assert_equal 'on', expect
|
90
|
-
end
|
91
|
-
|
92
|
-
def test_tables_logs_name
|
93
|
-
ActiveSupport::Deprecation.silence { @connection.tables('hello') }
|
94
|
-
assert_equal 'SCHEMA', @subscriber.logged[0][1]
|
95
|
-
end
|
96
|
-
|
97
|
-
def test_indexes_logs_name
|
98
|
-
@connection.indexes('items', 'hello')
|
99
|
-
assert_equal 'SCHEMA', @subscriber.logged[0][1]
|
100
|
-
end
|
101
|
-
|
102
|
-
def test_table_exists_logs_name
|
103
|
-
ActiveSupport::Deprecation.silence { @connection.table_exists?('items') }
|
104
|
-
assert_equal 'SCHEMA', @subscriber.logged[0][1]
|
105
|
-
end
|
106
|
-
|
107
|
-
def test_table_alias_length_logs_name
|
108
|
-
@connection.instance_variable_set("@max_identifier_length", nil)
|
109
|
-
@connection.table_alias_length
|
110
|
-
assert_equal 'SCHEMA', @subscriber.logged[0][1]
|
111
|
-
end
|
112
|
-
|
113
|
-
def test_current_database_logs_name
|
114
|
-
@connection.current_database
|
115
|
-
assert_equal 'SCHEMA', @subscriber.logged[0][1]
|
116
|
-
end
|
117
|
-
|
118
|
-
def test_encoding_logs_name
|
119
|
-
@connection.encoding
|
120
|
-
assert_equal 'SCHEMA', @subscriber.logged[0][1]
|
121
|
-
end
|
122
|
-
|
123
|
-
def test_schema_names_logs_name
|
124
|
-
@connection.schema_names
|
125
|
-
assert_equal 'SCHEMA', @subscriber.logged[0][1]
|
126
|
-
end
|
127
|
-
|
128
|
-
if ActiveRecord::Base.connection.prepared_statements
|
129
|
-
def test_statement_key_is_logged
|
130
|
-
bind = Relation::QueryAttribute.new(nil, 1, Type::Value.new)
|
131
|
-
@connection.exec_query('SELECT $1::integer', 'SQL', [bind], prepare: true)
|
132
|
-
name = @subscriber.payloads.last[:statement_name]
|
133
|
-
assert name
|
134
|
-
res = @connection.exec_query("EXPLAIN (FORMAT JSON) EXECUTE #{name}(1)")
|
135
|
-
plan = res.column_types['QUERY PLAN'].deserialize res.rows.first.first
|
136
|
-
assert_operator plan.length, :>, 0
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
# Must have PostgreSQL >= 9.2, or with_manual_interventions set to
|
141
|
-
# true for this test to run.
|
142
|
-
#
|
143
|
-
# When prompted, restart the PostgreSQL server with the
|
144
|
-
# "-m fast" option or kill the individual connection assuming
|
145
|
-
# you know the incantation to do that.
|
146
|
-
# To restart PostgreSQL 9.1 on OS X, installed via MacPorts, ...
|
147
|
-
# sudo su postgres -c "pg_ctl restart -D /opt/local/var/db/postgresql91/defaultdb/ -m fast"
|
148
|
-
def test_reconnection_after_actual_disconnection_with_verify
|
149
|
-
original_connection_pid = @connection.query('select pg_backend_pid()')
|
150
|
-
|
151
|
-
# Sanity check.
|
152
|
-
assert @connection.active?
|
153
|
-
|
154
|
-
if @connection.send(:postgresql_version) >= 90200
|
155
|
-
secondary_connection = ActiveRecord::Base.connection_pool.checkout
|
156
|
-
secondary_connection.query("select pg_terminate_backend(#{original_connection_pid.first.first})")
|
157
|
-
ActiveRecord::Base.connection_pool.checkin(secondary_connection)
|
158
|
-
elsif ARTest.config['with_manual_interventions']
|
159
|
-
puts 'Kill the connection now (e.g. by restarting the PostgreSQL ' +
|
160
|
-
'server with the "-m fast" option) and then press enter.'
|
161
|
-
$stdin.gets
|
162
|
-
else
|
163
|
-
# We're not capable of terminating the backend ourselves, and
|
164
|
-
# we're not allowed to seek assistance; bail out without
|
165
|
-
# actually testing anything.
|
166
|
-
return
|
167
|
-
end
|
168
|
-
|
169
|
-
@connection.verify!
|
170
|
-
|
171
|
-
assert @connection.active?
|
172
|
-
|
173
|
-
# If we get no exception here, then either we re-connected successfully, or
|
174
|
-
# we never actually got disconnected.
|
175
|
-
new_connection_pid = @connection.query('select pg_backend_pid()')
|
176
|
-
|
177
|
-
assert_not_equal original_connection_pid, new_connection_pid,
|
178
|
-
"umm -- looks like you didn't break the connection, because we're still " +
|
179
|
-
"successfully querying with the same connection pid."
|
180
|
-
ensure
|
181
|
-
# Repair all fixture connections so other tests won't break.
|
182
|
-
@fixture_connections.each(&:verify!)
|
183
|
-
end
|
184
|
-
|
185
|
-
def test_set_session_variable_true
|
186
|
-
run_without_connection do |orig_connection|
|
187
|
-
ActiveRecord::Base.establish_connection(orig_connection.deep_merge({:variables => {:debug_print_plan => true}}))
|
188
|
-
set_true = ActiveRecord::Base.connection.exec_query "SHOW DEBUG_PRINT_PLAN"
|
189
|
-
assert_equal set_true.rows, [["on"]]
|
190
|
-
end
|
191
|
-
end
|
192
|
-
|
193
|
-
def test_set_session_variable_false
|
194
|
-
run_without_connection do |orig_connection|
|
195
|
-
ActiveRecord::Base.establish_connection(orig_connection.deep_merge({:variables => {:debug_print_plan => false}}))
|
196
|
-
set_false = ActiveRecord::Base.connection.exec_query "SHOW DEBUG_PRINT_PLAN"
|
197
|
-
assert_equal set_false.rows, [["off"]]
|
198
|
-
end
|
199
|
-
end
|
200
|
-
|
201
|
-
def test_set_session_variable_nil
|
202
|
-
run_without_connection do |orig_connection|
|
203
|
-
# This should be a no-op that does not raise an error
|
204
|
-
ActiveRecord::Base.establish_connection(orig_connection.deep_merge({:variables => {:debug_print_plan => nil}}))
|
205
|
-
end
|
206
|
-
end
|
207
|
-
|
208
|
-
def test_set_session_variable_default
|
209
|
-
run_without_connection do |orig_connection|
|
210
|
-
# This should execute a query that does not raise an error
|
211
|
-
ActiveRecord::Base.establish_connection(orig_connection.deep_merge({:variables => {:debug_print_plan => :default}}))
|
212
|
-
end
|
213
|
-
end
|
214
|
-
|
215
|
-
def test_get_and_release_advisory_lock
|
216
|
-
lock_id = 5295901941911233559
|
217
|
-
list_advisory_locks = <<-SQL
|
218
|
-
SELECT locktype,
|
219
|
-
(classid::bigint << 32) | objid::bigint AS lock_id
|
220
|
-
FROM pg_locks
|
221
|
-
WHERE locktype = 'advisory'
|
222
|
-
SQL
|
223
|
-
|
224
|
-
got_lock = @connection.get_advisory_lock(lock_id)
|
225
|
-
assert got_lock, "get_advisory_lock should have returned true but it didn't"
|
226
|
-
|
227
|
-
advisory_lock = @connection.query(list_advisory_locks).find {|l| l[1] == lock_id}
|
228
|
-
assert advisory_lock,
|
229
|
-
"expected to find an advisory lock with lock_id #{lock_id} but there wasn't one"
|
230
|
-
|
231
|
-
released_lock = @connection.release_advisory_lock(lock_id)
|
232
|
-
assert released_lock, "expected release_advisory_lock to return true but it didn't"
|
233
|
-
|
234
|
-
advisory_locks = @connection.query(list_advisory_locks).select {|l| l[1] == lock_id}
|
235
|
-
assert_empty advisory_locks,
|
236
|
-
"expected to have released advisory lock with lock_id #{lock_id} but it was still held"
|
237
|
-
end
|
238
|
-
|
239
|
-
def test_release_non_existent_advisory_lock
|
240
|
-
fake_lock_id = 2940075057017742022
|
241
|
-
with_warning_suppression do
|
242
|
-
released_non_existent_lock = @connection.release_advisory_lock(fake_lock_id)
|
243
|
-
assert_equal released_non_existent_lock, false,
|
244
|
-
'expected release_advisory_lock to return false when there was no lock to release'
|
245
|
-
end
|
246
|
-
end
|
247
|
-
|
248
|
-
protected
|
249
|
-
|
250
|
-
def with_warning_suppression
|
251
|
-
log_level = @connection.client_min_messages
|
252
|
-
@connection.client_min_messages = 'error'
|
253
|
-
yield
|
254
|
-
@connection.client_min_messages = log_level
|
255
|
-
end
|
256
|
-
end
|
257
|
-
end
|
1
|
+
require "cases/helper"
|
2
|
+
require 'support/connection_helper'
|
3
|
+
|
4
|
+
module ActiveRecord
|
5
|
+
class PostgresqlConnectionTest < ActiveRecord::PostgreSQLTestCase
|
6
|
+
include ConnectionHelper
|
7
|
+
|
8
|
+
class NonExistentTable < ActiveRecord::Base
|
9
|
+
end
|
10
|
+
|
11
|
+
fixtures :comments
|
12
|
+
|
13
|
+
def setup
|
14
|
+
super
|
15
|
+
@subscriber = SQLSubscriber.new
|
16
|
+
@subscription = ActiveSupport::Notifications.subscribe('sql.active_record', @subscriber)
|
17
|
+
@connection = ActiveRecord::Base.connection
|
18
|
+
end
|
19
|
+
|
20
|
+
def teardown
|
21
|
+
ActiveSupport::Notifications.unsubscribe(@subscription)
|
22
|
+
super
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_truncate
|
26
|
+
count = ActiveRecord::Base.connection.execute("select count(*) from comments").first['count'].to_i
|
27
|
+
assert_operator count, :>, 0
|
28
|
+
ActiveRecord::Base.connection.truncate("comments")
|
29
|
+
count = ActiveRecord::Base.connection.execute("select count(*) from comments").first['count'].to_i
|
30
|
+
assert_equal 0, count
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_encoding
|
34
|
+
assert_not_nil @connection.encoding
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_collation
|
38
|
+
assert_not_nil @connection.collation
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_ctype
|
42
|
+
assert_not_nil @connection.ctype
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_default_client_min_messages
|
46
|
+
assert_equal "warning", @connection.client_min_messages
|
47
|
+
end
|
48
|
+
|
49
|
+
# Ensure, we can set connection params using the example of Generic
|
50
|
+
# Query Optimizer (geqo). It is 'on' per default.
|
51
|
+
def test_connection_options
|
52
|
+
params = ActiveRecord::Base.connection_config.dup
|
53
|
+
params[:options] = "-c geqo=off"
|
54
|
+
NonExistentTable.establish_connection(params)
|
55
|
+
|
56
|
+
# Verify the connection param has been applied.
|
57
|
+
expect = NonExistentTable.connection.query('show geqo').first.first
|
58
|
+
assert_equal 'off', expect
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_reset
|
62
|
+
@connection.query('ROLLBACK')
|
63
|
+
@connection.query('SET geqo TO off')
|
64
|
+
|
65
|
+
# Verify the setting has been applied.
|
66
|
+
expect = @connection.query('show geqo').first.first
|
67
|
+
assert_equal 'off', expect
|
68
|
+
|
69
|
+
@connection.reset!
|
70
|
+
|
71
|
+
# Verify the setting has been cleared.
|
72
|
+
expect = @connection.query('show geqo').first.first
|
73
|
+
assert_equal 'on', expect
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_reset_with_transaction
|
77
|
+
@connection.query('ROLLBACK')
|
78
|
+
@connection.query('SET geqo TO off')
|
79
|
+
|
80
|
+
# Verify the setting has been applied.
|
81
|
+
expect = @connection.query('show geqo').first.first
|
82
|
+
assert_equal 'off', expect
|
83
|
+
|
84
|
+
@connection.query('BEGIN')
|
85
|
+
@connection.reset!
|
86
|
+
|
87
|
+
# Verify the setting has been cleared.
|
88
|
+
expect = @connection.query('show geqo').first.first
|
89
|
+
assert_equal 'on', expect
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_tables_logs_name
|
93
|
+
ActiveSupport::Deprecation.silence { @connection.tables('hello') }
|
94
|
+
assert_equal 'SCHEMA', @subscriber.logged[0][1]
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_indexes_logs_name
|
98
|
+
@connection.indexes('items', 'hello')
|
99
|
+
assert_equal 'SCHEMA', @subscriber.logged[0][1]
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_table_exists_logs_name
|
103
|
+
ActiveSupport::Deprecation.silence { @connection.table_exists?('items') }
|
104
|
+
assert_equal 'SCHEMA', @subscriber.logged[0][1]
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_table_alias_length_logs_name
|
108
|
+
@connection.instance_variable_set("@max_identifier_length", nil)
|
109
|
+
@connection.table_alias_length
|
110
|
+
assert_equal 'SCHEMA', @subscriber.logged[0][1]
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_current_database_logs_name
|
114
|
+
@connection.current_database
|
115
|
+
assert_equal 'SCHEMA', @subscriber.logged[0][1]
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_encoding_logs_name
|
119
|
+
@connection.encoding
|
120
|
+
assert_equal 'SCHEMA', @subscriber.logged[0][1]
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_schema_names_logs_name
|
124
|
+
@connection.schema_names
|
125
|
+
assert_equal 'SCHEMA', @subscriber.logged[0][1]
|
126
|
+
end
|
127
|
+
|
128
|
+
if ActiveRecord::Base.connection.prepared_statements
|
129
|
+
def test_statement_key_is_logged
|
130
|
+
bind = Relation::QueryAttribute.new(nil, 1, Type::Value.new)
|
131
|
+
@connection.exec_query('SELECT $1::integer', 'SQL', [bind], prepare: true)
|
132
|
+
name = @subscriber.payloads.last[:statement_name]
|
133
|
+
assert name
|
134
|
+
res = @connection.exec_query("EXPLAIN (FORMAT JSON) EXECUTE #{name}(1)")
|
135
|
+
plan = res.column_types['QUERY PLAN'].deserialize res.rows.first.first
|
136
|
+
assert_operator plan.length, :>, 0
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
# Must have PostgreSQL >= 9.2, or with_manual_interventions set to
|
141
|
+
# true for this test to run.
|
142
|
+
#
|
143
|
+
# When prompted, restart the PostgreSQL server with the
|
144
|
+
# "-m fast" option or kill the individual connection assuming
|
145
|
+
# you know the incantation to do that.
|
146
|
+
# To restart PostgreSQL 9.1 on OS X, installed via MacPorts, ...
|
147
|
+
# sudo su postgres -c "pg_ctl restart -D /opt/local/var/db/postgresql91/defaultdb/ -m fast"
|
148
|
+
def test_reconnection_after_actual_disconnection_with_verify
|
149
|
+
original_connection_pid = @connection.query('select pg_backend_pid()')
|
150
|
+
|
151
|
+
# Sanity check.
|
152
|
+
assert @connection.active?
|
153
|
+
|
154
|
+
if @connection.send(:postgresql_version) >= 90200
|
155
|
+
secondary_connection = ActiveRecord::Base.connection_pool.checkout
|
156
|
+
secondary_connection.query("select pg_terminate_backend(#{original_connection_pid.first.first})")
|
157
|
+
ActiveRecord::Base.connection_pool.checkin(secondary_connection)
|
158
|
+
elsif ARTest.config['with_manual_interventions']
|
159
|
+
puts 'Kill the connection now (e.g. by restarting the PostgreSQL ' +
|
160
|
+
'server with the "-m fast" option) and then press enter.'
|
161
|
+
$stdin.gets
|
162
|
+
else
|
163
|
+
# We're not capable of terminating the backend ourselves, and
|
164
|
+
# we're not allowed to seek assistance; bail out without
|
165
|
+
# actually testing anything.
|
166
|
+
return
|
167
|
+
end
|
168
|
+
|
169
|
+
@connection.verify!
|
170
|
+
|
171
|
+
assert @connection.active?
|
172
|
+
|
173
|
+
# If we get no exception here, then either we re-connected successfully, or
|
174
|
+
# we never actually got disconnected.
|
175
|
+
new_connection_pid = @connection.query('select pg_backend_pid()')
|
176
|
+
|
177
|
+
assert_not_equal original_connection_pid, new_connection_pid,
|
178
|
+
"umm -- looks like you didn't break the connection, because we're still " +
|
179
|
+
"successfully querying with the same connection pid."
|
180
|
+
ensure
|
181
|
+
# Repair all fixture connections so other tests won't break.
|
182
|
+
@fixture_connections.each(&:verify!)
|
183
|
+
end
|
184
|
+
|
185
|
+
def test_set_session_variable_true
|
186
|
+
run_without_connection do |orig_connection|
|
187
|
+
ActiveRecord::Base.establish_connection(orig_connection.deep_merge({:variables => {:debug_print_plan => true}}))
|
188
|
+
set_true = ActiveRecord::Base.connection.exec_query "SHOW DEBUG_PRINT_PLAN"
|
189
|
+
assert_equal set_true.rows, [["on"]]
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
def test_set_session_variable_false
|
194
|
+
run_without_connection do |orig_connection|
|
195
|
+
ActiveRecord::Base.establish_connection(orig_connection.deep_merge({:variables => {:debug_print_plan => false}}))
|
196
|
+
set_false = ActiveRecord::Base.connection.exec_query "SHOW DEBUG_PRINT_PLAN"
|
197
|
+
assert_equal set_false.rows, [["off"]]
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
def test_set_session_variable_nil
|
202
|
+
run_without_connection do |orig_connection|
|
203
|
+
# This should be a no-op that does not raise an error
|
204
|
+
ActiveRecord::Base.establish_connection(orig_connection.deep_merge({:variables => {:debug_print_plan => nil}}))
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
def test_set_session_variable_default
|
209
|
+
run_without_connection do |orig_connection|
|
210
|
+
# This should execute a query that does not raise an error
|
211
|
+
ActiveRecord::Base.establish_connection(orig_connection.deep_merge({:variables => {:debug_print_plan => :default}}))
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
def test_get_and_release_advisory_lock
|
216
|
+
lock_id = 5295901941911233559
|
217
|
+
list_advisory_locks = <<-SQL
|
218
|
+
SELECT locktype,
|
219
|
+
(classid::bigint << 32) | objid::bigint AS lock_id
|
220
|
+
FROM pg_locks
|
221
|
+
WHERE locktype = 'advisory'
|
222
|
+
SQL
|
223
|
+
|
224
|
+
got_lock = @connection.get_advisory_lock(lock_id)
|
225
|
+
assert got_lock, "get_advisory_lock should have returned true but it didn't"
|
226
|
+
|
227
|
+
advisory_lock = @connection.query(list_advisory_locks).find {|l| l[1] == lock_id}
|
228
|
+
assert advisory_lock,
|
229
|
+
"expected to find an advisory lock with lock_id #{lock_id} but there wasn't one"
|
230
|
+
|
231
|
+
released_lock = @connection.release_advisory_lock(lock_id)
|
232
|
+
assert released_lock, "expected release_advisory_lock to return true but it didn't"
|
233
|
+
|
234
|
+
advisory_locks = @connection.query(list_advisory_locks).select {|l| l[1] == lock_id}
|
235
|
+
assert_empty advisory_locks,
|
236
|
+
"expected to have released advisory lock with lock_id #{lock_id} but it was still held"
|
237
|
+
end
|
238
|
+
|
239
|
+
def test_release_non_existent_advisory_lock
|
240
|
+
fake_lock_id = 2940075057017742022
|
241
|
+
with_warning_suppression do
|
242
|
+
released_non_existent_lock = @connection.release_advisory_lock(fake_lock_id)
|
243
|
+
assert_equal released_non_existent_lock, false,
|
244
|
+
'expected release_advisory_lock to return false when there was no lock to release'
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
protected
|
249
|
+
|
250
|
+
def with_warning_suppression
|
251
|
+
log_level = @connection.client_min_messages
|
252
|
+
@connection.client_min_messages = 'error'
|
253
|
+
yield
|
254
|
+
@connection.client_min_messages = log_level
|
255
|
+
end
|
256
|
+
end
|
257
|
+
end
|