ibm_db 5.1.0-x86-mingw32 → 5.3.2-x86-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (624) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +9 -0
  3. data/LICENSE +55 -18
  4. data/ext/Makefile +14 -14
  5. data/ext/extconf.rb +4 -4
  6. data/ext/ibm_db.c +62 -57
  7. data/ext/ibm_db.o +0 -0
  8. data/ext/ibm_db.so +0 -0
  9. data/ext/mkmf.log +11 -11
  10. data/ext/ruby_ibm_db_cli.c +1 -0
  11. data/ext/ruby_ibm_db_cli.o +0 -0
  12. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +1463 -1279
  13. data/lib/ibm_db.so +1 -0
  14. data/lib/mswin32/ibm_db.rb +7 -3
  15. data/lib/mswin32/rb2x/i386/ruby25/ibm_db.so +0 -0
  16. data/lib/mswin32/rb3x/i386/ruby30/ibm_db.so +0 -0
  17. data/test/active_record/connection_adapters/fake_adapter.rb +5 -2
  18. data/test/activejob/destroy_association_async_test.rb +305 -0
  19. data/test/activejob/destroy_async_job_not_present_test.rb +31 -0
  20. data/test/activejob/helper.rb +15 -0
  21. data/test/assets/schema_dump_5_1.yml +345 -0
  22. data/test/cases/adapter_prevent_writes_test.rb +334 -0
  23. data/test/cases/adapter_test.rb +432 -218
  24. data/test/cases/adapters/mysql2/active_schema_test.rb +85 -75
  25. data/test/cases/adapters/mysql2/auto_increment_test.rb +34 -0
  26. data/test/cases/adapters/mysql2/bind_parameter_test.rb +5 -3
  27. data/test/cases/adapters/mysql2/boolean_test.rb +6 -4
  28. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +26 -24
  29. data/test/cases/adapters/mysql2/charset_collation_test.rb +20 -17
  30. data/test/cases/adapters/mysql2/connection_test.rb +48 -50
  31. data/test/cases/adapters/mysql2/count_deleted_rows_with_lock_test.rb +28 -0
  32. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +23 -19
  33. data/test/cases/adapters/mysql2/enum_test.rb +32 -11
  34. data/test/cases/adapters/mysql2/explain_test.rb +13 -11
  35. data/test/cases/adapters/mysql2/json_test.rb +17 -188
  36. data/test/cases/adapters/mysql2/mysql2_adapter_prevent_writes_test.rb +208 -0
  37. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +183 -28
  38. data/test/cases/adapters/mysql2/nested_deadlock_test.rb +75 -0
  39. data/test/cases/adapters/mysql2/optimizer_hints_test.rb +69 -0
  40. data/test/cases/adapters/mysql2/schema_migrations_test.rb +26 -21
  41. data/test/cases/adapters/mysql2/schema_test.rb +24 -22
  42. data/test/cases/adapters/mysql2/set_test.rb +32 -0
  43. data/test/cases/adapters/mysql2/sp_test.rb +10 -8
  44. data/test/cases/adapters/mysql2/sql_types_test.rb +8 -6
  45. data/test/cases/adapters/mysql2/table_options_test.rb +93 -10
  46. data/test/cases/adapters/mysql2/transaction_test.rb +151 -0
  47. data/test/cases/adapters/mysql2/unsigned_type_test.rb +11 -9
  48. data/test/cases/adapters/mysql2/virtual_column_test.rb +66 -0
  49. data/test/cases/adapters/postgresql/active_schema_test.rb +40 -25
  50. data/test/cases/adapters/postgresql/array_test.rb +118 -63
  51. data/test/cases/adapters/postgresql/bit_string_test.rb +12 -10
  52. data/test/cases/adapters/postgresql/bytea_test.rb +26 -25
  53. data/test/cases/adapters/postgresql/case_insensitive_test.rb +10 -9
  54. data/test/cases/adapters/postgresql/change_schema_test.rb +7 -5
  55. data/test/cases/adapters/postgresql/cidr_test.rb +2 -0
  56. data/test/cases/adapters/postgresql/citext_test.rb +58 -58
  57. data/test/cases/adapters/postgresql/collation_test.rb +17 -15
  58. data/test/cases/adapters/postgresql/composite_test.rb +25 -23
  59. data/test/cases/adapters/postgresql/connection_test.rb +73 -85
  60. data/test/cases/adapters/postgresql/create_unlogged_tables_test.rb +74 -0
  61. data/test/cases/adapters/postgresql/datatype_test.rb +19 -22
  62. data/test/cases/adapters/postgresql/date_test.rb +42 -0
  63. data/test/cases/adapters/postgresql/domain_test.rb +9 -7
  64. data/test/cases/adapters/postgresql/enum_test.rb +12 -10
  65. data/test/cases/adapters/postgresql/explain_test.rb +10 -8
  66. data/test/cases/adapters/postgresql/extension_migration_test.rb +13 -12
  67. data/test/cases/adapters/postgresql/foreign_table_test.rb +109 -0
  68. data/test/cases/adapters/postgresql/full_text_test.rb +8 -6
  69. data/test/cases/adapters/postgresql/geometric_test.rb +57 -63
  70. data/test/cases/adapters/postgresql/hstore_test.rb +288 -280
  71. data/test/cases/adapters/postgresql/infinity_test.rb +54 -15
  72. data/test/cases/adapters/postgresql/integer_test.rb +2 -0
  73. data/test/cases/adapters/postgresql/interval_test.rb +99 -0
  74. data/test/cases/adapters/postgresql/json_test.rb +16 -201
  75. data/test/cases/adapters/postgresql/ltree_test.rb +14 -16
  76. data/test/cases/adapters/postgresql/money_test.rb +47 -16
  77. data/test/cases/adapters/postgresql/network_test.rb +36 -28
  78. data/test/cases/adapters/postgresql/numbers_test.rb +7 -5
  79. data/test/cases/adapters/postgresql/optimizer_hints_test.rb +71 -0
  80. data/test/cases/adapters/postgresql/partitions_test.rb +22 -0
  81. data/test/cases/adapters/postgresql/postgresql_adapter_prevent_writes_test.rb +205 -0
  82. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +178 -136
  83. data/test/cases/adapters/postgresql/prepared_statements_disabled_test.rb +27 -0
  84. data/test/cases/adapters/postgresql/quoting_test.rb +12 -6
  85. data/test/cases/adapters/postgresql/range_test.rb +406 -292
  86. data/test/cases/adapters/postgresql/referential_integrity_test.rb +16 -15
  87. data/test/cases/adapters/postgresql/rename_table_test.rb +9 -8
  88. data/test/cases/adapters/postgresql/schema_authorization_test.rb +14 -23
  89. data/test/cases/adapters/postgresql/schema_test.rb +207 -91
  90. data/test/cases/adapters/postgresql/serial_test.rb +9 -7
  91. data/test/cases/adapters/postgresql/statement_pool_test.rb +26 -6
  92. data/test/cases/adapters/postgresql/timestamp_test.rb +17 -15
  93. data/test/cases/adapters/postgresql/transaction_nested_test.rb +114 -0
  94. data/test/cases/adapters/postgresql/transaction_test.rb +189 -0
  95. data/test/cases/adapters/postgresql/type_lookup_test.rb +12 -10
  96. data/test/cases/adapters/postgresql/utils_test.rb +11 -9
  97. data/test/cases/adapters/postgresql/uuid_test.rb +226 -109
  98. data/test/cases/adapters/postgresql/xml_test.rb +10 -14
  99. data/test/cases/adapters/sqlite3/collation_test.rb +26 -15
  100. data/test/cases/adapters/sqlite3/copy_table_test.rb +31 -28
  101. data/test/cases/adapters/sqlite3/explain_test.rb +13 -11
  102. data/test/cases/adapters/sqlite3/json_test.rb +29 -0
  103. data/test/cases/adapters/sqlite3/quoting_test.rb +35 -57
  104. data/test/cases/adapters/sqlite3/sqlite3_adapter_prevent_writes_test.rb +186 -0
  105. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +318 -131
  106. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +11 -11
  107. data/test/cases/adapters/sqlite3/statement_pool_test.rb +7 -6
  108. data/test/cases/adapters/sqlite3/transaction_test.rb +123 -0
  109. data/test/cases/aggregations_test.rb +14 -12
  110. data/test/cases/annotate_test.rb +46 -0
  111. data/test/cases/ar_schema_test.rb +153 -86
  112. data/test/cases/arel/attributes/attribute_test.rb +1145 -0
  113. data/test/cases/arel/attributes/math_test.rb +83 -0
  114. data/test/cases/arel/attributes_test.rb +27 -0
  115. data/test/cases/arel/collectors/bind_test.rb +40 -0
  116. data/test/cases/arel/collectors/composite_test.rb +47 -0
  117. data/test/cases/arel/collectors/sql_string_test.rb +41 -0
  118. data/test/cases/arel/collectors/substitute_bind_collector_test.rb +48 -0
  119. data/test/cases/arel/crud_test.rb +65 -0
  120. data/test/cases/arel/delete_manager_test.rb +53 -0
  121. data/test/cases/arel/factory_methods_test.rb +46 -0
  122. data/test/cases/arel/helper.rb +45 -0
  123. data/test/cases/arel/insert_manager_test.rb +241 -0
  124. data/test/cases/arel/nodes/and_test.rb +30 -0
  125. data/test/cases/arel/nodes/as_test.rb +36 -0
  126. data/test/cases/arel/nodes/ascending_test.rb +46 -0
  127. data/test/cases/arel/nodes/bin_test.rb +35 -0
  128. data/test/cases/arel/nodes/binary_test.rb +29 -0
  129. data/test/cases/arel/nodes/bind_param_test.rb +22 -0
  130. data/test/cases/arel/nodes/case_test.rb +96 -0
  131. data/test/cases/arel/nodes/casted_test.rb +18 -0
  132. data/test/cases/arel/nodes/comment_test.rb +22 -0
  133. data/test/cases/arel/nodes/count_test.rb +35 -0
  134. data/test/cases/arel/nodes/delete_statement_test.rb +36 -0
  135. data/test/cases/arel/nodes/descending_test.rb +46 -0
  136. data/test/cases/arel/nodes/distinct_test.rb +21 -0
  137. data/test/cases/arel/nodes/equality_test.rb +62 -0
  138. data/test/cases/arel/nodes/extract_test.rb +43 -0
  139. data/test/cases/arel/nodes/false_test.rb +21 -0
  140. data/test/cases/arel/nodes/grouping_test.rb +26 -0
  141. data/test/cases/arel/nodes/infix_operation_test.rb +42 -0
  142. data/test/cases/arel/nodes/insert_statement_test.rb +44 -0
  143. data/test/cases/arel/nodes/named_function_test.rb +48 -0
  144. data/test/cases/arel/nodes/node_test.rb +22 -0
  145. data/test/cases/arel/nodes/not_test.rb +31 -0
  146. data/test/cases/arel/nodes/or_test.rb +36 -0
  147. data/test/cases/arel/nodes/over_test.rb +69 -0
  148. data/test/cases/arel/nodes/select_core_test.rb +79 -0
  149. data/test/cases/arel/nodes/select_statement_test.rb +51 -0
  150. data/test/cases/arel/nodes/sql_literal_test.rb +75 -0
  151. data/test/cases/arel/nodes/sum_test.rb +35 -0
  152. data/test/cases/arel/nodes/table_alias_test.rb +29 -0
  153. data/test/cases/arel/nodes/true_test.rb +21 -0
  154. data/test/cases/arel/nodes/unary_operation_test.rb +41 -0
  155. data/test/cases/arel/nodes/update_statement_test.rb +60 -0
  156. data/test/cases/arel/nodes/window_test.rb +81 -0
  157. data/test/cases/arel/nodes_test.rb +34 -0
  158. data/test/cases/arel/select_manager_test.rb +1238 -0
  159. data/test/cases/arel/support/fake_record.rb +135 -0
  160. data/test/cases/arel/table_test.rb +216 -0
  161. data/test/cases/arel/update_manager_test.rb +126 -0
  162. data/test/cases/arel/visitors/dispatch_contamination_test.rb +78 -0
  163. data/test/cases/arel/visitors/dot_test.rb +90 -0
  164. data/test/cases/arel/visitors/mysql_test.rb +157 -0
  165. data/test/cases/arel/visitors/postgres_test.rb +366 -0
  166. data/test/cases/arel/visitors/sqlite_test.rb +75 -0
  167. data/test/cases/arel/visitors/to_sql_test.rb +750 -0
  168. data/test/cases/associations/belongs_to_associations_test.rb +510 -158
  169. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +4 -2
  170. data/test/cases/associations/callbacks_test.rb +56 -38
  171. data/test/cases/associations/cascaded_eager_loading_test.rb +118 -61
  172. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +138 -18
  173. data/test/cases/associations/eager_load_nested_include_test.rb +38 -37
  174. data/test/cases/associations/eager_singularization_test.rb +21 -21
  175. data/test/cases/associations/eager_test.rb +559 -415
  176. data/test/cases/associations/extension_test.rb +18 -12
  177. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +234 -213
  178. data/test/cases/associations/has_many_associations_test.rb +1038 -465
  179. data/test/cases/associations/has_many_through_associations_test.rb +558 -249
  180. data/test/cases/associations/has_one_associations_test.rb +294 -129
  181. data/test/cases/associations/has_one_through_associations_test.rb +121 -75
  182. data/test/cases/associations/inner_join_association_test.rb +114 -38
  183. data/test/cases/associations/inverse_associations_test.rb +606 -398
  184. data/test/cases/associations/join_model_test.rb +158 -148
  185. data/test/cases/associations/left_outer_join_association_test.rb +59 -24
  186. data/test/cases/associations/nested_through_associations_test.rb +166 -109
  187. data/test/cases/associations/required_test.rb +35 -10
  188. data/test/cases/associations_test.rb +241 -110
  189. data/test/cases/attribute_methods/read_test.rb +11 -11
  190. data/test/cases/attribute_methods_test.rb +413 -298
  191. data/test/cases/attributes_test.rb +145 -27
  192. data/test/cases/autosave_association_test.rb +681 -436
  193. data/test/cases/base_prevent_writes_test.rb +229 -0
  194. data/test/cases/base_test.rb +599 -542
  195. data/test/cases/batches_test.rb +288 -82
  196. data/test/cases/binary_test.rb +26 -31
  197. data/test/cases/bind_parameter_test.rb +194 -21
  198. data/test/cases/boolean_test.rb +52 -0
  199. data/test/cases/cache_key_test.rb +110 -5
  200. data/test/cases/calculations_test.rb +740 -177
  201. data/test/cases/callbacks_test.rb +74 -207
  202. data/test/cases/clone_test.rb +15 -10
  203. data/test/cases/coders/json_test.rb +2 -0
  204. data/test/cases/coders/yaml_column_test.rb +16 -13
  205. data/test/cases/collection_cache_key_test.rb +177 -20
  206. data/test/cases/column_alias_test.rb +9 -7
  207. data/test/cases/column_definition_test.rb +10 -68
  208. data/test/cases/comment_test.rb +166 -107
  209. data/test/cases/connection_adapters/adapter_leasing_test.rb +14 -10
  210. data/test/cases/connection_adapters/connection_handler_test.rb +358 -51
  211. data/test/cases/connection_adapters/connection_handlers_multi_db_test.rb +400 -0
  212. data/test/cases/connection_adapters/connection_handlers_multi_pool_config_test.rb +103 -0
  213. data/test/cases/connection_adapters/connection_handlers_sharding_db_test.rb +499 -0
  214. data/test/cases/connection_adapters/connection_swapping_nested_test.rb +457 -0
  215. data/test/cases/connection_adapters/legacy_connection_handlers_multi_db_test.rb +486 -0
  216. data/test/cases/connection_adapters/legacy_connection_handlers_sharding_db_test.rb +586 -0
  217. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +319 -138
  218. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +62 -50
  219. data/test/cases/connection_adapters/schema_cache_test.rb +259 -26
  220. data/test/cases/connection_adapters/type_lookup_test.rb +96 -95
  221. data/test/cases/connection_management_test.rb +13 -11
  222. data/test/cases/connection_pool_test.rb +316 -83
  223. data/test/cases/core_test.rb +82 -58
  224. data/test/cases/counter_cache_test.rb +204 -50
  225. data/test/cases/custom_locking_test.rb +5 -3
  226. data/test/cases/database_configurations/hash_config_test.rb +74 -0
  227. data/test/cases/database_configurations/resolver_test.rb +150 -0
  228. data/test/cases/database_configurations_test.rb +145 -0
  229. data/test/cases/database_selector_test.rb +296 -0
  230. data/test/cases/database_statements_test.rb +18 -16
  231. data/test/cases/date_test.rb +8 -16
  232. data/test/cases/date_time_precision_test.rb +100 -78
  233. data/test/cases/date_time_test.rb +23 -8
  234. data/test/cases/defaults_test.rb +106 -71
  235. data/test/cases/delegated_type_test.rb +57 -0
  236. data/test/cases/dirty_test.rb +419 -223
  237. data/test/cases/disconnected_test.rb +6 -6
  238. data/test/cases/dup_test.rb +54 -27
  239. data/test/cases/enum_test.rb +461 -82
  240. data/test/cases/errors_test.rb +7 -7
  241. data/test/cases/explain_subscriber_test.rb +17 -15
  242. data/test/cases/explain_test.rb +11 -19
  243. data/test/cases/filter_attributes_test.rb +153 -0
  244. data/test/cases/finder_respond_to_test.rb +14 -14
  245. data/test/cases/finder_test.rb +669 -287
  246. data/test/cases/fixture_set/file_test.rb +34 -38
  247. data/test/cases/fixtures_test.rb +833 -176
  248. data/test/cases/forbidden_attributes_protection_test.rb +32 -67
  249. data/test/cases/habtm_destroy_order_test.rb +25 -25
  250. data/test/cases/helper.rb +78 -49
  251. data/test/cases/hot_compatibility_test.rb +33 -32
  252. data/test/cases/i18n_test.rb +18 -17
  253. data/test/cases/inheritance_test.rb +180 -115
  254. data/test/cases/insert_all_test.rb +489 -0
  255. data/test/cases/instrumentation_test.rb +101 -0
  256. data/test/cases/integration_test.rb +119 -31
  257. data/test/cases/invalid_connection_test.rb +18 -16
  258. data/test/cases/invertible_migration_test.rb +183 -43
  259. data/test/cases/json_attribute_test.rb +35 -0
  260. data/test/cases/json_serialization_test.rb +57 -58
  261. data/test/cases/json_shared_test_cases.rb +290 -0
  262. data/test/cases/locking_test.rb +413 -119
  263. data/test/cases/log_subscriber_test.rb +68 -26
  264. data/test/cases/marshal_serialization_test.rb +39 -0
  265. data/test/cases/migration/change_schema_test.rb +118 -72
  266. data/test/cases/migration/change_table_test.rb +138 -30
  267. data/test/cases/migration/check_constraint_test.rb +162 -0
  268. data/test/cases/migration/column_attributes_test.rb +45 -35
  269. data/test/cases/migration/column_positioning_test.rb +18 -6
  270. data/test/cases/migration/columns_test.rb +93 -77
  271. data/test/cases/migration/command_recorder_test.rb +121 -34
  272. data/test/cases/migration/compatibility_test.rb +578 -23
  273. data/test/cases/migration/create_join_table_test.rb +35 -25
  274. data/test/cases/migration/foreign_key_test.rb +503 -284
  275. data/test/cases/migration/helper.rb +4 -3
  276. data/test/cases/migration/index_test.rb +119 -70
  277. data/test/cases/migration/logger_test.rb +9 -6
  278. data/test/cases/migration/pending_migrations_test.rb +88 -34
  279. data/test/cases/migration/references_foreign_key_test.rb +164 -150
  280. data/test/cases/migration/references_index_test.rb +38 -19
  281. data/test/cases/migration/references_statements_test.rb +15 -14
  282. data/test/cases/migration/rename_table_test.rb +53 -30
  283. data/test/cases/migration_test.rb +637 -269
  284. data/test/cases/migrator_test.rb +191 -135
  285. data/test/cases/mixin_test.rb +7 -11
  286. data/test/cases/modules_test.rb +36 -34
  287. data/test/cases/multi_db_migrator_test.rb +223 -0
  288. data/test/cases/multiparameter_attributes_test.rb +60 -33
  289. data/test/cases/multiple_db_test.rb +16 -22
  290. data/test/cases/nested_attributes_test.rb +341 -320
  291. data/test/cases/nested_attributes_with_callbacks_test.rb +26 -24
  292. data/test/cases/null_relation_test.rb +84 -0
  293. data/test/cases/numeric_data_test.rb +93 -0
  294. data/test/cases/persistence_test.rb +361 -269
  295. data/test/cases/pooled_connections_test.rb +18 -26
  296. data/test/cases/prepared_statement_status_test.rb +48 -0
  297. data/test/cases/primary_keys_test.rb +210 -104
  298. data/test/cases/query_cache_test.rb +610 -141
  299. data/test/cases/quoting_test.rb +132 -31
  300. data/test/cases/readonly_test.rb +49 -48
  301. data/test/cases/reaper_test.rb +146 -32
  302. data/test/cases/reflection_test.rb +167 -156
  303. data/test/cases/relation/delegation_test.rb +49 -36
  304. data/test/cases/relation/delete_all_test.rb +117 -0
  305. data/test/cases/relation/merging_test.rb +319 -42
  306. data/test/cases/relation/mutation_test.rb +55 -93
  307. data/test/cases/relation/or_test.rb +129 -29
  308. data/test/cases/relation/predicate_builder_test.rb +21 -6
  309. data/test/cases/relation/record_fetch_warning_test.rb +5 -3
  310. data/test/cases/relation/select_test.rb +67 -0
  311. data/test/cases/relation/update_all_test.rb +317 -0
  312. data/test/cases/relation/where_chain_test.rb +68 -32
  313. data/test/cases/relation/where_clause_test.rb +136 -61
  314. data/test/cases/relation/where_test.rb +155 -48
  315. data/test/cases/relation_test.rb +266 -112
  316. data/test/cases/relations_test.rb +969 -744
  317. data/test/cases/reload_models_test.rb +13 -9
  318. data/test/cases/reserved_word_test.rb +141 -0
  319. data/test/cases/result_test.rb +68 -17
  320. data/test/cases/sanitize_test.rb +87 -71
  321. data/test/cases/schema_dumper_test.rb +221 -128
  322. data/test/cases/schema_loading_test.rb +3 -2
  323. data/test/cases/scoping/default_scoping_test.rb +185 -144
  324. data/test/cases/scoping/named_scoping_test.rb +177 -89
  325. data/test/cases/scoping/relation_scoping_test.rb +197 -75
  326. data/test/cases/secure_token_test.rb +18 -3
  327. data/test/cases/serialization_test.rb +30 -28
  328. data/test/cases/serialized_attribute_test.rb +133 -42
  329. data/test/cases/signed_id_test.rb +168 -0
  330. data/test/cases/statement_cache_test.rb +41 -24
  331. data/test/cases/statement_invalid_test.rb +42 -0
  332. data/test/cases/store_test.rb +180 -55
  333. data/test/cases/strict_loading_test.rb +473 -0
  334. data/test/cases/suppressor_test.rb +26 -12
  335. data/test/cases/tasks/database_tasks_test.rb +1258 -194
  336. data/test/cases/tasks/mysql_rake_test.rb +370 -298
  337. data/test/cases/tasks/postgresql_rake_test.rb +481 -251
  338. data/test/cases/tasks/sqlite_rake_test.rb +225 -178
  339. data/test/cases/test_case.rb +51 -40
  340. data/test/cases/test_databases_test.rb +79 -0
  341. data/test/cases/test_fixtures_test.rb +79 -19
  342. data/test/cases/time_precision_test.rb +98 -76
  343. data/test/cases/timestamp_test.rb +102 -99
  344. data/test/cases/touch_later_test.rb +12 -10
  345. data/test/cases/transaction_callbacks_test.rb +344 -90
  346. data/test/cases/transaction_isolation_test.rb +12 -12
  347. data/test/cases/transactions_test.rb +612 -162
  348. data/test/cases/type/adapter_specific_registry_test.rb +14 -2
  349. data/test/cases/type/date_time_test.rb +4 -2
  350. data/test/cases/type/integer_test.rb +4 -2
  351. data/test/cases/type/string_test.rb +10 -8
  352. data/test/cases/type/time_test.rb +28 -0
  353. data/test/cases/type/type_map_test.rb +29 -28
  354. data/test/cases/type/unsigned_integer_test.rb +19 -0
  355. data/test/cases/type_test.rb +2 -0
  356. data/test/cases/types_test.rb +3 -1
  357. data/test/cases/unconnected_test.rb +14 -1
  358. data/test/cases/unsafe_raw_sql_test.rb +274 -0
  359. data/test/cases/validations/absence_validation_test.rb +19 -17
  360. data/test/cases/validations/association_validation_test.rb +30 -28
  361. data/test/cases/validations/i18n_generate_message_validation_test.rb +34 -16
  362. data/test/cases/validations/i18n_validation_test.rb +22 -21
  363. data/test/cases/validations/length_validation_test.rb +34 -33
  364. data/test/cases/validations/numericality_validation_test.rb +181 -0
  365. data/test/cases/validations/presence_validation_test.rb +21 -19
  366. data/test/cases/validations/uniqueness_validation_test.rb +156 -86
  367. data/test/cases/validations_repair_helper.rb +2 -0
  368. data/test/cases/validations_test.rb +61 -26
  369. data/test/cases/view_test.rb +122 -116
  370. data/test/cases/yaml_serialization_test.rb +79 -34
  371. data/test/config.example.yml +19 -19
  372. data/test/config.rb +3 -1
  373. data/test/config.yml +16 -6
  374. data/test/fixtures/all/namespaced/accounts.yml +2 -0
  375. data/test/fixtures/author_addresses.yml +1 -8
  376. data/test/fixtures/authors.yml +1 -7
  377. data/test/fixtures/binaries.yml +4 -0
  378. data/test/fixtures/books.yml +9 -2
  379. data/test/fixtures/categories_posts.yml +3 -0
  380. data/test/fixtures/citations.yml +5 -0
  381. data/test/fixtures/comments.yml +7 -0
  382. data/test/fixtures/companies.yml +5 -0
  383. data/test/fixtures/computers.yml +2 -0
  384. data/test/fixtures/customers.yml +10 -1
  385. data/test/fixtures/developers.yml +1 -1
  386. data/test/fixtures/essays.yml +10 -0
  387. data/test/fixtures/faces.yml +3 -3
  388. data/test/fixtures/humans.yml +5 -0
  389. data/test/fixtures/interests.yml +7 -7
  390. data/test/fixtures/memberships.yml +7 -0
  391. data/test/fixtures/minimalistics.yml +3 -0
  392. data/test/fixtures/mixed_case_monkeys.yml +2 -2
  393. data/test/fixtures/naked/yml/courses_with_invalid_key.yml +3 -0
  394. data/test/fixtures/naked/yml/parrots.yml +1 -0
  395. data/test/fixtures/other_books.yml +26 -0
  396. data/test/fixtures/other_posts.yml +1 -0
  397. data/test/fixtures/parrots.yml +7 -1
  398. data/test/fixtures/pirates.yml +3 -0
  399. data/test/fixtures/posts.yml +11 -3
  400. data/test/fixtures/readers.yml +6 -0
  401. data/test/fixtures/reserved_words/values.yml +2 -2
  402. data/test/fixtures/sponsors.yml +3 -0
  403. data/test/fixtures/strict_zines.yml +2 -0
  404. data/test/fixtures/subscribers.yml +1 -1
  405. data/test/fixtures/tasks.yml +1 -1
  406. data/test/fixtures/warehouse-things.yml +3 -0
  407. data/test/migrations/10_urban/9_add_expressions.rb +2 -0
  408. data/test/migrations/decimal/1_give_me_big_numbers.rb +6 -4
  409. data/test/migrations/magic/1_currencies_have_symbols.rb +3 -2
  410. data/test/migrations/missing/1000_people_have_middle_names.rb +2 -0
  411. data/test/migrations/missing/1_people_have_last_names.rb +2 -0
  412. data/test/migrations/missing/3_we_need_reminders.rb +2 -0
  413. data/test/migrations/missing/4_innocent_jointable.rb +3 -1
  414. data/test/migrations/rename/1_we_need_things.rb +2 -0
  415. data/test/migrations/rename/2_rename_things.rb +2 -0
  416. data/test/migrations/to_copy/1_people_have_hobbies.rb +3 -1
  417. data/test/migrations/to_copy/2_people_have_descriptions.rb +3 -1
  418. data/test/migrations/to_copy2/1_create_articles.rb +2 -0
  419. data/test/migrations/to_copy2/2_create_comments.rb +3 -1
  420. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +3 -1
  421. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +3 -1
  422. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +3 -1
  423. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +2 -0
  424. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +2 -0
  425. data/test/migrations/valid/1_valid_people_have_last_names.rb +2 -0
  426. data/test/migrations/valid/2_we_need_reminders.rb +2 -0
  427. data/test/migrations/valid/3_innocent_jointable.rb +3 -1
  428. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +2 -0
  429. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -0
  430. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +3 -1
  431. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +2 -0
  432. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +2 -0
  433. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +3 -1
  434. data/test/migrations/version_check/20131219224947_migration_version_check.rb +2 -0
  435. data/test/models/account.rb +46 -0
  436. data/test/models/admin/account.rb +3 -1
  437. data/test/models/admin/randomly_named_c1.rb +2 -0
  438. data/test/models/admin/user.rb +16 -8
  439. data/test/models/admin.rb +4 -2
  440. data/test/models/aircraft.rb +3 -1
  441. data/test/models/arunit2_model.rb +2 -0
  442. data/test/models/author.rb +153 -102
  443. data/test/models/auto_id.rb +2 -0
  444. data/test/models/autoloadable/extra_firm.rb +2 -0
  445. data/test/models/binary.rb +3 -1
  446. data/test/models/binary_field.rb +6 -0
  447. data/test/models/bird.rb +13 -1
  448. data/test/models/book.rb +14 -4
  449. data/test/models/book_destroy_async.rb +24 -0
  450. data/test/models/boolean.rb +5 -0
  451. data/test/models/bulb.rb +13 -4
  452. data/test/models/cake_designer.rb +2 -0
  453. data/test/models/car.rb +17 -10
  454. data/test/models/carrier.rb +2 -0
  455. data/test/models/cart.rb +5 -0
  456. data/test/models/cat.rb +2 -0
  457. data/test/models/categorization.rb +8 -6
  458. data/test/models/category.rb +28 -16
  459. data/test/models/chef.rb +2 -0
  460. data/test/models/citation.rb +5 -1
  461. data/test/models/club.rb +13 -10
  462. data/test/models/college.rb +4 -2
  463. data/test/models/column.rb +2 -0
  464. data/test/models/column_name.rb +2 -0
  465. data/test/models/comment.rb +32 -10
  466. data/test/models/company.rb +102 -106
  467. data/test/models/company_in_module.rb +27 -26
  468. data/test/models/computer.rb +3 -1
  469. data/test/models/contact.rb +15 -13
  470. data/test/models/content.rb +5 -3
  471. data/test/models/contract.rb +21 -3
  472. data/test/models/country.rb +2 -4
  473. data/test/models/course.rb +3 -1
  474. data/test/models/customer.rb +10 -8
  475. data/test/models/customer_carrier.rb +2 -0
  476. data/test/models/dashboard.rb +2 -0
  477. data/test/models/default.rb +2 -0
  478. data/test/models/department.rb +2 -0
  479. data/test/models/destroy_async_parent.rb +15 -0
  480. data/test/models/destroy_async_parent_soft_delete.rb +20 -0
  481. data/test/models/developer.rb +152 -85
  482. data/test/models/dl_keyed_belongs_to.rb +13 -0
  483. data/test/models/dl_keyed_belongs_to_soft_delete.rb +19 -0
  484. data/test/models/dl_keyed_has_many.rb +5 -0
  485. data/test/models/dl_keyed_has_many_through.rb +5 -0
  486. data/test/models/dl_keyed_has_one.rb +5 -0
  487. data/test/models/dl_keyed_join.rb +10 -0
  488. data/test/models/dog.rb +2 -0
  489. data/test/models/dog_lover.rb +2 -0
  490. data/test/models/doubloon.rb +3 -1
  491. data/test/models/drink_designer.rb +17 -0
  492. data/test/models/edge.rb +4 -2
  493. data/test/models/electron.rb +2 -0
  494. data/test/models/engine.rb +3 -2
  495. data/test/models/entrant.rb +2 -0
  496. data/test/models/entry.rb +5 -0
  497. data/test/models/essay.rb +6 -3
  498. data/test/models/essay_destroy_async.rb +12 -0
  499. data/test/models/event.rb +3 -1
  500. data/test/models/eye.rb +5 -3
  501. data/test/models/face.rb +14 -6
  502. data/test/models/family.rb +6 -0
  503. data/test/models/family_tree.rb +6 -0
  504. data/test/models/friendship.rb +5 -3
  505. data/test/models/frog.rb +8 -0
  506. data/test/models/guid.rb +3 -1
  507. data/test/models/guitar.rb +2 -0
  508. data/test/models/hotel.rb +5 -3
  509. data/test/models/human.rb +39 -0
  510. data/test/models/image.rb +3 -1
  511. data/test/models/interest.rb +14 -3
  512. data/test/models/invoice.rb +4 -2
  513. data/test/models/item.rb +3 -1
  514. data/test/models/job.rb +5 -3
  515. data/test/models/joke.rb +4 -2
  516. data/test/models/keyboard.rb +3 -1
  517. data/test/models/legacy_thing.rb +2 -0
  518. data/test/models/lesson.rb +2 -0
  519. data/test/models/line_item.rb +3 -1
  520. data/test/models/liquid.rb +2 -0
  521. data/test/models/matey.rb +3 -1
  522. data/test/models/measurement.rb +4 -0
  523. data/test/models/member.rb +23 -20
  524. data/test/models/member_detail.rb +3 -0
  525. data/test/models/member_type.rb +2 -0
  526. data/test/models/membership.rb +4 -1
  527. data/test/models/mentor.rb +3 -1
  528. data/test/models/message.rb +5 -0
  529. data/test/models/minimalistic.rb +2 -0
  530. data/test/models/minivan.rb +3 -2
  531. data/test/models/mixed_case_monkey.rb +3 -1
  532. data/test/models/molecule.rb +2 -0
  533. data/test/models/mouse.rb +6 -0
  534. data/test/models/movie.rb +2 -0
  535. data/test/models/node.rb +4 -2
  536. data/test/models/non_primary_key.rb +2 -0
  537. data/test/models/notification.rb +2 -0
  538. data/test/models/numeric_data.rb +12 -0
  539. data/test/models/order.rb +4 -2
  540. data/test/models/organization.rb +9 -7
  541. data/test/models/other_dog.rb +3 -1
  542. data/test/models/owner.rb +6 -4
  543. data/test/models/parrot.rb +12 -4
  544. data/test/models/person.rb +59 -54
  545. data/test/models/personal_legacy_thing.rb +3 -1
  546. data/test/models/pet.rb +4 -2
  547. data/test/models/pet_treasure.rb +2 -0
  548. data/test/models/pirate.rb +67 -43
  549. data/test/models/possession.rb +3 -1
  550. data/test/models/post.rb +184 -86
  551. data/test/models/price_estimate.rb +11 -1
  552. data/test/models/professor.rb +3 -1
  553. data/test/models/project.rb +14 -12
  554. data/test/models/publisher/article.rb +2 -0
  555. data/test/models/publisher/magazine.rb +2 -0
  556. data/test/models/publisher.rb +2 -0
  557. data/test/models/randomly_named_c1.rb +2 -0
  558. data/test/models/rating.rb +5 -1
  559. data/test/models/reader.rb +7 -5
  560. data/test/models/recipe.rb +2 -0
  561. data/test/models/record.rb +2 -0
  562. data/test/models/reference.rb +6 -3
  563. data/test/models/reply.rb +39 -21
  564. data/test/models/room.rb +6 -0
  565. data/test/models/section.rb +6 -0
  566. data/test/models/seminar.rb +6 -0
  567. data/test/models/session.rb +6 -0
  568. data/test/models/ship.rb +12 -9
  569. data/test/models/ship_part.rb +5 -3
  570. data/test/models/shop.rb +4 -2
  571. data/test/models/shop_account.rb +2 -0
  572. data/test/models/speedometer.rb +2 -0
  573. data/test/models/sponsor.rb +8 -5
  574. data/test/models/squeak.rb +6 -0
  575. data/test/models/strict_zine.rb +7 -0
  576. data/test/models/string_key_object.rb +2 -0
  577. data/test/models/student.rb +2 -0
  578. data/test/models/subscriber.rb +4 -2
  579. data/test/models/subscription.rb +5 -1
  580. data/test/models/tag.rb +6 -3
  581. data/test/models/tagging.rb +13 -6
  582. data/test/models/task.rb +2 -0
  583. data/test/models/topic.rb +54 -19
  584. data/test/models/toy.rb +4 -0
  585. data/test/models/traffic_light.rb +2 -0
  586. data/test/models/treasure.rb +5 -3
  587. data/test/models/treaty.rb +2 -4
  588. data/test/models/tree.rb +2 -0
  589. data/test/models/tuning_peg.rb +2 -0
  590. data/test/models/tyre.rb +2 -0
  591. data/test/models/user.rb +12 -4
  592. data/test/models/uuid_child.rb +2 -0
  593. data/test/models/uuid_item.rb +2 -0
  594. data/test/models/uuid_parent.rb +2 -0
  595. data/test/models/vegetables.rb +12 -3
  596. data/test/models/vertex.rb +6 -4
  597. data/test/models/warehouse_thing.rb +2 -0
  598. data/test/models/wheel.rb +3 -1
  599. data/test/models/without_table.rb +3 -1
  600. data/test/models/zine.rb +3 -1
  601. data/test/schema/mysql2_specific_schema.rb +49 -35
  602. data/test/schema/oracle_specific_schema.rb +13 -15
  603. data/test/schema/postgresql_specific_schema.rb +51 -40
  604. data/test/schema/schema.rb +334 -154
  605. data/test/schema/sqlite_specific_schema.rb +9 -16
  606. data/test/support/config.rb +26 -26
  607. data/test/support/connection.rb +14 -8
  608. data/test/support/connection_helper.rb +3 -1
  609. data/test/support/ddl_helper.rb +2 -0
  610. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic.dump +0 -0
  611. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic_associations.dump +0 -0
  612. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic.dump +0 -0
  613. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic_associations.dump +0 -0
  614. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic.dump +0 -0
  615. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic_associations.dump +0 -0
  616. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic.dump +0 -0
  617. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic_associations.dump +0 -0
  618. data/test/support/marshal_compatibility_fixtures/legacy_6_0_record_mysql.dump +0 -0
  619. data/test/support/marshal_compatibility_fixtures/legacy_relation.dump +0 -0
  620. data/test/support/schema_dumping_helper.rb +2 -0
  621. data/test/support/stubs/strong_parameters.rb +40 -0
  622. data/test/support/yaml_compatibility_fixtures/rails_v1_mysql.yml +206 -0
  623. data/test/support/yaml_compatibility_fixtures/rails_v2.yml +55 -0
  624. metadata +196 -11
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cases/helper"
2
4
  require "cases/migration/helper"
