ibm_db 5.1.0-x86-mingw32 → 5.3.2-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 (624) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +9 -0
  3. data/LICENSE +55 -18
  4. data/ext/Makefile +14 -14
  5. data/ext/extconf.rb +4 -4
  6. data/ext/ibm_db.c +62 -57
  7. data/ext/ibm_db.o +0 -0
  8. data/ext/ibm_db.so +0 -0
  9. data/ext/mkmf.log +11 -11
  10. data/ext/ruby_ibm_db_cli.c +1 -0
  11. data/ext/ruby_ibm_db_cli.o +0 -0
  12. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +1463 -1279
  13. data/lib/ibm_db.so +1 -0
  14. data/lib/mswin32/ibm_db.rb +7 -3
  15. data/lib/mswin32/rb2x/i386/ruby25/ibm_db.so +0 -0
  16. data/lib/mswin32/rb3x/i386/ruby30/ibm_db.so +0 -0
  17. data/test/active_record/connection_adapters/fake_adapter.rb +5 -2
  18. data/test/activejob/destroy_association_async_test.rb +305 -0
  19. data/test/activejob/destroy_async_job_not_present_test.rb +31 -0
  20. data/test/activejob/helper.rb +15 -0
  21. data/test/assets/schema_dump_5_1.yml +345 -0
  22. data/test/cases/adapter_prevent_writes_test.rb +334 -0
  23. data/test/cases/adapter_test.rb +432 -218
  24. data/test/cases/adapters/mysql2/active_schema_test.rb +85 -75
  25. data/test/cases/adapters/mysql2/auto_increment_test.rb +34 -0
  26. data/test/cases/adapters/mysql2/bind_parameter_test.rb +5 -3
  27. data/test/cases/adapters/mysql2/boolean_test.rb +6 -4
  28. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +26 -24
  29. data/test/cases/adapters/mysql2/charset_collation_test.rb +20 -17
  30. data/test/cases/adapters/mysql2/connection_test.rb +48 -50
  31. data/test/cases/adapters/mysql2/count_deleted_rows_with_lock_test.rb +28 -0
  32. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +23 -19
  33. data/test/cases/adapters/mysql2/enum_test.rb +32 -11
  34. data/test/cases/adapters/mysql2/explain_test.rb +13 -11
  35. data/test/cases/adapters/mysql2/json_test.rb +17 -188
  36. data/test/cases/adapters/mysql2/mysql2_adapter_prevent_writes_test.rb +208 -0
  37. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +183 -28
  38. data/test/cases/adapters/mysql2/nested_deadlock_test.rb +75 -0
  39. data/test/cases/adapters/mysql2/optimizer_hints_test.rb +69 -0
  40. data/test/cases/adapters/mysql2/schema_migrations_test.rb +26 -21
  41. data/test/cases/adapters/mysql2/schema_test.rb +24 -22
  42. data/test/cases/adapters/mysql2/set_test.rb +32 -0
  43. data/test/cases/adapters/mysql2/sp_test.rb +10 -8
  44. data/test/cases/adapters/mysql2/sql_types_test.rb +8 -6
  45. data/test/cases/adapters/mysql2/table_options_test.rb +93 -10
  46. data/test/cases/adapters/mysql2/transaction_test.rb +151 -0
  47. data/test/cases/adapters/mysql2/unsigned_type_test.rb +11 -9
  48. data/test/cases/adapters/mysql2/virtual_column_test.rb +66 -0
  49. data/test/cases/adapters/postgresql/active_schema_test.rb +40 -25
  50. data/test/cases/adapters/postgresql/array_test.rb +118 -63
  51. data/test/cases/adapters/postgresql/bit_string_test.rb +12 -10
  52. data/test/cases/adapters/postgresql/bytea_test.rb +26 -25
  53. data/test/cases/adapters/postgresql/case_insensitive_test.rb +10 -9
  54. data/test/cases/adapters/postgresql/change_schema_test.rb +7 -5
  55. data/test/cases/adapters/postgresql/cidr_test.rb +2 -0
  56. data/test/cases/adapters/postgresql/citext_test.rb +58 -58
  57. data/test/cases/adapters/postgresql/collation_test.rb +17 -15
  58. data/test/cases/adapters/postgresql/composite_test.rb +25 -23
  59. data/test/cases/adapters/postgresql/connection_test.rb +73 -85
  60. data/test/cases/adapters/postgresql/create_unlogged_tables_test.rb +74 -0
  61. data/test/cases/adapters/postgresql/datatype_test.rb +19 -22
  62. data/test/cases/adapters/postgresql/date_test.rb +42 -0
  63. data/test/cases/adapters/postgresql/domain_test.rb +9 -7
  64. data/test/cases/adapters/postgresql/enum_test.rb +12 -10
  65. data/test/cases/adapters/postgresql/explain_test.rb +10 -8
  66. data/test/cases/adapters/postgresql/extension_migration_test.rb +13 -12
  67. data/test/cases/adapters/postgresql/foreign_table_test.rb +109 -0
  68. data/test/cases/adapters/postgresql/full_text_test.rb +8 -6
  69. data/test/cases/adapters/postgresql/geometric_test.rb +57 -63
  70. data/test/cases/adapters/postgresql/hstore_test.rb +288 -280
  71. data/test/cases/adapters/postgresql/infinity_test.rb +54 -15
  72. data/test/cases/adapters/postgresql/integer_test.rb +2 -0
  73. data/test/cases/adapters/postgresql/interval_test.rb +99 -0
  74. data/test/cases/adapters/postgresql/json_test.rb +16 -201
  75. data/test/cases/adapters/postgresql/ltree_test.rb +14 -16
  76. data/test/cases/adapters/postgresql/money_test.rb +47 -16
  77. data/test/cases/adapters/postgresql/network_test.rb +36 -28
  78. data/test/cases/adapters/postgresql/numbers_test.rb +7 -5
  79. data/test/cases/adapters/postgresql/optimizer_hints_test.rb +71 -0
  80. data/test/cases/adapters/postgresql/partitions_test.rb +22 -0
  81. data/test/cases/adapters/postgresql/postgresql_adapter_prevent_writes_test.rb +205 -0
  82. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +178 -136
  83. data/test/cases/adapters/postgresql/prepared_statements_disabled_test.rb +27 -0
  84. data/test/cases/adapters/postgresql/quoting_test.rb +12 -6
  85. data/test/cases/adapters/postgresql/range_test.rb +406 -292
  86. data/test/cases/adapters/postgresql/referential_integrity_test.rb +16 -15
  87. data/test/cases/adapters/postgresql/rename_table_test.rb +9 -8
  88. data/test/cases/adapters/postgresql/schema_authorization_test.rb +14 -23
  89. data/test/cases/adapters/postgresql/schema_test.rb +207 -91
  90. data/test/cases/adapters/postgresql/serial_test.rb +9 -7
  91. data/test/cases/adapters/postgresql/statement_pool_test.rb +26 -6
  92. data/test/cases/adapters/postgresql/timestamp_test.rb +17 -15
  93. data/test/cases/adapters/postgresql/transaction_nested_test.rb +114 -0
  94. data/test/cases/adapters/postgresql/transaction_test.rb +189 -0
  95. data/test/cases/adapters/postgresql/type_lookup_test.rb +12 -10
  96. data/test/cases/adapters/postgresql/utils_test.rb +11 -9
  97. data/test/cases/adapters/postgresql/uuid_test.rb +226 -109
  98. data/test/cases/adapters/postgresql/xml_test.rb +10 -14
  99. data/test/cases/adapters/sqlite3/collation_test.rb +26 -15
  100. data/test/cases/adapters/sqlite3/copy_table_test.rb +31 -28
  101. data/test/cases/adapters/sqlite3/explain_test.rb +13 -11
  102. data/test/cases/adapters/sqlite3/json_test.rb +29 -0
  103. data/test/cases/adapters/sqlite3/quoting_test.rb +35 -57
  104. data/test/cases/adapters/sqlite3/sqlite3_adapter_prevent_writes_test.rb +186 -0
  105. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +318 -131
  106. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +11 -11
  107. data/test/cases/adapters/sqlite3/statement_pool_test.rb +7 -6
  108. data/test/cases/adapters/sqlite3/transaction_test.rb +123 -0
  109. data/test/cases/aggregations_test.rb +14 -12
  110. data/test/cases/annotate_test.rb +46 -0
  111. data/test/cases/ar_schema_test.rb +153 -86
  112. data/test/cases/arel/attributes/attribute_test.rb +1145 -0
  113. data/test/cases/arel/attributes/math_test.rb +83 -0
  114. data/test/cases/arel/attributes_test.rb +27 -0
  115. data/test/cases/arel/collectors/bind_test.rb +40 -0
  116. data/test/cases/arel/collectors/composite_test.rb +47 -0
  117. data/test/cases/arel/collectors/sql_string_test.rb +41 -0
  118. data/test/cases/arel/collectors/substitute_bind_collector_test.rb +48 -0
  119. data/test/cases/arel/crud_test.rb +65 -0
  120. data/test/cases/arel/delete_manager_test.rb +53 -0
  121. data/test/cases/arel/factory_methods_test.rb +46 -0
  122. data/test/cases/arel/helper.rb +45 -0
  123. data/test/cases/arel/insert_manager_test.rb +241 -0
  124. data/test/cases/arel/nodes/and_test.rb +30 -0
  125. data/test/cases/arel/nodes/as_test.rb +36 -0
  126. data/test/cases/arel/nodes/ascending_test.rb +46 -0
  127. data/test/cases/arel/nodes/bin_test.rb +35 -0
  128. data/test/cases/arel/nodes/binary_test.rb +29 -0
  129. data/test/cases/arel/nodes/bind_param_test.rb +22 -0
  130. data/test/cases/arel/nodes/case_test.rb +96 -0
  131. data/test/cases/arel/nodes/casted_test.rb +18 -0
  132. data/test/cases/arel/nodes/comment_test.rb +22 -0
  133. data/test/cases/arel/nodes/count_test.rb +35 -0
  134. data/test/cases/arel/nodes/delete_statement_test.rb +36 -0
  135. data/test/cases/arel/nodes/descending_test.rb +46 -0
  136. data/test/cases/arel/nodes/distinct_test.rb +21 -0
  137. data/test/cases/arel/nodes/equality_test.rb +62 -0
  138. data/test/cases/arel/nodes/extract_test.rb +43 -0
  139. data/test/cases/arel/nodes/false_test.rb +21 -0
  140. data/test/cases/arel/nodes/grouping_test.rb +26 -0
  141. data/test/cases/arel/nodes/infix_operation_test.rb +42 -0
  142. data/test/cases/arel/nodes/insert_statement_test.rb +44 -0
  143. data/test/cases/arel/nodes/named_function_test.rb +48 -0
  144. data/test/cases/arel/nodes/node_test.rb +22 -0
  145. data/test/cases/arel/nodes/not_test.rb +31 -0
  146. data/test/cases/arel/nodes/or_test.rb +36 -0
  147. data/test/cases/arel/nodes/over_test.rb +69 -0
  148. data/test/cases/arel/nodes/select_core_test.rb +79 -0
  149. data/test/cases/arel/nodes/select_statement_test.rb +51 -0
  150. data/test/cases/arel/nodes/sql_literal_test.rb +75 -0
  151. data/test/cases/arel/nodes/sum_test.rb +35 -0
  152. data/test/cases/arel/nodes/table_alias_test.rb +29 -0
  153. data/test/cases/arel/nodes/true_test.rb +21 -0
  154. data/test/cases/arel/nodes/unary_operation_test.rb +41 -0
  155. data/test/cases/arel/nodes/update_statement_test.rb +60 -0
  156. data/test/cases/arel/nodes/window_test.rb +81 -0
  157. data/test/cases/arel/nodes_test.rb +34 -0
  158. data/test/cases/arel/select_manager_test.rb +1238 -0
  159. data/test/cases/arel/support/fake_record.rb +135 -0
  160. data/test/cases/arel/table_test.rb +216 -0
  161. data/test/cases/arel/update_manager_test.rb +126 -0
  162. data/test/cases/arel/visitors/dispatch_contamination_test.rb +78 -0
  163. data/test/cases/arel/visitors/dot_test.rb +90 -0
  164. data/test/cases/arel/visitors/mysql_test.rb +157 -0
  165. data/test/cases/arel/visitors/postgres_test.rb +366 -0
  166. data/test/cases/arel/visitors/sqlite_test.rb +75 -0
  167. data/test/cases/arel/visitors/to_sql_test.rb +750 -0
  168. data/test/cases/associations/belongs_to_associations_test.rb +510 -158
  169. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +4 -2
  170. data/test/cases/associations/callbacks_test.rb +56 -38
  171. data/test/cases/associations/cascaded_eager_loading_test.rb +118 -61
  172. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +138 -18
  173. data/test/cases/associations/eager_load_nested_include_test.rb +38 -37
  174. data/test/cases/associations/eager_singularization_test.rb +21 -21
  175. data/test/cases/associations/eager_test.rb +559 -415
  176. data/test/cases/associations/extension_test.rb +18 -12
  177. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +234 -213
  178. data/test/cases/associations/has_many_associations_test.rb +1038 -465
  179. data/test/cases/associations/has_many_through_associations_test.rb +558 -249
  180. data/test/cases/associations/has_one_associations_test.rb +294 -129
  181. data/test/cases/associations/has_one_through_associations_test.rb +121 -75
  182. data/test/cases/associations/inner_join_association_test.rb +114 -38
  183. data/test/cases/associations/inverse_associations_test.rb +606 -398
  184. data/test/cases/associations/join_model_test.rb +158 -148
  185. data/test/cases/associations/left_outer_join_association_test.rb +59 -24
  186. data/test/cases/associations/nested_through_associations_test.rb +166 -109
  187. data/test/cases/associations/required_test.rb +35 -10
  188. data/test/cases/associations_test.rb +241 -110
  189. data/test/cases/attribute_methods/read_test.rb +11 -11
  190. data/test/cases/attribute_methods_test.rb +413 -298
  191. data/test/cases/attributes_test.rb +145 -27
  192. data/test/cases/autosave_association_test.rb +681 -436
  193. data/test/cases/base_prevent_writes_test.rb +229 -0
  194. data/test/cases/base_test.rb +599 -542
  195. data/test/cases/batches_test.rb +288 -82
  196. data/test/cases/binary_test.rb +26 -31
  197. data/test/cases/bind_parameter_test.rb +194 -21
  198. data/test/cases/boolean_test.rb +52 -0
  199. data/test/cases/cache_key_test.rb +110 -5
  200. data/test/cases/calculations_test.rb +740 -177
  201. data/test/cases/callbacks_test.rb +74 -207
  202. data/test/cases/clone_test.rb +15 -10
  203. data/test/cases/coders/json_test.rb +2 -0
  204. data/test/cases/coders/yaml_column_test.rb +16 -13
  205. data/test/cases/collection_cache_key_test.rb +177 -20
  206. data/test/cases/column_alias_test.rb +9 -7
  207. data/test/cases/column_definition_test.rb +10 -68
  208. data/test/cases/comment_test.rb +166 -107
  209. data/test/cases/connection_adapters/adapter_leasing_test.rb +14 -10
  210. data/test/cases/connection_adapters/connection_handler_test.rb +358 -51
  211. data/test/cases/connection_adapters/connection_handlers_multi_db_test.rb +400 -0
  212. data/test/cases/connection_adapters/connection_handlers_multi_pool_config_test.rb +103 -0
  213. data/test/cases/connection_adapters/connection_handlers_sharding_db_test.rb +499 -0
  214. data/test/cases/connection_adapters/connection_swapping_nested_test.rb +457 -0
  215. data/test/cases/connection_adapters/legacy_connection_handlers_multi_db_test.rb +486 -0
  216. data/test/cases/connection_adapters/legacy_connection_handlers_sharding_db_test.rb +586 -0
  217. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +319 -138
  218. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +62 -50
  219. data/test/cases/connection_adapters/schema_cache_test.rb +259 -26
  220. data/test/cases/connection_adapters/type_lookup_test.rb +96 -95
  221. data/test/cases/connection_management_test.rb +13 -11
  222. data/test/cases/connection_pool_test.rb +316 -83
  223. data/test/cases/core_test.rb +82 -58
  224. data/test/cases/counter_cache_test.rb +204 -50
  225. data/test/cases/custom_locking_test.rb +5 -3
  226. data/test/cases/database_configurations/hash_config_test.rb +74 -0
  227. data/test/cases/database_configurations/resolver_test.rb +150 -0
  228. data/test/cases/database_configurations_test.rb +145 -0
  229. data/test/cases/database_selector_test.rb +296 -0
  230. data/test/cases/database_statements_test.rb +18 -16
  231. data/test/cases/date_test.rb +8 -16
  232. data/test/cases/date_time_precision_test.rb +100 -78
  233. data/test/cases/date_time_test.rb +23 -8
  234. data/test/cases/defaults_test.rb +106 -71
  235. data/test/cases/delegated_type_test.rb +57 -0
  236. data/test/cases/dirty_test.rb +419 -223
  237. data/test/cases/disconnected_test.rb +6 -6
  238. data/test/cases/dup_test.rb +54 -27
  239. data/test/cases/enum_test.rb +461 -82
  240. data/test/cases/errors_test.rb +7 -7
  241. data/test/cases/explain_subscriber_test.rb +17 -15
  242. data/test/cases/explain_test.rb +11 -19
  243. data/test/cases/filter_attributes_test.rb +153 -0
  244. data/test/cases/finder_respond_to_test.rb +14 -14
  245. data/test/cases/finder_test.rb +669 -287
  246. data/test/cases/fixture_set/file_test.rb +34 -38
  247. data/test/cases/fixtures_test.rb +833 -176
  248. data/test/cases/forbidden_attributes_protection_test.rb +32 -67
  249. data/test/cases/habtm_destroy_order_test.rb +25 -25
  250. data/test/cases/helper.rb +78 -49
  251. data/test/cases/hot_compatibility_test.rb +33 -32
  252. data/test/cases/i18n_test.rb +18 -17
  253. data/test/cases/inheritance_test.rb +180 -115
  254. data/test/cases/insert_all_test.rb +489 -0
  255. data/test/cases/instrumentation_test.rb +101 -0
  256. data/test/cases/integration_test.rb +119 -31
  257. data/test/cases/invalid_connection_test.rb +18 -16
  258. data/test/cases/invertible_migration_test.rb +183 -43
  259. data/test/cases/json_attribute_test.rb +35 -0
  260. data/test/cases/json_serialization_test.rb +57 -58
  261. data/test/cases/json_shared_test_cases.rb +290 -0
  262. data/test/cases/locking_test.rb +413 -119
  263. data/test/cases/log_subscriber_test.rb +68 -26
  264. data/test/cases/marshal_serialization_test.rb +39 -0
  265. data/test/cases/migration/change_schema_test.rb +118 -72
  266. data/test/cases/migration/change_table_test.rb +138 -30
  267. data/test/cases/migration/check_constraint_test.rb +162 -0
  268. data/test/cases/migration/column_attributes_test.rb +45 -35
  269. data/test/cases/migration/column_positioning_test.rb +18 -6
  270. data/test/cases/migration/columns_test.rb +93 -77
  271. data/test/cases/migration/command_recorder_test.rb +121 -34
  272. data/test/cases/migration/compatibility_test.rb +578 -23
  273. data/test/cases/migration/create_join_table_test.rb +35 -25
  274. data/test/cases/migration/foreign_key_test.rb +503 -284
  275. data/test/cases/migration/helper.rb +4 -3
  276. data/test/cases/migration/index_test.rb +119 -70
  277. data/test/cases/migration/logger_test.rb +9 -6
  278. data/test/cases/migration/pending_migrations_test.rb +88 -34
  279. data/test/cases/migration/references_foreign_key_test.rb +164 -150
  280. data/test/cases/migration/references_index_test.rb +38 -19
  281. data/test/cases/migration/references_statements_test.rb +15 -14
  282. data/test/cases/migration/rename_table_test.rb +53 -30
  283. data/test/cases/migration_test.rb +637 -269
  284. data/test/cases/migrator_test.rb +191 -135
  285. data/test/cases/mixin_test.rb +7 -11
  286. data/test/cases/modules_test.rb +36 -34
  287. data/test/cases/multi_db_migrator_test.rb +223 -0
  288. data/test/cases/multiparameter_attributes_test.rb +60 -33
  289. data/test/cases/multiple_db_test.rb +16 -22
  290. data/test/cases/nested_attributes_test.rb +341 -320
  291. data/test/cases/nested_attributes_with_callbacks_test.rb +26 -24
  292. data/test/cases/null_relation_test.rb +84 -0
  293. data/test/cases/numeric_data_test.rb +93 -0
  294. data/test/cases/persistence_test.rb +361 -269
  295. data/test/cases/pooled_connections_test.rb +18 -26
  296. data/test/cases/prepared_statement_status_test.rb +48 -0
  297. data/test/cases/primary_keys_test.rb +210 -104
  298. data/test/cases/query_cache_test.rb +610 -141
  299. data/test/cases/quoting_test.rb +132 -31
  300. data/test/cases/readonly_test.rb +49 -48
  301. data/test/cases/reaper_test.rb +146 -32
  302. data/test/cases/reflection_test.rb +167 -156
  303. data/test/cases/relation/delegation_test.rb +49 -36
  304. data/test/cases/relation/delete_all_test.rb +117 -0
  305. data/test/cases/relation/merging_test.rb +319 -42
  306. data/test/cases/relation/mutation_test.rb +55 -93
  307. data/test/cases/relation/or_test.rb +129 -29
  308. data/test/cases/relation/predicate_builder_test.rb +21 -6
  309. data/test/cases/relation/record_fetch_warning_test.rb +5 -3
  310. data/test/cases/relation/select_test.rb +67 -0
  311. data/test/cases/relation/update_all_test.rb +317 -0
  312. data/test/cases/relation/where_chain_test.rb +68 -32
  313. data/test/cases/relation/where_clause_test.rb +136 -61
  314. data/test/cases/relation/where_test.rb +155 -48
  315. data/test/cases/relation_test.rb +266 -112
  316. data/test/cases/relations_test.rb +969 -744
  317. data/test/cases/reload_models_test.rb +13 -9
  318. data/test/cases/reserved_word_test.rb +141 -0
  319. data/test/cases/result_test.rb +68 -17
  320. data/test/cases/sanitize_test.rb +87 -71
  321. data/test/cases/schema_dumper_test.rb +221 -128
  322. data/test/cases/schema_loading_test.rb +3 -2
  323. data/test/cases/scoping/default_scoping_test.rb +185 -144
  324. data/test/cases/scoping/named_scoping_test.rb +177 -89
  325. data/test/cases/scoping/relation_scoping_test.rb +197 -75
  326. data/test/cases/secure_token_test.rb +18 -3
  327. data/test/cases/serialization_test.rb +30 -28
  328. data/test/cases/serialized_attribute_test.rb +133 -42
  329. data/test/cases/signed_id_test.rb +168 -0
  330. data/test/cases/statement_cache_test.rb +41 -24
  331. data/test/cases/statement_invalid_test.rb +42 -0
  332. data/test/cases/store_test.rb +180 -55
  333. data/test/cases/strict_loading_test.rb +473 -0
  334. data/test/cases/suppressor_test.rb +26 -12
  335. data/test/cases/tasks/database_tasks_test.rb +1258 -194
  336. data/test/cases/tasks/mysql_rake_test.rb +370 -298
  337. data/test/cases/tasks/postgresql_rake_test.rb +481 -251
  338. data/test/cases/tasks/sqlite_rake_test.rb +225 -178
  339. data/test/cases/test_case.rb +51 -40
  340. data/test/cases/test_databases_test.rb +79 -0
  341. data/test/cases/test_fixtures_test.rb +79 -19
  342. data/test/cases/time_precision_test.rb +98 -76
  343. data/test/cases/timestamp_test.rb +102 -99
  344. data/test/cases/touch_later_test.rb +12 -10
  345. data/test/cases/transaction_callbacks_test.rb +344 -90
  346. data/test/cases/transaction_isolation_test.rb +12 -12
  347. data/test/cases/transactions_test.rb +612 -162
  348. data/test/cases/type/adapter_specific_registry_test.rb +14 -2
  349. data/test/cases/type/date_time_test.rb +4 -2
  350. data/test/cases/type/integer_test.rb +4 -2
  351. data/test/cases/type/string_test.rb +10 -8
  352. data/test/cases/type/time_test.rb +28 -0
  353. data/test/cases/type/type_map_test.rb +29 -28
  354. data/test/cases/type/unsigned_integer_test.rb +19 -0
  355. data/test/cases/type_test.rb +2 -0
  356. data/test/cases/types_test.rb +3 -1
  357. data/test/cases/unconnected_test.rb +14 -1
  358. data/test/cases/unsafe_raw_sql_test.rb +274 -0
  359. data/test/cases/validations/absence_validation_test.rb +19 -17
  360. data/test/cases/validations/association_validation_test.rb +30 -28
  361. data/test/cases/validations/i18n_generate_message_validation_test.rb +34 -16
  362. data/test/cases/validations/i18n_validation_test.rb +22 -21
  363. data/test/cases/validations/length_validation_test.rb +34 -33
  364. data/test/cases/validations/numericality_validation_test.rb +181 -0
  365. data/test/cases/validations/presence_validation_test.rb +21 -19
  366. data/test/cases/validations/uniqueness_validation_test.rb +156 -86
  367. data/test/cases/validations_repair_helper.rb +2 -0
  368. data/test/cases/validations_test.rb +61 -26
  369. data/test/cases/view_test.rb +122 -116
  370. data/test/cases/yaml_serialization_test.rb +79 -34
  371. data/test/config.example.yml +19 -19
  372. data/test/config.rb +3 -1
  373. data/test/config.yml +16 -6
  374. data/test/fixtures/all/namespaced/accounts.yml +2 -0
  375. data/test/fixtures/author_addresses.yml +1 -8
  376. data/test/fixtures/authors.yml +1 -7
  377. data/test/fixtures/binaries.yml +4 -0
  378. data/test/fixtures/books.yml +9 -2
  379. data/test/fixtures/categories_posts.yml +3 -0
  380. data/test/fixtures/citations.yml +5 -0
  381. data/test/fixtures/comments.yml +7 -0
  382. data/test/fixtures/companies.yml +5 -0
  383. data/test/fixtures/computers.yml +2 -0
  384. data/test/fixtures/customers.yml +10 -1
  385. data/test/fixtures/developers.yml +1 -1
  386. data/test/fixtures/essays.yml +10 -0
  387. data/test/fixtures/faces.yml +3 -3
  388. data/test/fixtures/humans.yml +5 -0
  389. data/test/fixtures/interests.yml +7 -7
  390. data/test/fixtures/memberships.yml +7 -0
  391. data/test/fixtures/minimalistics.yml +3 -0
  392. data/test/fixtures/mixed_case_monkeys.yml +2 -2
  393. data/test/fixtures/naked/yml/courses_with_invalid_key.yml +3 -0
  394. data/test/fixtures/naked/yml/parrots.yml +1 -0
  395. data/test/fixtures/other_books.yml +26 -0
  396. data/test/fixtures/other_posts.yml +1 -0
  397. data/test/fixtures/parrots.yml +7 -1
  398. data/test/fixtures/pirates.yml +3 -0
  399. data/test/fixtures/posts.yml +11 -3
  400. data/test/fixtures/readers.yml +6 -0
  401. data/test/fixtures/reserved_words/values.yml +2 -2
  402. data/test/fixtures/sponsors.yml +3 -0
  403. data/test/fixtures/strict_zines.yml +2 -0
  404. data/test/fixtures/subscribers.yml +1 -1
  405. data/test/fixtures/tasks.yml +1 -1
  406. data/test/fixtures/warehouse-things.yml +3 -0
  407. data/test/migrations/10_urban/9_add_expressions.rb +2 -0
  408. data/test/migrations/decimal/1_give_me_big_numbers.rb +6 -4
  409. data/test/migrations/magic/1_currencies_have_symbols.rb +3 -2
  410. data/test/migrations/missing/1000_people_have_middle_names.rb +2 -0
  411. data/test/migrations/missing/1_people_have_last_names.rb +2 -0
  412. data/test/migrations/missing/3_we_need_reminders.rb +2 -0
  413. data/test/migrations/missing/4_innocent_jointable.rb +3 -1
  414. data/test/migrations/rename/1_we_need_things.rb +2 -0
  415. data/test/migrations/rename/2_rename_things.rb +2 -0
  416. data/test/migrations/to_copy/1_people_have_hobbies.rb +3 -1
  417. data/test/migrations/to_copy/2_people_have_descriptions.rb +3 -1
  418. data/test/migrations/to_copy2/1_create_articles.rb +2 -0
  419. data/test/migrations/to_copy2/2_create_comments.rb +3 -1
  420. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +3 -1
  421. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +3 -1
  422. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +3 -1
  423. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +2 -0
  424. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +2 -0
  425. data/test/migrations/valid/1_valid_people_have_last_names.rb +2 -0
  426. data/test/migrations/valid/2_we_need_reminders.rb +2 -0
  427. data/test/migrations/valid/3_innocent_jointable.rb +3 -1
  428. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +2 -0
  429. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -0
  430. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +3 -1
  431. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +2 -0
  432. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +2 -0
  433. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +3 -1
  434. data/test/migrations/version_check/20131219224947_migration_version_check.rb +2 -0
  435. data/test/models/account.rb +46 -0
  436. data/test/models/admin/account.rb +3 -1
  437. data/test/models/admin/randomly_named_c1.rb +2 -0
  438. data/test/models/admin/user.rb +16 -8
  439. data/test/models/admin.rb +4 -2
  440. data/test/models/aircraft.rb +3 -1
  441. data/test/models/arunit2_model.rb +2 -0
  442. data/test/models/author.rb +153 -102
  443. data/test/models/auto_id.rb +2 -0
  444. data/test/models/autoloadable/extra_firm.rb +2 -0
  445. data/test/models/binary.rb +3 -1
  446. data/test/models/binary_field.rb +6 -0
  447. data/test/models/bird.rb +13 -1
  448. data/test/models/book.rb +14 -4
  449. data/test/models/book_destroy_async.rb +24 -0
  450. data/test/models/boolean.rb +5 -0
  451. data/test/models/bulb.rb +13 -4
  452. data/test/models/cake_designer.rb +2 -0
  453. data/test/models/car.rb +17 -10
  454. data/test/models/carrier.rb +2 -0
  455. data/test/models/cart.rb +5 -0
  456. data/test/models/cat.rb +2 -0
  457. data/test/models/categorization.rb +8 -6
  458. data/test/models/category.rb +28 -16
  459. data/test/models/chef.rb +2 -0
  460. data/test/models/citation.rb +5 -1
  461. data/test/models/club.rb +13 -10
  462. data/test/models/college.rb +4 -2
  463. data/test/models/column.rb +2 -0
  464. data/test/models/column_name.rb +2 -0
  465. data/test/models/comment.rb +32 -10
  466. data/test/models/company.rb +102 -106
  467. data/test/models/company_in_module.rb +27 -26
  468. data/test/models/computer.rb +3 -1
  469. data/test/models/contact.rb +15 -13
  470. data/test/models/content.rb +5 -3
  471. data/test/models/contract.rb +21 -3
  472. data/test/models/country.rb +2 -4
  473. data/test/models/course.rb +3 -1
  474. data/test/models/customer.rb +10 -8
  475. data/test/models/customer_carrier.rb +2 -0
  476. data/test/models/dashboard.rb +2 -0
  477. data/test/models/default.rb +2 -0
  478. data/test/models/department.rb +2 -0
  479. data/test/models/destroy_async_parent.rb +15 -0
  480. data/test/models/destroy_async_parent_soft_delete.rb +20 -0
  481. data/test/models/developer.rb +152 -85
  482. data/test/models/dl_keyed_belongs_to.rb +13 -0
  483. data/test/models/dl_keyed_belongs_to_soft_delete.rb +19 -0
  484. data/test/models/dl_keyed_has_many.rb +5 -0
  485. data/test/models/dl_keyed_has_many_through.rb +5 -0
  486. data/test/models/dl_keyed_has_one.rb +5 -0
  487. data/test/models/dl_keyed_join.rb +10 -0
  488. data/test/models/dog.rb +2 -0
  489. data/test/models/dog_lover.rb +2 -0
  490. data/test/models/doubloon.rb +3 -1
  491. data/test/models/drink_designer.rb +17 -0
  492. data/test/models/edge.rb +4 -2
  493. data/test/models/electron.rb +2 -0
  494. data/test/models/engine.rb +3 -2
  495. data/test/models/entrant.rb +2 -0
  496. data/test/models/entry.rb +5 -0
  497. data/test/models/essay.rb +6 -3
  498. data/test/models/essay_destroy_async.rb +12 -0
  499. data/test/models/event.rb +3 -1
  500. data/test/models/eye.rb +5 -3
  501. data/test/models/face.rb +14 -6
  502. data/test/models/family.rb +6 -0
  503. data/test/models/family_tree.rb +6 -0
  504. data/test/models/friendship.rb +5 -3
  505. data/test/models/frog.rb +8 -0
  506. data/test/models/guid.rb +3 -1
  507. data/test/models/guitar.rb +2 -0
  508. data/test/models/hotel.rb +5 -3
  509. data/test/models/human.rb +39 -0
  510. data/test/models/image.rb +3 -1
  511. data/test/models/interest.rb +14 -3
  512. data/test/models/invoice.rb +4 -2
  513. data/test/models/item.rb +3 -1
  514. data/test/models/job.rb +5 -3
  515. data/test/models/joke.rb +4 -2
  516. data/test/models/keyboard.rb +3 -1
  517. data/test/models/legacy_thing.rb +2 -0
  518. data/test/models/lesson.rb +2 -0
  519. data/test/models/line_item.rb +3 -1
  520. data/test/models/liquid.rb +2 -0
  521. data/test/models/matey.rb +3 -1
  522. data/test/models/measurement.rb +4 -0
  523. data/test/models/member.rb +23 -20
  524. data/test/models/member_detail.rb +3 -0
  525. data/test/models/member_type.rb +2 -0
  526. data/test/models/membership.rb +4 -1
  527. data/test/models/mentor.rb +3 -1
  528. data/test/models/message.rb +5 -0
  529. data/test/models/minimalistic.rb +2 -0
  530. data/test/models/minivan.rb +3 -2
  531. data/test/models/mixed_case_monkey.rb +3 -1
  532. data/test/models/molecule.rb +2 -0
  533. data/test/models/mouse.rb +6 -0
  534. data/test/models/movie.rb +2 -0
  535. data/test/models/node.rb +4 -2
  536. data/test/models/non_primary_key.rb +2 -0
  537. data/test/models/notification.rb +2 -0
  538. data/test/models/numeric_data.rb +12 -0
  539. data/test/models/order.rb +4 -2
  540. data/test/models/organization.rb +9 -7
  541. data/test/models/other_dog.rb +3 -1
  542. data/test/models/owner.rb +6 -4
  543. data/test/models/parrot.rb +12 -4
  544. data/test/models/person.rb +59 -54
  545. data/test/models/personal_legacy_thing.rb +3 -1
  546. data/test/models/pet.rb +4 -2
  547. data/test/models/pet_treasure.rb +2 -0
  548. data/test/models/pirate.rb +67 -43
  549. data/test/models/possession.rb +3 -1
  550. data/test/models/post.rb +184 -86
  551. data/test/models/price_estimate.rb +11 -1
  552. data/test/models/professor.rb +3 -1
  553. data/test/models/project.rb +14 -12
  554. data/test/models/publisher/article.rb +2 -0
  555. data/test/models/publisher/magazine.rb +2 -0
  556. data/test/models/publisher.rb +2 -0
  557. data/test/models/randomly_named_c1.rb +2 -0
  558. data/test/models/rating.rb +5 -1
  559. data/test/models/reader.rb +7 -5
  560. data/test/models/recipe.rb +2 -0
  561. data/test/models/record.rb +2 -0
  562. data/test/models/reference.rb +6 -3
  563. data/test/models/reply.rb +39 -21
  564. data/test/models/room.rb +6 -0
  565. data/test/models/section.rb +6 -0
  566. data/test/models/seminar.rb +6 -0
  567. data/test/models/session.rb +6 -0
  568. data/test/models/ship.rb +12 -9
  569. data/test/models/ship_part.rb +5 -3
  570. data/test/models/shop.rb +4 -2
  571. data/test/models/shop_account.rb +2 -0
  572. data/test/models/speedometer.rb +2 -0
  573. data/test/models/sponsor.rb +8 -5
  574. data/test/models/squeak.rb +6 -0
  575. data/test/models/strict_zine.rb +7 -0
  576. data/test/models/string_key_object.rb +2 -0
  577. data/test/models/student.rb +2 -0
  578. data/test/models/subscriber.rb +4 -2
  579. data/test/models/subscription.rb +5 -1
  580. data/test/models/tag.rb +6 -3
  581. data/test/models/tagging.rb +13 -6
  582. data/test/models/task.rb +2 -0
  583. data/test/models/topic.rb +54 -19
  584. data/test/models/toy.rb +4 -0
  585. data/test/models/traffic_light.rb +2 -0
  586. data/test/models/treasure.rb +5 -3
  587. data/test/models/treaty.rb +2 -4
  588. data/test/models/tree.rb +2 -0
  589. data/test/models/tuning_peg.rb +2 -0
  590. data/test/models/tyre.rb +2 -0
  591. data/test/models/user.rb +12 -4
  592. data/test/models/uuid_child.rb +2 -0
  593. data/test/models/uuid_item.rb +2 -0
  594. data/test/models/uuid_parent.rb +2 -0
  595. data/test/models/vegetables.rb +12 -3
  596. data/test/models/vertex.rb +6 -4
  597. data/test/models/warehouse_thing.rb +2 -0
  598. data/test/models/wheel.rb +3 -1
  599. data/test/models/without_table.rb +3 -1
  600. data/test/models/zine.rb +3 -1
  601. data/test/schema/mysql2_specific_schema.rb +49 -35
  602. data/test/schema/oracle_specific_schema.rb +13 -15
  603. data/test/schema/postgresql_specific_schema.rb +51 -40
  604. data/test/schema/schema.rb +334 -154
  605. data/test/schema/sqlite_specific_schema.rb +9 -16
  606. data/test/support/config.rb +26 -26
  607. data/test/support/connection.rb +14 -8
  608. data/test/support/connection_helper.rb +3 -1
  609. data/test/support/ddl_helper.rb +2 -0
  610. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic.dump +0 -0
  611. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic_associations.dump +0 -0
  612. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic.dump +0 -0
  613. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic_associations.dump +0 -0
  614. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic.dump +0 -0
  615. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic_associations.dump +0 -0
  616. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic.dump +0 -0
  617. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic_associations.dump +0 -0
  618. data/test/support/marshal_compatibility_fixtures/legacy_6_0_record_mysql.dump +0 -0
  619. data/test/support/marshal_compatibility_fixtures/legacy_relation.dump +0 -0
  620. data/test/support/schema_dumping_helper.rb +2 -0
  621. data/test/support/stubs/strong_parameters.rb +40 -0
  622. data/test/support/yaml_compatibility_fixtures/rails_v1_mysql.yml +206 -0
  623. data/test/support/yaml_compatibility_fixtures/rails_v2.yml +55 -0
  624. metadata +196 -11
