ibm_db 5.2.0-x86-mingw32 → 5.4.0-x86-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (625) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +9 -0
  3. data/LICENSE +55 -18
  4. data/README +1 -1
  5. data/debug.log +1 -0
  6. data/ext/Makefile +28 -24
  7. data/ext/ibm_db.c +66 -65
  8. data/ext/ibm_db.o +0 -0
  9. data/ext/ibm_db.so +0 -0
  10. data/ext/mkmf.log +26 -24
  11. data/ext/ruby_ibm_db_cli.c +1 -0
  12. data/ext/ruby_ibm_db_cli.o +0 -0
  13. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +1520 -1282
  14. data/lib/ibm_db.so +1 -0
  15. data/lib/mswin32/ibm_db.rb +3 -1
  16. data/lib/mswin32/rb3x/i386/ruby30/ibm_db.so +0 -0
  17. data/lib/mswin32/rb3x/i386/ruby31/ibm_db.so +0 -0
  18. data/test/active_record/connection_adapters/fake_adapter.rb +5 -2
  19. data/test/activejob/destroy_association_async_test.rb +305 -0
  20. data/test/activejob/destroy_async_job_not_present_test.rb +31 -0
  21. data/test/activejob/helper.rb +15 -0
  22. data/test/assets/schema_dump_5_1.yml +345 -0
  23. data/test/cases/adapter_prevent_writes_test.rb +334 -0
  24. data/test/cases/adapter_test.rb +432 -218
  25. data/test/cases/adapters/mysql2/active_schema_test.rb +85 -75
  26. data/test/cases/adapters/mysql2/auto_increment_test.rb +34 -0
  27. data/test/cases/adapters/mysql2/bind_parameter_test.rb +5 -3
  28. data/test/cases/adapters/mysql2/boolean_test.rb +6 -4
  29. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +26 -24
  30. data/test/cases/adapters/mysql2/charset_collation_test.rb +20 -17
  31. data/test/cases/adapters/mysql2/connection_test.rb +48 -50
  32. data/test/cases/adapters/mysql2/count_deleted_rows_with_lock_test.rb +28 -0
  33. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +23 -19
  34. data/test/cases/adapters/mysql2/enum_test.rb +32 -11
  35. data/test/cases/adapters/mysql2/explain_test.rb +13 -11
  36. data/test/cases/adapters/mysql2/json_test.rb +17 -188
  37. data/test/cases/adapters/mysql2/mysql2_adapter_prevent_writes_test.rb +208 -0
  38. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +183 -28
  39. data/test/cases/adapters/mysql2/nested_deadlock_test.rb +75 -0
  40. data/test/cases/adapters/mysql2/optimizer_hints_test.rb +69 -0
  41. data/test/cases/adapters/mysql2/schema_migrations_test.rb +26 -21
  42. data/test/cases/adapters/mysql2/schema_test.rb +24 -22
  43. data/test/cases/adapters/mysql2/set_test.rb +32 -0
  44. data/test/cases/adapters/mysql2/sp_test.rb +10 -8
  45. data/test/cases/adapters/mysql2/sql_types_test.rb +8 -6
  46. data/test/cases/adapters/mysql2/table_options_test.rb +93 -10
  47. data/test/cases/adapters/mysql2/transaction_test.rb +151 -0
  48. data/test/cases/adapters/mysql2/unsigned_type_test.rb +11 -9
  49. data/test/cases/adapters/mysql2/virtual_column_test.rb +66 -0
  50. data/test/cases/adapters/postgresql/active_schema_test.rb +40 -25
  51. data/test/cases/adapters/postgresql/array_test.rb +118 -63
  52. data/test/cases/adapters/postgresql/bit_string_test.rb +12 -10
  53. data/test/cases/adapters/postgresql/bytea_test.rb +26 -25
  54. data/test/cases/adapters/postgresql/case_insensitive_test.rb +10 -9
  55. data/test/cases/adapters/postgresql/change_schema_test.rb +7 -5
  56. data/test/cases/adapters/postgresql/cidr_test.rb +2 -0
  57. data/test/cases/adapters/postgresql/citext_test.rb +58 -58
  58. data/test/cases/adapters/postgresql/collation_test.rb +17 -15
  59. data/test/cases/adapters/postgresql/composite_test.rb +25 -23
  60. data/test/cases/adapters/postgresql/connection_test.rb +73 -85
  61. data/test/cases/adapters/postgresql/create_unlogged_tables_test.rb +74 -0
  62. data/test/cases/adapters/postgresql/datatype_test.rb +19 -22
  63. data/test/cases/adapters/postgresql/date_test.rb +42 -0
  64. data/test/cases/adapters/postgresql/domain_test.rb +9 -7
  65. data/test/cases/adapters/postgresql/enum_test.rb +12 -10
  66. data/test/cases/adapters/postgresql/explain_test.rb +10 -8
  67. data/test/cases/adapters/postgresql/extension_migration_test.rb +13 -12
  68. data/test/cases/adapters/postgresql/foreign_table_test.rb +109 -0
  69. data/test/cases/adapters/postgresql/full_text_test.rb +8 -6
  70. data/test/cases/adapters/postgresql/geometric_test.rb +57 -63
  71. data/test/cases/adapters/postgresql/hstore_test.rb +288 -280
  72. data/test/cases/adapters/postgresql/infinity_test.rb +54 -15
  73. data/test/cases/adapters/postgresql/integer_test.rb +2 -0
  74. data/test/cases/adapters/postgresql/interval_test.rb +99 -0
  75. data/test/cases/adapters/postgresql/json_test.rb +16 -201
  76. data/test/cases/adapters/postgresql/ltree_test.rb +14 -16
  77. data/test/cases/adapters/postgresql/money_test.rb +47 -16
  78. data/test/cases/adapters/postgresql/network_test.rb +36 -28
  79. data/test/cases/adapters/postgresql/numbers_test.rb +7 -5
  80. data/test/cases/adapters/postgresql/optimizer_hints_test.rb +71 -0
  81. data/test/cases/adapters/postgresql/partitions_test.rb +22 -0
  82. data/test/cases/adapters/postgresql/postgresql_adapter_prevent_writes_test.rb +205 -0
  83. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +178 -136
  84. data/test/cases/adapters/postgresql/prepared_statements_disabled_test.rb +27 -0
  85. data/test/cases/adapters/postgresql/quoting_test.rb +12 -6
  86. data/test/cases/adapters/postgresql/range_test.rb +406 -292
  87. data/test/cases/adapters/postgresql/referential_integrity_test.rb +16 -15
  88. data/test/cases/adapters/postgresql/rename_table_test.rb +9 -8
  89. data/test/cases/adapters/postgresql/schema_authorization_test.rb +14 -23
  90. data/test/cases/adapters/postgresql/schema_test.rb +207 -91
  91. data/test/cases/adapters/postgresql/serial_test.rb +9 -7
  92. data/test/cases/adapters/postgresql/statement_pool_test.rb +26 -6
  93. data/test/cases/adapters/postgresql/timestamp_test.rb +17 -15
  94. data/test/cases/adapters/postgresql/transaction_nested_test.rb +114 -0
  95. data/test/cases/adapters/postgresql/transaction_test.rb +189 -0
  96. data/test/cases/adapters/postgresql/type_lookup_test.rb +12 -10
  97. data/test/cases/adapters/postgresql/utils_test.rb +11 -9
  98. data/test/cases/adapters/postgresql/uuid_test.rb +226 -109
  99. data/test/cases/adapters/postgresql/xml_test.rb +10 -14
  100. data/test/cases/adapters/sqlite3/collation_test.rb +26 -15
  101. data/test/cases/adapters/sqlite3/copy_table_test.rb +31 -28
  102. data/test/cases/adapters/sqlite3/explain_test.rb +13 -11
  103. data/test/cases/adapters/sqlite3/json_test.rb +29 -0
  104. data/test/cases/adapters/sqlite3/quoting_test.rb +35 -57
  105. data/test/cases/adapters/sqlite3/sqlite3_adapter_prevent_writes_test.rb +186 -0
  106. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +318 -131
  107. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +11 -11
  108. data/test/cases/adapters/sqlite3/statement_pool_test.rb +7 -6
  109. data/test/cases/adapters/sqlite3/transaction_test.rb +123 -0
  110. data/test/cases/aggregations_test.rb +14 -12
  111. data/test/cases/annotate_test.rb +46 -0
  112. data/test/cases/ar_schema_test.rb +153 -86
  113. data/test/cases/arel/attributes/attribute_test.rb +1145 -0
  114. data/test/cases/arel/attributes/math_test.rb +83 -0
  115. data/test/cases/arel/attributes_test.rb +27 -0
  116. data/test/cases/arel/collectors/bind_test.rb +40 -0
  117. data/test/cases/arel/collectors/composite_test.rb +47 -0
  118. data/test/cases/arel/collectors/sql_string_test.rb +41 -0
  119. data/test/cases/arel/collectors/substitute_bind_collector_test.rb +48 -0
  120. data/test/cases/arel/crud_test.rb +65 -0
  121. data/test/cases/arel/delete_manager_test.rb +53 -0
  122. data/test/cases/arel/factory_methods_test.rb +46 -0
  123. data/test/cases/arel/helper.rb +45 -0
  124. data/test/cases/arel/insert_manager_test.rb +241 -0
  125. data/test/cases/arel/nodes/and_test.rb +30 -0
  126. data/test/cases/arel/nodes/as_test.rb +36 -0
  127. data/test/cases/arel/nodes/ascending_test.rb +46 -0
  128. data/test/cases/arel/nodes/bin_test.rb +35 -0
  129. data/test/cases/arel/nodes/binary_test.rb +29 -0
  130. data/test/cases/arel/nodes/bind_param_test.rb +22 -0
  131. data/test/cases/arel/nodes/case_test.rb +96 -0
  132. data/test/cases/arel/nodes/casted_test.rb +18 -0
  133. data/test/cases/arel/nodes/comment_test.rb +22 -0
  134. data/test/cases/arel/nodes/count_test.rb +35 -0
  135. data/test/cases/arel/nodes/delete_statement_test.rb +36 -0
  136. data/test/cases/arel/nodes/descending_test.rb +46 -0
  137. data/test/cases/arel/nodes/distinct_test.rb +21 -0
  138. data/test/cases/arel/nodes/equality_test.rb +62 -0
  139. data/test/cases/arel/nodes/extract_test.rb +43 -0
  140. data/test/cases/arel/nodes/false_test.rb +21 -0
  141. data/test/cases/arel/nodes/grouping_test.rb +26 -0
  142. data/test/cases/arel/nodes/infix_operation_test.rb +42 -0
  143. data/test/cases/arel/nodes/insert_statement_test.rb +44 -0
  144. data/test/cases/arel/nodes/named_function_test.rb +48 -0
  145. data/test/cases/arel/nodes/node_test.rb +22 -0
  146. data/test/cases/arel/nodes/not_test.rb +31 -0
  147. data/test/cases/arel/nodes/or_test.rb +36 -0
  148. data/test/cases/arel/nodes/over_test.rb +69 -0
  149. data/test/cases/arel/nodes/select_core_test.rb +79 -0
  150. data/test/cases/arel/nodes/select_statement_test.rb +51 -0
  151. data/test/cases/arel/nodes/sql_literal_test.rb +75 -0
  152. data/test/cases/arel/nodes/sum_test.rb +35 -0
  153. data/test/cases/arel/nodes/table_alias_test.rb +29 -0
  154. data/test/cases/arel/nodes/true_test.rb +21 -0
  155. data/test/cases/arel/nodes/unary_operation_test.rb +41 -0
  156. data/test/cases/arel/nodes/update_statement_test.rb +60 -0
  157. data/test/cases/arel/nodes/window_test.rb +81 -0
  158. data/test/cases/arel/nodes_test.rb +34 -0
  159. data/test/cases/arel/select_manager_test.rb +1238 -0
  160. data/test/cases/arel/support/fake_record.rb +135 -0
  161. data/test/cases/arel/table_test.rb +216 -0
  162. data/test/cases/arel/update_manager_test.rb +126 -0
  163. data/test/cases/arel/visitors/dispatch_contamination_test.rb +78 -0
  164. data/test/cases/arel/visitors/dot_test.rb +90 -0
  165. data/test/cases/arel/visitors/mysql_test.rb +157 -0
  166. data/test/cases/arel/visitors/postgres_test.rb +366 -0
  167. data/test/cases/arel/visitors/sqlite_test.rb +75 -0
  168. data/test/cases/arel/visitors/to_sql_test.rb +750 -0
  169. data/test/cases/associations/belongs_to_associations_test.rb +510 -158
  170. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +4 -2
  171. data/test/cases/associations/callbacks_test.rb +56 -38
  172. data/test/cases/associations/cascaded_eager_loading_test.rb +118 -61
  173. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +138 -18
  174. data/test/cases/associations/eager_load_nested_include_test.rb +38 -37
  175. data/test/cases/associations/eager_singularization_test.rb +21 -21
  176. data/test/cases/associations/eager_test.rb +559 -415
  177. data/test/cases/associations/extension_test.rb +18 -12
  178. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +234 -213
  179. data/test/cases/associations/has_many_associations_test.rb +1038 -465
  180. data/test/cases/associations/has_many_through_associations_test.rb +558 -249
  181. data/test/cases/associations/has_one_associations_test.rb +294 -129
  182. data/test/cases/associations/has_one_through_associations_test.rb +121 -75
  183. data/test/cases/associations/inner_join_association_test.rb +114 -38
  184. data/test/cases/associations/inverse_associations_test.rb +606 -398
  185. data/test/cases/associations/join_model_test.rb +158 -148
  186. data/test/cases/associations/left_outer_join_association_test.rb +59 -24
  187. data/test/cases/associations/nested_through_associations_test.rb +166 -109
  188. data/test/cases/associations/required_test.rb +35 -10
  189. data/test/cases/associations_test.rb +241 -110
  190. data/test/cases/attribute_methods/read_test.rb +11 -11
  191. data/test/cases/attribute_methods_test.rb +413 -298
  192. data/test/cases/attributes_test.rb +145 -27
  193. data/test/cases/autosave_association_test.rb +681 -436
  194. data/test/cases/base_prevent_writes_test.rb +229 -0
  195. data/test/cases/base_test.rb +599 -542
  196. data/test/cases/batches_test.rb +288 -82
  197. data/test/cases/binary_test.rb +26 -31
  198. data/test/cases/bind_parameter_test.rb +194 -21
  199. data/test/cases/boolean_test.rb +52 -0
  200. data/test/cases/cache_key_test.rb +110 -5
  201. data/test/cases/calculations_test.rb +740 -177
  202. data/test/cases/callbacks_test.rb +74 -207
  203. data/test/cases/clone_test.rb +15 -10
  204. data/test/cases/coders/json_test.rb +2 -0
  205. data/test/cases/coders/yaml_column_test.rb +16 -13
  206. data/test/cases/collection_cache_key_test.rb +177 -20
  207. data/test/cases/column_alias_test.rb +9 -7
  208. data/test/cases/column_definition_test.rb +10 -68
  209. data/test/cases/comment_test.rb +166 -107
  210. data/test/cases/connection_adapters/adapter_leasing_test.rb +14 -10
  211. data/test/cases/connection_adapters/connection_handler_test.rb +358 -51
  212. data/test/cases/connection_adapters/connection_handlers_multi_db_test.rb +400 -0
  213. data/test/cases/connection_adapters/connection_handlers_multi_pool_config_test.rb +103 -0
  214. data/test/cases/connection_adapters/connection_handlers_sharding_db_test.rb +499 -0
  215. data/test/cases/connection_adapters/connection_swapping_nested_test.rb +457 -0
  216. data/test/cases/connection_adapters/legacy_connection_handlers_multi_db_test.rb +486 -0
  217. data/test/cases/connection_adapters/legacy_connection_handlers_sharding_db_test.rb +586 -0
  218. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +319 -138
  219. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +62 -50
  220. data/test/cases/connection_adapters/schema_cache_test.rb +259 -26
  221. data/test/cases/connection_adapters/type_lookup_test.rb +96 -95
  222. data/test/cases/connection_management_test.rb +13 -11
  223. data/test/cases/connection_pool_test.rb +316 -83
  224. data/test/cases/core_test.rb +82 -58
  225. data/test/cases/counter_cache_test.rb +204 -50
  226. data/test/cases/custom_locking_test.rb +5 -3
  227. data/test/cases/database_configurations/hash_config_test.rb +74 -0
  228. data/test/cases/database_configurations/resolver_test.rb +150 -0
  229. data/test/cases/database_configurations_test.rb +145 -0
  230. data/test/cases/database_selector_test.rb +296 -0
  231. data/test/cases/database_statements_test.rb +18 -16
  232. data/test/cases/date_test.rb +8 -16
  233. data/test/cases/date_time_precision_test.rb +100 -78
  234. data/test/cases/date_time_test.rb +23 -8
  235. data/test/cases/defaults_test.rb +106 -71
  236. data/test/cases/delegated_type_test.rb +57 -0
  237. data/test/cases/dirty_test.rb +419 -223
  238. data/test/cases/disconnected_test.rb +6 -6
  239. data/test/cases/dup_test.rb +54 -27
  240. data/test/cases/enum_test.rb +461 -82
  241. data/test/cases/errors_test.rb +7 -7
  242. data/test/cases/explain_subscriber_test.rb +17 -15
  243. data/test/cases/explain_test.rb +11 -19
  244. data/test/cases/filter_attributes_test.rb +153 -0
  245. data/test/cases/finder_respond_to_test.rb +14 -14
  246. data/test/cases/finder_test.rb +669 -287
  247. data/test/cases/fixture_set/file_test.rb +34 -38
  248. data/test/cases/fixtures_test.rb +833 -176
  249. data/test/cases/forbidden_attributes_protection_test.rb +32 -67
  250. data/test/cases/habtm_destroy_order_test.rb +25 -25
  251. data/test/cases/helper.rb +78 -49
  252. data/test/cases/hot_compatibility_test.rb +33 -32
  253. data/test/cases/i18n_test.rb +18 -17
  254. data/test/cases/inheritance_test.rb +180 -115
  255. data/test/cases/insert_all_test.rb +489 -0
  256. data/test/cases/instrumentation_test.rb +101 -0
  257. data/test/cases/integration_test.rb +119 -31
  258. data/test/cases/invalid_connection_test.rb +18 -16
  259. data/test/cases/invertible_migration_test.rb +183 -43
  260. data/test/cases/json_attribute_test.rb +35 -0
  261. data/test/cases/json_serialization_test.rb +57 -58
  262. data/test/cases/json_shared_test_cases.rb +290 -0
  263. data/test/cases/locking_test.rb +413 -119
  264. data/test/cases/log_subscriber_test.rb +68 -26
  265. data/test/cases/marshal_serialization_test.rb +39 -0
  266. data/test/cases/migration/change_schema_test.rb +118 -72
  267. data/test/cases/migration/change_table_test.rb +138 -30
  268. data/test/cases/migration/check_constraint_test.rb +162 -0
  269. data/test/cases/migration/column_attributes_test.rb +45 -35
  270. data/test/cases/migration/column_positioning_test.rb +18 -6
  271. data/test/cases/migration/columns_test.rb +93 -77
  272. data/test/cases/migration/command_recorder_test.rb +121 -34
  273. data/test/cases/migration/compatibility_test.rb +578 -23
  274. data/test/cases/migration/create_join_table_test.rb +35 -25
  275. data/test/cases/migration/foreign_key_test.rb +503 -284
  276. data/test/cases/migration/helper.rb +4 -3
  277. data/test/cases/migration/index_test.rb +119 -70
  278. data/test/cases/migration/logger_test.rb +9 -6
  279. data/test/cases/migration/pending_migrations_test.rb +88 -34
  280. data/test/cases/migration/references_foreign_key_test.rb +164 -150
  281. data/test/cases/migration/references_index_test.rb +38 -19
  282. data/test/cases/migration/references_statements_test.rb +15 -14
  283. data/test/cases/migration/rename_table_test.rb +53 -30
  284. data/test/cases/migration_test.rb +637 -269
  285. data/test/cases/migrator_test.rb +191 -135
  286. data/test/cases/mixin_test.rb +7 -11
  287. data/test/cases/modules_test.rb +36 -34
  288. data/test/cases/multi_db_migrator_test.rb +223 -0
  289. data/test/cases/multiparameter_attributes_test.rb +60 -33
  290. data/test/cases/multiple_db_test.rb +16 -22
  291. data/test/cases/nested_attributes_test.rb +341 -320
  292. data/test/cases/nested_attributes_with_callbacks_test.rb +26 -24
  293. data/test/cases/null_relation_test.rb +84 -0
  294. data/test/cases/numeric_data_test.rb +93 -0
  295. data/test/cases/persistence_test.rb +361 -269
  296. data/test/cases/pooled_connections_test.rb +18 -26
  297. data/test/cases/prepared_statement_status_test.rb +48 -0
  298. data/test/cases/primary_keys_test.rb +210 -104
  299. data/test/cases/query_cache_test.rb +610 -141
  300. data/test/cases/quoting_test.rb +132 -31
  301. data/test/cases/readonly_test.rb +49 -48
  302. data/test/cases/reaper_test.rb +146 -32
  303. data/test/cases/reflection_test.rb +167 -156
  304. data/test/cases/relation/delegation_test.rb +49 -36
  305. data/test/cases/relation/delete_all_test.rb +117 -0
  306. data/test/cases/relation/merging_test.rb +319 -42
  307. data/test/cases/relation/mutation_test.rb +55 -93
  308. data/test/cases/relation/or_test.rb +129 -29
  309. data/test/cases/relation/predicate_builder_test.rb +21 -6
  310. data/test/cases/relation/record_fetch_warning_test.rb +5 -3
  311. data/test/cases/relation/select_test.rb +67 -0
  312. data/test/cases/relation/update_all_test.rb +317 -0
  313. data/test/cases/relation/where_chain_test.rb +68 -32
  314. data/test/cases/relation/where_clause_test.rb +136 -61
  315. data/test/cases/relation/where_test.rb +155 -48
  316. data/test/cases/relation_test.rb +266 -112
  317. data/test/cases/relations_test.rb +969 -744
  318. data/test/cases/reload_models_test.rb +13 -9
  319. data/test/cases/reserved_word_test.rb +141 -0
  320. data/test/cases/result_test.rb +68 -17
  321. data/test/cases/sanitize_test.rb +87 -71
  322. data/test/cases/schema_dumper_test.rb +221 -128
  323. data/test/cases/schema_loading_test.rb +3 -2
  324. data/test/cases/scoping/default_scoping_test.rb +185 -144
  325. data/test/cases/scoping/named_scoping_test.rb +177 -89
  326. data/test/cases/scoping/relation_scoping_test.rb +197 -75
  327. data/test/cases/secure_token_test.rb +18 -3
  328. data/test/cases/serialization_test.rb +30 -28
  329. data/test/cases/serialized_attribute_test.rb +133 -42
  330. data/test/cases/signed_id_test.rb +168 -0
  331. data/test/cases/statement_cache_test.rb +41 -24
  332. data/test/cases/statement_invalid_test.rb +42 -0
  333. data/test/cases/store_test.rb +180 -55
  334. data/test/cases/strict_loading_test.rb +473 -0
  335. data/test/cases/suppressor_test.rb +26 -12
  336. data/test/cases/tasks/database_tasks_test.rb +1258 -194
  337. data/test/cases/tasks/mysql_rake_test.rb +370 -298
  338. data/test/cases/tasks/postgresql_rake_test.rb +481 -251
  339. data/test/cases/tasks/sqlite_rake_test.rb +225 -178
  340. data/test/cases/test_case.rb +51 -40
  341. data/test/cases/test_databases_test.rb +79 -0
  342. data/test/cases/test_fixtures_test.rb +79 -19
  343. data/test/cases/time_precision_test.rb +98 -76
  344. data/test/cases/timestamp_test.rb +102 -99
  345. data/test/cases/touch_later_test.rb +12 -10
  346. data/test/cases/transaction_callbacks_test.rb +344 -90
  347. data/test/cases/transaction_isolation_test.rb +12 -12
  348. data/test/cases/transactions_test.rb +612 -162
  349. data/test/cases/type/adapter_specific_registry_test.rb +14 -2
  350. data/test/cases/type/date_time_test.rb +4 -2
  351. data/test/cases/type/integer_test.rb +4 -2
  352. data/test/cases/type/string_test.rb +10 -8
  353. data/test/cases/type/time_test.rb +28 -0
  354. data/test/cases/type/type_map_test.rb +29 -28
  355. data/test/cases/type/unsigned_integer_test.rb +19 -0
  356. data/test/cases/type_test.rb +2 -0
  357. data/test/cases/types_test.rb +3 -1
  358. data/test/cases/unconnected_test.rb +14 -1
  359. data/test/cases/unsafe_raw_sql_test.rb +274 -0
  360. data/test/cases/validations/absence_validation_test.rb +19 -17
  361. data/test/cases/validations/association_validation_test.rb +30 -28
  362. data/test/cases/validations/i18n_generate_message_validation_test.rb +34 -16
  363. data/test/cases/validations/i18n_validation_test.rb +22 -21
  364. data/test/cases/validations/length_validation_test.rb +34 -33
  365. data/test/cases/validations/numericality_validation_test.rb +181 -0
  366. data/test/cases/validations/presence_validation_test.rb +21 -19
  367. data/test/cases/validations/uniqueness_validation_test.rb +156 -86
  368. data/test/cases/validations_repair_helper.rb +2 -0
  369. data/test/cases/validations_test.rb +61 -26
  370. data/test/cases/view_test.rb +122 -116
  371. data/test/cases/yaml_serialization_test.rb +79 -34
  372. data/test/config.example.yml +19 -19
  373. data/test/config.rb +3 -1
  374. data/test/config.yml +16 -6
  375. data/test/fixtures/all/namespaced/accounts.yml +2 -0
  376. data/test/fixtures/author_addresses.yml +1 -8
  377. data/test/fixtures/authors.yml +1 -7
  378. data/test/fixtures/binaries.yml +4 -0
  379. data/test/fixtures/books.yml +9 -2
  380. data/test/fixtures/categories_posts.yml +3 -0
  381. data/test/fixtures/citations.yml +5 -0
  382. data/test/fixtures/comments.yml +7 -0
  383. data/test/fixtures/companies.yml +5 -0
  384. data/test/fixtures/computers.yml +2 -0
  385. data/test/fixtures/customers.yml +10 -1
  386. data/test/fixtures/developers.yml +1 -1
  387. data/test/fixtures/essays.yml +10 -0
  388. data/test/fixtures/faces.yml +3 -3
  389. data/test/fixtures/humans.yml +5 -0
  390. data/test/fixtures/interests.yml +7 -7
  391. data/test/fixtures/memberships.yml +7 -0
  392. data/test/fixtures/minimalistics.yml +3 -0
  393. data/test/fixtures/mixed_case_monkeys.yml +2 -2
  394. data/test/fixtures/naked/yml/courses_with_invalid_key.yml +3 -0
  395. data/test/fixtures/naked/yml/parrots.yml +1 -0
  396. data/test/fixtures/other_books.yml +26 -0
  397. data/test/fixtures/other_posts.yml +1 -0
  398. data/test/fixtures/parrots.yml +7 -1
  399. data/test/fixtures/pirates.yml +3 -0
  400. data/test/fixtures/posts.yml +11 -3
  401. data/test/fixtures/readers.yml +6 -0
  402. data/test/fixtures/reserved_words/values.yml +2 -2
  403. data/test/fixtures/sponsors.yml +3 -0
  404. data/test/fixtures/strict_zines.yml +2 -0
  405. data/test/fixtures/subscribers.yml +1 -1
  406. data/test/fixtures/tasks.yml +1 -1
  407. data/test/fixtures/warehouse-things.yml +3 -0
  408. data/test/migrations/10_urban/9_add_expressions.rb +2 -0
  409. data/test/migrations/decimal/1_give_me_big_numbers.rb +6 -4
  410. data/test/migrations/magic/1_currencies_have_symbols.rb +3 -2
  411. data/test/migrations/missing/1000_people_have_middle_names.rb +2 -0
  412. data/test/migrations/missing/1_people_have_last_names.rb +2 -0
  413. data/test/migrations/missing/3_we_need_reminders.rb +2 -0
  414. data/test/migrations/missing/4_innocent_jointable.rb +3 -1
  415. data/test/migrations/rename/1_we_need_things.rb +2 -0
  416. data/test/migrations/rename/2_rename_things.rb +2 -0
  417. data/test/migrations/to_copy/1_people_have_hobbies.rb +3 -1
  418. data/test/migrations/to_copy/2_people_have_descriptions.rb +3 -1
  419. data/test/migrations/to_copy2/1_create_articles.rb +2 -0
  420. data/test/migrations/to_copy2/2_create_comments.rb +3 -1
  421. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +3 -1
  422. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +3 -1
  423. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +3 -1
  424. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +2 -0
  425. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +2 -0
  426. data/test/migrations/valid/1_valid_people_have_last_names.rb +2 -0
  427. data/test/migrations/valid/2_we_need_reminders.rb +2 -0
  428. data/test/migrations/valid/3_innocent_jointable.rb +3 -1
  429. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +2 -0
  430. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -0
  431. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +3 -1
  432. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +2 -0
  433. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +2 -0
  434. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +3 -1
  435. data/test/migrations/version_check/20131219224947_migration_version_check.rb +2 -0
  436. data/test/models/account.rb +46 -0
  437. data/test/models/admin/account.rb +3 -1
  438. data/test/models/admin/randomly_named_c1.rb +2 -0
  439. data/test/models/admin/user.rb +16 -8
  440. data/test/models/admin.rb +4 -2
  441. data/test/models/aircraft.rb +3 -1
  442. data/test/models/arunit2_model.rb +2 -0
  443. data/test/models/author.rb +153 -102
  444. data/test/models/auto_id.rb +2 -0
  445. data/test/models/autoloadable/extra_firm.rb +2 -0
  446. data/test/models/binary.rb +3 -1
  447. data/test/models/binary_field.rb +6 -0
  448. data/test/models/bird.rb +13 -1
  449. data/test/models/book.rb +14 -4
  450. data/test/models/book_destroy_async.rb +24 -0
  451. data/test/models/boolean.rb +5 -0
  452. data/test/models/bulb.rb +13 -4
  453. data/test/models/cake_designer.rb +2 -0
  454. data/test/models/car.rb +17 -10
  455. data/test/models/carrier.rb +2 -0
  456. data/test/models/cart.rb +5 -0
  457. data/test/models/cat.rb +2 -0
  458. data/test/models/categorization.rb +8 -6
  459. data/test/models/category.rb +28 -16
  460. data/test/models/chef.rb +2 -0
  461. data/test/models/citation.rb +5 -1
  462. data/test/models/club.rb +13 -10
  463. data/test/models/college.rb +4 -2
  464. data/test/models/column.rb +2 -0
  465. data/test/models/column_name.rb +2 -0
  466. data/test/models/comment.rb +32 -10
  467. data/test/models/company.rb +102 -106
  468. data/test/models/company_in_module.rb +27 -26
  469. data/test/models/computer.rb +3 -1
  470. data/test/models/contact.rb +15 -13
  471. data/test/models/content.rb +5 -3
  472. data/test/models/contract.rb +21 -3
  473. data/test/models/country.rb +2 -4
  474. data/test/models/course.rb +3 -1
  475. data/test/models/customer.rb +10 -8
  476. data/test/models/customer_carrier.rb +2 -0
  477. data/test/models/dashboard.rb +2 -0
  478. data/test/models/default.rb +2 -0
  479. data/test/models/department.rb +2 -0
  480. data/test/models/destroy_async_parent.rb +15 -0
  481. data/test/models/destroy_async_parent_soft_delete.rb +20 -0
  482. data/test/models/developer.rb +152 -85
  483. data/test/models/dl_keyed_belongs_to.rb +13 -0
  484. data/test/models/dl_keyed_belongs_to_soft_delete.rb +19 -0
  485. data/test/models/dl_keyed_has_many.rb +5 -0
  486. data/test/models/dl_keyed_has_many_through.rb +5 -0
  487. data/test/models/dl_keyed_has_one.rb +5 -0
  488. data/test/models/dl_keyed_join.rb +10 -0
  489. data/test/models/dog.rb +2 -0
  490. data/test/models/dog_lover.rb +2 -0
  491. data/test/models/doubloon.rb +3 -1
  492. data/test/models/drink_designer.rb +17 -0
  493. data/test/models/edge.rb +4 -2
  494. data/test/models/electron.rb +2 -0
  495. data/test/models/engine.rb +3 -2
  496. data/test/models/entrant.rb +2 -0
  497. data/test/models/entry.rb +5 -0
  498. data/test/models/essay.rb +6 -3
  499. data/test/models/essay_destroy_async.rb +12 -0
  500. data/test/models/event.rb +3 -1
  501. data/test/models/eye.rb +5 -3
  502. data/test/models/face.rb +14 -6
  503. data/test/models/family.rb +6 -0
  504. data/test/models/family_tree.rb +6 -0
  505. data/test/models/friendship.rb +5 -3
  506. data/test/models/frog.rb +8 -0
  507. data/test/models/guid.rb +3 -1
  508. data/test/models/guitar.rb +2 -0
  509. data/test/models/hotel.rb +5 -3
  510. data/test/models/human.rb +39 -0
  511. data/test/models/image.rb +3 -1
  512. data/test/models/interest.rb +14 -3
  513. data/test/models/invoice.rb +4 -2
  514. data/test/models/item.rb +3 -1
  515. data/test/models/job.rb +5 -3
  516. data/test/models/joke.rb +4 -2
  517. data/test/models/keyboard.rb +3 -1
  518. data/test/models/legacy_thing.rb +2 -0
  519. data/test/models/lesson.rb +2 -0
  520. data/test/models/line_item.rb +3 -1
  521. data/test/models/liquid.rb +2 -0
  522. data/test/models/matey.rb +3 -1
  523. data/test/models/measurement.rb +4 -0
  524. data/test/models/member.rb +23 -20
  525. data/test/models/member_detail.rb +3 -0
  526. data/test/models/member_type.rb +2 -0
  527. data/test/models/membership.rb +4 -1
  528. data/test/models/mentor.rb +3 -1
  529. data/test/models/message.rb +5 -0
  530. data/test/models/minimalistic.rb +2 -0
  531. data/test/models/minivan.rb +3 -2
  532. data/test/models/mixed_case_monkey.rb +3 -1
  533. data/test/models/molecule.rb +2 -0
  534. data/test/models/mouse.rb +6 -0
  535. data/test/models/movie.rb +2 -0
  536. data/test/models/node.rb +4 -2
  537. data/test/models/non_primary_key.rb +2 -0
  538. data/test/models/notification.rb +2 -0
  539. data/test/models/numeric_data.rb +12 -0
  540. data/test/models/order.rb +4 -2
  541. data/test/models/organization.rb +9 -7
  542. data/test/models/other_dog.rb +3 -1
  543. data/test/models/owner.rb +6 -4
  544. data/test/models/parrot.rb +12 -4
  545. data/test/models/person.rb +59 -54
  546. data/test/models/personal_legacy_thing.rb +3 -1
  547. data/test/models/pet.rb +4 -2
  548. data/test/models/pet_treasure.rb +2 -0
  549. data/test/models/pirate.rb +67 -43
  550. data/test/models/possession.rb +3 -1
  551. data/test/models/post.rb +184 -86
  552. data/test/models/price_estimate.rb +11 -1
  553. data/test/models/professor.rb +3 -1
  554. data/test/models/project.rb +14 -12
  555. data/test/models/publisher/article.rb +2 -0
  556. data/test/models/publisher/magazine.rb +2 -0
  557. data/test/models/publisher.rb +2 -0
  558. data/test/models/randomly_named_c1.rb +2 -0
  559. data/test/models/rating.rb +5 -1
  560. data/test/models/reader.rb +7 -5
  561. data/test/models/recipe.rb +2 -0
  562. data/test/models/record.rb +2 -0
  563. data/test/models/reference.rb +6 -3
  564. data/test/models/reply.rb +39 -21
  565. data/test/models/room.rb +6 -0
  566. data/test/models/section.rb +6 -0
  567. data/test/models/seminar.rb +6 -0
  568. data/test/models/session.rb +6 -0
  569. data/test/models/ship.rb +12 -9
  570. data/test/models/ship_part.rb +5 -3
  571. data/test/models/shop.rb +4 -2
  572. data/test/models/shop_account.rb +2 -0
  573. data/test/models/speedometer.rb +2 -0
  574. data/test/models/sponsor.rb +8 -5
  575. data/test/models/squeak.rb +6 -0
  576. data/test/models/strict_zine.rb +7 -0
  577. data/test/models/string_key_object.rb +2 -0
  578. data/test/models/student.rb +2 -0
  579. data/test/models/subscriber.rb +4 -2
  580. data/test/models/subscription.rb +5 -1
  581. data/test/models/tag.rb +6 -3
  582. data/test/models/tagging.rb +13 -6
  583. data/test/models/task.rb +2 -0
  584. data/test/models/topic.rb +54 -19
  585. data/test/models/toy.rb +4 -0
  586. data/test/models/traffic_light.rb +2 -0
  587. data/test/models/treasure.rb +5 -3
  588. data/test/models/treaty.rb +2 -4
  589. data/test/models/tree.rb +2 -0
  590. data/test/models/tuning_peg.rb +2 -0
  591. data/test/models/tyre.rb +2 -0
  592. data/test/models/user.rb +12 -4
  593. data/test/models/uuid_child.rb +2 -0
  594. data/test/models/uuid_item.rb +2 -0
  595. data/test/models/uuid_parent.rb +2 -0
  596. data/test/models/vegetables.rb +12 -3
  597. data/test/models/vertex.rb +6 -4
  598. data/test/models/warehouse_thing.rb +2 -0
  599. data/test/models/wheel.rb +3 -1
  600. data/test/models/without_table.rb +3 -1
  601. data/test/models/zine.rb +3 -1
  602. data/test/schema/mysql2_specific_schema.rb +49 -35
  603. data/test/schema/oracle_specific_schema.rb +13 -15
  604. data/test/schema/postgresql_specific_schema.rb +51 -40
  605. data/test/schema/schema.rb +334 -154
  606. data/test/schema/sqlite_specific_schema.rb +9 -16
  607. data/test/support/config.rb +26 -26
  608. data/test/support/connection.rb +14 -8
  609. data/test/support/connection_helper.rb +3 -1
  610. data/test/support/ddl_helper.rb +2 -0
  611. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic.dump +0 -0
  612. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic_associations.dump +0 -0
  613. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic.dump +0 -0
  614. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic_associations.dump +0 -0
  615. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic.dump +0 -0
  616. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic_associations.dump +0 -0
  617. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic.dump +0 -0
  618. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic_associations.dump +0 -0
  619. data/test/support/marshal_compatibility_fixtures/legacy_6_0_record_mysql.dump +0 -0
  620. data/test/support/marshal_compatibility_fixtures/legacy_relation.dump +0 -0
  621. data/test/support/schema_dumping_helper.rb +2 -0
  622. data/test/support/stubs/strong_parameters.rb +40 -0
  623. data/test/support/yaml_compatibility_fixtures/rails_v1_mysql.yml +206 -0
  624. data/test/support/yaml_compatibility_fixtures/rails_v2.yml +55 -0
  625. metadata +192 -14