3
5
 
@@ -9,9 +11,9 @@ class MigratorTest < ActiveRecord::TestCase
9
11
  class Sensor < ActiveRecord::Migration::Current
10
12
  attr_reader :went_up, :went_down
11
13
 
12
- def initialize name = self.class.name, version = nil
14
+ def initialize(name = self.class.name, version = nil)
13
15
  super
14
- @went_up = false
16
+ @went_up = false
15
17
  @went_down = false
16
18
  end
17
19
 
@@ -21,8 +23,9 @@ class MigratorTest < ActiveRecord::TestCase
21
23
 
22
24
  def setup
23
25
  super
24
- ActiveRecord::SchemaMigration.create_table
25
- ActiveRecord::SchemaMigration.delete_all rescue nil
26
+ @schema_migration = ActiveRecord::Base.connection.schema_migration
27
+ @schema_migration.create_table
28
+ @schema_migration.delete_all rescue nil
26
29
  @verbose_was = ActiveRecord::Migration.verbose
27
30
  ActiveRecord::Migration.message_count = 0
28
31
  ActiveRecord::Migration.class_eval do
@@ -34,7 +37,7 @@ class MigratorTest < ActiveRecord::TestCase
34
37
  end
35
38
 
36
39
  teardown do
37
- ActiveRecord::SchemaMigration.delete_all rescue nil
40
+ @schema_migration.delete_all rescue nil
38
41
  ActiveRecord::Migration.verbose = @verbose_was
