ibm_db 3.0.4-x86-mingw32 → 3.0.5-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 -1
- data/LICENSE +1 -1
- data/MANIFEST +14 -14
- data/README +225 -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 -11884
- 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 +3177 -3177
- data/lib/active_record/connection_adapters/ibmdb_adapter.rb +1 -1
- data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -328
- data/lib/mswin32/ibm_db.rb +122 -122
- 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/active_record/connection_adapters/fake_adapter.rb +46 -46
- data/test/assets/example.log +1 -1
- data/test/assets/test.txt +1 -1
- data/test/cases/adapter_test.rb +276 -261
- data/test/cases/aggregations_test.rb +158 -158
- data/test/cases/ar_schema_test.rb +161 -161
- data/test/cases/associations/association_scope_test.rb +21 -21
- data/test/cases/associations/belongs_to_associations_test.rb +1029 -1029
- data/test/cases/associations/callbacks_test.rb +192 -192
- data/test/cases/associations/cascaded_eager_loading_test.rb +188 -188
- data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +26 -26
- data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -36
- data/test/cases/associations/eager_load_nested_include_test.rb +128 -128
- data/test/cases/associations/eager_singularization_test.rb +148 -148
- data/test/cases/associations/eager_test.rb +1429 -1411
- data/test/cases/associations/extension_test.rb +82 -82
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +972 -932
- data/test/cases/associations/has_many_associations_test.rb +2182 -2162
- data/test/cases/associations/has_many_through_associations_test.rb +1204 -1204
- data/test/cases/associations/has_one_associations_test.rb +610 -610
- data/test/cases/associations/has_one_through_associations_test.rb +380 -380
- data/test/cases/associations/inner_join_association_test.rb +139 -139
- data/test/cases/associations/inverse_associations_test.rb +706 -693
- data/test/cases/associations/join_model_test.rb +754 -754
- data/test/cases/associations/nested_through_associations_test.rb +579 -579
- data/test/cases/associations/required_test.rb +82 -82
- data/test/cases/associations_test.rb +380 -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/serialization_test.rb +29 -29
- data/test/cases/attribute_methods_test.rb +952 -952
- data/test/cases/attribute_set_test.rb +210 -200
- data/test/cases/attribute_test.rb +180 -180
- data/test/cases/attributes_test.rb +136 -136
- data/test/cases/autosave_association_test.rb +1595 -1595
- data/test/cases/base_test.rb +1664 -1638
- data/test/cases/batches_test.rb +212 -212
- data/test/cases/binary_test.rb +52 -52
- data/test/cases/bind_parameter_test.rb +100 -100
- data/test/cases/calculations_test.rb +646 -646
- data/test/cases/callbacks_test.rb +543 -543
- data/test/cases/clone_test.rb +40 -40
- data/test/cases/coders/yaml_column_test.rb +63 -63
- data/test/cases/column_alias_test.rb +17 -17
- data/test/cases/column_definition_test.rb +123 -123
- data/test/cases/connection_adapters/adapter_leasing_test.rb +54 -54
- data/test/cases/connection_adapters/connection_handler_test.rb +53 -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 +293 -293
- data/test/cases/connection_adapters/mysql_type_lookup_test.rb +65 -65
- data/test/cases/connection_adapters/quoting_test.rb +13 -13
- data/test/cases/connection_adapters/schema_cache_test.rb +56 -56
- data/test/cases/connection_adapters/type_lookup_test.rb +110 -110
- data/test/cases/connection_management_test.rb +122 -122
- data/test/cases/connection_pool_test.rb +346 -346
- data/test/cases/connection_specification/resolver_test.rb +116 -116
- data/test/cases/core_test.rb +112 -112
- data/test/cases/counter_cache_test.rb +209 -209
- data/test/cases/custom_locking_test.rb +17 -17
- data/test/cases/database_statements_test.rb +19 -19
- data/test/cases/date_time_test.rb +61 -61
- data/test/cases/defaults_test.rb +223 -223
- data/test/cases/dirty_test.rb +785 -775
- data/test/cases/disconnected_test.rb +28 -28
- data/test/cases/dup_test.rb +157 -157
- data/test/cases/enum_test.rb +290 -290
- data/test/cases/explain_subscriber_test.rb +64 -64
- data/test/cases/explain_test.rb +76 -76
- data/test/cases/finder_respond_to_test.rb +60 -60
- data/test/cases/finder_test.rb +1169 -1166
- data/test/cases/fixture_set/file_test.rb +138 -138
- data/test/cases/fixtures_test.rb +908 -897
- data/test/cases/forbidden_attributes_protection_test.rb +99 -99
- data/test/cases/habtm_destroy_order_test.rb +61 -61
- data/test/cases/helper.rb +210 -210
- data/test/cases/hot_compatibility_test.rb +54 -54
- data/test/cases/i18n_test.rb +45 -45
- data/test/cases/inheritance_test.rb +375 -375
- data/test/cases/integration_test.rb +139 -139
- data/test/cases/invalid_connection_test.rb +22 -22
- data/test/cases/invalid_date_test.rb +32 -32
- data/test/cases/invertible_migration_test.rb +295 -295
- data/test/cases/json_serialization_test.rb +302 -302
- data/test/cases/locking_test.rb +477 -477
- data/test/cases/log_subscriber_test.rb +136 -136
- data/test/cases/migration/change_schema_test - Copy.rb +448 -448
- data/test/cases/migration/change_schema_test.rb +512 -472
- data/test/cases/migration/change_table_test.rb +224 -224
- data/test/cases/migration/column_attributes_test.rb +192 -192
- data/test/cases/migration/column_positioning_test.rb +56 -56
- data/test/cases/migration/columns_test.rb +304 -304
- data/test/cases/migration/command_recorder_test.rb +305 -305
- data/test/cases/migration/create_join_table_test.rb +148 -148
- data/test/cases/migration/foreign_key_test - Changed.rb +325 -325
- data/test/cases/migration/foreign_key_test.rb +328 -360
- data/test/cases/migration/helper.rb +39 -39
- data/test/cases/migration/index_test.rb +216 -216
- data/test/cases/migration/logger_test.rb +36 -36
- data/test/cases/migration/pending_migrations_test.rb +53 -53
- data/test/cases/migration/references_foreign_key_test.rb +169 -214
- data/test/cases/migration/references_index_test.rb +101 -101
- data/test/cases/migration/references_statements_test.rb +116 -116
- data/test/cases/migration/rename_table_test.rb +93 -93
- data/test/cases/migration/table_and_index_test.rb +24 -24
- data/test/cases/migration_test.rb +959 -959
- data/test/cases/migrator_test.rb +388 -388
- data/test/cases/mixin_test.rb +70 -70
- data/test/cases/modules_test.rb +173 -173
- data/test/cases/multiparameter_attributes_test.rb +350 -350
- data/test/cases/multiple_db_test.rb +115 -115
- data/test/cases/nested_attributes_test.rb +1070 -1057
- data/test/cases/nested_attributes_with_callbacks_test.rb +144 -144
- data/test/cases/persistence_test.rb +909 -909
- data/test/cases/pooled_connections_test.rb +81 -81
- data/test/cases/primary_keys_test.rb +237 -237
- data/test/cases/query_cache_test.rb +326 -326
- data/test/cases/quoting_test.rb +156 -156
- data/test/cases/readonly_test.rb +118 -118
- data/test/cases/reaper_test.rb +85 -85
- data/test/cases/reflection_test.rb +463 -454
- data/test/cases/relation/delegation_test.rb +68 -68
- data/test/cases/relation/merging_test.rb +161 -161
- data/test/cases/relation/mutation_test.rb +165 -165
- data/test/cases/relation/predicate_builder_test.rb +14 -14
- data/test/cases/relation/where_chain_test.rb +181 -181
- data/test/cases/relation/where_test.rb +300 -300
- data/test/cases/relation/where_test2.rb +36 -36
- data/test/cases/relation_test.rb +319 -297
- data/test/cases/relations_test.rb +1815 -1815
- data/test/cases/reload_models_test.rb +22 -22
- data/test/cases/result_test.rb +80 -80
- data/test/cases/sanitize_test.rb +83 -83
- data/test/cases/schema_dumper_test.rb +463 -463
- data/test/cases/scoping/default_scoping_test.rb +454 -454
- data/test/cases/scoping/named_scoping_test.rb +524 -524
- data/test/cases/scoping/relation_scoping_test.rb +357 -357
- data/test/cases/serialization_test.rb +104 -104
- data/test/cases/serialized_attribute_test.rb +277 -277
- data/test/cases/statement_cache_test.rb +98 -98
- data/test/cases/store_test.rb +194 -194
- data/test/cases/tasks/database_tasks_test.rb +398 -396
- data/test/cases/tasks/mysql_rake_test.rb +324 -311
- data/test/cases/tasks/postgresql_rake_test.rb +250 -245
- data/test/cases/tasks/sqlite_rake_test.rb +193 -193
- data/test/cases/test_case.rb +123 -123
- data/test/cases/timestamp_test.rb +467 -468
- data/test/cases/transaction_callbacks_test.rb +452 -452
- data/test/cases/transaction_isolation_test.rb +106 -106
- data/test/cases/transactions_test.rb +817 -817
- data/test/cases/type/decimal_test.rb +56 -51
- data/test/cases/type/integer_test.rb +121 -121
- data/test/cases/type/string_test.rb +36 -36
- data/test/cases/type/type_map_test.rb +177 -177
- data/test/cases/type/unsigned_integer_test.rb +18 -18
- data/test/cases/types_test.rb +141 -141
- data/test/cases/unconnected_test.rb +33 -33
- data/test/cases/validations/association_validation_test.rb +86 -86
- data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -84
- data/test/cases/validations/i18n_validation_test.rb +90 -90
- data/test/cases/validations/length_validation_test.rb +47 -47
- data/test/cases/validations/presence_validation_test.rb +68 -68
- data/test/cases/validations/uniqueness_validation_test.rb +457 -434
- data/test/cases/validations_repair_helper.rb +23 -23
- data/test/cases/validations_test.rb +165 -165
- data/test/cases/view_test.rb +119 -113
- data/test/cases/xml_serialization_test.rb +457 -457
- data/test/cases/yaml_serialization_test.rb +126 -86
- data/test/config.rb +5 -5
- data/test/config.yml +154 -154
- data/test/connections/native_ibm_db/connection.rb +43 -43
- data/test/fixtures/accounts.yml +29 -29
- data/test/fixtures/admin/accounts.yml +2 -2
- data/test/fixtures/admin/randomly_named_a9.yml +7 -7
- data/test/fixtures/admin/randomly_named_b0.yml +7 -7
- 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/binaries.yml +133 -133
- data/test/fixtures/books.yml +11 -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/courses.yml +8 -8
- data/test/fixtures/customers.yml +25 -25
- data/test/fixtures/dashboards.yml +6 -6
- data/test/fixtures/developers.yml +21 -21
- 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/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/csv/accounts.csv +1 -1
- 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/organizations.yml +5 -5
- 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 -12
- data/test/fixtures/posts.yml +80 -80
- data/test/fixtures/price_estimates.yml +7 -7
- data/test/fixtures/products.yml +4 -4
- data/test/fixtures/projects.yml +7 -7
- data/test/fixtures/randomly_named_a9.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/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/ibm_db_test.rb +24 -24
- 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 +8 -8
- data/test/migrations/missing/1_people_have_last_names.rb +8 -8
- data/test/migrations/missing/3_we_need_reminders.rb +11 -11
- data/test/migrations/missing/4_innocent_jointable.rb +11 -11
- data/test/migrations/rename/1_we_need_things.rb +10 -10
- data/test/migrations/rename/2_rename_things.rb +8 -8
- 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 +11 -11
- data/test/migrations/valid/3_innocent_jointable.rb +11 -11
- 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 +11 -11
- data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +11 -11
- 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 +4 -4
- data/test/models/admin/account.rb +2 -2
- data/test/models/admin/randomly_named_c1.rb +3 -3
- data/test/models/admin/user.rb +40 -40
- data/test/models/aircraft.rb +4 -4
- data/test/models/arunit2_model.rb +3 -3
- data/test/models/author.rb +212 -212
- data/test/models/auto_id.rb +4 -4
- data/test/models/autoloadable/extra_firm.rb +2 -2
- data/test/models/binary.rb +1 -1
- data/test/models/bird.rb +12 -12
- data/test/models/book.rb +18 -18
- data/test/models/boolean.rb +2 -2
- data/test/models/bulb.rb +51 -51
- data/test/models/cake_designer.rb +3 -3
- data/test/models/car.rb +26 -26
- data/test/models/carrier.rb +2 -2
- data/test/models/categorization.rb +19 -19
- data/test/models/category.rb +35 -35
- data/test/models/chef.rb +7 -3
- data/test/models/citation.rb +3 -3
- data/test/models/club.rb +23 -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 +64 -64
- data/test/models/company.rb +228 -225
- 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/contract.rb +20 -20
- data/test/models/country.rb +7 -7
- data/test/models/course.rb +6 -6
- data/test/models/customer.rb +77 -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 +255 -252
- 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 +2 -2
- 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 +1 -1
- data/test/models/hotel.rb +9 -6
- 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 +41 -41
- data/test/models/member_detail.rb +7 -7
- data/test/models/member_type.rb +3 -3
- data/test/models/membership.rb +35 -35
- 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/molecule.rb +6 -6
- data/test/models/movie.rb +5 -5
- data/test/models/order.rb +4 -4
- data/test/models/organization.rb +14 -14
- data/test/models/owner.rb +34 -34
- data/test/models/parrot.rb +29 -29
- data/test/models/person.rb +143 -143
- data/test/models/personal_legacy_thing.rb +4 -4
- data/test/models/pet.rb +15 -15
- data/test/models/pirate.rb +92 -92
- data/test/models/possession.rb +3 -3
- data/test/models/post.rb +264 -264
- data/test/models/price_estimate.rb +4 -4
- data/test/models/professor.rb +5 -5
- data/test/models/project.rb +31 -29
- 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 +3 -3
- data/test/models/rating.rb +4 -4
- data/test/models/reader.rb +23 -23
- 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 +33 -33
- data/test/models/ship_part.rb +7 -7
- 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 +7 -7
- data/test/models/tagging.rb +13 -13
- data/test/models/task.rb +5 -5
- data/test/models/topic.rb +124 -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/tyre.rb +11 -11
- data/test/models/uuid_child.rb +3 -3
- 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 +58 -58
- data/test/schema/mysql_specific_schema.rb +70 -70
- data/test/schema/oracle_specific_schema.rb +43 -43
- data/test/schema/postgresql_specific_schema.rb +202 -202
- data/test/schema/schema.rb +952 -938
- data/test/schema/sqlite_specific_schema.rb +21 -21
- data/test/support/config.rb +43 -43
- data/test/support/connection.rb +22 -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
- metadata +2 -2
data/lib/mswin32/ibm_db.rb
CHANGED
@@ -1,123 +1,123 @@
|
|
1
|
-
needToDownloadedCLIPackage = false
|
2
|
-
IBM_DB_HOME = ENV['IBM_DB_HOME']
|
3
|
-
cliPackagePath = File.dirname(__FILE__) + '/../clidriver'
|
4
|
-
|
5
|
-
if ((IBM_DB_HOME == nil || IBM_DB_HOME == '') && (!Dir.exists?(cliPackagePath)))
|
6
|
-
needToDownloadedCLIPackage = true
|
7
|
-
end
|
8
|
-
|
9
|
-
def downloadCLIPackage(destination, link = nil)
|
10
|
-
if(link.nil?)
|
11
|
-
downloadLink = DOWNLOADLINK
|
12
|
-
else
|
13
|
-
downloadLink = link
|
14
|
-
end
|
15
|
-
|
16
|
-
uri = URI.parse(downloadLink)
|
17
|
-
|
18
|
-
filename = "#{destination}/clidriver.zip"
|
19
|
-
|
20
|
-
headers = { 'Accept-Encoding' => 'identity', }
|
21
|
-
|
22
|
-
request = Net::HTTP::Get.new(uri.request_uri, headers)
|
23
|
-
http = Net::HTTP.new(uri.host, uri.port)
|
24
|
-
response = http.request(request)
|
25
|
-
|
26
|
-
f = open(filename, 'wb')
|
27
|
-
f.write(response.body)
|
28
|
-
f.close()
|
29
|
-
|
30
|
-
filename
|
31
|
-
end
|
32
|
-
|
33
|
-
def unzipCLIPackage(archive, destination)
|
34
|
-
if (RUBY_PLATFORM =~ /mswin/ || RUBY_PLATFORM =~ /mingw/)
|
35
|
-
Archive::Zip.extract(archive, destination)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
|
40
|
-
# Download CLI package
|
41
|
-
if(needToDownloadedCLIPackage == true)
|
42
|
-
require 'net/http'
|
43
|
-
require 'open-uri'
|
44
|
-
require 'rubygems/package'
|
45
|
-
require 'fileutils'
|
46
|
-
require 'archive/zip'
|
47
|
-
|
48
|
-
TAR_LONGLINK = '././@LongLink'
|
49
|
-
|
50
|
-
machine_bits = ['ibm'].pack('p').size * 8
|
51
|
-
|
52
|
-
is64Bit = true
|
53
|
-
|
54
|
-
if machine_bits == 64
|
55
|
-
is64Bit = true
|
56
|
-
else
|
57
|
-
is64Bit = false
|
58
|
-
end
|
59
|
-
|
60
|
-
if (RUBY_PLATFORM =~ /mswin/ || RUBY_PLATFORM =~ /mingw/)
|
61
|
-
if(is64Bit)
|
62
|
-
DOWNLOADLINK = "http://public.dhe.ibm.com/ibmdl/export/pub/software/data/db2/drivers/odbc_cli/ntx64_odbc_cli.zip"
|
63
|
-
else
|
64
|
-
DOWNLOADLINK = "http://public.dhe.ibm.com/ibmdl/export/pub/software/data/db2/drivers/odbc_cli/nt32_odbc_cli.zip"
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
destination = "#{File.expand_path(File.dirname(File.dirname(__FILE__)))}"
|
69
|
-
archive = downloadCLIPackage(destination)
|
70
|
-
unzipCLIPackage(archive,destination)
|
71
|
-
end
|
72
|
-
|
73
|
-
|
74
|
-
if(IBM_DB_HOME !=nil && IBM_DB_HOME != '')
|
75
|
-
bin_path = IBM_DB_HOME+'/bin'
|
76
|
-
ENV['PATH'] = ENV['PATH'] + ';.;' + bin_path
|
77
|
-
end
|
78
|
-
|
79
|
-
if (RUBY_PLATFORM =~ /mswin/ || RUBY_PLATFORM =~ /mingw/)
|
80
|
-
$LOAD_PATH.unshift("#{File.dirname(__FILE__)}")
|
81
|
-
ENV['PATH'] = ENV['PATH'] + ';.;' + File.expand_path(File.dirname(__FILE__) + '/../clidriver/bin')
|
82
|
-
end
|
83
|
-
|
84
|
-
|
85
|
-
if (RUBY_VERSION =~ /1.9./ )
|
86
|
-
require 'rb19x/ibm_db.so'
|
87
|
-
elsif (RUBY_VERSION =~ /2.0./)
|
88
|
-
#Check if we are on 64-bit or 32-bit ruby and load binary accordingly
|
89
|
-
machine_bits = ['ibm'].pack('p').size * 8
|
90
|
-
if machine_bits == 64
|
91
|
-
#require 'rb2x/x64/ibm_db.so'
|
92
|
-
raise NotImplementedError, "ibm_db with Ruby 2.0 64-bit on Windows platform is not supported. Refer to README for more details"
|
93
|
-
else
|
94
|
-
require 'rb2x/i386/ibm_db.so'
|
95
|
-
end
|
96
|
-
elsif (RUBY_VERSION =~ /2.1./)
|
97
|
-
#Check if we are on 64-bit or 32-bit ruby and load binary accordingly
|
98
|
-
machine_bits = ['ibm'].pack('p').size * 8
|
99
|
-
if machine_bits == 64
|
100
|
-
#require 'rb21x/x64/ibm_db.so'
|
101
|
-
raise NotImplementedError, "ibm_db with Ruby 2.1 64-bit on Windows platform is not supported. Refer to README for more details"
|
102
|
-
else
|
103
|
-
require 'rb21x/i386/ibm_db.so'
|
104
|
-
end
|
105
|
-
elsif (RUBY_VERSION =~ /2.2./ )
|
106
|
-
#Check if we are on 64-bit or 32-bit ruby and load binary accordingly
|
107
|
-
machine_bits = ['ibm'].pack('p').size * 8
|
108
|
-
if machine_bits == 64
|
109
|
-
raise NotImplementedError, "ibm_db with Ruby 2.2 64-bit on Windows platform is not supported. Refer to README for more details"
|
110
|
-
else
|
111
|
-
require 'rb22x/i386/ibm_db.so'
|
112
|
-
end
|
113
|
-
elsif (RUBY_VERSION =~ /2.3./ )
|
114
|
-
#Check if we are on 64-bit or 32-bit ruby and load binary accordingly
|
115
|
-
machine_bits = ['ibm'].pack('p').size * 8
|
116
|
-
if machine_bits == 64
|
117
|
-
raise NotImplementedError, "ibm_db with Ruby 2.2 64-bit on Windows platform is not supported. Refer to README for more details"
|
118
|
-
else
|
119
|
-
require 'rb23x/i386/ibm_db.so'
|
120
|
-
end
|
121
|
-
else
|
122
|
-
require 'rb18x/ibm_db.so'
|
1
|
+
needToDownloadedCLIPackage = false
|
2
|
+
IBM_DB_HOME = ENV['IBM_DB_HOME']
|
3
|
+
cliPackagePath = File.dirname(__FILE__) + '/../clidriver'
|
4
|
+
|
5
|
+
if ((IBM_DB_HOME == nil || IBM_DB_HOME == '') && (!Dir.exists?(cliPackagePath)))
|
6
|
+
needToDownloadedCLIPackage = true
|
7
|
+
end
|
8
|
+
|
9
|
+
def downloadCLIPackage(destination, link = nil)
|
10
|
+
if(link.nil?)
|
11
|
+
downloadLink = DOWNLOADLINK
|
12
|
+
else
|
13
|
+
downloadLink = link
|
14
|
+
end
|
15
|
+
|
16
|
+
uri = URI.parse(downloadLink)
|
17
|
+
|
18
|
+
filename = "#{destination}/clidriver.zip"
|
19
|
+
|
20
|
+
headers = { 'Accept-Encoding' => 'identity', }
|
21
|
+
|
22
|
+
request = Net::HTTP::Get.new(uri.request_uri, headers)
|
23
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
24
|
+
response = http.request(request)
|
25
|
+
|
26
|
+
f = open(filename, 'wb')
|
27
|
+
f.write(response.body)
|
28
|
+
f.close()
|
29
|
+
|
30
|
+
filename
|
31
|
+
end
|
32
|
+
|
33
|
+
def unzipCLIPackage(archive, destination)
|
34
|
+
if (RUBY_PLATFORM =~ /mswin/ || RUBY_PLATFORM =~ /mingw/)
|
35
|
+
Archive::Zip.extract(archive, destination)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
# Download CLI package
|
41
|
+
if(needToDownloadedCLIPackage == true)
|
42
|
+
require 'net/http'
|
43
|
+
require 'open-uri'
|
44
|
+
require 'rubygems/package'
|
45
|
+
require 'fileutils'
|
46
|
+
require 'archive/zip'
|
47
|
+
|
48
|
+
TAR_LONGLINK = '././@LongLink'
|
49
|
+
|
50
|
+
machine_bits = ['ibm'].pack('p').size * 8
|
51
|
+
|
52
|
+
is64Bit = true
|
53
|
+
|
54
|
+
if machine_bits == 64
|
55
|
+
is64Bit = true
|
56
|
+
else
|
57
|
+
is64Bit = false
|
58
|
+
end
|
59
|
+
|
60
|
+
if (RUBY_PLATFORM =~ /mswin/ || RUBY_PLATFORM =~ /mingw/)
|
61
|
+
if(is64Bit)
|
62
|
+
DOWNLOADLINK = "http://public.dhe.ibm.com/ibmdl/export/pub/software/data/db2/drivers/odbc_cli/ntx64_odbc_cli.zip"
|
63
|
+
else
|
64
|
+
DOWNLOADLINK = "http://public.dhe.ibm.com/ibmdl/export/pub/software/data/db2/drivers/odbc_cli/nt32_odbc_cli.zip"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
destination = "#{File.expand_path(File.dirname(File.dirname(__FILE__)))}"
|
69
|
+
archive = downloadCLIPackage(destination)
|
70
|
+
unzipCLIPackage(archive,destination)
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
if(IBM_DB_HOME !=nil && IBM_DB_HOME != '')
|
75
|
+
bin_path = IBM_DB_HOME+'/bin'
|
76
|
+
ENV['PATH'] = ENV['PATH'] + ';.;' + bin_path
|
77
|
+
end
|
78
|
+
|
79
|
+
if (RUBY_PLATFORM =~ /mswin/ || RUBY_PLATFORM =~ /mingw/)
|
80
|
+
$LOAD_PATH.unshift("#{File.dirname(__FILE__)}")
|
81
|
+
ENV['PATH'] = ENV['PATH'] + ';.;' + File.expand_path(File.dirname(__FILE__) + '/../clidriver/bin')
|
82
|
+
end
|
83
|
+
|
84
|
+
|
85
|
+
if (RUBY_VERSION =~ /1.9./ )
|
86
|
+
require 'rb19x/ibm_db.so'
|
87
|
+
elsif (RUBY_VERSION =~ /2.0./)
|
88
|
+
#Check if we are on 64-bit or 32-bit ruby and load binary accordingly
|
89
|
+
machine_bits = ['ibm'].pack('p').size * 8
|
90
|
+
if machine_bits == 64
|
91
|
+
#require 'rb2x/x64/ibm_db.so'
|
92
|
+
raise NotImplementedError, "ibm_db with Ruby 2.0 64-bit on Windows platform is not supported. Refer to README for more details"
|
93
|
+
else
|
94
|
+
require 'rb2x/i386/ibm_db.so'
|
95
|
+
end
|
96
|
+
elsif (RUBY_VERSION =~ /2.1./)
|
97
|
+
#Check if we are on 64-bit or 32-bit ruby and load binary accordingly
|
98
|
+
machine_bits = ['ibm'].pack('p').size * 8
|
99
|
+
if machine_bits == 64
|
100
|
+
#require 'rb21x/x64/ibm_db.so'
|
101
|
+
raise NotImplementedError, "ibm_db with Ruby 2.1 64-bit on Windows platform is not supported. Refer to README for more details"
|
102
|
+
else
|
103
|
+
require 'rb21x/i386/ibm_db.so'
|
104
|
+
end
|
105
|
+
elsif (RUBY_VERSION =~ /2.2./ )
|
106
|
+
#Check if we are on 64-bit or 32-bit ruby and load binary accordingly
|
107
|
+
machine_bits = ['ibm'].pack('p').size * 8
|
108
|
+
if machine_bits == 64
|
109
|
+
raise NotImplementedError, "ibm_db with Ruby 2.2 64-bit on Windows platform is not supported. Refer to README for more details"
|
110
|
+
else
|
111
|
+
require 'rb22x/i386/ibm_db.so'
|
112
|
+
end
|
113
|
+
elsif (RUBY_VERSION =~ /2.3./ )
|
114
|
+
#Check if we are on 64-bit or 32-bit ruby and load binary accordingly
|
115
|
+
machine_bits = ['ibm'].pack('p').size * 8
|
116
|
+
if machine_bits == 64
|
117
|
+
raise NotImplementedError, "ibm_db with Ruby 2.2 64-bit on Windows platform is not supported. Refer to README for more details"
|
118
|
+
else
|
119
|
+
require 'rb23x/i386/ibm_db.so'
|
120
|
+
end
|
121
|
+
else
|
122
|
+
require 'rb18x/ibm_db.so'
|
123
123
|
end
|
Binary file
|
Binary file
|
Binary file
|
@@ -1,46 +1,46 @@
|
|
1
|
-
module ActiveRecord
|
2
|
-
module ConnectionHandling
|
3
|
-
def fake_connection(config)
|
4
|
-
ConnectionAdapters::FakeAdapter.new nil, logger
|
5
|
-
end
|
6
|
-
end
|
7
|
-
|
8
|
-
module ConnectionAdapters
|
9
|
-
class FakeAdapter < AbstractAdapter
|
10
|
-
attr_accessor :tables, :primary_keys
|
11
|
-
|
12
|
-
@columns = Hash.new { |h,k| h[k] = [] }
|
13
|
-
class << self
|
14
|
-
attr_reader :columns
|
15
|
-
end
|
16
|
-
|
17
|
-
def initialize(connection, logger)
|
18
|
-
super
|
19
|
-
@tables = []
|
20
|
-
@primary_keys = {}
|
21
|
-
@columns = self.class.columns
|
22
|
-
end
|
23
|
-
|
24
|
-
def primary_key(table)
|
25
|
-
@primary_keys[table]
|
26
|
-
end
|
27
|
-
|
28
|
-
def merge_column(table_name, name, sql_type = nil, options = {})
|
29
|
-
@columns[table_name] << ActiveRecord::ConnectionAdapters::Column.new(
|
30
|
-
name.to_s,
|
31
|
-
options[:default],
|
32
|
-
lookup_cast_type(sql_type.to_s),
|
33
|
-
sql_type.to_s,
|
34
|
-
options[:null])
|
35
|
-
end
|
36
|
-
|
37
|
-
def columns(table_name)
|
38
|
-
@columns[table_name]
|
39
|
-
end
|
40
|
-
|
41
|
-
def active?
|
42
|
-
true
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
1
|
+
module ActiveRecord
|
2
|
+
module ConnectionHandling
|
3
|
+
def fake_connection(config)
|
4
|
+
ConnectionAdapters::FakeAdapter.new nil, logger
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
module ConnectionAdapters
|
9
|
+
class FakeAdapter < AbstractAdapter
|
10
|
+
attr_accessor :tables, :primary_keys
|
11
|
+
|
12
|
+
@columns = Hash.new { |h,k| h[k] = [] }
|
13
|
+
class << self
|
14
|
+
attr_reader :columns
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize(connection, logger)
|
18
|
+
super
|
19
|
+
@tables = []
|
20
|
+
@primary_keys = {}
|
21
|
+
@columns = self.class.columns
|
22
|
+
end
|
23
|
+
|
24
|
+
def primary_key(table)
|
25
|
+
@primary_keys[table]
|
26
|
+
end
|
27
|
+
|
28
|
+
def merge_column(table_name, name, sql_type = nil, options = {})
|
29
|
+
@columns[table_name] << ActiveRecord::ConnectionAdapters::Column.new(
|
30
|
+
name.to_s,
|
31
|
+
options[:default],
|
32
|
+
lookup_cast_type(sql_type.to_s),
|
33
|
+
sql_type.to_s,
|
34
|
+
options[:null])
|
35
|
+
end
|
36
|
+
|
37
|
+
def columns(table_name)
|
38
|
+
@columns[table_name]
|
39
|
+
end
|
40
|
+
|
41
|
+
def active?
|
42
|
+
true
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/test/assets/example.log
CHANGED
@@ -1 +1 @@
|
|
1
|
-
# Logfile created on Wed Oct 31 16:05:13 +0000 2007 by logger.rb/1.5.2.9
|
1
|
+
# Logfile created on Wed Oct 31 16:05:13 +0000 2007 by logger.rb/1.5.2.9
|
data/test/assets/test.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
%00
|
1
|
+
%00
|
data/test/cases/adapter_test.rb
CHANGED
@@ -1,261 +1,276 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require "cases/helper"
|
4
|
-
require "models/book"
|
5
|
-
require "models/post"
|
6
|
-
require "models/author"
|
7
|
-
|
8
|
-
module ActiveRecord
|
9
|
-
class AdapterTest < ActiveRecord::TestCase
|
10
|
-
def setup
|
11
|
-
@connection = ActiveRecord::Base.connection
|
12
|
-
end
|
13
|
-
|
14
|
-
##
|
15
|
-
# PostgreSQL does not support null bytes in strings
|
16
|
-
unless current_adapter?(:PostgreSQLAdapter)
|
17
|
-
def test_update_prepared_statement
|
18
|
-
b = Book.create(name: "my \x00 book")
|
19
|
-
b.reload
|
20
|
-
assert_equal "my \x00 book", b.name
|
21
|
-
b.update_attributes(name: "my other \x00 book")
|
22
|
-
b.reload
|
23
|
-
assert_equal "my other \x00 book", b.name
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_tables
|
28
|
-
tables = @connection.tables
|
29
|
-
assert tables.include?("accounts")
|
30
|
-
assert tables.include?("authors")
|
31
|
-
assert tables.include?("tasks")
|
32
|
-
assert tables.include?("topics")
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_table_exists?
|
36
|
-
assert @connection.table_exists?("accounts")
|
37
|
-
assert !@connection.table_exists?("nonexistingtable")
|
38
|
-
assert !@connection.table_exists?(nil)
|
39
|
-
end
|
40
|
-
|
41
|
-
def
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
@connection.
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
end
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
assert_equal "
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require "cases/helper"
|
4
|
+
require "models/book"
|
5
|
+
require "models/post"
|
6
|
+
require "models/author"
|
7
|
+
|
8
|
+
module ActiveRecord
|
9
|
+
class AdapterTest < ActiveRecord::TestCase
|
10
|
+
def setup
|
11
|
+
@connection = ActiveRecord::Base.connection
|
12
|
+
end
|
13
|
+
|
14
|
+
##
|
15
|
+
# PostgreSQL does not support null bytes in strings
|
16
|
+
unless current_adapter?(:PostgreSQLAdapter)
|
17
|
+
def test_update_prepared_statement
|
18
|
+
b = Book.create(name: "my \x00 book")
|
19
|
+
b.reload
|
20
|
+
assert_equal "my \x00 book", b.name
|
21
|
+
b.update_attributes(name: "my other \x00 book")
|
22
|
+
b.reload
|
23
|
+
assert_equal "my other \x00 book", b.name
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_tables
|
28
|
+
tables = @connection.tables
|
29
|
+
assert tables.include?("accounts")
|
30
|
+
assert tables.include?("authors")
|
31
|
+
assert tables.include?("tasks")
|
32
|
+
assert tables.include?("topics")
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_table_exists?
|
36
|
+
assert @connection.table_exists?("accounts")
|
37
|
+
assert !@connection.table_exists?("nonexistingtable")
|
38
|
+
assert !@connection.table_exists?(nil)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_data_sources
|
42
|
+
data_sources = @connection.data_sources
|
43
|
+
assert data_sources.include?("accounts")
|
44
|
+
assert data_sources.include?("authors")
|
45
|
+
assert data_sources.include?("tasks")
|
46
|
+
assert data_sources.include?("topics")
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_data_source_exists?
|
50
|
+
assert @connection.data_source_exists?("accounts")
|
51
|
+
assert @connection.data_source_exists?(:accounts)
|
52
|
+
assert_not @connection.data_source_exists?("nonexistingtable")
|
53
|
+
assert_not @connection.data_source_exists?(nil)
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_indexes
|
57
|
+
idx_name = "accounts_idx"
|
58
|
+
|
59
|
+
if @connection.respond_to?(:indexes)
|
60
|
+
indexes = @connection.indexes("accounts")
|
61
|
+
assert indexes.empty?
|
62
|
+
|
63
|
+
@connection.add_index :accounts, :firm_id, :name => idx_name
|
64
|
+
indexes = @connection.indexes("accounts")
|
65
|
+
assert_equal "accounts", indexes.first.table
|
66
|
+
assert_equal idx_name, indexes.first.name
|
67
|
+
assert !indexes.first.unique
|
68
|
+
assert_equal ["firm_id"], indexes.first.columns
|
69
|
+
else
|
70
|
+
warn "#{@connection.class} does not respond to #indexes"
|
71
|
+
end
|
72
|
+
|
73
|
+
ensure
|
74
|
+
@connection.remove_index(:accounts, :name => idx_name) rescue nil
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_current_database
|
78
|
+
if @connection.respond_to?(:current_database)
|
79
|
+
assert_equal ARTest.connection_config['arunit']['database'], @connection.current_database
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
if current_adapter?(:MysqlAdapter)
|
84
|
+
def test_charset
|
85
|
+
assert_not_nil @connection.charset
|
86
|
+
assert_not_equal 'character_set_database', @connection.charset
|
87
|
+
assert_equal @connection.show_variable('character_set_database'), @connection.charset
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_collation
|
91
|
+
assert_not_nil @connection.collation
|
92
|
+
assert_not_equal 'collation_database', @connection.collation
|
93
|
+
assert_equal @connection.show_variable('collation_database'), @connection.collation
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_show_nonexistent_variable_returns_nil
|
97
|
+
assert_nil @connection.show_variable('foo_bar_baz')
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_not_specifying_database_name_for_cross_database_selects
|
101
|
+
begin
|
102
|
+
assert_nothing_raised do
|
103
|
+
ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations['arunit'].except(:database))
|
104
|
+
|
105
|
+
config = ARTest.connection_config
|
106
|
+
ActiveRecord::Base.connection.execute(
|
107
|
+
"SELECT #{config['arunit']['database']}.pirates.*, #{config['arunit2']['database']}.courses.* " \
|
108
|
+
"FROM #{config['arunit']['database']}.pirates, #{config['arunit2']['database']}.courses"
|
109
|
+
)
|
110
|
+
end
|
111
|
+
ensure
|
112
|
+
ActiveRecord::Base.establish_connection :arunit
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_table_alias
|
118
|
+
def @connection.test_table_alias_length() 10; end
|
119
|
+
class << @connection
|
120
|
+
alias_method :old_table_alias_length, :table_alias_length
|
121
|
+
alias_method :table_alias_length, :test_table_alias_length
|
122
|
+
end
|
123
|
+
|
124
|
+
assert_equal 'posts', @connection.table_alias_for('posts')
|
125
|
+
assert_equal 'posts_comm', @connection.table_alias_for('posts_comments')
|
126
|
+
assert_equal 'dbo_posts', @connection.table_alias_for('dbo.posts')
|
127
|
+
|
128
|
+
class << @connection
|
129
|
+
remove_method :table_alias_length
|
130
|
+
alias_method :table_alias_length, :old_table_alias_length
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
# test resetting sequences in odd tables in PostgreSQL
|
135
|
+
if ActiveRecord::Base.connection.respond_to?(:reset_pk_sequence!)
|
136
|
+
require 'models/movie'
|
137
|
+
require 'models/subscriber'
|
138
|
+
|
139
|
+
def test_reset_empty_table_with_custom_pk
|
140
|
+
Movie.delete_all
|
141
|
+
Movie.connection.reset_pk_sequence! 'movies'
|
142
|
+
assert_equal 1, Movie.create(:name => 'fight club').id
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_reset_table_with_non_integer_pk
|
146
|
+
Subscriber.delete_all
|
147
|
+
Subscriber.connection.reset_pk_sequence! 'subscribers'
|
148
|
+
sub = Subscriber.new(:name => 'robert drake')
|
149
|
+
sub.id = 'bob drake'
|
150
|
+
assert_nothing_raised { sub.save! }
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
def test_uniqueness_violations_are_translated_to_specific_exception
|
155
|
+
@connection.execute "INSERT INTO subscribers(nick) VALUES('me')"
|
156
|
+
assert_raises(ActiveRecord::RecordNotUnique) do
|
157
|
+
@connection.execute "INSERT INTO subscribers(nick) VALUES('me')"
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
unless current_adapter?(:SQLite3Adapter)
|
162
|
+
def test_foreign_key_violations_are_translated_to_specific_exception
|
163
|
+
assert_raises(ActiveRecord::InvalidForeignKey) do
|
164
|
+
# Oracle adapter uses prefetched primary key values from sequence and passes them to connection adapter insert method
|
165
|
+
if @connection.prefetch_primary_key?
|
166
|
+
id_value = @connection.next_sequence_value(@connection.default_sequence_name("fk_test_has_fk", "id"))
|
167
|
+
@connection.execute "INSERT INTO fk_test_has_fk (id, fk_id) VALUES (#{id_value},0)"
|
168
|
+
else
|
169
|
+
@connection.execute "INSERT INTO fk_test_has_fk (fk_id) VALUES (0)"
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
def test_foreign_key_violations_are_translated_to_specific_exception_with_validate_false
|
175
|
+
klass_has_fk = Class.new(ActiveRecord::Base) do
|
176
|
+
self.table_name = 'fk_test_has_fk'
|
177
|
+
end
|
178
|
+
|
179
|
+
assert_raises(ActiveRecord::InvalidForeignKey) do
|
180
|
+
has_fk = klass_has_fk.new
|
181
|
+
has_fk.fk_id = 1231231231
|
182
|
+
has_fk.save(validate: false)
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
def test_disable_referential_integrity
|
188
|
+
assert_nothing_raised do
|
189
|
+
@connection.disable_referential_integrity do
|
190
|
+
# Oracle adapter uses prefetched primary key values from sequence and passes them to connection adapter insert method
|
191
|
+
if @connection.prefetch_primary_key?
|
192
|
+
id_value = @connection.next_sequence_value(@connection.default_sequence_name("fk_test_has_fk", "id"))
|
193
|
+
@connection.execute "INSERT INTO fk_test_has_fk (id, fk_id) VALUES (#{id_value},0)"
|
194
|
+
else
|
195
|
+
@connection.execute "INSERT INTO fk_test_has_fk (fk_id) VALUES (0)"
|
196
|
+
end
|
197
|
+
# should delete created record as otherwise disable_referential_integrity will try to enable constraints after executed block
|
198
|
+
# and will fail (at least on Oracle)
|
199
|
+
@connection.execute "DELETE FROM fk_test_has_fk"
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
def test_select_all_always_return_activerecord_result
|
205
|
+
result = @connection.select_all "SELECT * FROM posts"
|
206
|
+
assert result.is_a?(ActiveRecord::Result)
|
207
|
+
end
|
208
|
+
|
209
|
+
def test_select_methods_passing_a_association_relation
|
210
|
+
author = Author.create!(name: 'john')
|
211
|
+
Post.create!(author: author, title: 'foo', body: 'bar')
|
212
|
+
query = author.posts.where(title: 'foo').select(:title)
|
213
|
+
assert_equal({"title" => "foo"}, @connection.select_one(query.arel, nil, query.bind_values))
|
214
|
+
assert_equal({"title" => "foo"}, @connection.select_one(query))
|
215
|
+
assert @connection.select_all(query).is_a?(ActiveRecord::Result)
|
216
|
+
assert_equal "foo", @connection.select_value(query)
|
217
|
+
assert_equal ["foo"], @connection.select_values(query)
|
218
|
+
end
|
219
|
+
|
220
|
+
def test_select_methods_passing_a_relation
|
221
|
+
Post.create!(title: 'foo', body: 'bar')
|
222
|
+
query = Post.where(title: 'foo').select(:title)
|
223
|
+
assert_equal({"title" => "foo"}, @connection.select_one(query.arel, nil, query.bind_values))
|
224
|
+
assert_equal({"title" => "foo"}, @connection.select_one(query))
|
225
|
+
assert @connection.select_all(query).is_a?(ActiveRecord::Result)
|
226
|
+
assert_equal "foo", @connection.select_value(query)
|
227
|
+
assert_equal ["foo"], @connection.select_values(query)
|
228
|
+
end
|
229
|
+
|
230
|
+
test "type_to_sql returns a String for unmapped types" do
|
231
|
+
assert_equal "special_db_type", @connection.type_to_sql(:special_db_type)
|
232
|
+
end
|
233
|
+
|
234
|
+
unless current_adapter?(:PostgreSQLAdapter)
|
235
|
+
def test_log_invalid_encoding
|
236
|
+
assert_raise ActiveRecord::StatementInvalid do
|
237
|
+
@connection.send :log, "SELECT '?' FROM DUAL" do
|
238
|
+
raise '?'.force_encoding(Encoding::ASCII_8BIT)
|
239
|
+
end
|
240
|
+
end
|
241
|
+
end
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
class AdapterTestWithoutTransaction < ActiveRecord::TestCase
|
246
|
+
self.use_transactional_fixtures = false
|
247
|
+
|
248
|
+
class Klass < ActiveRecord::Base
|
249
|
+
end
|
250
|
+
|
251
|
+
def setup
|
252
|
+
Klass.establish_connection :arunit
|
253
|
+
@connection = Klass.connection
|
254
|
+
end
|
255
|
+
|
256
|
+
teardown do
|
257
|
+
Klass.remove_connection
|
258
|
+
end
|
259
|
+
|
260
|
+
unless in_memory_db?
|
261
|
+
test "transaction state is reset after a reconnect" do
|
262
|
+
@connection.begin_transaction
|
263
|
+
assert @connection.transaction_open?
|
264
|
+
@connection.reconnect!
|
265
|
+
assert !@connection.transaction_open?
|
266
|
+
end
|
267
|
+
|
268
|
+
test "transaction state is reset after a disconnect" do
|
269
|
+
@connection.begin_transaction
|
270
|
+
assert @connection.transaction_open?
|
271
|
+
@connection.disconnect!
|
272
|
+
assert !@connection.transaction_open?
|
273
|
+
end
|
274
|
+
end
|
275
|
+
end
|
276
|
+
end
|