@@ -1,4 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cases/helper"
4
+ require "support/connection_helper"
2
5
  require "models/book"
3
6
  require "models/post"
4
7
  require "models/author"
@@ -6,140 +9,152 @@ require "models/event"
6
9
 
7
10
  module ActiveRecord
8
11
  class AdapterTest < ActiveRecord::TestCase
9
- def setup
12
+ def setup
10
13
  @connection = ActiveRecord::Base.connection
14
+ @connection.materialize_transactions
11
15
  end
12
16
 
13
17
  ##
14
18
  # PostgreSQL does not support null bytes in strings
15
- unless current_adapter?(:PostgreSQLAdapter, :IBM_DBAdapter) ||
19
+ unless current_adapter?(:PostgreSQLAdapter) ||
16
20
  (current_adapter?(:SQLite3Adapter) && !ActiveRecord::Base.connection.prepared_statements)
17
21
  def test_update_prepared_statement
18
22
  b = Book.create(name: "my \x00 book")
19
23
  b.reload
20
24
  assert_equal "my \x00 book", b.name
21
- b.update_attributes(name: "my other \x00 book")
25
+ b.update(name: "my other \x00 book")
22
26
  b.reload
23
27
  assert_equal "my other \x00 book", b.name
24
28
  end
25
29
  end