39
42
  ActiveRecord::Migration.class_eval do
40
43
  undef :puts
@@ -45,79 +48,105 @@ class MigratorTest < ActiveRecord::TestCase
45
48
  end
46
49
 
47
50
  def test_migrator_with_duplicate_names
48
- assert_raises(ActiveRecord::DuplicateMigrationNameError, "Multiple migrations have the name Chunky") do
49
- list = [ActiveRecord::Migration.new('Chunky'), ActiveRecord::Migration.new('Chunky')]
50
- ActiveRecord::Migrator.new(:up, list)
51
+ e = assert_raises(ActiveRecord::DuplicateMigrationNameError) do
52
+ list = [ActiveRecord::Migration.new("Chunky"), ActiveRecord::Migration.new("Chunky")]
53
+ ActiveRecord::Migrator.new(:up, list, @schema_migration)
51
54
  end
55
+ assert_match(/Multiple migrations have the name Chunky/, e.message)
52
56
  end
53
57
 
54
58
  def test_migrator_with_duplicate_versions
55
59
  assert_raises(ActiveRecord::DuplicateMigrationVersionError) do
56
- list = [ActiveRecord::Migration.new('Foo', 1), ActiveRecord::Migration.new('Bar', 1)]
57
- ActiveRecord::Migrator.new(:up, list)
60
+ list = [ActiveRecord::Migration.new("Foo", 1), ActiveRecord::Migration.new("Bar", 1)]
61
+ ActiveRecord::Migrator.new(:up, list, @schema_migration)
58
62
  end
