ibm_db 3.0.4 → 3.0.5

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.
Files changed (459) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +4 -1
  3. data/LICENSE +1 -1
  4. data/MANIFEST +14 -14
  5. data/README +225 -225
  6. data/ext/Makefile.nt32 +181 -181
  7. data/ext/Makefile.nt32.191 +212 -212
  8. data/ext/extconf.rb +291 -291
  9. data/ext/ibm_db.c +11887 -11884
  10. data/ext/ruby_ibm_db.h +241 -241
  11. data/ext/ruby_ibm_db_cli.c +866 -866
  12. data/ext/ruby_ibm_db_cli.h +500 -500
  13. data/init.rb +41 -41
  14. data/lib/IBM_DB.rb +27 -27
  15. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +3177 -3177
  16. data/lib/active_record/connection_adapters/ibmdb_adapter.rb +1 -1
  17. data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -328
  18. data/test/active_record/connection_adapters/fake_adapter.rb +46 -46
  19. data/test/assets/example.log +1 -1
  20. data/test/assets/test.txt +1 -1
  21. data/test/cases/adapter_test.rb +276 -261
  22. data/test/cases/aggregations_test.rb +158 -158
  23. data/test/cases/ar_schema_test.rb +161 -161
  24. data/test/cases/associations/association_scope_test.rb +21 -21
  25. data/test/cases/associations/belongs_to_associations_test.rb +1029 -1029
  26. data/test/cases/associations/callbacks_test.rb +192 -192
  27. data/test/cases/associations/cascaded_eager_loading_test.rb +188 -188
  28. data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +26 -26
  29. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -36
  30. data/test/cases/associations/eager_load_nested_include_test.rb +128 -128
  31. data/test/cases/associations/eager_singularization_test.rb +148 -148
  32. data/test/cases/associations/eager_test.rb +1429 -1411
  33. data/test/cases/associations/extension_test.rb +82 -82
  34. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +972 -932
  35. data/test/cases/associations/has_many_associations_test.rb +2182 -2162
  36. data/test/cases/associations/has_many_through_associations_test.rb +1204 -1204
  37. data/test/cases/associations/has_one_associations_test.rb +610 -610
  38. data/test/cases/associations/has_one_through_associations_test.rb +380 -380
  39. data/test/cases/associations/inner_join_association_test.rb +139 -139
  40. data/test/cases/associations/inverse_associations_test.rb +706 -693
  41. data/test/cases/associations/join_model_test.rb +754 -754
  42. data/test/cases/associations/nested_through_associations_test.rb +579 -579
  43. data/test/cases/associations/required_test.rb +82 -82
  44. data/test/cases/associations_test.rb +380 -380
  45. data/test/cases/attribute_decorators_test.rb +125 -125
  46. data/test/cases/attribute_methods/read_test.rb +60 -60
  47. data/test/cases/attribute_methods/serialization_test.rb +29 -29
  48. data/test/cases/attribute_methods_test.rb +952 -952
  49. data/test/cases/attribute_set_test.rb +210 -200
  50. data/test/cases/attribute_test.rb +180 -180
  51. data/test/cases/attributes_test.rb +136 -136
  52. data/test/cases/autosave_association_test.rb +1595 -1595
  53. data/test/cases/base_test.rb +1664 -1638
  54. data/test/cases/batches_test.rb +212 -212
  55. data/test/cases/binary_test.rb +52 -52
  56. data/test/cases/bind_parameter_test.rb +100 -100
  57. data/test/cases/calculations_test.rb +646 -646
  58. data/test/cases/callbacks_test.rb +543 -543
  59. data/test/cases/clone_test.rb +40 -40
  60. data/test/cases/coders/yaml_column_test.rb +63 -63
  61. data/test/cases/column_alias_test.rb +17 -17
  62. data/test/cases/column_definition_test.rb +123 -123
  63. data/test/cases/connection_adapters/adapter_leasing_test.rb +54 -54
  64. data/test/cases/connection_adapters/connection_handler_test.rb +53 -53
  65. data/test/cases/connection_adapters/connection_specification_test.rb +12 -12
  66. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +293 -293
  67. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +65 -65
  68. data/test/cases/connection_adapters/quoting_test.rb +13 -13
  69. data/test/cases/connection_adapters/schema_cache_test.rb +56 -56
  70. data/test/cases/connection_adapters/type_lookup_test.rb +110 -110
  71. data/test/cases/connection_management_test.rb +122 -122
  72. data/test/cases/connection_pool_test.rb +346 -346
  73. data/test/cases/connection_specification/resolver_test.rb +116 -116
  74. data/test/cases/core_test.rb +112 -112
  75. data/test/cases/counter_cache_test.rb +209 -209
  76. data/test/cases/custom_locking_test.rb +17 -17
  77. data/test/cases/database_statements_test.rb +19 -19
  78. data/test/cases/date_time_test.rb +61 -61
  79. data/test/cases/defaults_test.rb +223 -223
  80. data/test/cases/dirty_test.rb +785 -775
  81. data/test/cases/disconnected_test.rb +28 -28
  82. data/test/cases/dup_test.rb +157 -157
  83. data/test/cases/enum_test.rb +290 -290
  84. data/test/cases/explain_subscriber_test.rb +64 -64
  85. data/test/cases/explain_test.rb +76 -76
  86. data/test/cases/finder_respond_to_test.rb +60 -60
  87. data/test/cases/finder_test.rb +1169 -1166
  88. data/test/cases/fixture_set/file_test.rb +138 -138
  89. data/test/cases/fixtures_test.rb +908 -897
  90. data/test/cases/forbidden_attributes_protection_test.rb +99 -99
  91. data/test/cases/habtm_destroy_order_test.rb +61 -61
  92. data/test/cases/helper.rb +210 -210
  93. data/test/cases/hot_compatibility_test.rb +54 -54
  94. data/test/cases/i18n_test.rb +45 -45
  95. data/test/cases/inheritance_test.rb +375 -375
  96. data/test/cases/integration_test.rb +139 -139
  97. data/test/cases/invalid_connection_test.rb +22 -22
  98. data/test/cases/invalid_date_test.rb +32 -32
  99. data/test/cases/invertible_migration_test.rb +295 -295
  100. data/test/cases/json_serialization_test.rb +302 -302
  101. data/test/cases/locking_test.rb +477 -477
  102. data/test/cases/log_subscriber_test.rb +136 -136
  103. data/test/cases/migration/change_schema_test - Copy.rb +448 -448
  104. data/test/cases/migration/change_schema_test.rb +512 -472
  105. data/test/cases/migration/change_table_test.rb +224 -224
  106. data/test/cases/migration/column_attributes_test.rb +192 -192
  107. data/test/cases/migration/column_positioning_test.rb +56 -56
  108. data/test/cases/migration/columns_test.rb +304 -304
  109. data/test/cases/migration/command_recorder_test.rb +305 -305
  110. data/test/cases/migration/create_join_table_test.rb +148 -148
  111. data/test/cases/migration/foreign_key_test - Changed.rb +325 -325
  112. data/test/cases/migration/foreign_key_test.rb +328 -360
  113. data/test/cases/migration/helper.rb +39 -39
  114. data/test/cases/migration/index_test.rb +216 -216
  115. data/test/cases/migration/logger_test.rb +36 -36
  116. data/test/cases/migration/pending_migrations_test.rb +53 -53
  117. data/test/cases/migration/references_foreign_key_test.rb +169 -214
  118. data/test/cases/migration/references_index_test.rb +101 -101
  119. data/test/cases/migration/references_statements_test.rb +116 -116
  120. data/test/cases/migration/rename_table_test.rb +93 -93
  121. data/test/cases/migration/table_and_index_test.rb +24 -24
  122. data/test/cases/migration_test.rb +959 -959
  123. data/test/cases/migrator_test.rb +388 -388
  124. data/test/cases/mixin_test.rb +70 -70
  125. data/test/cases/modules_test.rb +173 -173
  126. data/test/cases/multiparameter_attributes_test.rb +350 -350
  127. data/test/cases/multiple_db_test.rb +115 -115
  128. data/test/cases/nested_attributes_test.rb +1070 -1057
  129. data/test/cases/nested_attributes_with_callbacks_test.rb +144 -144
  130. data/test/cases/persistence_test.rb +909 -909
  131. data/test/cases/pooled_connections_test.rb +81 -81
  132. data/test/cases/primary_keys_test.rb +237 -237
  133. data/test/cases/query_cache_test.rb +326 -326
  134. data/test/cases/quoting_test.rb +156 -156
  135. data/test/cases/readonly_test.rb +118 -118
  136. data/test/cases/reaper_test.rb +85 -85
  137. data/test/cases/reflection_test.rb +463 -454
  138. data/test/cases/relation/delegation_test.rb +68 -68
  139. data/test/cases/relation/merging_test.rb +161 -161
  140. data/test/cases/relation/mutation_test.rb +165 -165
  141. data/test/cases/relation/predicate_builder_test.rb +14 -14
  142. data/test/cases/relation/where_chain_test.rb +181 -181
  143. data/test/cases/relation/where_test.rb +300 -300
  144. data/test/cases/relation/where_test2.rb +36 -36
  145. data/test/cases/relation_test.rb +319 -297
  146. data/test/cases/relations_test.rb +1815 -1815
  147. data/test/cases/reload_models_test.rb +22 -22
  148. data/test/cases/result_test.rb +80 -80
  149. data/test/cases/sanitize_test.rb +83 -83
  150. data/test/cases/schema_dumper_test.rb +463 -463
  151. data/test/cases/scoping/default_scoping_test.rb +454 -454
  152. data/test/cases/scoping/named_scoping_test.rb +524 -524
  153. data/test/cases/scoping/relation_scoping_test.rb +357 -357
  154. data/test/cases/serialization_test.rb +104 -104
  155. data/test/cases/serialized_attribute_test.rb +277 -277
  156. data/test/cases/statement_cache_test.rb +98 -98
  157. data/test/cases/store_test.rb +194 -194
  158. data/test/cases/tasks/database_tasks_test.rb +398 -396
  159. data/test/cases/tasks/mysql_rake_test.rb +324 -311
  160. data/test/cases/tasks/postgresql_rake_test.rb +250 -245
  161. data/test/cases/tasks/sqlite_rake_test.rb +193 -193
  162. data/test/cases/test_case.rb +123 -123
  163. data/test/cases/timestamp_test.rb +467 -468
  164. data/test/cases/transaction_callbacks_test.rb +452 -452
  165. data/test/cases/transaction_isolation_test.rb +106 -106
  166. data/test/cases/transactions_test.rb +817 -817
  167. data/test/cases/type/decimal_test.rb +56 -51
  168. data/test/cases/type/integer_test.rb +121 -121
  169. data/test/cases/type/string_test.rb +36 -36
  170. data/test/cases/type/type_map_test.rb +177 -177
  171. data/test/cases/type/unsigned_integer_test.rb +18 -18
  172. data/test/cases/types_test.rb +141 -141
  173. data/test/cases/unconnected_test.rb +33 -33
  174. data/test/cases/validations/association_validation_test.rb +86 -86
  175. data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -84
  176. data/test/cases/validations/i18n_validation_test.rb +90 -90
  177. data/test/cases/validations/length_validation_test.rb +47 -47
  178. data/test/cases/validations/presence_validation_test.rb +68 -68
  179. data/test/cases/validations/uniqueness_validation_test.rb +457 -434
  180. data/test/cases/validations_repair_helper.rb +23 -23
  181. data/test/cases/validations_test.rb +165 -165
  182. data/test/cases/view_test.rb +119 -113
  183. data/test/cases/xml_serialization_test.rb +457 -457
  184. data/test/cases/yaml_serialization_test.rb +126 -86
  185. data/test/config.rb +5 -5
  186. data/test/config.yml +154 -154
  187. data/test/connections/native_ibm_db/connection.rb +43 -43
  188. data/test/fixtures/accounts.yml +29 -29
  189. data/test/fixtures/admin/accounts.yml +2 -2
  190. data/test/fixtures/admin/randomly_named_a9.yml +7 -7
  191. data/test/fixtures/admin/randomly_named_b0.yml +7 -7
  192. data/test/fixtures/admin/users.yml +10 -10
  193. data/test/fixtures/author_addresses.yml +17 -17
  194. data/test/fixtures/author_favorites.yml +3 -3
  195. data/test/fixtures/authors.yml +23 -23
  196. data/test/fixtures/binaries.yml +133 -133
  197. data/test/fixtures/books.yml +11 -11
  198. data/test/fixtures/bulbs.yml +5 -5
  199. data/test/fixtures/cars.yml +9 -9
  200. data/test/fixtures/categories.yml +19 -19
  201. data/test/fixtures/categories/special_categories.yml +9 -9
  202. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -4
  203. data/test/fixtures/categories_ordered.yml +7 -7
  204. data/test/fixtures/categories_posts.yml +31 -31
  205. data/test/fixtures/categorizations.yml +23 -23
  206. data/test/fixtures/clubs.yml +8 -8
  207. data/test/fixtures/collections.yml +3 -3
  208. data/test/fixtures/colleges.yml +3 -3
  209. data/test/fixtures/comments.yml +65 -65
  210. data/test/fixtures/companies.yml +67 -67
  211. data/test/fixtures/computers.yml +10 -10
  212. data/test/fixtures/courses.yml +8 -8
  213. data/test/fixtures/customers.yml +25 -25
  214. data/test/fixtures/dashboards.yml +6 -6
  215. data/test/fixtures/developers.yml +21 -21
  216. data/test/fixtures/developers_projects.yml +16 -16
  217. data/test/fixtures/dog_lovers.yml +7 -7
  218. data/test/fixtures/dogs.yml +4 -4
  219. data/test/fixtures/doubloons.yml +3 -3
  220. data/test/fixtures/edges.yml +5 -5
  221. data/test/fixtures/entrants.yml +14 -14
  222. data/test/fixtures/essays.yml +6 -6
  223. data/test/fixtures/faces.yml +11 -11
  224. data/test/fixtures/fk_test_has_fk.yml +3 -3
  225. data/test/fixtures/fk_test_has_pk.yml +1 -1
  226. data/test/fixtures/friendships.yml +4 -4
  227. data/test/fixtures/funny_jokes.yml +10 -10
  228. data/test/fixtures/interests.yml +33 -33
  229. data/test/fixtures/items.yml +3 -3
  230. data/test/fixtures/jobs.yml +7 -7
  231. data/test/fixtures/legacy_things.yml +3 -3
  232. data/test/fixtures/mateys.yml +4 -4
  233. data/test/fixtures/member_details.yml +8 -8
  234. data/test/fixtures/member_types.yml +6 -6
  235. data/test/fixtures/members.yml +11 -11
  236. data/test/fixtures/memberships.yml +34 -34
  237. data/test/fixtures/men.yml +5 -5
  238. data/test/fixtures/minimalistics.yml +2 -2
  239. data/test/fixtures/minivans.yml +5 -5
  240. data/test/fixtures/mixed_case_monkeys.yml +6 -6
  241. data/test/fixtures/mixins.yml +29 -29
  242. data/test/fixtures/movies.yml +7 -7
  243. data/test/fixtures/naked/csv/accounts.csv +1 -1
  244. data/test/fixtures/naked/yml/accounts.yml +1 -1
  245. data/test/fixtures/naked/yml/companies.yml +1 -1
  246. data/test/fixtures/naked/yml/courses.yml +1 -1
  247. data/test/fixtures/organizations.yml +5 -5
  248. data/test/fixtures/other_topics.yml +42 -42
  249. data/test/fixtures/owners.yml +9 -9
  250. data/test/fixtures/parrots.yml +27 -27
  251. data/test/fixtures/parrots_pirates.yml +7 -7
  252. data/test/fixtures/people.yml +24 -24
  253. data/test/fixtures/peoples_treasures.yml +3 -3
  254. data/test/fixtures/pets.yml +19 -19
  255. data/test/fixtures/pirates.yml +12 -12
  256. data/test/fixtures/posts.yml +80 -80
  257. data/test/fixtures/price_estimates.yml +7 -7
  258. data/test/fixtures/products.yml +4 -4
  259. data/test/fixtures/projects.yml +7 -7
  260. data/test/fixtures/randomly_named_a9.yml +7 -7
  261. data/test/fixtures/ratings.yml +14 -14
  262. data/test/fixtures/readers.yml +11 -11
  263. data/test/fixtures/references.yml +17 -17
  264. data/test/fixtures/reserved_words/distinct.yml +5 -5
  265. data/test/fixtures/reserved_words/distinct_select.yml +11 -11
  266. data/test/fixtures/reserved_words/group.yml +14 -14
  267. data/test/fixtures/reserved_words/select.yml +8 -8
  268. data/test/fixtures/reserved_words/values.yml +7 -7
  269. data/test/fixtures/ships.yml +6 -6
  270. data/test/fixtures/speedometers.yml +8 -8
  271. data/test/fixtures/sponsors.yml +12 -12
  272. data/test/fixtures/string_key_objects.yml +7 -7
  273. data/test/fixtures/subscribers.yml +10 -10
  274. data/test/fixtures/subscriptions.yml +12 -12
  275. data/test/fixtures/taggings.yml +78 -78
  276. data/test/fixtures/tags.yml +11 -11
  277. data/test/fixtures/tasks.yml +7 -7
  278. data/test/fixtures/teapots.yml +3 -3
  279. data/test/fixtures/to_be_linked/accounts.yml +2 -2
  280. data/test/fixtures/to_be_linked/users.yml +10 -10
  281. data/test/fixtures/topics.yml +49 -49
  282. data/test/fixtures/toys.yml +14 -14
  283. data/test/fixtures/traffic_lights.yml +9 -9
  284. data/test/fixtures/treasures.yml +10 -10
  285. data/test/fixtures/uuid_children.yml +3 -3
  286. data/test/fixtures/uuid_parents.yml +2 -2
  287. data/test/fixtures/variants.yml +4 -4
  288. data/test/fixtures/vegetables.yml +19 -19
  289. data/test/fixtures/vertices.yml +3 -3
  290. data/test/fixtures/warehouse_things.yml +2 -2
  291. data/test/fixtures/zines.yml +5 -5
  292. data/test/ibm_db_test.rb +24 -24
  293. data/test/migrations/10_urban/9_add_expressions.rb +11 -11
  294. data/test/migrations/decimal/1_give_me_big_numbers.rb +15 -15
  295. data/test/migrations/magic/1_currencies_have_symbols.rb +12 -12
  296. data/test/migrations/missing/1000_people_have_middle_names.rb +8 -8
  297. data/test/migrations/missing/1_people_have_last_names.rb +8 -8
  298. data/test/migrations/missing/3_we_need_reminders.rb +11 -11
  299. data/test/migrations/missing/4_innocent_jointable.rb +11 -11
  300. data/test/migrations/rename/1_we_need_things.rb +10 -10
  301. data/test/migrations/rename/2_rename_things.rb +8 -8
  302. data/test/migrations/to_copy/1_people_have_hobbies.rb +9 -9
  303. data/test/migrations/to_copy/2_people_have_descriptions.rb +9 -9
  304. data/test/migrations/to_copy2/1_create_articles.rb +7 -7
  305. data/test/migrations/to_copy2/2_create_comments.rb +7 -7
  306. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -9
  307. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -9
  308. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -9
  309. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -7
  310. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -7
  311. data/test/migrations/valid/1_valid_people_have_last_names.rb +9 -9
  312. data/test/migrations/valid/2_we_need_reminders.rb +11 -11
  313. data/test/migrations/valid/3_innocent_jointable.rb +11 -11
  314. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -9
  315. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +11 -11
  316. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +11 -11
  317. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -9
  318. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -12
  319. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -12
  320. data/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -8
  321. data/test/models/admin.rb +4 -4
  322. data/test/models/admin/account.rb +2 -2
  323. data/test/models/admin/randomly_named_c1.rb +3 -3
  324. data/test/models/admin/user.rb +40 -40
  325. data/test/models/aircraft.rb +4 -4
  326. data/test/models/arunit2_model.rb +3 -3
  327. data/test/models/author.rb +212 -212
  328. data/test/models/auto_id.rb +4 -4
  329. data/test/models/autoloadable/extra_firm.rb +2 -2
  330. data/test/models/binary.rb +1 -1
  331. data/test/models/bird.rb +12 -12
  332. data/test/models/book.rb +18 -18
  333. data/test/models/boolean.rb +2 -2
  334. data/test/models/bulb.rb +51 -51
  335. data/test/models/cake_designer.rb +3 -3
  336. data/test/models/car.rb +26 -26
  337. data/test/models/carrier.rb +2 -2
  338. data/test/models/categorization.rb +19 -19
  339. data/test/models/category.rb +35 -35
  340. data/test/models/chef.rb +7 -3
  341. data/test/models/citation.rb +3 -3
  342. data/test/models/club.rb +23 -23
  343. data/test/models/college.rb +10 -10
  344. data/test/models/column.rb +3 -3
  345. data/test/models/column_name.rb +3 -3
  346. data/test/models/comment.rb +64 -64
  347. data/test/models/company.rb +228 -225
  348. data/test/models/company_in_module.rb +98 -98
  349. data/test/models/computer.rb +3 -3
  350. data/test/models/contact.rb +41 -41
  351. data/test/models/contract.rb +20 -20
  352. data/test/models/country.rb +7 -7
  353. data/test/models/course.rb +6 -6
  354. data/test/models/customer.rb +77 -77
  355. data/test/models/customer_carrier.rb +14 -14
  356. data/test/models/dashboard.rb +3 -3
  357. data/test/models/default.rb +2 -2
  358. data/test/models/department.rb +4 -4
  359. data/test/models/developer.rb +255 -252
  360. data/test/models/dog.rb +5 -5
  361. data/test/models/dog_lover.rb +5 -5
  362. data/test/models/doubloon.rb +12 -12
  363. data/test/models/drink_designer.rb +3 -3
  364. data/test/models/edge.rb +5 -5
  365. data/test/models/electron.rb +5 -5
  366. data/test/models/engine.rb +4 -4
  367. data/test/models/entrant.rb +3 -3
  368. data/test/models/essay.rb +5 -5
  369. data/test/models/event.rb +2 -2
  370. data/test/models/eye.rb +37 -37
  371. data/test/models/face.rb +9 -9
  372. data/test/models/friendship.rb +6 -6
  373. data/test/models/guid.rb +1 -1
  374. data/test/models/hotel.rb +9 -6
  375. data/test/models/image.rb +3 -3
  376. data/test/models/interest.rb +5 -5
  377. data/test/models/invoice.rb +4 -4
  378. data/test/models/item.rb +7 -7
  379. data/test/models/job.rb +7 -7
  380. data/test/models/joke.rb +7 -7
  381. data/test/models/keyboard.rb +3 -3
  382. data/test/models/legacy_thing.rb +3 -3
  383. data/test/models/lesson.rb +11 -11
  384. data/test/models/line_item.rb +3 -3
  385. data/test/models/liquid.rb +4 -4
  386. data/test/models/man.rb +11 -11
  387. data/test/models/matey.rb +4 -4
  388. data/test/models/member.rb +41 -41
  389. data/test/models/member_detail.rb +7 -7
  390. data/test/models/member_type.rb +3 -3
  391. data/test/models/membership.rb +35 -35
  392. data/test/models/minimalistic.rb +2 -2
  393. data/test/models/minivan.rb +9 -9
  394. data/test/models/mixed_case_monkey.rb +3 -3
  395. data/test/models/molecule.rb +6 -6
  396. data/test/models/movie.rb +5 -5
  397. data/test/models/order.rb +4 -4
  398. data/test/models/organization.rb +14 -14
  399. data/test/models/owner.rb +34 -34
  400. data/test/models/parrot.rb +29 -29
  401. data/test/models/person.rb +143 -143
  402. data/test/models/personal_legacy_thing.rb +4 -4
  403. data/test/models/pet.rb +15 -15
  404. data/test/models/pirate.rb +92 -92
  405. data/test/models/possession.rb +3 -3
  406. data/test/models/post.rb +264 -264
  407. data/test/models/price_estimate.rb +4 -4
  408. data/test/models/professor.rb +5 -5
  409. data/test/models/project.rb +31 -29
  410. data/test/models/publisher.rb +2 -2
  411. data/test/models/publisher/article.rb +4 -4
  412. data/test/models/publisher/magazine.rb +3 -3
  413. data/test/models/randomly_named_c1.rb +3 -3
  414. data/test/models/rating.rb +4 -4
  415. data/test/models/reader.rb +23 -23
  416. data/test/models/record.rb +2 -2
  417. data/test/models/reference.rb +22 -22
  418. data/test/models/reply.rb +61 -61
  419. data/test/models/ship.rb +33 -33
  420. data/test/models/ship_part.rb +7 -7
  421. data/test/models/shop.rb +17 -17
  422. data/test/models/shop_account.rb +6 -6
  423. data/test/models/speedometer.rb +6 -6
  424. data/test/models/sponsor.rb +7 -7
  425. data/test/models/string_key_object.rb +3 -3
  426. data/test/models/student.rb +4 -4
  427. data/test/models/subject.rb +16 -16
  428. data/test/models/subscriber.rb +8 -8
  429. data/test/models/subscription.rb +4 -4
  430. data/test/models/tag.rb +7 -7
  431. data/test/models/tagging.rb +13 -13
  432. data/test/models/task.rb +5 -5
  433. data/test/models/topic.rb +124 -124
  434. data/test/models/toy.rb +6 -6
  435. data/test/models/traffic_light.rb +4 -4
  436. data/test/models/treasure.rb +14 -14
  437. data/test/models/treaty.rb +7 -7
  438. data/test/models/tyre.rb +11 -11
  439. data/test/models/uuid_child.rb +3 -3
  440. data/test/models/uuid_parent.rb +3 -3
  441. data/test/models/vegetables.rb +24 -24
  442. data/test/models/vehicle.rb +6 -6
  443. data/test/models/vertex.rb +9 -9
  444. data/test/models/warehouse_thing.rb +5 -5
  445. data/test/models/wheel.rb +3 -3
  446. data/test/models/without_table.rb +3 -3
  447. data/test/models/zine.rb +3 -3
  448. data/test/schema/mysql2_specific_schema.rb +58 -58
  449. data/test/schema/mysql_specific_schema.rb +70 -70
  450. data/test/schema/oracle_specific_schema.rb +43 -43
  451. data/test/schema/postgresql_specific_schema.rb +202 -202
  452. data/test/schema/schema.rb +952 -938
  453. data/test/schema/sqlite_specific_schema.rb +21 -21
  454. data/test/support/config.rb +43 -43
  455. data/test/support/connection.rb +22 -22
  456. data/test/support/connection_helper.rb +14 -14
  457. data/test/support/ddl_helper.rb +8 -8
  458. data/test/support/schema_dumping_helper.rb +20 -20
  459. metadata +3 -3
