ibm_db 3.0.5-x86-mingw32 → 5.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 (358) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGES +4 -0
  3. data/LICENSE +1 -1
  4. data/ParameterizedQueries README +6 -6
  5. data/README +38 -55
  6. data/ext/Makefile +269 -0
  7. data/ext/extconf.rb +34 -3
  8. data/ext/gil_release_version +3 -0
  9. data/ext/ibm_db-i386-mingw32.def +2 -0
  10. data/ext/ibm_db.c +100 -108
  11. data/ext/ibm_db.o +0 -0
  12. data/ext/ibm_db.so +0 -0
  13. data/ext/mkmf.log +110 -0
  14. data/ext/ruby_ibm_db_cli.o +0 -0
  15. data/ext/unicode_support_version +3 -0
  16. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +923 -527
  17. data/lib/active_record/connection_adapters/ibmdb_adapter.rb +4 -1
  18. data/lib/mswin32/ibm_db.rb +7 -39
  19. data/lib/mswin32/rb2x/i386/ibm_db.so +0 -0
  20. data/test/active_record/connection_adapters/fake_adapter.rb +8 -5
  21. data/test/cases/adapter_test.rb +133 -58
  22. data/test/cases/adapters/mysql2/active_schema_test.rb +193 -0
  23. data/test/cases/adapters/mysql2/bind_parameter_test.rb +50 -0
  24. data/test/cases/adapters/mysql2/boolean_test.rb +100 -0
  25. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +63 -0
  26. data/test/cases/adapters/mysql2/charset_collation_test.rb +54 -0
  27. data/test/cases/adapters/mysql2/connection_test.rb +210 -0
  28. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +45 -0
  29. data/test/cases/adapters/mysql2/enum_test.rb +26 -0
  30. data/test/cases/adapters/mysql2/explain_test.rb +21 -0
  31. data/test/cases/adapters/mysql2/json_test.rb +195 -0
  32. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +83 -0
  33. data/test/cases/adapters/mysql2/reserved_word_test.rb +152 -0
  34. data/test/cases/adapters/mysql2/schema_migrations_test.rb +59 -0
  35. data/test/cases/adapters/mysql2/schema_test.rb +126 -0
  36. data/test/cases/adapters/mysql2/sp_test.rb +36 -0
  37. data/test/cases/adapters/mysql2/sql_types_test.rb +14 -0
  38. data/test/cases/adapters/mysql2/table_options_test.rb +42 -0
  39. data/test/cases/adapters/mysql2/unsigned_type_test.rb +66 -0
  40. data/test/cases/adapters/postgresql/active_schema_test.rb +98 -0
  41. data/test/cases/adapters/postgresql/array_test.rb +339 -0
  42. data/test/cases/adapters/postgresql/bit_string_test.rb +82 -0
  43. data/test/cases/adapters/postgresql/bytea_test.rb +134 -0
  44. data/test/cases/adapters/postgresql/case_insensitive_test.rb +26 -0
  45. data/test/cases/adapters/postgresql/change_schema_test.rb +38 -0
  46. data/test/cases/adapters/postgresql/cidr_test.rb +25 -0
  47. data/test/cases/adapters/postgresql/citext_test.rb +78 -0
  48. data/test/cases/adapters/postgresql/collation_test.rb +53 -0
  49. data/test/cases/adapters/postgresql/composite_test.rb +132 -0
  50. data/test/cases/adapters/postgresql/connection_test.rb +257 -0
  51. data/test/cases/adapters/postgresql/datatype_test.rb +92 -0
  52. data/test/cases/adapters/postgresql/domain_test.rb +47 -0
  53. data/test/cases/adapters/postgresql/enum_test.rb +91 -0
  54. data/test/cases/adapters/postgresql/explain_test.rb +20 -0
  55. data/test/cases/adapters/postgresql/extension_migration_test.rb +63 -0
  56. data/test/cases/adapters/postgresql/full_text_test.rb +44 -0
  57. data/test/cases/adapters/postgresql/geometric_test.rb +378 -0
  58. data/test/cases/adapters/postgresql/hstore_test.rb +382 -0
  59. data/test/cases/adapters/postgresql/infinity_test.rb +69 -0
  60. data/test/cases/adapters/postgresql/integer_test.rb +25 -0
  61. data/test/cases/adapters/postgresql/json_test.rb +237 -0
  62. data/test/cases/adapters/postgresql/ltree_test.rb +53 -0
  63. data/test/cases/adapters/postgresql/money_test.rb +96 -0
  64. data/test/cases/adapters/postgresql/network_test.rb +94 -0
  65. data/test/cases/adapters/postgresql/numbers_test.rb +49 -0
  66. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +405 -0
  67. data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -0
  68. data/test/cases/adapters/postgresql/quoting_test.rb +44 -0
  69. data/test/cases/adapters/postgresql/range_test.rb +343 -0
  70. data/test/cases/adapters/postgresql/referential_integrity_test.rb +111 -0
  71. data/test/cases/adapters/postgresql/rename_table_test.rb +34 -0
  72. data/test/cases/adapters/postgresql/schema_authorization_test.rb +119 -0
  73. data/test/cases/adapters/postgresql/schema_test.rb +597 -0
  74. data/test/cases/adapters/postgresql/serial_test.rb +154 -0
  75. data/test/cases/adapters/postgresql/statement_pool_test.rb +41 -0
  76. data/test/cases/adapters/postgresql/timestamp_test.rb +90 -0
  77. data/test/cases/adapters/postgresql/type_lookup_test.rb +33 -0
  78. data/test/cases/adapters/postgresql/utils_test.rb +62 -0
  79. data/test/cases/adapters/postgresql/uuid_test.rb +294 -0
  80. data/test/cases/adapters/postgresql/xml_test.rb +54 -0
  81. data/test/cases/adapters/sqlite3/collation_test.rb +53 -0
  82. data/test/cases/adapters/sqlite3/copy_table_test.rb +98 -0
  83. data/test/cases/adapters/sqlite3/explain_test.rb +21 -0
  84. data/test/cases/adapters/sqlite3/quoting_test.rb +101 -0
  85. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +441 -0
  86. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +24 -0
  87. data/test/cases/adapters/sqlite3/statement_pool_test.rb +20 -0
  88. data/test/cases/aggregations_test.rb +11 -1
  89. data/test/cases/ar_schema_test.rb +35 -50
  90. data/test/cases/associations/association_scope_test.rb +1 -6
  91. data/test/cases/associations/belongs_to_associations_test.rb +122 -10
  92. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +41 -0
  93. data/test/cases/associations/callbacks_test.rb +5 -7
  94. data/test/cases/associations/cascaded_eager_loading_test.rb +1 -1
  95. data/test/cases/associations/eager_load_nested_include_test.rb +1 -3
  96. data/test/cases/associations/eager_test.rb +158 -73
  97. data/test/cases/associations/extension_test.rb +7 -2
  98. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +64 -32
  99. data/test/cases/associations/has_many_associations_test.rb +362 -43
  100. data/test/cases/associations/has_many_through_associations_test.rb +108 -41
  101. data/test/cases/associations/has_one_associations_test.rb +105 -8
  102. data/test/cases/associations/has_one_through_associations_test.rb +6 -3
  103. data/test/cases/associations/inner_join_association_test.rb +3 -3
  104. data/test/cases/associations/inverse_associations_test.rb +38 -11
  105. data/test/cases/associations/join_model_test.rb +59 -36
  106. data/test/cases/associations/left_outer_join_association_test.rb +88 -0
  107. data/test/cases/associations/nested_through_associations_test.rb +2 -2
  108. data/test/cases/associations/required_test.rb +25 -5
  109. data/test/cases/associations_test.rb +39 -34
  110. data/test/cases/attribute_decorators_test.rb +9 -8
  111. data/test/cases/attribute_methods/read_test.rb +5 -5
  112. data/test/cases/attribute_methods_test.rb +97 -40
  113. data/test/cases/attribute_set_test.rb +64 -4
  114. data/test/cases/attribute_test.rb +84 -18
  115. data/test/cases/attributes_test.rb +151 -34
  116. data/test/cases/autosave_association_test.rb +149 -36
  117. data/test/cases/base_test.rb +290 -241
  118. data/test/cases/batches_test.rb +299 -22
  119. data/test/cases/binary_test.rb +2 -10
  120. data/test/cases/bind_parameter_test.rb +76 -66
  121. data/test/cases/cache_key_test.rb +26 -0
  122. data/test/cases/calculations_test.rb +167 -15
  123. data/test/cases/callbacks_test.rb +161 -68
  124. data/test/cases/coders/json_test.rb +15 -0
  125. data/test/cases/collection_cache_key_test.rb +115 -0
  126. data/test/cases/column_definition_test.rb +26 -57
  127. data/test/cases/comment_test.rb +145 -0
  128. data/test/cases/connection_adapters/adapter_leasing_test.rb +5 -3
  129. data/test/cases/connection_adapters/connection_handler_test.rb +128 -21
  130. data/test/cases/connection_adapters/connection_specification_test.rb +1 -1
  131. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +0 -38
  132. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +5 -1
  133. data/test/cases/connection_adapters/schema_cache_test.rb +8 -3
  134. data/test/cases/connection_adapters/type_lookup_test.rb +15 -7
  135. data/test/cases/connection_management_test.rb +46 -56
  136. data/test/cases/connection_pool_test.rb +195 -20
  137. data/test/cases/connection_specification/resolver_test.rb +15 -0
  138. data/test/cases/counter_cache_test.rb +10 -5
  139. data/test/cases/custom_locking_test.rb +1 -1
  140. data/test/cases/database_statements_test.rb +18 -3
  141. data/test/cases/{invalid_date_test.rb → date_test.rb} +13 -1
  142. data/test/cases/date_time_precision_test.rb +107 -0
  143. data/test/cases/defaults_test.rb +85 -89
  144. data/test/cases/dirty_test.rb +30 -52
  145. data/test/cases/disconnected_test.rb +4 -2
  146. data/test/cases/enum_test.rb +178 -24
  147. data/test/cases/errors_test.rb +16 -0
  148. data/test/cases/explain_test.rb +32 -21
  149. data/test/cases/finder_test.rb +273 -148
  150. data/test/cases/fixture_set/file_test.rb +18 -0
  151. data/test/cases/fixtures_test.rb +112 -32
  152. data/test/cases/forbidden_attributes_protection_test.rb +69 -3
  153. data/test/cases/helper.rb +10 -16
  154. data/test/cases/hot_compatibility_test.rb +89 -1
  155. data/test/cases/inheritance_test.rb +284 -53
  156. data/test/cases/integration_test.rb +23 -7
  157. data/test/cases/invalid_connection_test.rb +4 -2
  158. data/test/cases/invertible_migration_test.rb +124 -32
  159. data/test/cases/json_serialization_test.rb +11 -2
  160. data/test/cases/locking_test.rb +22 -6
  161. data/test/cases/log_subscriber_test.rb +106 -17
  162. data/test/cases/migration/change_schema_test.rb +60 -114
  163. data/test/cases/migration/change_table_test.rb +34 -2
  164. data/test/cases/migration/column_attributes_test.rb +7 -23
  165. data/test/cases/migration/column_positioning_test.rb +8 -8
  166. data/test/cases/migration/columns_test.rb +17 -11
  167. data/test/cases/migration/command_recorder_test.rb +47 -2
  168. data/test/cases/migration/compatibility_test.rb +118 -0
  169. data/test/cases/migration/create_join_table_test.rb +21 -12
  170. data/test/cases/migration/foreign_key_test.rb +52 -18
  171. data/test/cases/migration/index_test.rb +14 -12
  172. data/test/cases/migration/logger_test.rb +1 -1
  173. data/test/cases/migration/pending_migrations_test.rb +0 -1
  174. data/test/cases/migration/references_foreign_key_test.rb +59 -7
  175. data/test/cases/migration/references_index_test.rb +4 -4
  176. data/test/cases/migration/references_statements_test.rb +26 -6
  177. data/test/cases/migration/rename_table_test.rb +25 -25
  178. data/test/cases/migration_test.rb +279 -81
  179. data/test/cases/migrator_test.rb +91 -8
  180. data/test/cases/mixin_test.rb +0 -2
  181. data/test/cases/modules_test.rb +3 -4
  182. data/test/cases/multiparameter_attributes_test.rb +24 -2
  183. data/test/cases/multiple_db_test.rb +11 -4
  184. data/test/cases/nested_attributes_test.rb +61 -33
  185. data/test/cases/persistence_test.rb +102 -10
  186. data/test/cases/pooled_connections_test.rb +3 -3
  187. data/test/cases/primary_keys_test.rb +170 -31
  188. data/test/cases/query_cache_test.rb +216 -96
  189. data/test/cases/quoting_test.rb +65 -19
  190. data/test/cases/readonly_test.rb +2 -1
  191. data/test/cases/reflection_test.rb +68 -22
  192. data/test/cases/relation/delegation_test.rb +3 -8
  193. data/test/cases/relation/merging_test.rb +10 -14
  194. data/test/cases/relation/mutation_test.rb +42 -24
  195. data/test/cases/relation/or_test.rb +92 -0
  196. data/test/cases/relation/predicate_builder_test.rb +4 -2
  197. data/test/cases/relation/record_fetch_warning_test.rb +40 -0
  198. data/test/cases/relation/where_chain_test.rb +23 -99
  199. data/test/cases/relation/where_clause_test.rb +182 -0
  200. data/test/cases/relation/where_test.rb +45 -23
  201. data/test/cases/relation_test.rb +67 -58
  202. data/test/cases/relations_test.rb +249 -38
  203. data/test/cases/result_test.rb +10 -0
  204. data/test/cases/sanitize_test.rb +108 -15
  205. data/test/cases/schema_dumper_test.rb +119 -125
  206. data/test/cases/schema_loading_test.rb +52 -0
  207. data/test/cases/scoping/default_scoping_test.rb +113 -39
  208. data/test/cases/scoping/named_scoping_test.rb +46 -9
  209. data/test/cases/scoping/relation_scoping_test.rb +47 -4
  210. data/test/cases/secure_token_test.rb +32 -0
  211. data/test/cases/serialization_test.rb +1 -1
  212. data/test/cases/serialized_attribute_test.rb +93 -6
  213. data/test/cases/statement_cache_test.rb +38 -0
  214. data/test/cases/store_test.rb +2 -1
  215. data/test/cases/suppressor_test.rb +63 -0
  216. data/test/cases/tasks/database_tasks_test.rb +73 -9
  217. data/test/cases/tasks/mysql_rake_test.rb +139 -118
  218. data/test/cases/tasks/postgresql_rake_test.rb +60 -6
  219. data/test/cases/tasks/sqlite_rake_test.rb +30 -3
  220. data/test/cases/test_case.rb +28 -20
  221. data/test/cases/test_fixtures_test.rb +36 -0
  222. data/test/cases/time_precision_test.rb +103 -0
  223. data/test/cases/timestamp_test.rb +44 -10
  224. data/test/cases/touch_later_test.rb +121 -0
  225. data/test/cases/transaction_callbacks_test.rb +128 -62
  226. data/test/cases/transaction_isolation_test.rb +2 -2
  227. data/test/cases/transactions_test.rb +61 -43
  228. data/test/cases/type/adapter_specific_registry_test.rb +133 -0
  229. data/test/cases/type/date_time_test.rb +14 -0
  230. data/test/cases/type/integer_test.rb +2 -96
  231. data/test/cases/type/string_test.rb +0 -14
  232. data/test/cases/type_test.rb +39 -0
  233. data/test/cases/types_test.rb +1 -118
  234. data/test/cases/unconnected_test.rb +1 -1
  235. data/test/cases/validations/absence_validation_test.rb +73 -0
  236. data/test/cases/validations/association_validation_test.rb +13 -2
  237. data/test/cases/validations/i18n_validation_test.rb +6 -10
  238. data/test/cases/validations/length_validation_test.rb +62 -30
  239. data/test/cases/validations/presence_validation_test.rb +36 -1
  240. data/test/cases/validations/uniqueness_validation_test.rb +128 -37
  241. data/test/cases/validations_repair_helper.rb +2 -6
  242. data/test/cases/validations_test.rb +36 -7
  243. data/test/cases/view_test.rb +102 -5
  244. data/test/cases/yaml_serialization_test.rb +21 -26
  245. data/test/config.example.yml +97 -0
  246. data/test/fixtures/bad_posts.yml +9 -0
  247. data/test/fixtures/books.yml +20 -0
  248. data/test/fixtures/content.yml +3 -0
  249. data/test/fixtures/content_positions.yml +3 -0
  250. data/test/fixtures/dead_parrots.yml +5 -0
  251. data/test/fixtures/live_parrots.yml +4 -0
  252. data/test/fixtures/naked/yml/parrots.yml +2 -0
  253. data/test/fixtures/naked/yml/trees.yml +3 -0
  254. data/test/fixtures/nodes.yml +29 -0
  255. data/test/fixtures/other_comments.yml +6 -0
  256. data/test/fixtures/other_dogs.yml +2 -0
  257. data/test/fixtures/other_posts.yml +7 -0
  258. data/test/fixtures/price_estimates.yml +10 -1
  259. data/test/fixtures/trees.yml +3 -0
  260. data/test/migrations/10_urban/9_add_expressions.rb +1 -1
  261. data/test/migrations/decimal/1_give_me_big_numbers.rb +1 -1
  262. data/test/migrations/magic/1_currencies_have_symbols.rb +1 -1
  263. data/test/migrations/missing/1000_people_have_middle_names.rb +2 -2
  264. data/test/migrations/missing/1_people_have_last_names.rb +2 -2
  265. data/test/migrations/missing/3_we_need_reminders.rb +2 -2
  266. data/test/migrations/missing/4_innocent_jointable.rb +2 -2
  267. data/test/migrations/rename/1_we_need_things.rb +2 -2
  268. data/test/migrations/rename/2_rename_things.rb +2 -2
  269. data/test/migrations/to_copy/1_people_have_hobbies.rb +1 -1
  270. data/test/migrations/to_copy/2_people_have_descriptions.rb +1 -1
  271. data/test/migrations/to_copy2/1_create_articles.rb +1 -1
  272. data/test/migrations/to_copy2/2_create_comments.rb +1 -1
  273. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +1 -1
  274. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +1 -1
  275. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +1 -1
  276. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +1 -1
  277. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +1 -1
  278. data/test/migrations/valid/1_valid_people_have_last_names.rb +1 -1
  279. data/test/migrations/valid/2_we_need_reminders.rb +2 -2
  280. data/test/migrations/valid/3_innocent_jointable.rb +2 -2
  281. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +1 -1
  282. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -2
  283. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +2 -2
  284. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +1 -1
  285. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +1 -1
  286. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +1 -1
  287. data/test/migrations/version_check/20131219224947_migration_version_check.rb +1 -1
  288. data/test/models/admin/randomly_named_c1.rb +6 -2
  289. data/test/models/aircraft.rb +1 -0
  290. data/test/models/author.rb +4 -7
  291. data/test/models/bird.rb +1 -1
  292. data/test/models/book.rb +5 -0
  293. data/test/models/bulb.rb +2 -1
  294. data/test/models/car.rb +3 -0
  295. data/test/models/cat.rb +10 -0
  296. data/test/models/chef.rb +1 -0
  297. data/test/models/club.rb +2 -0
  298. data/test/models/comment.rb +17 -5
  299. data/test/models/company.rb +4 -2
  300. data/test/models/company_in_module.rb +1 -1
  301. data/test/models/contact.rb +1 -1
  302. data/test/models/content.rb +40 -0
  303. data/test/models/customer.rb +8 -2
  304. data/test/models/developer.rb +19 -0
  305. data/test/models/face.rb +1 -1
  306. data/test/models/guitar.rb +4 -0
  307. data/test/models/hotel.rb +2 -0
  308. data/test/models/member.rb +1 -0
  309. data/test/models/member_detail.rb +4 -3
  310. data/test/models/mentor.rb +3 -0
  311. data/test/models/mocktail_designer.rb +2 -0
  312. data/test/models/node.rb +5 -0
  313. data/test/models/non_primary_key.rb +2 -0
  314. data/test/models/notification.rb +3 -0
  315. data/test/models/other_dog.rb +5 -0
  316. data/test/models/owner.rb +4 -1
  317. data/test/models/parrot.rb +6 -7
  318. data/test/models/person.rb +0 -1
  319. data/test/models/pet.rb +3 -0
  320. data/test/models/pet_treasure.rb +6 -0
  321. data/test/models/pirate.rb +3 -3
  322. data/test/models/post.rb +18 -9
  323. data/test/models/project.rb +9 -0
  324. data/test/models/randomly_named_c1.rb +1 -1
  325. data/test/models/recipe.rb +3 -0
  326. data/test/models/ship.rb +8 -2
  327. data/test/models/tag.rb +6 -0
  328. data/test/models/topic.rb +2 -8
  329. data/test/models/tree.rb +3 -0
  330. data/test/models/tuning_peg.rb +4 -0
  331. data/test/models/user.rb +14 -0
  332. data/test/models/uuid_item.rb +6 -0
  333. data/test/schema/mysql2_specific_schema.rb +33 -23
  334. data/test/schema/oracle_specific_schema.rb +1 -4
  335. data/test/schema/postgresql_specific_schema.rb +36 -124
  336. data/test/schema/schema.rb +170 -65
  337. data/test/schema/schema.rb.original +1057 -0
  338. data/test/schema/sqlite_specific_schema.rb +1 -5
  339. data/test/support/connection.rb +1 -0
  340. data/test/support/schema_dumping_helper.rb +1 -1
  341. data/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -0
  342. data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -0
  343. metadata +146 -30
  344. data/lib/mswin32/rb19x/ibm_db.so +0 -0
  345. data/lib/mswin32/rb21x/i386/ibm_db.so +0 -0
  346. data/lib/mswin32/rb22x/i386/ibm_db.so +0 -0
  347. data/lib/mswin32/rb23x/i386/ibm_db.so +0 -0
  348. data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +0 -26
  349. data/test/cases/attribute_methods/serialization_test.rb +0 -29
  350. data/test/cases/migration/change_schema_test - Copy.rb +0 -448
  351. data/test/cases/migration/foreign_key_test - Changed.rb +0 -325
  352. data/test/cases/migration/table_and_index_test.rb +0 -24
  353. data/test/cases/relation/where_test2.rb +0 -36
  354. data/test/cases/type/decimal_test.rb +0 -56
  355. data/test/cases/type/unsigned_integer_test.rb +0 -18
  356. data/test/cases/xml_serialization_test.rb +0 -457
  357. data/test/fixtures/naked/csv/accounts.csv +0 -1
  358. data/test/schema/mysql_specific_schema.rb +0 -70