59
63
  end
60
64
 
61
65
  def test_migrator_with_missing_version_numbers
62
66
  assert_raises(ActiveRecord::UnknownMigrationVersionError) do
63
- list = [ActiveRecord::Migration.new('Foo', 1), ActiveRecord::Migration.new('Bar', 2)]
64
- ActiveRecord::Migrator.new(:up, list, 3).run
67
+ list = [ActiveRecord::Migration.new("Foo", 1), ActiveRecord::Migration.new("Bar", 2)]
68
+ ActiveRecord::Migrator.new(:up, list, @schema_migration, 3).run
69
+ end
70
+
71
+ assert_raises(ActiveRecord::UnknownMigrationVersionError) do
72
+ list = [ActiveRecord::Migration.new("Foo", 1), ActiveRecord::Migration.new("Bar", 2)]
73
+ ActiveRecord::Migrator.new(:up, list, @schema_migration, -1).run
74
+ end
75
+
76
+ assert_raises(ActiveRecord::UnknownMigrationVersionError) do
77
+ list = [ActiveRecord::Migration.new("Foo", 1), ActiveRecord::Migration.new("Bar", 2)]
78
+ ActiveRecord::Migrator.new(:up, list, @schema_migration, 0).run
79
+ end
80
+
81
+ assert_raises(ActiveRecord::UnknownMigrationVersionError) do
82
+ list = [ActiveRecord::Migration.new("Foo", 1), ActiveRecord::Migration.new("Bar", 2)]
83
+ ActiveRecord::Migrator.new(:up, list, @schema_migration, 3).migrate
84
+ end
85
+
86
+ assert_raises(ActiveRecord::UnknownMigrationVersionError) do
87
+ list = [ActiveRecord::Migration.new("Foo", 1), ActiveRecord::Migration.new("Bar", 2)]
88
+ ActiveRecord::Migrator.new(:up, list, @schema_migration, -1).migrate
65
89
  end