@@ -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
@@ -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
@@ -1 +1 @@
1
- %00
1
+ %00
@@ -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 test_indexes
42
- idx_name = "accounts_idx"
43
-
44
- if @connection.respond_to?(:indexes)
45
- indexes = @connection.indexes("accounts")
46
- assert indexes.empty?
47
-
48
- @connection.add_index :accounts, :firm_id, :name => idx_name
49
- indexes = @connection.indexes("accounts")
50
- assert_equal "accounts", indexes.first.table
51
- assert_equal idx_name, indexes.first.name
52
- assert !indexes.first.unique
53
- assert_equal ["firm_id"], indexes.first.columns
54
- else
55
- warn "#{@connection.class} does not respond to #indexes"
56
- end
57
-
58
- ensure
59
- @connection.remove_index(:accounts, :name => idx_name) rescue nil
60
- end
61
-
62
- def test_current_database
63
- if @connection.respond_to?(:current_database)
64
- assert_equal ARTest.connection_config['arunit']['database'], @connection.current_database
65
- end
66
- end
67
-
68
- if current_adapter?(:MysqlAdapter)
69
- def test_charset
70
- assert_not_nil @connection.charset
71
- assert_not_equal 'character_set_database', @connection.charset
72
- assert_equal @connection.show_variable('character_set_database'), @connection.charset
73
- end
74
-
75
- def test_collation
76
- assert_not_nil @connection.collation
77
- assert_not_equal 'collation_database', @connection.collation
78
- assert_equal @connection.show_variable('collation_database'), @connection.collation
79
- end
80
-
81
- def test_show_nonexistent_variable_returns_nil
82
- assert_nil @connection.show_variable('foo_bar_baz')
83
- end
84
-
85
- def test_not_specifying_database_name_for_cross_database_selects
86
- begin
87
- assert_nothing_raised do
88
- ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations['arunit'].except(:database))
89
-
90
- config = ARTest.connection_config
91
- ActiveRecord::Base.connection.execute(
92
- "SELECT #{config['arunit']['database']}.pirates.*, #{config['arunit2']['database']}.courses.* " \
93
- "FROM #{config['arunit']['database']}.pirates, #{config['arunit2']['database']}.courses"
94
- )
95
- end
96
- ensure
97
- ActiveRecord::Base.establish_connection :arunit
98
- end
99
- end
100
- end
101
-
102
- def test_table_alias
103
- def @connection.test_table_alias_length() 10; end
104
- class << @connection
105
- alias_method :old_table_alias_length, :table_alias_length
106
- alias_method :table_alias_length, :test_table_alias_length
107
- end
108
-
109
- assert_equal 'posts', @connection.table_alias_for('posts')
110
- assert_equal 'posts_comm', @connection.table_alias_for('posts_comments')
111
- assert_equal 'dbo_posts', @connection.table_alias_for('dbo.posts')
112
-
113
- class << @connection
114
- remove_method :table_alias_length
115
- alias_method :table_alias_length, :old_table_alias_length
116
- end
117
- end
118
-
119
- # test resetting sequences in odd tables in PostgreSQL
120
- if ActiveRecord::Base.connection.respond_to?(:reset_pk_sequence!)
121
- require 'models/movie'
122
- require 'models/subscriber'
123
-
124
- def test_reset_empty_table_with_custom_pk
125
- Movie.delete_all
126
- Movie.connection.reset_pk_sequence! 'movies'
127
- assert_equal 1, Movie.create(:name => 'fight club').id
128
- end
129
-
130
- def test_reset_table_with_non_integer_pk
131
- Subscriber.delete_all
132
- Subscriber.connection.reset_pk_sequence! 'subscribers'
133
- sub = Subscriber.new(:name => 'robert drake')
134
- sub.id = 'bob drake'
135
- assert_nothing_raised { sub.save! }
136
- end
137
- end
138
-
139
- def test_uniqueness_violations_are_translated_to_specific_exception
140
- @connection.execute "INSERT INTO subscribers(nick) VALUES('me')"
141
- assert_raises(ActiveRecord::RecordNotUnique) do
142
- @connection.execute "INSERT INTO subscribers(nick) VALUES('me')"
143
- end
144
- end
145
-
146
- unless current_adapter?(:SQLite3Adapter)
147
- def test_foreign_key_violations_are_translated_to_specific_exception
148
- assert_raises(ActiveRecord::InvalidForeignKey) do
149
- # Oracle adapter uses prefetched primary key values from sequence and passes them to connection adapter insert method
150
- if @connection.prefetch_primary_key?
151
- id_value = @connection.next_sequence_value(@connection.default_sequence_name("fk_test_has_fk", "id"))
152
- @connection.execute "INSERT INTO fk_test_has_fk (id, fk_id) VALUES (#{id_value},0)"
153
- else
154
- @connection.execute "INSERT INTO fk_test_has_fk (fk_id) VALUES (0)"
155
- end
156
- end
157
- end
158
-
159
- def test_foreign_key_violations_are_translated_to_specific_exception_with_validate_false
160
- klass_has_fk = Class.new(ActiveRecord::Base) do
161
- self.table_name = 'fk_test_has_fk'
162
- end
163
-
164
- assert_raises(ActiveRecord::InvalidForeignKey) do
165
- has_fk = klass_has_fk.new
166
- has_fk.fk_id = 1231231231
167
- has_fk.save(validate: false)
168
- end
169
- end
170
- end
171
-
172
- def test_disable_referential_integrity
173
- assert_nothing_raised do
174
- @connection.disable_referential_integrity do
175
- # Oracle adapter uses prefetched primary key values from sequence and passes them to connection adapter insert method
176
- if @connection.prefetch_primary_key?
177
- id_value = @connection.next_sequence_value(@connection.default_sequence_name("fk_test_has_fk", "id"))
178
- @connection.execute "INSERT INTO fk_test_has_fk (id, fk_id) VALUES (#{id_value},0)"
179
- else
180
- @connection.execute "INSERT INTO fk_test_has_fk (fk_id) VALUES (0)"
181
- end
182
- # should delete created record as otherwise disable_referential_integrity will try to enable constraints after executed block
183
- # and will fail (at least on Oracle)
184
- @connection.execute "DELETE FROM fk_test_has_fk"
185
- end
186
- end
187
- end
188
-
189
- def test_select_all_always_return_activerecord_result
190
- result = @connection.select_all "SELECT * FROM posts"
191
- assert result.is_a?(ActiveRecord::Result)
192
- end
193
-
194
- def test_select_methods_passing_a_association_relation
195
- author = Author.create!(name: 'john')
196
- Post.create!(author: author, title: 'foo', body: 'bar')
197
- query = author.posts.where(title: 'foo').select(:title)
198
- assert_equal({"title" => "foo"}, @connection.select_one(query.arel, nil, query.bind_values))
199
- assert_equal({"title" => "foo"}, @connection.select_one(query))
200
- assert @connection.select_all(query).is_a?(ActiveRecord::Result)
201
- assert_equal "foo", @connection.select_value(query)
202
- assert_equal ["foo"], @connection.select_values(query)
203
- end
204
-
205
- def test_select_methods_passing_a_relation
206
- Post.create!(title: 'foo', body: 'bar')
207
- query = Post.where(title: 'foo').select(:title)
208
- assert_equal({"title" => "foo"}, @connection.select_one(query.arel, nil, query.bind_values))
209
- assert_equal({"title" => "foo"}, @connection.select_one(query))
210
- assert @connection.select_all(query).is_a?(ActiveRecord::Result)
211
- assert_equal "foo", @connection.select_value(query)
212
- assert_equal ["foo"], @connection.select_values(query)
213
- end
214
-
215
- test "type_to_sql returns a String for unmapped types" do
216
- assert_equal "special_db_type", @connection.type_to_sql(:special_db_type)
217
- end
218
-
219
- unless current_adapter?(:PostgreSQLAdapter)
220
- def test_log_invalid_encoding
221
- assert_raise ActiveRecord::StatementInvalid do
222
- @connection.send :log, "SELECT '?' FROM DUAL" do
223
- raise '?'.force_encoding(Encoding::ASCII_8BIT)
224
- end
225
- end
226
- end
227
- end
228
- end
229
-
230
- class AdapterTestWithoutTransaction < ActiveRecord::TestCase
231
- self.use_transactional_fixtures = false
232
-
233
- class Klass < ActiveRecord::Base
234
- end
235
-
236
- def setup
237
- Klass.establish_connection :arunit
238
- @connection = Klass.connection
239
- end
240
-
241
- teardown do
242
- Klass.remove_connection
243
- end
244
-
245
- unless in_memory_db?
246
- test "transaction state is reset after a reconnect" do
247
- @connection.begin_transaction
248
- assert @connection.transaction_open?
249
- @connection.reconnect!
250
- assert !@connection.transaction_open?
251
- end
252
-
253
- test "transaction state is reset after a disconnect" do
254
- @connection.begin_transaction
255
- assert @connection.transaction_open?
256
- @connection.disconnect!
257
- assert !@connection.transaction_open?
258
- end
259
- end
260
- end
261
- end
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