26
30
 
27
- unless current_adapter?(:IBM_DBAdapter)
28
- def test_create_record_with_pk_as_zero
29
- Book.create(id: 0)
30
- assert_equal 0, Book.find(0).id
31
- assert_nothing_raised { Book.destroy(0) }
32
- end
33
- end
34
-
35
- def test_tables
36
- tables = nil
37
- ActiveSupport::Deprecation.silence { tables = @connection.tables }
38
- assert tables.include?("accounts")
39
- assert tables.include?("authors")
40
- assert tables.include?("tasks")
41
- assert tables.include?("topics")
31
+ def test_create_record_with_pk_as_zero
32
+ Book.create(id: 0)
33
+ assert_equal 0, Book.find(0).id
34
+ assert_nothing_raised { Book.destroy(0) }
42
35
  end
43
36
 
44
-
45
- def test_table_exists?
46
- ActiveSupport::Deprecation.silence do
47
- assert @connection.table_exists?("accounts")
48
- assert !@connection.table_exists?("nonexistingtable")
49
- assert !@connection.table_exists?(nil)
37
+ def test_valid_column
38
+ @connection.native_database_types.each_key do |type|
39
+ assert @connection.valid_type?(type)
50
40
  end
51
41
  end
52
42
 
53
- def test_table_exists_checking_both_tables_and_views_is_deprecated
54
- assert_deprecated { @connection.table_exists?("accounts") }
43
+ def test_invalid_column
44
+ assert_not @connection.valid_type?(:foobar)
45
+ end
46
+
47
+ def test_tables
48
+ tables = @connection.tables
49
+ assert_includes tables, "accounts"
50
+ assert_includes tables, "authors"
51
+ assert_includes tables, "tasks"
52
+ assert_includes tables, "topics"
53
+ end
54
+
55
+ def test_table_exists?
56
+ assert @connection.table_exists?("accounts")
57
+ assert @connection.table_exists?(:accounts)
58
+ assert_not @connection.table_exists?("nonexistingtable")
59
+ assert_not @connection.table_exists?("'")
60
+ assert_not @connection.table_exists?(nil)
55
61
  end
