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,148 +1,148 @@
1
- require 'cases/helper'
2
-
3
- module ActiveRecord
4
- class Migration
5
- class CreateJoinTableTest < ActiveRecord::TestCase
6
- attr_reader :connection
7
-
8
- def setup
9
- super
10
- @connection = ActiveRecord::Base.connection
11
- end
12
-
13
- teardown do
14
- %w(artists_musics musics_videos catalog).each do |table_name|
15
- connection.drop_table table_name if connection.tables.include?(table_name)
16
- end
17
- end
18
-
19
- def test_create_join_table
20
- connection.create_join_table :artists, :musics
21
-
22
- assert_equal %w(artist_id music_id), connection.columns(:artists_musics).map(&:name).sort
23
- end
24
-
25
- def test_create_join_table_set_not_null_by_default
26
- connection.create_join_table :artists, :musics
27
-
28
- assert_equal [false, false], connection.columns(:artists_musics).map(&:null)
29
- end
30
-
31
- def test_create_join_table_with_strings
32
- connection.create_join_table 'artists', 'musics'
33
-
34
- assert_equal %w(artist_id music_id), connection.columns(:artists_musics).map(&:name).sort
35
- end
36
-
37
- def test_create_join_table_with_symbol_and_string
38
- connection.create_join_table :artists, 'musics'
39
-
40
- assert_equal %w(artist_id music_id), connection.columns(:artists_musics).map(&:name).sort
41
- end
42
-
43
- def test_create_join_table_with_the_proper_order
44
- connection.create_join_table :videos, :musics
45
-
46
- assert_equal %w(music_id video_id), connection.columns(:musics_videos).map(&:name).sort
47
- end
48
-
49
- def test_create_join_table_with_the_table_name
50
- connection.create_join_table :artists, :musics, table_name: :catalog
51
-
52
- assert_equal %w(artist_id music_id), connection.columns(:catalog).map(&:name).sort
53
- end
54
-
55
- def test_create_join_table_with_the_table_name_as_string
56
- connection.create_join_table :artists, :musics, table_name: 'catalog'
57
-
58
- assert_equal %w(artist_id music_id), connection.columns(:catalog).map(&:name).sort
59
- end
60
-
61
- def test_create_join_table_with_column_options
62
- connection.create_join_table :artists, :musics, column_options: {null: true}
63
-
64
- assert_equal [true, true], connection.columns(:artists_musics).map(&:null)
65
- end
66
-
67
- def test_create_join_table_without_indexes
68
- connection.create_join_table :artists, :musics
69
-
70
- assert connection.indexes(:artists_musics).blank?
71
- end
72
-
73
- def test_create_join_table_with_index
74
- connection.create_join_table :artists, :musics do |t|
75
- t.index [:artist_id, :music_id]
76
- end
77
-
78
- assert_equal [%w(artist_id music_id)], connection.indexes(:artists_musics).map(&:columns)
79
- end
80
-
81
- def test_drop_join_table
82
- connection.create_join_table :artists, :musics
83
- connection.drop_join_table :artists, :musics
84
-
85
- assert !connection.tables.include?('artists_musics')
86
- end
87
-
88
- def test_drop_join_table_with_strings
89
- connection.create_join_table :artists, :musics
90
- connection.drop_join_table 'artists', 'musics'
91
-
92
- assert !connection.tables.include?('artists_musics')
93
- end
94
-
95
- def test_drop_join_table_with_the_proper_order
96
- connection.create_join_table :videos, :musics
97
- connection.drop_join_table :videos, :musics
98
-
99
- assert !connection.tables.include?('musics_videos')
100
- end
101
-
102
- def test_drop_join_table_with_the_table_name
103
- connection.create_join_table :artists, :musics, table_name: :catalog
104
- connection.drop_join_table :artists, :musics, table_name: :catalog
105
-
106
- assert !connection.tables.include?('catalog')
107
- end
108
-
109
- def test_drop_join_table_with_the_table_name_as_string
110
- connection.create_join_table :artists, :musics, table_name: 'catalog'
111
- connection.drop_join_table :artists, :musics, table_name: 'catalog'
112
-
113
- assert !connection.tables.include?('catalog')
114
- end
115
-
116
- def test_drop_join_table_with_column_options
117
- connection.create_join_table :artists, :musics, column_options: {null: true}
118
- connection.drop_join_table :artists, :musics, column_options: {null: true}
119
-
120
- assert !connection.tables.include?('artists_musics')
121
- end
122
-
123
- def test_create_and_drop_join_table_with_common_prefix
124
- with_table_cleanup do
125
- connection.create_join_table 'audio_artists', 'audio_musics'
126
- assert_includes connection.tables, 'audio_artists_musics'
127
-
128
- connection.drop_join_table 'audio_artists', 'audio_musics'
129
- assert !connection.tables.include?('audio_artists_musics'), "Should have dropped join table, but didn't"
130
- end
131
- end
132
-
133
- private
134
-
135
- def with_table_cleanup
136
- tables_before = connection.tables
137
-
138
- yield
139
- ensure
140
- tables_after = connection.tables - tables_before
141
-
142
- tables_after.each do |table|
143
- connection.execute "DROP TABLE #{table}"
144
- end
145
- end
146
- end
147
- end
148
- end
1
+ require 'cases/helper'
2
+
3
+ module ActiveRecord
4
+ class Migration
5
+ class CreateJoinTableTest < ActiveRecord::TestCase
6
+ attr_reader :connection
7
+
8
+ def setup
9
+ super
10
+ @connection = ActiveRecord::Base.connection
11
+ end
12
+
13
+ teardown do
14
+ %w(artists_musics musics_videos catalog).each do |table_name|
15
+ connection.drop_table table_name if connection.tables.include?(table_name)
16
+ end
17
+ end
18
+
19
+ def test_create_join_table
20
+ connection.create_join_table :artists, :musics
21
+
22
+ assert_equal %w(artist_id music_id), connection.columns(:artists_musics).map(&:name).sort
23
+ end
24
+
25
+ def test_create_join_table_set_not_null_by_default
26
+ connection.create_join_table :artists, :musics
27
+
28
+ assert_equal [false, false], connection.columns(:artists_musics).map(&:null)
29
+ end
30
+
31
+ def test_create_join_table_with_strings
32
+ connection.create_join_table 'artists', 'musics'
33
+
34
+ assert_equal %w(artist_id music_id), connection.columns(:artists_musics).map(&:name).sort
35
+ end
36
+
37
+ def test_create_join_table_with_symbol_and_string
38
+ connection.create_join_table :artists, 'musics'
39
+
40
+ assert_equal %w(artist_id music_id), connection.columns(:artists_musics).map(&:name).sort
41
+ end
42
+
43
+ def test_create_join_table_with_the_proper_order
44
+ connection.create_join_table :videos, :musics
45
+
46
+ assert_equal %w(music_id video_id), connection.columns(:musics_videos).map(&:name).sort
47
+ end
48
+
49
+ def test_create_join_table_with_the_table_name
50
+ connection.create_join_table :artists, :musics, table_name: :catalog
51
+
52
+ assert_equal %w(artist_id music_id), connection.columns(:catalog).map(&:name).sort
53
+ end
54
+
55
+ def test_create_join_table_with_the_table_name_as_string
56
+ connection.create_join_table :artists, :musics, table_name: 'catalog'
57
+
58
+ assert_equal %w(artist_id music_id), connection.columns(:catalog).map(&:name).sort
59
+ end
60
+
61
+ def test_create_join_table_with_column_options
62
+ connection.create_join_table :artists, :musics, column_options: {null: true}
63
+
64
+ assert_equal [true, true], connection.columns(:artists_musics).map(&:null)
65
+ end
66
+
67
+ def test_create_join_table_without_indexes
68
+ connection.create_join_table :artists, :musics
69
+
70
+ assert connection.indexes(:artists_musics).blank?
71
+ end
72
+
73
+ def test_create_join_table_with_index
74
+ connection.create_join_table :artists, :musics do |t|
75
+ t.index [:artist_id, :music_id]
76
+ end
77
+
78
+ assert_equal [%w(artist_id music_id)], connection.indexes(:artists_musics).map(&:columns)
79
+ end
80
+
81
+ def test_drop_join_table
82
+ connection.create_join_table :artists, :musics
83
+ connection.drop_join_table :artists, :musics
84
+
85
+ assert !connection.tables.include?('artists_musics')
86
+ end
87
+
88
+ def test_drop_join_table_with_strings
89
+ connection.create_join_table :artists, :musics
90
+ connection.drop_join_table 'artists', 'musics'
91
+
92
+ assert !connection.tables.include?('artists_musics')
93
+ end
94
+
95
+ def test_drop_join_table_with_the_proper_order
96
+ connection.create_join_table :videos, :musics
97
+ connection.drop_join_table :videos, :musics
98
+
99
+ assert !connection.tables.include?('musics_videos')
100
+ end
101
+
102
+ def test_drop_join_table_with_the_table_name
103
+ connection.create_join_table :artists, :musics, table_name: :catalog
104
+ connection.drop_join_table :artists, :musics, table_name: :catalog
105
+
106
+ assert !connection.tables.include?('catalog')
107
+ end
108
+
109
+ def test_drop_join_table_with_the_table_name_as_string
110
+ connection.create_join_table :artists, :musics, table_name: 'catalog'
111
+ connection.drop_join_table :artists, :musics, table_name: 'catalog'
112
+
113
+ assert !connection.tables.include?('catalog')
114
+ end
115
+
116
+ def test_drop_join_table_with_column_options
117
+ connection.create_join_table :artists, :musics, column_options: {null: true}
118
+ connection.drop_join_table :artists, :musics, column_options: {null: true}
119
+
120
+ assert !connection.tables.include?('artists_musics')
121
+ end
122
+
123
+ def test_create_and_drop_join_table_with_common_prefix
124
+ with_table_cleanup do
125
+ connection.create_join_table 'audio_artists', 'audio_musics'
126
+ assert_includes connection.tables, 'audio_artists_musics'
127
+
128
+ connection.drop_join_table 'audio_artists', 'audio_musics'
129
+ assert !connection.tables.include?('audio_artists_musics'), "Should have dropped join table, but didn't"
130
+ end
131
+ end
132
+
133
+ private
134
+
135
+ def with_table_cleanup
136
+ tables_before = connection.tables
137
+
138
+ yield
139
+ ensure
140
+ tables_after = connection.tables - tables_before
141
+
142
+ tables_after.each do |table|
143
+ connection.execute "DROP TABLE #{table}"
144
+ end
145
+ end
146
+ end
147
+ end
148
+ end
@@ -1,325 +1,325 @@
1
- require 'cases/helper'
2
- require 'support/ddl_helper'
3
- require 'support/schema_dumping_helper'
4
-
5
- if ActiveRecord::Base.connection.supports_foreign_keys?
6
- module ActiveRecord
7
- class Migration
8
- class ForeignKeyTest < ActiveRecord::TestCase
9
- include DdlHelper
10
- include SchemaDumpingHelper
11
-
12
- class Rocket < ActiveRecord::Base
13
- end
14
-
15
- class Astronaut < ActiveRecord::Base
16
- end
17
-
18
- setup do
19
- @connection = ActiveRecord::Base.connection
20
- @connection.create_table "rockets", force: true do |t|
21
- t.string :name
22
- end
23
-
24
- @connection.create_table "astronauts", force: true do |t|
25
- t.string :name
26
- t.references :rocket
27
- end
28
- end
29
-
30
-
31
- teardown do
32
- if defined?(@connection)
33
- #@connection.drop_table "astronauts" if @connection.table_exists? 'astronauts'
34
- #@connection.drop_table "rockets" if @connection.table_exists? 'rockets'
35
- end
36
- end
37
-
38
- def test_foreign_keys
39
- foreign_keys = @connection.foreign_keys("fk_test_has_fk")
40
- assert_equal 1, foreign_keys.size
41
-
42
- fk = foreign_keys.first
43
- if current_adapter?(:IBM_DBAdapter)
44
- assert_equal "fk_test_has_fk".upcase, fk.from_table.upcase
45
- assert_equal "fk_test_has_pk".upcase, fk.to_table.upcase
46
- else
47
- assert_equal "fk_test_has_fk", fk.from_table
48
- assert_equal "fk_test_has_pk", fk.to_table
49
- end
50
-
51
- assert_equal "fk_id", fk.column
52
- assert_equal "pk_id", fk.primary_key
53
- assert_equal "fk_name", fk.name
54
- end
55
-
56
- def test_add_foreign_key_inferes_column
57
- @connection.add_foreign_key :astronauts, :rockets
58
-
59
- foreign_keys = @connection.foreign_keys("astronauts")
60
- assert_equal 1, foreign_keys.size
61
-
62
- fk = foreign_keys.first
63
- if current_adapter?(:IBM_DBAdapter)
64
- assert_equal "astronauts".upcase, fk.from_table.upcase
65
- else
66
- assert_equal "astronauts", fk.from_table
67
- end
68
- assert_equal "rockets", fk.to_table
69
- assert_equal "rocket_id", fk.column
70
- assert_equal "id", fk.primary_key
71
- assert_equal("fk_rails_78146ddd2e", fk.name)
72
- end
73
-
74
- def test_add_foreign_key_with_column
75
- @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id"
76
-
77
- foreign_keys = @connection.foreign_keys("astronauts")
78
- assert_equal 1, foreign_keys.size
79
-
80
- fk = foreign_keys.first
81
- if current_adapter?(:IBM_DBAdapter)
82
- assert_equal "astronauts".upcase, fk.from_table.upcase
83
- else
84
- assert_equal "astronauts", fk.from_table
85
- end
86
- assert_equal "rockets", fk.to_table
87
- assert_equal "rocket_id", fk.column
88
- assert_equal "id", fk.primary_key
89
- assert_equal("fk_rails_78146ddd2e", fk.name)
90
- end
91
-
92
- def test_add_foreign_key_with_non_standard_primary_key
93
- #@connection.create_table :space_shuttles, force: true, id: false do |t|
94
- # t.primary_key :pk
95
- #end
96
- with_example_table @connection, "space_shuttles", "pk integer PRIMARY KEY" do
97
- @connection.add_foreign_key(:astronauts, :space_shuttles,
98
- column: "rocket_id", primary_key: "pk", name: "custom_pk")
99
-
100
- foreign_keys = @connection.foreign_keys("astronauts")
101
- assert_equal 1, foreign_keys.size
102
-
103
- fk = foreign_keys.first
104
- if current_adapter?(:IBM_DBAdapter)
105
- assert_equal "astronauts".upcase, fk.from_table.upcase
106
- else
107
- assert_equal "astronauts", fk.from_table
108
- end
109
- assert_equal "space_shuttles", fk.to_table
110
- assert_equal "pk", fk.primary_key
111
-
112
- @connection.remove_foreign_key :astronauts, name: "custom_pk"
113
- end
114
- end
115
-
116
- def test_add_on_delete_restrict_foreign_key
117
- @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :restrict
118
-
119
- foreign_keys = @connection.foreign_keys("astronauts")
120
- assert_equal 1, foreign_keys.size
121
-
122
- fk = foreign_keys.first
123
- if current_adapter?(:MysqlAdapter, :Mysql2Adapter)
124
- # ON DELETE RESTRICT is the default on MySQL
125
- assert_equal "noaction", fk.on_delete
126
- elsif current_adapter?(:IBM_DBAdapter)
127
- assert_equal :noaction, fk.on_update
128
- else
129
- assert_equal :restrict, fk.on_delete
130
- end
131
- end
132
-
133
- def test_add_on_delete_cascade_foreign_key
134
- @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :cascade
135
-
136
- foreign_keys = @connection.foreign_keys("astronauts")
137
- assert_equal 1, foreign_keys.size
138
-
139
- fk = foreign_keys.first
140
-
141
- if current_adapter?(:IBM_DBAdapter)
142
- assert_equal :noaction, fk.on_update
143
- else
144
- assert_equal :cascade, fk.on_delete
145
- end
146
-
147
- end
148
-
149
- def test_add_on_delete_nullify_foreign_key
150
- @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :nullify
151
-
152
- foreign_keys = @connection.foreign_keys("astronauts")
153
- assert_equal 1, foreign_keys.size
154
-
155
- fk = foreign_keys.first
156
-
157
- if current_adapter?(:IBM_DBAdapter)
158
- assert_equal :noaction, fk.on_update
159
- else
160
- assert_equal :nullify, fk.on_delete
161
- end
162
-
163
- end
164
-
165
- def test_on_update_and_on_delete_raises_with_invalid_values
166
- assert_raises ArgumentError do
167
- @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :invalid
168
- end
169
-
170
- assert_raises ArgumentError do
171
- @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_update: :invalid
172
- end
173
- end
174
-
175
- def test_add_foreign_key_with_on_update
176
- #@connection.add_foreign_key :astronauts, :rockets, column: "rocket_id" , on_update: :nullify
177
- @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id"
178
-
179
- foreign_keys = @connection.foreign_keys("astronauts")
180
- assert_equal 1, foreign_keys.size
181
-
182
- fk = foreign_keys.first
183
-
184
- if current_adapter?(:IBM_DBAdapter)
185
- assert_equal :noaction, fk.on_update
186
- else
187
- assert_equal :nullify, fk.on_update
188
- end
189
-
190
- end
191
-
192
- def test_remove_foreign_key_inferes_column
193
- @connection.add_foreign_key :astronauts, :rockets
194
-
195
- assert_equal 1, @connection.foreign_keys("astronauts").size
196
- @connection.remove_foreign_key :astronauts, :rockets
197
- assert_equal [], @connection.foreign_keys("astronauts")
198
- end
199
-
200
- def test_remove_foreign_key_by_column
201
- @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id"
202
-
203
- assert_equal 1, @connection.foreign_keys("astronauts").size
204
- @connection.remove_foreign_key :astronauts, column: "rocket_id"
205
- assert_equal [], @connection.foreign_keys("astronauts")
206
- end
207
-
208
- def test_remove_foreign_key_by_symbol_column
209
- @connection.add_foreign_key :astronauts, :rockets, column: :rocket_id
210
-
211
- assert_equal 1, @connection.foreign_keys("astronauts").size
212
- @connection.remove_foreign_key :astronauts, column: :rocket_id
213
- assert_equal [], @connection.foreign_keys("astronauts")
214
- end
215
-
216
- def test_remove_foreign_key_by_name
217
- @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", name: "fancy_named_fk"
218
-
219
- assert_equal 1, @connection.foreign_keys("astronauts").size
220
- @connection.remove_foreign_key :astronauts, name: "fancy_named_fk"
221
- assert_equal [], @connection.foreign_keys("astronauts")
222
- end
223
-
224
- def test_remove_foreign_non_existing_foreign_key_raises
225
- assert_raises ArgumentError do
226
- @connection.remove_foreign_key :astronauts, :rockets
227
- end
228
- end
229
-
230
- def test_schema_dumping
231
- @connection.add_foreign_key :astronauts, :rockets
232
- output = dump_table_schema "astronauts"
233
- assert_match %r{\s+add_foreign_key "astronauts", "rockets"$}, output
234
- end
235
-
236
- def test_schema_dumping_with_options
237
- output = dump_table_schema "fk_test_has_fk"
238
- assert_match %r{\s+add_foreign_key "fk_test_has_fk", "fk_test_has_pk", column: "fk_id", primary_key: "pk_id", name: "fk_name"$}, output
239
- end
240
-
241
- def test_schema_dumping_on_delete_and_on_update_options
242
- #@connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :nullify, on_update: :cascade
243
- @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :nullify, on_update: :restrict
244
-
245
- output = dump_table_schema "astronauts"
246
- #assert_match %r{\s+add_foreign_key "astronauts",.+on_update: :cascade,.+on_delete: :nullify$}, output
247
- assert_match %r{\s+add_foreign_key "astronauts",.+on_update: :restrict,.+on_delete: :nullify$}, output
248
- end
249
-
250
- class CreateCitiesAndHousesMigration < ActiveRecord::Migration
251
- def change
252
- create_table("cities") { |t| }
253
-
254
- create_table("houses") do |t|
255
- t.column :city_id, :integer
256
- end
257
- add_foreign_key :houses, :cities, column: "city_id"
258
- end
259
- end
260
-
261
- def test_add_foreign_key_is_reversible
262
- migration = CreateCitiesAndHousesMigration.new
263
- silence_stream($stdout) { migration.migrate(:up) }
264
- assert_equal 1, @connection.foreign_keys("houses").size
265
- ensure
266
- silence_stream($stdout) { migration.migrate(:down) }
267
- end
268
- class CreateSchoolsAndClassesMigration < ActiveRecord::Migration
269
- def change
270
- create_table(:schools)
271
-
272
- create_table(:classes) do |t|
273
- t.column :school_id, :integer
274
- end
275
- add_foreign_key :classes, :schools
276
- end
277
- end
278
-
279
- def test_add_foreign_key_with_prefix
280
- ActiveRecord::Base.table_name_prefix = 'p_'
281
- migration = CreateSchoolsAndClassesMigration.new
282
- silence_stream($stdout) { migration.migrate(:up) }
283
- assert_equal 1, @connection.foreign_keys("p_classes").size
284
- ensure
285
- silence_stream($stdout) { migration.migrate(:down) }
286
- ActiveRecord::Base.table_name_prefix = nil
287
- end
288
-
289
- def test_add_foreign_key_with_suffix
290
- ActiveRecord::Base.table_name_suffix = '_s'
291
- migration = CreateSchoolsAndClassesMigration.new
292
- silence_stream($stdout) { migration.migrate(:up) }
293
- assert_equal 1, @connection.foreign_keys("classes_s").size
294
- ensure
295
- silence_stream($stdout) { migration.migrate(:down) }
296
- ActiveRecord::Base.table_name_suffix = nil
297
- end
298
- end
299
- end
300
- end
301
- else
302
- module ActiveRecord
303
- class Migration
304
- class NoForeignKeySupportTest < ActiveRecord::TestCase
305
- setup do
306
- @connection = ActiveRecord::Base.connection
307
- end
308
-
309
- def test_add_foreign_key_should_be_noop
310
- @connection.add_foreign_key :clubs, :categories
311
- end
312
-
313
- def test_remove_foreign_key_should_be_noop
314
- @connection.remove_foreign_key :clubs, :categories
315
- end
316
-
317
- def test_foreign_keys_should_raise_not_implemented
318
- assert_raises NotImplementedError do
319
- @connection.foreign_keys("clubs")
320
- end
321
- end
322
- end
323
- end
324
- end
325
- end
1
+ require 'cases/helper'
2
+ require 'support/ddl_helper'
3
+ require 'support/schema_dumping_helper'
4
+
5
+ if ActiveRecord::Base.connection.supports_foreign_keys?
6
+ module ActiveRecord
7
+ class Migration
8
+ class ForeignKeyTest < ActiveRecord::TestCase
9
+ include DdlHelper
10
+ include SchemaDumpingHelper
11
+
12
+ class Rocket < ActiveRecord::Base
13
+ end
14
+
15
+ class Astronaut < ActiveRecord::Base
16
+ end
17
+
18
+ setup do
19
+ @connection = ActiveRecord::Base.connection
20
+ @connection.create_table "rockets", force: true do |t|
21
+ t.string :name
22
+ end
23
+
24
+ @connection.create_table "astronauts", force: true do |t|
25
+ t.string :name
26
+ t.references :rocket
27
+ end
28
+ end
29
+
30
+
31
+ teardown do
32
+ if defined?(@connection)
33
+ #@connection.drop_table "astronauts" if @connection.table_exists? 'astronauts'
34
+ #@connection.drop_table "rockets" if @connection.table_exists? 'rockets'
35
+ end
36
+ end
37
+
38
+ def test_foreign_keys
39
+ foreign_keys = @connection.foreign_keys("fk_test_has_fk")
40
+ assert_equal 1, foreign_keys.size
41
+
42
+ fk = foreign_keys.first
43
+ if current_adapter?(:IBM_DBAdapter)
44
+ assert_equal "fk_test_has_fk".upcase, fk.from_table.upcase
45
+ assert_equal "fk_test_has_pk".upcase, fk.to_table.upcase
46
+ else
47
+ assert_equal "fk_test_has_fk", fk.from_table
48
+ assert_equal "fk_test_has_pk", fk.to_table
49
+ end
50
+
51
+ assert_equal "fk_id", fk.column
52
+ assert_equal "pk_id", fk.primary_key
53
+ assert_equal "fk_name", fk.name
54
+ end
55
+
56
+ def test_add_foreign_key_inferes_column
57
+ @connection.add_foreign_key :astronauts, :rockets
58
+
59
+ foreign_keys = @connection.foreign_keys("astronauts")
60
+ assert_equal 1, foreign_keys.size
61
+
62
+ fk = foreign_keys.first
63
+ if current_adapter?(:IBM_DBAdapter)
64
+ assert_equal "astronauts".upcase, fk.from_table.upcase
65
+ else
66
+ assert_equal "astronauts", fk.from_table
67
+ end
68
+ assert_equal "rockets", fk.to_table
69
+ assert_equal "rocket_id", fk.column
70
+ assert_equal "id", fk.primary_key
71
+ assert_equal("fk_rails_78146ddd2e", fk.name)
72
+ end
73
+
74
+ def test_add_foreign_key_with_column
75
+ @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id"
76
+
77
+ foreign_keys = @connection.foreign_keys("astronauts")
78
+ assert_equal 1, foreign_keys.size
79
+
80
+ fk = foreign_keys.first
81
+ if current_adapter?(:IBM_DBAdapter)
82
+ assert_equal "astronauts".upcase, fk.from_table.upcase
83
+ else
84
+ assert_equal "astronauts", fk.from_table
85
+ end
86
+ assert_equal "rockets", fk.to_table
87
+ assert_equal "rocket_id", fk.column
88
+ assert_equal "id", fk.primary_key
89
+ assert_equal("fk_rails_78146ddd2e", fk.name)
90
+ end
91
+
92
+ def test_add_foreign_key_with_non_standard_primary_key
93
+ #@connection.create_table :space_shuttles, force: true, id: false do |t|
94
+ # t.primary_key :pk
95
+ #end
96
+ with_example_table @connection, "space_shuttles", "pk integer PRIMARY KEY" do
97
+ @connection.add_foreign_key(:astronauts, :space_shuttles,
98
+ column: "rocket_id", primary_key: "pk", name: "custom_pk")
99
+
100
+ foreign_keys = @connection.foreign_keys("astronauts")
101
+ assert_equal 1, foreign_keys.size
102
+
103
+ fk = foreign_keys.first
104
+ if current_adapter?(:IBM_DBAdapter)
105
+ assert_equal "astronauts".upcase, fk.from_table.upcase
106
+ else
107
+ assert_equal "astronauts", fk.from_table
108
+ end
109
+ assert_equal "space_shuttles", fk.to_table
110
+ assert_equal "pk", fk.primary_key
111
+
112
+ @connection.remove_foreign_key :astronauts, name: "custom_pk"
113
+ end
114
+ end
115
+
116
+ def test_add_on_delete_restrict_foreign_key
117
+ @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :restrict
118
+
119
+ foreign_keys = @connection.foreign_keys("astronauts")
120
+ assert_equal 1, foreign_keys.size
121
+
122
+ fk = foreign_keys.first
123
+ if current_adapter?(:MysqlAdapter, :Mysql2Adapter)
124
+ # ON DELETE RESTRICT is the default on MySQL
125
+ assert_equal "noaction", fk.on_delete
126
+ elsif current_adapter?(:IBM_DBAdapter)
127
+ assert_equal :noaction, fk.on_update
128
+ else
129
+ assert_equal :restrict, fk.on_delete
130
+ end
131
+ end
132
+
133
+ def test_add_on_delete_cascade_foreign_key
134
+ @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :cascade
135
+
136
+ foreign_keys = @connection.foreign_keys("astronauts")
137
+ assert_equal 1, foreign_keys.size
138
+
139
+ fk = foreign_keys.first
140
+
141
+ if current_adapter?(:IBM_DBAdapter)
142
+ assert_equal :noaction, fk.on_update
143
+ else
144
+ assert_equal :cascade, fk.on_delete
145
+ end
146
+
147
+ end
148
+
149
+ def test_add_on_delete_nullify_foreign_key
150
+ @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :nullify
151
+
152
+ foreign_keys = @connection.foreign_keys("astronauts")
153
+ assert_equal 1, foreign_keys.size
154
+
155
+ fk = foreign_keys.first
156
+
157
+ if current_adapter?(:IBM_DBAdapter)
158
+ assert_equal :noaction, fk.on_update
159
+ else
160
+ assert_equal :nullify, fk.on_delete
161
+ end
162
+
163
+ end
164
+
165
+ def test_on_update_and_on_delete_raises_with_invalid_values
166
+ assert_raises ArgumentError do
167
+ @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :invalid
168
+ end
169
+
170
+ assert_raises ArgumentError do
171
+ @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_update: :invalid
172
+ end
173
+ end
174
+
175
+ def test_add_foreign_key_with_on_update
176
+ #@connection.add_foreign_key :astronauts, :rockets, column: "rocket_id" , on_update: :nullify
177
+ @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id"
178
+
179
+ foreign_keys = @connection.foreign_keys("astronauts")
180
+ assert_equal 1, foreign_keys.size
181
+
182
+ fk = foreign_keys.first
183
+
184
+ if current_adapter?(:IBM_DBAdapter)
185
+ assert_equal :noaction, fk.on_update
186
+ else
187
+ assert_equal :nullify, fk.on_update
188
+ end
189
+
190
+ end
191
+
192
+ def test_remove_foreign_key_inferes_column
193
+ @connection.add_foreign_key :astronauts, :rockets
194
+
195
+ assert_equal 1, @connection.foreign_keys("astronauts").size
196
+ @connection.remove_foreign_key :astronauts, :rockets
197
+ assert_equal [], @connection.foreign_keys("astronauts")
198
+ end
199
+
200
+ def test_remove_foreign_key_by_column
201
+ @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id"
202
+
203
+ assert_equal 1, @connection.foreign_keys("astronauts").size
204
+ @connection.remove_foreign_key :astronauts, column: "rocket_id"
205
+ assert_equal [], @connection.foreign_keys("astronauts")
206
+ end
207
+
208
+ def test_remove_foreign_key_by_symbol_column
209
+ @connection.add_foreign_key :astronauts, :rockets, column: :rocket_id
210
+
211
+ assert_equal 1, @connection.foreign_keys("astronauts").size
212
+ @connection.remove_foreign_key :astronauts, column: :rocket_id
213
+ assert_equal [], @connection.foreign_keys("astronauts")
214
+ end
215
+
216
+ def test_remove_foreign_key_by_name
217
+ @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", name: "fancy_named_fk"
218
+
219
+ assert_equal 1, @connection.foreign_keys("astronauts").size
220
+ @connection.remove_foreign_key :astronauts, name: "fancy_named_fk"
221
+ assert_equal [], @connection.foreign_keys("astronauts")
222
+ end
223
+
224
+ def test_remove_foreign_non_existing_foreign_key_raises
225
+ assert_raises ArgumentError do
226
+ @connection.remove_foreign_key :astronauts, :rockets
227
+ end
228
+ end
229
+
230
+ def test_schema_dumping
231
+ @connection.add_foreign_key :astronauts, :rockets
232
+ output = dump_table_schema "astronauts"
233
+ assert_match %r{\s+add_foreign_key "astronauts", "rockets"$}, output
234
+ end
235
+
236
+ def test_schema_dumping_with_options
237
+ output = dump_table_schema "fk_test_has_fk"
238
+ assert_match %r{\s+add_foreign_key "fk_test_has_fk", "fk_test_has_pk", column: "fk_id", primary_key: "pk_id", name: "fk_name"$}, output
239
+ end
240
+
241
+ def test_schema_dumping_on_delete_and_on_update_options
242
+ #@connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :nullify, on_update: :cascade
243
+ @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :nullify, on_update: :restrict
244
+
245
+ output = dump_table_schema "astronauts"
246
+ #assert_match %r{\s+add_foreign_key "astronauts",.+on_update: :cascade,.+on_delete: :nullify$}, output
247
+ assert_match %r{\s+add_foreign_key "astronauts",.+on_update: :restrict,.+on_delete: :nullify$}, output
248
+ end
249
+
250
+ class CreateCitiesAndHousesMigration < ActiveRecord::Migration
251
+ def change
252
+ create_table("cities") { |t| }
253
+
254
+ create_table("houses") do |t|
255
+ t.column :city_id, :integer
256
+ end
257
+ add_foreign_key :houses, :cities, column: "city_id"
258
+ end
259
+ end
260
+
261
+ def test_add_foreign_key_is_reversible
262
+ migration = CreateCitiesAndHousesMigration.new
263
+ silence_stream($stdout) { migration.migrate(:up) }
264
+ assert_equal 1, @connection.foreign_keys("houses").size
265
+ ensure
266
+ silence_stream($stdout) { migration.migrate(:down) }
267
+ end
268
+ class CreateSchoolsAndClassesMigration < ActiveRecord::Migration
269
+ def change
270
+ create_table(:schools)
271
+
272
+ create_table(:classes) do |t|
273
+ t.column :school_id, :integer
274
+ end
275
+ add_foreign_key :classes, :schools
276
+ end
277
+ end
278
+
279
+ def test_add_foreign_key_with_prefix
280
+ ActiveRecord::Base.table_name_prefix = 'p_'
281
+ migration = CreateSchoolsAndClassesMigration.new
282
+ silence_stream($stdout) { migration.migrate(:up) }
283
+ assert_equal 1, @connection.foreign_keys("p_classes").size
284
+ ensure
285
+ silence_stream($stdout) { migration.migrate(:down) }
286
+ ActiveRecord::Base.table_name_prefix = nil
287
+ end
288
+
289
+ def test_add_foreign_key_with_suffix
290
+ ActiveRecord::Base.table_name_suffix = '_s'
291
+ migration = CreateSchoolsAndClassesMigration.new
292
+ silence_stream($stdout) { migration.migrate(:up) }
293
+ assert_equal 1, @connection.foreign_keys("classes_s").size
294
+ ensure
295
+ silence_stream($stdout) { migration.migrate(:down) }
296
+ ActiveRecord::Base.table_name_suffix = nil
297
+ end
298
+ end
299
+ end
300
+ end
301
+ else
302
+ module ActiveRecord
303
+ class Migration
304
+ class NoForeignKeySupportTest < ActiveRecord::TestCase
305
+ setup do
306
+ @connection = ActiveRecord::Base.connection
307
+ end
308
+
309
+ def test_add_foreign_key_should_be_noop
310
+ @connection.add_foreign_key :clubs, :categories
311
+ end
312
+
313
+ def test_remove_foreign_key_should_be_noop
314
+ @connection.remove_foreign_key :clubs, :categories
315
+ end
316
+
317
+ def test_foreign_keys_should_raise_not_implemented
318
+ assert_raises NotImplementedError do
319
+ @connection.foreign_keys("clubs")
320
+ end
321
+ end
322
+ end
323
+ end
324
+ end
325
+ end