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