@@ -12,7 +12,9 @@ module ActiveRecord
12
12
 
13
13
  teardown do
14
14
  %w(artists_musics musics_videos catalog).each do |table_name|
15
- connection.drop_table table_name if connection.tables.include?(table_name)
15
+ ActiveSupport::Deprecation.silence do
16
+ connection.drop_table table_name if connection.table_exists?(table_name)
17
+ end
16
18
  end
17
19
  end
18
20
 
@@ -82,65 +84,72 @@ module ActiveRecord
82
84
  connection.create_join_table :artists, :musics
83
85
  connection.drop_join_table :artists, :musics
84
86
 
85
- assert !connection.tables.include?('artists_musics')
87
+ ActiveSupport::Deprecation.silence { assert !connection.table_exists?('artists_musics') }
86
88
  end
87
89
 
88
90
  def test_drop_join_table_with_strings
89
91
  connection.create_join_table :artists, :musics
90
92
  connection.drop_join_table 'artists', 'musics'
91
93
 
92
- assert !connection.tables.include?('artists_musics')
94
+ ActiveSupport::Deprecation.silence { assert !connection.table_exists?('artists_musics') }
93
95
  end
94
96
 
95
97
  def test_drop_join_table_with_the_proper_order
96
98
  connection.create_join_table :videos, :musics