@@ -1,132 +1,155 @@
1
- require 'cases/helper'
1
+ # frozen_string_literal: true
2
2
 
3
- if ActiveRecord::Base.connection.supports_foreign_keys?
4
- module ActiveRecord
5
- class Migration
6
- class ReferencesForeignKeyTest < ActiveRecord::TestCase
7
- setup do
8
- @connection = ActiveRecord::Base.connection
9
- @connection.create_table(:testing_parents, force: true)
10
- end
3
+ require "cases/helper"
11
4
 
12
- teardown do
13
- @connection.drop_table "testings"
14
- #, if_exists: true
15
- @connection.drop_table "testing_parents"
16
- #, if_exists: true
17
- end
5
+ if ActiveRecord::Base.connection.supports_foreign_keys?
6
+ module ActiveRecord
7
+ class Migration
8
+ class ReferencesForeignKeyInCreateTest < ActiveRecord::TestCase
9
+ setup do
10
+ @connection = ActiveRecord::Base.connection
11
+ @connection.create_table(:testing_parents, force: true)
12
+ end
18
13
 
19
- test "foreign keys can be created with the table" do
20
- @connection.create_table :testings do |t|
21
- t.references :testing_parent, foreign_key: true
14
+ teardown do
15
+ @connection.drop_table "testings", if_exists: true
16
+ @connection.drop_table "testing_parents", if_exists: true
22
17
  end
