ibm_db 5.2.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 (621) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +9 -0
  3. data/LICENSE +55 -18
  4. data/ext/Makefile +15 -13
  5. data/ext/ibm_db.c +62 -57
  6. data/ext/ibm_db.o +0 -0
  7. data/ext/ibm_db.so +0 -0
  8. data/ext/mkmf.log +26 -24
  9. data/ext/ruby_ibm_db_cli.c +1 -0
  10. data/ext/ruby_ibm_db_cli.o +0 -0
  11. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +1463 -1279
  12. data/lib/ibm_db.so +1 -0
  13. data/lib/mswin32/rb3x/i386/ruby30/ibm_db.so +0 -0
  14. data/test/active_record/connection_adapters/fake_adapter.rb +5 -2
  15. data/test/activejob/destroy_association_async_test.rb +305 -0
  16. data/test/activejob/destroy_async_job_not_present_test.rb +31 -0
  17. data/test/activejob/helper.rb +15 -0
  18. data/test/assets/schema_dump_5_1.yml +345 -0
  19. data/test/cases/adapter_prevent_writes_test.rb +334 -0
  20. data/test/cases/adapter_test.rb +432 -218
  21. data/test/cases/adapters/mysql2/active_schema_test.rb +85 -75
  22. data/test/cases/adapters/mysql2/auto_increment_test.rb +34 -0
  23. data/test/cases/adapters/mysql2/bind_parameter_test.rb +5 -3
  24. data/test/cases/adapters/mysql2/boolean_test.rb +6 -4
  25. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +26 -24
  26. data/test/cases/adapters/mysql2/charset_collation_test.rb +20 -17
  27. data/test/cases/adapters/mysql2/connection_test.rb +48 -50
  28. data/test/cases/adapters/mysql2/count_deleted_rows_with_lock_test.rb +28 -0
  29. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +23 -19
  30. data/test/cases/adapters/mysql2/enum_test.rb +32 -11
  31. data/test/cases/adapters/mysql2/explain_test.rb +13 -11
  32. data/test/cases/adapters/mysql2/json_test.rb +17 -188
  33. data/test/cases/adapters/mysql2/mysql2_adapter_prevent_writes_test.rb +208 -0
  34. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +183 -28
  35. data/test/cases/adapters/mysql2/nested_deadlock_test.rb +75 -0
  36. data/test/cases/adapters/mysql2/optimizer_hints_test.rb +69 -0
  37. data/test/cases/adapters/mysql2/schema_migrations_test.rb +26 -21
  38. data/test/cases/adapters/mysql2/schema_test.rb +24 -22
  39. data/test/cases/adapters/mysql2/set_test.rb +32 -0
  40. data/test/cases/adapters/mysql2/sp_test.rb +10 -8
  41. data/test/cases/adapters/mysql2/sql_types_test.rb +8 -6
  42. data/test/cases/adapters/mysql2/table_options_test.rb +93 -10
  43. data/test/cases/adapters/mysql2/transaction_test.rb +151 -0
  44. data/test/cases/adapters/mysql2/unsigned_type_test.rb +11 -9
  45. data/test/cases/adapters/mysql2/virtual_column_test.rb +66 -0
  46. data/test/cases/adapters/postgresql/active_schema_test.rb +40 -25
  47. data/test/cases/adapters/postgresql/array_test.rb +118 -63
  48. data/test/cases/adapters/postgresql/bit_string_test.rb +12 -10
  49. data/test/cases/adapters/postgresql/bytea_test.rb +26 -25
  50. data/test/cases/adapters/postgresql/case_insensitive_test.rb +10 -9
  51. data/test/cases/adapters/postgresql/change_schema_test.rb +7 -5
  52. data/test/cases/adapters/postgresql/cidr_test.rb +2 -0
  53. data/test/cases/adapters/postgresql/citext_test.rb +58 -58
  54. data/test/cases/adapters/postgresql/collation_test.rb +17 -15
  55. data/test/cases/adapters/postgresql/composite_test.rb +25 -23
  56. data/test/cases/adapters/postgresql/connection_test.rb +73 -85
  57. data/test/cases/adapters/postgresql/create_unlogged_tables_test.rb +74 -0
  58. data/test/cases/adapters/postgresql/datatype_test.rb +19 -22
  59. data/test/cases/adapters/postgresql/date_test.rb +42 -0
  60. data/test/cases/adapters/postgresql/domain_test.rb +9 -7
  61. data/test/cases/adapters/postgresql/enum_test.rb +12 -10
  62. data/test/cases/adapters/postgresql/explain_test.rb +10 -8
  63. data/test/cases/adapters/postgresql/extension_migration_test.rb +13 -12
  64. data/test/cases/adapters/postgresql/foreign_table_test.rb +109 -0
  65. data/test/cases/adapters/postgresql/full_text_test.rb +8 -6
  66. data/test/cases/adapters/postgresql/geometric_test.rb +57 -63
  67. data/test/cases/adapters/postgresql/hstore_test.rb +288 -280
  68. data/test/cases/adapters/postgresql/infinity_test.rb +54 -15
  69. data/test/cases/adapters/postgresql/integer_test.rb +2 -0
  70. data/test/cases/adapters/postgresql/interval_test.rb +99 -0
  71. data/test/cases/adapters/postgresql/json_test.rb +16 -201
  72. data/test/cases/adapters/postgresql/ltree_test.rb +14 -16
  73. data/test/cases/adapters/postgresql/money_test.rb +47 -16
  74. data/test/cases/adapters/postgresql/network_test.rb +36 -28
  75. data/test/cases/adapters/postgresql/numbers_test.rb +7 -5
  76. data/test/cases/adapters/postgresql/optimizer_hints_test.rb +71 -0
  77. data/test/cases/adapters/postgresql/partitions_test.rb +22 -0
  78. data/test/cases/adapters/postgresql/postgresql_adapter_prevent_writes_test.rb +205 -0
  79. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +178 -136
  80. data/test/cases/adapters/postgresql/prepared_statements_disabled_test.rb +27 -0
  81. data/test/cases/adapters/postgresql/quoting_test.rb +12 -6
  82. data/test/cases/adapters/postgresql/range_test.rb +406 -292
  83. data/test/cases/adapters/postgresql/referential_integrity_test.rb +16 -15
  84. data/test/cases/adapters/postgresql/rename_table_test.rb +9 -8
  85. data/test/cases/adapters/postgresql/schema_authorization_test.rb +14 -23
  86. data/test/cases/adapters/postgresql/schema_test.rb +207 -91
  87. data/test/cases/adapters/postgresql/serial_test.rb +9 -7
  88. data/test/cases/adapters/postgresql/statement_pool_test.rb +26 -6
  89. data/test/cases/adapters/postgresql/timestamp_test.rb +17 -15
  90. data/test/cases/adapters/postgresql/transaction_nested_test.rb +114 -0
  91. data/test/cases/adapters/postgresql/transaction_test.rb +189 -0
  92. data/test/cases/adapters/postgresql/type_lookup_test.rb +12 -10
  93. data/test/cases/adapters/postgresql/utils_test.rb +11 -9
  94. data/test/cases/adapters/postgresql/uuid_test.rb +226 -109
  95. data/test/cases/adapters/postgresql/xml_test.rb +10 -14
  96. data/test/cases/adapters/sqlite3/collation_test.rb +26 -15
  97. data/test/cases/adapters/sqlite3/copy_table_test.rb +31 -28
  98. data/test/cases/adapters/sqlite3/explain_test.rb +13 -11
  99. data/test/cases/adapters/sqlite3/json_test.rb +29 -0
  100. data/test/cases/adapters/sqlite3/quoting_test.rb +35 -57
  101. data/test/cases/adapters/sqlite3/sqlite3_adapter_prevent_writes_test.rb +186 -0
  102. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +318 -131
  103. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +11 -11
  104. data/test/cases/adapters/sqlite3/statement_pool_test.rb +7 -6
  105. data/test/cases/adapters/sqlite3/transaction_test.rb +123 -0
  106. data/test/cases/aggregations_test.rb +14 -12
  107. data/test/cases/annotate_test.rb +46 -0
  108. data/test/cases/ar_schema_test.rb +153 -86
  109. data/test/cases/arel/attributes/attribute_test.rb +1145 -0
  110. data/test/cases/arel/attributes/math_test.rb +83 -0
  111. data/test/cases/arel/attributes_test.rb +27 -0
  112. data/test/cases/arel/collectors/bind_test.rb +40 -0
  113. data/test/cases/arel/collectors/composite_test.rb +47 -0
  114. data/test/cases/arel/collectors/sql_string_test.rb +41 -0
  115. data/test/cases/arel/collectors/substitute_bind_collector_test.rb +48 -0
  116. data/test/cases/arel/crud_test.rb +65 -0
  117. data/test/cases/arel/delete_manager_test.rb +53 -0
  118. data/test/cases/arel/factory_methods_test.rb +46 -0
  119. data/test/cases/arel/helper.rb +45 -0
  120. data/test/cases/arel/insert_manager_test.rb +241 -0
  121. data/test/cases/arel/nodes/and_test.rb +30 -0
  122. data/test/cases/arel/nodes/as_test.rb +36 -0
  123. data/test/cases/arel/nodes/ascending_test.rb +46 -0
  124. data/test/cases/arel/nodes/bin_test.rb +35 -0
  125. data/test/cases/arel/nodes/binary_test.rb +29 -0
  126. data/test/cases/arel/nodes/bind_param_test.rb +22 -0
  127. data/test/cases/arel/nodes/case_test.rb +96 -0
  128. data/test/cases/arel/nodes/casted_test.rb +18 -0
  129. data/test/cases/arel/nodes/comment_test.rb +22 -0
  130. data/test/cases/arel/nodes/count_test.rb +35 -0
  131. data/test/cases/arel/nodes/delete_statement_test.rb +36 -0
  132. data/test/cases/arel/nodes/descending_test.rb +46 -0
  133. data/test/cases/arel/nodes/distinct_test.rb +21 -0
  134. data/test/cases/arel/nodes/equality_test.rb +62 -0
  135. data/test/cases/arel/nodes/extract_test.rb +43 -0
  136. data/test/cases/arel/nodes/false_test.rb +21 -0
  137. data/test/cases/arel/nodes/grouping_test.rb +26 -0
  138. data/test/cases/arel/nodes/infix_operation_test.rb +42 -0
  139. data/test/cases/arel/nodes/insert_statement_test.rb +44 -0
  140. data/test/cases/arel/nodes/named_function_test.rb +48 -0
  141. data/test/cases/arel/nodes/node_test.rb +22 -0
  142. data/test/cases/arel/nodes/not_test.rb +31 -0
  143. data/test/cases/arel/nodes/or_test.rb +36 -0
  144. data/test/cases/arel/nodes/over_test.rb +69 -0
  145. data/test/cases/arel/nodes/select_core_test.rb +79 -0
  146. data/test/cases/arel/nodes/select_statement_test.rb +51 -0
  147. data/test/cases/arel/nodes/sql_literal_test.rb +75 -0
  148. data/test/cases/arel/nodes/sum_test.rb +35 -0
  149. data/test/cases/arel/nodes/table_alias_test.rb +29 -0
  150. data/test/cases/arel/nodes/true_test.rb +21 -0
  151. data/test/cases/arel/nodes/unary_operation_test.rb +41 -0
  152. data/test/cases/arel/nodes/update_statement_test.rb +60 -0
  153. data/test/cases/arel/nodes/window_test.rb +81 -0
  154. data/test/cases/arel/nodes_test.rb +34 -0
  155. data/test/cases/arel/select_manager_test.rb +1238 -0
  156. data/test/cases/arel/support/fake_record.rb +135 -0
  157. data/test/cases/arel/table_test.rb +216 -0
  158. data/test/cases/arel/update_manager_test.rb +126 -0
  159. data/test/cases/arel/visitors/dispatch_contamination_test.rb +78 -0
  160. data/test/cases/arel/visitors/dot_test.rb +90 -0
  161. data/test/cases/arel/visitors/mysql_test.rb +157 -0
  162. data/test/cases/arel/visitors/postgres_test.rb +366 -0
  163. data/test/cases/arel/visitors/sqlite_test.rb +75 -0
  164. data/test/cases/arel/visitors/to_sql_test.rb +750 -0
  165. data/test/cases/associations/belongs_to_associations_test.rb +510 -158
  166. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +4 -2
  167. data/test/cases/associations/callbacks_test.rb +56 -38
  168. data/test/cases/associations/cascaded_eager_loading_test.rb +118 -61
  169. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +138 -18
  170. data/test/cases/associations/eager_load_nested_include_test.rb +38 -37
  171. data/test/cases/associations/eager_singularization_test.rb +21 -21
  172. data/test/cases/associations/eager_test.rb +559 -415
  173. data/test/cases/associations/extension_test.rb +18 -12
  174. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +234 -213
  175. data/test/cases/associations/has_many_associations_test.rb +1038 -465
  176. data/test/cases/associations/has_many_through_associations_test.rb +558 -249
  177. data/test/cases/associations/has_one_associations_test.rb +294 -129
  178. data/test/cases/associations/has_one_through_associations_test.rb +121 -75
  179. data/test/cases/associations/inner_join_association_test.rb +114 -38
  180. data/test/cases/associations/inverse_associations_test.rb +606 -398
  181. data/test/cases/associations/join_model_test.rb +158 -148
  182. data/test/cases/associations/left_outer_join_association_test.rb +59 -24
  183. data/test/cases/associations/nested_through_associations_test.rb +166 -109
  184. data/test/cases/associations/required_test.rb +35 -10
  185. data/test/cases/associations_test.rb +241 -110
  186. data/test/cases/attribute_methods/read_test.rb +11 -11
  187. data/test/cases/attribute_methods_test.rb +413 -298
  188. data/test/cases/attributes_test.rb +145 -27
  189. data/test/cases/autosave_association_test.rb +681 -436
  190. data/test/cases/base_prevent_writes_test.rb +229 -0
  191. data/test/cases/base_test.rb +599 -542
  192. data/test/cases/batches_test.rb +288 -82
  193. data/test/cases/binary_test.rb +26 -31
  194. data/test/cases/bind_parameter_test.rb +194 -21
  195. data/test/cases/boolean_test.rb +52 -0
  196. data/test/cases/cache_key_test.rb +110 -5
  197. data/test/cases/calculations_test.rb +740 -177
  198. data/test/cases/callbacks_test.rb +74 -207
  199. data/test/cases/clone_test.rb +15 -10
  200. data/test/cases/coders/json_test.rb +2 -0
  201. data/test/cases/coders/yaml_column_test.rb +16 -13
  202. data/test/cases/collection_cache_key_test.rb +177 -20
  203. data/test/cases/column_alias_test.rb +9 -7
  204. data/test/cases/column_definition_test.rb +10 -68
  205. data/test/cases/comment_test.rb +166 -107
  206. data/test/cases/connection_adapters/adapter_leasing_test.rb +14 -10
  207. data/test/cases/connection_adapters/connection_handler_test.rb +358 -51
  208. data/test/cases/connection_adapters/connection_handlers_multi_db_test.rb +400 -0
  209. data/test/cases/connection_adapters/connection_handlers_multi_pool_config_test.rb +103 -0
  210. data/test/cases/connection_adapters/connection_handlers_sharding_db_test.rb +499 -0
  211. data/test/cases/connection_adapters/connection_swapping_nested_test.rb +457 -0
  212. data/test/cases/connection_adapters/legacy_connection_handlers_multi_db_test.rb +486 -0
  213. data/test/cases/connection_adapters/legacy_connection_handlers_sharding_db_test.rb +586 -0
  214. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +319 -138
  215. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +62 -50
  216. data/test/cases/connection_adapters/schema_cache_test.rb +259 -26
  217. data/test/cases/connection_adapters/type_lookup_test.rb +96 -95
  218. data/test/cases/connection_management_test.rb +13 -11
  219. data/test/cases/connection_pool_test.rb +316 -83
  220. data/test/cases/core_test.rb +82 -58
  221. data/test/cases/counter_cache_test.rb +204 -50
  222. data/test/cases/custom_locking_test.rb +5 -3
  223. data/test/cases/database_configurations/hash_config_test.rb +74 -0
  224. data/test/cases/database_configurations/resolver_test.rb +150 -0
  225. data/test/cases/database_configurations_test.rb +145 -0
  226. data/test/cases/database_selector_test.rb +296 -0
  227. data/test/cases/database_statements_test.rb +18 -16
  228. data/test/cases/date_test.rb +8 -16
  229. data/test/cases/date_time_precision_test.rb +100 -78
  230. data/test/cases/date_time_test.rb +23 -8
  231. data/test/cases/defaults_test.rb +106 -71
  232. data/test/cases/delegated_type_test.rb +57 -0
  233. data/test/cases/dirty_test.rb +419 -223
  234. data/test/cases/disconnected_test.rb +6 -6
  235. data/test/cases/dup_test.rb +54 -27
  236. data/test/cases/enum_test.rb +461 -82
  237. data/test/cases/errors_test.rb +7 -7
  238. data/test/cases/explain_subscriber_test.rb +17 -15
  239. data/test/cases/explain_test.rb +11 -19
  240. data/test/cases/filter_attributes_test.rb +153 -0
  241. data/test/cases/finder_respond_to_test.rb +14 -14
  242. data/test/cases/finder_test.rb +669 -287
  243. data/test/cases/fixture_set/file_test.rb +34 -38
  244. data/test/cases/fixtures_test.rb +833 -176
  245. data/test/cases/forbidden_attributes_protection_test.rb +32 -67
  246. data/test/cases/habtm_destroy_order_test.rb +25 -25
  247. data/test/cases/helper.rb +78 -49
  248. data/test/cases/hot_compatibility_test.rb +33 -32
  249. data/test/cases/i18n_test.rb +18 -17
  250. data/test/cases/inheritance_test.rb +180 -115
  251. data/test/cases/insert_all_test.rb +489 -0
  252. data/test/cases/instrumentation_test.rb +101 -0
  253. data/test/cases/integration_test.rb +119 -31
  254. data/test/cases/invalid_connection_test.rb +18 -16
  255. data/test/cases/invertible_migration_test.rb +183 -43
  256. data/test/cases/json_attribute_test.rb +35 -0
  257. data/test/cases/json_serialization_test.rb +57 -58
  258. data/test/cases/json_shared_test_cases.rb +290 -0
  259. data/test/cases/locking_test.rb +413 -119
  260. data/test/cases/log_subscriber_test.rb +68 -26
  261. data/test/cases/marshal_serialization_test.rb +39 -0
  262. data/test/cases/migration/change_schema_test.rb +118 -72
  263. data/test/cases/migration/change_table_test.rb +138 -30
  264. data/test/cases/migration/check_constraint_test.rb +162 -0
  265. data/test/cases/migration/column_attributes_test.rb +45 -35
  266. data/test/cases/migration/column_positioning_test.rb +18 -6
  267. data/test/cases/migration/columns_test.rb +93 -77
  268. data/test/cases/migration/command_recorder_test.rb +121 -34
  269. data/test/cases/migration/compatibility_test.rb +578 -23
  270. data/test/cases/migration/create_join_table_test.rb +35 -25
  271. data/test/cases/migration/foreign_key_test.rb +503 -284
  272. data/test/cases/migration/helper.rb +4 -3
  273. data/test/cases/migration/index_test.rb +119 -70
  274. data/test/cases/migration/logger_test.rb +9 -6
  275. data/test/cases/migration/pending_migrations_test.rb +88 -34
  276. data/test/cases/migration/references_foreign_key_test.rb +164 -150
  277. data/test/cases/migration/references_index_test.rb +38 -19
  278. data/test/cases/migration/references_statements_test.rb +15 -14
  279. data/test/cases/migration/rename_table_test.rb +53 -30
  280. data/test/cases/migration_test.rb +637 -269
  281. data/test/cases/migrator_test.rb +191 -135
  282. data/test/cases/mixin_test.rb +7 -11
  283. data/test/cases/modules_test.rb +36 -34
  284. data/test/cases/multi_db_migrator_test.rb +223 -0
  285. data/test/cases/multiparameter_attributes_test.rb +60 -33
  286. data/test/cases/multiple_db_test.rb +16 -22
  287. data/test/cases/nested_attributes_test.rb +341 -320
  288. data/test/cases/nested_attributes_with_callbacks_test.rb +26 -24
  289. data/test/cases/null_relation_test.rb +84 -0
  290. data/test/cases/numeric_data_test.rb +93 -0
  291. data/test/cases/persistence_test.rb +361 -269
  292. data/test/cases/pooled_connections_test.rb +18 -26
  293. data/test/cases/prepared_statement_status_test.rb +48 -0
  294. data/test/cases/primary_keys_test.rb +210 -104
  295. data/test/cases/query_cache_test.rb +610 -141
  296. data/test/cases/quoting_test.rb +132 -31
  297. data/test/cases/readonly_test.rb +49 -48
  298. data/test/cases/reaper_test.rb +146 -32
  299. data/test/cases/reflection_test.rb +167 -156
  300. data/test/cases/relation/delegation_test.rb +49 -36
  301. data/test/cases/relation/delete_all_test.rb +117 -0
  302. data/test/cases/relation/merging_test.rb +319 -42
  303. data/test/cases/relation/mutation_test.rb +55 -93
  304. data/test/cases/relation/or_test.rb +129 -29
  305. data/test/cases/relation/predicate_builder_test.rb +21 -6
  306. data/test/cases/relation/record_fetch_warning_test.rb +5 -3
  307. data/test/cases/relation/select_test.rb +67 -0
  308. data/test/cases/relation/update_all_test.rb +317 -0
  309. data/test/cases/relation/where_chain_test.rb +68 -32
  310. data/test/cases/relation/where_clause_test.rb +136 -61
  311. data/test/cases/relation/where_test.rb +155 -48
  312. data/test/cases/relation_test.rb +266 -112
  313. data/test/cases/relations_test.rb +969 -744
  314. data/test/cases/reload_models_test.rb +13 -9
  315. data/test/cases/reserved_word_test.rb +141 -0
  316. data/test/cases/result_test.rb +68 -17
  317. data/test/cases/sanitize_test.rb +87 -71
  318. data/test/cases/schema_dumper_test.rb +221 -128
  319. data/test/cases/schema_loading_test.rb +3 -2
  320. data/test/cases/scoping/default_scoping_test.rb +185 -144
  321. data/test/cases/scoping/named_scoping_test.rb +177 -89
  322. data/test/cases/scoping/relation_scoping_test.rb +197 -75
  323. data/test/cases/secure_token_test.rb +18 -3
  324. data/test/cases/serialization_test.rb +30 -28
  325. data/test/cases/serialized_attribute_test.rb +133 -42
  326. data/test/cases/signed_id_test.rb +168 -0
  327. data/test/cases/statement_cache_test.rb +41 -24
  328. data/test/cases/statement_invalid_test.rb +42 -0
  329. data/test/cases/store_test.rb +180 -55
  330. data/test/cases/strict_loading_test.rb +473 -0
  331. data/test/cases/suppressor_test.rb +26 -12
  332. data/test/cases/tasks/database_tasks_test.rb +1258 -194
  333. data/test/cases/tasks/mysql_rake_test.rb +370 -298
  334. data/test/cases/tasks/postgresql_rake_test.rb +481 -251
  335. data/test/cases/tasks/sqlite_rake_test.rb +225 -178
  336. data/test/cases/test_case.rb +51 -40
  337. data/test/cases/test_databases_test.rb +79 -0
  338. data/test/cases/test_fixtures_test.rb +79 -19
  339. data/test/cases/time_precision_test.rb +98 -76
  340. data/test/cases/timestamp_test.rb +102 -99
  341. data/test/cases/touch_later_test.rb +12 -10
  342. data/test/cases/transaction_callbacks_test.rb +344 -90
  343. data/test/cases/transaction_isolation_test.rb +12 -12
  344. data/test/cases/transactions_test.rb +612 -162
  345. data/test/cases/type/adapter_specific_registry_test.rb +14 -2
  346. data/test/cases/type/date_time_test.rb +4 -2
  347. data/test/cases/type/integer_test.rb +4 -2
  348. data/test/cases/type/string_test.rb +10 -8
  349. data/test/cases/type/time_test.rb +28 -0
  350. data/test/cases/type/type_map_test.rb +29 -28
  351. data/test/cases/type/unsigned_integer_test.rb +19 -0
  352. data/test/cases/type_test.rb +2 -0
  353. data/test/cases/types_test.rb +3 -1
  354. data/test/cases/unconnected_test.rb +14 -1
  355. data/test/cases/unsafe_raw_sql_test.rb +274 -0
  356. data/test/cases/validations/absence_validation_test.rb +19 -17
  357. data/test/cases/validations/association_validation_test.rb +30 -28
  358. data/test/cases/validations/i18n_generate_message_validation_test.rb +34 -16
  359. data/test/cases/validations/i18n_validation_test.rb +22 -21
  360. data/test/cases/validations/length_validation_test.rb +34 -33
  361. data/test/cases/validations/numericality_validation_test.rb +181 -0
  362. data/test/cases/validations/presence_validation_test.rb +21 -19
  363. data/test/cases/validations/uniqueness_validation_test.rb +156 -86
  364. data/test/cases/validations_repair_helper.rb +2 -0
  365. data/test/cases/validations_test.rb +61 -26
  366. data/test/cases/view_test.rb +122 -116
  367. data/test/cases/yaml_serialization_test.rb +79 -34
  368. data/test/config.example.yml +19 -19
  369. data/test/config.rb +3 -1
  370. data/test/config.yml +16 -6
  371. data/test/fixtures/all/namespaced/accounts.yml +2 -0
  372. data/test/fixtures/author_addresses.yml +1 -8
  373. data/test/fixtures/authors.yml +1 -7
  374. data/test/fixtures/binaries.yml +4 -0
  375. data/test/fixtures/books.yml +9 -2
  376. data/test/fixtures/categories_posts.yml +3 -0
  377. data/test/fixtures/citations.yml +5 -0
  378. data/test/fixtures/comments.yml +7 -0
  379. data/test/fixtures/companies.yml +5 -0
  380. data/test/fixtures/computers.yml +2 -0
  381. data/test/fixtures/customers.yml +10 -1
  382. data/test/fixtures/developers.yml +1 -1
  383. data/test/fixtures/essays.yml +10 -0
  384. data/test/fixtures/faces.yml +3 -3
  385. data/test/fixtures/humans.yml +5 -0
  386. data/test/fixtures/interests.yml +7 -7
  387. data/test/fixtures/memberships.yml +7 -0
  388. data/test/fixtures/minimalistics.yml +3 -0
  389. data/test/fixtures/mixed_case_monkeys.yml +2 -2
  390. data/test/fixtures/naked/yml/courses_with_invalid_key.yml +3 -0
  391. data/test/fixtures/naked/yml/parrots.yml +1 -0
  392. data/test/fixtures/other_books.yml +26 -0
  393. data/test/fixtures/other_posts.yml +1 -0
  394. data/test/fixtures/parrots.yml +7 -1
  395. data/test/fixtures/pirates.yml +3 -0
  396. data/test/fixtures/posts.yml +11 -3
  397. data/test/fixtures/readers.yml +6 -0
  398. data/test/fixtures/reserved_words/values.yml +2 -2
  399. data/test/fixtures/sponsors.yml +3 -0
  400. data/test/fixtures/strict_zines.yml +2 -0
  401. data/test/fixtures/subscribers.yml +1 -1
  402. data/test/fixtures/tasks.yml +1 -1
  403. data/test/fixtures/warehouse-things.yml +3 -0
  404. data/test/migrations/10_urban/9_add_expressions.rb +2 -0
  405. data/test/migrations/decimal/1_give_me_big_numbers.rb +6 -4
  406. data/test/migrations/magic/1_currencies_have_symbols.rb +3 -2
  407. data/test/migrations/missing/1000_people_have_middle_names.rb +2 -0
  408. data/test/migrations/missing/1_people_have_last_names.rb +2 -0
  409. data/test/migrations/missing/3_we_need_reminders.rb +2 -0
  410. data/test/migrations/missing/4_innocent_jointable.rb +3 -1
  411. data/test/migrations/rename/1_we_need_things.rb +2 -0
  412. data/test/migrations/rename/2_rename_things.rb +2 -0
  413. data/test/migrations/to_copy/1_people_have_hobbies.rb +3 -1
  414. data/test/migrations/to_copy/2_people_have_descriptions.rb +3 -1
  415. data/test/migrations/to_copy2/1_create_articles.rb +2 -0
  416. data/test/migrations/to_copy2/2_create_comments.rb +3 -1
  417. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +3 -1
  418. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +3 -1
  419. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +3 -1
  420. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +2 -0
  421. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +2 -0
  422. data/test/migrations/valid/1_valid_people_have_last_names.rb +2 -0
  423. data/test/migrations/valid/2_we_need_reminders.rb +2 -0
  424. data/test/migrations/valid/3_innocent_jointable.rb +3 -1
  425. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +2 -0
  426. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -0
  427. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +3 -1
  428. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +2 -0
  429. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +2 -0
  430. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +3 -1
  431. data/test/migrations/version_check/20131219224947_migration_version_check.rb +2 -0
  432. data/test/models/account.rb +46 -0
  433. data/test/models/admin/account.rb +3 -1
  434. data/test/models/admin/randomly_named_c1.rb +2 -0
  435. data/test/models/admin/user.rb +16 -8
  436. data/test/models/admin.rb +4 -2
  437. data/test/models/aircraft.rb +3 -1
  438. data/test/models/arunit2_model.rb +2 -0
  439. data/test/models/author.rb +153 -102
  440. data/test/models/auto_id.rb +2 -0
  441. data/test/models/autoloadable/extra_firm.rb +2 -0
  442. data/test/models/binary.rb +3 -1
  443. data/test/models/binary_field.rb +6 -0
  444. data/test/models/bird.rb +13 -1
  445. data/test/models/book.rb +14 -4
  446. data/test/models/book_destroy_async.rb +24 -0
  447. data/test/models/boolean.rb +5 -0
  448. data/test/models/bulb.rb +13 -4
  449. data/test/models/cake_designer.rb +2 -0
  450. data/test/models/car.rb +17 -10
  451. data/test/models/carrier.rb +2 -0
  452. data/test/models/cart.rb +5 -0
  453. data/test/models/cat.rb +2 -0
  454. data/test/models/categorization.rb +8 -6
  455. data/test/models/category.rb +28 -16
  456. data/test/models/chef.rb +2 -0
  457. data/test/models/citation.rb +5 -1
  458. data/test/models/club.rb +13 -10
  459. data/test/models/college.rb +4 -2
  460. data/test/models/column.rb +2 -0
  461. data/test/models/column_name.rb +2 -0
  462. data/test/models/comment.rb +32 -10
  463. data/test/models/company.rb +102 -106
  464. data/test/models/company_in_module.rb +27 -26
  465. data/test/models/computer.rb +3 -1
  466. data/test/models/contact.rb +15 -13
  467. data/test/models/content.rb +5 -3
  468. data/test/models/contract.rb +21 -3
  469. data/test/models/country.rb +2 -4
  470. data/test/models/course.rb +3 -1
  471. data/test/models/customer.rb +10 -8
  472. data/test/models/customer_carrier.rb +2 -0
  473. data/test/models/dashboard.rb +2 -0
  474. data/test/models/default.rb +2 -0
  475. data/test/models/department.rb +2 -0
  476. data/test/models/destroy_async_parent.rb +15 -0
  477. data/test/models/destroy_async_parent_soft_delete.rb +20 -0
  478. data/test/models/developer.rb +152 -85
  479. data/test/models/dl_keyed_belongs_to.rb +13 -0
  480. data/test/models/dl_keyed_belongs_to_soft_delete.rb +19 -0
  481. data/test/models/dl_keyed_has_many.rb +5 -0
  482. data/test/models/dl_keyed_has_many_through.rb +5 -0
  483. data/test/models/dl_keyed_has_one.rb +5 -0
  484. data/test/models/dl_keyed_join.rb +10 -0
  485. data/test/models/dog.rb +2 -0
  486. data/test/models/dog_lover.rb +2 -0
  487. data/test/models/doubloon.rb +3 -1
  488. data/test/models/drink_designer.rb +17 -0
  489. data/test/models/edge.rb +4 -2
  490. data/test/models/electron.rb +2 -0
  491. data/test/models/engine.rb +3 -2
  492. data/test/models/entrant.rb +2 -0
  493. data/test/models/entry.rb +5 -0
  494. data/test/models/essay.rb +6 -3
  495. data/test/models/essay_destroy_async.rb +12 -0
  496. data/test/models/event.rb +3 -1
  497. data/test/models/eye.rb +5 -3
  498. data/test/models/face.rb +14 -6
  499. data/test/models/family.rb +6 -0
  500. data/test/models/family_tree.rb +6 -0
  501. data/test/models/friendship.rb +5 -3
  502. data/test/models/frog.rb +8 -0
  503. data/test/models/guid.rb +3 -1
  504. data/test/models/guitar.rb +2 -0
  505. data/test/models/hotel.rb +5 -3
  506. data/test/models/human.rb +39 -0
  507. data/test/models/image.rb +3 -1
  508. data/test/models/interest.rb +14 -3
  509. data/test/models/invoice.rb +4 -2
  510. data/test/models/item.rb +3 -1
  511. data/test/models/job.rb +5 -3
  512. data/test/models/joke.rb +4 -2
  513. data/test/models/keyboard.rb +3 -1
  514. data/test/models/legacy_thing.rb +2 -0
  515. data/test/models/lesson.rb +2 -0
  516. data/test/models/line_item.rb +3 -1
  517. data/test/models/liquid.rb +2 -0
  518. data/test/models/matey.rb +3 -1
  519. data/test/models/measurement.rb +4 -0
  520. data/test/models/member.rb +23 -20
  521. data/test/models/member_detail.rb +3 -0
  522. data/test/models/member_type.rb +2 -0
  523. data/test/models/membership.rb +4 -1
  524. data/test/models/mentor.rb +3 -1
  525. data/test/models/message.rb +5 -0
  526. data/test/models/minimalistic.rb +2 -0
  527. data/test/models/minivan.rb +3 -2
  528. data/test/models/mixed_case_monkey.rb +3 -1
  529. data/test/models/molecule.rb +2 -0
  530. data/test/models/mouse.rb +6 -0
  531. data/test/models/movie.rb +2 -0
  532. data/test/models/node.rb +4 -2
  533. data/test/models/non_primary_key.rb +2 -0
  534. data/test/models/notification.rb +2 -0
  535. data/test/models/numeric_data.rb +12 -0
  536. data/test/models/order.rb +4 -2
  537. data/test/models/organization.rb +9 -7
  538. data/test/models/other_dog.rb +3 -1
  539. data/test/models/owner.rb +6 -4
  540. data/test/models/parrot.rb +12 -4
  541. data/test/models/person.rb +59 -54
  542. data/test/models/personal_legacy_thing.rb +3 -1
  543. data/test/models/pet.rb +4 -2
  544. data/test/models/pet_treasure.rb +2 -0
  545. data/test/models/pirate.rb +67 -43
  546. data/test/models/possession.rb +3 -1
  547. data/test/models/post.rb +184 -86
  548. data/test/models/price_estimate.rb +11 -1
  549. data/test/models/professor.rb +3 -1
  550. data/test/models/project.rb +14 -12
  551. data/test/models/publisher/article.rb +2 -0
  552. data/test/models/publisher/magazine.rb +2 -0
  553. data/test/models/publisher.rb +2 -0
  554. data/test/models/randomly_named_c1.rb +2 -0
  555. data/test/models/rating.rb +5 -1
  556. data/test/models/reader.rb +7 -5
  557. data/test/models/recipe.rb +2 -0
  558. data/test/models/record.rb +2 -0
  559. data/test/models/reference.rb +6 -3
  560. data/test/models/reply.rb +39 -21
  561. data/test/models/room.rb +6 -0
  562. data/test/models/section.rb +6 -0
  563. data/test/models/seminar.rb +6 -0
  564. data/test/models/session.rb +6 -0
  565. data/test/models/ship.rb +12 -9
  566. data/test/models/ship_part.rb +5 -3
  567. data/test/models/shop.rb +4 -2
  568. data/test/models/shop_account.rb +2 -0
  569. data/test/models/speedometer.rb +2 -0
  570. data/test/models/sponsor.rb +8 -5
  571. data/test/models/squeak.rb +6 -0
  572. data/test/models/strict_zine.rb +7 -0
  573. data/test/models/string_key_object.rb +2 -0
  574. data/test/models/student.rb +2 -0
  575. data/test/models/subscriber.rb +4 -2
  576. data/test/models/subscription.rb +5 -1
  577. data/test/models/tag.rb +6 -3
  578. data/test/models/tagging.rb +13 -6
  579. data/test/models/task.rb +2 -0
  580. data/test/models/topic.rb +54 -19
  581. data/test/models/toy.rb +4 -0
  582. data/test/models/traffic_light.rb +2 -0
  583. data/test/models/treasure.rb +5 -3
  584. data/test/models/treaty.rb +2 -4
  585. data/test/models/tree.rb +2 -0
  586. data/test/models/tuning_peg.rb +2 -0
  587. data/test/models/tyre.rb +2 -0
  588. data/test/models/user.rb +12 -4
  589. data/test/models/uuid_child.rb +2 -0
  590. data/test/models/uuid_item.rb +2 -0
  591. data/test/models/uuid_parent.rb +2 -0
  592. data/test/models/vegetables.rb +12 -3
  593. data/test/models/vertex.rb +6 -4
  594. data/test/models/warehouse_thing.rb +2 -0
  595. data/test/models/wheel.rb +3 -1
  596. data/test/models/without_table.rb +3 -1
  597. data/test/models/zine.rb +3 -1
  598. data/test/schema/mysql2_specific_schema.rb +49 -35
  599. data/test/schema/oracle_specific_schema.rb +13 -15
  600. data/test/schema/postgresql_specific_schema.rb +51 -40
  601. data/test/schema/schema.rb +334 -154
  602. data/test/schema/sqlite_specific_schema.rb +9 -16
  603. data/test/support/config.rb +26 -26
  604. data/test/support/connection.rb +14 -8
  605. data/test/support/connection_helper.rb +3 -1
  606. data/test/support/ddl_helper.rb +2 -0
  607. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic.dump +0 -0
  608. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic_associations.dump +0 -0
  609. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic.dump +0 -0
  610. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic_associations.dump +0 -0
  611. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic.dump +0 -0
  612. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic_associations.dump +0 -0
  613. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic.dump +0 -0
  614. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic_associations.dump +0 -0
  615. data/test/support/marshal_compatibility_fixtures/legacy_6_0_record_mysql.dump +0 -0
  616. data/test/support/marshal_compatibility_fixtures/legacy_relation.dump +0 -0
  617. data/test/support/schema_dumping_helper.rb +2 -0
  618. data/test/support/stubs/strong_parameters.rb +40 -0
  619. data/test/support/yaml_compatibility_fixtures/rails_v1_mysql.yml +206 -0
  620. data/test/support/yaml_compatibility_fixtures/rails_v2.yml +55 -0
  621. metadata +190 -14
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cases/helper"
2
4
 