97
99
  connection.drop_join_table :videos, :musics
98
100
 
99
- assert !connection.tables.include?('musics_videos')
101
+ ActiveSupport::Deprecation.silence { assert !connection.table_exists?('musics_videos') }
100
102
  end
101
103
 
102
104
  def test_drop_join_table_with_the_table_name
103
105
  connection.create_join_table :artists, :musics, table_name: :catalog
104
106
  connection.drop_join_table :artists, :musics, table_name: :catalog
105
107
 
106
- assert !connection.tables.include?('catalog')
108
+ ActiveSupport::Deprecation.silence { assert !connection.table_exists?('catalog') }
107
109
  end
108
110
 
109
111
  def test_drop_join_table_with_the_table_name_as_string
110
112
  connection.create_join_table :artists, :musics, table_name: 'catalog'
111
113
  connection.drop_join_table :artists, :musics, table_name: 'catalog'
112
114
 
113
- assert !connection.tables.include?('catalog')
115
+ ActiveSupport::Deprecation.silence { assert !connection.table_exists?('catalog') }
114
116
  end
115
117
 
116
118
  def test_drop_join_table_with_column_options
117
119
  connection.create_join_table :artists, :musics, column_options: {null: true}
118
120
  connection.drop_join_table :artists, :musics, column_options: {null: true}