23
18
 
24
- fk = @connection.foreign_keys("testings").first
25
- assert_equal "testings", fk.from_table
26
- assert_equal "testing_parents", fk.to_table
27
- end
19
+ test "foreign keys can be created with the table" do
20
+ @connection.create_table :testings do |t|
21
+ t.references :testing_parent, foreign_key: true
22
+ end
28
23
 
29
- test "no foreign key is created by default" do
30
- @connection.create_table :testings do |t|
31
- t.references :testing_parent
24
+ fk = @connection.foreign_keys("testings").first
25
+ assert_equal "testings", fk.from_table
26
+ assert_equal "testing_parents", fk.to_table
32
27
  end
33
28
 
34
- assert_equal [], @connection.foreign_keys("testings")
35
- end
36
-
37
- test "foreign keys can be created in one query when index is not added" do
38
- assert_queries(1) do
29
+ test "no foreign key is created by default" do
39
30
  @connection.create_table :testings do |t|
40
- t.references :testing_parent, foreign_key: true, index: false
31
+ t.references :testing_parent
41
32
  end
42
- end
43
- end
44
33
 
45
- test "options hash can be passed" do
46
- @connection.change_table :testing_parents do |t|
47
- t.integer :other_id
48
- t.index :other_id, unique: true
34
+ assert_equal [], @connection.foreign_keys("testings")
49
35
  end
