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