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,360 +1,328 @@
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
-
39
- def test_foreign_keys
40
- foreign_keys = @connection.foreign_keys("fk_test_has_fk")
41
- assert_equal 1, foreign_keys.size
42
-
43
- fk = foreign_keys.first
44
- if current_adapter?(:IBM_DBAdapter)
45
- assert_equal "fk_test_has_fk".upcase, fk.from_table.upcase
46
- assert_equal "fk_test_has_pk".upcase, fk.to_table.upcase
47
- assert_equal "fk_id".upcase, fk.column.upcase
48
- assert_equal "pk_id".upcase, fk.primary_key.upcase
49
- assert_equal "fk_name".upcase, fk.name.upcase
50
- else
51
- assert_equal "fk_test_has_fk", fk.from_table
52
- assert_equal "fk_test_has_pk", fk.to_table
53
- assert_equal "fk_id", fk.column
54
- assert_equal "pk_id", fk.primary_key
55
- assert_equal "fk_name", fk.name
56
- end
57
- end
58
-
59
-
60
- def test_add_foreign_key_inferes_column
61
- @connection.add_foreign_key :astronauts, :rockets
62
-
63
- foreign_keys = @connection.foreign_keys("astronauts")
64
- assert_equal 1, foreign_keys.size
65
-
66
- fk = foreign_keys.first
67
-
68
- if current_adapter?(:IBM_DBAdapter)
69
- assert_equal "astronauts".upcase, fk.from_table.upcase
70
- else
71
- assert_equal "astronauts", fk.from_table
72
- end
73
-
74
- if current_adapter?(:IBM_DBAdapter)
75
- assert_equal "rockets".upcase, fk.to_table.upcase
76
- assert_equal "rocket_id".upcase, fk.column.upcase
77
- assert_equal "id".upcase, fk.primary_key.upcase
78
- assert_equal("fk_rails_78146ddd2e".upcase, fk.name.upcase)
79
- else
80
- assert_equal "rockets", fk.to_table
81
- assert_equal "rocket_id", fk.column
82
- assert_equal "id", fk.primary_key
83
- assert_equal("fk_rails_78146ddd2e", fk.name)
84
- end
85
-
86
- end
87
-
88
-
89
-
90
- def test_add_foreign_key_with_column
91
- @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id"
92
-
93
- foreign_keys = @connection.foreign_keys("astronauts")
94
- assert_equal 1, foreign_keys.size
95
-
96
- fk = foreign_keys.first
97
- if current_adapter?(:IBM_DBAdapter)
98
- assert_equal "astronauts".upcase, fk.from_table.upcase
99
- assert_equal "rockets".upcase, fk.to_table.upcase
100
- assert_equal "rocket_id".upcase, fk.column.upcase
101
- assert_equal "id".upcase, fk.primary_key.upcase
102
- assert_equal("fk_rails_78146ddd2e".upcase, fk.name.upcase)
103
- else
104
- assert_equal "astronauts", fk.from_table
105
- assert_equal "rockets", fk.to_table
106
- assert_equal "rocket_id", fk.column
107
- assert_equal "id", fk.primary_key
108
- assert_equal("fk_rails_78146ddd2e", fk.name)
109
- end
110
-
111
- end
112
-
113
- def test_add_foreign_key_with_non_standard_primary_key
114
- if current_adapter?(:IBM_DBAdapter)
115
- @connection.create_table :space_shuttles, force: true, id: false do |t|
116
- t.primary_key :pk
117
- end
118
- @connection.add_foreign_key(:astronauts, :space_shuttles,
119
- column: "rocket_id", primary_key: "pk", name: "custom_pk")
120
- foreign_keys = @connection.foreign_keys("astronauts")
121
- assert_equal 1, foreign_keys.size
122
- fk = foreign_keys.first
123
- assert_equal "astronauts".upcase, fk.from_table.upcase
124
- assert_equal "space_shuttles".upcase, fk.to_table.upcase
125
- assert_equal "pk".upcase, fk.primary_key.upcase
126
- @connection.remove_foreign_key :astronauts, name: "custom_pk"
127
- else
128
- with_example_table @connection, "space_shuttles", "pk integer PRIMARY KEY" do
129
- @connection.add_foreign_key(:astronauts, :space_shuttles,
130
- column: "rocket_id", primary_key: "pk", name: "custom_pk")
131
- foreign_keys = @connection.foreign_keys("astronauts")
132
- assert_equal 1, foreign_keys.size
133
- fk = foreign_keys.first
134
- assert_equal "astronauts", fk.from_table
135
- assert_equal "space_shuttles", fk.to_table
136
- assert_equal "pk", fk.primary_key
137
- @connection.remove_foreign_key :astronauts, name: "custom_pk"
138
- end
139
- end
140
- end
141
-
142
- def test_add_on_delete_restrict_foreign_key
143
- @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :restrict
144
-
145
- foreign_keys = @connection.foreign_keys("astronauts")
146
- assert_equal 1, foreign_keys.size
147
-
148
- fk = foreign_keys.first
149
- if current_adapter?(:MysqlAdapter, :Mysql2Adapter)
150
- # ON DELETE RESTRICT is the default on MySQL
151
- assert_equal "noaction", fk.on_delete
152
- elsif current_adapter?(:IBM_DBAdapter)
153
- assert_equal :noaction, fk.on_delete
154
- else
155
- assert_equal :restrict, fk.on_delete
156
- end
157
- end
158
-
159
- def test_add_on_delete_cascade_foreign_key
160
- @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :cascade
161
-
162
- foreign_keys = @connection.foreign_keys("astronauts")
163
- assert_equal 1, foreign_keys.size
164
-
165
- fk = foreign_keys.first
166
- if current_adapter?(:IBM_DBAdapter)
167
- assert_equal :noaction, fk.on_delete
168
- else
169
- assert_equal :cascade, fk.on_delete
170
- end
171
-
172
- end
173
-
174
- def test_add_on_delete_nullify_foreign_key
175
- @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :nullify
176
-
177
- foreign_keys = @connection.foreign_keys("astronauts")
178
- assert_equal 1, foreign_keys.size
179
-
180
- fk = foreign_keys.first
181
-
182
- if current_adapter?(:IBM_DBAdapter)
183
- assert_equal :noaction, fk.on_delete
184
- else
185
- assert_equal :nullify, fk.on_delete
186
- end
187
-
188
- end
189
-
190
- def test_on_update_and_on_delete_raises_with_invalid_values
191
- assert_raises ArgumentError do
192
- @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :invalid
193
- end
194
-
195
- assert_raises ArgumentError do
196
- @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_update: :invalid
197
- end
198
- end
199
-
200
- def test_add_foreign_key_with_on_update
201
- #@connection.add_foreign_key :astronauts, :rockets, column: "rocket_id" , on_update: :nullify
202
- @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id"
203
-
204
- foreign_keys = @connection.foreign_keys("astronauts")
205
- assert_equal 1, foreign_keys.size
206
-
207
- fk = foreign_keys.first
208
- if current_adapter?(:IBM_DBAdapter)
209
- assert_equal :noaction, fk.on_update
210
- else
211
- assert_equal :nullify, fk.on_update
212
- end
213
- end
214
-
215
- def test_remove_foreign_key_inferes_column
216
- @connection.add_foreign_key :astronauts, :rockets
217
-
218
- assert_equal 1, @connection.foreign_keys("astronauts").size
219
- @connection.remove_foreign_key :astronauts, :rockets
220
- assert_equal [], @connection.foreign_keys("astronauts")
221
- end
222
-
223
- def test_remove_foreign_key_by_column
224
- @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id"
225
-
226
- assert_equal 1, @connection.foreign_keys("astronauts").size
227
- @connection.remove_foreign_key :astronauts, column: "rocket_id"
228
- assert_equal [], @connection.foreign_keys("astronauts")
229
- end
230
-
231
- def test_remove_foreign_key_by_symbol_column
232
- @connection.add_foreign_key :astronauts, :rockets, column: :rocket_id
233
-
234
- if current_adapter?(:IBM_DBAdapter)
235
- foreign_keys = @connection.foreign_keys("astronauts")
236
- assert_equal 1, foreign_keys.size
237
- @connection.remove_foreign_key "astronauts".upcase, column: "rocket_id".upcase
238
- else
239
- assert_equal 1, @connection.foreign_keys("astronauts").size
240
- @connection.remove_foreign_key :astronauts, column: :rocket_id
241
- end
242
-
243
- assert_equal [], @connection.foreign_keys("astronauts")
244
- end
245
-
246
- def test_remove_foreign_key_by_name
247
- @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", name: "fancy_named_fk"
248
-
249
- assert_equal 1, @connection.foreign_keys("astronauts").size
250
- @connection.remove_foreign_key :astronauts, name: "fancy_named_fk"
251
- assert_equal [], @connection.foreign_keys("astronauts")
252
- end
253
-
254
- def test_remove_foreign_non_existing_foreign_key_raises
255
- assert_raises ArgumentError do
256
- @connection.remove_foreign_key :astronauts, :rockets
257
- end
258
- end
259
-
260
- def test_schema_dumping
261
- @connection.add_foreign_key :astronauts, :rockets
262
- output = dump_table_schema "astronauts"
263
- assert_match %r{\s+add_foreign_key "astronauts", "rockets"$}, output
264
- end
265
-
266
- def test_schema_dumping_with_options
267
- output = dump_table_schema "fk_test_has_fk"
268
- 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
269
- end
270
-
271
- def test_schema_dumping_on_delete_and_on_update_options
272
- if current_adapter?(:IBM_DBAdapter)
273
- @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :nullify, on_update: :restrict
274
- else
275
- @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :nullify, on_update: :cascade
276
- end
277
-
278
- output = dump_table_schema "astronauts"
279
- assert_match %r{\s+add_foreign_key "astronauts",.+on_update: :restrict,.+on_delete: :nullify$}, output
280
- end
281
-
282
- class CreateCitiesAndHousesMigration < ActiveRecord::Migration
283
- def change
284
- create_table("cities") { |t| }
285
-
286
- create_table("houses") do |t|
287
- t.column :city_id, :integer
288
- end
289
- add_foreign_key :houses, :cities, column: "city_id"
290
- end
291
- end
292
-
293
- def test_add_foreign_key_is_reversible
294
- migration = CreateCitiesAndHousesMigration.new
295
- silence_stream($stdout) { migration.migrate(:up) }
296
- assert_equal 1, @connection.foreign_keys("houses").size
297
- ensure
298
- silence_stream($stdout) { migration.migrate(:down) }
299
- end
300
-
301
- class CreateSchoolsAndClassesMigration < ActiveRecord::Migration
302
- def change
303
- create_table(:schools)
304
-
305
- create_table(:classes) do |t|
306
- t.column :school_id, :integer
307
- end
308
- add_foreign_key :classes, :schools
309
- end
310
- end
311
-
312
- def test_add_foreign_key_with_prefix
313
- ActiveRecord::Base.table_name_prefix = 'p_'
314
- migration = CreateSchoolsAndClassesMigration.new
315
- silence_stream($stdout) { migration.migrate(:up) }
316
- assert_equal 1, @connection.foreign_keys("p_classes").size
317
- ensure
318
- silence_stream($stdout) { migration.migrate(:down) }
319
- ActiveRecord::Base.table_name_prefix = nil
320
- end
321
-
322
- def test_add_foreign_key_with_suffix
323
- ActiveRecord::Base.table_name_suffix = '_s'
324
- migration = CreateSchoolsAndClassesMigration.new
325
- silence_stream($stdout) { migration.migrate(:up) }
326
- assert_equal 1, @connection.foreign_keys("classes_s").size
327
- ensure
328
- silence_stream($stdout) { migration.migrate(:down) }
329
- ActiveRecord::Base.table_name_suffix = nil
330
- end
331
-
332
-
333
- end
334
- end
335
- end
336
- else
337
- module ActiveRecord
338
- class Migration
339
- class NoForeignKeySupportTest < ActiveRecord::TestCase
340
- setup do
341
- @connection = ActiveRecord::Base.connection
342
- end
343
-
344
- def test_add_foreign_key_should_be_noop
345
- @connection.add_foreign_key :clubs, :categories
346
- end
347
-
348
- def test_remove_foreign_key_should_be_noop
349
- @connection.remove_foreign_key :clubs, :categories
350
- end
351
-
352
- def test_foreign_keys_should_raise_not_implemented
353
- assert_raises NotImplementedError do
354
- @connection.foreign_keys("clubs")
355
- end
356
- end
357
- end
358
- end
359
- end
360
- 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
+ teardown do
31
+ if defined?(@connection)
32
+ @connection.drop_table "astronauts" if @connection.table_exists? 'astronauts'
33
+ @connection.drop_table "rockets" if @connection.table_exists? 'rockets'
34
+ end
35
+ end
36
+
37
+ def test_foreign_keys
38
+ foreign_keys = @connection.foreign_keys("fk_test_has_fk")
39
+ assert_equal 1, foreign_keys.size
40
+
41
+ fk = foreign_keys.first
42
+ if current_adapter?(:IBM_DBAdapter)
43
+ assert_equal "fk_test_has_fk".upcase, fk.from_table.upcase
44
+ assert_equal "fk_test_has_pk".upcase, fk.to_table.upcase
45
+ assert_equal "fk_id".upcase, fk.column.upcase
46
+ assert_equal "pk_id".upcase, fk.primary_key.upcase
47
+ assert_equal "fk_name".upcase, fk.name.upcase
48
+ else
49
+ assert_equal "fk_test_has_fk", fk.from_table
50
+ assert_equal "fk_test_has_pk", fk.to_table
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
+ end
56
+
57
+ def test_add_foreign_key_inferes_column
58
+ @connection.add_foreign_key :astronauts, :rockets
59
+
60
+ foreign_keys = @connection.foreign_keys("astronauts")
61
+ assert_equal 1, foreign_keys.size
62
+
63
+ fk = foreign_keys.first
64
+
65
+ if current_adapter?(:IBM_DBAdapter)
66
+ assert_equal "astronauts".upcase, fk.from_table.upcase
67
+ else
68
+ assert_equal "astronauts", fk.from_table
69
+ end
70
+
71
+ if current_adapter?(:IBM_DBAdapter)
72
+ assert_equal "rockets".upcase, fk.to_table.upcase
73
+ assert_equal "rocket_id".upcase, fk.column.upcase
74
+ assert_equal "id".upcase, fk.primary_key.upcase
75
+ assert_equal("fk_rails_78146ddd2e".upcase, fk.name.upcase)
76
+ else
77
+ assert_equal "rockets", fk.to_table
78
+ assert_equal "rocket_id", fk.column
79
+ assert_equal "id", fk.primary_key
80
+ assert_equal("fk_rails_78146ddd2e", fk.name)
81
+ end
82
+
83
+ end
84
+
85
+ def test_add_foreign_key_with_column
86
+ @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id"
87
+
88
+ foreign_keys = @connection.foreign_keys("astronauts")
89
+ assert_equal 1, foreign_keys.size
90
+
91
+ fk = foreign_keys.first
92
+ if current_adapter?(:IBM_DBAdapter)
93
+ assert_equal "astronauts".upcase, fk.from_table.upcase
94
+ assert_equal "rockets".upcase, fk.to_table.upcase
95
+ assert_equal "rocket_id".upcase, fk.column.upcase
96
+ assert_equal "id".upcase, fk.primary_key.upcase
97
+ assert_equal("fk_rails_78146ddd2e".upcase, fk.name.upcase)
98
+ else
99
+ assert_equal "astronauts", fk.from_table
100
+ assert_equal "rockets", fk.to_table
101
+ assert_equal "rocket_id", fk.column
102
+ assert_equal "id", fk.primary_key
103
+ assert_equal("fk_rails_78146ddd2e", fk.name)
104
+ end
105
+
106
+ end
107
+
108
+ def test_add_foreign_key_with_non_standard_primary_key
109
+ if current_adapter?(:IBM_DBAdapter)
110
+ @connection.create_table :space_shuttles, force: true, id: false do |t|
111
+ t.primary_key :pk
112
+ end
113
+ @connection.add_foreign_key(:astronauts, :space_shuttles,
114
+ column: "rocket_id", primary_key: "pk", name: "custom_pk")
115
+ foreign_keys = @connection.foreign_keys("astronauts")
116
+ assert_equal 1, foreign_keys.size
117
+ fk = foreign_keys.first
118
+ assert_equal "astronauts".upcase, fk.from_table.upcase
119
+ assert_equal "space_shuttles".upcase, fk.to_table.upcase
120
+ assert_equal "pk".upcase, fk.primary_key.upcase
121
+ @connection.remove_foreign_key :astronauts, name: "custom_pk"
122
+ else
123
+ with_example_table @connection, "space_shuttles", "pk integer PRIMARY KEY" do
124
+ @connection.add_foreign_key(:astronauts, :space_shuttles,
125
+ column: "rocket_id", primary_key: "pk", name: "custom_pk")
126
+ foreign_keys = @connection.foreign_keys("astronauts")
127
+ assert_equal 1, foreign_keys.size
128
+ fk = foreign_keys.first
129
+ assert_equal "astronauts", fk.from_table
130
+ assert_equal "space_shuttles", fk.to_table
131
+ assert_equal "pk", fk.primary_key
132
+ @connection.remove_foreign_key :astronauts, name: "custom_pk"
133
+ end
134
+ end
135
+ end
136
+
137
+ def test_add_on_delete_restrict_foreign_key
138
+ @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :restrict
139
+
140
+ foreign_keys = @connection.foreign_keys("astronauts")
141
+ assert_equal 1, foreign_keys.size
142
+
143
+ fk = foreign_keys.first
144
+ if current_adapter?(:MysqlAdapter, :Mysql2Adapter)
145
+ # ON DELETE RESTRICT is the default on MySQL
146
+ assert_equal nil, fk.on_delete
147
+ else
148
+ assert_equal :restrict, fk.on_delete
149
+ end
150
+ end
151
+
152
+ def test_add_on_delete_cascade_foreign_key
153
+ @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :cascade
154
+
155
+ foreign_keys = @connection.foreign_keys("astronauts")
156
+ assert_equal 1, foreign_keys.size
157
+
158
+ fk = foreign_keys.first
159
+ assert_equal :cascade, fk.on_delete
160
+ end
161
+
162
+ def test_add_on_delete_nullify_foreign_key
163
+ @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :nullify
164
+
165
+ foreign_keys = @connection.foreign_keys("astronauts")
166
+ assert_equal 1, foreign_keys.size
167
+
168
+ fk = foreign_keys.first
169
+ assert_equal :nullify, fk.on_delete
170
+ end
171
+
172
+ def test_on_update_and_on_delete_raises_with_invalid_values
173
+ assert_raises ArgumentError do
174
+ @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :invalid
175
+ end
176
+
177
+ assert_raises ArgumentError do
178
+ @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_update: :invalid
179
+ end
180
+ end
181
+
182
+ def test_add_foreign_key_with_on_update
183
+ #@connection.add_foreign_key :astronauts, :rockets, column: "rocket_id" , on_update: :nullify
184
+ @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id"
185
+
186
+ foreign_keys = @connection.foreign_keys("astronauts")
187
+ assert_equal 1, foreign_keys.size
188
+
189
+ fk = foreign_keys.first
190
+ assert_equal :noaction, fk.on_update
191
+ #assert_equal nil, fk.on_update
192
+ end
193
+
194
+ def test_remove_foreign_key_inferes_column
195
+ @connection.add_foreign_key :astronauts, :rockets
196
+
197
+ assert_equal 1, @connection.foreign_keys("astronauts").size
198
+ @connection.remove_foreign_key :astronauts, :rockets
199
+ assert_equal [], @connection.foreign_keys("astronauts")
200
+ end
201
+
202
+ def test_remove_foreign_key_by_column
203
+ @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id"
204
+
205
+ assert_equal 1, @connection.foreign_keys("astronauts").size
206
+ @connection.remove_foreign_key :astronauts, column: "rocket_id"
207
+ assert_equal [], @connection.foreign_keys("astronauts")
208
+ end
209
+
210
+ def test_remove_foreign_key_by_symbol_column
211
+ @connection.add_foreign_key :astronauts, :rockets, column: :rocket_id
212
+
213
+ assert_equal 1, @connection.foreign_keys("astronauts").size
214
+ @connection.remove_foreign_key :astronauts, column: :rocket_id
215
+ assert_equal [], @connection.foreign_keys("astronauts")
216
+ end
217
+
218
+ def test_remove_foreign_key_by_name
219
+ @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", name: "fancy_named_fk"
220
+
221
+ assert_equal 1, @connection.foreign_keys("astronauts").size
222
+ @connection.remove_foreign_key :astronauts, name: "fancy_named_fk"
223
+ assert_equal [], @connection.foreign_keys("astronauts")
224
+ end
225
+
226
+ def test_remove_foreign_non_existing_foreign_key_raises
227
+ assert_raises ArgumentError do
228
+ @connection.remove_foreign_key :astronauts, :rockets
229
+ end
230
+ end
231
+
232
+ def test_schema_dumping
233
+ @connection.add_foreign_key :astronauts, :rockets
234
+ output = dump_table_schema "astronauts"
235
+ assert_match %r{\s+add_foreign_key "ASTRONAUTS", "ROCKETS"$}, output
236
+ end
237
+
238
+ def test_schema_dumping_with_options
239
+ output = dump_table_schema "fk_test_has_fk"
240
+ 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
241
+ end
242
+
243
+ def test_schema_dumping_on_delete_and_on_update_options
244
+ #@connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :nullify, on_update: :cascade
245
+ @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :cascade, on_update: :restrict
246
+
247
+ output = dump_table_schema "astronauts"
248
+ #assert_match %r{\s+add_foreign_key "astronauts",.+on_update: :cascade,.+on_delete: :nullify$}, output
249
+ assert_match %r{\s+add_foreign_key "ASTRONAUTS",.+on_update: :restrict,.+on_delete: :cascade$}, output
250
+ end
251
+
252
+ class CreateCitiesAndHousesMigration < ActiveRecord::Migration
253
+ def change
254
+ create_table("cities") { |t| }
255
+
256
+ create_table("houses") do |t|
257
+ t.column :city_id, :integer
258
+ end
259
+ add_foreign_key :houses, :cities, column: "city_id"
260
+ end
261
+ end
262
+
263
+ def test_add_foreign_key_is_reversible
264
+ migration = CreateCitiesAndHousesMigration.new
265
+ silence_stream($stdout) { migration.migrate(:up) }
266
+ assert_equal 1, @connection.foreign_keys("houses").size
267
+ ensure
268
+ silence_stream($stdout) { migration.migrate(:down) }
269
+ end
270
+
271
+ class CreateSchoolsAndClassesMigration < ActiveRecord::Migration
272
+ def change
273
+ create_table(:schools)
274
+
275
+ create_table(:classes) do |t|
276
+ t.column :school_id, :integer
277
+ end
278
+ add_foreign_key :classes, :schools
279
+ end
280
+ end
281
+
282
+ def test_add_foreign_key_with_prefix
283
+ ActiveRecord::Base.table_name_prefix = 'p_'
284
+ migration = CreateSchoolsAndClassesMigration.new
285
+ silence_stream($stdout) { migration.migrate(:up) }
286
+ assert_equal 1, @connection.foreign_keys("p_classes").size
287
+ ensure
288
+ silence_stream($stdout) { migration.migrate(:down) }
289
+ ActiveRecord::Base.table_name_prefix = nil
290
+ end
291
+
292
+ def test_add_foreign_key_with_suffix
293
+ ActiveRecord::Base.table_name_suffix = '_s'
294
+ migration = CreateSchoolsAndClassesMigration.new
295
+ silence_stream($stdout) { migration.migrate(:up) }
296
+ assert_equal 1, @connection.foreign_keys("classes_s").size
297
+ ensure
298
+ silence_stream($stdout) { migration.migrate(:down) }
299
+ ActiveRecord::Base.table_name_suffix = nil
300
+ end
301
+ end
302
+ end
303
+ end
304
+ else
305
+ module ActiveRecord
306
+ class Migration
307
+ class NoForeignKeySupportTest < ActiveRecord::TestCase
308
+ setup do
309
+ @connection = ActiveRecord::Base.connection
310
+ end
311
+
312
+ def test_add_foreign_key_should_be_noop
313
+ @connection.add_foreign_key :clubs, :categories
314
+ end
315
+
316
+ def test_remove_foreign_key_should_be_noop
317
+ @connection.remove_foreign_key :clubs, :categories
318
+ end
319
+
320
+ def test_foreign_keys_should_raise_not_implemented
321
+ assert_raises NotImplementedError do
322
+ @connection.foreign_keys("clubs")
323
+ end
324
+ end
325
+ end
326
+ end
327
+ end
328
+ end