ibm_db 5.2.0-x86-mingw32 → 5.3.2-x86-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (621) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +9 -0
  3. data/LICENSE +55 -18
  4. data/ext/Makefile +15 -13
  5. data/ext/ibm_db.c +62 -57
  6. data/ext/ibm_db.o +0 -0
  7. data/ext/ibm_db.so +0 -0
  8. data/ext/mkmf.log +26 -24
  9. data/ext/ruby_ibm_db_cli.c +1 -0
  10. data/ext/ruby_ibm_db_cli.o +0 -0
  11. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +1463 -1279
  12. data/lib/ibm_db.so +1 -0
  13. data/lib/mswin32/rb3x/i386/ruby30/ibm_db.so +0 -0
  14. data/test/active_record/connection_adapters/fake_adapter.rb +5 -2
  15. data/test/activejob/destroy_association_async_test.rb +305 -0
  16. data/test/activejob/destroy_async_job_not_present_test.rb +31 -0
  17. data/test/activejob/helper.rb +15 -0
  18. data/test/assets/schema_dump_5_1.yml +345 -0
  19. data/test/cases/adapter_prevent_writes_test.rb +334 -0
  20. data/test/cases/adapter_test.rb +432 -218
  21. data/test/cases/adapters/mysql2/active_schema_test.rb +85 -75
  22. data/test/cases/adapters/mysql2/auto_increment_test.rb +34 -0
  23. data/test/cases/adapters/mysql2/bind_parameter_test.rb +5 -3
  24. data/test/cases/adapters/mysql2/boolean_test.rb +6 -4
  25. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +26 -24
  26. data/test/cases/adapters/mysql2/charset_collation_test.rb +20 -17
  27. data/test/cases/adapters/mysql2/connection_test.rb +48 -50
  28. data/test/cases/adapters/mysql2/count_deleted_rows_with_lock_test.rb +28 -0
  29. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +23 -19
  30. data/test/cases/adapters/mysql2/enum_test.rb +32 -11
  31. data/test/cases/adapters/mysql2/explain_test.rb +13 -11
  32. data/test/cases/adapters/mysql2/json_test.rb +17 -188
  33. data/test/cases/adapters/mysql2/mysql2_adapter_prevent_writes_test.rb +208 -0
  34. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +183 -28
  35. data/test/cases/adapters/mysql2/nested_deadlock_test.rb +75 -0
  36. data/test/cases/adapters/mysql2/optimizer_hints_test.rb +69 -0
  37. data/test/cases/adapters/mysql2/schema_migrations_test.rb +26 -21
  38. data/test/cases/adapters/mysql2/schema_test.rb +24 -22
  39. data/test/cases/adapters/mysql2/set_test.rb +32 -0
  40. data/test/cases/adapters/mysql2/sp_test.rb +10 -8
  41. data/test/cases/adapters/mysql2/sql_types_test.rb +8 -6
  42. data/test/cases/adapters/mysql2/table_options_test.rb +93 -10
  43. data/test/cases/adapters/mysql2/transaction_test.rb +151 -0
  44. data/test/cases/adapters/mysql2/unsigned_type_test.rb +11 -9
  45. data/test/cases/adapters/mysql2/virtual_column_test.rb +66 -0
  46. data/test/cases/adapters/postgresql/active_schema_test.rb +40 -25
  47. data/test/cases/adapters/postgresql/array_test.rb +118 -63
  48. data/test/cases/adapters/postgresql/bit_string_test.rb +12 -10
  49. data/test/cases/adapters/postgresql/bytea_test.rb +26 -25
  50. data/test/cases/adapters/postgresql/case_insensitive_test.rb +10 -9
  51. data/test/cases/adapters/postgresql/change_schema_test.rb +7 -5
  52. data/test/cases/adapters/postgresql/cidr_test.rb +2 -0
  53. data/test/cases/adapters/postgresql/citext_test.rb +58 -58
  54. data/test/cases/adapters/postgresql/collation_test.rb +17 -15
  55. data/test/cases/adapters/postgresql/composite_test.rb +25 -23
  56. data/test/cases/adapters/postgresql/connection_test.rb +73 -85
  57. data/test/cases/adapters/postgresql/create_unlogged_tables_test.rb +74 -0
  58. data/test/cases/adapters/postgresql/datatype_test.rb +19 -22
  59. data/test/cases/adapters/postgresql/date_test.rb +42 -0
  60. data/test/cases/adapters/postgresql/domain_test.rb +9 -7
  61. data/test/cases/adapters/postgresql/enum_test.rb +12 -10
  62. data/test/cases/adapters/postgresql/explain_test.rb +10 -8
  63. data/test/cases/adapters/postgresql/extension_migration_test.rb +13 -12
  64. data/test/cases/adapters/postgresql/foreign_table_test.rb +109 -0
  65. data/test/cases/adapters/postgresql/full_text_test.rb +8 -6
  66. data/test/cases/adapters/postgresql/geometric_test.rb +57 -63
  67. data/test/cases/adapters/postgresql/hstore_test.rb +288 -280
  68. data/test/cases/adapters/postgresql/infinity_test.rb +54 -15
  69. data/test/cases/adapters/postgresql/integer_test.rb +2 -0
  70. data/test/cases/adapters/postgresql/interval_test.rb +99 -0
  71. data/test/cases/adapters/postgresql/json_test.rb +16 -201
  72. data/test/cases/adapters/postgresql/ltree_test.rb +14 -16
  73. data/test/cases/adapters/postgresql/money_test.rb +47 -16
  74. data/test/cases/adapters/postgresql/network_test.rb +36 -28
  75. data/test/cases/adapters/postgresql/numbers_test.rb +7 -5
  76. data/test/cases/adapters/postgresql/optimizer_hints_test.rb +71 -0
  77. data/test/cases/adapters/postgresql/partitions_test.rb +22 -0
  78. data/test/cases/adapters/postgresql/postgresql_adapter_prevent_writes_test.rb +205 -0
  79. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +178 -136
  80. data/test/cases/adapters/postgresql/prepared_statements_disabled_test.rb +27 -0
  81. data/test/cases/adapters/postgresql/quoting_test.rb +12 -6
  82. data/test/cases/adapters/postgresql/range_test.rb +406 -292
  83. data/test/cases/adapters/postgresql/referential_integrity_test.rb +16 -15
  84. data/test/cases/adapters/postgresql/rename_table_test.rb +9 -8
  85. data/test/cases/adapters/postgresql/schema_authorization_test.rb +14 -23
  86. data/test/cases/adapters/postgresql/schema_test.rb +207 -91
  87. data/test/cases/adapters/postgresql/serial_test.rb +9 -7
  88. data/test/cases/adapters/postgresql/statement_pool_test.rb +26 -6
  89. data/test/cases/adapters/postgresql/timestamp_test.rb +17 -15
  90. data/test/cases/adapters/postgresql/transaction_nested_test.rb +114 -0
  91. data/test/cases/adapters/postgresql/transaction_test.rb +189 -0
  92. data/test/cases/adapters/postgresql/type_lookup_test.rb +12 -10
  93. data/test/cases/adapters/postgresql/utils_test.rb +11 -9
  94. data/test/cases/adapters/postgresql/uuid_test.rb +226 -109
  95. data/test/cases/adapters/postgresql/xml_test.rb +10 -14
  96. data/test/cases/adapters/sqlite3/collation_test.rb +26 -15
  97. data/test/cases/adapters/sqlite3/copy_table_test.rb +31 -28
  98. data/test/cases/adapters/sqlite3/explain_test.rb +13 -11
  99. data/test/cases/adapters/sqlite3/json_test.rb +29 -0
  100. data/test/cases/adapters/sqlite3/quoting_test.rb +35 -57
  101. data/test/cases/adapters/sqlite3/sqlite3_adapter_prevent_writes_test.rb +186 -0
  102. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +318 -131
  103. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +11 -11
  104. data/test/cases/adapters/sqlite3/statement_pool_test.rb +7 -6
  105. data/test/cases/adapters/sqlite3/transaction_test.rb +123 -0
  106. data/test/cases/aggregations_test.rb +14 -12
  107. data/test/cases/annotate_test.rb +46 -0
  108. data/test/cases/ar_schema_test.rb +153 -86
  109. data/test/cases/arel/attributes/attribute_test.rb +1145 -0
  110. data/test/cases/arel/attributes/math_test.rb +83 -0
  111. data/test/cases/arel/attributes_test.rb +27 -0
  112. data/test/cases/arel/collectors/bind_test.rb +40 -0
  113. data/test/cases/arel/collectors/composite_test.rb +47 -0
  114. data/test/cases/arel/collectors/sql_string_test.rb +41 -0
  115. data/test/cases/arel/collectors/substitute_bind_collector_test.rb +48 -0
  116. data/test/cases/arel/crud_test.rb +65 -0
  117. data/test/cases/arel/delete_manager_test.rb +53 -0
  118. data/test/cases/arel/factory_methods_test.rb +46 -0
  119. data/test/cases/arel/helper.rb +45 -0
  120. data/test/cases/arel/insert_manager_test.rb +241 -0
  121. data/test/cases/arel/nodes/and_test.rb +30 -0
  122. data/test/cases/arel/nodes/as_test.rb +36 -0
  123. data/test/cases/arel/nodes/ascending_test.rb +46 -0
  124. data/test/cases/arel/nodes/bin_test.rb +35 -0
  125. data/test/cases/arel/nodes/binary_test.rb +29 -0
  126. data/test/cases/arel/nodes/bind_param_test.rb +22 -0
  127. data/test/cases/arel/nodes/case_test.rb +96 -0
  128. data/test/cases/arel/nodes/casted_test.rb +18 -0
  129. data/test/cases/arel/nodes/comment_test.rb +22 -0
  130. data/test/cases/arel/nodes/count_test.rb +35 -0
  131. data/test/cases/arel/nodes/delete_statement_test.rb +36 -0
  132. data/test/cases/arel/nodes/descending_test.rb +46 -0
  133. data/test/cases/arel/nodes/distinct_test.rb +21 -0
  134. data/test/cases/arel/nodes/equality_test.rb +62 -0
  135. data/test/cases/arel/nodes/extract_test.rb +43 -0
  136. data/test/cases/arel/nodes/false_test.rb +21 -0
  137. data/test/cases/arel/nodes/grouping_test.rb +26 -0
  138. data/test/cases/arel/nodes/infix_operation_test.rb +42 -0
  139. data/test/cases/arel/nodes/insert_statement_test.rb +44 -0
  140. data/test/cases/arel/nodes/named_function_test.rb +48 -0
  141. data/test/cases/arel/nodes/node_test.rb +22 -0
  142. data/test/cases/arel/nodes/not_test.rb +31 -0
  143. data/test/cases/arel/nodes/or_test.rb +36 -0
  144. data/test/cases/arel/nodes/over_test.rb +69 -0
  145. data/test/cases/arel/nodes/select_core_test.rb +79 -0
  146. data/test/cases/arel/nodes/select_statement_test.rb +51 -0
  147. data/test/cases/arel/nodes/sql_literal_test.rb +75 -0
  148. data/test/cases/arel/nodes/sum_test.rb +35 -0
  149. data/test/cases/arel/nodes/table_alias_test.rb +29 -0
  150. data/test/cases/arel/nodes/true_test.rb +21 -0
  151. data/test/cases/arel/nodes/unary_operation_test.rb +41 -0
  152. data/test/cases/arel/nodes/update_statement_test.rb +60 -0
  153. data/test/cases/arel/nodes/window_test.rb +81 -0
  154. data/test/cases/arel/nodes_test.rb +34 -0
  155. data/test/cases/arel/select_manager_test.rb +1238 -0
  156. data/test/cases/arel/support/fake_record.rb +135 -0
  157. data/test/cases/arel/table_test.rb +216 -0
  158. data/test/cases/arel/update_manager_test.rb +126 -0
  159. data/test/cases/arel/visitors/dispatch_contamination_test.rb +78 -0
  160. data/test/cases/arel/visitors/dot_test.rb +90 -0
  161. data/test/cases/arel/visitors/mysql_test.rb +157 -0
  162. data/test/cases/arel/visitors/postgres_test.rb +366 -0
  163. data/test/cases/arel/visitors/sqlite_test.rb +75 -0
  164. data/test/cases/arel/visitors/to_sql_test.rb +750 -0
  165. data/test/cases/associations/belongs_to_associations_test.rb +510 -158
  166. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +4 -2
  167. data/test/cases/associations/callbacks_test.rb +56 -38
  168. data/test/cases/associations/cascaded_eager_loading_test.rb +118 -61
  169. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +138 -18
  170. data/test/cases/associations/eager_load_nested_include_test.rb +38 -37
  171. data/test/cases/associations/eager_singularization_test.rb +21 -21
  172. data/test/cases/associations/eager_test.rb +559 -415
  173. data/test/cases/associations/extension_test.rb +18 -12
  174. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +234 -213
  175. data/test/cases/associations/has_many_associations_test.rb +1038 -465
  176. data/test/cases/associations/has_many_through_associations_test.rb +558 -249
  177. data/test/cases/associations/has_one_associations_test.rb +294 -129
  178. data/test/cases/associations/has_one_through_associations_test.rb +121 -75
  179. data/test/cases/associations/inner_join_association_test.rb +114 -38
  180. data/test/cases/associations/inverse_associations_test.rb +606 -398
  181. data/test/cases/associations/join_model_test.rb +158 -148
  182. data/test/cases/associations/left_outer_join_association_test.rb +59 -24
  183. data/test/cases/associations/nested_through_associations_test.rb +166 -109
  184. data/test/cases/associations/required_test.rb +35 -10
  185. data/test/cases/associations_test.rb +241 -110
  186. data/test/cases/attribute_methods/read_test.rb +11 -11
  187. data/test/cases/attribute_methods_test.rb +413 -298
  188. data/test/cases/attributes_test.rb +145 -27
  189. data/test/cases/autosave_association_test.rb +681 -436
  190. data/test/cases/base_prevent_writes_test.rb +229 -0
  191. data/test/cases/base_test.rb +599 -542
  192. data/test/cases/batches_test.rb +288 -82
  193. data/test/cases/binary_test.rb +26 -31
  194. data/test/cases/bind_parameter_test.rb +194 -21
  195. data/test/cases/boolean_test.rb +52 -0
  196. data/test/cases/cache_key_test.rb +110 -5
  197. data/test/cases/calculations_test.rb +740 -177
  198. data/test/cases/callbacks_test.rb +74 -207
  199. data/test/cases/clone_test.rb +15 -10
  200. data/test/cases/coders/json_test.rb +2 -0
  201. data/test/cases/coders/yaml_column_test.rb +16 -13
  202. data/test/cases/collection_cache_key_test.rb +177 -20
  203. data/test/cases/column_alias_test.rb +9 -7
  204. data/test/cases/column_definition_test.rb +10 -68
  205. data/test/cases/comment_test.rb +166 -107
  206. data/test/cases/connection_adapters/adapter_leasing_test.rb +14 -10
  207. data/test/cases/connection_adapters/connection_handler_test.rb +358 -51
  208. data/test/cases/connection_adapters/connection_handlers_multi_db_test.rb +400 -0
  209. data/test/cases/connection_adapters/connection_handlers_multi_pool_config_test.rb +103 -0
  210. data/test/cases/connection_adapters/connection_handlers_sharding_db_test.rb +499 -0
  211. data/test/cases/connection_adapters/connection_swapping_nested_test.rb +457 -0
  212. data/test/cases/connection_adapters/legacy_connection_handlers_multi_db_test.rb +486 -0
  213. data/test/cases/connection_adapters/legacy_connection_handlers_sharding_db_test.rb +586 -0
  214. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +319 -138
  215. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +62 -50
  216. data/test/cases/connection_adapters/schema_cache_test.rb +259 -26
  217. data/test/cases/connection_adapters/type_lookup_test.rb +96 -95
  218. data/test/cases/connection_management_test.rb +13 -11
  219. data/test/cases/connection_pool_test.rb +316 -83
  220. data/test/cases/core_test.rb +82 -58
  221. data/test/cases/counter_cache_test.rb +204 -50
  222. data/test/cases/custom_locking_test.rb +5 -3
  223. data/test/cases/database_configurations/hash_config_test.rb +74 -0
  224. data/test/cases/database_configurations/resolver_test.rb +150 -0
  225. data/test/cases/database_configurations_test.rb +145 -0
  226. data/test/cases/database_selector_test.rb +296 -0
  227. data/test/cases/database_statements_test.rb +18 -16
  228. data/test/cases/date_test.rb +8 -16
  229. data/test/cases/date_time_precision_test.rb +100 -78
  230. data/test/cases/date_time_test.rb +23 -8
  231. data/test/cases/defaults_test.rb +106 -71
  232. data/test/cases/delegated_type_test.rb +57 -0
  233. data/test/cases/dirty_test.rb +419 -223
  234. data/test/cases/disconnected_test.rb +6 -6
  235. data/test/cases/dup_test.rb +54 -27
  236. data/test/cases/enum_test.rb +461 -82
  237. data/test/cases/errors_test.rb +7 -7
  238. data/test/cases/explain_subscriber_test.rb +17 -15
  239. data/test/cases/explain_test.rb +11 -19
  240. data/test/cases/filter_attributes_test.rb +153 -0
  241. data/test/cases/finder_respond_to_test.rb +14 -14
  242. data/test/cases/finder_test.rb +669 -287
  243. data/test/cases/fixture_set/file_test.rb +34 -38
  244. data/test/cases/fixtures_test.rb +833 -176
  245. data/test/cases/forbidden_attributes_protection_test.rb +32 -67
  246. data/test/cases/habtm_destroy_order_test.rb +25 -25
  247. data/test/cases/helper.rb +78 -49
  248. data/test/cases/hot_compatibility_test.rb +33 -32
  249. data/test/cases/i18n_test.rb +18 -17
  250. data/test/cases/inheritance_test.rb +180 -115
  251. data/test/cases/insert_all_test.rb +489 -0
  252. data/test/cases/instrumentation_test.rb +101 -0
  253. data/test/cases/integration_test.rb +119 -31
  254. data/test/cases/invalid_connection_test.rb +18 -16
  255. data/test/cases/invertible_migration_test.rb +183 -43
  256. data/test/cases/json_attribute_test.rb +35 -0
  257. data/test/cases/json_serialization_test.rb +57 -58
  258. data/test/cases/json_shared_test_cases.rb +290 -0
  259. data/test/cases/locking_test.rb +413 -119
  260. data/test/cases/log_subscriber_test.rb +68 -26
  261. data/test/cases/marshal_serialization_test.rb +39 -0
  262. data/test/cases/migration/change_schema_test.rb +118 -72
  263. data/test/cases/migration/change_table_test.rb +138 -30
  264. data/test/cases/migration/check_constraint_test.rb +162 -0
  265. data/test/cases/migration/column_attributes_test.rb +45 -35
  266. data/test/cases/migration/column_positioning_test.rb +18 -6
  267. data/test/cases/migration/columns_test.rb +93 -77
  268. data/test/cases/migration/command_recorder_test.rb +121 -34
  269. data/test/cases/migration/compatibility_test.rb +578 -23
  270. data/test/cases/migration/create_join_table_test.rb +35 -25
  271. data/test/cases/migration/foreign_key_test.rb +503 -284
  272. data/test/cases/migration/helper.rb +4 -3
  273. data/test/cases/migration/index_test.rb +119 -70
  274. data/test/cases/migration/logger_test.rb +9 -6
  275. data/test/cases/migration/pending_migrations_test.rb +88 -34
  276. data/test/cases/migration/references_foreign_key_test.rb +164 -150
  277. data/test/cases/migration/references_index_test.rb +38 -19
  278. data/test/cases/migration/references_statements_test.rb +15 -14
  279. data/test/cases/migration/rename_table_test.rb +53 -30
  280. data/test/cases/migration_test.rb +637 -269
  281. data/test/cases/migrator_test.rb +191 -135
  282. data/test/cases/mixin_test.rb +7 -11
  283. data/test/cases/modules_test.rb +36 -34
  284. data/test/cases/multi_db_migrator_test.rb +223 -0
  285. data/test/cases/multiparameter_attributes_test.rb +60 -33
  286. data/test/cases/multiple_db_test.rb +16 -22
  287. data/test/cases/nested_attributes_test.rb +341 -320
  288. data/test/cases/nested_attributes_with_callbacks_test.rb +26 -24
  289. data/test/cases/null_relation_test.rb +84 -0
  290. data/test/cases/numeric_data_test.rb +93 -0
  291. data/test/cases/persistence_test.rb +361 -269
  292. data/test/cases/pooled_connections_test.rb +18 -26
  293. data/test/cases/prepared_statement_status_test.rb +48 -0
  294. data/test/cases/primary_keys_test.rb +210 -104
  295. data/test/cases/query_cache_test.rb +610 -141
  296. data/test/cases/quoting_test.rb +132 -31
  297. data/test/cases/readonly_test.rb +49 -48
  298. data/test/cases/reaper_test.rb +146 -32
  299. data/test/cases/reflection_test.rb +167 -156
  300. data/test/cases/relation/delegation_test.rb +49 -36
  301. data/test/cases/relation/delete_all_test.rb +117 -0
  302. data/test/cases/relation/merging_test.rb +319 -42
  303. data/test/cases/relation/mutation_test.rb +55 -93
  304. data/test/cases/relation/or_test.rb +129 -29
  305. data/test/cases/relation/predicate_builder_test.rb +21 -6
  306. data/test/cases/relation/record_fetch_warning_test.rb +5 -3
  307. data/test/cases/relation/select_test.rb +67 -0
  308. data/test/cases/relation/update_all_test.rb +317 -0
  309. data/test/cases/relation/where_chain_test.rb +68 -32
  310. data/test/cases/relation/where_clause_test.rb +136 -61
  311. data/test/cases/relation/where_test.rb +155 -48
  312. data/test/cases/relation_test.rb +266 -112
  313. data/test/cases/relations_test.rb +969 -744
  314. data/test/cases/reload_models_test.rb +13 -9
  315. data/test/cases/reserved_word_test.rb +141 -0
  316. data/test/cases/result_test.rb +68 -17
  317. data/test/cases/sanitize_test.rb +87 -71
  318. data/test/cases/schema_dumper_test.rb +221 -128
  319. data/test/cases/schema_loading_test.rb +3 -2
  320. data/test/cases/scoping/default_scoping_test.rb +185 -144
  321. data/test/cases/scoping/named_scoping_test.rb +177 -89
  322. data/test/cases/scoping/relation_scoping_test.rb +197 -75
  323. data/test/cases/secure_token_test.rb +18 -3
  324. data/test/cases/serialization_test.rb +30 -28
  325. data/test/cases/serialized_attribute_test.rb +133 -42
  326. data/test/cases/signed_id_test.rb +168 -0
  327. data/test/cases/statement_cache_test.rb +41 -24
  328. data/test/cases/statement_invalid_test.rb +42 -0
  329. data/test/cases/store_test.rb +180 -55
  330. data/test/cases/strict_loading_test.rb +473 -0
  331. data/test/cases/suppressor_test.rb +26 -12
  332. data/test/cases/tasks/database_tasks_test.rb +1258 -194
  333. data/test/cases/tasks/mysql_rake_test.rb +370 -298
  334. data/test/cases/tasks/postgresql_rake_test.rb +481 -251
  335. data/test/cases/tasks/sqlite_rake_test.rb +225 -178
  336. data/test/cases/test_case.rb +51 -40
  337. data/test/cases/test_databases_test.rb +79 -0
  338. data/test/cases/test_fixtures_test.rb +79 -19
  339. data/test/cases/time_precision_test.rb +98 -76
  340. data/test/cases/timestamp_test.rb +102 -99
  341. data/test/cases/touch_later_test.rb +12 -10
  342. data/test/cases/transaction_callbacks_test.rb +344 -90
  343. data/test/cases/transaction_isolation_test.rb +12 -12
  344. data/test/cases/transactions_test.rb +612 -162
  345. data/test/cases/type/adapter_specific_registry_test.rb +14 -2
  346. data/test/cases/type/date_time_test.rb +4 -2
  347. data/test/cases/type/integer_test.rb +4 -2
  348. data/test/cases/type/string_test.rb +10 -8
  349. data/test/cases/type/time_test.rb +28 -0
  350. data/test/cases/type/type_map_test.rb +29 -28
  351. data/test/cases/type/unsigned_integer_test.rb +19 -0
  352. data/test/cases/type_test.rb +2 -0
  353. data/test/cases/types_test.rb +3 -1
  354. data/test/cases/unconnected_test.rb +14 -1
  355. data/test/cases/unsafe_raw_sql_test.rb +274 -0
  356. data/test/cases/validations/absence_validation_test.rb +19 -17
  357. data/test/cases/validations/association_validation_test.rb +30 -28
  358. data/test/cases/validations/i18n_generate_message_validation_test.rb +34 -16
  359. data/test/cases/validations/i18n_validation_test.rb +22 -21
  360. data/test/cases/validations/length_validation_test.rb +34 -33
  361. data/test/cases/validations/numericality_validation_test.rb +181 -0
  362. data/test/cases/validations/presence_validation_test.rb +21 -19
  363. data/test/cases/validations/uniqueness_validation_test.rb +156 -86
  364. data/test/cases/validations_repair_helper.rb +2 -0
  365. data/test/cases/validations_test.rb +61 -26
  366. data/test/cases/view_test.rb +122 -116
  367. data/test/cases/yaml_serialization_test.rb +79 -34
  368. data/test/config.example.yml +19 -19
  369. data/test/config.rb +3 -1
  370. data/test/config.yml +16 -6
  371. data/test/fixtures/all/namespaced/accounts.yml +2 -0
  372. data/test/fixtures/author_addresses.yml +1 -8
  373. data/test/fixtures/authors.yml +1 -7
  374. data/test/fixtures/binaries.yml +4 -0
  375. data/test/fixtures/books.yml +9 -2
  376. data/test/fixtures/categories_posts.yml +3 -0
  377. data/test/fixtures/citations.yml +5 -0
  378. data/test/fixtures/comments.yml +7 -0
  379. data/test/fixtures/companies.yml +5 -0
  380. data/test/fixtures/computers.yml +2 -0
  381. data/test/fixtures/customers.yml +10 -1
  382. data/test/fixtures/developers.yml +1 -1
  383. data/test/fixtures/essays.yml +10 -0
  384. data/test/fixtures/faces.yml +3 -3
  385. data/test/fixtures/humans.yml +5 -0
  386. data/test/fixtures/interests.yml +7 -7
  387. data/test/fixtures/memberships.yml +7 -0
  388. data/test/fixtures/minimalistics.yml +3 -0
  389. data/test/fixtures/mixed_case_monkeys.yml +2 -2
  390. data/test/fixtures/naked/yml/courses_with_invalid_key.yml +3 -0
  391. data/test/fixtures/naked/yml/parrots.yml +1 -0
  392. data/test/fixtures/other_books.yml +26 -0
  393. data/test/fixtures/other_posts.yml +1 -0
  394. data/test/fixtures/parrots.yml +7 -1
  395. data/test/fixtures/pirates.yml +3 -0
  396. data/test/fixtures/posts.yml +11 -3
  397. data/test/fixtures/readers.yml +6 -0
  398. data/test/fixtures/reserved_words/values.yml +2 -2
  399. data/test/fixtures/sponsors.yml +3 -0
  400. data/test/fixtures/strict_zines.yml +2 -0
  401. data/test/fixtures/subscribers.yml +1 -1
  402. data/test/fixtures/tasks.yml +1 -1
  403. data/test/fixtures/warehouse-things.yml +3 -0
  404. data/test/migrations/10_urban/9_add_expressions.rb +2 -0
  405. data/test/migrations/decimal/1_give_me_big_numbers.rb +6 -4
  406. data/test/migrations/magic/1_currencies_have_symbols.rb +3 -2
  407. data/test/migrations/missing/1000_people_have_middle_names.rb +2 -0
  408. data/test/migrations/missing/1_people_have_last_names.rb +2 -0
  409. data/test/migrations/missing/3_we_need_reminders.rb +2 -0
  410. data/test/migrations/missing/4_innocent_jointable.rb +3 -1
  411. data/test/migrations/rename/1_we_need_things.rb +2 -0
  412. data/test/migrations/rename/2_rename_things.rb +2 -0
  413. data/test/migrations/to_copy/1_people_have_hobbies.rb +3 -1
  414. data/test/migrations/to_copy/2_people_have_descriptions.rb +3 -1
  415. data/test/migrations/to_copy2/1_create_articles.rb +2 -0
  416. data/test/migrations/to_copy2/2_create_comments.rb +3 -1
  417. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +3 -1
  418. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +3 -1
  419. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +3 -1
  420. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +2 -0
  421. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +2 -0
  422. data/test/migrations/valid/1_valid_people_have_last_names.rb +2 -0
  423. data/test/migrations/valid/2_we_need_reminders.rb +2 -0
  424. data/test/migrations/valid/3_innocent_jointable.rb +3 -1
  425. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +2 -0
  426. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -0
  427. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +3 -1
  428. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +2 -0
  429. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +2 -0
  430. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +3 -1
  431. data/test/migrations/version_check/20131219224947_migration_version_check.rb +2 -0
  432. data/test/models/account.rb +46 -0
  433. data/test/models/admin/account.rb +3 -1
  434. data/test/models/admin/randomly_named_c1.rb +2 -0
  435. data/test/models/admin/user.rb +16 -8
  436. data/test/models/admin.rb +4 -2
  437. data/test/models/aircraft.rb +3 -1
  438. data/test/models/arunit2_model.rb +2 -0
  439. data/test/models/author.rb +153 -102
  440. data/test/models/auto_id.rb +2 -0
  441. data/test/models/autoloadable/extra_firm.rb +2 -0
  442. data/test/models/binary.rb +3 -1
  443. data/test/models/binary_field.rb +6 -0
  444. data/test/models/bird.rb +13 -1
  445. data/test/models/book.rb +14 -4
  446. data/test/models/book_destroy_async.rb +24 -0
  447. data/test/models/boolean.rb +5 -0
  448. data/test/models/bulb.rb +13 -4
  449. data/test/models/cake_designer.rb +2 -0
  450. data/test/models/car.rb +17 -10
  451. data/test/models/carrier.rb +2 -0
  452. data/test/models/cart.rb +5 -0
  453. data/test/models/cat.rb +2 -0
  454. data/test/models/categorization.rb +8 -6
  455. data/test/models/category.rb +28 -16
  456. data/test/models/chef.rb +2 -0
  457. data/test/models/citation.rb +5 -1
  458. data/test/models/club.rb +13 -10
  459. data/test/models/college.rb +4 -2
  460. data/test/models/column.rb +2 -0
  461. data/test/models/column_name.rb +2 -0
  462. data/test/models/comment.rb +32 -10
  463. data/test/models/company.rb +102 -106
  464. data/test/models/company_in_module.rb +27 -26
  465. data/test/models/computer.rb +3 -1
  466. data/test/models/contact.rb +15 -13
  467. data/test/models/content.rb +5 -3
  468. data/test/models/contract.rb +21 -3
  469. data/test/models/country.rb +2 -4
  470. data/test/models/course.rb +3 -1
  471. data/test/models/customer.rb +10 -8
  472. data/test/models/customer_carrier.rb +2 -0
  473. data/test/models/dashboard.rb +2 -0
  474. data/test/models/default.rb +2 -0
  475. data/test/models/department.rb +2 -0
  476. data/test/models/destroy_async_parent.rb +15 -0
  477. data/test/models/destroy_async_parent_soft_delete.rb +20 -0
  478. data/test/models/developer.rb +152 -85
  479. data/test/models/dl_keyed_belongs_to.rb +13 -0
  480. data/test/models/dl_keyed_belongs_to_soft_delete.rb +19 -0
  481. data/test/models/dl_keyed_has_many.rb +5 -0
  482. data/test/models/dl_keyed_has_many_through.rb +5 -0
  483. data/test/models/dl_keyed_has_one.rb +5 -0
  484. data/test/models/dl_keyed_join.rb +10 -0
  485. data/test/models/dog.rb +2 -0
  486. data/test/models/dog_lover.rb +2 -0
  487. data/test/models/doubloon.rb +3 -1
  488. data/test/models/drink_designer.rb +17 -0
  489. data/test/models/edge.rb +4 -2
  490. data/test/models/electron.rb +2 -0
  491. data/test/models/engine.rb +3 -2
  492. data/test/models/entrant.rb +2 -0
  493. data/test/models/entry.rb +5 -0
  494. data/test/models/essay.rb +6 -3
  495. data/test/models/essay_destroy_async.rb +12 -0
  496. data/test/models/event.rb +3 -1
  497. data/test/models/eye.rb +5 -3
  498. data/test/models/face.rb +14 -6
  499. data/test/models/family.rb +6 -0
  500. data/test/models/family_tree.rb +6 -0
  501. data/test/models/friendship.rb +5 -3
  502. data/test/models/frog.rb +8 -0
  503. data/test/models/guid.rb +3 -1
  504. data/test/models/guitar.rb +2 -0
  505. data/test/models/hotel.rb +5 -3
  506. data/test/models/human.rb +39 -0
  507. data/test/models/image.rb +3 -1
  508. data/test/models/interest.rb +14 -3
  509. data/test/models/invoice.rb +4 -2
  510. data/test/models/item.rb +3 -1
  511. data/test/models/job.rb +5 -3
  512. data/test/models/joke.rb +4 -2
  513. data/test/models/keyboard.rb +3 -1
  514. data/test/models/legacy_thing.rb +2 -0
  515. data/test/models/lesson.rb +2 -0
  516. data/test/models/line_item.rb +3 -1
  517. data/test/models/liquid.rb +2 -0
  518. data/test/models/matey.rb +3 -1
  519. data/test/models/measurement.rb +4 -0
  520. data/test/models/member.rb +23 -20
  521. data/test/models/member_detail.rb +3 -0
  522. data/test/models/member_type.rb +2 -0
  523. data/test/models/membership.rb +4 -1
  524. data/test/models/mentor.rb +3 -1
  525. data/test/models/message.rb +5 -0
  526. data/test/models/minimalistic.rb +2 -0
  527. data/test/models/minivan.rb +3 -2
  528. data/test/models/mixed_case_monkey.rb +3 -1
  529. data/test/models/molecule.rb +2 -0
  530. data/test/models/mouse.rb +6 -0
  531. data/test/models/movie.rb +2 -0
  532. data/test/models/node.rb +4 -2
  533. data/test/models/non_primary_key.rb +2 -0
  534. data/test/models/notification.rb +2 -0
  535. data/test/models/numeric_data.rb +12 -0
  536. data/test/models/order.rb +4 -2
  537. data/test/models/organization.rb +9 -7
  538. data/test/models/other_dog.rb +3 -1
  539. data/test/models/owner.rb +6 -4
  540. data/test/models/parrot.rb +12 -4
  541. data/test/models/person.rb +59 -54
  542. data/test/models/personal_legacy_thing.rb +3 -1
  543. data/test/models/pet.rb +4 -2
  544. data/test/models/pet_treasure.rb +2 -0
  545. data/test/models/pirate.rb +67 -43
  546. data/test/models/possession.rb +3 -1
  547. data/test/models/post.rb +184 -86
  548. data/test/models/price_estimate.rb +11 -1
  549. data/test/models/professor.rb +3 -1
  550. data/test/models/project.rb +14 -12
  551. data/test/models/publisher/article.rb +2 -0
  552. data/test/models/publisher/magazine.rb +2 -0
  553. data/test/models/publisher.rb +2 -0
  554. data/test/models/randomly_named_c1.rb +2 -0
  555. data/test/models/rating.rb +5 -1
  556. data/test/models/reader.rb +7 -5
  557. data/test/models/recipe.rb +2 -0
  558. data/test/models/record.rb +2 -0
  559. data/test/models/reference.rb +6 -3
  560. data/test/models/reply.rb +39 -21
  561. data/test/models/room.rb +6 -0
  562. data/test/models/section.rb +6 -0
  563. data/test/models/seminar.rb +6 -0
  564. data/test/models/session.rb +6 -0
  565. data/test/models/ship.rb +12 -9
  566. data/test/models/ship_part.rb +5 -3
  567. data/test/models/shop.rb +4 -2
  568. data/test/models/shop_account.rb +2 -0
  569. data/test/models/speedometer.rb +2 -0
  570. data/test/models/sponsor.rb +8 -5
  571. data/test/models/squeak.rb +6 -0
  572. data/test/models/strict_zine.rb +7 -0
  573. data/test/models/string_key_object.rb +2 -0
  574. data/test/models/student.rb +2 -0
  575. data/test/models/subscriber.rb +4 -2
  576. data/test/models/subscription.rb +5 -1
  577. data/test/models/tag.rb +6 -3
  578. data/test/models/tagging.rb +13 -6
  579. data/test/models/task.rb +2 -0
  580. data/test/models/topic.rb +54 -19
  581. data/test/models/toy.rb +4 -0
  582. data/test/models/traffic_light.rb +2 -0
  583. data/test/models/treasure.rb +5 -3
  584. data/test/models/treaty.rb +2 -4
  585. data/test/models/tree.rb +2 -0
  586. data/test/models/tuning_peg.rb +2 -0
  587. data/test/models/tyre.rb +2 -0
  588. data/test/models/user.rb +12 -4
  589. data/test/models/uuid_child.rb +2 -0
  590. data/test/models/uuid_item.rb +2 -0
  591. data/test/models/uuid_parent.rb +2 -0
  592. data/test/models/vegetables.rb +12 -3
  593. data/test/models/vertex.rb +6 -4
  594. data/test/models/warehouse_thing.rb +2 -0
  595. data/test/models/wheel.rb +3 -1
  596. data/test/models/without_table.rb +3 -1
  597. data/test/models/zine.rb +3 -1
  598. data/test/schema/mysql2_specific_schema.rb +49 -35
  599. data/test/schema/oracle_specific_schema.rb +13 -15
  600. data/test/schema/postgresql_specific_schema.rb +51 -40
  601. data/test/schema/schema.rb +334 -154
  602. data/test/schema/sqlite_specific_schema.rb +9 -16
  603. data/test/support/config.rb +26 -26
  604. data/test/support/connection.rb +14 -8
  605. data/test/support/connection_helper.rb +3 -1
  606. data/test/support/ddl_helper.rb +2 -0
  607. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic.dump +0 -0
  608. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic_associations.dump +0 -0
  609. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic.dump +0 -0
  610. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic_associations.dump +0 -0
  611. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic.dump +0 -0
  612. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic_associations.dump +0 -0
  613. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic.dump +0 -0
  614. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic_associations.dump +0 -0
  615. data/test/support/marshal_compatibility_fixtures/legacy_6_0_record_mysql.dump +0 -0
  616. data/test/support/marshal_compatibility_fixtures/legacy_relation.dump +0 -0
  617. data/test/support/schema_dumping_helper.rb +2 -0
  618. data/test/support/stubs/strong_parameters.rb +40 -0
  619. data/test/support/yaml_compatibility_fixtures/rails_v1_mysql.yml +206 -0
  620. data/test/support/yaml_compatibility_fixtures/rails_v2.yml +55 -0
  621. metadata +190 -14
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cases/helper"
2
4
  require "models/binary"