56
62
 
57
63
  def test_data_sources
58
64
  data_sources = @connection.data_sources
59
- assert data_sources.include?("accounts")
60
- assert data_sources.include?("authors")
61
- assert data_sources.include?("tasks")
62
- assert data_sources.include?("topics")
65
+ assert_includes data_sources, "accounts"
66
+ assert_includes data_sources, "authors"
67
+ assert_includes data_sources, "tasks"
68
+ assert_includes data_sources, "topics"
63
69
  end
64
70
 
65
71
  def test_data_source_exists?
66
72
  assert @connection.data_source_exists?("accounts")
67
73
  assert @connection.data_source_exists?(:accounts)
68
74
  assert_not @connection.data_source_exists?("nonexistingtable")
75
+ assert_not @connection.data_source_exists?("'")
69
76
  assert_not @connection.data_source_exists?(nil)
70
77
  end
71
78
 
72
79
  def test_indexes
73
80
  idx_name = "accounts_idx"
74
81
 
75
- if @connection.respond_to?(:indexes)
76
- indexes = @connection.indexes("accounts")
77
- assert indexes.empty?
82
+ indexes = @connection.indexes("accounts")
83
+ assert_empty indexes
78
84
 
79
- @connection.add_index :accounts, :firm_id, :name => idx_name
80
- indexes = @connection.indexes("accounts")
81
- assert_equal "accounts", indexes.first.table
82
- assert_equal idx_name, indexes.first.name
83
- assert !indexes.first.unique
84
- assert_equal ["firm_id"], indexes.first.columns
85
- else
86
- warn "#{@connection.class} does not respond to #indexes"
85
+ @connection.add_index :accounts, :firm_id, name: idx_name
86
+ indexes = @connection.indexes("accounts")
87
+ assert_equal "accounts", indexes.first.table
88
+ assert_equal idx_name, indexes.first.name
89
+ assert_not indexes.first.unique
90
+ assert_equal ["firm_id"], indexes.first.columns
91
+ ensure
92
+ @connection.remove_index(:accounts, name: idx_name) rescue nil
93
+ end
94
+
95
+ def test_remove_index_when_name_and_wrong_column_name_specified
96
+ index_name = "accounts_idx"
97
+
98
+ @connection.add_index :accounts, :firm_id, name: index_name
99
+ assert_raises ArgumentError do
100
+ @connection.remove_index :accounts, name: index_name, column: :wrong_column_name
87
101
  end
