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,4 +1,7 @@
1
- require 'cases/helper'
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "support/schema_dumping_helper"
2
5
 
3
6
  module ActiveRecord
4
7
  class Migration
@@ -9,12 +12,13 @@ module ActiveRecord
9
12
  def setup
10
13
  super
11
14
  @connection = ActiveRecord::Base.connection
15
+ @schema_migration = @connection.schema_migration
12
16
  @verbose_was = ActiveRecord::Migration.verbose
13
17
  ActiveRecord::Migration.verbose = false
14
18
 
15
19
  connection.create_table :testings do |t|
16
- t.column :foo, :string, :limit => 100
17
- t.column :bar, :string, :limit => 100
20
+ t.column :foo, :string, limit: 5
21
+ t.column :bar, :string, limit: 100
18
22
  end
19
23
  end
20
24
 
@@ -25,7 +29,7 @@ module ActiveRecord
25
29
  end
26
30
 
27
31
  def test_migration_doesnt_remove_named_index
28
- connection.add_index :testings, :foo, :name => "custom_index_name"
32
+ connection.add_index :testings, :foo, name: "custom_index_name"
29
33
 
30
34
  migration = Class.new(ActiveRecord::Migration[4.2]) {
31
35
  def version; 101 end
@@ -35,7 +39,7 @@ module ActiveRecord
35
39
  }.new
36
40
 
37
41
  assert connection.index_exists?(:testings, :foo, name: "custom_index_name")
38
- assert_raise(StandardError) { ActiveRecord::Migrator.new(:up, [migration]).migrate }
42
+ assert_raise(StandardError) { ActiveRecord::Migrator.new(:up, [migration], @schema_migration).migrate }
39
43
  assert connection.index_exists?(:testings, :foo, name: "custom_index_name")
40
44
  end
41
45
 
@@ -50,12 +54,12 @@ module ActiveRecord
50
54
  }.new
51
55
 
52
56
  assert connection.index_exists?(:testings, :bar)
53
- ActiveRecord::Migrator.new(:up, [migration]).migrate
57
+ ActiveRecord::Migrator.new(:up, [migration], @schema_migration).migrate
54
58
  assert_not connection.index_exists?(:testings, :bar)
55
59
  end
56
60
 
57
61
  def test_references_does_not_add_index_by_default
