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,224 +1,224 @@
1
- require "cases/migration/helper"
2
- require "minitest/mock"
3
-
4
- module ActiveRecord
5
- class Migration
6
- class TableTest < ActiveRecord::TestCase
7
- def setup
8
- @connection = Minitest::Mock.new
9
- end
10
-
11
- teardown do
12
- assert @connection.verify
13
- end
14
-
15
- def with_change_table
16
- yield ConnectionAdapters::Table.new(:delete_me, @connection)
17
- end
18
-
19
- def test_references_column_type_adds_id
20
- with_change_table do |t|
21
- @connection.expect :add_reference, nil, [:delete_me, :customer, {}]
22
- t.references :customer
23
- end
24
- end
25
-
26
- def test_remove_references_column_type_removes_id
27
- with_change_table do |t|
28
- @connection.expect :remove_reference, nil, [:delete_me, :customer, {}]
29
- t.remove_references :customer
30
- end
31
- end
32
-
33
- def test_add_belongs_to_works_like_add_references
34
- with_change_table do |t|
35
- @connection.expect :add_reference, nil, [:delete_me, :customer, {}]
36
- t.belongs_to :customer
37
- end
38
- end
39
-
40
- def test_remove_belongs_to_works_like_remove_references
41
- with_change_table do |t|
42
- @connection.expect :remove_reference, nil, [:delete_me, :customer, {}]
43
- t.remove_belongs_to :customer
44
- end
45
- end
46
-
47
- def test_references_column_type_with_polymorphic_adds_type
48
- with_change_table do |t|
49
- @connection.expect :add_reference, nil, [:delete_me, :taggable, polymorphic: true]
50
- t.references :taggable, polymorphic: true
51
- end
52
- end
53
-
54
- def test_remove_references_column_type_with_polymorphic_removes_type
55
- with_change_table do |t|
56
- @connection.expect :remove_reference, nil, [:delete_me, :taggable, polymorphic: true]
57
- t.remove_references :taggable, polymorphic: true
58
- end
59
- end
60
-
61
- def test_references_column_type_with_polymorphic_and_options_null_is_false_adds_table_flag
62
- with_change_table do |t|
63
- @connection.expect :add_reference, nil, [:delete_me, :taggable, polymorphic: true, null: false]
64
- t.references :taggable, polymorphic: true, null: false
65
- end
66
- end
67
-
68
- def test_remove_references_column_type_with_polymorphic_and_options_null_is_false_removes_table_flag
69
- with_change_table do |t|
70
- @connection.expect :remove_reference, nil, [:delete_me, :taggable, polymorphic: true, null: false]
71
- t.remove_references :taggable, polymorphic: true, null: false
72
- end
73
- end
74
-
75
- def test_references_column_type_with_polymorphic_and_type
76
- with_change_table do |t|
77
- @connection.expect :add_reference, nil, [:delete_me, :taggable, polymorphic: true, type: :string]
78
- t.references :taggable, polymorphic: true, type: :string
79
- end
80
- end
81
-
82
- def test_remove_references_column_type_with_polymorphic_and_type
83
- with_change_table do |t|
84
- @connection.expect :remove_reference, nil, [:delete_me, :taggable, polymorphic: true, type: :string]
85
- t.remove_references :taggable, polymorphic: true, type: :string
86
- end
87
- end
88
-
89
- def test_timestamps_creates_updated_at_and_created_at
90
- with_change_table do |t|
91
- @connection.expect :add_timestamps, nil, [:delete_me, null: true]
92
- t.timestamps null: true
93
- end
94
- end
95
-
96
- def test_remove_timestamps_creates_updated_at_and_created_at
97
- with_change_table do |t|
98
- @connection.expect :remove_timestamps, nil, [:delete_me, { null: true }]
99
- t.remove_timestamps({ null: true })
100
- end
101
- end
102
-
103
- def test_integer_creates_integer_column
104
- with_change_table do |t|
105
- @connection.expect :add_column, nil, [:delete_me, :foo, :integer, {}]
106
- @connection.expect :add_column, nil, [:delete_me, :bar, :integer, {}]
107
- t.integer :foo, :bar
108
- end
109
- end
110
-
111
- def test_string_creates_string_column
112
- with_change_table do |t|
113
- @connection.expect :add_column, nil, [:delete_me, :foo, :string, {}]
114
- @connection.expect :add_column, nil, [:delete_me, :bar, :string, {}]
115
- t.string :foo, :bar
116
- end
117
- end
118
-
119
- def test_column_creates_column
120
- with_change_table do |t|
121
- @connection.expect :add_column, nil, [:delete_me, :bar, :integer, {}]
122
- t.column :bar, :integer
123
- end
124
- end
125
-
126
- def test_column_creates_column_with_options
127
- with_change_table do |t|
128
- @connection.expect :add_column, nil, [:delete_me, :bar, :integer, {:null => false}]
129
- t.column :bar, :integer, :null => false
130
- end
131
- end
132
-
133
- def test_index_creates_index
134
- with_change_table do |t|
135
- @connection.expect :add_index, nil, [:delete_me, :bar, {}]
136
- t.index :bar
137
- end
138
- end
139
-
140
- def test_index_creates_index_with_options
141
- with_change_table do |t|
142
- @connection.expect :add_index, nil, [:delete_me, :bar, {:unique => true}]
143
- t.index :bar, :unique => true
144
- end
145
- end
146
-
147
- def test_index_exists
148
- with_change_table do |t|
149
- @connection.expect :index_exists?, nil, [:delete_me, :bar, {}]
150
- t.index_exists?(:bar)
151
- end
152
- end
153
-
154
- def test_index_exists_with_options
155
- with_change_table do |t|
156
- @connection.expect :index_exists?, nil, [:delete_me, :bar, {:unique => true}]
157
- t.index_exists?(:bar, :unique => true)
158
- end
159
- end
160
-
161
- def test_rename_index_renames_index
162
- with_change_table do |t|
163
- @connection.expect :rename_index, nil, [:delete_me, :bar, :baz]
164
- t.rename_index :bar, :baz
165
- end
166
- end
167
-
168
- def test_change_changes_column
169
- with_change_table do |t|
170
- @connection.expect :change_column, nil, [:delete_me, :bar, :string, {}]
171
- t.change :bar, :string
172
- end
173
- end
174
-
175
- def test_change_changes_column_with_options
176
- with_change_table do |t|
177
- @connection.expect :change_column, nil, [:delete_me, :bar, :string, {:null => true}]
178
- t.change :bar, :string, :null => true
179
- end
180
- end
181
-
182
- def test_change_default_changes_column
183
- with_change_table do |t|
184
- @connection.expect :change_column_default, nil, [:delete_me, :bar, :string]
185
- t.change_default :bar, :string
186
- end
187
- end
188
-
189
- def test_remove_drops_single_column
190
- with_change_table do |t|
191
- @connection.expect :remove_columns, nil, [:delete_me, :bar]
192
- t.remove :bar
193
- end
194
- end
195
-
196
- def test_remove_drops_multiple_columns
197
- with_change_table do |t|
198
- @connection.expect :remove_columns, nil, [:delete_me, :bar, :baz]
199
- t.remove :bar, :baz
200
- end
201
- end
202
-
203
- def test_remove_index_removes_index_with_options
204
- with_change_table do |t|
205
- @connection.expect :remove_index, nil, [:delete_me, {:unique => true}]
206
- t.remove_index :unique => true
207
- end
208
- end
209
-
210
- def test_rename_renames_column
211
- with_change_table do |t|
212
- @connection.expect :rename_column, nil, [:delete_me, :bar, :baz]
213
- t.rename :bar, :baz
214
- end
215
- end
216
-
217
- def test_table_name_set
218
- with_change_table do |t|
219
- assert_equal :delete_me, t.name
220
- end
221
- end
222
- end
223
- end
224
- end
1
+ require "cases/migration/helper"
2
+ require "minitest/mock"
3
+
4
+ module ActiveRecord
5
+ class Migration
6
+ class TableTest < ActiveRecord::TestCase
7
+ def setup
8
+ @connection = Minitest::Mock.new
9
+ end
10
+
11
+ teardown do
12
+ assert @connection.verify
13
+ end
14
+
15
+ def with_change_table
16
+ yield ConnectionAdapters::Table.new(:delete_me, @connection)
17
+ end
18
+
19
+ def test_references_column_type_adds_id
20
+ with_change_table do |t|
21
+ @connection.expect :add_reference, nil, [:delete_me, :customer, {}]
22
+ t.references :customer
23
+ end
24
+ end
25
+
26
+ def test_remove_references_column_type_removes_id
27
+ with_change_table do |t|
28
+ @connection.expect :remove_reference, nil, [:delete_me, :customer, {}]
29
+ t.remove_references :customer
30
+ end
31
+ end
32
+
33
+ def test_add_belongs_to_works_like_add_references
34
+ with_change_table do |t|
35
+ @connection.expect :add_reference, nil, [:delete_me, :customer, {}]
36
+ t.belongs_to :customer
37
+ end
38
+ end
39
+
40
+ def test_remove_belongs_to_works_like_remove_references
41
+ with_change_table do |t|
42
+ @connection.expect :remove_reference, nil, [:delete_me, :customer, {}]
43
+ t.remove_belongs_to :customer
44
+ end
45
+ end
46
+
47
+ def test_references_column_type_with_polymorphic_adds_type
48
+ with_change_table do |t|
49
+ @connection.expect :add_reference, nil, [:delete_me, :taggable, polymorphic: true]
50
+ t.references :taggable, polymorphic: true
51
+ end
52
+ end
53
+
54
+ def test_remove_references_column_type_with_polymorphic_removes_type
55
+ with_change_table do |t|
56
+ @connection.expect :remove_reference, nil, [:delete_me, :taggable, polymorphic: true]
57
+ t.remove_references :taggable, polymorphic: true
58
+ end
59
+ end
60
+
61
+ def test_references_column_type_with_polymorphic_and_options_null_is_false_adds_table_flag
62
+ with_change_table do |t|
63
+ @connection.expect :add_reference, nil, [:delete_me, :taggable, polymorphic: true, null: false]
64
+ t.references :taggable, polymorphic: true, null: false
65
+ end
66
+ end
67
+
68
+ def test_remove_references_column_type_with_polymorphic_and_options_null_is_false_removes_table_flag
69
+ with_change_table do |t|
70
+ @connection.expect :remove_reference, nil, [:delete_me, :taggable, polymorphic: true, null: false]
71
+ t.remove_references :taggable, polymorphic: true, null: false
72
+ end
73
+ end
74
+
75
+ def test_references_column_type_with_polymorphic_and_type
76
+ with_change_table do |t|
77
+ @connection.expect :add_reference, nil, [:delete_me, :taggable, polymorphic: true, type: :string]
78
+ t.references :taggable, polymorphic: true, type: :string
79
+ end
80
+ end
81
+
82
+ def test_remove_references_column_type_with_polymorphic_and_type
83
+ with_change_table do |t|
84
+ @connection.expect :remove_reference, nil, [:delete_me, :taggable, polymorphic: true, type: :string]
85
+ t.remove_references :taggable, polymorphic: true, type: :string
86
+ end
87
+ end
88
+
89
+ def test_timestamps_creates_updated_at_and_created_at
90
+ with_change_table do |t|
91
+ @connection.expect :add_timestamps, nil, [:delete_me, null: true]
92
+ t.timestamps null: true
93
+ end
94
+ end
95
+
96
+ def test_remove_timestamps_creates_updated_at_and_created_at
97
+ with_change_table do |t|
98
+ @connection.expect :remove_timestamps, nil, [:delete_me, { null: true }]
99
+ t.remove_timestamps({ null: true })
100
+ end
101
+ end
102
+
103
+ def test_integer_creates_integer_column
104
+ with_change_table do |t|
105
+ @connection.expect :add_column, nil, [:delete_me, :foo, :integer, {}]
106
+ @connection.expect :add_column, nil, [:delete_me, :bar, :integer, {}]
107
+ t.integer :foo, :bar
108
+ end
109
+ end
110
+
111
+ def test_string_creates_string_column
112
+ with_change_table do |t|
113
+ @connection.expect :add_column, nil, [:delete_me, :foo, :string, {}]
114
+ @connection.expect :add_column, nil, [:delete_me, :bar, :string, {}]
115
+ t.string :foo, :bar
116
+ end
117
+ end
118
+
119
+ def test_column_creates_column
120
+ with_change_table do |t|
121
+ @connection.expect :add_column, nil, [:delete_me, :bar, :integer, {}]
122
+ t.column :bar, :integer
123
+ end
124
+ end
125
+
126
+ def test_column_creates_column_with_options
127
+ with_change_table do |t|
128
+ @connection.expect :add_column, nil, [:delete_me, :bar, :integer, {:null => false}]
129
+ t.column :bar, :integer, :null => false
130
+ end
131
+ end
132
+
133
+ def test_index_creates_index
134
+ with_change_table do |t|
135
+ @connection.expect :add_index, nil, [:delete_me, :bar, {}]
136
+ t.index :bar
137
+ end
138
+ end
139
+
140
+ def test_index_creates_index_with_options
141
+ with_change_table do |t|
142
+ @connection.expect :add_index, nil, [:delete_me, :bar, {:unique => true}]
143
+ t.index :bar, :unique => true
144
+ end
145
+ end
146
+
147
+ def test_index_exists
148
+ with_change_table do |t|
149
+ @connection.expect :index_exists?, nil, [:delete_me, :bar, {}]
150
+ t.index_exists?(:bar)
151
+ end
152
+ end
153
+
154
+ def test_index_exists_with_options
155
+ with_change_table do |t|
156
+ @connection.expect :index_exists?, nil, [:delete_me, :bar, {:unique => true}]
157
+ t.index_exists?(:bar, :unique => true)
158
+ end
159
+ end
160
+
161
+ def test_rename_index_renames_index
162
+ with_change_table do |t|
163
+ @connection.expect :rename_index, nil, [:delete_me, :bar, :baz]
164
+ t.rename_index :bar, :baz
165
+ end
166
+ end
167
+
168
+ def test_change_changes_column
169
+ with_change_table do |t|
170
+ @connection.expect :change_column, nil, [:delete_me, :bar, :string, {}]
171
+ t.change :bar, :string
172
+ end
173
+ end
174
+
175
+ def test_change_changes_column_with_options
176
+ with_change_table do |t|
177
+ @connection.expect :change_column, nil, [:delete_me, :bar, :string, {:null => true}]
178
+ t.change :bar, :string, :null => true
179
+ end
180
+ end
181
+
182
+ def test_change_default_changes_column
183
+ with_change_table do |t|
184
+ @connection.expect :change_column_default, nil, [:delete_me, :bar, :string]
185
+ t.change_default :bar, :string
186
+ end
187
+ end
188
+
189
+ def test_remove_drops_single_column
190
+ with_change_table do |t|
191
+ @connection.expect :remove_columns, nil, [:delete_me, :bar]
192
+ t.remove :bar
193
+ end
194
+ end
195
+
196
+ def test_remove_drops_multiple_columns
197
+ with_change_table do |t|
198
+ @connection.expect :remove_columns, nil, [:delete_me, :bar, :baz]
199
+ t.remove :bar, :baz
200
+ end
201
+ end
202
+
203
+ def test_remove_index_removes_index_with_options
204
+ with_change_table do |t|
205
+ @connection.expect :remove_index, nil, [:delete_me, {:unique => true}]
206
+ t.remove_index :unique => true
207
+ end
208
+ end
209
+
210
+ def test_rename_renames_column
211
+ with_change_table do |t|
212
+ @connection.expect :rename_column, nil, [:delete_me, :bar, :baz]
213
+ t.rename :bar, :baz
214
+ end
215
+ end
216
+
217
+ def test_table_name_set
218
+ with_change_table do |t|
219
+ assert_equal :delete_me, t.name
220
+ end
221
+ end
222
+ end
223
+ end
224
+ end
@@ -1,192 +1,192 @@
1
- require "cases/migration/helper"
2
-
3
- module ActiveRecord
4
- class Migration
5
- class ColumnAttributesTest < ActiveRecord::TestCase
6
- include ActiveRecord::Migration::TestHelper
7
-
8
- self.use_transactional_fixtures = false
9
-
10
- def test_add_column_newline_default
11
- string = "foo\nbar"
12
- add_column 'test_models', 'command', :string, :default => string
13
- TestModel.reset_column_information
14
-
15
- assert_equal string, TestModel.new.command
16
- end
17
-
18
- def test_add_remove_single_field_using_string_arguments
19
- assert_no_column TestModel, :last_name
20
-
21
- add_column 'test_models', 'last_name', :string
22
- assert_column TestModel, :last_name
23
-
24
- remove_column 'test_models', 'last_name'
25
- assert_no_column TestModel, :last_name
26
- end
27
-
28
- def test_add_remove_single_field_using_symbol_arguments
29
- assert_no_column TestModel, :last_name
30
-
31
- add_column :test_models, :last_name, :string
32
- assert_column TestModel, :last_name
33
-
34
- remove_column :test_models, :last_name
35
- assert_no_column TestModel, :last_name
36
- end
37
-
38
- def test_add_column_without_limit
39
- # TODO: limit: nil should work with all adapters.
40
- skip "MySQL wrongly enforces a limit of 255" if current_adapter?(:MysqlAdapter, :Mysql2Adapter)
41
- add_column :test_models, :description, :string, limit: nil
42
- TestModel.reset_column_information
43
- assert_nil TestModel.columns_hash["description"].limit
44
- end
45
-
46
- if current_adapter?(:MysqlAdapter, :Mysql2Adapter)
47
- def test_unabstracted_database_dependent_types
48
- add_column :test_models, :intelligence_quotient, :tinyint
49
- TestModel.reset_column_information
50
- assert_match(/tinyint/, TestModel.columns_hash['intelligence_quotient'].sql_type)
51
- end
52
- end
53
-
54
- unless current_adapter?(:SQLite3Adapter)
55
- # We specifically do a manual INSERT here, and then test only the SELECT
56
- # functionality. This allows us to more easily catch INSERT being broken,
57
- # but SELECT actually working fine.
58
- def test_native_decimal_insert_manual_vs_automatic
59
- correct_value = '0012345678901234567890.0123456789'.to_d
60
-
61
- connection.add_column "test_models", "wealth", :decimal, :precision => '30', :scale => '10'
62
-
63
- # Do a manual insertion
64
- if current_adapter?(:OracleAdapter)
65
- connection.execute "insert into test_models (id, wealth) values (people_seq.nextval, 12345678901234567890.0123456789)"
66
- elsif current_adapter?(:MysqlAdapter) && Mysql.client_version < 50003 #before MySQL 5.0.3 decimals stored as strings
67
- connection.execute "insert into test_models (wealth) values ('12345678901234567890.0123456789')"
68
- elsif current_adapter?(:PostgreSQLAdapter)
69
- connection.execute "insert into test_models (wealth) values (12345678901234567890.0123456789)"
70
- elsif current_adapter?(:IBM_DBAdapter)
71
- Person.connection.execute "insert into people (wealth, created_at, updated_at, lock_version, first_name) values (12345678901234567890.0123456789, CURRENT TIMESTAMP, CURRENT TIMESTAMP, 0, 'Jim')"
72
- else
73
- connection.execute "insert into test_models (wealth) values (12345678901234567890.0123456789)"
74
- end
75
-
76
- # SELECT
77
- row = TestModel.first
78
- assert_kind_of BigDecimal, row.wealth
79
-
80
- # If this assert fails, that means the SELECT is broken!
81
- unless current_adapter?(:SQLite3Adapter)
82
- assert_equal correct_value, row.wealth
83
- end
84
-
85
- # Reset to old state
86
- TestModel.delete_all
87
-
88
- # Now use the Rails insertion
89
- unless current_adapter?(:IBM_DBAdapter)
90
- assert_nothing_raised { Person.create :wealth => BigDecimal.new("12345678901234567890.0123456789") }
91
- else
92
- # First_name is a not null column, hence ensure a value is specified
93
- assert_nothing_raised { Person.create ({:wealth => BigDecimal.new("12345678901234567890.0123456789"), :first_name => "James"}) }
94
- end
95
-
96
- # SELECT
97
- row = TestModel.first
98
- assert_kind_of BigDecimal, row.wealth
99
-
100
- # If these asserts fail, that means the INSERT (create function, or cast to SQL) is broken!
101
- assert_equal correct_value, row.wealth
102
- end
103
- end
104
-
105
- def test_add_column_with_precision_and_scale
106
- connection.add_column 'test_models', 'wealth', :decimal, :precision => 9, :scale => 7
107
-
108
- wealth_column = TestModel.columns_hash['wealth']
109
- assert_equal 9, wealth_column.precision
110
- assert_equal 7, wealth_column.scale
111
- end
112
-
113
- if current_adapter?(:SQLite3Adapter)
114
- def test_change_column_preserve_other_column_precision_and_scale
115
- connection.add_column 'test_models', 'last_name', :string
116
- connection.add_column 'test_models', 'wealth', :decimal, :precision => 9, :scale => 7
117
-
118
- wealth_column = TestModel.columns_hash['wealth']
119
- assert_equal 9, wealth_column.precision
120
- assert_equal 7, wealth_column.scale
121
-
122
- connection.change_column 'test_models', 'last_name', :string, :null => false
123
- TestModel.reset_column_information
124
-
125
- wealth_column = TestModel.columns_hash['wealth']
126
- assert_equal 9, wealth_column.precision
127
- assert_equal 7, wealth_column.scale
128
- end
129
- end
130
-
131
- unless current_adapter?(:SQLite3Adapter)
132
- def test_native_types
133
- add_column "test_models", "first_name", :string
134
- add_column "test_models", "last_name", :string
135
- add_column "test_models", "bio", :text
136
- add_column "test_models", "age", :integer
137
- add_column "test_models", "height", :float
138
- add_column "test_models", "wealth", :decimal, :precision => '30', :scale => '10'
139
- add_column "test_models", "birthday", :datetime
140
- add_column "test_models", "favorite_day", :date
141
- add_column "test_models", "moment_of_truth", :datetime
142
- add_column "test_models", "male", :boolean
143
-
144
- TestModel.create :first_name => 'bob', :last_name => 'bobsen',
145
- :bio => "I was born ....", :age => 18, :height => 1.78,
146
- :wealth => BigDecimal.new("12345678901234567890.0123456789"),
147
- :birthday => 18.years.ago, :favorite_day => 10.days.ago,
148
- :moment_of_truth => "1782-10-10 21:40:18", :male => true
149
-
150
- bob = TestModel.first
151
- assert_equal 'bob', bob.first_name
152
- assert_equal 'bobsen', bob.last_name
153
- assert_equal "I was born ....", bob.bio
154
- assert_equal 18, bob.age
155
-
156
- # Test for 30 significant digits (beyond the 16 of float), 10 of them
157
- # after the decimal place.
158
-
159
- assert_equal BigDecimal.new("0012345678901234567890.0123456789"), bob.wealth
160
-
161
- assert_equal true, bob.male?
162
-
163
- assert_equal String, bob.first_name.class
164
- assert_equal String, bob.last_name.class
165
- assert_equal String, bob.bio.class
166
- assert_equal Fixnum, bob.age.class
167
- assert_equal Time, bob.birthday.class
168
-
169
- if current_adapter?(:OracleAdapter)
170
- # Oracle doesn't differentiate between date/time
171
- assert_equal Time, bob.favorite_day.class
172
- else
173
- assert_equal Date, bob.favorite_day.class
174
- end
175
-
176
- assert_instance_of TrueClass, bob.male?
177
- assert_kind_of BigDecimal, bob.wealth
178
- end
179
- end
180
-
181
- if current_adapter?(:MysqlAdapter, :Mysql2Adapter, :PostgreSQLAdapter)
182
- def test_out_of_range_limit_should_raise
183
- assert_raise(ActiveRecordError) { add_column :test_models, :integer_too_big, :integer, :limit => 10 }
184
-
185
- unless current_adapter?(:PostgreSQLAdapter)
186
- assert_raise(ActiveRecordError) { add_column :test_models, :text_too_big, :integer, :limit => 0xfffffffff }
187
- end
188
- end
189
- end
190
- end
191
- end
192
- end
1
+ require "cases/migration/helper"
2
+
3
+ module ActiveRecord
4
+ class Migration
5
+ class ColumnAttributesTest < ActiveRecord::TestCase
6
+ include ActiveRecord::Migration::TestHelper
7
+
8
+ self.use_transactional_fixtures = false
9
+
10
+ def test_add_column_newline_default
11
+ string = "foo\nbar"
12
+ add_column 'test_models', 'command', :string, :default => string
13
+ TestModel.reset_column_information
14
+
15
+ assert_equal string, TestModel.new.command
16
+ end
17
+
18
+ def test_add_remove_single_field_using_string_arguments
19
+ assert_no_column TestModel, :last_name
20
+
21
+ add_column 'test_models', 'last_name', :string
22
+ assert_column TestModel, :last_name
23
+
24
+ remove_column 'test_models', 'last_name'
25
+ assert_no_column TestModel, :last_name
26
+ end
27
+
28
+ def test_add_remove_single_field_using_symbol_arguments
29
+ assert_no_column TestModel, :last_name
30
+
31
+ add_column :test_models, :last_name, :string
32
+ assert_column TestModel, :last_name
33
+
34
+ remove_column :test_models, :last_name
35
+ assert_no_column TestModel, :last_name
36
+ end
37
+
38
+ def test_add_column_without_limit
39
+ # TODO: limit: nil should work with all adapters.
40
+ skip "MySQL wrongly enforces a limit of 255" if current_adapter?(:MysqlAdapter, :Mysql2Adapter)
41
+ add_column :test_models, :description, :string, limit: nil
42
+ TestModel.reset_column_information
43
+ assert_nil TestModel.columns_hash["description"].limit
44
+ end
45
+
46
+ if current_adapter?(:MysqlAdapter, :Mysql2Adapter)
47
+ def test_unabstracted_database_dependent_types
48
+ add_column :test_models, :intelligence_quotient, :tinyint
49
+ TestModel.reset_column_information
50
+ assert_match(/tinyint/, TestModel.columns_hash['intelligence_quotient'].sql_type)
51
+ end
52
+ end
53
+
54
+ unless current_adapter?(:SQLite3Adapter)
55
+ # We specifically do a manual INSERT here, and then test only the SELECT
56
+ # functionality. This allows us to more easily catch INSERT being broken,
57
+ # but SELECT actually working fine.
58
+ def test_native_decimal_insert_manual_vs_automatic
59
+ correct_value = '0012345678901234567890.0123456789'.to_d
60
+
61
+ connection.add_column "test_models", "wealth", :decimal, :precision => '30', :scale => '10'
62
+
63
+ # Do a manual insertion
64
+ if current_adapter?(:OracleAdapter)
65
+ connection.execute "insert into test_models (id, wealth) values (people_seq.nextval, 12345678901234567890.0123456789)"
66
+ elsif current_adapter?(:MysqlAdapter) && Mysql.client_version < 50003 #before MySQL 5.0.3 decimals stored as strings
67
+ connection.execute "insert into test_models (wealth) values ('12345678901234567890.0123456789')"
68
+ elsif current_adapter?(:PostgreSQLAdapter)
69
+ connection.execute "insert into test_models (wealth) values (12345678901234567890.0123456789)"
70
+ elsif current_adapter?(:IBM_DBAdapter)
71
+ Person.connection.execute "insert into people (wealth, created_at, updated_at, lock_version, first_name) values (12345678901234567890.0123456789, CURRENT TIMESTAMP, CURRENT TIMESTAMP, 0, 'Jim')"
72
+ else
73
+ connection.execute "insert into test_models (wealth) values (12345678901234567890.0123456789)"
74
+ end
75
+
76
+ # SELECT
77
+ row = TestModel.first
78
+ assert_kind_of BigDecimal, row.wealth
79
+
80
+ # If this assert fails, that means the SELECT is broken!
81
+ unless current_adapter?(:SQLite3Adapter)
82
+ assert_equal correct_value, row.wealth
83
+ end
84
+
85
+ # Reset to old state
86
+ TestModel.delete_all
87
+
88
+ # Now use the Rails insertion
89
+ unless current_adapter?(:IBM_DBAdapter)
90
+ assert_nothing_raised { Person.create :wealth => BigDecimal.new("12345678901234567890.0123456789") }
91
+ else
92
+ # First_name is a not null column, hence ensure a value is specified
93
+ assert_nothing_raised { Person.create ({:wealth => BigDecimal.new("12345678901234567890.0123456789"), :first_name => "James"}) }
94
+ end
95
+
96
+ # SELECT
97
+ row = TestModel.first
98
+ assert_kind_of BigDecimal, row.wealth
99
+
100
+ # If these asserts fail, that means the INSERT (create function, or cast to SQL) is broken!
101
+ assert_equal correct_value, row.wealth
102
+ end
103
+ end
104
+
105
+ def test_add_column_with_precision_and_scale
106
+ connection.add_column 'test_models', 'wealth', :decimal, :precision => 9, :scale => 7
107
+
108
+ wealth_column = TestModel.columns_hash['wealth']
109
+ assert_equal 9, wealth_column.precision
110
+ assert_equal 7, wealth_column.scale
111
+ end
112
+
113
+ if current_adapter?(:SQLite3Adapter)
114
+ def test_change_column_preserve_other_column_precision_and_scale
115
+ connection.add_column 'test_models', 'last_name', :string
116
+ connection.add_column 'test_models', 'wealth', :decimal, :precision => 9, :scale => 7
117
+
118
+ wealth_column = TestModel.columns_hash['wealth']
119
+ assert_equal 9, wealth_column.precision
120
+ assert_equal 7, wealth_column.scale
121
+
122
+ connection.change_column 'test_models', 'last_name', :string, :null => false
123
+ TestModel.reset_column_information
124
+
125
+ wealth_column = TestModel.columns_hash['wealth']
126
+ assert_equal 9, wealth_column.precision
127
+ assert_equal 7, wealth_column.scale
128
+ end
129
+ end
130
+
131
+ unless current_adapter?(:SQLite3Adapter)
132
+ def test_native_types
133
+ add_column "test_models", "first_name", :string
134
+ add_column "test_models", "last_name", :string
135
+ add_column "test_models", "bio", :text
136
+ add_column "test_models", "age", :integer
137
+ add_column "test_models", "height", :float
138
+ add_column "test_models", "wealth", :decimal, :precision => '30', :scale => '10'
139
+ add_column "test_models", "birthday", :datetime
140
+ add_column "test_models", "favorite_day", :date
141
+ add_column "test_models", "moment_of_truth", :datetime
142
+ add_column "test_models", "male", :boolean
143
+
144
+ TestModel.create :first_name => 'bob', :last_name => 'bobsen',
145
+ :bio => "I was born ....", :age => 18, :height => 1.78,
146
+ :wealth => BigDecimal.new("12345678901234567890.0123456789"),
147
+ :birthday => 18.years.ago, :favorite_day => 10.days.ago,
148
+ :moment_of_truth => "1782-10-10 21:40:18", :male => true
149
+
150
+ bob = TestModel.first
151
+ assert_equal 'bob', bob.first_name
152
+ assert_equal 'bobsen', bob.last_name
153
+ assert_equal "I was born ....", bob.bio
154
+ assert_equal 18, bob.age
155
+
156
+ # Test for 30 significant digits (beyond the 16 of float), 10 of them
157
+ # after the decimal place.
158
+
159
+ assert_equal BigDecimal.new("0012345678901234567890.0123456789"), bob.wealth
160
+
161
+ assert_equal true, bob.male?
162
+
163
+ assert_equal String, bob.first_name.class
164
+ assert_equal String, bob.last_name.class
165
+ assert_equal String, bob.bio.class
166
+ assert_equal Fixnum, bob.age.class
167
+ assert_equal Time, bob.birthday.class
168
+
169
+ if current_adapter?(:OracleAdapter)
170
+ # Oracle doesn't differentiate between date/time
171
+ assert_equal Time, bob.favorite_day.class
172
+ else
173
+ assert_equal Date, bob.favorite_day.class
174
+ end
175
+
176
+ assert_instance_of TrueClass, bob.male?
177
+ assert_kind_of BigDecimal, bob.wealth
178
+ end
179
+ end
180
+
181
+ if current_adapter?(:MysqlAdapter, :Mysql2Adapter, :PostgreSQLAdapter)
182
+ def test_out_of_range_limit_should_raise
183
+ assert_raise(ActiveRecordError) { add_column :test_models, :integer_too_big, :integer, :limit => 10 }
184
+
185
+ unless current_adapter?(:PostgreSQLAdapter)
186
+ assert_raise(ActiveRecordError) { add_column :test_models, :text_too_big, :integer, :limit => 0xfffffffff }
187
+ end
188
+ end
189
+ end
190
+ end
191
+ end
192
+ end