102
+ ensure
103
+ @connection.remove_index(:accounts, name: index_name)
104
+ end
105
+
106
+ def test_remove_index_when_name_and_wrong_column_name_specified_positional_argument
107
+ index_name = "accounts_idx"
88
108
 
109
+ @connection.add_index :accounts, :firm_id, name: index_name
110
+ assert_raises ArgumentError do
111
+ @connection.remove_index :accounts, :wrong_column_name, name: index_name
112
+ end
89
113
  ensure
90
- @connection.remove_index(:accounts, :name => idx_name) rescue nil
91
- end
92
-
93
- unless current_adapter?(:IBM_DBAdapter)
94
- def test_remove_index_when_name_and_wrong_column_name_specified
95
- index_name = "accounts_idx"
96
-
97
- @connection.add_index :accounts, :firm_id, :name => index_name
98
- assert_raises ArgumentError do
99
- @connection.remove_index :accounts, :name => index_name, :column => :wrong_column_name
100
- end
101
- ensure
102
- @connection.remove_index(:accounts, :name => index_name)
103
- end
104
- end
105
-
114
+ @connection.remove_index(:accounts, name: index_name)
115
+ end
116
+
106
117
  def test_current_database
107
118
  if @connection.respond_to?(:current_database)
108
- assert_equal ARTest.connection_config['arunit']['database'], @connection.current_database
119
+ assert_equal ARTest.test_configuration_hashes["arunit"]["database"], @connection.current_database
109
120
  end