3
5
  require "models/developer"
@@ -21,6 +23,7 @@ class LogSubscriberTest < ActiveRecord::TestCase
21
23
  TRANSACTION: REGEXP_CYAN,
22
24
  OTHER: REGEXP_MAGENTA
23
25
  }
26
+ Event = Struct.new(:duration, :payload)
24
27
 
25
28
  class TestDebugLogSubscriber < ActiveRecord::LogSubscriber
26
29
  attr_reader :debugs
@@ -30,8 +33,9 @@ class LogSubscriberTest < ActiveRecord::TestCase
30
33
  super
31
34
  end
32
35
 
33
- def debug message
34
- @debugs << message
36
+ def debug(progname = nil, &block)
37
+ @debugs << progname
38
+ super
35
39
  end
36
40
  end
37
41
 
@@ -40,6 +44,7 @@ class LogSubscriberTest < ActiveRecord::TestCase
40
44
  def setup
41
45
  @old_logger = ActiveRecord::Base.logger
42
46
  Developer.primary_key
47
+ ActiveRecord::Base.connection.materialize_transactions
43
48
  super
44
49
  ActiveRecord::LogSubscriber.attach_to(:active_record)
45
50
  end
@@ -55,25 +60,22 @@ class LogSubscriberTest < ActiveRecord::TestCase
55
60
  end