50
- @connection.create_table :testings do |t|
51
- t.references :testing_parent, foreign_key: { primary_key: :other_id }
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
52
43
  end
53
44
 
54
- fk = @connection.foreign_keys("testings").find { |k| k.to_table == "testing_parents" }
55
- assert_equal "other_id", fk.primary_key
56
- end
45
+ test "options hash can be passed" do
46
+ @connection.change_table :testing_parents do |t|
47
+ t.references :other, index: { unique: true }
48
+ end
49
+ @connection.create_table :testings do |t|
50
+ t.references :testing_parent, foreign_key: { primary_key: :other_id }
51
+ end
57
52
 
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 }
53
+ fk = @connection.foreign_keys("testings").find { |k| k.to_table == "testing_parents" }
54
+ assert_equal "other_id", fk.primary_key
61
55
  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
56
 
67
- test "foreign keys cannot be added to polymorphic relations when creating the table" do
68
- @connection.create_table :testings do |t|
69
- assert_raises(ArgumentError) do
70
- t.references :testing_parent, polymorphic: true, foreign_key: true
57
+ test "to_table option can be passed" do
58
+ @connection.create_table :testings do |t|
59
+ t.references :parent, foreign_key: { to_table: :testing_parents }
71
60
  end
61
+ fks = @connection.foreign_keys("testings")
62
+ assert_equal([["testings", "testing_parents", "parent_id"]],
63
+ fks.map { |fk| [fk.from_table, fk.to_table, fk.column] })
72
64
  end