119
121
 
120
- assert !connection.tables.include?('artists_musics')
122
+ ActiveSupport::Deprecation.silence { assert !connection.table_exists?('artists_musics') }
121
123
  end
122
124
 
123
125
  def test_create_and_drop_join_table_with_common_prefix
124
126
  with_table_cleanup do
125
127
  connection.create_join_table 'audio_artists', 'audio_musics'
126
- assert_includes connection.tables, 'audio_artists_musics'
128
+ ActiveSupport::Deprecation.silence { assert connection.table_exists?('audio_artists_musics') }
127
129
 
128
130
  connection.drop_join_table 'audio_artists', 'audio_musics'
129
- assert !connection.tables.include?('audio_artists_musics'), "Should have dropped join table, but didn't"
131
+ ActiveSupport::Deprecation.silence { assert !connection.table_exists?('audio_artists_musics'), "Should have dropped join table, but didn't" }
132
+ end
133
+ end
134
+
135
+ if current_adapter?(:PostgreSQLAdapter)
136
+ def test_create_join_table_with_uuid
137
+ connection.create_join_table :artists, :musics, column_options: { type: :uuid }
138
+ assert_equal [:uuid, :uuid], connection.columns(:artists_musics).map(&:type)
130
139
  end
131
140
  end
132
141
 