110
121
  end
111
122
 
123
+ def test_exec_query_returns_an_empty_result
124
+ result = @connection.exec_query "INSERT INTO subscribers(nick) VALUES('me')"
125
+ assert_instance_of(ActiveRecord::Result, result)
126
+ end
127
+
112
128
  if current_adapter?(:Mysql2Adapter)
113
129
  def test_charset
114
130
  assert_not_nil @connection.charset
115
- assert_not_equal 'character_set_database', @connection.charset
116
- assert_equal @connection.show_variable('character_set_database'), @connection.charset
131
+ assert_not_equal "character_set_database", @connection.charset
132
+ assert_equal @connection.show_variable("character_set_database"), @connection.charset
117
133
  end
118
134
 
119
135
  def test_collation
120
136
  assert_not_nil @connection.collation
121
- assert_not_equal 'collation_database', @connection.collation
122
- assert_equal @connection.show_variable('collation_database'), @connection.collation
137
+ assert_not_equal "collation_database", @connection.collation
138
+ assert_equal @connection.show_variable("collation_database"), @connection.collation
123
139
  end
124
140
 
125
141
  def test_show_nonexistent_variable_returns_nil
126
- assert_nil @connection.show_variable('foo_bar_baz')
142
+ assert_nil @connection.show_variable("foo_bar_baz")
127
143
  end
128
144
 
129
145
  def test_not_specifying_database_name_for_cross_database_selects
130
- begin
131
- assert_nothing_raised do
132
- ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations['arunit'].except(:database))
133
-
134
- config = ARTest.connection_config
135
- ActiveRecord::Base.connection.execute(
136
- "SELECT #{config['arunit']['database']}.pirates.*, #{config['arunit2']['database']}.courses.* " \
137
- "FROM #{config['arunit']['database']}.pirates, #{config['arunit2']['database']}.courses"
138
- )
139
- end
140
- ensure
141
- ActiveRecord::Base.establish_connection :arunit
146
+ assert_nothing_raised do
147
+ db_config = ActiveRecord::Base.configurations.configs_for(env_name: "arunit", name: "primary")
148
+ ActiveRecord::Base.establish_connection(db_config.configuration_hash.except(:database))
149
+
150
+ config = ARTest.test_configuration_hashes
151
+ ActiveRecord::Base.connection.execute(
152
+ "SELECT #{config['arunit']['database']}.pirates.*, #{config['arunit2']['database']}.courses.* " \
153
+ "FROM #{config['arunit']['database']}.pirates, #{config['arunit2']['database']}.courses"
154
+ )
142
155
  end
156
+ ensure
157
+ ActiveRecord::Base.establish_connection :arunit
143
158
  end
144
159
  end
145
160
 
@@ -150,9 +165,9 @@ module ActiveRecord
150
165
  alias_method :table_alias_length, :test_table_alias_length
151
166
  end
152
167
 
153
- assert_equal 'posts', @connection.table_alias_for('posts')
154
- assert_equal 'posts_comm', @connection.table_alias_for('posts_comments')
155
- assert_equal 'dbo_posts', @connection.table_alias_for('dbo.posts')
168
+ assert_equal "posts", @connection.table_alias_for("posts")
169
+ assert_equal "posts_comm", @connection.table_alias_for("posts_comments")
170
+ assert_equal "dbo_posts", @connection.table_alias_for("dbo.posts")
156
171
 
157
172
  class << @connection
158
173
  remove_method :table_alias_length
@@ -160,90 +175,61 @@ module ActiveRecord
160
175
  end
161
176
  end
162
177
 
163
- # test resetting sequences in odd tables in PostgreSQL
164
- if ActiveRecord::Base.connection.respond_to?(:reset_pk_sequence!)
165
- require 'models/movie'
166
- require 'models/subscriber'
167
-
168
- def test_reset_empty_table_with_custom_pk
169
- Movie.delete_all
170
- Movie.connection.reset_pk_sequence! 'movies'
171
- assert_equal 1, Movie.create(:name => 'fight club').id
178
+ def test_uniqueness_violations_are_translated_to_specific_exception
179
+ @connection.execute "INSERT INTO subscribers(nick) VALUES('me')"
180
+ error = assert_raises(ActiveRecord::RecordNotUnique) do
181
+ @connection.execute "INSERT INTO subscribers(nick) VALUES('me')"
172
182
  end
173
183
 
174
- def test_reset_table_with_non_integer_pk
175
- Subscriber.delete_all
176
- Subscriber.connection.reset_pk_sequence! 'subscribers'
177
- sub = Subscriber.new(:name => 'robert drake')
178
- sub.id = 'bob drake'
179
- assert_nothing_raised { sub.save! }
180
- end
184
+ assert_not_nil error.cause
181
185
  end
182
-
183
- unless current_adapter?(:IBM_DBAdapter)
184
- def test_uniqueness_violations_are_translated_to_specific_exception
185
- @connection.execute "INSERT INTO subscribers(nick) VALUES('me')"
186
- error = assert_raises(ActiveRecord::RecordNotUnique) do
187
- @connection.execute "INSERT INTO subscribers(nick) VALUES('me')"
188
- end
189
-
190
- assert_not_nil error.cause
191
- end
192
- end
193
-
194
- unless current_adapter?(:SQLite3Adapter, :IBM_DBAdapter)
195
- def test_foreign_key_violations_are_translated_to_specific_exception
196
- error = assert_raises(ActiveRecord::InvalidForeignKey) do
197
- # Oracle adapter uses prefetched primary key values from sequence and passes them to connection adapter insert method
198
- if @connection.prefetch_primary_key?
199
- id_value = @connection.next_sequence_value(@connection.default_sequence_name("fk_test_has_fk", "id"))
200
- @connection.execute "INSERT INTO fk_test_has_fk (id, fk_id) VALUES (#{id_value},0)"
201
- else
202
- @connection.execute "INSERT INTO fk_test_has_fk (fk_id) VALUES (0)"
203
- end
204
- end
205
186
 
206
- assert_not_nil error.cause
187
+ def test_not_null_violations_are_translated_to_specific_exception
188
+ error = assert_raises(ActiveRecord::NotNullViolation) do
189
+ Post.create
207
190
  end
208
191
 
209
- def test_foreign_key_violations_are_translated_to_specific_exception_with_validate_false
210
- klass_has_fk = Class.new(ActiveRecord::Base) do
211
- self.table_name = 'fk_test_has_fk'
212
- end
192
+ assert_not_nil error.cause
193
+ end
213
194
 
214
- error = assert_raises(ActiveRecord::InvalidForeignKey) do
215
- has_fk = klass_has_fk.new
216
- has_fk.fk_id = 1231231231
217
- has_fk.save(validate: false)
195
+ unless current_adapter?(:SQLite3Adapter)
196
+ def test_value_limit_violations_are_translated_to_specific_exception
197
+ error = assert_raises(ActiveRecord::ValueTooLong) do
198
+ Event.create(title: "abcdefgh")
218
199
  end
219
200
 
220
201
  assert_not_nil error.cause
221
202
  end
222
203
 
223
- def test_value_limit_violations_are_translated_to_specific_exception
224
- error = assert_raises(ActiveRecord::ValueTooLong) do
225
- Event.create(title: 'abcdefgh')
204
+ def test_numeric_value_out_of_ranges_are_translated_to_specific_exception
205
+ error = assert_raises(ActiveRecord::RangeError) do
206
+ Book.connection.create("INSERT INTO books(author_id) VALUES (9223372036854775808)")
226
207
  end
227
208
 
228
209
  assert_not_nil error.cause
229
210
  end
230
211
  end
231
212
 