73
65
  end
66
+ end
67
+ end
74
68
 
75
- test "foreign keys can be created while changing the table" do
76
- @connection.create_table :testings
77
- @connection.change_table :testings do |t|
78
- t.references :testing_parent, foreign_key: true
69
+ module ActiveRecord
70
+ class Migration
71
+ class ReferencesForeignKeyTest < ActiveRecord::TestCase
72
+ setup do
73
+ @connection = ActiveRecord::Base.connection
74
+ @connection.create_table(:testing_parents, force: true)
79
75
  end
80
76
 
81
- fk = @connection.foreign_keys("testings").first
82
- assert_equal "testings", fk.from_table
83
- assert_equal "testing_parents", fk.to_table
84
- end
77
+ teardown do
78
+ @connection.drop_table "testings", if_exists: true
79
+ @connection.drop_table "testing_parents", if_exists: true
80
+ end
85
81
 
86
- test "foreign keys are not added by default when changing the table" do
87
- @connection.create_table :testings
88
- @connection.change_table :testings do |t|
89
- t.references :testing_parent
82
+ test "foreign keys cannot be added to polymorphic relations when creating the table" do
83
+ @connection.create_table :testings do |t|
84
+ assert_raises(ArgumentError) do
85
+ t.references :testing_parent, polymorphic: true, foreign_key: true
86
+ end
87
+ end
90
88
  end
