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
@@ -0,0 +1,472 @@
1
+ require 'cases/helper'
2
+
3
+ module ActiveRecord
4
+ class Migration
5
+ class ChangeSchemaTest < ActiveRecord::TestCase
6
+ attr_reader :connection, :table_name
7
+
8
+ def setup
9
+ super
10
+ @connection = ActiveRecord::Base.connection
11
+ @table_name = :testings
12
+ end
13
+
14
+ teardown do
15
+ connection.drop_table :testings rescue nil
16
+ ActiveRecord::Base.primary_key_prefix_type = nil
17
+ ActiveRecord::Base.clear_cache!
18
+ end
19
+
20
+ def test_create_table_without_id
21
+ testing_table_with_only_foo_attribute do
22
+ assert_equal connection.columns(:testings).size, 1
23
+ end
24
+ end
25
+
26
+ unless current_adapter?(:IBM_DBAdapter)
27
+ # For DB2: Cannot add a primary key to a table with some rows already in it as it violates the unique constraint
28
+ # Secondly GENERATED BY DEFAULT AS IDENTITY cannot be applied in a alter table command.
29
+ # as this will be wrong sql syntax for DB
30
+ def test_add_column_with_primary_key_attribute
31
+ testing_table_with_only_foo_attribute do
32
+ connection.add_column :testings, :id, :primary_key
33
+ assert_equal connection.columns(:testings).size, 2
34
+ end
35
+ end
36
+ end
37
+
38
+ def test_create_table_adds_id
39
+ connection.drop_table :testings rescue nil
40
+ connection.create_table :testings do |t|
41
+ t.column :foo, :string
42
+ end
43
+
44
+ assert_equal %w(id foo), connection.columns(:testings).map(&:name)
45
+ end
46
+
47
+ def test_create_table_with_not_null_column
48
+ connection.drop_table :testings rescue nil
49
+ connection.create_table :testings do |t|
50
+ t.column :foo, :string, :null => false
51
+ end
52
+
53
+ assert_raises(ActiveRecord::StatementInvalid) do
54
+ connection.execute "insert into testings (foo) values (NULL)"
55
+ end
56
+ end
57
+
58
+ def test_create_table_with_defaults
59
+ # MySQL doesn't allow defaults on TEXT or BLOB columns.
60
+ mysql = current_adapter?(:MysqlAdapter, :Mysql2Adapter, :IBM_DBAdapter)
61
+ connection.drop_table :testings rescue nil
62
+ connection.create_table :testings do |t|
63
+ t.column :one, :string, :default => "hello"
64
+ t.column :two, :boolean, :default => true
65
+ t.column :three, :boolean, :default => false
66
+ t.column :four, :integer, :default => 1
67
+ t.column :five, :text, :default => "hello" unless mysql
68
+ end
69
+
70
+ columns = connection.columns(:testings)
71
+ one = columns.detect { |c| c.name == "one" }
72
+ two = columns.detect { |c| c.name == "two" }
73
+ three = columns.detect { |c| c.name == "three" }
74
+ four = columns.detect { |c| c.name == "four" }
75
+ five = columns.detect { |c| c.name == "five" } unless mysql
76
+
77
+ assert_equal "hello", one.default
78
+ assert_equal true, two.type_cast_from_database(two.default)
79
+ assert_equal false, three.type_cast_from_database(three.default)
80
+ assert_equal '1', four.default
81
+ assert_equal "hello", five.default unless mysql
82
+ end
83
+
84
+ if current_adapter?(:PostgreSQLAdapter)
85
+ def test_add_column_with_array
86
+ connection.drop_table :testings rescue nil
87
+ connection.create_table :testings
88
+ connection.add_column :testings, :foo, :string, :array => true
89
+
90
+ columns = connection.columns(:testings)
91
+ array_column = columns.detect { |c| c.name == "foo" }
92
+
93
+ assert array_column.array
94
+ end
95
+
96
+ def test_create_table_with_array_column
97
+ connection.drop_table :testings rescue nil
98
+ connection.create_table :testings do |t|
99
+ t.string :foo, :array => true
100
+ end
101
+
102
+ columns = connection.columns(:testings)
103
+ array_column = columns.detect { |c| c.name == "foo" }
104
+
105
+ assert array_column.array
106
+ end
107
+ end
108
+
109
+ def test_create_table_with_bigint
110
+ connection.drop_table :testings rescue nil
111
+ connection.create_table :testings do |t|
112
+ t.bigint :eight_int
113
+ end
114
+ columns = connection.columns(:testings)
115
+ eight = columns.detect { |c| c.name == "eight_int" }
116
+
117
+ if current_adapter?(:OracleAdapter)
118
+ assert_equal 'NUMBER(19)', eight.sql_type
119
+ elsif current_adapter?(:SQLite3Adapter)
120
+ assert_equal 'bigint', eight.sql_type
121
+ else
122
+ assert_equal :integer, eight.type
123
+ assert_equal 8, eight.limit
124
+ end
125
+ ensure
126
+ connection.drop_table :testings
127
+ end
128
+
129
+ def test_create_table_with_limits
130
+ connection.drop_table :testings rescue nil
131
+ connection.create_table :testings do |t|
132
+ t.column :foo, :string, :limit => 255
133
+
134
+ t.column :default_int, :integer
135
+
136
+ t.column :one_int, :integer, :limit => 1
137
+ t.column :four_int, :integer, :limit => 4
138
+ t.column :eight_int, :integer, :limit => 8
139
+ end
140
+
141
+ columns = connection.columns(:testings)
142
+ foo = columns.detect { |c| c.name == "foo" }
143
+ assert_equal 255, foo.limit
144
+
145
+ default = columns.detect { |c| c.name == "default_int" }
146
+ one = columns.detect { |c| c.name == "one_int" }
147
+ four = columns.detect { |c| c.name == "four_int" }
148
+ eight = columns.detect { |c| c.name == "eight_int" }
149
+
150
+ if current_adapter?(:PostgreSQLAdapter)
151
+ assert_equal 'integer', default.sql_type
152
+ assert_equal 'smallint', one.sql_type
153
+ assert_equal 'integer', four.sql_type
154
+ assert_equal 'bigint', eight.sql_type
155
+ elsif current_adapter?(:MysqlAdapter, :Mysql2Adapter)
156
+ assert_match 'int(11)', default.sql_type
157
+ assert_match 'tinyint', one.sql_type
158
+ assert_match 'int', four.sql_type
159
+ assert_match 'bigint', eight.sql_type
160
+ elsif current_adapter?(:OracleAdapter)
161
+ assert_equal 'NUMBER(38)', default.sql_type
162
+ assert_equal 'NUMBER(1)', one.sql_type
163
+ assert_equal 'NUMBER(4)', four.sql_type
164
+ assert_equal 'NUMBER(8)', eight.sql_type
165
+ end
166
+ end
167
+
168
+ def test_create_table_with_primary_key_prefix_as_table_name_with_underscore
169
+ ActiveRecord::Base.primary_key_prefix_type = :table_name_with_underscore
170
+ connection.drop_table :testings rescue nil
171
+ connection.create_table :testings do |t|
172
+ t.column :foo, :string
173
+ end
174
+
175
+ assert_equal %w(testing_id foo), connection.columns(:testings).map(&:name)
176
+ end
177
+
178
+ def test_create_table_with_primary_key_prefix_as_table_name
179
+ ActiveRecord::Base.primary_key_prefix_type = :table_name
180
+ connection.drop_table :testings rescue nil
181
+ connection.create_table :testings do |t|
182
+ t.column :foo, :string
183
+ end
184
+
185
+ assert_equal %w(testingid foo), connection.columns(:testings).map(&:name)
186
+ end
187
+
188
+ def test_create_table_raises_when_redefining_primary_key_column
189
+
190
+ unless current_adapter?(:IBM_DBAdapter)
191
+ #DB2 instead of ArgumentError exception, thorws Class: <ActiveRecord::StatementInvalid> Message: <"RuntimeError: Failed to execute statement due to: [IBM][CLI Driver][DB2/NT64] SQL0612N \"ID\" is a duplicate name. SQLSTATE=42711\r SQLCODE=-612: CREATE TABLE testings (id INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 10000) PRIMARY KEY, id varchar(255)) ">
192
+ error = assert_raise(ArgumentError) do
193
+ connection.drop_table :testings rescue nil
194
+ connection.create_table :testings do |t|
195
+ t.column :id, :string
196
+ end
197
+ end
198
+ assert_equal "you can't redefine the primary key column 'id'. To define a custom primary key, pass { id: false } to create_table.", error.message
199
+ end
200
+ end
201
+
202
+ def test_create_table_raises_when_redefining_custom_primary_key_column
203
+ connection.drop_table :testings rescue nil
204
+ error = assert_raise(ArgumentError) do
205
+ connection.create_table :testings, primary_key: :testing_id do |t|
206
+ t.column :testing_id, :string
207
+ end
208
+ end
209
+
210
+ assert_equal "you can't redefine the primary key column 'testing_id'. To define a custom primary key, pass { id: false } to create_table.", error.message
211
+ end
212
+
213
+ def test_create_table_with_timestamps_should_create_datetime_columns
214
+ # FIXME: Remove the silence when we change the default `null` behavior
215
+ ActiveSupport::Deprecation.silence do
216
+ connection.drop_table :testings rescue nil
217
+ connection.create_table table_name do |t|
218
+ t.timestamps
219
+ end
220
+ end
221
+ created_columns = connection.columns(table_name)
222
+
223
+ created_at_column = created_columns.detect {|c| c.name == 'created_at' }
224
+ updated_at_column = created_columns.detect {|c| c.name == 'updated_at' }
225
+
226
+ assert created_at_column.null
227
+ assert updated_at_column.null
228
+ end
229
+
230
+ def test_create_table_with_timestamps_should_create_datetime_columns_with_options
231
+ connection.drop_table :testings rescue nil
232
+ connection.create_table table_name do |t|
233
+ t.timestamps :null => false
234
+ end
235
+ created_columns = connection.columns(table_name)
236
+
237
+ created_at_column = created_columns.detect {|c| c.name == 'created_at' }
238
+ updated_at_column = created_columns.detect {|c| c.name == 'updated_at' }
239
+
240
+ assert !created_at_column.null
241
+ assert !updated_at_column.null
242
+ end
243
+
244
+ def test_create_table_without_a_block
245
+ connection.drop_table :testings rescue nil
246
+ connection.create_table table_name
247
+ end
248
+
249
+ # Sybase, and SQLite3 will not allow you to add a NOT NULL
250
+ # column to a table without a default value.
251
+ unless current_adapter?(:SybaseAdapter, :SQLite3Adapter, :IBM_DBAdapter)
252
+ def test_add_column_not_null_without_default
253
+ connection.drop_table :testings rescue nil
254
+ connection.create_table :testings do |t|
255
+ t.column :foo, :string
256
+ end
257
+ connection.add_column :testings, :bar, :string, :null => false
258
+
259
+ assert_raise(ActiveRecord::StatementInvalid) do
260
+ connection.execute "insert into testings (foo, bar) values ('hello', NULL)"
261
+ end
262
+ end
263
+ end
264
+
265
+ def test_add_column_not_null_with_default
266
+ connection.drop_table :testings rescue nil
267
+ connection.create_table :testings do |t|
268
+ t.column :foo, :string
269
+ end
270
+
271
+ con = connection
272
+ connection.enable_identity_insert("testings", true) if current_adapter?(:SybaseAdapter)
273
+ connection.execute "insert into testings (#{con.quote_column_name('id')}, #{con.quote_column_name('foo')}) values (1, 'hello')"
274
+ connection.enable_identity_insert("testings", false) if current_adapter?(:SybaseAdapter)
275
+ assert_nothing_raised {connection.add_column :testings, :bar, :string, :null => false, :default => "default" }
276
+
277
+ assert_raises(ActiveRecord::StatementInvalid) do
278
+ unless current_adapter?(:OpenBaseAdapter)
279
+ connection.execute "insert into testings (#{con.quote_column_name('id')}, #{con.quote_column_name('foo')}, #{con.quote_column_name('bar')}) values (2, 'hello', NULL)"
280
+ else
281
+ connection.insert("INSERT INTO testings (#{con.quote_column_name('id')}, #{con.quote_column_name('foo')}, #{con.quote_column_name('bar')}) VALUES (2, 'hello', NULL)",
282
+ "Testing Insert","id",2)
283
+ end
284
+ end
285
+ end
286
+
287
+ def test_change_column_quotes_column_names
288
+ connection.drop_table :testings rescue nil
289
+ connection.create_table :testings do |t|
290
+ unless current_adapter?(:IBM_DBAdapter)
291
+ t.column :select, :string
292
+ else
293
+ # If no limit specified by default column of length 255 is created, which later cannot be scaled down to 10
294
+ t.column :select, :string, :limit => 5
295
+ end
296
+ end
297
+
298
+ connection.change_column :testings, :select, :string, :limit => 10
299
+
300
+ # Oracle needs primary key value from sequence
301
+ if current_adapter?(:OracleAdapter)
302
+ connection.execute "insert into testings (id, #{connection.quote_column_name('select')}) values (testings_seq.nextval, '7 chars')"
303
+ else
304
+ connection.execute "insert into testings (#{connection.quote_column_name('select')}) values ('7 chars')"
305
+ end
306
+ end
307
+
308
+ def test_keeping_default_and_notnull_constraints_on_change
309
+ connection.drop_table :testings rescue nil
310
+ connection.create_table :testings do |t|
311
+ t.column :title, :string
312
+ end
313
+ person_klass = Class.new(ActiveRecord::Base)
314
+ person_klass.table_name = 'testings'
315
+
316
+ person_klass.connection.add_column "testings", "wealth", :integer, :null => false, :default => 99
317
+ person_klass.reset_column_information
318
+ assert_equal "99", person_klass.columns_hash["wealth"].default
319
+ assert_equal false, person_klass.columns_hash["wealth"].null
320
+ # Oracle needs primary key value from sequence
321
+ if current_adapter?(:OracleAdapter)
322
+ assert_nothing_raised {person_klass.connection.execute("insert into testings (id, title) values (testings_seq.nextval, 'tester')")}
323
+ else
324
+ assert_nothing_raised {person_klass.connection.execute("insert into testings (title) values ('tester')")}
325
+ end
326
+
327
+ # change column default to see that column doesn't lose its not null definition
328
+ person_klass.connection.change_column_default "testings", "wealth", 100
329
+ person_klass.reset_column_information
330
+ assert_equal "100", person_klass.columns_hash["wealth"].default
331
+ assert_equal false, person_klass.columns_hash["wealth"].null
332
+
333
+ if (!current_adapter?(:IBM_DBAdapter))
334
+ # rename column to see that column doesn't lose its not null and/or default definition
335
+ person_klass.connection.rename_column "testings", "wealth", "money"
336
+ person_klass.reset_column_information
337
+ assert_nil person_klass.columns_hash["wealth"]
338
+ assert_equal 100, person_klass.columns_hash["money"].default
339
+ assert_equal false, person_klass.columns_hash["money"].null
340
+ end
341
+
342
+ # change column
343
+ unless current_adapter?(:IBM_DBAdapter)
344
+ person_klass.connection.change_column "testings", "money", :integer, :null => false, :default => 1000
345
+ person_klass.reset_column_information
346
+ assert_equal 1000, person_klass.columns_hash["money"].default
347
+ assert_equal false, person_klass.columns_hash["money"].null
348
+ else
349
+ person_klass.connection.change_column "testings", "wealth", :decimal, :precision => 15, :scale => 1,:null => false, :default => 1000
350
+ person_klass.reset_column_information
351
+ assert_equal "1000", person_klass.columns_hash["wealth"].default
352
+ assert_equal false, person_klass.columns_hash["wealth"].null
353
+ end
354
+
355
+ # change column, make it nullable and clear default
356
+ unless current_adapter?(:IBM_DBAdapter)
357
+ person_klass.connection.change_column "testings", "money", :integer, :null => true, :default => nil
358
+ person_klass.reset_column_information
359
+ assert_nil person_klass.columns_hash["money"].default
360
+ assert_equal true, person_klass.columns_hash["money"].null
361
+ else
362
+ person_klass.connection.change_column "testings", "wealth", :decimal, :precision => 20, :scale => 2, :null => true, :default => nil
363
+ person_klass.reset_column_information
364
+ assert_nil person_klass.columns_hash["wealth"].default
365
+ assert_equal true, person_klass.columns_hash["wealth"].null
366
+ end
367
+
368
+ # change_column_null, make it not nullable and set null values to a default value
369
+ unless current_adapter?(:IBM_DBAdapter)
370
+ person_klass.connection.execute('UPDATE testings SET money = NULL')
371
+ person_klass.connection.change_column_null "testings", "money", false, 2000
372
+ person_klass.reset_column_information
373
+ assert_nil person_klass.columns_hash["money"].default
374
+ assert_equal false, person_klass.columns_hash["money"].null
375
+ assert_equal [2000], Person.connection.select_values("SELECT money FROM testings").map { |s| s.to_i }.sort
376
+ else
377
+ # Trying to set the value of the column wealth to NULL and
378
+ # in the next statement a not null constraint is being applied which is wrong
379
+ #person_klass.connection.execute('UPDATE testings SET money = NULL')
380
+ person_klass.connection.change_column_null "testings", "wealth", false, 2000
381
+ person_klass.reset_column_information
382
+ #assert_nil person_klass.columns_hash["wealth"].default #Setting default to 2000 and expecting nil is nor correct
383
+ assert_not_nil person_klass.columns_hash["wealth"].default
384
+ assert_equal false, person_klass.columns_hash["wealth"].null
385
+ #Changing default does not change the already inserted value. Hence expecting 2000 is wrong.
386
+ #assert_equal [99], Person.connection.select_values("SELECT wealth FROM testings").map { |s| s.to_i }.sort
387
+ assert_equal [99], person_klass.connection.select_values("SELECT wealth FROM testings").map { |s| s.to_i }.sort
388
+ end
389
+ end
390
+
391
+ def test_change_column_null
392
+ testing_table_with_only_foo_attribute do
393
+ notnull_migration = Class.new(ActiveRecord::Migration) do
394
+ def change
395
+ change_column_null :testings, :foo, false
396
+ end
397
+ end
398
+ notnull_migration.new.suppress_messages do
399
+ notnull_migration.migrate(:up)
400
+ assert_equal false, connection.columns(:testings).find{ |c| c.name == "foo"}.null
401
+ notnull_migration.migrate(:down)
402
+ assert connection.columns(:testings).find{ |c| c.name == "foo"}.null
403
+ end
404
+ end
405
+ end
406
+
407
+ def test_column_exists
408
+ connection.drop_table :testings rescue nil
409
+ connection.create_table :testings do |t|
410
+ t.column :foo, :string
411
+ end
412
+
413
+ assert connection.column_exists?(:testings, :foo)
414
+ assert_not connection.column_exists?(:testings, :bar)
415
+ end
416
+
417
+ def test_column_exists_with_type
418
+ connection.drop_table :testings rescue nil
419
+ connection.create_table :testings do |t|
420
+ t.column :foo, :string
421
+ t.column :bar, :decimal, :precision => 8, :scale => 2
422
+ end
423
+
424
+ assert connection.column_exists?(:testings, :foo, :string)
425
+ assert_not connection.column_exists?(:testings, :foo, :integer)
426
+
427
+ assert connection.column_exists?(:testings, :bar, :decimal)
428
+ assert_not connection.column_exists?(:testings, :bar, :integer)
429
+ end
430
+
431
+ def test_column_exists_with_definition
432
+ connection.drop_table :testings rescue nil
433
+ connection.create_table :testings do |t|
434
+ t.column :foo, :string, limit: 100
435
+ t.column :bar, :decimal, precision: 8, scale: 2
436
+ t.column :taggable_id, :integer, null: false
437
+ t.column :taggable_type, :string, default: 'Photo'
438
+ end
439
+
440
+ assert connection.column_exists?(:testings, :foo, :string, limit: 100)
441
+ assert_not connection.column_exists?(:testings, :foo, :string, limit: nil)
442
+ assert connection.column_exists?(:testings, :bar, :decimal, precision: 8, scale: 2)
443
+ assert_not connection.column_exists?(:testings, :bar, :decimal, precision: nil, scale: nil)
444
+ assert connection.column_exists?(:testings, :taggable_id, :integer, null: false)
445
+ assert_not connection.column_exists?(:testings, :taggable_id, :integer, null: true)
446
+ assert connection.column_exists?(:testings, :taggable_type, :string, default: 'Photo')
447
+ assert_not connection.column_exists?(:testings, :taggable_type, :string, default: nil)
448
+ end
449
+
450
+ def test_column_exists_on_table_with_no_options_parameter_supplied
451
+ connection.drop_table :testings rescue nil
452
+ connection.create_table :testings do |t|
453
+ t.string :foo
454
+ end
455
+ connection.change_table :testings do |t|
456
+ assert t.column_exists?(:foo)
457
+ assert !(t.column_exists?(:bar))
458
+ end
459
+ end
460
+
461
+ private
462
+ def testing_table_with_only_foo_attribute
463
+ connection.drop_table :testings rescue nil
464
+ connection.create_table :testings, :id => false do |t|
465
+ t.column :foo, :string
466
+ end
467
+
468
+ yield
469
+ end
470
+ end
471
+ end
472
+ end