133
142
  private
134
143
 
135
144
  def with_table_cleanup
136
- tables_before = connection.tables
145
+ tables_before = connection.data_sources
137
146
 
138
147
  yield
139
148
  ensure
140
- tables_after = connection.tables - tables_before
149
+ tables_after = connection.data_sources - tables_before
141
150
 
142
151
  tables_after.each do |table|
143
- connection.execute "DROP TABLE #{table}"
152
+ connection.drop_table table
144
153
  end
145
154
  end
146
155
  end
@@ -8,6 +8,7 @@ module ActiveRecord
8
8
  class ForeignKeyTest < ActiveRecord::TestCase
9
9
  include DdlHelper
10
10
  include SchemaDumpingHelper
11
+ include ActiveSupport::Testing::Stream
11
12
 
12
13
  class Rocket < ActiveRecord::Base
13
14
  end
@@ -29,8 +30,10 @@ module ActiveRecord
29
30
 
30
31
  teardown do
31
32
  if defined?(@connection)
32
- @connection.drop_table "astronauts" if @connection.table_exists? 'astronauts'
33
- @connection.drop_table "rockets" if @connection.table_exists? 'rockets'
33
+ @connection.drop_table "astronauts"
34
+ #, if_exists: true
35
+ @connection.drop_table "rockets"
36
+ #, if_exists: true
34
37
  end
