ibm_db 3.0.5-x86-mingw32 → 4.0.0-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 +4 -4
- data/CHANGES +4 -0
- data/LICENSE +1 -1
- data/MANIFEST +14 -14
- data/ParameterizedQueries README +6 -6
- data/README +208 -225
- data/ext/Makefile.nt32 +181 -181
- data/ext/Makefile.nt32.191 +212 -212
- data/ext/extconf.rb +291 -291
- data/ext/ibm_db.c +11887 -11887
- data/ext/ruby_ibm_db.h +241 -241
- data/ext/ruby_ibm_db_cli.c +866 -866
- data/ext/ruby_ibm_db_cli.h +500 -500
- data/init.rb +41 -41
- data/lib/IBM_DB.rb +27 -27
- data/lib/active_record/connection_adapters/ibm_db_adapter.rb +3452 -3177
- data/lib/active_record/connection_adapters/ibmdb_adapter.rb +5 -2
- data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -328
- data/lib/mswin32/ibm_db.rb +91 -123
- data/lib/mswin32/rb2x/i386/ibm_db.so +0 -0
- data/test/active_record/connection_adapters/fake_adapter.rb +49 -46
- data/test/assets/example.log +1 -1
- data/test/assets/test.txt +1 -1
- data/test/cases/adapter_test.rb +351 -276
- data/test/cases/adapters/mysql2/active_schema_test.rb +193 -0
- data/test/cases/adapters/mysql2/bind_parameter_test.rb +50 -0
- data/test/cases/adapters/mysql2/boolean_test.rb +100 -0
- data/test/cases/adapters/mysql2/case_sensitivity_test.rb +63 -0
- data/test/cases/adapters/mysql2/charset_collation_test.rb +54 -0
- data/test/cases/adapters/mysql2/connection_test.rb +210 -0
- data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +45 -0
- data/test/cases/adapters/mysql2/enum_test.rb +26 -0
- data/test/cases/adapters/mysql2/explain_test.rb +21 -0
- data/test/cases/adapters/mysql2/json_test.rb +195 -0
- data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +83 -0
- data/test/cases/adapters/mysql2/reserved_word_test.rb +152 -0
- data/test/cases/adapters/mysql2/schema_migrations_test.rb +59 -0
- data/test/cases/adapters/mysql2/schema_test.rb +126 -0
- data/test/cases/adapters/mysql2/sp_test.rb +36 -0
- data/test/cases/adapters/mysql2/sql_types_test.rb +14 -0
- data/test/cases/adapters/mysql2/table_options_test.rb +42 -0
- data/test/cases/adapters/mysql2/unsigned_type_test.rb +66 -0
- data/test/cases/adapters/postgresql/active_schema_test.rb +98 -0
- data/test/cases/adapters/postgresql/array_test.rb +339 -0
- data/test/cases/adapters/postgresql/bit_string_test.rb +82 -0
- data/test/cases/adapters/postgresql/bytea_test.rb +134 -0
- data/test/cases/adapters/postgresql/case_insensitive_test.rb +26 -0
- data/test/cases/adapters/postgresql/change_schema_test.rb +38 -0
- data/test/cases/adapters/postgresql/cidr_test.rb +25 -0
- data/test/cases/adapters/postgresql/citext_test.rb +78 -0
- data/test/cases/adapters/postgresql/collation_test.rb +53 -0
- data/test/cases/adapters/postgresql/composite_test.rb +132 -0
- data/test/cases/adapters/postgresql/connection_test.rb +257 -0
- data/test/cases/adapters/postgresql/datatype_test.rb +92 -0
- data/test/cases/adapters/postgresql/domain_test.rb +47 -0
- data/test/cases/adapters/postgresql/enum_test.rb +91 -0
- data/test/cases/adapters/postgresql/explain_test.rb +20 -0
- data/test/cases/adapters/postgresql/extension_migration_test.rb +63 -0
- data/test/cases/adapters/postgresql/full_text_test.rb +44 -0
- data/test/cases/adapters/postgresql/geometric_test.rb +378 -0
- data/test/cases/adapters/postgresql/hstore_test.rb +382 -0
- data/test/cases/adapters/postgresql/infinity_test.rb +69 -0
- data/test/cases/adapters/postgresql/integer_test.rb +25 -0
- data/test/cases/adapters/postgresql/json_test.rb +237 -0
- data/test/cases/adapters/postgresql/ltree_test.rb +53 -0
- data/test/cases/adapters/postgresql/money_test.rb +96 -0
- data/test/cases/adapters/postgresql/network_test.rb +94 -0
- data/test/cases/adapters/postgresql/numbers_test.rb +49 -0
- data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +405 -0
- data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -0
- data/test/cases/adapters/postgresql/quoting_test.rb +44 -0
- data/test/cases/adapters/postgresql/range_test.rb +343 -0
- data/test/cases/adapters/postgresql/referential_integrity_test.rb +111 -0
- data/test/cases/adapters/postgresql/rename_table_test.rb +34 -0
- data/test/cases/adapters/postgresql/schema_authorization_test.rb +119 -0
- data/test/cases/adapters/postgresql/schema_test.rb +597 -0
- data/test/cases/adapters/postgresql/serial_test.rb +154 -0
- data/test/cases/adapters/postgresql/statement_pool_test.rb +41 -0
- data/test/cases/adapters/postgresql/timestamp_test.rb +90 -0
- data/test/cases/adapters/postgresql/type_lookup_test.rb +33 -0
- data/test/cases/adapters/postgresql/utils_test.rb +62 -0
- data/test/cases/adapters/postgresql/uuid_test.rb +294 -0
- data/test/cases/adapters/postgresql/xml_test.rb +54 -0
- data/test/cases/adapters/sqlite3/collation_test.rb +53 -0
- data/test/cases/adapters/sqlite3/copy_table_test.rb +98 -0
- data/test/cases/adapters/sqlite3/explain_test.rb +21 -0
- data/test/cases/adapters/sqlite3/quoting_test.rb +101 -0
- data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +441 -0
- data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +24 -0
- data/test/cases/adapters/sqlite3/statement_pool_test.rb +20 -0
- data/test/cases/aggregations_test.rb +168 -158
- data/test/cases/ar_schema_test.rb +146 -161
- data/test/cases/associations/association_scope_test.rb +16 -21
- data/test/cases/associations/belongs_to_associations_test.rb +1141 -1029
- data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +41 -0
- data/test/cases/associations/callbacks_test.rb +190 -192
- data/test/cases/associations/cascaded_eager_loading_test.rb +188 -188
- data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -36
- data/test/cases/associations/eager_load_nested_include_test.rb +126 -128
- data/test/cases/associations/eager_singularization_test.rb +148 -148
- data/test/cases/associations/eager_test.rb +1514 -1429
- data/test/cases/associations/extension_test.rb +87 -82
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +1004 -972
- data/test/cases/associations/has_many_associations_test.rb +2501 -2182
- data/test/cases/associations/has_many_through_associations_test.rb +1271 -1204
- data/test/cases/associations/has_one_associations_test.rb +707 -610
- data/test/cases/associations/has_one_through_associations_test.rb +383 -380
- data/test/cases/associations/inner_join_association_test.rb +139 -139
- data/test/cases/associations/inverse_associations_test.rb +733 -706
- data/test/cases/associations/join_model_test.rb +777 -754
- data/test/cases/associations/left_outer_join_association_test.rb +88 -0
- data/test/cases/associations/nested_through_associations_test.rb +579 -579
- data/test/cases/associations/required_test.rb +102 -82
- data/test/cases/associations_test.rb +385 -380
- data/test/cases/attribute_decorators_test.rb +125 -125
- data/test/cases/attribute_methods/read_test.rb +60 -60
- data/test/cases/attribute_methods_test.rb +1009 -952
- data/test/cases/attribute_set_test.rb +270 -210
- data/test/cases/attribute_test.rb +246 -180
- data/test/cases/attributes_test.rb +253 -136
- data/test/cases/autosave_association_test.rb +1708 -1595
- data/test/cases/base_test.rb +1713 -1664
- data/test/cases/batches_test.rb +489 -212
- data/test/cases/binary_test.rb +44 -52
- data/test/cases/bind_parameter_test.rb +110 -100
- data/test/cases/cache_key_test.rb +25 -0
- data/test/cases/calculations_test.rb +798 -646
- data/test/cases/callbacks_test.rb +636 -543
- data/test/cases/clone_test.rb +40 -40
- data/test/cases/coders/json_test.rb +15 -0
- data/test/cases/coders/yaml_column_test.rb +63 -63
- data/test/cases/collection_cache_key_test.rb +115 -0
- data/test/cases/column_alias_test.rb +17 -17
- data/test/cases/column_definition_test.rb +92 -123
- data/test/cases/comment_test.rb +143 -0
- data/test/cases/connection_adapters/adapter_leasing_test.rb +56 -54
- data/test/cases/connection_adapters/connection_handler_test.rb +160 -53
- data/test/cases/connection_adapters/connection_specification_test.rb +12 -12
- data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +255 -293
- data/test/cases/connection_adapters/mysql_type_lookup_test.rb +69 -65
- data/test/cases/connection_adapters/quoting_test.rb +13 -13
- data/test/cases/connection_adapters/schema_cache_test.rb +61 -56
- data/test/cases/connection_adapters/type_lookup_test.rb +118 -110
- data/test/cases/connection_management_test.rb +112 -122
- data/test/cases/connection_pool_test.rb +521 -346
- data/test/cases/connection_specification/resolver_test.rb +131 -116
- data/test/cases/core_test.rb +112 -112
- data/test/cases/counter_cache_test.rb +214 -209
- data/test/cases/custom_locking_test.rb +17 -17
- data/test/cases/database_statements_test.rb +34 -19
- data/test/cases/{invalid_date_test.rb → date_test.rb} +44 -32
- data/test/cases/date_time_precision_test.rb +106 -0
- data/test/cases/date_time_test.rb +61 -61
- data/test/cases/defaults_test.rb +218 -223
- data/test/cases/dirty_test.rb +763 -785
- data/test/cases/disconnected_test.rb +30 -28
- data/test/cases/dup_test.rb +157 -157
- data/test/cases/enum_test.rb +444 -290
- data/test/cases/errors_test.rb +16 -0
- data/test/cases/explain_subscriber_test.rb +64 -64
- data/test/cases/explain_test.rb +87 -76
- data/test/cases/finder_respond_to_test.rb +60 -60
- data/test/cases/finder_test.rb +1294 -1169
- data/test/cases/fixture_set/file_test.rb +156 -138
- data/test/cases/fixtures_test.rb +988 -908
- data/test/cases/forbidden_attributes_protection_test.rb +165 -99
- data/test/cases/habtm_destroy_order_test.rb +61 -61
- data/test/cases/helper.rb +204 -210
- data/test/cases/hot_compatibility_test.rb +142 -54
- data/test/cases/i18n_test.rb +45 -45
- data/test/cases/inheritance_test.rb +606 -375
- data/test/cases/integration_test.rb +155 -139
- data/test/cases/invalid_connection_test.rb +24 -22
- data/test/cases/invertible_migration_test.rb +387 -295
- data/test/cases/json_serialization_test.rb +311 -302
- data/test/cases/locking_test.rb +493 -477
- data/test/cases/log_subscriber_test.rb +225 -136
- data/test/cases/migration/change_schema_test.rb +458 -512
- data/test/cases/migration/change_table_test.rb +256 -224
- data/test/cases/migration/column_attributes_test.rb +176 -192
- data/test/cases/migration/column_positioning_test.rb +56 -56
- data/test/cases/migration/columns_test.rb +310 -304
- data/test/cases/migration/command_recorder_test.rb +350 -305
- data/test/cases/migration/compatibility_test.rb +118 -0
- data/test/cases/migration/create_join_table_test.rb +157 -148
- data/test/cases/migration/foreign_key_test.rb +360 -328
- data/test/cases/migration/helper.rb +39 -39
- data/test/cases/migration/index_test.rb +218 -216
- data/test/cases/migration/logger_test.rb +36 -36
- data/test/cases/migration/pending_migrations_test.rb +52 -53
- data/test/cases/migration/references_foreign_key_test.rb +216 -169
- data/test/cases/migration/references_index_test.rb +101 -101
- data/test/cases/migration/references_statements_test.rb +136 -116
- data/test/cases/migration/rename_table_test.rb +93 -93
- data/test/cases/migration_test.rb +1157 -959
- data/test/cases/migrator_test.rb +470 -388
- data/test/cases/mixin_test.rb +68 -70
- data/test/cases/modules_test.rb +172 -173
- data/test/cases/multiparameter_attributes_test.rb +372 -350
- data/test/cases/multiple_db_test.rb +122 -115
- data/test/cases/nested_attributes_test.rb +1098 -1070
- data/test/cases/nested_attributes_with_callbacks_test.rb +144 -144
- data/test/cases/persistence_test.rb +1001 -909
- data/test/cases/pooled_connections_test.rb +81 -81
- data/test/cases/primary_keys_test.rb +376 -237
- data/test/cases/query_cache_test.rb +446 -326
- data/test/cases/quoting_test.rb +202 -156
- data/test/cases/readonly_test.rb +119 -118
- data/test/cases/reaper_test.rb +85 -85
- data/test/cases/reflection_test.rb +509 -463
- data/test/cases/relation/delegation_test.rb +63 -68
- data/test/cases/relation/merging_test.rb +157 -161
- data/test/cases/relation/mutation_test.rb +183 -165
- data/test/cases/relation/or_test.rb +92 -0
- data/test/cases/relation/predicate_builder_test.rb +16 -14
- data/test/cases/relation/record_fetch_warning_test.rb +40 -0
- data/test/cases/relation/where_chain_test.rb +105 -181
- data/test/cases/relation/where_clause_test.rb +182 -0
- data/test/cases/relation/where_test.rb +322 -300
- data/test/cases/relation_test.rb +328 -319
- data/test/cases/relations_test.rb +2026 -1815
- data/test/cases/reload_models_test.rb +22 -22
- data/test/cases/result_test.rb +90 -80
- data/test/cases/sanitize_test.rb +176 -83
- data/test/cases/schema_dumper_test.rb +457 -463
- data/test/cases/schema_loading_test.rb +52 -0
- data/test/cases/scoping/default_scoping_test.rb +528 -454
- data/test/cases/scoping/named_scoping_test.rb +561 -524
- data/test/cases/scoping/relation_scoping_test.rb +400 -357
- data/test/cases/secure_token_test.rb +32 -0
- data/test/cases/serialization_test.rb +104 -104
- data/test/cases/serialized_attribute_test.rb +364 -277
- data/test/cases/statement_cache_test.rb +136 -98
- data/test/cases/store_test.rb +195 -194
- data/test/cases/suppressor_test.rb +63 -0
- data/test/cases/tasks/database_tasks_test.rb +462 -398
- data/test/cases/tasks/mysql_rake_test.rb +345 -324
- data/test/cases/tasks/postgresql_rake_test.rb +304 -250
- data/test/cases/tasks/sqlite_rake_test.rb +220 -193
- data/test/cases/test_case.rb +131 -123
- data/test/cases/test_fixtures_test.rb +36 -0
- data/test/cases/time_precision_test.rb +102 -0
- data/test/cases/timestamp_test.rb +501 -467
- data/test/cases/touch_later_test.rb +121 -0
- data/test/cases/transaction_callbacks_test.rb +518 -452
- data/test/cases/transaction_isolation_test.rb +106 -106
- data/test/cases/transactions_test.rb +834 -817
- data/test/cases/type/adapter_specific_registry_test.rb +133 -0
- data/test/cases/type/date_time_test.rb +14 -0
- data/test/cases/type/integer_test.rb +27 -121
- data/test/cases/type/string_test.rb +22 -36
- data/test/cases/type/type_map_test.rb +177 -177
- data/test/cases/type_test.rb +39 -0
- data/test/cases/types_test.rb +24 -141
- data/test/cases/unconnected_test.rb +33 -33
- data/test/cases/validations/absence_validation_test.rb +73 -0
- data/test/cases/validations/association_validation_test.rb +97 -86
- data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -84
- data/test/cases/validations/i18n_validation_test.rb +86 -90
- data/test/cases/validations/length_validation_test.rb +79 -47
- data/test/cases/validations/presence_validation_test.rb +103 -68
- data/test/cases/validations/uniqueness_validation_test.rb +548 -457
- data/test/cases/validations_repair_helper.rb +19 -23
- data/test/cases/validations_test.rb +194 -165
- data/test/cases/view_test.rb +216 -119
- data/test/cases/yaml_serialization_test.rb +121 -126
- data/test/config.example.yml +97 -0
- data/test/config.rb +5 -5
- data/test/fixtures/accounts.yml +29 -29
- data/test/fixtures/admin/accounts.yml +2 -2
- data/test/fixtures/admin/users.yml +10 -10
- data/test/fixtures/author_addresses.original +11 -0
- data/test/fixtures/author_addresses.yml +17 -17
- data/test/fixtures/author_favorites.yml +3 -3
- data/test/fixtures/authors.original +17 -0
- data/test/fixtures/authors.yml +23 -23
- data/test/fixtures/bad_posts.yml +9 -0
- data/test/fixtures/binaries.yml +133 -133
- data/test/fixtures/books.yml +31 -11
- data/test/fixtures/bulbs.yml +5 -5
- data/test/fixtures/cars.yml +9 -9
- data/test/fixtures/categories.yml +19 -19
- data/test/fixtures/categories/special_categories.yml +9 -9
- data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -4
- data/test/fixtures/categories_ordered.yml +7 -7
- data/test/fixtures/categories_posts.yml +31 -31
- data/test/fixtures/categorizations.yml +23 -23
- data/test/fixtures/clubs.yml +8 -8
- data/test/fixtures/collections.yml +3 -3
- data/test/fixtures/colleges.yml +3 -3
- data/test/fixtures/comments.yml +65 -65
- data/test/fixtures/companies.yml +67 -67
- data/test/fixtures/computers.yml +10 -10
- data/test/fixtures/content.yml +3 -0
- data/test/fixtures/content_positions.yml +3 -0
- data/test/fixtures/courses.yml +8 -8
- data/test/fixtures/customers.yml +25 -25
- data/test/fixtures/dashboards.yml +6 -6
- data/test/fixtures/dead_parrots.yml +5 -0
- data/test/fixtures/developers.yml +22 -22
- data/test/fixtures/developers_projects.yml +16 -16
- data/test/fixtures/dog_lovers.yml +7 -7
- data/test/fixtures/dogs.yml +4 -4
- data/test/fixtures/doubloons.yml +3 -3
- data/test/fixtures/edges.yml +5 -5
- data/test/fixtures/entrants.yml +14 -14
- data/test/fixtures/essays.yml +6 -6
- data/test/fixtures/faces.yml +11 -11
- data/test/fixtures/fk_test_has_fk.yml +3 -3
- data/test/fixtures/fk_test_has_pk.yml +1 -1
- data/test/fixtures/friendships.yml +4 -4
- data/test/fixtures/funny_jokes.yml +10 -10
- data/test/fixtures/interests.yml +33 -33
- data/test/fixtures/items.yml +3 -3
- data/test/fixtures/jobs.yml +7 -7
- data/test/fixtures/legacy_things.yml +3 -3
- data/test/fixtures/live_parrots.yml +4 -0
- data/test/fixtures/mateys.yml +4 -4
- data/test/fixtures/member_details.yml +8 -8
- data/test/fixtures/member_types.yml +6 -6
- data/test/fixtures/members.yml +11 -11
- data/test/fixtures/memberships.yml +34 -34
- data/test/fixtures/men.yml +5 -5
- data/test/fixtures/minimalistics.yml +2 -2
- data/test/fixtures/minivans.yml +5 -5
- data/test/fixtures/mixed_case_monkeys.yml +6 -6
- data/test/fixtures/mixins.yml +29 -29
- data/test/fixtures/movies.yml +7 -7
- data/test/fixtures/naked/yml/accounts.yml +1 -1
- data/test/fixtures/naked/yml/companies.yml +1 -1
- data/test/fixtures/naked/yml/courses.yml +1 -1
- data/test/fixtures/naked/yml/parrots.yml +2 -0
- data/test/fixtures/naked/yml/trees.yml +3 -0
- data/test/fixtures/nodes.yml +29 -0
- data/test/fixtures/organizations.yml +5 -5
- data/test/fixtures/other_comments.yml +6 -0
- data/test/fixtures/other_dogs.yml +2 -0
- data/test/fixtures/other_posts.yml +7 -0
- data/test/fixtures/other_topics.yml +42 -42
- data/test/fixtures/owners.yml +9 -9
- data/test/fixtures/parrots.yml +27 -27
- data/test/fixtures/parrots_pirates.yml +7 -7
- data/test/fixtures/people.yml +24 -24
- data/test/fixtures/peoples_treasures.yml +3 -3
- data/test/fixtures/pets.yml +19 -19
- data/test/fixtures/pirates.yml +15 -12
- data/test/fixtures/posts.yml +80 -80
- data/test/fixtures/price_estimates.yml +16 -7
- data/test/fixtures/products.yml +4 -4
- data/test/fixtures/projects.yml +7 -7
- data/test/fixtures/ratings.yml +14 -14
- data/test/fixtures/readers.yml +11 -11
- data/test/fixtures/references.yml +17 -17
- data/test/fixtures/reserved_words/distinct.yml +5 -5
- data/test/fixtures/reserved_words/distinct_select.yml +11 -11
- data/test/fixtures/reserved_words/group.yml +14 -14
- data/test/fixtures/reserved_words/select.yml +8 -8
- data/test/fixtures/reserved_words/values.yml +7 -7
- data/test/fixtures/ships.yml +6 -6
- data/test/fixtures/speedometers.yml +8 -8
- data/test/fixtures/sponsors.yml +12 -12
- data/test/fixtures/string_key_objects.yml +7 -7
- data/test/fixtures/subscribers.yml +10 -10
- data/test/fixtures/subscriptions.yml +12 -12
- data/test/fixtures/taggings.yml +78 -78
- data/test/fixtures/tags.yml +11 -11
- data/test/fixtures/tasks.yml +7 -7
- data/test/fixtures/teapots.yml +3 -3
- data/test/fixtures/to_be_linked/accounts.yml +2 -2
- data/test/fixtures/to_be_linked/users.yml +10 -10
- data/test/fixtures/topics.yml +49 -49
- data/test/fixtures/toys.yml +14 -14
- data/test/fixtures/traffic_lights.yml +9 -9
- data/test/fixtures/treasures.yml +10 -10
- data/test/fixtures/trees.yml +3 -0
- data/test/fixtures/uuid_children.yml +3 -3
- data/test/fixtures/uuid_parents.yml +2 -2
- data/test/fixtures/variants.yml +4 -4
- data/test/fixtures/vegetables.yml +19 -19
- data/test/fixtures/vertices.yml +3 -3
- data/test/fixtures/warehouse_things.yml +2 -2
- data/test/fixtures/zines.yml +5 -5
- data/test/migrations/10_urban/9_add_expressions.rb +11 -11
- data/test/migrations/decimal/1_give_me_big_numbers.rb +15 -15
- data/test/migrations/magic/1_currencies_have_symbols.rb +12 -12
- data/test/migrations/missing/1000_people_have_middle_names.rb +9 -9
- data/test/migrations/missing/1_people_have_last_names.rb +9 -9
- data/test/migrations/missing/3_we_need_reminders.rb +12 -12
- data/test/migrations/missing/4_innocent_jointable.rb +12 -12
- data/test/migrations/rename/1_we_need_things.rb +11 -11
- data/test/migrations/rename/2_rename_things.rb +9 -9
- data/test/migrations/to_copy/1_people_have_hobbies.rb +9 -9
- data/test/migrations/to_copy/2_people_have_descriptions.rb +9 -9
- data/test/migrations/to_copy2/1_create_articles.rb +7 -7
- data/test/migrations/to_copy2/2_create_comments.rb +7 -7
- data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -9
- data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -9
- data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -9
- data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -7
- data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -7
- data/test/migrations/valid/1_valid_people_have_last_names.rb +9 -9
- data/test/migrations/valid/2_we_need_reminders.rb +12 -12
- data/test/migrations/valid/3_innocent_jointable.rb +12 -12
- data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -9
- data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +12 -12
- data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +12 -12
- data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -9
- data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -12
- data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -12
- data/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -8
- data/test/models/admin.rb +5 -5
- data/test/models/admin/account.rb +3 -3
- data/test/models/admin/randomly_named_c1.rb +6 -2
- data/test/models/admin/user.rb +40 -40
- data/test/models/aircraft.rb +5 -4
- data/test/models/arunit2_model.rb +3 -3
- data/test/models/author.rb +209 -212
- data/test/models/auto_id.rb +4 -4
- data/test/models/autoloadable/extra_firm.rb +2 -2
- data/test/models/binary.rb +2 -2
- data/test/models/bird.rb +12 -12
- data/test/models/book.rb +23 -18
- data/test/models/boolean.rb +2 -2
- data/test/models/bulb.rb +52 -51
- data/test/models/cake_designer.rb +3 -3
- data/test/models/car.rb +29 -26
- data/test/models/carrier.rb +2 -2
- data/test/models/cat.rb +10 -0
- data/test/models/categorization.rb +19 -19
- data/test/models/category.rb +35 -35
- data/test/models/chef.rb +8 -7
- data/test/models/citation.rb +3 -3
- data/test/models/club.rb +25 -23
- data/test/models/college.rb +10 -10
- data/test/models/column.rb +3 -3
- data/test/models/column_name.rb +3 -3
- data/test/models/comment.rb +76 -64
- data/test/models/company.rb +230 -228
- data/test/models/company_in_module.rb +98 -98
- data/test/models/computer.rb +3 -3
- data/test/models/contact.rb +41 -41
- data/test/models/content.rb +40 -0
- data/test/models/contract.rb +20 -20
- data/test/models/country.rb +7 -7
- data/test/models/course.rb +6 -6
- data/test/models/customer.rb +83 -77
- data/test/models/customer_carrier.rb +14 -14
- data/test/models/dashboard.rb +3 -3
- data/test/models/default.rb +2 -2
- data/test/models/department.rb +4 -4
- data/test/models/developer.rb +274 -255
- data/test/models/dog.rb +5 -5
- data/test/models/dog_lover.rb +5 -5
- data/test/models/doubloon.rb +12 -12
- data/test/models/drink_designer.rb +3 -3
- data/test/models/edge.rb +5 -5
- data/test/models/electron.rb +5 -5
- data/test/models/engine.rb +4 -4
- data/test/models/entrant.rb +3 -3
- data/test/models/essay.rb +5 -5
- data/test/models/event.rb +3 -3
- data/test/models/eye.rb +37 -37
- data/test/models/face.rb +9 -9
- data/test/models/friendship.rb +6 -6
- data/test/models/guid.rb +2 -2
- data/test/models/guitar.rb +4 -0
- data/test/models/hotel.rb +11 -9
- data/test/models/image.rb +3 -3
- data/test/models/interest.rb +5 -5
- data/test/models/invoice.rb +4 -4
- data/test/models/item.rb +7 -7
- data/test/models/job.rb +7 -7
- data/test/models/joke.rb +7 -7
- data/test/models/keyboard.rb +3 -3
- data/test/models/legacy_thing.rb +3 -3
- data/test/models/lesson.rb +11 -11
- data/test/models/line_item.rb +3 -3
- data/test/models/liquid.rb +4 -4
- data/test/models/man.rb +11 -11
- data/test/models/matey.rb +4 -4
- data/test/models/member.rb +42 -41
- data/test/models/member_detail.rb +8 -7
- data/test/models/member_type.rb +3 -3
- data/test/models/membership.rb +35 -35
- data/test/models/mentor.rb +3 -0
- data/test/models/minimalistic.rb +2 -2
- data/test/models/minivan.rb +9 -9
- data/test/models/mixed_case_monkey.rb +3 -3
- data/test/models/mocktail_designer.rb +2 -0
- data/test/models/molecule.rb +6 -6
- data/test/models/movie.rb +5 -5
- data/test/models/node.rb +5 -0
- data/test/models/non_primary_key.rb +2 -0
- data/test/models/notification.rb +3 -0
- data/test/models/order.rb +4 -4
- data/test/models/organization.rb +14 -14
- data/test/models/other_dog.rb +5 -0
- data/test/models/owner.rb +37 -34
- data/test/models/parrot.rb +28 -29
- data/test/models/person.rb +142 -143
- data/test/models/personal_legacy_thing.rb +4 -4
- data/test/models/pet.rb +18 -15
- data/test/models/pet_treasure.rb +6 -0
- data/test/models/pirate.rb +92 -92
- data/test/models/possession.rb +3 -3
- data/test/models/post.rb +273 -264
- data/test/models/price_estimate.rb +4 -4
- data/test/models/professor.rb +5 -5
- data/test/models/project.rb +40 -31
- data/test/models/publisher.rb +2 -2
- data/test/models/publisher/article.rb +4 -4
- data/test/models/publisher/magazine.rb +3 -3
- data/test/models/randomly_named_c1.rb +1 -1
- data/test/models/rating.rb +4 -4
- data/test/models/reader.rb +23 -23
- data/test/models/recipe.rb +3 -0
- data/test/models/record.rb +2 -2
- data/test/models/reference.rb +22 -22
- data/test/models/reply.rb +61 -61
- data/test/models/ship.rb +39 -33
- data/test/models/ship_part.rb +8 -8
- data/test/models/shop.rb +17 -17
- data/test/models/shop_account.rb +6 -6
- data/test/models/speedometer.rb +6 -6
- data/test/models/sponsor.rb +7 -7
- data/test/models/string_key_object.rb +3 -3
- data/test/models/student.rb +4 -4
- data/test/models/subject.rb +16 -16
- data/test/models/subscriber.rb +8 -8
- data/test/models/subscription.rb +4 -4
- data/test/models/tag.rb +13 -7
- data/test/models/tagging.rb +13 -13
- data/test/models/task.rb +5 -5
- data/test/models/topic.rb +118 -124
- data/test/models/toy.rb +6 -6
- data/test/models/traffic_light.rb +4 -4
- data/test/models/treasure.rb +14 -14
- data/test/models/treaty.rb +7 -7
- data/test/models/tree.rb +3 -0
- data/test/models/tuning_peg.rb +4 -0
- data/test/models/tyre.rb +11 -11
- data/test/models/user.rb +14 -0
- data/test/models/uuid_child.rb +3 -3
- data/test/models/uuid_item.rb +6 -0
- data/test/models/uuid_parent.rb +3 -3
- data/test/models/vegetables.rb +24 -24
- data/test/models/vehicle.rb +6 -6
- data/test/models/vertex.rb +9 -9
- data/test/models/warehouse_thing.rb +5 -5
- data/test/models/wheel.rb +3 -3
- data/test/models/without_table.rb +3 -3
- data/test/models/zine.rb +3 -3
- data/test/schema/mysql2_specific_schema.rb +68 -58
- data/test/schema/oracle_specific_schema.rb +40 -43
- data/test/schema/postgresql_specific_schema.rb +114 -202
- data/test/schema/schema.rb +1057 -952
- data/test/schema/schema.rb.original +1057 -0
- data/test/schema/sqlite_specific_schema.rb +18 -22
- data/test/support/config.rb +43 -43
- data/test/support/connection.rb +23 -22
- data/test/support/connection_helper.rb +14 -14
- data/test/support/ddl_helper.rb +8 -8
- data/test/support/schema_dumping_helper.rb +20 -20
- data/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -0
- data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -0
- metadata +129 -28
- data/lib/mswin32/rb19x/ibm_db.so +0 -0
- data/lib/mswin32/rb21x/i386/ibm_db.so +0 -0
- data/lib/mswin32/rb22x/i386/ibm_db.so +0 -0
- data/lib/mswin32/rb23x/i386/ibm_db.so +0 -0
- data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +0 -26
- data/test/cases/attribute_methods/serialization_test.rb +0 -29
- data/test/cases/migration/change_schema_test - Copy.rb +0 -448
- data/test/cases/migration/foreign_key_test - Changed.rb +0 -325
- data/test/cases/migration/table_and_index_test.rb +0 -24
- data/test/cases/relation/where_test2.rb +0 -36
- data/test/cases/type/decimal_test.rb +0 -56
- data/test/cases/type/unsigned_integer_test.rb +0 -18
- data/test/cases/xml_serialization_test.rb +0 -457
- data/test/connections/native_ibm_db/connection.rb +0 -44
- data/test/fixtures/naked/csv/accounts.csv +0 -1
- data/test/schema/i5/ibm_db_specific_schema.rb +0 -137
- data/test/schema/ids/ibm_db_specific_schema.rb +0 -140
- data/test/schema/luw/ibm_db_specific_schema.rb +0 -137
- data/test/schema/mysql_specific_schema.rb +0 -70
- data/test/schema/zOS/ibm_db_specific_schema.rb +0 -208
@@ -0,0 +1,49 @@
|
|
1
|
+
require "cases/helper"
|
2
|
+
|
3
|
+
class PostgresqlNumberTest < ActiveRecord::PostgreSQLTestCase
|
4
|
+
class PostgresqlNumber < ActiveRecord::Base; end
|
5
|
+
|
6
|
+
setup do
|
7
|
+
@connection = ActiveRecord::Base.connection
|
8
|
+
@connection.create_table('postgresql_numbers', force: true) do |t|
|
9
|
+
t.column 'single', 'REAL'
|
10
|
+
t.column 'double', 'DOUBLE PRECISION'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
teardown do
|
15
|
+
@connection.drop_table 'postgresql_numbers', if_exists: true
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_data_type
|
19
|
+
assert_equal :float, PostgresqlNumber.columns_hash["single"].type
|
20
|
+
assert_equal :float, PostgresqlNumber.columns_hash["double"].type
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_values
|
24
|
+
@connection.execute("INSERT INTO postgresql_numbers (id, single, double) VALUES (1, 123.456, 123456.789)")
|
25
|
+
@connection.execute("INSERT INTO postgresql_numbers (id, single, double) VALUES (2, '-Infinity', 'Infinity')")
|
26
|
+
@connection.execute("INSERT INTO postgresql_numbers (id, single, double) VALUES (3, 123.456, 'NaN')")
|
27
|
+
|
28
|
+
first, second, third = PostgresqlNumber.find(1, 2, 3)
|
29
|
+
|
30
|
+
assert_equal 123.456, first.single
|
31
|
+
assert_equal 123456.789, first.double
|
32
|
+
assert_equal(-::Float::INFINITY, second.single)
|
33
|
+
assert_equal ::Float::INFINITY, second.double
|
34
|
+
assert_send [third.double, :nan?]
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_update
|
38
|
+
record = PostgresqlNumber.create! single: "123.456", double: "123456.789"
|
39
|
+
new_single = 789.012
|
40
|
+
new_double = 789012.345
|
41
|
+
record.single = new_single
|
42
|
+
record.double = new_double
|
43
|
+
record.save!
|
44
|
+
|
45
|
+
record.reload
|
46
|
+
assert_equal new_single, record.single
|
47
|
+
assert_equal new_double, record.double
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,405 @@
|
|
1
|
+
require "cases/helper"
|
2
|
+
require 'support/ddl_helper'
|
3
|
+
require 'support/connection_helper'
|
4
|
+
|
5
|
+
module ActiveRecord
|
6
|
+
module ConnectionAdapters
|
7
|
+
class PostgreSQLAdapterTest < ActiveRecord::PostgreSQLTestCase
|
8
|
+
self.use_transactional_tests = false
|
9
|
+
include DdlHelper
|
10
|
+
include ConnectionHelper
|
11
|
+
|
12
|
+
def setup
|
13
|
+
@connection = ActiveRecord::Base.connection
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_bad_connection
|
17
|
+
assert_raise ActiveRecord::NoDatabaseError do
|
18
|
+
configuration = ActiveRecord::Base.configurations['arunit'].merge(database: 'should_not_exist-cinco-dog-db')
|
19
|
+
connection = ActiveRecord::Base.postgresql_connection(configuration)
|
20
|
+
connection.exec_query('SELECT 1')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_valid_column
|
25
|
+
with_example_table do
|
26
|
+
column = @connection.columns('ex').find { |col| col.name == 'id' }
|
27
|
+
assert @connection.valid_type?(column.type)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_invalid_column
|
32
|
+
assert_not @connection.valid_type?(:foobar)
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_primary_key
|
36
|
+
with_example_table do
|
37
|
+
assert_equal 'id', @connection.primary_key('ex')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_primary_key_works_tables_containing_capital_letters
|
42
|
+
assert_equal 'id', @connection.primary_key('CamelCase')
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_non_standard_primary_key
|
46
|
+
with_example_table 'data character varying(255) primary key' do
|
47
|
+
assert_equal 'data', @connection.primary_key('ex')
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_primary_key_returns_nil_for_no_pk
|
52
|
+
with_example_table 'id integer' do
|
53
|
+
assert_nil @connection.primary_key('ex')
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_primary_key_raises_error_if_table_not_found
|
58
|
+
assert_raises(ActiveRecord::StatementInvalid) do
|
59
|
+
@connection.primary_key('unobtainium')
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_exec_insert_with_returning_disabled
|
64
|
+
connection = connection_without_insert_returning
|
65
|
+
result = connection.exec_insert("insert into postgresql_partitioned_table_parent (number) VALUES (1)", nil, [], 'id', 'postgresql_partitioned_table_parent_id_seq')
|
66
|
+
expect = connection.query('select max(id) from postgresql_partitioned_table_parent').first.first
|
67
|
+
assert_equal expect.to_i, result.rows.first.first
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_exec_insert_with_returning_disabled_and_no_sequence_name_given
|
71
|
+
connection = connection_without_insert_returning
|
72
|
+
result = connection.exec_insert("insert into postgresql_partitioned_table_parent (number) VALUES (1)", nil, [], 'id')
|
73
|
+
expect = connection.query('select max(id) from postgresql_partitioned_table_parent').first.first
|
74
|
+
assert_equal expect.to_i, result.rows.first.first
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_exec_insert_default_values_with_returning_disabled_and_no_sequence_name_given
|
78
|
+
connection = connection_without_insert_returning
|
79
|
+
result = connection.exec_insert("insert into postgresql_partitioned_table_parent DEFAULT VALUES", nil, [], 'id')
|
80
|
+
expect = connection.query('select max(id) from postgresql_partitioned_table_parent').first.first
|
81
|
+
assert_equal expect.to_i, result.rows.first.first
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_exec_insert_default_values_quoted_schema_with_returning_disabled_and_no_sequence_name_given
|
85
|
+
connection = connection_without_insert_returning
|
86
|
+
result = connection.exec_insert('insert into "public"."postgresql_partitioned_table_parent" DEFAULT VALUES', nil, [], 'id')
|
87
|
+
expect = connection.query('select max(id) from postgresql_partitioned_table_parent').first.first
|
88
|
+
assert_equal expect.to_i, result.rows.first.first
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_sql_for_insert_with_returning_disabled
|
92
|
+
connection = connection_without_insert_returning
|
93
|
+
sql, binds = connection.sql_for_insert('sql', nil, nil, nil, 'binds')
|
94
|
+
assert_equal ['sql', 'binds'], [sql, binds]
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_serial_sequence
|
98
|
+
assert_equal 'public.accounts_id_seq',
|
99
|
+
@connection.serial_sequence('accounts', 'id')
|
100
|
+
|
101
|
+
assert_raises(ActiveRecord::StatementInvalid) do
|
102
|
+
@connection.serial_sequence('zomg', 'id')
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_default_sequence_name
|
107
|
+
assert_equal 'public.accounts_id_seq',
|
108
|
+
@connection.default_sequence_name('accounts', 'id')
|
109
|
+
|
110
|
+
assert_equal 'public.accounts_id_seq',
|
111
|
+
@connection.default_sequence_name('accounts')
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_default_sequence_name_bad_table
|
115
|
+
assert_equal 'zomg_id_seq',
|
116
|
+
@connection.default_sequence_name('zomg', 'id')
|
117
|
+
|
118
|
+
assert_equal 'zomg_id_seq',
|
119
|
+
@connection.default_sequence_name('zomg')
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_pk_and_sequence_for
|
123
|
+
with_example_table do
|
124
|
+
pk, seq = @connection.pk_and_sequence_for('ex')
|
125
|
+
assert_equal 'id', pk
|
126
|
+
assert_equal @connection.default_sequence_name('ex', 'id'), seq.to_s
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_pk_and_sequence_for_with_non_standard_primary_key
|
131
|
+
with_example_table 'code serial primary key' do
|
132
|
+
pk, seq = @connection.pk_and_sequence_for('ex')
|
133
|
+
assert_equal 'code', pk
|
134
|
+
assert_equal @connection.default_sequence_name('ex', 'code'), seq.to_s
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_pk_and_sequence_for_returns_nil_if_no_seq
|
139
|
+
with_example_table 'id integer primary key' do
|
140
|
+
assert_nil @connection.pk_and_sequence_for('ex')
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_pk_and_sequence_for_returns_nil_if_no_pk
|
145
|
+
with_example_table 'id integer' do
|
146
|
+
assert_nil @connection.pk_and_sequence_for('ex')
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
def test_pk_and_sequence_for_returns_nil_if_table_not_found
|
151
|
+
assert_nil @connection.pk_and_sequence_for('unobtainium')
|
152
|
+
end
|
153
|
+
|
154
|
+
def test_pk_and_sequence_for_with_collision_pg_class_oid
|
155
|
+
@connection.exec_query('create table ex(id serial primary key)')
|
156
|
+
@connection.exec_query('create table ex2(id serial primary key)')
|
157
|
+
|
158
|
+
correct_depend_record = [
|
159
|
+
"'pg_class'::regclass",
|
160
|
+
"'ex_id_seq'::regclass",
|
161
|
+
'0',
|
162
|
+
"'pg_class'::regclass",
|
163
|
+
"'ex'::regclass",
|
164
|
+
'1',
|
165
|
+
"'a'"
|
166
|
+
]
|
167
|
+
|
168
|
+
collision_depend_record = [
|
169
|
+
"'pg_attrdef'::regclass",
|
170
|
+
"'ex2_id_seq'::regclass",
|
171
|
+
'0',
|
172
|
+
"'pg_class'::regclass",
|
173
|
+
"'ex'::regclass",
|
174
|
+
'1',
|
175
|
+
"'a'"
|
176
|
+
]
|
177
|
+
|
178
|
+
@connection.exec_query(
|
179
|
+
"DELETE FROM pg_depend WHERE objid = 'ex_id_seq'::regclass AND refobjid = 'ex'::regclass AND deptype = 'a'"
|
180
|
+
)
|
181
|
+
@connection.exec_query(
|
182
|
+
"INSERT INTO pg_depend VALUES(#{collision_depend_record.join(',')})"
|
183
|
+
)
|
184
|
+
@connection.exec_query(
|
185
|
+
"INSERT INTO pg_depend VALUES(#{correct_depend_record.join(',')})"
|
186
|
+
)
|
187
|
+
|
188
|
+
seq = @connection.pk_and_sequence_for('ex').last
|
189
|
+
assert_equal PostgreSQL::Name.new("public", "ex_id_seq"), seq
|
190
|
+
|
191
|
+
@connection.exec_query(
|
192
|
+
"DELETE FROM pg_depend WHERE objid = 'ex2_id_seq'::regclass AND refobjid = 'ex'::regclass AND deptype = 'a'"
|
193
|
+
)
|
194
|
+
ensure
|
195
|
+
@connection.drop_table 'ex', if_exists: true
|
196
|
+
@connection.drop_table 'ex2', if_exists: true
|
197
|
+
end
|
198
|
+
|
199
|
+
def test_table_alias_length
|
200
|
+
assert_nothing_raised do
|
201
|
+
@connection.table_alias_length
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
def test_exec_no_binds
|
206
|
+
with_example_table do
|
207
|
+
result = @connection.exec_query('SELECT id, data FROM ex')
|
208
|
+
assert_equal 0, result.rows.length
|
209
|
+
assert_equal 2, result.columns.length
|
210
|
+
assert_equal %w{ id data }, result.columns
|
211
|
+
|
212
|
+
string = @connection.quote('foo')
|
213
|
+
@connection.exec_query("INSERT INTO ex (id, data) VALUES (1, #{string})")
|
214
|
+
result = @connection.exec_query('SELECT id, data FROM ex')
|
215
|
+
assert_equal 1, result.rows.length
|
216
|
+
assert_equal 2, result.columns.length
|
217
|
+
|
218
|
+
assert_equal [[1, 'foo']], result.rows
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
if ActiveRecord::Base.connection.prepared_statements
|
223
|
+
def test_exec_with_binds
|
224
|
+
with_example_table do
|
225
|
+
string = @connection.quote('foo')
|
226
|
+
@connection.exec_query("INSERT INTO ex (id, data) VALUES (1, #{string})")
|
227
|
+
|
228
|
+
bind = Relation::QueryAttribute.new("id", 1, Type::Value.new)
|
229
|
+
result = @connection.exec_query('SELECT id, data FROM ex WHERE id = $1', nil, [bind])
|
230
|
+
|
231
|
+
assert_equal 1, result.rows.length
|
232
|
+
assert_equal 2, result.columns.length
|
233
|
+
|
234
|
+
assert_equal [[1, 'foo']], result.rows
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
def test_exec_typecasts_bind_vals
|
239
|
+
with_example_table do
|
240
|
+
string = @connection.quote('foo')
|
241
|
+
@connection.exec_query("INSERT INTO ex (id, data) VALUES (1, #{string})")
|
242
|
+
|
243
|
+
bind = Relation::QueryAttribute.new("id", "1-fuu", Type::Integer.new)
|
244
|
+
result = @connection.exec_query('SELECT id, data FROM ex WHERE id = $1', nil, [bind])
|
245
|
+
|
246
|
+
assert_equal 1, result.rows.length
|
247
|
+
assert_equal 2, result.columns.length
|
248
|
+
|
249
|
+
assert_equal [[1, 'foo']], result.rows
|
250
|
+
end
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
def test_partial_index
|
255
|
+
with_example_table do
|
256
|
+
@connection.add_index 'ex', %w{ id number }, :name => 'partial', :where => "number > 100"
|
257
|
+
index = @connection.indexes('ex').find { |idx| idx.name == 'partial' }
|
258
|
+
assert_equal "(number > 100)", index.where
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
262
|
+
def test_expression_index
|
263
|
+
with_example_table do
|
264
|
+
@connection.add_index 'ex', 'mod(id, 10), abs(number)', name: 'expression'
|
265
|
+
index = @connection.indexes('ex').find { |idx| idx.name == 'expression' }
|
266
|
+
assert_equal 'mod(id, 10), abs(number)', index.columns
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
def test_index_with_opclass
|
271
|
+
with_example_table do
|
272
|
+
@connection.add_index "ex", "data varchar_pattern_ops"
|
273
|
+
index = @connection.indexes("ex").find { |idx| idx.name == "index_ex_on_data_varchar_pattern_ops" }
|
274
|
+
assert_equal "data varchar_pattern_ops", index.columns
|
275
|
+
|
276
|
+
@connection.remove_index "ex", "data varchar_pattern_ops"
|
277
|
+
assert_not @connection.indexes("ex").find { |idx| idx.name == "index_ex_on_data_varchar_pattern_ops" }
|
278
|
+
end
|
279
|
+
end
|
280
|
+
|
281
|
+
def test_columns_for_distinct_zero_orders
|
282
|
+
assert_equal "posts.id",
|
283
|
+
@connection.columns_for_distinct("posts.id", [])
|
284
|
+
end
|
285
|
+
|
286
|
+
def test_columns_for_distinct_one_order
|
287
|
+
assert_equal "posts.id, posts.created_at AS alias_0",
|
288
|
+
@connection.columns_for_distinct("posts.id", ["posts.created_at desc"])
|
289
|
+
end
|
290
|
+
|
291
|
+
def test_columns_for_distinct_few_orders
|
292
|
+
assert_equal "posts.id, posts.created_at AS alias_0, posts.position AS alias_1",
|
293
|
+
@connection.columns_for_distinct("posts.id", ["posts.created_at desc", "posts.position asc"])
|
294
|
+
end
|
295
|
+
|
296
|
+
def test_columns_for_distinct_with_case
|
297
|
+
assert_equal(
|
298
|
+
'posts.id, CASE WHEN author.is_active THEN UPPER(author.name) ELSE UPPER(author.email) END AS alias_0',
|
299
|
+
@connection.columns_for_distinct('posts.id',
|
300
|
+
["CASE WHEN author.is_active THEN UPPER(author.name) ELSE UPPER(author.email) END"])
|
301
|
+
)
|
302
|
+
end
|
303
|
+
|
304
|
+
def test_columns_for_distinct_blank_not_nil_orders
|
305
|
+
assert_equal "posts.id, posts.created_at AS alias_0",
|
306
|
+
@connection.columns_for_distinct("posts.id", ["posts.created_at desc", "", " "])
|
307
|
+
end
|
308
|
+
|
309
|
+
def test_columns_for_distinct_with_arel_order
|
310
|
+
order = Object.new
|
311
|
+
def order.to_sql
|
312
|
+
"posts.created_at desc"
|
313
|
+
end
|
314
|
+
assert_equal "posts.id, posts.created_at AS alias_0",
|
315
|
+
@connection.columns_for_distinct("posts.id", [order])
|
316
|
+
end
|
317
|
+
|
318
|
+
def test_columns_for_distinct_with_nulls
|
319
|
+
assert_equal "posts.title, posts.updater_id AS alias_0", @connection.columns_for_distinct("posts.title", ["posts.updater_id desc nulls first"])
|
320
|
+
assert_equal "posts.title, posts.updater_id AS alias_0", @connection.columns_for_distinct("posts.title", ["posts.updater_id desc nulls last"])
|
321
|
+
end
|
322
|
+
|
323
|
+
def test_columns_for_distinct_without_order_specifiers
|
324
|
+
assert_equal "posts.title, posts.updater_id AS alias_0",
|
325
|
+
@connection.columns_for_distinct("posts.title", ["posts.updater_id"])
|
326
|
+
|
327
|
+
assert_equal "posts.title, posts.updater_id AS alias_0",
|
328
|
+
@connection.columns_for_distinct("posts.title", ["posts.updater_id nulls last"])
|
329
|
+
|
330
|
+
assert_equal "posts.title, posts.updater_id AS alias_0",
|
331
|
+
@connection.columns_for_distinct("posts.title", ["posts.updater_id nulls first"])
|
332
|
+
end
|
333
|
+
|
334
|
+
def test_raise_error_when_cannot_translate_exception
|
335
|
+
assert_raise TypeError do
|
336
|
+
@connection.send(:log, nil) { @connection.execute(nil) }
|
337
|
+
end
|
338
|
+
end
|
339
|
+
|
340
|
+
def test_reload_type_map_for_newly_defined_types
|
341
|
+
@connection.execute "CREATE TYPE feeling AS ENUM ('good', 'bad')"
|
342
|
+
result = @connection.select_all "SELECT 'good'::feeling"
|
343
|
+
assert_instance_of(PostgreSQLAdapter::OID::Enum,
|
344
|
+
result.column_types["feeling"])
|
345
|
+
ensure
|
346
|
+
@connection.execute "DROP TYPE IF EXISTS feeling"
|
347
|
+
reset_connection
|
348
|
+
end
|
349
|
+
|
350
|
+
def test_only_reload_type_map_once_for_every_unknown_type
|
351
|
+
silence_warnings do
|
352
|
+
assert_queries 2, ignore_none: true do
|
353
|
+
@connection.select_all "SELECT NULL::anyelement"
|
354
|
+
end
|
355
|
+
assert_queries 1, ignore_none: true do
|
356
|
+
@connection.select_all "SELECT NULL::anyelement"
|
357
|
+
end
|
358
|
+
assert_queries 2, ignore_none: true do
|
359
|
+
@connection.select_all "SELECT NULL::anyarray"
|
360
|
+
end
|
361
|
+
end
|
362
|
+
ensure
|
363
|
+
reset_connection
|
364
|
+
end
|
365
|
+
|
366
|
+
def test_only_warn_on_first_encounter_of_unknown_oid
|
367
|
+
warning = capture(:stderr) {
|
368
|
+
@connection.select_all "SELECT NULL::anyelement"
|
369
|
+
@connection.select_all "SELECT NULL::anyelement"
|
370
|
+
@connection.select_all "SELECT NULL::anyelement"
|
371
|
+
}
|
372
|
+
assert_match(/\Aunknown OID \d+: failed to recognize type of 'anyelement'. It will be treated as String.\n\z/, warning)
|
373
|
+
ensure
|
374
|
+
reset_connection
|
375
|
+
end
|
376
|
+
|
377
|
+
def test_unparsed_defaults_are_at_least_set_when_saving
|
378
|
+
with_example_table "id SERIAL PRIMARY KEY, number INTEGER NOT NULL DEFAULT (4 + 4) * 2 / 4" do
|
379
|
+
number_klass = Class.new(ActiveRecord::Base) do
|
380
|
+
self.table_name = 'ex'
|
381
|
+
end
|
382
|
+
column = number_klass.columns_hash["number"]
|
383
|
+
assert_nil column.default
|
384
|
+
assert_nil column.default_function
|
385
|
+
|
386
|
+
first_number = number_klass.new
|
387
|
+
assert_nil first_number.number
|
388
|
+
|
389
|
+
first_number.save!
|
390
|
+
assert_equal 4, first_number.reload.number
|
391
|
+
end
|
392
|
+
end
|
393
|
+
|
394
|
+
private
|
395
|
+
|
396
|
+
def with_example_table(definition = 'id serial primary key, number integer, data character varying(255)', &block)
|
397
|
+
super(@connection, 'ex', definition, &block)
|
398
|
+
end
|
399
|
+
|
400
|
+
def connection_without_insert_returning
|
401
|
+
ActiveRecord::Base.postgresql_connection(ActiveRecord::Base.configurations['arunit'].merge(:insert_returning => false))
|
402
|
+
end
|
403
|
+
end
|
404
|
+
end
|
405
|
+
end
|