3
5
  module ActiveRecord
@@ -28,12 +30,11 @@ module ActiveRecord
28
30
  super
29
31
  TestModel.reset_table_name
30
32
  TestModel.reset_sequence_name
31
- connection.drop_table :test_models rescue nil
33
+ connection.drop_table :test_models, if_exists: true
32
34
  end
33
35
 
34
36
  private
35
-
36
- delegate(*CONNECTION_METHODS, to: :connection)
37
+ delegate(*CONNECTION_METHODS, to: :connection)
37
38
  end
38
39
  end
39
40
  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
@@ -11,12 +13,12 @@ module ActiveRecord
11
13
  @table_name = :testings
12
14
 
13
15
  connection.create_table table_name do |t|
14
- t.column :foo, :string, :limit => 100
15
- t.column :bar, :string, :limit => 100
16
+ t.column :foo, :string, limit: 100
17
+ t.column :bar, :string, limit: 100
16
18
 
17
19
  t.string :first_name
18
- t.string :last_name, :limit => 100
19
- t.string :key, :limit => 100
20
+ t.string :last_name, limit: 100
21
+ t.string :key, limit: 100
20
22
  t.boolean :administrator
21
23
  end
22
24
  end
@@ -28,33 +30,32 @@ module ActiveRecord
28
30
 