35
38
  end
36
39
 
@@ -141,10 +144,10 @@ module ActiveRecord
141
144
  assert_equal 1, foreign_keys.size
142
145
 
143
146
  fk = foreign_keys.first
144
- if current_adapter?(:MysqlAdapter, :Mysql2Adapter)
147
+ if current_adapter?(:Mysql2Adapter)
145
148
  # ON DELETE RESTRICT is the default on MySQL
146
149
  assert_equal nil, fk.on_delete
147
- else
150
+ else
148
151
  assert_equal :restrict, fk.on_delete
149
152
  end
150
153
  end
@@ -155,8 +158,8 @@ module ActiveRecord
155
158
  foreign_keys = @connection.foreign_keys("astronauts")
156
159
  assert_equal 1, foreign_keys.size
157
160
 
158
- fk = foreign_keys.first
159
- assert_equal :cascade, fk.on_delete
161
+ fk = foreign_keys.first
162
+ assert_equal :cascade, fk.on_delete
160
163
  end
161
164
 
162
165
  def test_add_on_delete_nullify_foreign_key
@@ -180,15 +183,34 @@ module ActiveRecord
180
183
  end
181
184
 
182
185
  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"
186
+ @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_update: :nullify
185
187
 
186
188
  foreign_keys = @connection.foreign_keys("astronauts")
187
189
  assert_equal 1, foreign_keys.size
188
190
 
189
191
  fk = foreign_keys.first
190
- assert_equal :noaction, fk.on_update
191
- #assert_equal nil, fk.on_update
192
+ assert_equal :nullify, fk.on_update
193
+ end
194
+
195
+ def test_foreign_key_exists
196
+ @connection.add_foreign_key :astronauts, :rockets
197
+
198
+ assert @connection.foreign_key_exists?(:astronauts, :rockets)
199
+ assert_not @connection.foreign_key_exists?(:astronauts, :stars)
200
+ end
201
+
202
+ def test_foreign_key_exists_by_column
203
+ @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id"
204
+
205
+ assert @connection.foreign_key_exists?(:astronauts, column: "rocket_id")
206
+ assert_not @connection.foreign_key_exists?(:astronauts, column: "star_id")
207
+ end
208
+
209
+ def test_foreign_key_exists_by_name
210
+ @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", name: "fancy_named_fk"
211
+
212
+ assert @connection.foreign_key_exists?(:astronauts, name: "fancy_named_fk")
213
+ assert_not @connection.foreign_key_exists?(:astronauts, name: "other_fancy_named_fk")
192
214
  end
193
215
 
194
216
  def test_remove_foreign_key_inferes_column
@@ -232,24 +254,22 @@ module ActiveRecord
232
254
  def test_schema_dumping
233
255
  @connection.add_foreign_key :astronauts, :rockets
234
256
  output = dump_table_schema "astronauts"
235
- assert_match %r{\s+add_foreign_key "ASTRONAUTS", "ROCKETS"$}, output
257
+ assert_match %r{\s+add_foreign_key "astronauts", "rockets"$}, output
236
258
  end
237
259
 
238
260
  def test_schema_dumping_with_options
239
261
  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
262
+ 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
263
  end
242
264
 
243
265
  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
266
+ @connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", on_delete: :nullify, on_update: :cascade
246
267
 
247
268
  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
269
+ assert_match %r{\s+add_foreign_key "astronauts",.+on_update: :cascade,.+on_delete: :nullify$}, output
250
270
  end
251
271
 
252
- class CreateCitiesAndHousesMigration < ActiveRecord::Migration
272
+ class CreateCitiesAndHousesMigration < ActiveRecord::Migration::Current
253
273
  def change
254
274
  create_table("cities") { |t| }
255
275
 
@@ -257,6 +277,10 @@ module ActiveRecord
257
277
  t.column :city_id, :integer
258
278
  end
259
279
  add_foreign_key :houses, :cities, column: "city_id"
280
+
281
+ # remove and re-add to test that schema is updated and not accidently cached
282
+ remove_foreign_key :houses, :cities
283
+ add_foreign_key :houses, :cities, column: "city_id", on_delete: :cascade
260
284
  end
261
285
  end
262
286
 
@@ -268,7 +292,16 @@ module ActiveRecord
268
292
  silence_stream($stdout) { migration.migrate(:down) }