66
90
  end
67
91
 
68
92
  def test_finds_migrations
69
- migrations = ActiveRecord::Migrator.migrations(MIGRATIONS_ROOT + "/valid")
93
+ schema_migration = ActiveRecord::Base.connection.schema_migration
94
+ migrations = ActiveRecord::MigrationContext.new(MIGRATIONS_ROOT + "/valid", schema_migration).migrations
70
95
 
71
- [[1, 'ValidPeopleHaveLastNames'], [2, 'WeNeedReminders'], [3, 'InnocentJointable']].each_with_index do |pair, i|
96
+ [[1, "ValidPeopleHaveLastNames"], [2, "WeNeedReminders"], [3, "InnocentJointable"]].each_with_index do |pair, i|
72
97
  assert_equal migrations[i].version, pair.first
73
98
  assert_equal migrations[i].name, pair.last
74
99
  end
75
100
  end
76
101
 
77
102
  def test_finds_migrations_in_subdirectories
78
- migrations = ActiveRecord::Migrator.migrations(MIGRATIONS_ROOT + "/valid_with_subdirectories")
103
+ schema_migration = ActiveRecord::Base.connection.schema_migration
104
+ migrations = ActiveRecord::MigrationContext.new(MIGRATIONS_ROOT + "/valid_with_subdirectories", schema_migration).migrations
79
105
 