56
61
 
57
62
  def test_schema_statements_are_ignored
58
- event = Struct.new(:duration, :payload)
59
-
60
63
  logger = TestDebugLogSubscriber.new
61
64
  assert_equal 0, logger.debugs.length
62
65
 
63
- logger.sql(event.new(0.9, sql: "hi mom!"))
66
+ logger.sql(Event.new(0.9, sql: "hi mom!"))
64
67
  assert_equal 1, logger.debugs.length
65
68
 
66
- logger.sql(event.new(0.9, sql: "hi mom!", name: "foo"))
69
+ logger.sql(Event.new(0.9, sql: "hi mom!", name: "foo"))
67
70
  assert_equal 2, logger.debugs.length
68
71
 
69
- logger.sql(event.new(0.9, sql: "hi mom!", name: "SCHEMA"))
72
+ logger.sql(Event.new(0.9, sql: "hi mom!", name: "SCHEMA"))
70
73
  assert_equal 2, logger.debugs.length
71
74
  end
72
75
 
73
76
  def test_sql_statements_are_not_squeezed
74
- event = Struct.new(:duration, :payload)
75
77
  logger = TestDebugLogSubscriber.new
76
- logger.sql(event.new(0.9, sql: "ruby rails"))
78
+ logger.sql(Event.new(0.9, sql: "ruby rails"))
77
79
  assert_match(/ruby rails/, logger.debugs.first)