58
- migration = Class.new(ActiveRecord::Migration) {
62
+ migration = Class.new(ActiveRecord::Migration[4.2]) {
59
63
  def migrate(x)
60
64
  create_table :more_testings do |t|
61
65
  t.references :foo
@@ -64,7 +68,7 @@ module ActiveRecord
64
68
  end
65
69
  }.new
66
70
 
67
- ActiveRecord::Migrator.new(:up, [migration]).migrate
71
+ ActiveRecord::Migrator.new(:up, [migration], @schema_migration).migrate
68
72
 
69
73
  assert_not connection.index_exists?(:more_testings, :foo_id)
70
74
  assert_not connection.index_exists?(:more_testings, :bar_id)
@@ -73,7 +77,7 @@ module ActiveRecord
73
77
  end
74
78
 
75
79
  def test_timestamps_have_null_constraints_if_not_present_in_migration_of_create_table
76
- migration = Class.new(ActiveRecord::Migration) {
80
+ migration = Class.new(ActiveRecord::Migration[4.2]) {
77
81
  def migrate(x)
78
82
  create_table :more_testings do |t|
79
83
  t.timestamps
@@ -81,38 +85,589 @@ module ActiveRecord
81
85
  end
82
86
  }.new
83
87
 
84
- ActiveRecord::Migrator.new(:up, [migration]).migrate
88
+ ActiveRecord::Migrator.new(:up, [migration], @schema_migration).migrate
85
89
 
86
- assert connection.columns(:more_testings).find { |c| c.name == 'created_at' }.null
87
- assert connection.columns(:more_testings).find { |c| c.name == 'updated_at' }.null
90
+ assert connection.column_exists?(:more_testings, :created_at, null: true)
91
+ assert connection.column_exists?(:more_testings, :updated_at, null: true)
88
92
  ensure
89
93
  connection.drop_table :more_testings rescue nil
90
94
  end
91
95
 
96
+ def test_timestamps_have_null_constraints_if_not_present_in_migration_of_change_table
97
+ migration = Class.new(ActiveRecord::Migration[4.2]) {
98
+ def migrate(x)
99
+ change_table :testings do |t|
100
+ t.timestamps
101
+ end
102
+ end
103
+ }.new
104
+
105
+ ActiveRecord::Migrator.new(:up, [migration], @schema_migration).migrate
106
+
107
+ assert connection.column_exists?(:testings, :created_at, null: true)
108
+ assert connection.column_exists?(:testings, :updated_at, null: true)
109
+ end
110
+
111
+ if ActiveRecord::Base.connection.supports_bulk_alter?
112
+ def test_timestamps_have_null_constraints_if_not_present_in_migration_of_change_table_with_bulk
113
+ migration = Class.new(ActiveRecord::Migration[4.2]) {
114
+ def migrate(x)
115
+ change_table :testings, bulk: true do |t|
116
+ t.timestamps
117
+ end
118
+ end
119
+ }.new
120
+
121
+ ActiveRecord::Migrator.new(:up, [migration], @schema_migration).migrate
122
+
123
+ assert connection.column_exists?(:testings, :created_at, null: true)
124
+ assert connection.column_exists?(:testings, :updated_at, null: true)
125
+ end
126
+ end
127
+
92
128
  def test_timestamps_have_null_constraints_if_not_present_in_migration_for_adding_timestamps_to_existing_table
93
- migration = Class.new(ActiveRecord::Migration) {
129
+ migration = Class.new(ActiveRecord::Migration[4.2]) {
94
130
  def migrate(x)
95
131
  add_timestamps :testings
96
132
  end
97
133
  }.new
98
134
 
99
- ActiveRecord::Migrator.new(:up, [migration]).migrate
135
+ ActiveRecord::Migrator.new(:up, [migration], @schema_migration).migrate
136
+
137
+ assert connection.column_exists?(:testings, :created_at, null: true)
138
+ assert connection.column_exists?(:testings, :updated_at, null: true)
139
+ end
140
+
141
+ def test_timestamps_doesnt_set_precision_on_create_table
142
+ migration = Class.new(ActiveRecord::Migration[5.2]) {
143
+ def migrate(x)
144
+ create_table :more_testings do |t|
145
+ t.timestamps
146
+ end
147
+ end
148
+ }.new
149
+
150
+ ActiveRecord::Migrator.new(:up, [migration], @schema_migration).migrate
151
+
152
+ assert connection.column_exists?(:more_testings, :created_at, null: false, **precision_implicit_default)
153
+ assert connection.column_exists?(:more_testings, :updated_at, null: false, **precision_implicit_default)
154
+ ensure
155
+ connection.drop_table :more_testings rescue nil
156
+ end
157
+
158
+ def test_timestamps_doesnt_set_precision_on_change_table
159
+ migration = Class.new(ActiveRecord::Migration[5.2]) {
160
+ def migrate(x)
161
+ change_table :testings do |t|
162
+ t.timestamps default: Time.now
163
+ end
164
+ end
165
+ }.new
166
+
167
+ ActiveRecord::Migrator.new(:up, [migration], @schema_migration).migrate
168
+
169
+ assert connection.column_exists?(:testings, :created_at, null: false, **precision_implicit_default)
170
+ assert connection.column_exists?(:testings, :updated_at, null: false, **precision_implicit_default)
171
+ end
172
+
173
+ if ActiveRecord::Base.connection.supports_bulk_alter?
174
+ def test_timestamps_doesnt_set_precision_on_change_table_with_bulk
175
+ migration = Class.new(ActiveRecord::Migration[5.2]) {
176
+ def migrate(x)
177
+ change_table :testings, bulk: true do |t|
178
+ t.timestamps
179
+ end
180
+ end
181
+ }.new
182
+
183
+ ActiveRecord::Migrator.new(:up, [migration], @schema_migration).migrate
184
+
185
+ assert connection.column_exists?(:testings, :created_at, null: false, **precision_implicit_default)
186
+ assert connection.column_exists?(:testings, :updated_at, null: false, **precision_implicit_default)
187
+ end
188
+ end
189
+
190
+ def test_timestamps_doesnt_set_precision_on_add_timestamps
191
+ migration = Class.new(ActiveRecord::Migration[5.2]) {
192
+ def migrate(x)
193
+ add_timestamps :testings, default: Time.now
194
+ end
195
+ }.new
196
+
197
+ ActiveRecord::Migrator.new(:up, [migration], @schema_migration).migrate
198
+
199
+ assert connection.column_exists?(:testings, :created_at, null: false, **precision_implicit_default)
200
+ assert connection.column_exists?(:testings, :updated_at, null: false, **precision_implicit_default)
201
+ end
202
+
203
+ def test_legacy_migrations_raises_exception_when_inherited
204
+ e = assert_raises(StandardError) do
205
+ class_eval("class LegacyMigration < ActiveRecord::Migration; end")
206
+ end
207
+ assert_match(/LegacyMigration < ActiveRecord::Migration\[4\.2\]/, e.message)
208
+ end
209
+
210
+ def test_legacy_migrations_not_raise_exception_on_reverting_transaction
211
+ migration = Class.new(ActiveRecord::Migration[5.2]) {
212
+ def change
213
+ transaction do
214
+ execute "select 1 from SYSIBM.DUAL"
215
+ end
216
+ end
217
+ }.new
218
+
219
+ assert_nothing_raised do
220
+ migration.migrate(:down)
221
+ end
222
+ end
223
+
224
+ if ActiveRecord::Base.connection.supports_comments?
225
+ def test_change_column_comment_can_be_reverted
226
+ migration = Class.new(ActiveRecord::Migration[5.2]) {
227
+ def migrate(x)
228
+ revert do
229
+ change_column_comment(:testings, :foo, "comment")
230
+ end
231
+ end
232
+ }.new
233
+
234
+ ActiveRecord::Migrator.new(:up, [migration], @schema_migration).migrate
235
+ assert connection.column_exists?(:testings, :foo, comment: "comment")
236
+ end
237
+
238
+ def test_change_table_comment_can_be_reverted
239
+ migration = Class.new(ActiveRecord::Migration[5.2]) {
240
+ def migrate(x)
241
+ revert do
242
+ change_table_comment(:testings, "comment")
243
+ end
244
+ end
245
+ }.new
246
+
247
+ ActiveRecord::Migrator.new(:up, [migration], @schema_migration).migrate
100
248
 
101
- assert connection.columns(:testings).find { |c| c.name == 'created_at' }.null
102
- assert connection.columns(:testings).find { |c| c.name == 'updated_at' }.null
249
+ assert_equal "comment", connection.table_comment("testings")
250
+ end
251
+ end
252
+
253
+ if current_adapter?(:PostgreSQLAdapter)
254
+ class Testing < ActiveRecord::Base
255
+ end
256
+
257
+ def test_legacy_change_column_with_null_executes_update
258
+ migration = Class.new(ActiveRecord::Migration[5.1]) {
259
+ def migrate(x)
260
+ change_column :testings, :foo, :string, limit: 10, null: false, default: "foobar"
261
+ end
262
+ }.new
263
+
264
+ Testing.create!
265
+ ActiveRecord::Migrator.new(:up, [migration], @schema_migration).migrate
266
+ assert_equal ["foobar"], Testing.all.map(&:foo)
267
+ ensure
268
+ ActiveRecord::Base.clear_cache!
269
+ end
103
270
  end
104
271
 
105
- def test_legacy_migrations_get_deprecation_warning_when_run
106
- migration = Class.new(ActiveRecord::Migration) {
107
- def up
108
- add_column :testings, :baz, :string
272
+ if current_adapter?(:SQLite3Adapter)
273
+ def test_references_stays_as_integer_column_on_create_table_with_reference_6_0
274
+ migration = Class.new(ActiveRecord::Migration[6.0]) {
275
+ def migrate(x)
276
+ create_table :more_testings do |t|
277
+ t.references :testings
278
+ end
279
+ end
280
+ }.new
281
+
282
+ ActiveRecord::Migrator.new(:up, [migration], @schema_migration).migrate
283
+
284
+ testings_id_column = connection.columns(:more_testings).find { |el| el.name == "testings_id" }
285
+ assert_equal "integer", testings_id_column.sql_type
286
+ ensure
287
+ connection.drop_table :more_testings rescue nil
288
+ end
289
+
290
+ def test_references_stays_as_integer_column_on_add_reference_6_0
291
+ create_migration = Class.new(ActiveRecord::Migration[6.0]) {
292
+ def version; 100 end
293
+ def migrate(x)
294
+ create_table :more_testings do |t|
295
+ t.string :test
296
+ end
297
+ end
298
+ }.new
299
+
300
+ migration = Class.new(ActiveRecord::Migration[6.0]) {
301
+ def version; 101 end
302
+ def migrate(x)
303
+ add_reference :more_testings, :testings
304
+ end
305
+ }.new
306
+
307
+ ActiveRecord::Migrator.new(:up, [create_migration, migration], @schema_migration).migrate
308
+
309
+ testings_id_column = connection.columns(:more_testings).find { |el| el.name == "testings_id" }
310
+ assert_equal "integer", testings_id_column.sql_type
311
+ ensure
312
+ connection.drop_table :more_testings rescue nil
313
+ end
314
+ end
315
+
316
+ private
317
+ def precision_implicit_default
318
+ if current_adapter?(:Mysql2Adapter)
319
+ { precision: 0 }
320
+ elsif current_adapter?(:IBM_DBAdapter)
321
+ { precision: 6 }
322
+ else
323
+ { precision: nil }
109
324
  end
110
- }
325
+ end
326
+ end
327
+ end
328
+ end
329
+
330
+ module LegacyPolymorphicReferenceIndexTestCases
331
+ attr_reader :connection
332
+
333
+ def setup
334
+ @connection = ActiveRecord::Base.connection
335
+ @schema_migration = @connection.schema_migration
336
+ @verbose_was = ActiveRecord::Migration.verbose
337
+ ActiveRecord::Migration.verbose = false
338
+
339
+ connection.create_table :testings, if_not_exists: true
340
+ end
341
+
342
+ def teardown
343
+ ActiveRecord::Migration.verbose = @verbose_was
344
+ ActiveRecord::SchemaMigration.delete_all rescue nil
345
+ connection.drop_table :testings rescue nil
346
+ end
347
+
348
+ def test_create_table_with_polymorphic_reference_uses_all_column_names_in_index
349
+ migration = Class.new(migration_class) {
350
+ def migrate(x)
351
+ create_table :more_testings do |t|
352
+ t.references :widget, polymorphic: true, index: true
353
+ t.belongs_to :gizmo, polymorphic: true, index: true
354
+ end
355
+ end
356
+ }.new
357
+
358
+ ActiveRecord::Migrator.new(:up, [migration], @schema_migration).migrate
359
+
360
+ assert connection.index_exists?(:more_testings, [:widget_type, :widget_id], name: :index_more_testings_on_widget_type_and_widget_id)
361
+ assert connection.index_exists?(:more_testings, [:gizmo_type, :gizmo_id], name: :index_more_testings_on_gizmo_type_and_gizmo_id)
362
+ ensure
363
+ connection.drop_table :more_testings rescue nil
364
+ end
365
+
366
+ def test_change_table_with_polymorphic_reference_uses_all_column_names_in_index
367
+ migration = Class.new(migration_class) {
368
+ def migrate(x)
369
+ change_table :testings do |t|
370
+ t.references :widget, polymorphic: true, index: true
371
+ t.belongs_to :gizmo, polymorphic: true, index: true
372
+ end
373
+ end
374
+ }.new
375
+
376
+ ActiveRecord::Migrator.new(:up, [migration], @schema_migration).migrate
377
+
378
+ assert connection.index_exists?(:testings, [:widget_type, :widget_id], name: :index_testings_on_widget_type_and_widget_id)
379
+ assert connection.index_exists?(:testings, [:gizmo_type, :gizmo_id], name: :index_testings_on_gizmo_type_and_gizmo_id)
380
+ end
381
+
382
+ def test_create_join_table_with_polymorphic_reference_uses_all_column_names_in_index
383
+ migration = Class.new(migration_class) {
384
+ def migrate(x)
385
+ create_join_table :more, :testings do |t|
386
+ t.references :widget, polymorphic: true, index: true
387
+ t.belongs_to :gizmo, polymorphic: true, index: true
388
+ end
389
+ end
390
+ }.new
391
+
392
+ ActiveRecord::Migrator.new(:up, [migration], @schema_migration).migrate
393
+
394
+ assert connection.index_exists?(:more_testings, [:widget_type, :widget_id], name: :index_more_testings_on_widget_type_and_widget_id)
395
+ assert connection.index_exists?(:more_testings, [:gizmo_type, :gizmo_id], name: :index_more_testings_on_gizmo_type_and_gizmo_id)
396
+ ensure
397
+ connection.drop_table :more_testings rescue nil
398
+ end
399
+
400
+ def test_polymorphic_add_reference_uses_all_column_names_in_index
401
+ migration = Class.new(migration_class) {
402
+ def migrate(x)
403
+ add_reference :testings, :widget, polymorphic: true, index: true
404
+ add_belongs_to :testings, :gizmo, polymorphic: true, index: true
405
+ end
406
+ }.new
407
+
408
+ ActiveRecord::Migrator.new(:up, [migration], @schema_migration).migrate
409
+
410
+ assert connection.index_exists?(:testings, [:widget_type, :widget_id], name: :index_testings_on_widget_type_and_widget_id)
411
+ assert connection.index_exists?(:testings, [:gizmo_type, :gizmo_id], name: :index_testings_on_gizmo_type_and_gizmo_id)
412
+ end
413
+ end
414
+
415
+ module LegacyPolymorphicReferenceIndexTest
416
+ class V6_0 < ActiveRecord::TestCase
417
+ include LegacyPolymorphicReferenceIndexTestCases
418
+
419
+ self.use_transactional_tests = false
420
+
421
+ private
422
+ def migration_class
423
+ ActiveRecord::Migration[6.0]
424
+ end
425
+ end
426
+
427
+ class V5_2 < V6_0
428
+ private
429
+ def migration_class
430
+ ActiveRecord::Migration[5.2]
431
+ end
432
+ end
433
+
434
+ class V5_1 < V6_0
435
+ private
436
+ def migration_class
437
+ ActiveRecord::Migration[5.1]
438
+ end
439
+ end
440
+
441
+ class V5_0 < V6_0
442
+ private
443
+ def migration_class
444
+ ActiveRecord::Migration[5.0]
445
+ end
446
+ end
447
+
448
+ class V4_2 < V6_0
449
+ private
450
+ def migration_class
451
+ ActiveRecord::Migration[4.2]
452
+ end
453
+ end
454
+ end
455
+
456
+ module LegacyPrimaryKeyTestCases
457
+ include SchemaDumpingHelper
458
+
459
+ class LegacyPrimaryKey < ActiveRecord::Base
460
+ end
461
+
462
+ def setup
463
+ @migration = nil
464
+ @verbose_was = ActiveRecord::Migration.verbose
465
+ ActiveRecord::Migration.verbose = false
466
+ end
467
+
468
+ def teardown
469
+ @migration.migrate(:down) if @migration
470
+ ActiveRecord::Migration.verbose = @verbose_was
471
+ ActiveRecord::SchemaMigration.delete_all rescue nil
472
+ LegacyPrimaryKey.reset_column_information
473
+ end
474
+
475
+ def test_legacy_primary_key_should_be_auto_incremented
476
+ @migration = Class.new(migration_class) {
477
+ def change
478
+ create_table :legacy_primary_keys do |t|
479
+ t.references :legacy_ref
480
+ end
481
+ end
482
+ }.new
483
+
484
+ @migration.migrate(:up)
485
+
486
+ assert_legacy_primary_key
487
+
488
+ legacy_ref = LegacyPrimaryKey.columns_hash["legacy_ref_id"]
489
+ assert_not_predicate legacy_ref, :bigint?
490
+
491
+ record1 = LegacyPrimaryKey.create!
492
+ assert_not_nil record1.id
493
+
494
+ record1.destroy
495
+
496
+ record2 = LegacyPrimaryKey.create!
497
+ assert_not_nil record2.id
498
+ assert_operator record2.id, :>, record1.id
499
+ end
500
+
501
+ def test_legacy_integer_primary_key_should_not_be_auto_incremented
502
+ skip if current_adapter?(:SQLite3Adapter, :IBM_DBAdapter)
503
+
504
+ @migration = Class.new(migration_class) {
505
+ def change
506
+ create_table :legacy_primary_keys, id: :integer do |t|
507
+ end
508
+ end
509
+ }.new
510
+
511
+ @migration.migrate(:up)
512
+
513
+ assert_raises(ActiveRecord::NotNullViolation) do
514
+ LegacyPrimaryKey.create!
515
+ end
516
+
517
+ schema = dump_table_schema "legacy_primary_keys"
518
+ assert_match %r{create_table "legacy_primary_keys", id: :integer, default: nil}, schema
519
+ end
111
520
 
112
- assert_deprecated do
113
- migration.migrate :up
521
+ def test_legacy_primary_key_in_create_table_should_be_integer
522
+ @migration = Class.new(migration_class) {
523
+ def change
524
+ create_table :legacy_primary_keys, id: false do |t|
525
+ t.primary_key :id
114
526
  end
115
527
  end
528
+ }.new
529
+
530
+ @migration.migrate(:up)
531
+
532
+ assert_legacy_primary_key
533
+ end
534
+
535
+ def test_legacy_primary_key_in_change_table_should_be_integer
536
+ @migration = Class.new(migration_class) {
537
+ def change
538
+ create_table :legacy_primary_keys, id: false do |t|
539
+ t.integer :dummy
540
+ end
541
+ change_table :legacy_primary_keys do |t|
542
+ t.primary_key :id
543
+ end
544
+ end
545
+ }.new
546
+
547
+ @migration.migrate(:up)
548
+
549
+ assert_legacy_primary_key
550
+ end
551
+
552
+ def test_add_column_with_legacy_primary_key_should_be_integer
553
+ @migration = Class.new(migration_class) {
554
+ def change
555
+ create_table :legacy_primary_keys, id: false do |t|
556
+ t.integer :dummy
557
+ end
558
+ add_column :legacy_primary_keys, :id, :primary_key
559
+ end
560
+ }.new
561
+
562
+ @migration.migrate(:up)
563
+
564
+ assert_legacy_primary_key
565
+ end
566
+
567
+ def test_legacy_join_table_foreign_keys_should_be_integer
568
+ @migration = Class.new(migration_class) {
569
+ def change
570
+ create_join_table :apples, :bananas do |t|
571
+ end
572
+ end
573
+ }.new
574
+
575
+ @migration.migrate(:up)
576
+
577
+ schema = dump_table_schema "apples_bananas"
578
+ assert_match %r{integer "apple_id", null: false}, schema
579
+ assert_match %r{integer "banana_id", null: false}, schema
580
+ end
581
+
582
+ def test_legacy_join_table_column_options_should_be_overwritten
583
+ @migration = Class.new(migration_class) {
584
+ def change
585
+ create_join_table :apples, :bananas, column_options: { type: :bigint } do |t|
586
+ end
587
+ end
588
+ }.new
589
+
590
+ @migration.migrate(:up)
591
+
592
+ schema = dump_table_schema "apples_bananas"
593
+ assert_match %r{bigint "apple_id", null: false}, schema
594
+ assert_match %r{bigint "banana_id", null: false}, schema
595
+ end
596
+
597
+ if current_adapter?(:Mysql2Adapter)
598
+ def test_legacy_bigint_primary_key_should_be_auto_incremented
599
+ @migration = Class.new(migration_class) {
600
+ def change
601
+ create_table :legacy_primary_keys, id: :bigint
602
+ end
603
+ }.new
604
+
605
+ @migration.migrate(:up)
606
+
607
+ legacy_pk = LegacyPrimaryKey.columns_hash["id"]
608
+ assert_predicate legacy_pk, :bigint?
609
+ assert_predicate legacy_pk, :auto_increment?
610
+
611
+ schema = dump_table_schema "legacy_primary_keys"
612
+ assert_match %r{create_table "legacy_primary_keys", (?!id: :bigint, default: nil)}, schema
613
+ end
614
+ else
615
+ def test_legacy_bigint_primary_key_should_not_be_auto_incremented
616
+ @migration = Class.new(migration_class) {
617
+ def change
618
+ create_table :legacy_primary_keys, id: :bigint do |t|
619
+ end
620
+ end
621
+ }.new
622
+
623
+ @migration.migrate(:up)
624
+
625
+ assert_raises(ActiveRecord::NotNullViolation) do
626
+ LegacyPrimaryKey.create!
627
+ end
628
+
629
+ schema = dump_table_schema "legacy_primary_keys"
630
+ assert_match %r{create_table "legacy_primary_keys", id: :bigint, default: nil}, schema
631
+ end
632
+ end
633
+
634
+ private
635
+ def assert_legacy_primary_key
636
+ assert_equal "id", LegacyPrimaryKey.primary_key
637
+
638
+ legacy_pk = LegacyPrimaryKey.columns_hash["id"]
639
+
640
+ assert_equal :integer, legacy_pk.type
641
+ assert_not_predicate legacy_pk, :bigint?
642
+ assert_not legacy_pk.null
643
+
644
+ if current_adapter?(:Mysql2Adapter, :PostgreSQLAdapter)
645
+ schema = dump_table_schema "legacy_primary_keys"
646
+ assert_match %r{create_table "legacy_primary_keys", id: :(?:integer|serial), (?!default: nil)}, schema
647
+ end
116
648
  end
649
+ end
650
+
651
+ module LegacyPrimaryKeyTest
652
+ class V5_0 < ActiveRecord::TestCase
653
+ include LegacyPrimaryKeyTestCases
654
+
655
+ self.use_transactional_tests = false
656
+
657
+ private
658
+ def migration_class
659
+ ActiveRecord::Migration[5.0]
660
+ end
661
+ end
662
+
663
+ class V4_2 < ActiveRecord::TestCase
664
+ include LegacyPrimaryKeyTestCases
665
+
666
+ self.use_transactional_tests = false
667
+
668
+ private
669
+ def migration_class
670
+ ActiveRecord::Migration[4.2]
671
+ end
117
672
  end
118
673
  end