269
293
  end
270
294
 
271
- class CreateSchoolsAndClassesMigration < ActiveRecord::Migration
295
+ def test_foreign_key_constraint_is_not_cached_incorrectly
296
+ migration = CreateCitiesAndHousesMigration.new
297
+ silence_stream($stdout) { migration.migrate(:up) }
298
+ output = dump_table_schema "houses"
299
+ assert_match %r{\s+add_foreign_key "houses",.+on_delete: :cascade$}, output
300
+ ensure
301
+ silence_stream($stdout) { migration.migrate(:down) }
302
+ end
303
+
304
+ class CreateSchoolsAndClassesMigration < ActiveRecord::Migration::Current
272
305
  def change
273
306
  create_table(:schools)
274
307
 
@@ -298,6 +331,7 @@ module ActiveRecord
298
331
  silence_stream($stdout) { migration.migrate(:down) }
299
332
  ActiveRecord::Base.table_name_suffix = nil
300
333
  end
334
+
301
335
  end
302
336
  end
303
337
  end
@@ -9,12 +9,8 @@ module ActiveRecord
9
9
  super
10
10
  @connection = ActiveRecord::Base.connection
11
11
  @table_name = :testings
12
-
13
- if current_adapter?(:IBM_DBAdapter)
14
- connection.drop_table :testings rescue nil
15
- end
16
-
17
- connection.create_table table_name do |t|
12
+
13
+ connection.create_table table_name do |t|
18
14
  t.column :foo, :string, :limit => 100
19
15
  t.column :bar, :string, :limit => 100
20
16
 
@@ -62,11 +58,7 @@ module ActiveRecord
62
58
  end
63
59
 
64
60
  def test_remove_nonexistent_index
65
- if current_adapter?(:IBM_DBAdapter)
66
- assert_raise(ArgumentError) { connection.remove_index(table_name, "no_such_index") }
67
- else
68
- assert_raise(ArgumentError) { connection.remove_index(table_name, "no_such_index") }
69
- end
61
+ assert_raise(ArgumentError) { connection.remove_index(table_name, "no_such_index") }
70
62
  end
71
63
 
72
64
  def test_add_index_works_with_long_index_names
@@ -138,7 +130,17 @@ module ActiveRecord
138
130
  def test_named_index_exists
139
131
  connection.add_index :testings, :foo, :name => "custom_index_name"
140
132
 
133
+ assert connection.index_exists?(:testings, :foo)
141
134
  assert connection.index_exists?(:testings, :foo, :name => "custom_index_name")
135
+ assert !connection.index_exists?(:testings, :foo, :name => "other_index_name")
136
+ end
137
+
138
+ def test_remove_named_index
139
+ connection.add_index :testings, :foo, :name => "custom_index_name"
140
+
141
+ assert connection.index_exists?(:testings, :foo)
142
+ connection.remove_index :testings, :foo
143
+ assert !connection.index_exists?(:testings, :foo)
142
144
  end
143
145
 
144
146
  def test_add_index_attribute_length_limit
@@ -184,7 +186,7 @@ module ActiveRecord
184
186
  connection.remove_index("testings", :name => "named_admin")
185
187
 
186
188
  # Selected adapters support index sort order
187
- if current_adapter?(:SQLite3Adapter, :MysqlAdapter, :Mysql2Adapter, :PostgreSQLAdapter)
189
+ if current_adapter?(:SQLite3Adapter, :Mysql2Adapter, :PostgreSQLAdapter)
188
190
  connection.add_index("testings", ["last_name"], :order => {:last_name => :desc})
189
191
  connection.remove_index("testings", ["last_name"])
190
192
  connection.add_index("testings", ["last_name", "first_name"], :order => {:last_name => :desc})
@@ -4,7 +4,7 @@ module ActiveRecord
4
4
  class Migration
5
5
  class LoggerTest < ActiveRecord::TestCase
6
6
  # MySQL can't roll back ddl changes
7
- self.use_transactional_fixtures = false
7
+ self.use_transactional_tests = false
8
8
 
9
9
  Migration = Struct.new(:name, :version) do
10
10
  def disable_ddl_transaction; false end
@@ -1,5 +1,4 @@
1
1
  require 'cases/helper'
2
- require "minitest/mock"
3
2
 
4
3
  module ActiveRecord
5
4
  class Migration
@@ -10,8 +10,10 @@ module ActiveRecord
10
10
  end
11
11
 
12
12
  teardown do
13
- @connection.drop_table("testings") if @connection.table_exists? "testings"
14
- @connection.drop_table("testing_parents") if @connection.table_exists? "testing_parents"
13
+ @connection.drop_table "testings"
14
+ #, if_exists: true
15
+ @connection.drop_table "testing_parents"
16
+ #, if_exists: true
15
17
  end
16
18
 
17
19
  test "foreign keys can be created with the table" do
@@ -32,6 +34,14 @@ module ActiveRecord
32
34
  assert_equal [], @connection.foreign_keys("testings")
33
35
  end
34
36
 
37
+ test "foreign keys can be created in one query when index is not added" do
38
+ assert_queries(1) do
39
+ @connection.create_table :testings do |t|
40
+ t.references :testing_parent, foreign_key: true, index: false
41
+ end
42
+ end
43
+ end
44
+
35
45
  test "options hash can be passed" do
36
46
  @connection.change_table :testing_parents do |t|
37
47
  t.integer :other_id