78
80
  end
79
81
 
@@ -86,56 +88,61 @@ class LogSubscriberTest < ActiveRecord::TestCase
86
88
  end
87
89
 
88
90
  def test_basic_query_logging_coloration
89
- event = Struct.new(:duration, :payload)
90
91
  logger = TestDebugLogSubscriber.new
91
92
  logger.colorize_logging = true
92
93
  SQL_COLORINGS.each do |verb, color_regex|
93
- logger.sql(event.new(0.9, sql: verb.to_s))
94
+ logger.sql(Event.new(0.9, sql: verb.to_s))
94
95
  assert_match(/#{REGEXP_BOLD}#{color_regex}#{verb}#{REGEXP_CLEAR}/i, logger.debugs.last)
95
96
  end
96
97
  end
97
98
 
99
+ def test_logging_sql_coloration_disabled
100
+ logger = TestDebugLogSubscriber.new
101
+ logger.colorize_logging = false
102
+
103
+ SQL_COLORINGS.each do |verb, color_regex|
104
+ logger.sql(Event.new(0.9, sql: verb.to_s))
105
+ assert_no_match(/#{REGEXP_BOLD}#{color_regex}#{verb}#{REGEXP_CLEAR}/i, logger.debugs.last)
106
+ end
107
+ end
108
+
98
109
  def test_basic_payload_name_logging_coloration_generic_sql
99
- event = Struct.new(:duration, :payload)
100
110
  logger = TestDebugLogSubscriber.new
101
111
  logger.colorize_logging = true
102
112
  SQL_COLORINGS.each do |verb, _|
103
- logger.sql(event.new(0.9, sql: verb.to_s))
113
+ logger.sql(Event.new(0.9, sql: verb.to_s))
104
114
  assert_match(/#{REGEXP_BOLD}#{REGEXP_MAGENTA} \(0\.9ms\)#{REGEXP_CLEAR}/i, logger.debugs.last)
105
115
 
106
- logger.sql(event.new(0.9, sql: verb.to_s, name: "SQL"))
116
+ logger.sql(Event.new(0.9, sql: verb.to_s, name: "SQL"))
107
117
  assert_match(/#{REGEXP_BOLD}#{REGEXP_MAGENTA}SQL \(0\.9ms\)#{REGEXP_CLEAR}/i, logger.debugs.last)
108
118
  end
109
119
  end
110
120
 
111
121
  def test_basic_payload_name_logging_coloration_named_sql
112
- event = Struct.new(:duration, :payload)
113
122
  logger = TestDebugLogSubscriber.new
114
123
  logger.colorize_logging = true
115
124
  SQL_COLORINGS.each do |verb, _|
116
- logger.sql(event.new(0.9, sql: verb.to_s, name: "Model Load"))
125
+ logger.sql(Event.new(0.9, sql: verb.to_s, name: "Model Load"))
117
126
  assert_match(/#{REGEXP_BOLD}#{REGEXP_CYAN}Model Load \(0\.9ms\)#{REGEXP_CLEAR}/i, logger.debugs.last)
118
127
 
119
- logger.sql(event.new(0.9, sql: verb.to_s, name: "Model Exists"))
128
+ logger.sql(Event.new(0.9, sql: verb.to_s, name: "Model Exists"))
120
129
  assert_match(/#{REGEXP_BOLD}#{REGEXP_CYAN}Model Exists \(0\.9ms\)#{REGEXP_CLEAR}/i, logger.debugs.last)
121
130
 
122
- logger.sql(event.new(0.9, sql: verb.to_s, name: "ANY SPECIFIC NAME"))
131
+ logger.sql(Event.new(0.9, sql: verb.to_s, name: "ANY SPECIFIC NAME"))
123
132
  assert_match(/#{REGEXP_BOLD}#{REGEXP_CYAN}ANY SPECIFIC NAME \(0\.9ms\)#{REGEXP_CLEAR}/i, logger.debugs.last)
124
133
  end
125
134
  end
126
135
 
127
136
  def test_query_logging_coloration_with_nested_select
128
- event = Struct.new(:duration, :payload)
129
137
  logger = TestDebugLogSubscriber.new
130
138
  logger.colorize_logging = true
131
139
  SQL_COLORINGS.slice(:SELECT, :INSERT, :UPDATE, :DELETE).each do |verb, color_regex|
132
- logger.sql(event.new(0.9, sql: "#{verb} WHERE ID IN SELECT"))
140
+ logger.sql(Event.new(0.9, sql: "#{verb} WHERE ID IN SELECT"))
133
141
  assert_match(/#{REGEXP_BOLD}#{REGEXP_MAGENTA} \(0\.9ms\)#{REGEXP_CLEAR} #{REGEXP_BOLD}#{color_regex}#{verb} WHERE ID IN SELECT#{REGEXP_CLEAR}/i, logger.debugs.last)
134
142
  end
135
143
  end
136
144
 
137
145
  def test_query_logging_coloration_with_multi_line_nested_select
138
- event = Struct.new(:duration, :payload)
139
146
  logger = TestDebugLogSubscriber.new
140
147
  logger.colorize_logging = true
141
148
  SQL_COLORINGS.slice(:SELECT, :INSERT, :UPDATE, :DELETE).each do |verb, color_regex|
@@ -145,13 +152,12 @@ class LogSubscriberTest < ActiveRecord::TestCase
145
152
  SELECT ID FROM THINGS
146
153
  )
147
154
  EOS
148
- logger.sql(event.new(0.9, sql: sql))
155
+ logger.sql(Event.new(0.9, sql: sql))
149
156
  assert_match(/#{REGEXP_BOLD}#{REGEXP_MAGENTA} \(0\.9ms\)#{REGEXP_CLEAR} #{REGEXP_BOLD}#{color_regex}.*#{verb}.*#{REGEXP_CLEAR}/mi, logger.debugs.last)
150
157
  end
151
158
  end
152
159
 
153
160
  def test_query_logging_coloration_with_lock
154
- event = Struct.new(:duration, :payload)
155
161
  logger = TestDebugLogSubscriber.new
156
162
  logger.colorize_logging = true
157
163
  sql = <<-EOS
@@ -159,13 +165,13 @@ class LogSubscriberTest < ActiveRecord::TestCase
159
165
  (SELECT * FROM mytable FOR UPDATE) ss
160
166
  WHERE col1 = 5;
161
167
  EOS
162
- logger.sql(event.new(0.9, sql: sql))
168
+ logger.sql(Event.new(0.9, sql: sql))
163
169
  assert_match(/#{REGEXP_BOLD}#{REGEXP_MAGENTA} \(0\.9ms\)#{REGEXP_CLEAR} #{REGEXP_BOLD}#{SQL_COLORINGS[:LOCK]}.*FOR UPDATE.*#{REGEXP_CLEAR}/mi, logger.debugs.last)
164
170
 
165
171
  sql = <<-EOS
166
172
  LOCK TABLE films IN SHARE MODE;
167
173
  EOS
168
- logger.sql(event.new(0.9, sql: sql))
174
+ logger.sql(Event.new(0.9, sql: sql))
169
175
  assert_match(/#{REGEXP_BOLD}#{REGEXP_MAGENTA} \(0\.9ms\)#{REGEXP_CLEAR} #{REGEXP_BOLD}#{SQL_COLORINGS[:LOCK]}.*LOCK TABLE.*#{REGEXP_CLEAR}/mi, logger.debugs.last)
170
176
  end
171
177
 
@@ -177,6 +183,36 @@ class LogSubscriberTest < ActiveRecord::TestCase
177
183
  assert_match(/SELECT .*?FROM .?developers.?/i, @logger.logged(:debug).last)
178
184
  end
179
185
 
186
+ def test_vebose_query_logs
187
+ ActiveRecord::Base.verbose_query_logs = true
188
+
189
+ logger = TestDebugLogSubscriber.new
190
+ logger.sql(Event.new(0, sql: "hi mom!"))
191
+ assert_equal 2, @logger.logged(:debug).size
192
+ assert_match(/↳/, @logger.logged(:debug).last)
193
+ ensure
194
+ ActiveRecord::Base.verbose_query_logs = false
195
+ end
196
+
197
+ def test_verbose_query_with_ignored_callstack
198
+ ActiveRecord::Base.verbose_query_logs = true
199
+
200
+ logger = TestDebugLogSubscriber.new
201
+ def logger.extract_query_source_location(*); nil; end
202
+
203
+ logger.sql(Event.new(0, sql: "hi mom!"))
204
+ assert_equal 1, @logger.logged(:debug).size
205
+ assert_no_match(/↳/, @logger.logged(:debug).last)
206
+ ensure
207
+ ActiveRecord::Base.verbose_query_logs = false
208
+ end
209
+
210
+ def test_verbose_query_logs_disabled_by_default
211
+ logger = TestDebugLogSubscriber.new
212
+ logger.sql(Event.new(0, sql: "hi mom!"))
213
+ assert_no_match(/↳/, @logger.logged(:debug).last)
214
+ end
215
+
180
216
  def test_cached_queries
181
217
  ActiveRecord::Base.cache do
182
218
  Developer.all.load
@@ -210,8 +246,14 @@ class LogSubscriberTest < ActiveRecord::TestCase
210
246
  end
211
247
 
212
248
  if ActiveRecord::Base.connection.prepared_statements
249
+ def test_where_in_binds_logging_include_attribute_names
250
+ Developer.where(id: [1, 2, 3, 4, 5]).load
251
+ wait
252
+ assert_match(%{["id", 1], ["id", 2], ["id", 3], ["id", 4], ["id", 5]}, @logger.logged(:debug).last)
253
+ end
254
+
213
255
  def test_binary_data_is_not_logged
214
- Binary.create(data: 'some binary data')
256
+ Binary.create(data: "some binary data")
215
257
  wait
216
258
  assert_match(/<16 bytes of binary data>/, @logger.logged(:debug).join)
217
259
  end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "models/topic"
5
+ require "models/reply"
6
+
7
+ class MarshalSerializationTest < ActiveRecord::TestCase
8
+ fixtures :topics
9
+
10
+ def test_deserializing_rails_6_0_marshal_basic
11
+ topic = Marshal.load(marshal_fixture("rails_6_0_topic"))
12
+
13
+ assert_not_predicate topic, :new_record?
14
+ assert_equal 1, topic.id
15
+ assert_equal "The First Topic", topic.title
16
+ assert_equal "Have a nice day", topic.content
17
+ end
18
+
19
+ def test_deserializing_rails_6_0_marshal_with_loaded_association_cache
20
+ topic = Marshal.load(marshal_fixture("rails_6_0_topic_associations"))
21
+
22
+ assert_not_predicate topic, :new_record?
23
+ assert_equal 1, topic.id
24
+ assert_equal "The First Topic", topic.title
25
+ assert_equal "Have a nice day", topic.content
26
+ end
27
+
28
+ private
29
+ def marshal_fixture(file_name)
30
+ File.binread(marshal_fixture_path(file_name))
31
+ end
32
+
33
+ def marshal_fixture_path(file_name)
34
+ File.expand_path(
35
+ "support/marshal_compatibility_fixtures/#{ActiveRecord::Base.connection.adapter_name}/#{file_name}.dump",
36
+ TEST_ROOT
37
+ )
38
+ end
39
+ end
@@ -1,4 +1,6 @@
1
- require 'cases/helper'
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
2
4
 
3
5
  module ActiveRecord
4
6
  class Migration
@@ -40,10 +42,10 @@ module ActiveRecord
40
42
 
41
43
  def test_create_table_with_not_null_column
42
44
  connection.create_table :testings do |t|
43
- t.column :foo, :string, :null => false
45
+ t.column :foo, :string, null: false
44
46
  end
45
47
 
46
- assert_raises(ActiveRecord::StatementInvalid) do
48
+ assert_raises(ActiveRecord::NotNullViolation) do
47
49
  connection.execute "insert into testings (foo) values (NULL)"
48
50
  end
49
51
  end
@@ -53,11 +55,11 @@ module ActiveRecord
53
55
  mysql = current_adapter?(:Mysql2Adapter)
54
56
 
55
57
  connection.create_table :testings do |t|
56
- t.column :one, :string, :default => "hello"
57
- t.column :two, :boolean, :default => true
58
- t.column :three, :boolean, :default => false
59
- t.column :four, :integer, :default => 1
60
- t.column :five, :text, :default => "hello" unless mysql
58
+ t.column :one, :string, default: "hello"
59
+ t.column :two, :boolean, default: true
60
+ t.column :three, :boolean, default: false
61
+ t.column :four, :integer, default: 1
62
+ t.column :five, :text, default: "hello" unless mysql
61
63
  end
62
64
 
63
65
  columns = connection.columns(:testings)
@@ -70,30 +72,30 @@ module ActiveRecord
70
72
  assert_equal "hello", one.default
71
73
  assert_equal true, connection.lookup_cast_type_from_column(two).deserialize(two.default)
72
74
  assert_equal false, connection.lookup_cast_type_from_column(three).deserialize(three.default)
73
- assert_equal '1', four.default
75
+ assert_equal "1", four.default
74
76
  assert_equal "hello", five.default unless mysql
75
77
  end
76
78
 
77
79
  if current_adapter?(:PostgreSQLAdapter)
78
80
  def test_add_column_with_array
79
81
  connection.create_table :testings
80
- connection.add_column :testings, :foo, :string, :array => true
82
+ connection.add_column :testings, :foo, :string, array: true
81
83
 
82
84
  columns = connection.columns(:testings)
83
85
  array_column = columns.detect { |c| c.name == "foo" }
84
86
 
85
- assert array_column.array?
87
+ assert_predicate array_column, :array?
86
88
  end
87
89
 
88
90
  def test_create_table_with_array_column
89
91
  connection.create_table :testings do |t|
90
- t.string :foo, :array => true
92
+ t.string :foo, array: true
91
93
  end
92
94
 
93
95
  columns = connection.columns(:testings)
94
96
  array_column = columns.detect { |c| c.name == "foo" }
95
97
 
96
- assert array_column.array?
98
+ assert_predicate array_column, :array?
97
99
  end
98
100
  end
99
101
 
@@ -105,9 +107,9 @@ module ActiveRecord
105
107
  eight = columns.detect { |c| c.name == "eight_int" }
106
108
 
107
109
  if current_adapter?(:OracleAdapter)
108
- assert_equal 'NUMBER(19)', eight.sql_type
110
+ assert_equal "NUMBER(19)", eight.sql_type
109
111
  elsif current_adapter?(:SQLite3Adapter)
110
- assert_equal 'bigint', eight.sql_type
112
+ assert_equal "bigint", eight.sql_type
111
113
  else
112
114
  assert_equal :integer, eight.type
113
115
  assert_equal 8, eight.limit
@@ -118,13 +120,13 @@ module ActiveRecord
118
120
 
119
121
  def test_create_table_with_limits
120
122
  connection.create_table :testings do |t|
121
- t.column :foo, :string, :limit => 255
123
+ t.column :foo, :string, limit: 255
122
124
 
123
125
  t.column :default_int, :integer
124
126
 
125
- t.column :one_int, :integer, :limit => 1
126
- t.column :four_int, :integer, :limit => 4
127
- t.column :eight_int, :integer, :limit => 8
127
+ t.column :one_int, :integer, limit: 1
128
+ t.column :four_int, :integer, limit: 4
129
+ t.column :eight_int, :integer, limit: 8
128
130
  end
129
131
 
130
132
  columns = connection.columns(:testings)
@@ -137,20 +139,20 @@ module ActiveRecord
137
139
  eight = columns.detect { |c| c.name == "eight_int" }
138
140
 
139
141
  if current_adapter?(:PostgreSQLAdapter)
140
- assert_equal 'integer', default.sql_type
141
- assert_equal 'smallint', one.sql_type
142
- assert_equal 'integer', four.sql_type
143
- assert_equal 'bigint', eight.sql_type
142
+ assert_equal "integer", default.sql_type
143
+ assert_equal "smallint", one.sql_type
144
+ assert_equal "integer", four.sql_type
145
+ assert_equal "bigint", eight.sql_type
144
146
  elsif current_adapter?(:Mysql2Adapter)
145
- assert_match 'int(11)', default.sql_type
146
- assert_match 'tinyint', one.sql_type
147
- assert_match 'int', four.sql_type
148
- assert_match 'bigint', eight.sql_type
147
+ assert_match %r/\Aint/, default.sql_type
148
+ assert_match %r/\Atinyint/, one.sql_type
149
+ assert_match %r/\Aint/, four.sql_type
150
+ assert_match %r/\Abigint/, eight.sql_type
149
151
  elsif current_adapter?(:OracleAdapter)
150
- assert_equal 'NUMBER(38)', default.sql_type
151
- assert_equal 'NUMBER(1)', one.sql_type
152
- assert_equal 'NUMBER(4)', four.sql_type
153
- assert_equal 'NUMBER(8)', eight.sql_type
152
+ assert_equal "NUMBER(38)", default.sql_type
153
+ assert_equal "NUMBER(1)", one.sql_type
154
+ assert_equal "NUMBER(4)", four.sql_type
155
+ assert_equal "NUMBER(8)", eight.sql_type
154
156
  end
155
157
  end
156
158
 
@@ -194,17 +196,28 @@ module ActiveRecord
194
196
  assert_equal "you can't redefine the primary key column 'testing_id'. To define a custom primary key, pass { id: false } to create_table.", error.message
195
197
  end
196
198
 
199
+ def test_create_table_raises_when_defining_existing_column
200
+ error = assert_raise(ArgumentError) do
201
+ connection.create_table :testings do |t|
202
+ t.column :testing_column, :string
203
+ t.column :testing_column, :integer
204
+ end
205
+ end
206
+
207
+ assert_equal "you can't define an already defined column 'testing_column'.", error.message
208
+ end
209
+
197
210
  def test_create_table_with_timestamps_should_create_datetime_columns
198
211
  connection.create_table table_name do |t|
199
212
  t.timestamps
200
213
  end
201
214
  created_columns = connection.columns(table_name)
202
215
 
203
- created_at_column = created_columns.detect {|c| c.name == 'created_at' }
204
- updated_at_column = created_columns.detect {|c| c.name == 'updated_at' }
216
+ created_at_column = created_columns.detect { |c| c.name == "created_at" }
217
+ updated_at_column = created_columns.detect { |c| c.name == "updated_at" }
205
218
 
206
- assert !created_at_column.null
207
- assert !updated_at_column.null
219
+ assert_not created_at_column.null
220
+ assert_not updated_at_column.null
208
221
  end
209
222
 
210
223
  def test_create_table_with_timestamps_should_create_datetime_columns_with_options
@@ -213,8 +226,8 @@ module ActiveRecord
213
226
  end
214
227
  created_columns = connection.columns(table_name)
215
228
 
216
- created_at_column = created_columns.detect {|c| c.name == 'created_at' }
217
- updated_at_column = created_columns.detect {|c| c.name == 'updated_at' }
229
+ created_at_column = created_columns.detect { |c| c.name == "created_at" }
230
+ updated_at_column = created_columns.detect { |c| c.name == "updated_at" }
218
231
 
219
232
  assert created_at_column.null
220
233
  assert updated_at_column.null
@@ -231,9 +244,9 @@ module ActiveRecord
231
244
  connection.create_table :testings do |t|
232
245
  t.column :foo, :string
233
246
  end
234
- connection.add_column :testings, :bar, :string, :null => false
247
+ connection.add_column :testings, :bar, :string, null: false
235
248
 
236
- assert_raise(ActiveRecord::StatementInvalid) do
249
+ assert_raise(ActiveRecord::NotNullViolation) do
237
250
  connection.execute "insert into testings (foo, bar) values ('hello', NULL)"
238
251
  end
239
252
  end
@@ -244,12 +257,16 @@ module ActiveRecord
244
257
  t.column :foo, :string
245
258
  end
246
259
 
247
- con = connection
248
- connection.execute "insert into testings (#{con.quote_column_name('id')}, #{con.quote_column_name('foo')}) values (1, 'hello')"
249
- assert_nothing_raised {connection.add_column :testings, :bar, :string, :null => false, :default => "default" }
260
+ quoted_id = connection.quote_column_name("id")
261
+ quoted_foo = connection.quote_column_name("foo")
262
+ quoted_bar = connection.quote_column_name("bar")
263
+ connection.execute("insert into testings (#{quoted_id}, #{quoted_foo}) values (1, 'hello')")
264
+ assert_nothing_raised do
265
+ connection.add_column :testings, :bar, :string, null: false, default: "default"
266
+ end
250
267
 
251
- assert_raises(ActiveRecord::StatementInvalid) do
252
- connection.execute "insert into testings (#{con.quote_column_name('id')}, #{con.quote_column_name('foo')}, #{con.quote_column_name('bar')}) values (2, 'hello', NULL)"
268
+ assert_raises(ActiveRecord::NotNullViolation) do
269
+ connection.execute("insert into testings (#{quoted_id}, #{quoted_foo}, #{quoted_bar}) values (2, 'hello', NULL)")
253
270
  end
254
271
  end
255
272
 
@@ -258,15 +275,40 @@ module ActiveRecord
258
275
  t.column :foo, :timestamp
259
276
  end
260
277
 
261
- klass = Class.new(ActiveRecord::Base)
262
- klass.table_name = 'testings'
278
+ column = connection.columns(:testings).find { |c| c.name == "foo" }
279
+
280
+ assert_equal :datetime, column.type
281
+
282
+ if current_adapter?(:PostgreSQLAdapter)
283
+ assert_equal "timestamp without time zone", column.sql_type
284
+ elsif current_adapter?(:Mysql2Adapter)
285
+ assert_equal "timestamp", column.sql_type
286
+ elsif current_adapter?(:OracleAdapter, :IBM_DBAdapter)
287
+ assert_equal "timestamp(6)", column.sql_type
288
+ else
289
+ assert_equal connection.type_to_sql("datetime"), column.sql_type
290
+ end
291
+ end
292
+
293
+ def test_change_column_with_timestamp_type
294
+ connection.create_table :testings do |t|
295
+ t.column :foo, :datetime, null: false
296
+ end
297
+
298
+ connection.change_column :testings, :foo, :timestamp
299
+
300
+ column = connection.columns(:testings).find { |c| c.name == "foo" }
263
301
 
264
- assert_equal :datetime, klass.columns_hash['foo'].type
302
+ assert_equal :datetime, column.type
265
303
 
266
304
  if current_adapter?(:PostgreSQLAdapter)
267
- assert_equal 'timestamp without time zone', klass.columns_hash['foo'].sql_type
305
+ assert_equal "timestamp without time zone", column.sql_type
306
+ elsif current_adapter?(:Mysql2Adapter)
307
+ assert_equal "timestamp", column.sql_type
308
+ elsif current_adapter?(:OracleAdapter, :IBM_DBAdapter)
309
+ assert_equal "timestamp(6)", column.sql_type
268
310
  else
269
- assert_equal klass.connection.type_to_sql('datetime'), klass.columns_hash['foo'].sql_type
311
+ assert_equal connection.type_to_sql("datetime"), column.sql_type
270
312
  end
271
313
  end
272
314
 
@@ -275,7 +317,7 @@ module ActiveRecord
275
317
  t.column :select, :string
276
318
  end
277
319
 
278
- connection.change_column :testings, :select, :string, :limit => 10
320
+ connection.change_column :testings, :select, :string, limit: 10
279
321
 
280
322
  # Oracle needs primary key value from sequence
281
323
  if current_adapter?(:OracleAdapter)
@@ -290,17 +332,17 @@ module ActiveRecord
290
332
  t.column :title, :string
291
333
  end
292
334
  person_klass = Class.new(ActiveRecord::Base)
293
- person_klass.table_name = 'testings'
335
+ person_klass.table_name = "testings"
294
336
 
295
- person_klass.connection.add_column "testings", "wealth", :integer, :null => false, :default => 99
337
+ person_klass.connection.add_column "testings", "wealth", :integer, null: false, default: 99
296
338
  person_klass.reset_column_information
297
339
  assert_equal 99, person_klass.column_defaults["wealth"]
298
340
  assert_equal false, person_klass.columns_hash["wealth"].null
299
341
  # Oracle needs primary key value from sequence
300
342
  if current_adapter?(:OracleAdapter)
301
- assert_nothing_raised {person_klass.connection.execute("insert into testings (id, title) values (testings_seq.nextval, 'tester')")}
343
+ assert_nothing_raised { person_klass.connection.execute("insert into testings (id, title) values (testings_seq.nextval, 'tester')") }
302
344
  else
303
- assert_nothing_raised {person_klass.connection.execute("insert into testings (title) values ('tester')")}
345
+ assert_nothing_raised { person_klass.connection.execute("insert into testings (title) values ('tester')") }
304
346
  end
305
347
 
306
348
  # change column default to see that column doesn't lose its not null definition
@@ -317,19 +359,19 @@ module ActiveRecord
317
359
  assert_equal false, person_klass.columns_hash["money"].null
318
360
 
319
361
  # change column
320
- person_klass.connection.change_column "testings", "money", :integer, :null => false, :default => 1000
362
+ person_klass.connection.change_column "testings", "money", :integer, null: false, default: 1000
321
363
  person_klass.reset_column_information
322
364
  assert_equal 1000, person_klass.column_defaults["money"]
323
365
  assert_equal false, person_klass.columns_hash["money"].null
324
366
 
325
367
  # change column, make it nullable and clear default
326
- person_klass.connection.change_column "testings", "money", :integer, :null => true, :default => nil
368
+ person_klass.connection.change_column "testings", "money", :integer, null: true, default: nil
327
369
  person_klass.reset_column_information
328
370
  assert_nil person_klass.columns_hash["money"].default
329
371
  assert_equal true, person_klass.columns_hash["money"].null
330
372
 
331
373
  # change_column_null, make it not nullable and set null values to a default value
332
- person_klass.connection.execute('UPDATE testings SET money = NULL')
374
+ person_klass.connection.execute("UPDATE testings SET money = NULL")
333
375
  person_klass.connection.change_column_null "testings", "money", false, 2000
334
376
  person_klass.reset_column_information
335
377
  assert_nil person_klass.columns_hash["money"].default
@@ -346,9 +388,9 @@ module ActiveRecord
346
388
  end
347
389
  notnull_migration.new.suppress_messages do
348
390
  notnull_migration.migrate(:up)
349
- assert_equal false, connection.columns(:testings).find{ |c| c.name == "foo"}.null
391
+ assert_equal false, connection.columns(:testings).find { |c| c.name == "foo" }.null
350
392
  notnull_migration.migrate(:down)
351
- assert connection.columns(:testings).find{ |c| c.name == "foo"}.null
393
+ assert connection.columns(:testings).find { |c| c.name == "foo" }.null
352
394
  end
353
395
  end
354
396
  end
@@ -365,7 +407,7 @@ module ActiveRecord
365
407
  def test_column_exists_with_type
366
408
  connection.create_table :testings do |t|
367
409
  t.column :foo, :string
368
- t.column :bar, :decimal, :precision => 8, :scale => 2
410
+ t.column :bar, :decimal, precision: 8, scale: 2
369
411
  end
370
412
 
371
413
  assert connection.column_exists?(:testings, :foo, :string)
@@ -380,7 +422,7 @@ module ActiveRecord
380
422
  t.column :foo, :string, limit: 100
381
423
  t.column :bar, :decimal, precision: 8, scale: 2
382
424
  t.column :taggable_id, :integer, null: false
383
- t.column :taggable_type, :string, default: 'Photo'
425
+ t.column :taggable_type, :string, default: "Photo"
384
426
  end
385
427
 
386
428
  assert connection.column_exists?(:testings, :foo, :string, limit: 100)
@@ -389,7 +431,7 @@ module ActiveRecord
389
431
  assert_not connection.column_exists?(:testings, :bar, :decimal, precision: nil, scale: nil)
390
432
  assert connection.column_exists?(:testings, :taggable_id, :integer, null: false)
391
433
  assert_not connection.column_exists?(:testings, :taggable_id, :integer, null: true)
392
- assert connection.column_exists?(:testings, :taggable_type, :string, default: 'Photo')
434
+ assert connection.column_exists?(:testings, :taggable_type, :string, default: "Photo")
393
435
  assert_not connection.column_exists?(:testings, :taggable_type, :string, default: nil)
394
436
  end
395
437
 
@@ -399,15 +441,15 @@ module ActiveRecord
399
441
  end
400
442
  connection.change_table :testings do |t|
401
443
  assert t.column_exists?(:foo)
402
- assert !(t.column_exists?(:bar))
444
+ assert_not (t.column_exists?(:bar))
403
445
  end
404
446
  end
405
447
 
406
448
  def test_drop_table_if_exists
407
449
  connection.create_table(:testings)
408
- ActiveSupport::Deprecation.silence { assert connection.table_exists?(:testings) }
450
+ assert connection.table_exists?(:testings)
409
451
  connection.drop_table(:testings, if_exists: true)
410
- ActiveSupport::Deprecation.silence { assert_not connection.table_exists?(:testings) }
452
+ assert_not connection.table_exists?(:testings)
411
453
  end
412
454
 
413
455
  def test_drop_table_if_exists_nothing_raised
@@ -415,13 +457,13 @@ module ActiveRecord
415
457
  end
416
458
 
417
459
  private
418
- def testing_table_with_only_foo_attribute
419
- connection.create_table :testings, :id => false do |t|
420
- t.column :foo, :string
421
- end
460
+ def testing_table_with_only_foo_attribute
461
+ connection.create_table :testings, id: false do |t|
462
+ t.column :foo, :string
463
+ end
422
464
 
423
- yield
424
- end
465
+ yield
466
+ end
425
467
  end
426
468
 
427
469
  if ActiveRecord::Base.connection.supports_foreign_keys?
@@ -442,7 +484,11 @@ module ActiveRecord
442
484
  end
443
485
 
444
486
  def test_create_table_with_force_cascade_drops_dependent_objects
445
- skip "MySQL > 5.5 does not drop dependent objects with DROP TABLE CASCADE" if current_adapter?(:Mysql2Adapter)
487
+ if current_adapter?(:Mysql2Adapter)
488
+ skip "MySQL > 5.5 does not drop dependent objects with DROP TABLE CASCADE"
489
+ elsif current_adapter?(:SQLite3Adapter)
490
+ skip "SQLite3 does not support DROP TABLE CASCADE syntax"
491
+ end
446
492
  # can't re-create table referenced by foreign key
447
493
  assert_raises(ActiveRecord::StatementInvalid) do
448
494
  @connection.create_table :trains, force: true