80
- [[1, 'ValidPeopleHaveLastNames'], [2, 'WeNeedReminders'], [3, 'InnocentJointable']].each_with_index do |pair, i|
106
+ [[1, "ValidPeopleHaveLastNames"], [2, "WeNeedReminders"], [3, "InnocentJointable"]].each_with_index do |pair, i|
81
107
  assert_equal migrations[i].version, pair.first
82
108
  assert_equal migrations[i].name, pair.last
83
109
  end
84
110
  end
85
111
 
86
112
  def test_finds_migrations_from_two_directories
87
- directories = [MIGRATIONS_ROOT + '/valid_with_timestamps', MIGRATIONS_ROOT + '/to_copy_with_timestamps']
88
- migrations = ActiveRecord::Migrator.migrations directories
113
+ schema_migration = ActiveRecord::Base.connection.schema_migration
114
+ directories = [MIGRATIONS_ROOT + "/valid_with_timestamps", MIGRATIONS_ROOT + "/to_copy_with_timestamps"]
115
+ migrations = ActiveRecord::MigrationContext.new(directories, schema_migration).migrations
89
116
 
90
117
  [[20090101010101, "PeopleHaveHobbies"],
91
118
  [20090101010202, "PeopleHaveDescriptions"],
92
119
  [20100101010101, "ValidWithTimestampsPeopleHaveLastNames"],
93
120
  [20100201010101, "ValidWithTimestampsWeNeedReminders"],
94
121
  [20100301010101, "ValidWithTimestampsInnocentJointable"]].each_with_index do |pair, i|
95
- assert_equal pair.first, migrations[i].version
96
- assert_equal pair.last, migrations[i].name
122
+ assert_equal pair.first, migrations[i].version
123
+ assert_equal pair.last, migrations[i].name
97
124
  end
98
125
  end
99
126
 
100
127
  def test_finds_migrations_in_numbered_directory
101
- migrations = ActiveRecord::Migrator.migrations [MIGRATIONS_ROOT + '/10_urban']
128
+ schema_migration = ActiveRecord::Base.connection.schema_migration
129
+ migrations = ActiveRecord::MigrationContext.new(MIGRATIONS_ROOT + "/10_urban", schema_migration).migrations
102
130
  assert_equal 9, migrations[0].version
103
- assert_equal 'AddExpressions', migrations[0].name
131
+ assert_equal "AddExpressions", migrations[0].name
104
132
  end
105
133
 
106
134
  def test_relative_migrations
135
+ schema_migration = ActiveRecord::Base.connection.schema_migration
107
136
  list = Dir.chdir(MIGRATIONS_ROOT) do
108
- ActiveRecord::Migrator.migrations("valid")
137
+ ActiveRecord::MigrationContext.new("valid", schema_migration).migrations
109
138
  end
110
139
 
111
140
  migration_proxy = list.find { |item|
112
- item.name == 'ValidPeopleHaveLastNames'
141
+ item.name == "ValidPeopleHaveLastNames"
113
142
  }
114
- assert migration_proxy, 'should find pending migration'
143
+ assert migration_proxy, "should find pending migration"
115
144
  end
116
145
 
117
146
  def test_finds_pending_migrations
118
- ActiveRecord::SchemaMigration.create!(:version => '1')
119
- migration_list = [ActiveRecord::Migration.new('foo', 1), ActiveRecord::Migration.new('bar', 3)]
120
- migrations = ActiveRecord::Migrator.new(:up, migration_list).pending_migrations
147
+ @schema_migration.create!(version: "1")
148
+ migration_list = [ActiveRecord::Migration.new("foo", 1), ActiveRecord::Migration.new("bar", 3)]
149
+ migrations = ActiveRecord::Migrator.new(:up, migration_list, @schema_migration).pending_migrations
121
150
 
122
151
  assert_equal 1, migrations.size
123
152
  assert_equal migration_list.last, migrations.first
@@ -125,35 +154,38 @@ class MigratorTest < ActiveRecord::TestCase
125
154
 
126
155
  def test_migrations_status
127
156
  path = MIGRATIONS_ROOT + "/valid"
157
+ schema_migration = ActiveRecord::Base.connection.schema_migration
128
158
 
129
- ActiveRecord::SchemaMigration.create(version: 2)
130
- ActiveRecord::SchemaMigration.create(version: 10)
159
+ @schema_migration.create(version: 2)
160
+ @schema_migration.create(version: 10)
131
161
 
132
162
  assert_equal [
133
163
  ["down", "001", "Valid people have last names"],
134
164
  ["up", "002", "We need reminders"],
135
165
  ["down", "003", "Innocent jointable"],
136
166
  ["up", "010", "********** NO FILE **********"],
137
- ], ActiveRecord::Migrator.migrations_status(path)
167
+ ], ActiveRecord::MigrationContext.new(path, schema_migration).migrations_status
138
168
  end
139
169
 
140
170
  def test_migrations_status_in_subdirectories
141
171
  path = MIGRATIONS_ROOT + "/valid_with_subdirectories"
172
+ schema_migration = ActiveRecord::Base.connection.schema_migration
142
173
 
143
- ActiveRecord::SchemaMigration.create(version: 2)
144
- ActiveRecord::SchemaMigration.create(version: 10)
174
+ @schema_migration.create(version: 2)
175
+ @schema_migration.create(version: 10)
145
176
 
146
177
  assert_equal [
147
178
  ["down", "001", "Valid people have last names"],
148
179
  ["up", "002", "We need reminders"],
149
180
  ["down", "003", "Innocent jointable"],
150
181
  ["up", "010", "********** NO FILE **********"],
151
- ], ActiveRecord::Migrator.migrations_status(path)
182
+ ], ActiveRecord::MigrationContext.new(path, schema_migration).migrations_status
152
183
  end
153
184
 
154
185
  def test_migrations_status_with_schema_define_in_subdirectories
155
186
  path = MIGRATIONS_ROOT + "/valid_with_subdirectories"
156
187
  prev_paths = ActiveRecord::Migrator.migrations_paths
188
+ schema_migration = ActiveRecord::Base.connection.schema_migration
157
189
  ActiveRecord::Migrator.migrations_paths = path
158
190
 
159
191
  ActiveRecord::Schema.define(version: 3) do
@@ -163,16 +195,17 @@ class MigratorTest < ActiveRecord::TestCase
163
195
  ["up", "001", "Valid people have last names"],
164
196
  ["up", "002", "We need reminders"],
165
197
  ["up", "003", "Innocent jointable"],
166
- ], ActiveRecord::Migrator.migrations_status(path)
198
+ ], ActiveRecord::MigrationContext.new(path, schema_migration).migrations_status
167
199
  ensure
168
200
  ActiveRecord::Migrator.migrations_paths = prev_paths
169
201
  end
170
202
 
171
203
  def test_migrations_status_from_two_directories
172
204
  paths = [MIGRATIONS_ROOT + "/valid_with_timestamps", MIGRATIONS_ROOT + "/to_copy_with_timestamps"]
205
+ schema_migration = ActiveRecord::Base.connection.schema_migration
173
206
 
174
- ActiveRecord::SchemaMigration.create(version: "20100101010101")
175
- ActiveRecord::SchemaMigration.create(version: "20160528010101")
207
+ @schema_migration.create(version: "20100101010101")
208
+ @schema_migration.create(version: "20160528010101")
176
209
 
177
210
  assert_equal [
178
211
  ["down", "20090101010101", "People have hobbies"],
@@ -181,27 +214,27 @@ class MigratorTest < ActiveRecord::TestCase
181
214
  ["down", "20100201010101", "Valid with timestamps we need reminders"],
182
215
  ["down", "20100301010101", "Valid with timestamps innocent jointable"],
183
216
  ["up", "20160528010101", "********** NO FILE **********"],
184
- ], ActiveRecord::Migrator.migrations_status(paths)
217
+ ], ActiveRecord::MigrationContext.new(paths, schema_migration).migrations_status
185
218
  end
186
219
 
187
220
  def test_migrator_interleaved_migrations
188
- pass_one = [Sensor.new('One', 1)]
221
+ pass_one = [Sensor.new("One", 1)]
189
222
 
190
- ActiveRecord::Migrator.new(:up, pass_one).migrate
223
+ ActiveRecord::Migrator.new(:up, pass_one, @schema_migration).migrate
191
224
  assert pass_one.first.went_up