91
89
 
92
- assert_equal [], @connection.foreign_keys("testings")
93
- end
90
+ test "foreign keys can be created while changing the table" do
91
+ @connection.create_table :testings
92
+ @connection.change_table :testings do |t|
93
+ t.references :testing_parent, foreign_key: true
94
+ end
94
95
 
95
- test "foreign keys accept options when changing the table" do
96
- @connection.change_table :testing_parents do |t|
97
- t.integer :other_id
98
- t.index :other_id, unique: true
96
+ fk = @connection.foreign_keys("testings").first
97
+ assert_equal "testings", fk.from_table
98
+ assert_equal "testing_parents", fk.to_table
99
99
  end
100
- @connection.create_table :testings
101
- @connection.change_table :testings do |t|
102
- t.references :testing_parent, foreign_key: { primary_key: :other_id }
100
+
101
+ test "foreign keys are not added by default when changing the table" do
102
+ @connection.create_table :testings
103
+ @connection.change_table :testings do |t|
104
+ t.references :testing_parent
105
+ end
106
+
107
+ assert_equal [], @connection.foreign_keys("testings")
103
108
  end
104
109
 
105
- fk = @connection.foreign_keys("testings").find { |k| k.to_table == "testing_parents" }
106
- assert_equal "other_id", fk.primary_key
107
- end
110
+ test "foreign keys accept options when changing the table" do
111
+ @connection.change_table :testing_parents do |t|
112
+ t.references :other, index: { unique: true }
113
+ end
114
+ @connection.create_table :testings
115
+ @connection.change_table :testings do |t|
116
+ t.references :testing_parent, foreign_key: { primary_key: :other_id }
117
+ end
108
118
 