232
- def test_disable_referential_integrity
233
- assert_nothing_raised do
234
- @connection.disable_referential_integrity do
235
- # Oracle adapter uses prefetched primary key values from sequence and passes them to connection adapter insert method
236
- if @connection.prefetch_primary_key?
237
- id_value = @connection.next_sequence_value(@connection.default_sequence_name("fk_test_has_fk", "id"))
238
- @connection.execute "INSERT INTO fk_test_has_fk (id, fk_id) VALUES (#{id_value},0)"
239
- else
240
- @connection.execute "INSERT INTO fk_test_has_fk (fk_id) VALUES (0)"
241
- end
242
- # should delete created record as otherwise disable_referential_integrity will try to enable constraints after executed block
243
- # and will fail (at least on Oracle)
244
- @connection.execute "DELETE FROM fk_test_has_fk"
245
- end
213
+ def test_exceptions_from_notifications_are_not_translated
214
+ original_error = StandardError.new("This StandardError shouldn't get translated")
215
+ subscriber = ActiveSupport::Notifications.subscribe("sql.active_record") { raise original_error }
216
+ actual_error = assert_raises(StandardError) do
217
+ @connection.execute("SELECT * FROM posts")
246
218
  end
219
+
220
+ assert_equal original_error, actual_error
221
+
222
+ ensure
223
+ ActiveSupport::Notifications.unsubscribe(subscriber) if subscriber
224
+ end
225
+
226
+ def test_database_related_exceptions_are_translated_to_statement_invalid
227
+ error = assert_raises(ActiveRecord::StatementInvalid) do
228
+ @connection.execute("This is a syntax error")
229
+ end
230
+
231
+ assert_instance_of ActiveRecord::StatementInvalid, error
232
+ assert_kind_of Exception, error.cause
247
233
  end
248
234
 
249
235
  def test_select_all_always_return_activerecord_result
@@ -252,100 +238,328 @@ module ActiveRecord
252
238
  end
253
239
 
254
240
  if ActiveRecord::Base.connection.prepared_statements
255
- def test_select_all_with_legacy_binds
256
- post = Post.create!(title: "foo", body: "bar")
257
- expected = @connection.select_all("SELECT * FROM posts WHERE id = #{post.id}")
258
- result = @connection.select_all("SELECT * FROM posts WHERE id = #{Arel::Nodes::BindParam.new.to_sql}", nil, [[nil, post.id]])
259
- assert_equal expected.to_hash, result.to_hash
260
- end
261
- end
262
-
263
- unless current_adapter?(:IBM_DBAdapter)
264
- def test_select_methods_passing_a_association_relation
265
- author = Author.create!(name: 'john')
266
- Post.create!(author: author, title: 'foo', body: 'bar')
267
- query = author.posts.where(title: 'foo').select(:title)
268
- assert_equal({"title" => "foo"}, @connection.select_one(query.arel, nil, query.bound_attributes))
269
- assert_equal({"title" => "foo"}, @connection.select_one(query))
270
- assert @connection.select_all(query).is_a?(ActiveRecord::Result)
271
- assert_equal "foo", @connection.select_value(query)
272
- assert_equal ["foo"], @connection.select_values(query)
273
- end
274
- end
275
-
276
- unless current_adapter?(:IBM_DBAdapter)
277
- def test_select_methods_passing_a_relation
278
- Post.create!(title: 'foo', body: 'bar')
279
- query = Post.where(title: 'foo').select(:title)
280
- assert_equal({"title" => "foo"}, @connection.select_one(query.arel, nil, query.bound_attributes))
281
- assert_equal({"title" => "foo"}, @connection.select_one(query))
282
- assert @connection.select_all(query).is_a?(ActiveRecord::Result)
283
- assert_equal "foo", @connection.select_value(query)
284
- assert_equal ["foo"], @connection.select_values(query)
285
- end
286
- end
241
+ def test_select_all_insert_update_delete_with_legacy_binds
242
+ binds = [[Event.column_for_attribute("id"), 1]]
243
+ bind_param = Arel::Nodes::BindParam.new(nil)
244
+
245
+ assert_deprecated do
246
+ id = @connection.insert("INSERT INTO events(id) VALUES (#{bind_param.to_sql})", nil, nil, nil, nil, binds)
247
+ assert_equal 1, id
248
+ end
249
+
250
+ assert_deprecated do
251
+ updated = @connection.update("UPDATE events SET title = 'foo' WHERE id = #{bind_param.to_sql}", nil, binds)
252
+ assert_equal 1, updated
253
+ end
254
+
255
+ assert_deprecated do
256
+ result = @connection.select_all("SELECT * FROM events WHERE id = #{bind_param.to_sql}", nil, binds)
257
+ assert_equal({ "id" => 1, "title" => "foo" }, result.first)
258
+ end
259
+
260
+ assert_deprecated do
261
+ deleted = @connection.delete("DELETE FROM events WHERE id = #{bind_param.to_sql}", nil, binds)
262
+ assert_equal 1, deleted
263
+ end
264
+
265
+ assert_deprecated do
266
+ result = @connection.select_all("SELECT * FROM events WHERE id = #{bind_param.to_sql}", nil, binds)
267
+ assert_nil result.first
268
+ end
269
+ end
270
+
271
+ def test_select_all_insert_update_delete_with_casted_binds
272
+ binds = [Event.type_for_attribute("id").serialize(1)]
273
+ bind_param = Arel::Nodes::BindParam.new(nil)
274
+
275
+ id = @connection.insert("INSERT INTO events(id) VALUES (#{bind_param.to_sql})", nil, nil, nil, nil, binds)
276
+ assert_equal 1, id
277
+
278
+ updated = @connection.update("UPDATE events SET title = 'foo' WHERE id = #{bind_param.to_sql}", nil, binds)
279
+ assert_equal 1, updated
280
+
281
+ result = @connection.select_all("SELECT * FROM events WHERE id = #{bind_param.to_sql}", nil, binds)
282
+ assert_equal({ "id" => 1, "title" => "foo" }, result.first)
283
+
284
+ deleted = @connection.delete("DELETE FROM events WHERE id = #{bind_param.to_sql}", nil, binds)
285
+ assert_equal 1, deleted
286
+
287
+ result = @connection.select_all("SELECT * FROM events WHERE id = #{bind_param.to_sql}", nil, binds)
288
+ assert_nil result.first
289
+ end
290
+
291
+ def test_select_all_insert_update_delete_with_binds
292
+ binds = [Relation::QueryAttribute.new("id", 1, Event.type_for_attribute("id"))]
293
+ bind_param = Arel::Nodes::BindParam.new(nil)
294
+
295
+ id = @connection.insert("INSERT INTO events(id) VALUES (#{bind_param.to_sql})", nil, nil, nil, nil, binds)
296
+ assert_equal 1, id
297
+
298
+ updated = @connection.update("UPDATE events SET title = 'foo' WHERE id = #{bind_param.to_sql}", nil, binds)
299
+ assert_equal 1, updated
300
+
301
+ result = @connection.select_all("SELECT * FROM events WHERE id = #{bind_param.to_sql}", nil, binds)
302
+ assert_equal({ "id" => 1, "title" => "foo" }, result.first)
303
+
304
+ deleted = @connection.delete("DELETE FROM events WHERE id = #{bind_param.to_sql}", nil, binds)
305
+ assert_equal 1, deleted
306
+
307
+ result = @connection.select_all("SELECT * FROM events WHERE id = #{bind_param.to_sql}", nil, binds)
308
+ assert_nil result.first
309
+ end
310
+ end
311
+
312
+ def test_select_methods_passing_a_association_relation
313
+ author = Author.create!(name: "john")
314
+ Post.create!(author: author, title: "foo", body: "bar")
315
+ query = author.posts.where(title: "foo").select(:title)
316
+ assert_equal({ "title" => "foo" }, @connection.select_one(query))
317
+ assert @connection.select_all(query).is_a?(ActiveRecord::Result)
318
+ assert_equal "foo", @connection.select_value(query)
319
+ assert_equal ["foo"], @connection.select_values(query)
320
+ end
321
+
322
+ def test_select_methods_passing_a_relation
323
+ Post.create!(title: "foo", body: "bar")
324
+ query = Post.where(title: "foo").select(:title)
325
+ assert_equal({ "title" => "foo" }, @connection.select_one(query))
326
+ assert @connection.select_all(query).is_a?(ActiveRecord::Result)
327
+ assert_equal "foo", @connection.select_value(query)
328
+ assert_equal ["foo"], @connection.select_values(query)
329
+ end
287
330
 
288
331
  test "type_to_sql returns a String for unmapped types" do
289
332
  assert_equal "special_db_type", @connection.type_to_sql(:special_db_type)
290
333
  end
291
334
 
292
- unless current_adapter?(:PostgreSQLAdapter, :IBM_DBAdapter)
293
- def test_log_invalid_encoding
294
- error = assert_raise ActiveRecord::StatementInvalid do
295
- @connection.send :log, "SELECT 'ы' FROM DUAL" do
296
- raise 'ы'.force_encoding(Encoding::ASCII_8BIT)
297
- end
298
- end
335
+ def test_allowed_index_name_length_is_deprecated
336
+ assert_deprecated { @connection.allowed_index_name_length }
337
+ end
299
338
 
300
- assert_not_nil error.cause
339
+ unless current_adapter?(:OracleAdapter)
340
+ def test_in_clause_length_is_deprecated
341
+ assert_deprecated { @connection.in_clause_length }
301
342
  end
302
343
  end
344
+ end
345
+
346
+ class AdapterForeignKeyTest < ActiveRecord::TestCase
347
+ self.use_transactional_tests = false
303
348
 