192
225
  assert_not pass_one.first.went_down
193
226
 
194
- pass_two = [Sensor.new('One', 1), Sensor.new('Three', 3)]
195
- ActiveRecord::Migrator.new(:up, pass_two).migrate
227
+ pass_two = [Sensor.new("One", 1), Sensor.new("Three", 3)]
228
+ ActiveRecord::Migrator.new(:up, pass_two, @schema_migration).migrate
196
229
  assert_not pass_two[0].went_up
197
230
  assert pass_two[1].went_up
198
231
  assert pass_two.all? { |x| !x.went_down }
199
232
 
200
- pass_three = [Sensor.new('One', 1),
201
- Sensor.new('Two', 2),
202
- Sensor.new('Three', 3)]
233
+ pass_three = [Sensor.new("One", 1),
234
+ Sensor.new("Two", 2),
235
+ Sensor.new("Three", 3)]
203
236
 
204
- ActiveRecord::Migrator.new(:down, pass_three).migrate
237
+ ActiveRecord::Migrator.new(:down, pass_three, @schema_migration).migrate
205
238
  assert pass_three[0].went_down
206
239
  assert_not pass_three[1].went_down
207
240
  assert pass_three[2].went_down
@@ -209,46 +242,50 @@ class MigratorTest < ActiveRecord::TestCase
209
242
 
210
243
  def test_up_calls_up
211
244
  migrations = [Sensor.new(nil, 0), Sensor.new(nil, 1), Sensor.new(nil, 2)]
212
- ActiveRecord::Migrator.new(:up, migrations).migrate
245
+ migrator = ActiveRecord::Migrator.new(:up, migrations, @schema_migration)
246
+ migrator.migrate
213
247
  assert migrations.all?(&:went_up)
214
248
  assert migrations.all? { |m| !m.went_down }
215
- assert_equal 2, ActiveRecord::Migrator.current_version
249
+ assert_equal 2, migrator.current_version
216
250
  end
217
251
 
218
252
  def test_down_calls_down
219
253
  test_up_calls_up
220
254
 
221
255
  migrations = [Sensor.new(nil, 0), Sensor.new(nil, 1), Sensor.new(nil, 2)]
222
- ActiveRecord::Migrator.new(:down, migrations).migrate
256
+ migrator = ActiveRecord::Migrator.new(:down, migrations, @schema_migration)
257
+ migrator.migrate
223
258
  assert migrations.all? { |m| !m.went_up }
224
259
  assert migrations.all?(&:went_down)
225
- assert_equal 0, ActiveRecord::Migrator.current_version
260
+ assert_equal 0, migrator.current_version
226
261
  end
227
262
 
228
263
  def test_current_version
229
- ActiveRecord::SchemaMigration.create!(:version => '1000')
230
- assert_equal 1000, ActiveRecord::Migrator.current_version
264
+ @schema_migration.create!(version: "1000")
265
+ schema_migration = ActiveRecord::Base.connection.schema_migration
266
+ migrator = ActiveRecord::MigrationContext.new("db/migrate", schema_migration)
267
+ assert_equal 1000, migrator.current_version
231
268
  end
232
269
 
233
270
  def test_migrator_one_up
234
271
  calls, migrations = sensors(3)
235
272
 
236
- ActiveRecord::Migrator.new(:up, migrations, 1).migrate
273
+ ActiveRecord::Migrator.new(:up, migrations, @schema_migration, 1).migrate
237
274
  assert_equal [[:up, 1]], calls
238
275
  calls.clear
239
276
 
240
- ActiveRecord::Migrator.new(:up, migrations, 2).migrate
277
+ ActiveRecord::Migrator.new(:up, migrations, @schema_migration, 2).migrate
241
278
  assert_equal [[:up, 2]], calls
242
279
  end
243
280
 
244
281
  def test_migrator_one_down
245
282
  calls, migrations = sensors(3)
246
283
 
247
- ActiveRecord::Migrator.new(:up, migrations).migrate
284
+ ActiveRecord::Migrator.new(:up, migrations, @schema_migration).migrate
248
285
  assert_equal [[:up, 1], [:up, 2], [:up, 3]], calls
249
286
  calls.clear
250
287
 
251
- ActiveRecord::Migrator.new(:down, migrations, 1).migrate
288
+ ActiveRecord::Migrator.new(:down, migrations, @schema_migration, 1).migrate
252
289
 
253
290
  assert_equal [[:down, 3], [:down, 2]], calls
254
291
  end
@@ -256,55 +293,58 @@ class MigratorTest < ActiveRecord::TestCase
256
293
  def test_migrator_one_up_one_down
257
294
  calls, migrations = sensors(3)
258
295
 
259
- ActiveRecord::Migrator.new(:up, migrations, 1).migrate
296
+ ActiveRecord::Migrator.new(:up, migrations, @schema_migration, 1).migrate
260
297
  assert_equal [[:up, 1]], calls
261
298
  calls.clear
262
299
 
263
- ActiveRecord::Migrator.new(:down, migrations, 0).migrate
300
+ ActiveRecord::Migrator.new(:down, migrations, @schema_migration, 0).migrate
264
301
  assert_equal [[:down, 1]], calls
265
302
  end
266
303
 
267
304
  def test_migrator_double_up
268
305
  calls, migrations = sensors(3)
269
- assert_equal(0, ActiveRecord::Migrator.current_version)
306
+ migrator = ActiveRecord::Migrator.new(:up, migrations, @schema_migration, 1)
307
+ assert_equal(0, migrator.current_version)
270
308
 
271
- ActiveRecord::Migrator.new(:up, migrations, 1).migrate
309
+ migrator.migrate
272
310
  assert_equal [[:up, 1]], calls
273
311
  calls.clear
274
312
 
275
- ActiveRecord::Migrator.new(:up, migrations, 1).migrate
313
+ migrator.migrate
276
314
  assert_equal [], calls
277
315
  end
278
316
 
279
317
  def test_migrator_double_down
280
318
  calls, migrations = sensors(3)
319
+ migrator = ActiveRecord::Migrator.new(:up, migrations, @schema_migration, 1)
281
320
 
282
- assert_equal(0, ActiveRecord::Migrator.current_version)
321
+ assert_equal 0, migrator.current_version
283
322
 
284
- ActiveRecord::Migrator.new(:up, migrations, 1).run
323
+ migrator.run
285
324
  assert_equal [[:up, 1]], calls
286
325
  calls.clear
287
326
 
288
- ActiveRecord::Migrator.new(:down, migrations, 1).run
327
+ migrator = ActiveRecord::Migrator.new(:down, migrations, @schema_migration, 1)
328
+ migrator.run
289
329
  assert_equal [[:down, 1]], calls
290
330
  calls.clear
291
331
 
292
- ActiveRecord::Migrator.new(:down, migrations, 1).run
332
+ migrator.run
293
333
  assert_equal [], calls
294
334
 
295
- assert_equal(0, ActiveRecord::Migrator.current_version)
335
+ assert_equal 0, migrator.current_version
296
336
  end
297
337
 
298
338
  def test_migrator_verbosity
299
339
  _, migrations = sensors(3)
300
340
 
301
341
  ActiveRecord::Migration.verbose = true
302
- ActiveRecord::Migrator.new(:up, migrations, 1).migrate
342
+ ActiveRecord::Migrator.new(:up, migrations, @schema_migration, 1).migrate
303
343
  assert_not_equal 0, ActiveRecord::Migration.message_count
304
344
 
305
345
  ActiveRecord::Migration.message_count = 0
306
346
 
307
- ActiveRecord::Migrator.new(:down, migrations, 0).migrate
347
+ ActiveRecord::Migrator.new(:down, migrations, @schema_migration, 0).migrate
308
348
  assert_not_equal 0, ActiveRecord::Migration.message_count
309
349
  end
310
350
 
@@ -312,9 +352,9 @@ class MigratorTest < ActiveRecord::TestCase
312
352
  _, migrations = sensors(3)
313
353
 
314
354
  ActiveRecord::Migration.verbose = false
315
- ActiveRecord::Migrator.new(:up, migrations, 1).migrate
355
+ ActiveRecord::Migrator.new(:up, migrations, @schema_migration, 1).migrate
316
356
  assert_equal 0, ActiveRecord::Migration.message_count
317
- ActiveRecord::Migrator.new(:down, migrations, 0).migrate
357
+ ActiveRecord::Migrator.new(:down, migrations, @schema_migration, 0).migrate
318
358
  assert_equal 0, ActiveRecord::Migration.message_count
319
359
  end
320
360
 
@@ -322,150 +362,166 @@ class MigratorTest < ActiveRecord::TestCase
322
362
  calls, migrations = sensors(3)
323
363
 
324
364
  # migrate up to 1
325
- ActiveRecord::Migrator.new(:up, migrations, 1).migrate
365
+ ActiveRecord::Migrator.new(:up, migrations, @schema_migration, 1).migrate
326
366
  assert_equal [[:up, 1]], calls
327
367
  calls.clear
328
368
 
329
369
  # migrate down to 0