109
- test "foreign keys cannot be added to polymorphic relations when changing the table" do
110
- @connection.create_table :testings
111
- @connection.change_table :testings do |t|
112
- assert_raises(ArgumentError) do
113
- t.references :testing_parent, polymorphic: true, foreign_key: true
119
+ fk = @connection.foreign_keys("testings").find { |k| k.to_table == "testing_parents" }
120
+ assert_equal "other_id", fk.primary_key
121
+ end
122
+
123
+ test "foreign keys cannot be added to polymorphic relations when changing the table" do
124
+ @connection.create_table :testings
125
+ @connection.change_table :testings do |t|
126
+ assert_raises(ArgumentError) do
127
+ t.references :testing_parent, polymorphic: true, foreign_key: true
128
+ end
114
129
  end
115
130
  end
116
- end
117
131
 
118
- test "foreign key column can be removed" do
119
- @connection.create_table :testings do |t|
120
- t.references :testing_parent, index: true, foreign_key: true
132
+ test "foreign key column can be removed" do
133
+ @connection.create_table :testings do |t|
134
+ t.references :testing_parent, index: true, foreign_key: true
135
+ end
136
+
137
+ assert_difference "@connection.foreign_keys('testings').size", -1 do
138
+ @connection.remove_reference :testings, :testing_parent, foreign_key: true
139
+ end
121
140
  end
122
141
 
123
- assert_difference "@connection.foreign_keys('testings').size", -1 do
124
- @connection.remove_reference :testings, :testing_parent, foreign_key: true
142
+ test "removing column removes foreign key" do
143
+ @connection.create_table :testings do |t|
144
+ t.references :testing_parent, index: true, foreign_key: true
145
+ end
146
+
147
+ assert_difference "@connection.foreign_keys('testings').size", -1 do
148
+ @connection.remove_column :testings, :testing_parent_id
149
+ end
125
150
  end
126
- end
127
151
 
128
- test "foreign key methods respect pluralize_table_names" do
129
- begin
152
+ test "foreign key methods respect pluralize_table_names" do
130
153
  original_pluralize_table_names = ActiveRecord::Base.pluralize_table_names
131
154
  ActiveRecord::Base.pluralize_table_names = false
132
155
  @connection.create_table :testing
@@ -143,79 +166,70 @@ module ActiveRecord
143
166
  end
144
167
  ensure
145
168
  ActiveRecord::Base.pluralize_table_names = original_pluralize_table_names
146
- @connection.drop_table "testing"
147
- #, if_exists: true
169
+ @connection.drop_table "testing", if_exists: true
148
170
  end
149
- end
150
171
 
151
- class CreateDogsMigration < ActiveRecord::Migration::Current
152
- def change
153
- create_table :dog_owners
172
+ class CreateDogsMigration < ActiveRecord::Migration::Current
173
+ def change
174
+ create_table :dog_owners
154
175
 
155
- create_table :dogs do |t|
156
- t.references :dog_owner, foreign_key: true
176
+ create_table :dogs do |t|
177
+ t.references :dog_owner, foreign_key: true
178
+ end
157
179
  end
158
180
  end
159
- end
160
181
 
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
182
+ def test_references_foreign_key_with_prefix
183
+ ActiveRecord::Base.table_name_prefix = "p_"
184
+ migration = CreateDogsMigration.new
185
+ silence_stream($stdout) { migration.migrate(:up) }
186
+ assert_equal 1, @connection.foreign_keys("p_dogs").size
187
+ ensure
188
+ silence_stream($stdout) { migration.migrate(:down) }
189
+ ActiveRecord::Base.table_name_prefix = nil
190
+ end
170
191
 
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
192
+ def test_references_foreign_key_with_suffix
193
+ ActiveRecord::Base.table_name_suffix = "_s"
194
+ migration = CreateDogsMigration.new
195
+ silence_stream($stdout) { migration.migrate(:up) }
196
+ assert_equal 1, @connection.foreign_keys("dogs_s").size
197
+ ensure
198
+ silence_stream($stdout) { migration.migrate(:down) }
199
+ ActiveRecord::Base.table_name_suffix = nil
200
+ end
201
+
202
+ test "multiple foreign keys can be added to the same table" do
203
+ @connection.create_table :testings do |t|
204
+ t.references :parent1, foreign_key: { to_table: :testing_parents }
205
+ t.references :parent2, foreign_key: { to_table: :testing_parents }
206
+ t.references :self_join, foreign_key: { to_table: :testings }
207
+ end
180
208
 
181
- test "multiple foreign keys can be added to the same table" do
182
- @connection.create_table :testings do |t|
183
- t.integer :col_1
184
- t.integer :col_2
209
+ fks = @connection.foreign_keys("testings").sort_by(&:column)
185
210
 
186
- t.foreign_key :testing_parents, column: :col_1
187
- t.foreign_key :testing_parents, column: :col_2
211
+ fk_definitions = fks.map { |fk| [fk.from_table, fk.to_table, fk.column] }
212
+ assert_equal([["testings", "testing_parents", "parent1_id"],
213
+ ["testings", "testing_parents", "parent2_id"],
214
+ ["testings", "testings", "self_join_id"]], fk_definitions)
188
215
  end
189
216
 
190
- fks = @connection.foreign_keys("testings")
217
+ test "multiple foreign keys can be removed to the selected one" do
218
+ @connection.create_table :testings do |t|
219
+ t.references :parent1, foreign_key: { to_table: :testing_parents }
220
+ t.references :parent2, foreign_key: { to_table: :testing_parents }
221
+ end
191
222
 
192
- fk_definitions = fks.map {|fk| [fk.from_table, fk.to_table, fk.column] }
193
- assert_equal([["testings", "testing_parents", "col_1"],
194
- ["testings", "testing_parents", "col_2"]], fk_definitions)
195
- end
196
- end
197
- end
198
- end
199
- else
200
- class ReferencesWithoutForeignKeySupportTest < ActiveRecord::TestCase
201
- setup do
202
- @connection = ActiveRecord::Base.connection
203
- @connection.create_table(:testing_parents, force: true)
204
- end
223
+ assert_difference "@connection.foreign_keys('testings').size", -1 do
224
+ @connection.remove_reference :testings, :parent1, foreign_key: { to_table: :testing_parents }
225
+ end
205
226
 
206
- teardown do
207
- @connection.drop_table("testings")
208
- #, if_exists: true)
209
- @connection.drop_table("testing_parents")
210
- #, if_exists: true)
211
- end
227
+ fks = @connection.foreign_keys("testings").sort_by(&:column)
212
228
 
213
- test "ignores foreign keys defined with the table" do
214
- @connection.create_table :testings do |t|
215
- t.references :testing_parent, foreign_key: true
229
+ fk_definitions = fks.map { |fk| [fk.from_table, fk.to_table, fk.column] }
230
+ assert_equal([["testings", "testing_parents", "parent2_id"]], fk_definitions)
231
+ end
232
+ end
216
233
  end
217
-
218
- assert_includes @connection.data_sources, "testings"
219
234
  end
220
235
  end
221
- end
@@ -1,4 +1,6 @@
1
- require 'cases/helper'
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
2
4
 
3
5
  module ActiveRecord
4
6
  class Migration
@@ -17,10 +19,10 @@ module ActiveRecord
17
19
 
18
20
  def test_creates_index
19
21
  connection.create_table table_name do |t|
20
- t.references :foo, :index => true
22
+ t.references :foo, index: true
21
23
  end
22
24
 
23
- assert connection.index_exists?(table_name, :foo_id, :name => :index_testings_on_foo_id)
25
+ assert connection.index_exists?(table_name, :foo_id, name: :index_testings_on_foo_id)
24
26
  end
25
27
 
26
28
  def test_creates_index_by_default_even_if_index_option_is_not_passed
@@ -28,44 +30,52 @@ module ActiveRecord
28
30
  t.references :foo
29
31
  end
30
32
 
31
- assert connection.index_exists?(table_name, :foo_id, :name => :index_testings_on_foo_id)
33
+ assert connection.index_exists?(table_name, :foo_id, name: :index_testings_on_foo_id)
32
34
  end
33
35
 
