ibm_db 3.0.4-x86-mingw32 → 3.0.5-x86-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (463) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +4 -1
  3. data/LICENSE +1 -1
  4. data/MANIFEST +14 -14
  5. data/README +225 -225
  6. data/ext/Makefile.nt32 +181 -181
  7. data/ext/Makefile.nt32.191 +212 -212
  8. data/ext/extconf.rb +291 -291
  9. data/ext/ibm_db.c +11887 -11884
  10. data/ext/ruby_ibm_db.h +241 -241
  11. data/ext/ruby_ibm_db_cli.c +866 -866
  12. data/ext/ruby_ibm_db_cli.h +500 -500
  13. data/init.rb +41 -41
  14. data/lib/IBM_DB.rb +27 -27
  15. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +3177 -3177
  16. data/lib/active_record/connection_adapters/ibmdb_adapter.rb +1 -1
  17. data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -328
  18. data/lib/mswin32/ibm_db.rb +122 -122
  19. data/lib/mswin32/rb21x/i386/ibm_db.so +0 -0
  20. data/lib/mswin32/rb22x/i386/ibm_db.so +0 -0
  21. data/lib/mswin32/rb23x/i386/ibm_db.so +0 -0
  22. data/test/active_record/connection_adapters/fake_adapter.rb +46 -46
  23. data/test/assets/example.log +1 -1
  24. data/test/assets/test.txt +1 -1
  25. data/test/cases/adapter_test.rb +276 -261
  26. data/test/cases/aggregations_test.rb +158 -158
  27. data/test/cases/ar_schema_test.rb +161 -161
  28. data/test/cases/associations/association_scope_test.rb +21 -21
  29. data/test/cases/associations/belongs_to_associations_test.rb +1029 -1029
  30. data/test/cases/associations/callbacks_test.rb +192 -192
  31. data/test/cases/associations/cascaded_eager_loading_test.rb +188 -188
  32. data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +26 -26
  33. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -36
  34. data/test/cases/associations/eager_load_nested_include_test.rb +128 -128
  35. data/test/cases/associations/eager_singularization_test.rb +148 -148
  36. data/test/cases/associations/eager_test.rb +1429 -1411
  37. data/test/cases/associations/extension_test.rb +82 -82
  38. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +972 -932
  39. data/test/cases/associations/has_many_associations_test.rb +2182 -2162
  40. data/test/cases/associations/has_many_through_associations_test.rb +1204 -1204
  41. data/test/cases/associations/has_one_associations_test.rb +610 -610
  42. data/test/cases/associations/has_one_through_associations_test.rb +380 -380
  43. data/test/cases/associations/inner_join_association_test.rb +139 -139
  44. data/test/cases/associations/inverse_associations_test.rb +706 -693
  45. data/test/cases/associations/join_model_test.rb +754 -754
  46. data/test/cases/associations/nested_through_associations_test.rb +579 -579
  47. data/test/cases/associations/required_test.rb +82 -82
  48. data/test/cases/associations_test.rb +380 -380
  49. data/test/cases/attribute_decorators_test.rb +125 -125
  50. data/test/cases/attribute_methods/read_test.rb +60 -60
  51. data/test/cases/attribute_methods/serialization_test.rb +29 -29
  52. data/test/cases/attribute_methods_test.rb +952 -952
  53. data/test/cases/attribute_set_test.rb +210 -200
  54. data/test/cases/attribute_test.rb +180 -180
  55. data/test/cases/attributes_test.rb +136 -136
  56. data/test/cases/autosave_association_test.rb +1595 -1595
  57. data/test/cases/base_test.rb +1664 -1638
  58. data/test/cases/batches_test.rb +212 -212
  59. data/test/cases/binary_test.rb +52 -52
  60. data/test/cases/bind_parameter_test.rb +100 -100
  61. data/test/cases/calculations_test.rb +646 -646
  62. data/test/cases/callbacks_test.rb +543 -543
  63. data/test/cases/clone_test.rb +40 -40
  64. data/test/cases/coders/yaml_column_test.rb +63 -63
  65. data/test/cases/column_alias_test.rb +17 -17
  66. data/test/cases/column_definition_test.rb +123 -123
  67. data/test/cases/connection_adapters/adapter_leasing_test.rb +54 -54
  68. data/test/cases/connection_adapters/connection_handler_test.rb +53 -53
  69. data/test/cases/connection_adapters/connection_specification_test.rb +12 -12
  70. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +293 -293
  71. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +65 -65
  72. data/test/cases/connection_adapters/quoting_test.rb +13 -13
  73. data/test/cases/connection_adapters/schema_cache_test.rb +56 -56
  74. data/test/cases/connection_adapters/type_lookup_test.rb +110 -110
  75. data/test/cases/connection_management_test.rb +122 -122
  76. data/test/cases/connection_pool_test.rb +346 -346
  77. data/test/cases/connection_specification/resolver_test.rb +116 -116
  78. data/test/cases/core_test.rb +112 -112
  79. data/test/cases/counter_cache_test.rb +209 -209
  80. data/test/cases/custom_locking_test.rb +17 -17
  81. data/test/cases/database_statements_test.rb +19 -19
  82. data/test/cases/date_time_test.rb +61 -61
  83. data/test/cases/defaults_test.rb +223 -223
  84. data/test/cases/dirty_test.rb +785 -775
  85. data/test/cases/disconnected_test.rb +28 -28
  86. data/test/cases/dup_test.rb +157 -157
  87. data/test/cases/enum_test.rb +290 -290
  88. data/test/cases/explain_subscriber_test.rb +64 -64
  89. data/test/cases/explain_test.rb +76 -76
  90. data/test/cases/finder_respond_to_test.rb +60 -60
  91. data/test/cases/finder_test.rb +1169 -1166
  92. data/test/cases/fixture_set/file_test.rb +138 -138
  93. data/test/cases/fixtures_test.rb +908 -897
  94. data/test/cases/forbidden_attributes_protection_test.rb +99 -99
  95. data/test/cases/habtm_destroy_order_test.rb +61 -61
  96. data/test/cases/helper.rb +210 -210
  97. data/test/cases/hot_compatibility_test.rb +54 -54
  98. data/test/cases/i18n_test.rb +45 -45
  99. data/test/cases/inheritance_test.rb +375 -375
  100. data/test/cases/integration_test.rb +139 -139
  101. data/test/cases/invalid_connection_test.rb +22 -22
  102. data/test/cases/invalid_date_test.rb +32 -32
  103. data/test/cases/invertible_migration_test.rb +295 -295
  104. data/test/cases/json_serialization_test.rb +302 -302
  105. data/test/cases/locking_test.rb +477 -477
  106. data/test/cases/log_subscriber_test.rb +136 -136
  107. data/test/cases/migration/change_schema_test - Copy.rb +448 -448
  108. data/test/cases/migration/change_schema_test.rb +512 -472
  109. data/test/cases/migration/change_table_test.rb +224 -224
  110. data/test/cases/migration/column_attributes_test.rb +192 -192
  111. data/test/cases/migration/column_positioning_test.rb +56 -56
  112. data/test/cases/migration/columns_test.rb +304 -304
  113. data/test/cases/migration/command_recorder_test.rb +305 -305
  114. data/test/cases/migration/create_join_table_test.rb +148 -148
  115. data/test/cases/migration/foreign_key_test - Changed.rb +325 -325
  116. data/test/cases/migration/foreign_key_test.rb +328 -360
  117. data/test/cases/migration/helper.rb +39 -39
  118. data/test/cases/migration/index_test.rb +216 -216
  119. data/test/cases/migration/logger_test.rb +36 -36
  120. data/test/cases/migration/pending_migrations_test.rb +53 -53
  121. data/test/cases/migration/references_foreign_key_test.rb +169 -214
  122. data/test/cases/migration/references_index_test.rb +101 -101
  123. data/test/cases/migration/references_statements_test.rb +116 -116
  124. data/test/cases/migration/rename_table_test.rb +93 -93
  125. data/test/cases/migration/table_and_index_test.rb +24 -24
  126. data/test/cases/migration_test.rb +959 -959
  127. data/test/cases/migrator_test.rb +388 -388
  128. data/test/cases/mixin_test.rb +70 -70
  129. data/test/cases/modules_test.rb +173 -173
  130. data/test/cases/multiparameter_attributes_test.rb +350 -350
  131. data/test/cases/multiple_db_test.rb +115 -115
  132. data/test/cases/nested_attributes_test.rb +1070 -1057
  133. data/test/cases/nested_attributes_with_callbacks_test.rb +144 -144
  134. data/test/cases/persistence_test.rb +909 -909
  135. data/test/cases/pooled_connections_test.rb +81 -81
  136. data/test/cases/primary_keys_test.rb +237 -237
  137. data/test/cases/query_cache_test.rb +326 -326
  138. data/test/cases/quoting_test.rb +156 -156
  139. data/test/cases/readonly_test.rb +118 -118
  140. data/test/cases/reaper_test.rb +85 -85
  141. data/test/cases/reflection_test.rb +463 -454
  142. data/test/cases/relation/delegation_test.rb +68 -68
  143. data/test/cases/relation/merging_test.rb +161 -161
  144. data/test/cases/relation/mutation_test.rb +165 -165
  145. data/test/cases/relation/predicate_builder_test.rb +14 -14
  146. data/test/cases/relation/where_chain_test.rb +181 -181
  147. data/test/cases/relation/where_test.rb +300 -300
  148. data/test/cases/relation/where_test2.rb +36 -36
  149. data/test/cases/relation_test.rb +319 -297
  150. data/test/cases/relations_test.rb +1815 -1815
  151. data/test/cases/reload_models_test.rb +22 -22
  152. data/test/cases/result_test.rb +80 -80
  153. data/test/cases/sanitize_test.rb +83 -83
  154. data/test/cases/schema_dumper_test.rb +463 -463
  155. data/test/cases/scoping/default_scoping_test.rb +454 -454
  156. data/test/cases/scoping/named_scoping_test.rb +524 -524
  157. data/test/cases/scoping/relation_scoping_test.rb +357 -357
  158. data/test/cases/serialization_test.rb +104 -104
  159. data/test/cases/serialized_attribute_test.rb +277 -277
  160. data/test/cases/statement_cache_test.rb +98 -98
  161. data/test/cases/store_test.rb +194 -194
  162. data/test/cases/tasks/database_tasks_test.rb +398 -396
  163. data/test/cases/tasks/mysql_rake_test.rb +324 -311
  164. data/test/cases/tasks/postgresql_rake_test.rb +250 -245
  165. data/test/cases/tasks/sqlite_rake_test.rb +193 -193
  166. data/test/cases/test_case.rb +123 -123
  167. data/test/cases/timestamp_test.rb +467 -468
  168. data/test/cases/transaction_callbacks_test.rb +452 -452
  169. data/test/cases/transaction_isolation_test.rb +106 -106
  170. data/test/cases/transactions_test.rb +817 -817
  171. data/test/cases/type/decimal_test.rb +56 -51
  172. data/test/cases/type/integer_test.rb +121 -121
  173. data/test/cases/type/string_test.rb +36 -36
  174. data/test/cases/type/type_map_test.rb +177 -177
  175. data/test/cases/type/unsigned_integer_test.rb +18 -18
  176. data/test/cases/types_test.rb +141 -141
  177. data/test/cases/unconnected_test.rb +33 -33
  178. data/test/cases/validations/association_validation_test.rb +86 -86
  179. data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -84
  180. data/test/cases/validations/i18n_validation_test.rb +90 -90
  181. data/test/cases/validations/length_validation_test.rb +47 -47
  182. data/test/cases/validations/presence_validation_test.rb +68 -68
  183. data/test/cases/validations/uniqueness_validation_test.rb +457 -434
  184. data/test/cases/validations_repair_helper.rb +23 -23
  185. data/test/cases/validations_test.rb +165 -165
  186. data/test/cases/view_test.rb +119 -113
  187. data/test/cases/xml_serialization_test.rb +457 -457
  188. data/test/cases/yaml_serialization_test.rb +126 -86
  189. data/test/config.rb +5 -5
  190. data/test/config.yml +154 -154
  191. data/test/connections/native_ibm_db/connection.rb +43 -43
  192. data/test/fixtures/accounts.yml +29 -29
  193. data/test/fixtures/admin/accounts.yml +2 -2
  194. data/test/fixtures/admin/randomly_named_a9.yml +7 -7
  195. data/test/fixtures/admin/randomly_named_b0.yml +7 -7
  196. data/test/fixtures/admin/users.yml +10 -10
  197. data/test/fixtures/author_addresses.yml +17 -17
  198. data/test/fixtures/author_favorites.yml +3 -3
  199. data/test/fixtures/authors.yml +23 -23
  200. data/test/fixtures/binaries.yml +133 -133
  201. data/test/fixtures/books.yml +11 -11
  202. data/test/fixtures/bulbs.yml +5 -5
  203. data/test/fixtures/cars.yml +9 -9
  204. data/test/fixtures/categories.yml +19 -19
  205. data/test/fixtures/categories/special_categories.yml +9 -9
  206. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -4
  207. data/test/fixtures/categories_ordered.yml +7 -7
  208. data/test/fixtures/categories_posts.yml +31 -31
  209. data/test/fixtures/categorizations.yml +23 -23
  210. data/test/fixtures/clubs.yml +8 -8
  211. data/test/fixtures/collections.yml +3 -3
  212. data/test/fixtures/colleges.yml +3 -3
  213. data/test/fixtures/comments.yml +65 -65
  214. data/test/fixtures/companies.yml +67 -67
  215. data/test/fixtures/computers.yml +10 -10
  216. data/test/fixtures/courses.yml +8 -8
  217. data/test/fixtures/customers.yml +25 -25
  218. data/test/fixtures/dashboards.yml +6 -6
  219. data/test/fixtures/developers.yml +21 -21
  220. data/test/fixtures/developers_projects.yml +16 -16
  221. data/test/fixtures/dog_lovers.yml +7 -7
  222. data/test/fixtures/dogs.yml +4 -4
  223. data/test/fixtures/doubloons.yml +3 -3
  224. data/test/fixtures/edges.yml +5 -5
  225. data/test/fixtures/entrants.yml +14 -14
  226. data/test/fixtures/essays.yml +6 -6
  227. data/test/fixtures/faces.yml +11 -11
  228. data/test/fixtures/fk_test_has_fk.yml +3 -3
  229. data/test/fixtures/fk_test_has_pk.yml +1 -1
  230. data/test/fixtures/friendships.yml +4 -4
  231. data/test/fixtures/funny_jokes.yml +10 -10
  232. data/test/fixtures/interests.yml +33 -33
  233. data/test/fixtures/items.yml +3 -3
  234. data/test/fixtures/jobs.yml +7 -7
  235. data/test/fixtures/legacy_things.yml +3 -3
  236. data/test/fixtures/mateys.yml +4 -4
  237. data/test/fixtures/member_details.yml +8 -8
  238. data/test/fixtures/member_types.yml +6 -6
  239. data/test/fixtures/members.yml +11 -11
  240. data/test/fixtures/memberships.yml +34 -34
  241. data/test/fixtures/men.yml +5 -5
  242. data/test/fixtures/minimalistics.yml +2 -2
  243. data/test/fixtures/minivans.yml +5 -5
  244. data/test/fixtures/mixed_case_monkeys.yml +6 -6
  245. data/test/fixtures/mixins.yml +29 -29
  246. data/test/fixtures/movies.yml +7 -7
  247. data/test/fixtures/naked/csv/accounts.csv +1 -1
  248. data/test/fixtures/naked/yml/accounts.yml +1 -1
  249. data/test/fixtures/naked/yml/companies.yml +1 -1
  250. data/test/fixtures/naked/yml/courses.yml +1 -1
  251. data/test/fixtures/organizations.yml +5 -5
  252. data/test/fixtures/other_topics.yml +42 -42
  253. data/test/fixtures/owners.yml +9 -9
  254. data/test/fixtures/parrots.yml +27 -27
  255. data/test/fixtures/parrots_pirates.yml +7 -7
  256. data/test/fixtures/people.yml +24 -24
  257. data/test/fixtures/peoples_treasures.yml +3 -3
  258. data/test/fixtures/pets.yml +19 -19
  259. data/test/fixtures/pirates.yml +12 -12
  260. data/test/fixtures/posts.yml +80 -80
  261. data/test/fixtures/price_estimates.yml +7 -7
  262. data/test/fixtures/products.yml +4 -4
  263. data/test/fixtures/projects.yml +7 -7
  264. data/test/fixtures/randomly_named_a9.yml +7 -7
  265. data/test/fixtures/ratings.yml +14 -14
  266. data/test/fixtures/readers.yml +11 -11
  267. data/test/fixtures/references.yml +17 -17
  268. data/test/fixtures/reserved_words/distinct.yml +5 -5
  269. data/test/fixtures/reserved_words/distinct_select.yml +11 -11
  270. data/test/fixtures/reserved_words/group.yml +14 -14
  271. data/test/fixtures/reserved_words/select.yml +8 -8
  272. data/test/fixtures/reserved_words/values.yml +7 -7
  273. data/test/fixtures/ships.yml +6 -6
  274. data/test/fixtures/speedometers.yml +8 -8
  275. data/test/fixtures/sponsors.yml +12 -12
  276. data/test/fixtures/string_key_objects.yml +7 -7
  277. data/test/fixtures/subscribers.yml +10 -10
  278. data/test/fixtures/subscriptions.yml +12 -12
  279. data/test/fixtures/taggings.yml +78 -78
  280. data/test/fixtures/tags.yml +11 -11
  281. data/test/fixtures/tasks.yml +7 -7
  282. data/test/fixtures/teapots.yml +3 -3
  283. data/test/fixtures/to_be_linked/accounts.yml +2 -2
  284. data/test/fixtures/to_be_linked/users.yml +10 -10
  285. data/test/fixtures/topics.yml +49 -49
  286. data/test/fixtures/toys.yml +14 -14
  287. data/test/fixtures/traffic_lights.yml +9 -9
  288. data/test/fixtures/treasures.yml +10 -10
  289. data/test/fixtures/uuid_children.yml +3 -3
  290. data/test/fixtures/uuid_parents.yml +2 -2
  291. data/test/fixtures/variants.yml +4 -4
  292. data/test/fixtures/vegetables.yml +19 -19
  293. data/test/fixtures/vertices.yml +3 -3
  294. data/test/fixtures/warehouse_things.yml +2 -2
  295. data/test/fixtures/zines.yml +5 -5
  296. data/test/ibm_db_test.rb +24 -24
  297. data/test/migrations/10_urban/9_add_expressions.rb +11 -11
  298. data/test/migrations/decimal/1_give_me_big_numbers.rb +15 -15
  299. data/test/migrations/magic/1_currencies_have_symbols.rb +12 -12
  300. data/test/migrations/missing/1000_people_have_middle_names.rb +8 -8
  301. data/test/migrations/missing/1_people_have_last_names.rb +8 -8
  302. data/test/migrations/missing/3_we_need_reminders.rb +11 -11
  303. data/test/migrations/missing/4_innocent_jointable.rb +11 -11
  304. data/test/migrations/rename/1_we_need_things.rb +10 -10
  305. data/test/migrations/rename/2_rename_things.rb +8 -8
  306. data/test/migrations/to_copy/1_people_have_hobbies.rb +9 -9
  307. data/test/migrations/to_copy/2_people_have_descriptions.rb +9 -9
  308. data/test/migrations/to_copy2/1_create_articles.rb +7 -7
  309. data/test/migrations/to_copy2/2_create_comments.rb +7 -7
  310. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -9
  311. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -9
  312. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -9
  313. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -7
  314. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -7
  315. data/test/migrations/valid/1_valid_people_have_last_names.rb +9 -9
  316. data/test/migrations/valid/2_we_need_reminders.rb +11 -11
  317. data/test/migrations/valid/3_innocent_jointable.rb +11 -11
  318. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -9
  319. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +11 -11
  320. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +11 -11
  321. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -9
  322. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -12
  323. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -12
  324. data/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -8
  325. data/test/models/admin.rb +4 -4
  326. data/test/models/admin/account.rb +2 -2
  327. data/test/models/admin/randomly_named_c1.rb +3 -3
  328. data/test/models/admin/user.rb +40 -40
  329. data/test/models/aircraft.rb +4 -4
  330. data/test/models/arunit2_model.rb +3 -3
  331. data/test/models/author.rb +212 -212
  332. data/test/models/auto_id.rb +4 -4
  333. data/test/models/autoloadable/extra_firm.rb +2 -2
  334. data/test/models/binary.rb +1 -1
  335. data/test/models/bird.rb +12 -12
  336. data/test/models/book.rb +18 -18
  337. data/test/models/boolean.rb +2 -2
  338. data/test/models/bulb.rb +51 -51
  339. data/test/models/cake_designer.rb +3 -3
  340. data/test/models/car.rb +26 -26
  341. data/test/models/carrier.rb +2 -2
  342. data/test/models/categorization.rb +19 -19
  343. data/test/models/category.rb +35 -35
  344. data/test/models/chef.rb +7 -3
  345. data/test/models/citation.rb +3 -3
  346. data/test/models/club.rb +23 -23
  347. data/test/models/college.rb +10 -10
  348. data/test/models/column.rb +3 -3
  349. data/test/models/column_name.rb +3 -3
  350. data/test/models/comment.rb +64 -64
  351. data/test/models/company.rb +228 -225
  352. data/test/models/company_in_module.rb +98 -98
  353. data/test/models/computer.rb +3 -3
  354. data/test/models/contact.rb +41 -41
  355. data/test/models/contract.rb +20 -20
  356. data/test/models/country.rb +7 -7
  357. data/test/models/course.rb +6 -6
  358. data/test/models/customer.rb +77 -77
  359. data/test/models/customer_carrier.rb +14 -14
  360. data/test/models/dashboard.rb +3 -3
  361. data/test/models/default.rb +2 -2
  362. data/test/models/department.rb +4 -4
  363. data/test/models/developer.rb +255 -252
  364. data/test/models/dog.rb +5 -5
  365. data/test/models/dog_lover.rb +5 -5
  366. data/test/models/doubloon.rb +12 -12
  367. data/test/models/drink_designer.rb +3 -3
  368. data/test/models/edge.rb +5 -5
  369. data/test/models/electron.rb +5 -5
  370. data/test/models/engine.rb +4 -4
  371. data/test/models/entrant.rb +3 -3
  372. data/test/models/essay.rb +5 -5
  373. data/test/models/event.rb +2 -2
  374. data/test/models/eye.rb +37 -37
  375. data/test/models/face.rb +9 -9
  376. data/test/models/friendship.rb +6 -6
  377. data/test/models/guid.rb +1 -1
  378. data/test/models/hotel.rb +9 -6
  379. data/test/models/image.rb +3 -3
  380. data/test/models/interest.rb +5 -5
  381. data/test/models/invoice.rb +4 -4
  382. data/test/models/item.rb +7 -7
  383. data/test/models/job.rb +7 -7
  384. data/test/models/joke.rb +7 -7
  385. data/test/models/keyboard.rb +3 -3
  386. data/test/models/legacy_thing.rb +3 -3
  387. data/test/models/lesson.rb +11 -11
  388. data/test/models/line_item.rb +3 -3
  389. data/test/models/liquid.rb +4 -4
  390. data/test/models/man.rb +11 -11
  391. data/test/models/matey.rb +4 -4
  392. data/test/models/member.rb +41 -41
  393. data/test/models/member_detail.rb +7 -7
  394. data/test/models/member_type.rb +3 -3
  395. data/test/models/membership.rb +35 -35
  396. data/test/models/minimalistic.rb +2 -2
  397. data/test/models/minivan.rb +9 -9
  398. data/test/models/mixed_case_monkey.rb +3 -3
  399. data/test/models/molecule.rb +6 -6
  400. data/test/models/movie.rb +5 -5
  401. data/test/models/order.rb +4 -4
  402. data/test/models/organization.rb +14 -14
  403. data/test/models/owner.rb +34 -34
  404. data/test/models/parrot.rb +29 -29
  405. data/test/models/person.rb +143 -143
  406. data/test/models/personal_legacy_thing.rb +4 -4
  407. data/test/models/pet.rb +15 -15
  408. data/test/models/pirate.rb +92 -92
  409. data/test/models/possession.rb +3 -3
  410. data/test/models/post.rb +264 -264
  411. data/test/models/price_estimate.rb +4 -4
  412. data/test/models/professor.rb +5 -5
  413. data/test/models/project.rb +31 -29
  414. data/test/models/publisher.rb +2 -2
  415. data/test/models/publisher/article.rb +4 -4
  416. data/test/models/publisher/magazine.rb +3 -3
  417. data/test/models/randomly_named_c1.rb +3 -3
  418. data/test/models/rating.rb +4 -4
  419. data/test/models/reader.rb +23 -23
  420. data/test/models/record.rb +2 -2
  421. data/test/models/reference.rb +22 -22
  422. data/test/models/reply.rb +61 -61
  423. data/test/models/ship.rb +33 -33
  424. data/test/models/ship_part.rb +7 -7
  425. data/test/models/shop.rb +17 -17
  426. data/test/models/shop_account.rb +6 -6
  427. data/test/models/speedometer.rb +6 -6
  428. data/test/models/sponsor.rb +7 -7
  429. data/test/models/string_key_object.rb +3 -3
  430. data/test/models/student.rb +4 -4
  431. data/test/models/subject.rb +16 -16
  432. data/test/models/subscriber.rb +8 -8
  433. data/test/models/subscription.rb +4 -4
  434. data/test/models/tag.rb +7 -7
  435. data/test/models/tagging.rb +13 -13
  436. data/test/models/task.rb +5 -5
  437. data/test/models/topic.rb +124 -124
  438. data/test/models/toy.rb +6 -6
  439. data/test/models/traffic_light.rb +4 -4
  440. data/test/models/treasure.rb +14 -14
  441. data/test/models/treaty.rb +7 -7
  442. data/test/models/tyre.rb +11 -11
  443. data/test/models/uuid_child.rb +3 -3
  444. data/test/models/uuid_parent.rb +3 -3
  445. data/test/models/vegetables.rb +24 -24
  446. data/test/models/vehicle.rb +6 -6
  447. data/test/models/vertex.rb +9 -9
  448. data/test/models/warehouse_thing.rb +5 -5
  449. data/test/models/wheel.rb +3 -3
  450. data/test/models/without_table.rb +3 -3
  451. data/test/models/zine.rb +3 -3
  452. data/test/schema/mysql2_specific_schema.rb +58 -58
  453. data/test/schema/mysql_specific_schema.rb +70 -70
  454. data/test/schema/oracle_specific_schema.rb +43 -43
  455. data/test/schema/postgresql_specific_schema.rb +202 -202
  456. data/test/schema/schema.rb +952 -938
  457. data/test/schema/sqlite_specific_schema.rb +21 -21
  458. data/test/support/config.rb +43 -43
  459. data/test/support/connection.rb +22 -22
  460. data/test/support/connection_helper.rb +14 -14
  461. data/test/support/ddl_helper.rb +8 -8
  462. data/test/support/schema_dumping_helper.rb +20 -20
  463. metadata +2 -2