304
- if current_adapter?(:Mysql2Adapter, :SQLite3Adapter)
305
- def test_tables_returning_both_tables_and_views_is_deprecated
306
- assert_deprecated { @connection.tables }
349
+ fixtures :fk_test_has_pk
350
+
351
+ def setup
352
+ @connection = ActiveRecord::Base.connection
353
+ end
354
+
355
+ def test_foreign_key_violations_are_translated_to_specific_exception_with_validate_false
356
+ klass_has_fk = Class.new(ActiveRecord::Base) do
357
+ self.table_name = "fk_test_has_fk"
307
358
  end
359
+
360
+ error = assert_raises(ActiveRecord::InvalidForeignKey) do
361
+ has_fk = klass_has_fk.new
362
+ has_fk.fk_id = 1231231231
363
+ has_fk.save(validate: false)
364
+ end
365
+
366
+ assert_not_nil error.cause
308
367
  end
309
368
 
310
- def test_passing_arguments_to_tables_is_deprecated
311
- assert_deprecated { @connection.tables(:books) }
369
+ def test_foreign_key_violations_on_insert_are_translated_to_specific_exception
370
+ error = assert_raises(ActiveRecord::InvalidForeignKey) do
371
+ insert_into_fk_test_has_fk
372
+ end
373
+
374
+ assert_not_nil error.cause
312
375
  end
376
+
377
+ def test_foreign_key_violations_on_delete_are_translated_to_specific_exception
378
+ insert_into_fk_test_has_fk fk_id: 1
379
+
380
+ error = assert_raises(ActiveRecord::InvalidForeignKey) do
381
+ @connection.execute "DELETE FROM fk_test_has_pk WHERE pk_id = 1"
382
+ end
383
+
384
+ assert_not_nil error.cause
385
+ end
386
+
387
+ def test_disable_referential_integrity
388
+ assert_nothing_raised do
389
+ @connection.disable_referential_integrity do
390
+ insert_into_fk_test_has_fk
391
+ # should delete created record as otherwise disable_referential_integrity will try to enable constraints
392
+ # after executed block and will fail (at least on Oracle)
393
+ @connection.execute "DELETE FROM fk_test_has_fk"
394
+ end
395
+ end
396
+ end
397
+
398
+ private
399
+ def insert_into_fk_test_has_fk(fk_id: 0)
400
+ # Oracle adapter uses prefetched primary key values from sequence and passes them to connection adapter insert method
401
+ if @connection.prefetch_primary_key?
402
+ id_value = @connection.next_sequence_value(@connection.default_sequence_name("fk_test_has_fk", "id"))
403
+ @connection.execute "INSERT INTO fk_test_has_fk (id,fk_id) VALUES (#{id_value},#{fk_id})"
404
+ else
405
+ @connection.execute "INSERT INTO fk_test_has_fk (fk_id) VALUES (#{fk_id})"
406
+ end
407
+ end
313
408
  end
314
409
 
315
410
  class AdapterTestWithoutTransaction < ActiveRecord::TestCase
316
411
  self.use_transactional_tests = false
317
412
 
318
- class Klass < ActiveRecord::Base
319
- end
413
+ fixtures :posts, :authors, :author_addresses
320
414
 
321
415
  def setup
322
- Klass.establish_connection :arunit
323
- @connection = Klass.connection
324
- end
325
-
326
- teardown do
327
- Klass.remove_connection
328
- end
329
-
330
- unless current_adapter?(:IBM_DBAdapter)
331
- unless in_memory_db?
332
- test "transaction state is reset after a reconnect" do
333
- @connection.begin_transaction
334
- assert @connection.transaction_open?
335
- @connection.reconnect!
336
- assert !@connection.transaction_open?
337
- end
338
-
339
- test "transaction state is reset after a disconnect" do
340
- @connection.begin_transaction
341
- assert @connection.transaction_open?
342
- @connection.disconnect!
343
- assert !@connection.transaction_open?
344
- end
345
- end
346
- end
347
-
416
+ @connection = ActiveRecord::Base.connection
417
+ end
418
+
419
+ unless in_memory_db?
420
+ test "reconnect after a disconnect" do
421
+ assert_predicate @connection, :active?
422
+ @connection.disconnect!
423
+ assert_not_predicate @connection, :active?
424
+ @connection.reconnect!
425
+ assert_predicate @connection, :active?
426
+ end
427
+
428
+ test "transaction state is reset after a reconnect" do
429
+ @connection.begin_transaction
430
+ assert_predicate @connection, :transaction_open?
431
+ @connection.reconnect!
432
+ assert_not_predicate @connection, :transaction_open?
433
+ end
434
+
435
+ test "transaction state is reset after a disconnect" do
436
+ @connection.begin_transaction
437
+ assert_predicate @connection, :transaction_open?
438
+ @connection.disconnect!
439
+ assert_not_predicate @connection, :transaction_open?
440
+ ensure
441
+ @connection.reconnect!
442
+ end
443
+ end
444
+
445
+ def test_create_with_query_cache
446
+ @connection.enable_query_cache!
447
+
448
+ count = Post.count
449
+
450
+ @connection.create("INSERT INTO posts(title, body) VALUES ('', '')")
451
+
452
+ assert_equal count + 1, Post.count
453
+ ensure
454
+ reset_fixtures("posts")
455
+ @connection.disable_query_cache!
456
+ end
457
+
458
+ def test_truncate
459
+ assert_operator Post.count, :>, 0
460
+
461
+ @connection.truncate("posts")
462
+
463
+ assert_equal 0, Post.count
464
+ ensure
465
+ reset_fixtures("posts")
466
+ end
467
+
468
+ def test_truncate_with_query_cache
469
+ @connection.enable_query_cache!
470
+
471
+ assert_operator Post.count, :>, 0
472
+
473
+ @connection.truncate("posts")
474
+
475
+ assert_equal 0, Post.count
476
+ ensure
477
+ reset_fixtures("posts")
478
+ @connection.disable_query_cache!
479
+ end
480
+
481
+ def test_truncate_tables
482
+ assert_operator Post.count, :>, 0
483
+ assert_operator Author.count, :>, 0
484
+ assert_operator AuthorAddress.count, :>, 0
485
+
486
+ @connection.truncate_tables("author_addresses", "authors", "posts")
487
+
488
+ assert_equal 0, Post.count
489
+ assert_equal 0, Author.count
490
+ assert_equal 0, AuthorAddress.count
491
+ ensure
492
+ reset_fixtures("posts", "authors", "author_addresses")
493
+ end
494
+
495
+ def test_truncate_tables_with_query_cache
496
+ @connection.enable_query_cache!
497
+
498
+ assert_operator Post.count, :>, 0
499
+ assert_operator Author.count, :>, 0
500
+ assert_operator AuthorAddress.count, :>, 0
501
+
502
+ @connection.truncate_tables("author_addresses", "authors", "posts")
503
+
504
+ assert_equal 0, Post.count
505
+ assert_equal 0, Author.count
506
+ assert_equal 0, AuthorAddress.count
507
+ ensure
508
+ reset_fixtures("posts", "authors", "author_addresses")
509
+ @connection.disable_query_cache!
510
+ end
511
+
512
+ # test resetting sequences in odd tables in PostgreSQL
513
+ if ActiveRecord::Base.connection.respond_to?(:reset_pk_sequence!)
514
+ require "models/movie"
515
+ require "models/subscriber"
516
+
517
+ def test_reset_empty_table_with_custom_pk
518
+ Movie.delete_all
519
+ Movie.connection.reset_pk_sequence! "movies"
520
+ assert_equal 1, Movie.create(name: "fight club").id
521
+ end
522
+
523
+ def test_reset_table_with_non_integer_pk
524
+ Subscriber.delete_all
525
+ Subscriber.connection.reset_pk_sequence! "subscribers"
526
+ sub = Subscriber.new(name: "robert drake")
527
+ sub.id = "bob drake"
528
+ assert_nothing_raised { sub.save! }
529
+ end
530
+ end
531
+
532
+ private
533
+ def reset_fixtures(*fixture_names)
534
+ ActiveRecord::FixtureSet.reset_cache
535
+
536
+ fixture_names.each do |fixture_name|
537
+ ActiveRecord::FixtureSet.create_fixtures(FIXTURES_ROOT, fixture_name)
538
+ end
539
+ end
540
+ end
541
+ end
542
+
543
+ if ActiveRecord::Base.connection.supports_advisory_locks?
544
+ class AdvisoryLocksEnabledTest < ActiveRecord::TestCase
545
+ include ConnectionHelper
546
+
547
+ def test_advisory_locks_enabled?
548
+ assert ActiveRecord::Base.connection.advisory_locks_enabled?
549
+
550
+ run_without_connection do |orig_connection|
551
+ ActiveRecord::Base.establish_connection(
552
+ orig_connection.merge(advisory_locks: false)
553
+ )
554
+
555
+ assert_not ActiveRecord::Base.connection.advisory_locks_enabled?
556
+
557
+ ActiveRecord::Base.establish_connection(
558
+ orig_connection.merge(advisory_locks: true)
559
+ )
560
+
561
+ assert ActiveRecord::Base.connection.advisory_locks_enabled?
562
+ end
563
+ end
348
564
  end
349
-
350
-
351
565
  end