29
31
  def test_rename_index
30
32
  # keep the names short to make Oracle and similar behave
31
- connection.add_index(table_name, [:foo], :name => 'old_idx')
32
- connection.rename_index(table_name, 'old_idx', 'new_idx')
33
+ connection.add_index(table_name, [:foo], name: "old_idx")
34
+ connection.rename_index(table_name, "old_idx", "new_idx")
33
35
 
34
- # if the adapter doesn't support the indexes call, pick defaults that let the test pass
35
- assert_not connection.index_name_exists?(table_name, 'old_idx', false)
36
- assert connection.index_name_exists?(table_name, 'new_idx', true)
36
+ assert_not connection.index_name_exists?(table_name, "old_idx")
37
+ assert connection.index_name_exists?(table_name, "new_idx")
37
38
  end
38
39
 
39
- def test_rename_index_too_long
40
- too_long_index_name = good_index_name + 'x'
40
+ def test_rename_index_with_symbol
41
41
  # keep the names short to make Oracle and similar behave
42
- connection.add_index(table_name, [:foo], :name => 'old_idx')
43
- e = assert_raises(ArgumentError) {
44
- connection.rename_index(table_name, 'old_idx', too_long_index_name)
45
- }
46
- assert_match(/too long; the limit is #{connection.allowed_index_name_length} characters/, e.message)
42
+ connection.add_index(table_name, [:foo], name: :old_idx)
43
+ connection.rename_index(table_name, :old_idx, :new_idx)
47
44
 
48
- # if the adapter doesn't support the indexes call, pick defaults that let the test pass
49
- assert connection.index_name_exists?(table_name, 'old_idx', false)
45
+ assert_not connection.index_name_exists?(table_name, "old_idx")
46
+ assert connection.index_name_exists?(table_name, "new_idx")
50
47
  end
51
48
 
52
-
53
- def test_double_add_index
54
- connection.add_index(table_name, [:foo], :name => 'some_idx')
55
- assert_raises(ArgumentError) {
56
- connection.add_index(table_name, [:foo], :name => 'some_idx')
49
+ def test_rename_index_too_long
50
+ too_long_index_name = good_index_name + "x"
51
+ # keep the names short to make Oracle and similar behave
52
+ connection.add_index(table_name, [:foo], name: "old_idx")
53
+ e = assert_raises(ArgumentError) {
54
+ connection.rename_index(table_name, "old_idx", too_long_index_name)
57
55
  }
56
+ assert_match(/too long; the limit is #{connection.index_name_length} characters/, e.message)
57
+
58
+ assert connection.index_name_exists?(table_name, "old_idx")
58
59
  end
59
60
 
60
61
  def test_remove_nonexistent_index
@@ -64,43 +65,89 @@ module ActiveRecord
64
65
  def test_add_index_works_with_long_index_names
65
66
  connection.add_index(table_name, "foo", name: good_index_name)
66
67
 
67
- assert connection.index_name_exists?(table_name, good_index_name, false)
68
+ assert connection.index_name_exists?(table_name, good_index_name)
68
69
  connection.remove_index(table_name, name: good_index_name)
69
70
  end
70
71
 
71
72
  def test_add_index_does_not_accept_too_long_index_names
72
- too_long_index_name = good_index_name + 'x'
73
+ too_long_index_name = good_index_name + "x"
73
74
 
74
75
  e = assert_raises(ArgumentError) {
75
76
  connection.add_index(table_name, "foo", name: too_long_index_name)
76
77
  }
77
- assert_match(/too long; the limit is #{connection.allowed_index_name_length} characters/, e.message)
78
+ assert_match(/too long; the limit is #{connection.index_name_length} characters/, e.message)
79
+
80
+ assert_not connection.index_name_exists?(table_name, too_long_index_name)
81
+ connection.add_index(table_name, "foo", name: good_index_name)
82
+ end
83
+
84
+ def test_add_index_which_already_exists_does_not_raise_error_with_option
85
+ connection.add_index(table_name, "foo")
86
+
87
+ assert_nothing_raised do
88
+ connection.add_index(table_name, "foo", if_not_exists: true)
89
+ end
90
+
91
+ assert connection.index_name_exists?(table_name, "index_testings_on_foo")
92
+ end
93
+
94
+ def test_add_index_with_if_not_exists_matches_exact_index
95
+ connection.add_index(table_name, [:foo, :bar], unique: false, name: "index_testings_on_foo_bar")
96
+
97
+ assert connection.index_name_exists?(table_name, "index_testings_on_foo_bar")
98
+
99
+ assert_nothing_raised do
100
+ connection.add_index(table_name, [:foo, :bar], unique: true, if_not_exists: true)
101
+ end
78
102
 
79
- assert_not connection.index_name_exists?(table_name, too_long_index_name, false)
80
- connection.add_index(table_name, "foo", :name => good_index_name)
103
+ assert connection.index_name_exists?(table_name, "index_testings_on_foo_and_bar")
104
+ end
105
+
106
+ def test_remove_index_which_does_not_exist_doesnt_raise_with_option
107
+ connection.add_index(table_name, "foo")
108
+
109
+ connection.remove_index(table_name, "foo")
110
+
111
+ assert_raises ArgumentError do
112
+ connection.remove_index(table_name, "foo")
113
+ end
114
+
115
+ assert_nothing_raised do
116
+ connection.remove_index(table_name, "foo", if_exists: true)
117
+ end
118
+ end
119
+
120
+ def test_remove_index_with_name_which_does_not_exist_doesnt_raise_with_option
121
+ connection.add_index(table_name, [:foo], name: "foo")
122
+
123
+ assert connection.index_exists?(table_name, :foo, name: "foo")
124
+
125
+ connection.remove_index(table_name, nil, name: "foo", if_exists: true)
126
+
127
+ assert_not connection.index_exists?(table_name, :foo, name: "foo")
81
128
  end
82
129
 
83
130
  def test_internal_index_with_name_matching_database_limit
84
- good_index_name = 'x' * connection.index_name_length
131
+ good_index_name = "x" * connection.index_name_length
85
132
  connection.add_index(table_name, "foo", name: good_index_name, internal: true)
86
133
 
87
- assert connection.index_name_exists?(table_name, good_index_name, false)
134
+ assert connection.index_name_exists?(table_name, good_index_name)
88
135
  connection.remove_index(table_name, name: good_index_name)
89
136
  end
90
137
 
91
138
  def test_index_symbol_names
92
- connection.add_index table_name, :foo, :name => :symbol_index_name
93
- assert connection.index_exists?(table_name, :foo, :name => :symbol_index_name)
139
+ connection.add_index table_name, :foo, name: :symbol_index_name
140
+ assert connection.index_exists?(table_name, :foo, name: :symbol_index_name)
94
141
 
95
- connection.remove_index table_name, :name => :symbol_index_name
96
- assert_not connection.index_exists?(table_name, :foo, :name => :symbol_index_name)
142
+ connection.remove_index table_name, name: :symbol_index_name
143
+ assert_not connection.index_exists?(table_name, :foo, name: :symbol_index_name)
97
144
  end
98
145
 
99
146
  def test_index_exists
100
147
  connection.add_index :testings, :foo
101
148
 
102
149
  assert connection.index_exists?(:testings, :foo)
103
- assert !connection.index_exists?(:testings, :bar)
150
+ assert_not connection.index_exists?(:testings, :bar)
104
151
  end
105
152
 
106
153
  def test_index_exists_on_multiple_columns
@@ -122,29 +169,32 @@ module ActiveRecord
122
169
  end
123
170
 
124
171
  def test_unique_index_exists
125
- connection.add_index :testings, :foo, :unique => true
172
+ connection.add_index :testings, :foo, unique: true
126
173
 
127
- assert connection.index_exists?(:testings, :foo, :unique => true)
174
+ assert connection.index_exists?(:testings, :foo, unique: true)
128
175
  end
129
176
 
130
177
  def test_named_index_exists
131
- connection.add_index :testings, :foo, :name => "custom_index_name"
178
+ connection.add_index :testings, :foo, name: "custom_index_name"
132
179
 
133
180
  assert connection.index_exists?(:testings, :foo)
134
- assert connection.index_exists?(:testings, :foo, :name => "custom_index_name")
135
- assert !connection.index_exists?(:testings, :foo, :name => "other_index_name")
181
+ assert connection.index_exists?(:testings, :foo, name: "custom_index_name")
182
+ assert_not connection.index_exists?(:testings, :foo, name: "other_index_name")
136
183
  end
137
184
 
138
185
  def test_remove_named_index
139
- connection.add_index :testings, :foo, :name => "custom_index_name"
186
+ connection.add_index :testings, :foo, name: "index_testings_on_custom_index_name"
140
187
 
141
188
  assert connection.index_exists?(:testings, :foo)
189
+
190
+ assert_raise(ArgumentError) { connection.remove_index(:testings, "custom_index_name") }
191
+
142
192
  connection.remove_index :testings, :foo
143
- assert !connection.index_exists?(:testings, :foo)
193
+ assert_not connection.index_exists?(:testings, :foo)
144
194
  end
145
195
 
146
196
  def test_add_index_attribute_length_limit
147
- connection.add_index :testings, [:foo, :bar], :length => {:foo => 10, :bar => nil}
197
+ connection.add_index :testings, [:foo, :bar], length: { foo: 10, bar: nil }
148
198
 
149
199
  assert connection.index_exists?(:testings, [:foo, :bar])
150
200
  end
@@ -154,65 +204,64 @@ module ActiveRecord
154
204
  connection.remove_index("testings", "last_name")
155
205
 
156
206
  connection.add_index("testings", ["last_name", "first_name"])
157
- connection.remove_index("testings", :column => ["last_name", "first_name"])
158
-
159
- # Oracle adapter cannot have specified index name larger than 30 characters
160
- # Oracle adapter is shortening index name when just column list is given
161
- unless current_adapter?(:OracleAdapter)
162
- connection.add_index("testings", ["last_name", "first_name"])
163
- connection.remove_index("testings", :name => :index_testings_on_last_name_and_first_name)
164
- connection.add_index("testings", ["last_name", "first_name"])
165
- connection.remove_index("testings", "last_name_and_first_name")
166
- end
207
+ connection.remove_index("testings", column: ["last_name", "first_name"])
208
+
209
+ connection.add_index("testings", ["last_name", "first_name"])
210
+ connection.remove_index("testings", name: :index_testings_on_last_name_and_first_name)
211
+ connection.add_index("testings", ["last_name", "first_name"])
212
+ connection.remove_index("testings", "last_name_and_first_name")
213
+
167
214
  connection.add_index("testings", ["last_name", "first_name"])
168
215
  connection.remove_index("testings", ["last_name", "first_name"])
169
216
 
170
- connection.add_index("testings", ["last_name"], :length => 10)
217
+ connection.add_index("testings", ["last_name"], length: 10)
171
218
  connection.remove_index("testings", "last_name")
172
219
 
173
- connection.add_index("testings", ["last_name"], :length => {:last_name => 10})
220
+ connection.add_index("testings", ["last_name"], length: { last_name: 10 })
174
221
  connection.remove_index("testings", ["last_name"])
175
222
 
176
- connection.add_index("testings", ["last_name", "first_name"], :length => 10)
223
+ connection.add_index("testings", ["last_name", "first_name"], length: 10)
177
224
  connection.remove_index("testings", ["last_name", "first_name"])
178
225
 
179
- connection.add_index("testings", ["last_name", "first_name"], :length => {:last_name => 10, :first_name => 20})
226
+ connection.add_index("testings", ["last_name", "first_name"], length: { last_name: 10, first_name: 20 })
180
227
  connection.remove_index("testings", ["last_name", "first_name"])
181
228
 
182
- connection.add_index("testings", ["key"], :name => "key_idx", :unique => true)
183
- connection.remove_index("testings", :name => "key_idx", :unique => true)
229
+ connection.add_index("testings", "key", unique: true)
230
+ connection.remove_index("testings", "key", unique: true)
184
231
 
185
- connection.add_index("testings", %w(last_name first_name administrator), :name => "named_admin")
186
- connection.remove_index("testings", :name => "named_admin")
232
+ connection.add_index("testings", ["key"], name: "key_idx", unique: true)
233
+ connection.remove_index("testings", name: "key_idx", unique: true)
234
+
235
+ connection.add_index("testings", %w(last_name first_name administrator), name: "named_admin")
236
+ connection.remove_index("testings", name: "named_admin")
187
237
 
188
238
  # Selected adapters support index sort order
189
239
  if current_adapter?(:SQLite3Adapter, :Mysql2Adapter, :PostgreSQLAdapter)
190
- connection.add_index("testings", ["last_name"], :order => {:last_name => :desc})
240
+ connection.add_index("testings", ["last_name"], order: { last_name: :desc })
191
241
  connection.remove_index("testings", ["last_name"])
192
- connection.add_index("testings", ["last_name", "first_name"], :order => {:last_name => :desc})
242
+ connection.add_index("testings", ["last_name", "first_name"], order: { last_name: :desc })
193
243
  connection.remove_index("testings", ["last_name", "first_name"])
194
- connection.add_index("testings", ["last_name", "first_name"], :order => {:last_name => :desc, :first_name => :asc})
244
+ connection.add_index("testings", ["last_name", "first_name"], order: { last_name: :desc, first_name: :asc })
195
245
  connection.remove_index("testings", ["last_name", "first_name"])
196
- connection.add_index("testings", ["last_name", "first_name"], :order => :desc)
246
+ connection.add_index("testings", ["last_name", "first_name"], order: :desc)
197
247
  connection.remove_index("testings", ["last_name", "first_name"])
198
248
  end
199
249
  end
200
250
 
201
251
  if current_adapter?(:PostgreSQLAdapter)
202
252
  def test_add_partial_index
203
- connection.add_index("testings", "last_name", :where => "first_name = 'john doe'")
253
+ connection.add_index("testings", "last_name", where: "first_name = 'john doe'")
204
254
  assert connection.index_exists?("testings", "last_name")
205
255
 
206
256
  connection.remove_index("testings", "last_name")
207
- assert !connection.index_exists?("testings", "last_name")
257
+ assert_not connection.index_exists?("testings", "last_name")
208
258
  end
209
259
  end
210
260
 
211
261
  private
212
262
  def good_index_name
213
- 'x' * connection.allowed_index_name_length
263
+ "x" * connection.index_name_length
214
264
  end
215
-
216
265
  end
217
266
  end
218
267
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cases/helper"
2
4
 
3
5
  module ActiveRecord
@@ -8,26 +10,27 @@ module ActiveRecord
8
10
 
9
11
  Migration = Struct.new(:name, :version) do
10
12
  def disable_ddl_transaction; false end
11
- def migrate direction
13
+ def migrate(direction)
12
14
  # do nothing
13
15
  end
14
16
  end
15
17
 
16
18
  def setup
17
19
  super
18
- ActiveRecord::SchemaMigration.create_table
19
- ActiveRecord::SchemaMigration.delete_all
20
+ @schema_migration = ActiveRecord::Base.connection.schema_migration
21
+ @schema_migration.create_table
22
+ @schema_migration.delete_all
20
23
  end
21
24
 
22
25
  teardown do
23
- ActiveRecord::SchemaMigration.drop_table
26
+ @schema_migration.drop_table
24
27
  end
25
28
 
26
29
  def test_migration_should_be_run_without_logger
27
30
  previous_logger = ActiveRecord::Base.logger
28
31
  ActiveRecord::Base.logger = nil
29
- migrations = [Migration.new('a', 1), Migration.new('b', 2), Migration.new('c', 3)]
30
- ActiveRecord::Migrator.new(:up, migrations).migrate
32
+ migrations = [Migration.new("a", 1), Migration.new("b", 2), Migration.new("c", 3)]
33
+ ActiveRecord::Migrator.new(:up, migrations, @schema_migration).migrate
31
34
  ensure
32
35
  ActiveRecord::Base.logger = previous_logger
33
36
  end
@@ -1,50 +1,104 @@
1
- require 'cases/helper'
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
2
4
 
3
5
  module ActiveRecord
4
6
  class Migration
5
- class PendingMigrationsTest < ActiveRecord::TestCase
6
- def setup
7
- super
8
- @connection = Minitest::Mock.new
9
- @app = Minitest::Mock.new
10
- conn = @connection
11
- @pending = Class.new(CheckPending) {
12
- define_method(:connection) { conn }
13
- }.new(@app)
14
- @pending.instance_variable_set :@last_check, -1 # Force checking
15
- end
7
+ if current_adapter?(:SQLite3Adapter) && !in_memory_db?
8
+ class PendingMigrationsTest < ActiveRecord::TestCase
9
+ setup do
10
+ @migration_dir = Dir.mktmpdir("activerecord-migrations-")
16
11
 
17
- def teardown
18
- assert @connection.verify
19
- assert @app.verify
20
- super
21
- end
12
+ file = ActiveRecord::Base.connection.raw_connection.filename
13
+ @conn = ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:", migrations_paths: @migration_dir
14
+ source_db = SQLite3::Database.new file
15
+ dest_db = ActiveRecord::Base.connection.raw_connection
16
+ backup = SQLite3::Backup.new(dest_db, "main", source_db, "main")
17
+ backup.step(-1)
18
+ backup.finish
19
+
20
+ ActiveRecord::Base.connection.drop_table "schema_migrations", if_exists: true
22
21
 
23
- def test_errors_if_pending
24
- @connection.expect :supports_migrations?, true
22
+ @app = Minitest::Mock.new
23
+ end
24
+
25
+ teardown do
26
+ @conn.release_connection if @conn
27
+ ActiveRecord::Base.establish_connection :arunit
28
+ FileUtils.rm_rf(@migration_dir)
29
+ end
25
30
 
26
- ActiveRecord::Migrator.stub :needs_migration?, true do
27
- assert_raise ActiveRecord::PendingMigrationError do
28
- @pending.call(nil)
31
+ def run_migrations
32
+ migrator = Base.connection.migration_context
33
+ capture(:stdout) { migrator.migrate }
34
+ end
35
+
36
+ def create_migration(number, name)
37
+ filename = "#{number}_#{name.underscore}.rb"
38
+ File.write(File.join(@migration_dir, filename), <<~RUBY)
39
+ class #{name.classify} < ActiveRecord::Migration::Current
40
+ end
41
+ RUBY
42
+ end
43
+
44
+ def test_errors_if_pending
45
+ create_migration "01", "create_foo"
46
+
47
+ assert_raises ActiveRecord::PendingMigrationError do
48
+ CheckPending.new(@app).call({})
49
+ end
50
+
51
+ # Continues failing
52
+ assert_raises ActiveRecord::PendingMigrationError do
53
+ CheckPending.new(@app).call({})
29
54
  end
30
55
  end
31
- end
32
56
 
33
- def test_checks_if_supported
34
- @connection.expect :supports_migrations?, true
35
- @app.expect :call, nil, [:foo]
57
+ def test_checks_if_supported
58
+ run_migrations
59
+
60
+ check_pending = CheckPending.new(@app)
36
61
 
37
- ActiveRecord::Migrator.stub :needs_migration?, false do
38
- @pending.call(:foo)
62
+ @app.expect :call, nil, [{}]
63
+ check_pending.call({})
64
+ @app.verify
65
+
66
+ # With cached result
67
+ @app.expect :call, nil, [{}]
68
+ check_pending.call({})
69
+ @app.verify
39
70
  end
40
- end
41
71
 
42
- def test_doesnt_check_if_unsupported
43
- @connection.expect :supports_migrations?, false
44
- @app.expect :call, nil, [:foo]
72
+ def test_okay_with_no_migrations
73
+ check_pending = CheckPending.new(@app)
74
+
75
+ @app.expect :call, nil, [{}]
76
+ check_pending.call({})
77
+ @app.verify
45
78
 
46
- ActiveRecord::Migrator.stub :needs_migration?, true do
47
- @pending.call(:foo)
79
+ # With cached result
80
+ @app.expect :call, nil, [{}]
81
+ check_pending.call({})
82
+ @app.verify
83
+ end
84
+
85
+ # Regression test for https://github.com/rails/rails/pull/29759
86
+ def test_understands_migrations_created_out_of_order
87
+ # With a prior file before even initialization
88
+ create_migration "05", "create_bar"
89
+ run_migrations
90
+
91
+ check_pending = CheckPending.new(@app)
92
+
93
+ @app.expect :call, nil, [{}]
94
+ check_pending.call({})
95
+ @app.verify
96
+
97
+ # It understands the new migration created at 01
98
+ create_migration "01", "create_foo"
99
+ assert_raises ActiveRecord::PendingMigrationError do
100
+ check_pending.call({})
101
+ end
48
102
  end
49
103
  end
50
104
  end