34
36
  def test_does_not_create_index_explicit
35
37
  connection.create_table table_name do |t|
36
- t.references :foo, :index => false
38
+ t.references :foo, index: false
37
39
  end
38
40
 
39
- assert_not connection.index_exists?(table_name, :foo_id, :name => :index_testings_on_foo_id)
41
+ assert_not connection.index_exists?(table_name, :foo_id, name: :index_testings_on_foo_id)
40
42
  end
41
43
 
42
44
  def test_creates_index_with_options
43
45
  connection.create_table table_name do |t|
44
- t.references :foo, :index => {:name => :index_testings_on_yo_momma}
45
- t.references :bar, :index => {:unique => true}
46
+ t.references :foo, index: { name: :index_testings_on_yo_momma }
47
+ t.references :bar, index: { unique: true }
46
48
  end
47
49
 
48
- assert connection.index_exists?(table_name, :foo_id, :name => :index_testings_on_yo_momma)
49
- assert connection.index_exists?(table_name, :bar_id, :name => :index_testings_on_bar_id, :unique => true)
50
+ assert connection.index_exists?(table_name, :foo_id, name: :index_testings_on_yo_momma)
51
+ assert connection.index_exists?(table_name, :bar_id, name: :index_testings_on_bar_id, unique: true)
50
52
  end
51
53
 
52
54
  unless current_adapter? :OracleAdapter
53
55
  def test_creates_polymorphic_index
54
56
  connection.create_table table_name do |t|
55
- t.references :foo, :polymorphic => true, :index => true
57
+ t.references :foo, polymorphic: true, index: true
58
+ end
59
+
60
+ assert connection.index_exists?(table_name, [:foo_type, :foo_id], name: :index_testings_on_foo)
61
+ end
62
+
63
+ def test_creates_polymorphic_index_with_custom_name
64
+ connection.create_table table_name do |t|
65
+ t.references :foo, polymorphic: true, index: { name: :testings_foo_index }
56
66
  end
57
67
 
58
- assert connection.index_exists?(table_name, [:foo_type, :foo_id], name: :index_testings_on_foo_type_and_foo_id)
68
+ assert connection.index_exists?(table_name, [:foo_type, :foo_id], name: :testings_foo_index)
59
69
  end
60
70
  end
61
71
 
62
72
  def test_creates_index_for_existing_table
63
73
  connection.create_table table_name
64
74
  connection.change_table table_name do |t|
65
- t.references :foo, :index => true
75
+ t.references :foo, index: true
66
76
  end
67
77
 
68
- assert connection.index_exists?(table_name, :foo_id, :name => :index_testings_on_foo_id)
78
+ assert connection.index_exists?(table_name, :foo_id, name: :index_testings_on_foo_id)
69
79
  end
70
80
 
71
81
  def test_creates_index_for_existing_table_even_if_index_option_is_not_passed
@@ -74,26 +84,35 @@ module ActiveRecord
74
84
  t.references :foo
75
85
  end
76
86
 
77
- assert connection.index_exists?(table_name, :foo_id, :name => :index_testings_on_foo_id)
87
+ assert connection.index_exists?(table_name, :foo_id, name: :index_testings_on_foo_id)
78
88
  end
79
89
 
80
90
  def test_does_not_create_index_for_existing_table_explicit
81
91
  connection.create_table table_name
82
92
  connection.change_table table_name do |t|
83
- t.references :foo, :index => false
93
+ t.references :foo, index: false
84
94
  end
85
95
 
86
- assert_not connection.index_exists?(table_name, :foo_id, :name => :index_testings_on_foo_id)
96
+ assert_not connection.index_exists?(table_name, :foo_id, name: :index_testings_on_foo_id)
87
97
  end
88
98
 
89
99
  unless current_adapter? :OracleAdapter
90
100
  def test_creates_polymorphic_index_for_existing_table
91
101
  connection.create_table table_name
92
102
  connection.change_table table_name do |t|
93
- t.references :foo, :polymorphic => true, :index => true
103
+ t.references :foo, polymorphic: true, index: true
104
+ end
105
+
106
+ assert connection.index_exists?(table_name, [:foo_type, :foo_id], name: :index_testings_on_foo)
107
+ end
108
+
109
+ def test_creates_polymorphic_index_for_existing_table_with_custom_name
110
+ connection.create_table table_name
111
+ connection.change_table table_name do |t|
112
+ t.references :foo, polymorphic: true, index: { name: :testings_foo_index }
94
113
  end
95
114
 
96
- assert connection.index_exists?(table_name, [:foo_type, :foo_id], name: :index_testings_on_foo_type_and_foo_id)
115
+ assert connection.index_exists?(table_name, [:foo_type, :foo_id], name: :testings_foo_index)
97
116
  end
98
117
  end
99
118
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cases/migration/helper"
2
4
 
3
5
  module ActiveRecord
@@ -35,7 +37,7 @@ module ActiveRecord
35
37
  assert_not index_exists?(table_name, :user_id)
36
38
  end
37
39
 
38
- def test_create_reference_id_index_even_if_index_option_is_passed
40
+ def test_create_reference_id_index_even_if_index_option_is_not_passed
39
41
  add_reference table_name, :user
40
42
  assert index_exists?(table_name, :user_id)
41
43
  end
@@ -46,8 +48,8 @@ module ActiveRecord
46
48
  end
47
49
 
48
50
  def test_creates_reference_type_column_with_default
49
- add_reference table_name, :taggable, polymorphic: { default: 'Photo' }, index: true
50
- assert column_exists?(table_name, :taggable_type, :string, default: 'Photo')
51
+ add_reference table_name, :taggable, polymorphic: { default: "Photo" }, index: true
52
+ assert column_exists?(table_name, :taggable_type, :string, default: "Photo")
51
53
  end
52
54
 
53
55
  def test_creates_reference_type_column_with_not_null
@@ -60,19 +62,19 @@ module ActiveRecord
60
62
 
61
63
  def test_does_not_share_options_with_reference_type_column
62
64
  add_reference table_name, :taggable, type: :integer, limit: 2, polymorphic: true
63
- assert column_exists?(table_name, :taggable_id, :integer, limit: 2)
65
+ assert column_exists?(table_name, :taggable_id, :integer)
64
66
  assert column_exists?(table_name, :taggable_type, :string)
65
67
  assert_not column_exists?(table_name, :taggable_type, :string, limit: 2)
66
68
  end
67
69
 
68
70
  def test_creates_named_index
69
- add_reference table_name, :tag, index: { name: 'index_taggings_on_tag_id' }
70
- assert index_exists?(table_name, :tag_id, name: 'index_taggings_on_tag_id')
71
+ add_reference table_name, :tag, index: { name: "index_taggings_on_tag_id" }
72
+ assert index_exists?(table_name, :tag_id, name: "index_taggings_on_tag_id")
71
73
  end
72
74
 
73
75
  def test_creates_named_unique_index
74
- add_reference table_name, :tag, index: { name: 'index_taggings_on_tag_id', unique: true }
75
- assert index_exists?(table_name, :tag_id, name: 'index_taggings_on_tag_id', unique: true )
76
+ add_reference table_name, :tag, index: { name: "index_taggings_on_tag_id", unique: true }
77
+ assert index_exists?(table_name, :tag_id, name: "index_taggings_on_tag_id", unique: true)
76
78
  end
77
79
 
78
80
  def test_creates_reference_id_with_specified_type
@@ -124,13 +126,12 @@ module ActiveRecord
124
126
  end
125
127
 
126
128
  private
129
+ def with_polymorphic_column
130
+ add_column table_name, :supplier_type, :string
131
+ add_index table_name, [:supplier_id, :supplier_type]
127
132
 
128
- def with_polymorphic_column
129
- add_column table_name, :supplier_type, :string
130
- add_index table_name, [:supplier_id, :supplier_type]
131
-
132
- yield
133
- end
133
+ yield
134
+ end
134
135
  end
135
136
  end
136
137
  end