@@ -1,56 +1,56 @@
1
- require 'cases/helper'
2
-
3
- module ActiveRecord
4
- class Migration
5
- class ColumnPositioningTest < ActiveRecord::TestCase
6
- attr_reader :connection, :table_name
7
- alias :conn :connection
8
-
9
- def setup
10
- super
11
-
12
- @connection = ActiveRecord::Base.connection
13
-
14
- connection.create_table :testings, :id => false do |t|
15
- t.column :first, :integer
16
- t.column :second, :integer
17
- t.column :third, :integer
18
- end
19
- end
20
-
21
- teardown do
22
- connection.drop_table :testings rescue nil
23
- ActiveRecord::Base.primary_key_prefix_type = nil
24
- end
25
-
26
- if current_adapter?(:MysqlAdapter, :Mysql2Adapter)
27
- def test_column_positioning
28
- assert_equal %w(first second third), conn.columns(:testings).map {|c| c.name }
29
- end
30
-
31
- def test_add_column_with_positioning
32
- conn.add_column :testings, :new_col, :integer
33
- assert_equal %w(first second third new_col), conn.columns(:testings).map {|c| c.name }
34
- end
35
-
36
- def test_add_column_with_positioning_first
37
- conn.add_column :testings, :new_col, :integer, :first => true
38
- assert_equal %w(new_col first second third), conn.columns(:testings).map {|c| c.name }
39
- end
40
-
41
- def test_add_column_with_positioning_after
42
- conn.add_column :testings, :new_col, :integer, :after => :first
43
- assert_equal %w(first new_col second third), conn.columns(:testings).map {|c| c.name }
44
- end
45
-
46
- def test_change_column_with_positioning
47
- conn.change_column :testings, :second, :integer, :first => true
48
- assert_equal %w(second first third), conn.columns(:testings).map {|c| c.name }
49
-
50
- conn.change_column :testings, :second, :integer, :after => :third
51
- assert_equal %w(first third second), conn.columns(:testings).map {|c| c.name }
52
- end
53
- end
54
- end
55
- end
56
- end
1
+ require 'cases/helper'
2
+
3
+ module ActiveRecord
4
+ class Migration
5
+ class ColumnPositioningTest < ActiveRecord::TestCase
6
+ attr_reader :connection, :table_name
7
+ alias :conn :connection
8
+
9
+ def setup
10
+ super
11
+
12
+ @connection = ActiveRecord::Base.connection
13
+
14
+ connection.create_table :testings, :id => false do |t|
15
+ t.column :first, :integer
16
+ t.column :second, :integer
17
+ t.column :third, :integer
18
+ end
19
+ end
20
+
21
+ teardown do
22
+ connection.drop_table :testings rescue nil
23
+ ActiveRecord::Base.primary_key_prefix_type = nil
24
+ end
25
+
26
+ if current_adapter?(:MysqlAdapter, :Mysql2Adapter)
27
+ def test_column_positioning
28
+ assert_equal %w(first second third), conn.columns(:testings).map {|c| c.name }
29
+ end
30
+
31
+ def test_add_column_with_positioning
32
+ conn.add_column :testings, :new_col, :integer
33
+ assert_equal %w(first second third new_col), conn.columns(:testings).map {|c| c.name }
34
+ end
35
+
36
+ def test_add_column_with_positioning_first
37
+ conn.add_column :testings, :new_col, :integer, :first => true
38
+ assert_equal %w(new_col first second third), conn.columns(:testings).map {|c| c.name }
39
+ end
40
+
41
+ def test_add_column_with_positioning_after
42
+ conn.add_column :testings, :new_col, :integer, :after => :first
43
+ assert_equal %w(first new_col second third), conn.columns(:testings).map {|c| c.name }
44
+ end
45
+
46
+ def test_change_column_with_positioning
47
+ conn.change_column :testings, :second, :integer, :first => true
48
+ assert_equal %w(second first third), conn.columns(:testings).map {|c| c.name }
49
+
50
+ conn.change_column :testings, :second, :integer, :after => :third
51
+ assert_equal %w(first third second), conn.columns(:testings).map {|c| c.name }
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -1,304 +1,304 @@
1
- require "cases/migration/helper"
2
-
3
- module ActiveRecord
4
- class Migration
5
- class ColumnsTest < ActiveRecord::TestCase
6
- include ActiveRecord::Migration::TestHelper
7
-
8
- self.use_transactional_fixtures = false
9
-
10
- if(!current_adapter?(:IBM_DBAdapter) )
11
- #|| @ibm_db_rename_supported)
12
- # FIXME: this is more of an integration test with AR::Base and the
13
- # schema modifications. Maybe we should move this?
14
- def test_add_rename
15
- add_column "test_models", "girlfriend", :string
16
- TestModel.reset_column_information
17
-
18
- TestModel.create :girlfriend => 'bobette'
19
-
20
- rename_column "test_models", "girlfriend", "exgirlfriend"
21
-
22
- TestModel.reset_column_information
23
- bob = TestModel.first
24
-
25
- assert_equal "bobette", bob.exgirlfriend
26
- end
27
-
28
- # FIXME: another integration test. We should decouple this from the
29
- # AR::Base implementation.
30
- def test_rename_column_using_symbol_arguments
31
- add_column :test_models, :first_name, :string
32
-
33
- TestModel.create :first_name => 'foo'
34
-
35
- rename_column :test_models, :first_name, :nick_name
36
- TestModel.reset_column_information
37
- assert TestModel.column_names.include?("nick_name")
38
- assert_equal ['foo'], TestModel.all.map(&:nick_name)
39
- end
40
-
41
- # FIXME: another integration test. We should decouple this from the
42
- # AR::Base implementation.
43
- def test_rename_column
44
- add_column "test_models", "first_name", "string"
45
-
46
- TestModel.create :first_name => 'foo'
47
-
48
- rename_column "test_models", "first_name", "nick_name"
49
- TestModel.reset_column_information
50
- assert TestModel.column_names.include?("nick_name")
51
- assert_equal ['foo'], TestModel.all.map(&:nick_name)
52
- end
53
-
54
- def test_rename_column_preserves_default_value_not_null
55
- add_column 'test_models', 'salary', :integer, :default => 70000
56
-
57
- default_before = connection.columns("test_models").find { |c| c.name == "salary" }.default
58
- assert_equal '70000', default_before
59
-
60
- rename_column "test_models", "salary", "annual_salary"
61
-
62
- assert TestModel.column_names.include?("annual_salary")
63
- default_after = connection.columns("test_models").find { |c| c.name == "annual_salary" }.default
64
- assert_equal '70000', default_after
65
- end
66
-
67
- if current_adapter?(:MysqlAdapter, :Mysql2Adapter)
68
- def test_mysql_rename_column_preserves_auto_increment
69
- rename_column "test_models", "id", "id_test"
70
- assert_equal "auto_increment", connection.columns("test_models").find { |c| c.name == "id_test" }.extra
71
- TestModel.reset_column_information
72
- ensure
73
- rename_column "test_models", "id_test", "id"
74
- end
75
- end
76
-
77
- def test_rename_nonexistent_column
78
- exception = if current_adapter?(:PostgreSQLAdapter, :OracleAdapter)
79
- ActiveRecord::StatementInvalid
80
- else
81
- ActiveRecord::ActiveRecordError
82
- end
83
- assert_raise(exception) do
84
- rename_column "test_models", "nonexistent", "should_fail"
85
- end
86
- end
87
-
88
- def test_rename_column_with_sql_reserved_word
89
- add_column 'test_models', 'first_name', :string
90
- rename_column "test_models", "first_name", "group"
91
-
92
- assert TestModel.column_names.include?("group")
93
- end
94
-
95
- def test_rename_column_with_an_index
96
- add_column "test_models", :hat_name, :string
97
- add_index :test_models, :hat_name
98
-
99
- assert_equal 1, connection.indexes('test_models').size
100
- rename_column "test_models", "hat_name", "name"
101
-
102
- assert_equal ['index_test_models_on_name'], connection.indexes('test_models').map(&:name)
103
- end
104
-
105
- def test_rename_column_with_multi_column_index
106
- add_column "test_models", :hat_size, :integer
107
- add_column "test_models", :hat_style, :string, limit: 100
108
- add_index "test_models", ["hat_style", "hat_size"], unique: true
109
-
110
- rename_column "test_models", "hat_size", 'size'
111
- if current_adapter? :OracleAdapter
112
- assert_equal ['i_test_models_hat_style_size'], connection.indexes('test_models').map(&:name)
113
- else
114
- assert_equal ['index_test_models_on_hat_style_and_size'], connection.indexes('test_models').map(&:name)
115
- end
116
-
117
- rename_column "test_models", "hat_style", 'style'
118
- if current_adapter? :OracleAdapter
119
- assert_equal ['i_test_models_style_size'], connection.indexes('test_models').map(&:name)
120
- else
121
- assert_equal ['index_test_models_on_style_and_size'], connection.indexes('test_models').map(&:name)
122
- end
123
- end
124
-
125
- def test_rename_column_does_not_rename_custom_named_index
126
- add_column "test_models", :hat_name, :string
127
- add_index :test_models, :hat_name, :name => 'idx_hat_name'
128
-
129
- assert_equal 1, connection.indexes('test_models').size
130
- rename_column "test_models", "hat_name", "name"
131
- assert_equal ['idx_hat_name'], connection.indexes('test_models').map(&:name)
132
- end
133
- end
134
-
135
- def test_remove_column_with_index
136
- add_column "test_models", :hat_name, :string
137
- add_index :test_models, :hat_name
138
-
139
- assert_equal 1, connection.indexes('test_models').size
140
- remove_column("test_models", "hat_name")
141
- assert_equal 0, connection.indexes('test_models').size
142
- end
143
-
144
- def test_remove_column_with_multi_column_index
145
- add_column "test_models", :hat_size, :integer
146
- add_column "test_models", :hat_style, :string, :limit => 100
147
- add_index "test_models", ["hat_style", "hat_size"], :unique => true
148
-
149
- assert_equal 1, connection.indexes('test_models').size
150
- remove_column("test_models", "hat_size")
151
-
152
- # Every database and/or database adapter has their own behavior
153
- # if it drops the multi-column index when any of the indexed columns dropped by remove_column.
154
- if current_adapter?(:PostgreSQLAdapter, :OracleAdapter)
155
- assert_equal [], connection.indexes('test_models').map(&:name)
156
- else
157
- assert_equal ['index_test_models_on_hat_style_and_hat_size'], connection.indexes('test_models').map(&:name)
158
- end
159
- end
160
-
161
- def test_change_type_of_not_null_column
162
- change_column "test_models", "updated_at", :datetime, :null => false
163
- change_column "test_models", "updated_at", :datetime, :null => false
164
-
165
- TestModel.reset_column_information
166
- assert_equal false, TestModel.columns_hash['updated_at'].null
167
- ensure
168
- change_column "test_models", "updated_at", :datetime, :null => true
169
- end
170
-
171
- def test_change_column_nullability
172
- add_column "test_models", "funny", :boolean
173
- assert TestModel.columns_hash["funny"].null, "Column 'funny' must initially allow nulls"
174
-
175
- change_column "test_models", "funny", :boolean, :null => false, :default => true
176
-
177
- TestModel.reset_column_information
178
- assert_not TestModel.columns_hash["funny"].null, "Column 'funny' must *not* allow nulls at this point"
179
-
180
- change_column "test_models", "funny", :boolean, :null => true
181
- TestModel.reset_column_information
182
- assert TestModel.columns_hash["funny"].null, "Column 'funny' must allow nulls again at this point"
183
- end
184
-
185
- unless current_adapter?(:IBM_DBAdapter)
186
- def test_change_column
187
- add_column 'test_models', 'age', :integer
188
- add_column 'test_models', 'approved', :boolean, :default => true
189
-
190
- old_columns = connection.columns(TestModel.table_name)
191
-
192
- assert old_columns.find { |c| c.name == 'age' && c.type == :integer }
193
-
194
- change_column "test_models", "age", :string
195
-
196
- new_columns = connection.columns(TestModel.table_name)
197
-
198
- assert_not new_columns.find { |c| c.name == 'age' and c.type == :integer }
199
- assert new_columns.find { |c| c.name == 'age' and c.type == :string }
200
-
201
- old_columns = connection.columns(TestModel.table_name)
202
- assert old_columns.find { |c|
203
- default = c.type_cast_from_database(c.default)
204
- c.name == 'approved' && c.type == :boolean && default == true
205
- }
206
-
207
- change_column :test_models, :approved, :boolean, :default => false
208
- new_columns = connection.columns(TestModel.table_name)
209
-
210
- assert_not new_columns.find { |c|
211
- default = c.type_cast_from_database(c.default)
212
- c.name == 'approved' and c.type == :boolean and default == true
213
- }
214
- assert new_columns.find { |c|
215
- default = c.type_cast_from_database(c.default)
216
- c.name == 'approved' and c.type == :boolean and default == false
217
- }
218
- change_column :test_models, :approved, :boolean, :default => true
219
- end
220
- end
221
-
222
- def test_change_column_with_nil_default
223
- add_column "test_models", "contributor", :boolean, :default => true
224
- assert TestModel.new.contributor?
225
-
226
- change_column "test_models", "contributor", :boolean, :default => nil
227
- TestModel.reset_column_information
228
- assert_not TestModel.new.contributor?
229
- assert_nil TestModel.new.contributor
230
- end
231
-
232
- def test_change_column_with_new_default
233
- add_column "test_models", "administrator", :boolean, :default => true
234
- assert TestModel.new.administrator?
235
-
236
- change_column "test_models", "administrator", :boolean, :default => false
237
- TestModel.reset_column_information
238
- assert_not TestModel.new.administrator?
239
- end
240
-
241
- def test_change_column_with_custom_index_name
242
- add_column "test_models", "category", :string
243
- add_index :test_models, :category, name: 'test_models_categories_idx'
244
-
245
- assert_equal ['test_models_categories_idx'], connection.indexes('test_models').map(&:name)
246
- change_column "test_models", "category", :string, null: false, default: 'article'
247
-
248
- assert_equal ['test_models_categories_idx'], connection.indexes('test_models').map(&:name)
249
- end
250
-
251
- def test_change_column_with_long_index_name
252
- table_name_prefix = 'test_models_'
253
- long_index_name = table_name_prefix + ('x' * (connection.allowed_index_name_length - table_name_prefix.length))
254
- add_column "test_models", "category", :string
255
- add_index :test_models, :category, name: long_index_name
256
-
257
- change_column "test_models", "category", :string, null: false, default: 'article'
258
-
259
- assert_equal [long_index_name], connection.indexes('test_models').map(&:name)
260
- end
261
-
262
- def test_change_column_default
263
- add_column "test_models", "first_name", :string
264
- connection.change_column_default "test_models", "first_name", "Tester"
265
-
266
- assert_equal "Tester", TestModel.new.first_name
267
- end
268
-
269
- def test_change_column_default_to_null
270
- add_column "test_models", "first_name", :string
271
- connection.change_column_default "test_models", "first_name", nil
272
- assert_nil TestModel.new.first_name
273
- end
274
-
275
- def test_remove_column_no_second_parameter_raises_exception
276
- assert_raise(ArgumentError) { connection.remove_column("funny") }
277
- end
278
-
279
- def test_removing_and_renaming_column_preserves_custom_primary_key
280
- connection.create_table "my_table", primary_key: "my_table_id", force: true do |t|
281
- t.integer "col_one"
282
- t.string "col_two", limit: 128, null: false
283
- end
284
-
285
- remove_column("my_table", "col_two")
286
- rename_column("my_table", "col_one", "col_three")
287
-
288
- assert_equal 'my_table_id', connection.primary_key('my_table')
289
- ensure
290
- connection.drop_table(:my_table) rescue nil
291
- end
292
-
293
- def test_column_with_index
294
- connection.create_table "my_table", force: true do |t|
295
- t.string :item_number, index: true
296
- end
297
-
298
- assert connection.index_exists?("my_table", :item_number, name: :index_my_table_on_item_number)
299
- ensure
300
- connection.drop_table(:my_table) rescue nil
301
- end
302
- end
303
- end
304
- end
1
+ require "cases/migration/helper"
2
+
3
+ module ActiveRecord
4
+ class Migration
5
+ class ColumnsTest < ActiveRecord::TestCase
6
+ include ActiveRecord::Migration::TestHelper
7
+
8
+ self.use_transactional_fixtures = false
9
+
10
+ if(!current_adapter?(:IBM_DBAdapter) )
11
+ #|| @ibm_db_rename_supported)
12
+ # FIXME: this is more of an integration test with AR::Base and the
13
+ # schema modifications. Maybe we should move this?
14
+ def test_add_rename
15
+ add_column "test_models", "girlfriend", :string
16
+ TestModel.reset_column_information
17
+
18
+ TestModel.create :girlfriend => 'bobette'
19
+
20
+ rename_column "test_models", "girlfriend", "exgirlfriend"
21
+
22
+ TestModel.reset_column_information
23
+ bob = TestModel.first
24
+
25
+ assert_equal "bobette", bob.exgirlfriend
26
+ end
27
+
28
+ # FIXME: another integration test. We should decouple this from the
29
+ # AR::Base implementation.
30
+ def test_rename_column_using_symbol_arguments
31
+ add_column :test_models, :first_name, :string
32
+
33
+ TestModel.create :first_name => 'foo'
34
+
35
+ rename_column :test_models, :first_name, :nick_name
36
+ TestModel.reset_column_information
37
+ assert TestModel.column_names.include?("nick_name")
38
+ assert_equal ['foo'], TestModel.all.map(&:nick_name)
39
+ end
40
+
41
+ # FIXME: another integration test. We should decouple this from the
42
+ # AR::Base implementation.
43
+ def test_rename_column
44
+ add_column "test_models", "first_name", "string"
45
+
46
+ TestModel.create :first_name => 'foo'
47
+
48
+ rename_column "test_models", "first_name", "nick_name"
49
+ TestModel.reset_column_information
50
+ assert TestModel.column_names.include?("nick_name")
51
+ assert_equal ['foo'], TestModel.all.map(&:nick_name)
52
+ end
53
+
54
+ def test_rename_column_preserves_default_value_not_null
55
+ add_column 'test_models', 'salary', :integer, :default => 70000
56
+
57
+ default_before = connection.columns("test_models").find { |c| c.name == "salary" }.default
58
+ assert_equal '70000', default_before
59
+
60
+ rename_column "test_models", "salary", "annual_salary"
61
+
62
+ assert TestModel.column_names.include?("annual_salary")
63
+ default_after = connection.columns("test_models").find { |c| c.name == "annual_salary" }.default
64
+ assert_equal '70000', default_after
65
+ end
66
+
67
+ if current_adapter?(:MysqlAdapter, :Mysql2Adapter)
68
+ def test_mysql_rename_column_preserves_auto_increment
69
+ rename_column "test_models", "id", "id_test"
70
+ assert_equal "auto_increment", connection.columns("test_models").find { |c| c.name == "id_test" }.extra
71
+ TestModel.reset_column_information
72
+ ensure
73
+ rename_column "test_models", "id_test", "id"
74
+ end
75
+ end
76
+
77
+ def test_rename_nonexistent_column
78
+ exception = if current_adapter?(:PostgreSQLAdapter, :OracleAdapter)
79
+ ActiveRecord::StatementInvalid
80
+ else
81
+ ActiveRecord::ActiveRecordError
82
+ end
83
+ assert_raise(exception) do
84
+ rename_column "test_models", "nonexistent", "should_fail"
85
+ end
86
+ end
87
+
88
+ def test_rename_column_with_sql_reserved_word
89
+ add_column 'test_models', 'first_name', :string
90
+ rename_column "test_models", "first_name", "group"
91
+
92
+ assert TestModel.column_names.include?("group")
93
+ end
94
+
95
+ def test_rename_column_with_an_index
96
+ add_column "test_models", :hat_name, :string
97
+ add_index :test_models, :hat_name
98
+
99
+ assert_equal 1, connection.indexes('test_models').size
100
+ rename_column "test_models", "hat_name", "name"
101
+
102
+ assert_equal ['index_test_models_on_name'], connection.indexes('test_models').map(&:name)
103
+ end
104
+
105
+ def test_rename_column_with_multi_column_index
106
+ add_column "test_models", :hat_size, :integer
107
+ add_column "test_models", :hat_style, :string, limit: 100
108
+ add_index "test_models", ["hat_style", "hat_size"], unique: true
109
+
110
+ rename_column "test_models", "hat_size", 'size'
111
+ if current_adapter? :OracleAdapter
112
+ assert_equal ['i_test_models_hat_style_size'], connection.indexes('test_models').map(&:name)
113
+ else
114
+ assert_equal ['index_test_models_on_hat_style_and_size'], connection.indexes('test_models').map(&:name)
115
+ end
116
+
117
+ rename_column "test_models", "hat_style", 'style'
118
+ if current_adapter? :OracleAdapter
119
+ assert_equal ['i_test_models_style_size'], connection.indexes('test_models').map(&:name)
120
+ else
121
+ assert_equal ['index_test_models_on_style_and_size'], connection.indexes('test_models').map(&:name)
122
+ end
123
+ end
124
+
125
+ def test_rename_column_does_not_rename_custom_named_index
126
+ add_column "test_models", :hat_name, :string
127
+ add_index :test_models, :hat_name, :name => 'idx_hat_name'
128
+
129
+ assert_equal 1, connection.indexes('test_models').size
130
+ rename_column "test_models", "hat_name", "name"
131
+ assert_equal ['idx_hat_name'], connection.indexes('test_models').map(&:name)
132
+ end
133
+ end
134
+
135
+ def test_remove_column_with_index
136
+ add_column "test_models", :hat_name, :string
137
+ add_index :test_models, :hat_name
138
+
139
+ assert_equal 1, connection.indexes('test_models').size
140
+ remove_column("test_models", "hat_name")
141
+ assert_equal 0, connection.indexes('test_models').size
142
+ end
143
+
144
+ def test_remove_column_with_multi_column_index
145
+ add_column "test_models", :hat_size, :integer
146
+ add_column "test_models", :hat_style, :string, :limit => 100
147
+ add_index "test_models", ["hat_style", "hat_size"], :unique => true
148
+
149
+ assert_equal 1, connection.indexes('test_models').size
150
+ remove_column("test_models", "hat_size")
151
+
152
+ # Every database and/or database adapter has their own behavior
153
+ # if it drops the multi-column index when any of the indexed columns dropped by remove_column.
154
+ if current_adapter?(:PostgreSQLAdapter, :OracleAdapter)
155
+ assert_equal [], connection.indexes('test_models').map(&:name)
156
+ else
157
+ assert_equal ['index_test_models_on_hat_style_and_hat_size'], connection.indexes('test_models').map(&:name)
158
+ end
159
+ end
160
+
161
+ def test_change_type_of_not_null_column
162
+ change_column "test_models", "updated_at", :datetime, :null => false
163
+ change_column "test_models", "updated_at", :datetime, :null => false
164
+
165
+ TestModel.reset_column_information
166
+ assert_equal false, TestModel.columns_hash['updated_at'].null
167
+ ensure
168
+ change_column "test_models", "updated_at", :datetime, :null => true
169
+ end
170
+
171
+ def test_change_column_nullability
172
+ add_column "test_models", "funny", :boolean
173
+ assert TestModel.columns_hash["funny"].null, "Column 'funny' must initially allow nulls"
174
+
175
+ change_column "test_models", "funny", :boolean, :null => false, :default => true
176
+
177
+ TestModel.reset_column_information
178
+ assert_not TestModel.columns_hash["funny"].null, "Column 'funny' must *not* allow nulls at this point"
179
+
180
+ change_column "test_models", "funny", :boolean, :null => true
181
+ TestModel.reset_column_information
182
+ assert TestModel.columns_hash["funny"].null, "Column 'funny' must allow nulls again at this point"
183
+ end
184
+
185
+ unless current_adapter?(:IBM_DBAdapter)
186
+ def test_change_column
187
+ add_column 'test_models', 'age', :integer
188
+ add_column 'test_models', 'approved', :boolean, :default => true
189
+
190
+ old_columns = connection.columns(TestModel.table_name)
191
+
192
+ assert old_columns.find { |c| c.name == 'age' && c.type == :integer }
193
+
194
+ change_column "test_models", "age", :string
195
+
196
+ new_columns = connection.columns(TestModel.table_name)
197
+
198
+ assert_not new_columns.find { |c| c.name == 'age' and c.type == :integer }
199
+ assert new_columns.find { |c| c.name == 'age' and c.type == :string }
200
+
201
+ old_columns = connection.columns(TestModel.table_name)
202
+ assert old_columns.find { |c|
203
+ default = c.type_cast_from_database(c.default)
204
+ c.name == 'approved' && c.type == :boolean && default == true
205
+ }
206
+
207
+ change_column :test_models, :approved, :boolean, :default => false
208
+ new_columns = connection.columns(TestModel.table_name)
209
+
210
+ assert_not new_columns.find { |c|
211
+ default = c.type_cast_from_database(c.default)
212
+ c.name == 'approved' and c.type == :boolean and default == true
213
+ }
214
+ assert new_columns.find { |c|
215
+ default = c.type_cast_from_database(c.default)
216
+ c.name == 'approved' and c.type == :boolean and default == false
217
+ }
218
+ change_column :test_models, :approved, :boolean, :default => true
219
+ end
220
+ end
221
+
222
+ def test_change_column_with_nil_default
223
+ add_column "test_models", "contributor", :boolean, :default => true
224
+ assert TestModel.new.contributor?
225
+
226
+ change_column "test_models", "contributor", :boolean, :default => nil
227
+ TestModel.reset_column_information
228
+ assert_not TestModel.new.contributor?
229
+ assert_nil TestModel.new.contributor
230
+ end
231
+
232
+ def test_change_column_with_new_default
233
+ add_column "test_models", "administrator", :boolean, :default => true
234
+ assert TestModel.new.administrator?
235
+
236
+ change_column "test_models", "administrator", :boolean, :default => false
237
+ TestModel.reset_column_information
238
+ assert_not TestModel.new.administrator?
239
+ end
240
+
241
+ def test_change_column_with_custom_index_name
242
+ add_column "test_models", "category", :string
243
+ add_index :test_models, :category, name: 'test_models_categories_idx'
244
+
245
+ assert_equal ['test_models_categories_idx'], connection.indexes('test_models').map(&:name)
246
+ change_column "test_models", "category", :string, null: false, default: 'article'
247
+
248
+ assert_equal ['test_models_categories_idx'], connection.indexes('test_models').map(&:name)
249
+ end
250
+
251
+ def test_change_column_with_long_index_name
252
+ table_name_prefix = 'test_models_'
253
+ long_index_name = table_name_prefix + ('x' * (connection.allowed_index_name_length - table_name_prefix.length))
254
+ add_column "test_models", "category", :string
255
+ add_index :test_models, :category, name: long_index_name
256
+
257
+ change_column "test_models", "category", :string, null: false, default: 'article'
258
+
259
+ assert_equal [long_index_name], connection.indexes('test_models').map(&:name)
260
+ end
261
+
262
+ def test_change_column_default
263
+ add_column "test_models", "first_name", :string
264
+ connection.change_column_default "test_models", "first_name", "Tester"
265
+
266
+ assert_equal "Tester", TestModel.new.first_name
267
+ end
268
+
269
+ def test_change_column_default_to_null
270
+ add_column "test_models", "first_name", :string
271
+ connection.change_column_default "test_models", "first_name", nil
272
+ assert_nil TestModel.new.first_name
273
+ end
274
+
275
+ def test_remove_column_no_second_parameter_raises_exception
276
+ assert_raise(ArgumentError) { connection.remove_column("funny") }
277
+ end
278
+
279
+ def test_removing_and_renaming_column_preserves_custom_primary_key
280
+ connection.create_table "my_table", primary_key: "my_table_id", force: true do |t|
281
+ t.integer "col_one"
282
+ t.string "col_two", limit: 128, null: false
283
+ end
284
+
285
+ remove_column("my_table", "col_two")
286
+ rename_column("my_table", "col_one", "col_three")
287
+
288
+ assert_equal 'my_table_id', connection.primary_key('my_table')
289
+ ensure
290
+ connection.drop_table(:my_table) rescue nil
291
+ end
292
+
293
+ def test_column_with_index
294
+ connection.create_table "my_table", force: true do |t|
295
+ t.string :item_number, index: true
296
+ end
297
+
298
+ assert connection.index_exists?("my_table", :item_number, name: :index_my_table_on_item_number)
299
+ ensure
300
+ connection.drop_table(:my_table) rescue nil
301
+ end
302
+ end
303
+ end
304
+ end