330
- ActiveRecord::Migrator.new(:down, migrations, 0).migrate
370
+ ActiveRecord::Migrator.new(:down, migrations, @schema_migration, 0).migrate
331
371
  assert_equal [[:down, 1]], calls
332
372
  calls.clear
333
373
 
334
374
  # migrate down to 0 again
335
- ActiveRecord::Migrator.new(:down, migrations, 0).migrate
375
+ ActiveRecord::Migrator.new(:down, migrations, @schema_migration, 0).migrate
336
376
  assert_equal [], calls
337
377
  end
338
378
 
339
379
  def test_migrator_going_down_due_to_version_target
380
+ schema_migration = ActiveRecord::Base.connection.schema_migration
340
381
  calls, migrator = migrator_class(3)
382
+ migrator = migrator.new("valid", schema_migration)
341
383
 
342
- migrator.up("valid", 1)
384
+ migrator.up(1)
343
385
  assert_equal [[:up, 1]], calls
344
386
  calls.clear
345
387
 
346
- migrator.migrate("valid", 0)
388
+ migrator.migrate(0)
347
389
  assert_equal [[:down, 1]], calls
348
390
  calls.clear
349
391
 
350
- migrator.migrate("valid")
392
+ migrator.migrate
351
393
  assert_equal [[:up, 1], [:up, 2], [:up, 3]], calls
352
394
  end
353
395
 
354
396
  def test_migrator_output_when_running_multiple_migrations
397
+ schema_migration = ActiveRecord::Base.connection.schema_migration
355
398
  _, migrator = migrator_class(3)
399
+ migrator = migrator.new("valid", schema_migration)
356
400
 
357
- result = migrator.migrate("valid")
401
+ result = migrator.migrate
358
402
  assert_equal(3, result.count)
359
403
 
360
404
  # Nothing migrated from duplicate run
361
- result = migrator.migrate("valid")
405
+ result = migrator.migrate
362
406
  assert_equal(0, result.count)
363
407
 
364
- result = migrator.rollback("valid")
408
+ result = migrator.rollback
365
409
  assert_equal(1, result.count)
366
410
  end
367
411
 
368
412
  def test_migrator_output_when_running_single_migration
413
+ schema_migration = ActiveRecord::Base.connection.schema_migration
369
414
  _, migrator = migrator_class(1)
370
- result = migrator.run(:up, "valid", 1)
415
+ migrator = migrator.new("valid", schema_migration)
416
+
417
+ result = migrator.run(:up, 1)
371
418
 
372
419
  assert_equal(1, result.version)
373
420
  end
374
421
 
375
422
  def test_migrator_rollback
423
+ schema_migration = ActiveRecord::Base.connection.schema_migration
376
424
  _, migrator = migrator_class(3)
425
+ migrator = migrator.new("valid", schema_migration)
377
426
 
378
- migrator.migrate("valid")
379
- assert_equal(3, ActiveRecord::Migrator.current_version)
427
+ migrator.migrate
428
+ assert_equal(3, migrator.current_version)
380
429
 
381
- migrator.rollback("valid")
382
- assert_equal(2, ActiveRecord::Migrator.current_version)
430
+ migrator.rollback
431
+ assert_equal(2, migrator.current_version)
383
432
 
384
- migrator.rollback("valid")
385
- assert_equal(1, ActiveRecord::Migrator.current_version)
433
+ migrator.rollback
434
+ assert_equal(1, migrator.current_version)
386
435
 
387
- migrator.rollback("valid")
388
- assert_equal(0, ActiveRecord::Migrator.current_version)
436
+ migrator.rollback
437
+ assert_equal(0, migrator.current_version)
389
438
 
390
- migrator.rollback("valid")
391
- assert_equal(0, ActiveRecord::Migrator.current_version)
439
+ migrator.rollback
440
+ assert_equal(0, migrator.current_version)
392
441
  end
393
442
 
394
443
  def test_migrator_db_has_no_schema_migrations_table
444
+ schema_migration = ActiveRecord::Base.connection.schema_migration
395
445
  _, migrator = migrator_class(3)
446
+ migrator = migrator.new("valid", schema_migration)
396
447
 
397
- ActiveRecord::Base.connection.drop_table "schema_migrations"
398
- #, if_exists: true
399
- ActiveSupport::Deprecation.silence { assert_not ActiveRecord::Base.connection.table_exists?('schema_migrations') }
400
- migrator.migrate("valid", 1)
401
- ActiveSupport::Deprecation.silence { assert ActiveRecord::Base.connection.table_exists?('schema_migrations') }
448
+ ActiveRecord::SchemaMigration.drop_table
449
+ assert_not_predicate ActiveRecord::SchemaMigration, :table_exists?
450
+ migrator.migrate(1)
451
+ assert_predicate ActiveRecord::SchemaMigration, :table_exists?
402
452
  end
403
453
 
404
454
  def test_migrator_forward
455
+ schema_migration = ActiveRecord::Base.connection.schema_migration
405
456
  _, migrator = migrator_class(3)
406
- migrator.migrate("/valid", 1)
407
- assert_equal(1, ActiveRecord::Migrator.current_version)
457
+ migrator = migrator.new("/valid", schema_migration)
458
+ migrator.migrate(1)
459
+ assert_equal(1, migrator.current_version)
408
460
 
409
- migrator.forward("/valid", 2)
410
- assert_equal(3, ActiveRecord::Migrator.current_version)
461
+ migrator.forward(2)
462
+ assert_equal(3, migrator.current_version)
411
463
 
412
- migrator.forward("/valid")
413
- assert_equal(3, ActiveRecord::Migrator.current_version)
464
+ migrator.forward
465
+ assert_equal(3, migrator.current_version)
414
466
  end
415
467
 
416
468
  def test_only_loads_pending_migrations
417
469
  # migrate up to 1
418
- ActiveRecord::SchemaMigration.create!(:version => '1')
470
+ @schema_migration.create!(version: "1")
419
471
 
472
+ schema_migration = ActiveRecord::Base.connection.schema_migration
420
473
  calls, migrator = migrator_class(3)
421
- migrator.migrate("valid", nil)
474
+ migrator = migrator.new("valid", schema_migration)
475
+ migrator.migrate
422
476
 
423
477
  assert_equal [[:up, 2], [:up, 3]], calls
424
478
  end
425
479
 
426
480
  def test_get_all_versions
481
+ schema_migration = ActiveRecord::Base.connection.schema_migration
427
482
  _, migrator = migrator_class(3)
483
+ migrator = migrator.new("valid", schema_migration)
428
484
 
429
- migrator.migrate("valid")
430
- assert_equal([1,2,3], ActiveRecord::Migrator.get_all_versions)
485
+ migrator.migrate
486
+ assert_equal([1, 2, 3], migrator.get_all_versions)
431
487
 
432
- migrator.rollback("valid")
433
- assert_equal([1,2], ActiveRecord::Migrator.get_all_versions)
488
+ migrator.rollback
489
+ assert_equal([1, 2], migrator.get_all_versions)
434
490
 
435
- migrator.rollback("valid")
436
- assert_equal([1], ActiveRecord::Migrator.get_all_versions)
491
+ migrator.rollback
492
+ assert_equal([1], migrator.get_all_versions)
437
493
 
438
- migrator.rollback("valid")
439
- assert_equal([], ActiveRecord::Migrator.get_all_versions)
494
+ migrator.rollback
495
+ assert_equal([], migrator.get_all_versions)
440
496
  end
441
497
 
442
498
  private
443
- def m(name, version)
444
- x = Sensor.new name, version
445
- x.extend(Module.new {
446
- define_method(:up) { yield(:up, x); super() }
447
- define_method(:down) { yield(:down, x); super() }
448
- }) if block_given?
449
- end
450
-
451
- def sensors(count)
452
- calls = []
453
- migrations = count.times.map { |i|
454
- m(nil, i + 1) { |c,migration|
455
- calls << [c, migration.version]
499
+ def m(name, version)
500
+ x = Sensor.new name, version
501
+ x.extend(Module.new {
502
+ define_method(:up) { yield(:up, x); super() }
503
+ define_method(:down) { yield(:down, x); super() }
504
+ }) if block_given?
505
+ end
506
+
507
+ def sensors(count)
508
+ calls = []
509
+ migrations = count.times.map { |i|
510
+ m(nil, i + 1) { |c, migration|
511
+ calls << [c, migration.version]
512
+ }
456
513
  }
457
- }
458
- [calls, migrations]
459
- end
514
+ [calls, migrations]
515
+ end
460
516
 
461
- def migrator_class(count)
462
- calls, migrations = sensors(count)
517
+ def migrator_class(count)
518
+ calls, migrations = sensors(count)
463
519
 
464
- migrator = Class.new(ActiveRecord::Migrator).extend(Module.new {
465
- define_method(:migrations) { |paths|
466
- migrations
520
+ migrator = Class.new(ActiveRecord::MigrationContext) {
521
+ define_method(:migrations) { |*|
522
+ migrations
523
+ }
467
524
  }
468
- })
469
- [calls, migrator]
470
- end
525
+ [calls, migrator]
526
+ end
471
527
  end