@@ -45,6 +55,15 @@ module ActiveRecord
45
55
  assert_equal "other_id", fk.primary_key
46
56
  end
47
57
 
58
+ test "to_table option can be passed" do
59
+ @connection.create_table :testings do |t|
60
+ t.references :parent, foreign_key: { to_table: :testing_parents }
61
+ end
62
+ fks = @connection.foreign_keys("testings")
63
+ assert_equal([["testings", "testing_parents", "parent_id"]],
64
+ fks.map {|fk| [fk.from_table, fk.to_table, fk.column] })
65
+ end
66
+
48
67
  test "foreign keys cannot be added to polymorphic relations when creating the table" do
49
68
  @connection.create_table :testings do |t|
50
69
  assert_raises(ArgumentError) do
@@ -124,10 +143,41 @@ module ActiveRecord
124
143
  end
125
144
  ensure
126
145
  ActiveRecord::Base.pluralize_table_names = original_pluralize_table_names
127
- @connection.drop_table "testing", if_exists: true
146
+ @connection.drop_table "testing"
147
+ #, if_exists: true
128
148
  end
129
149
  end
130
150
 
151
+ class CreateDogsMigration < ActiveRecord::Migration::Current
152
+ def change
153
+ create_table :dog_owners
154
+
155
+ create_table :dogs do |t|
156
+ t.references :dog_owner, foreign_key: true
157
+ end
158
+ end
159
+ end
160
+
161
+ def test_references_foreign_key_with_prefix
162
+ ActiveRecord::Base.table_name_prefix = 'p_'
163
+ migration = CreateDogsMigration.new
164
+ silence_stream($stdout) { migration.migrate(:up) }
165
+ assert_equal 1, @connection.foreign_keys("p_dogs").size
166
+ ensure
167
+ silence_stream($stdout) { migration.migrate(:down) }
168
+ ActiveRecord::Base.table_name_prefix = nil
169
+ end
170
+
171
+ def test_references_foreign_key_with_suffix
172
+ ActiveRecord::Base.table_name_suffix = '_s'
173
+ migration = CreateDogsMigration.new
174
+ silence_stream($stdout) { migration.migrate(:up) }
175
+ assert_equal 1, @connection.foreign_keys("dogs_s").size
176
+ ensure
177
+ silence_stream($stdout) { migration.migrate(:down) }
178
+ ActiveRecord::Base.table_name_suffix = nil
179
+ end
180
+
131
181
  test "multiple foreign keys can be added to the same table" do
132
182
  @connection.create_table :testings do |t|
133
183
  t.integer :col_1
@@ -137,7 +187,7 @@ module ActiveRecord
137
187
  t.foreign_key :testing_parents, column: :col_2
138
188
  end
139
189
 
140
- fks = @connection.foreign_keys("testings").sort_by(&:column)
190
+ fks = @connection.foreign_keys("testings")
141
191
 
142
192
  fk_definitions = fks.map {|fk| [fk.from_table, fk.to_table, fk.column] }
143
193
  assert_equal([["testings", "testing_parents", "col_1"],
@@ -154,8 +204,10 @@ class ReferencesWithoutForeignKeySupportTest < ActiveRecord::TestCase
154
204
  end
155
205
 
156
206
  teardown do
157
- @connection.drop_table("testings", if_exists: true)
158
- @connection.drop_table("testing_parents", if_exists: true)
207
+ @connection.drop_table("testings")
208
+ #, if_exists: true)
209
+ @connection.drop_table("testing_parents")
210
+ #, if_exists: true)
159
211
  end
160
212
 
161
213
  test "ignores foreign keys defined with the table" do
@@ -163,7 +215,7 @@ class ReferencesWithoutForeignKeySupportTest < ActiveRecord::TestCase
163
215
  t.references :testing_parent, foreign_key: true
164
216
  end
165
217
 
166
- assert_includes @connection.tables, "testings"
218
+ assert_includes @connection.data_sources, "testings"
167
219
  end
168
220
  end
169
221
  end
@@ -23,12 +23,12 @@ module ActiveRecord
23
23
  assert connection.index_exists?(table_name, :foo_id, :name => :index_testings_on_foo_id)
24
24
  end
25
25
 
26
- def test_does_not_create_index
26
+ def test_creates_index_by_default_even_if_index_option_is_not_passed
27
27
  connection.create_table table_name do |t|
28
28
  t.references :foo
29
29
  end
30
30
 
31
- assert_not connection.index_exists?(table_name, :foo_id, :name => :index_testings_on_foo_id)
31
+ assert connection.index_exists?(table_name, :foo_id, :name => :index_testings_on_foo_id)
32
32
  end
33
33
 
34
34
  def test_does_not_create_index_explicit
@@ -68,13 +68,13 @@ module ActiveRecord
68
68
  assert connection.index_exists?(table_name, :foo_id, :name => :index_testings_on_foo_id)
69
69
  end
70
70
 
71
- def test_does_not_create_index_for_existing_table
71
+ def test_creates_index_for_existing_table_even_if_index_option_is_not_passed
72
72
  connection.create_table table_name
73
73
  connection.change_table table_name do |t|
74
74
  t.references :foo
75
75
  end
76
76
 
77
- assert_not connection.index_exists?(table_name, :foo_id, :name => :index_testings_on_foo_id)
77
+ assert connection.index_exists?(table_name, :foo_id, :name => :index_testings_on_foo_id)
78
78
  end
79
79
 
80
80
  def test_does_not_create_index_for_existing_table_explicit