ibm_db 5.6.1 → 5.7.0

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 (592) hide show
  1. checksums.yaml +4 -4
  2. data/ext/Makefile +13 -9
  3. data/ext/extconf.rb +176 -110
  4. data/ext/ibm_db.c +60 -0
  5. data/ext/ibm_db.o +0 -0
  6. data/ext/ibm_db.so +0 -0
  7. data/ext/mkmf.log +6 -6
  8. data/ext/ruby_ibm_db_cli.c +14 -10
  9. data/ext/ruby_ibm_db_cli.h +4 -0
  10. data/ext/ruby_ibm_db_cli.o +0 -0
  11. data/lib/IBM_DB.rb +2 -2
  12. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +1254 -277
  13. data/test/active_record/connection_adapters/fake_legacy_adapter.rb +17 -0
  14. data/test/active_record/connection_adapters/fake_misleading_legacy_adapter.rb +8 -0
  15. data/test/activejob/destroy_association_async_job_test.rb +62 -0
  16. data/test/activejob/destroy_association_async_test.rb +147 -11
  17. data/test/activejob/job_runtime_test.rb +41 -0
  18. data/test/activejob/unloadable_base_job.rb +3 -0
  19. data/test/cases/active_record_schema_test.rb +196 -0
  20. data/test/cases/active_record_test.rb +21 -0
  21. data/test/cases/adapter_prevent_writes_test.rb +26 -202
  22. data/test/cases/adapter_test.rb +592 -82
  23. data/test/cases/adapters/abstract_mysql_adapter/active_schema_test.rb +210 -0
  24. data/test/cases/adapters/abstract_mysql_adapter/adapter_prevent_writes_test.rb +111 -0
  25. data/test/cases/adapters/abstract_mysql_adapter/auto_increment_test.rb +48 -0
  26. data/test/cases/adapters/abstract_mysql_adapter/bind_parameter_test.rb +91 -0
  27. data/test/cases/adapters/abstract_mysql_adapter/case_sensitivity_test.rb +65 -0
  28. data/test/cases/adapters/abstract_mysql_adapter/charset_collation_test.rb +85 -0
  29. data/test/cases/adapters/abstract_mysql_adapter/connection_test.rb +267 -0
  30. data/test/cases/adapters/abstract_mysql_adapter/count_deleted_rows_with_lock_test.rb +29 -0
  31. data/test/cases/adapters/abstract_mysql_adapter/json_test.rb +24 -0
  32. data/test/cases/adapters/abstract_mysql_adapter/mysql_boolean_test.rb +102 -0
  33. data/test/cases/adapters/abstract_mysql_adapter/mysql_enum_test.rb +47 -0
  34. data/test/cases/adapters/abstract_mysql_adapter/mysql_explain_test.rb +71 -0
  35. data/test/cases/adapters/abstract_mysql_adapter/nested_deadlock_test.rb +191 -0
  36. data/test/cases/adapters/abstract_mysql_adapter/optimizer_hints_test.rb +69 -0
  37. data/test/cases/adapters/abstract_mysql_adapter/quoting_test.rb +49 -0
  38. data/test/cases/adapters/abstract_mysql_adapter/schema_migrations_test.rb +68 -0
  39. data/test/cases/adapters/abstract_mysql_adapter/schema_test.rb +130 -0
  40. data/test/cases/adapters/abstract_mysql_adapter/set_test.rb +32 -0
  41. data/test/cases/adapters/abstract_mysql_adapter/sp_test.rb +39 -0
  42. data/test/cases/adapters/abstract_mysql_adapter/sql_types_test.rb +16 -0
  43. data/test/cases/adapters/abstract_mysql_adapter/table_options_test.rb +125 -0
  44. data/test/cases/adapters/abstract_mysql_adapter/transaction_test.rb +204 -0
  45. data/test/cases/adapters/abstract_mysql_adapter/unsigned_type_test.rb +77 -0
  46. data/test/cases/adapters/abstract_mysql_adapter/virtual_column_test.rb +69 -0
  47. data/test/cases/adapters/abstract_mysql_adapter/warnings_test.rb +109 -0
  48. data/test/cases/adapters/mysql2/check_constraint_quoting_test.rb +35 -0
  49. data/test/cases/adapters/mysql2/dbconsole_test.rb +87 -0
  50. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +136 -10
  51. data/test/cases/adapters/mysql2/mysql2_rake_test.rb +433 -0
  52. data/test/cases/adapters/postgresql/active_schema_test.rb +8 -4
  53. data/test/cases/adapters/postgresql/array_test.rb +6 -6
  54. data/test/cases/adapters/postgresql/bind_parameter_test.rb +52 -0
  55. data/test/cases/adapters/postgresql/bit_string_test.rb +2 -2
  56. data/test/cases/adapters/postgresql/bytea_test.rb +3 -3
  57. data/test/cases/adapters/postgresql/case_insensitive_test.rb +1 -1
  58. data/test/cases/adapters/postgresql/change_schema_test.rb +32 -1
  59. data/test/cases/adapters/postgresql/cidr_test.rb +17 -0
  60. data/test/cases/adapters/postgresql/citext_test.rb +7 -1
  61. data/test/cases/adapters/postgresql/collation_test.rb +1 -1
  62. data/test/cases/adapters/postgresql/composite_test.rb +1 -1
  63. data/test/cases/adapters/postgresql/connection_test.rb +43 -36
  64. data/test/cases/adapters/postgresql/create_unlogged_tables_test.rb +3 -2
  65. data/test/cases/adapters/postgresql/datatype_test.rb +9 -4
  66. data/test/cases/adapters/postgresql/date_test.rb +2 -2
  67. data/test/cases/adapters/postgresql/dbconsole_test.rb +109 -0
  68. data/test/cases/adapters/postgresql/deferred_constraints_test.rb +55 -0
  69. data/test/cases/adapters/postgresql/domain_test.rb +1 -1
  70. data/test/cases/adapters/postgresql/enum_test.rb +208 -8
  71. data/test/cases/adapters/postgresql/explain_test.rb +25 -6
  72. data/test/cases/adapters/postgresql/extension_migration_test.rb +51 -9
  73. data/test/cases/adapters/postgresql/foreign_table_test.rb +3 -3
  74. data/test/cases/adapters/postgresql/full_text_test.rb +1 -1
  75. data/test/cases/adapters/postgresql/geometric_test.rb +13 -6
  76. data/test/cases/adapters/postgresql/hstore_test.rb +22 -32
  77. data/test/cases/adapters/postgresql/infinity_test.rb +13 -2
  78. data/test/cases/adapters/postgresql/integer_test.rb +1 -1
  79. data/test/cases/adapters/postgresql/interval_test.rb +9 -17
  80. data/test/cases/adapters/postgresql/invertible_migration_test.rb +139 -0
  81. data/test/cases/adapters/postgresql/json_test.rb +5 -0
  82. data/test/cases/adapters/postgresql/ltree_test.rb +1 -1
  83. data/test/cases/adapters/postgresql/money_test.rb +17 -9
  84. data/test/cases/adapters/postgresql/network_test.rb +13 -1
  85. data/test/cases/adapters/postgresql/numbers_test.rb +18 -2
  86. data/test/cases/adapters/postgresql/optimizer_hints_test.rb +9 -9
  87. data/test/cases/adapters/postgresql/partitions_test.rb +5 -2
  88. data/test/cases/adapters/postgresql/postgresql_adapter_prevent_writes_test.rb +7 -110
  89. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +403 -20
  90. data/test/cases/adapters/postgresql/postgresql_rake_test.rb +637 -0
  91. data/test/cases/adapters/postgresql/prepared_statements_disabled_test.rb +1 -1
  92. data/test/cases/adapters/postgresql/quoting_test.rb +60 -1
  93. data/test/cases/adapters/postgresql/range_test.rb +185 -21
  94. data/test/cases/adapters/postgresql/referential_integrity_test.rb +29 -5
  95. data/test/cases/adapters/postgresql/rename_table_test.rb +35 -8
  96. data/test/cases/adapters/postgresql/schema_authorization_test.rb +2 -2
  97. data/test/cases/adapters/postgresql/schema_test.rb +270 -20
  98. data/test/cases/adapters/postgresql/serial_test.rb +5 -5
  99. data/test/cases/adapters/postgresql/statement_pool_test.rb +6 -2
  100. data/test/cases/adapters/postgresql/timestamp_test.rb +122 -5
  101. data/test/cases/adapters/postgresql/transaction_nested_test.rb +130 -6
  102. data/test/cases/adapters/postgresql/transaction_test.rb +37 -11
  103. data/test/cases/adapters/postgresql/type_lookup_test.rb +1 -1
  104. data/test/cases/adapters/postgresql/uuid_test.rb +77 -9
  105. data/test/cases/adapters/postgresql/virtual_column_test.rb +114 -0
  106. data/test/cases/adapters/postgresql/xml_test.rb +1 -1
  107. data/test/cases/adapters/sqlite3/bind_parameter_test.rb +52 -0
  108. data/test/cases/adapters/sqlite3/collation_test.rb +1 -1
  109. data/test/cases/adapters/sqlite3/copy_table_test.rb +28 -7
  110. data/test/cases/adapters/sqlite3/dbconsole_test.rb +81 -0
  111. data/test/cases/adapters/sqlite3/explain_test.rb +3 -3
  112. data/test/cases/adapters/sqlite3/quoting_test.rb +34 -3
  113. data/test/cases/adapters/sqlite3/sqlite3_adapter_prevent_writes_test.rb +9 -102
  114. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +727 -72
  115. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +6 -3
  116. data/test/cases/adapters/sqlite3/sqlite_rake_test.rb +264 -0
  117. data/test/cases/adapters/sqlite3/statement_pool_test.rb +1 -1
  118. data/test/cases/adapters/sqlite3/transaction_test.rb +6 -3
  119. data/test/cases/adapters/sqlite3/virtual_column_test.rb +138 -0
  120. data/test/cases/adapters/sqlite3/virtual_table_test.rb +51 -0
  121. data/test/cases/adapters/trilogy/dbconsole_test.rb +76 -0
  122. data/test/cases/adapters/trilogy/trilogy_adapter_test.rb +473 -0
  123. data/test/cases/adapters/trilogy/trilogy_rake_test.rb +433 -0
  124. data/test/cases/aggregations_test.rb +16 -0
  125. data/test/cases/annotate_test.rb +14 -12
  126. data/test/cases/arel/attributes/attribute_test.rb +86 -47
  127. data/test/cases/arel/collectors/bind_test.rb +1 -1
  128. data/test/cases/arel/collectors/composite_test.rb +11 -1
  129. data/test/cases/arel/collectors/sql_string_test.rb +1 -1
  130. data/test/cases/arel/collectors/substitute_bind_collector_test.rb +1 -1
  131. data/test/cases/arel/delete_manager_test.rb +0 -6
  132. data/test/cases/arel/factory_methods_test.rb +45 -0
  133. data/test/cases/arel/insert_manager_test.rb +1 -7
  134. data/test/cases/arel/nodes/as_test.rb +12 -0
  135. data/test/cases/arel/nodes/ascending_test.rb +1 -1
  136. data/test/cases/arel/nodes/bin_test.rb +1 -1
  137. data/test/cases/arel/nodes/bound_sql_literal_test.rb +31 -0
  138. data/test/cases/arel/nodes/cte_test.rb +46 -0
  139. data/test/cases/arel/nodes/descending_test.rb +1 -1
  140. data/test/cases/arel/nodes/equality_test.rb +3 -3
  141. data/test/cases/arel/nodes/filter_test.rb +37 -0
  142. data/test/cases/arel/nodes/fragments_test.rb +38 -0
  143. data/test/cases/arel/nodes/homogeneous_in_test.rb +52 -0
  144. data/test/cases/arel/nodes/infix_operation_test.rb +1 -1
  145. data/test/cases/arel/nodes/node_test.rb +1 -1
  146. data/test/cases/arel/nodes/or_test.rb +2 -2
  147. data/test/cases/arel/nodes/sql_literal_test.rb +18 -1
  148. data/test/cases/arel/nodes/table_alias_test.rb +12 -0
  149. data/test/cases/arel/nodes/unary_operation_test.rb +1 -1
  150. data/test/cases/arel/nodes/update_statement_test.rb +4 -0
  151. data/test/cases/arel/nodes_test.rb +3 -2
  152. data/test/cases/arel/select_manager_test.rb +12 -12
  153. data/test/cases/arel/support/fake_record.rb +22 -17
  154. data/test/cases/arel/table_test.rb +15 -25
  155. data/test/cases/arel/update_manager_test.rb +51 -6
  156. data/test/cases/arel/visitors/dispatch_contamination_test.rb +1 -1
  157. data/test/cases/arel/visitors/dot_test.rb +177 -2
  158. data/test/cases/arel/visitors/mysql_test.rb +49 -1
  159. data/test/cases/arel/visitors/postgres_test.rb +1 -31
  160. data/test/cases/arel/visitors/sqlite_test.rb +1 -1
  161. data/test/cases/arel/visitors/to_sql_test.rb +330 -20
  162. data/test/cases/assertions/query_assertions_test.rb +136 -0
  163. data/test/cases/associations/belongs_to_associations_test.rb +502 -41
  164. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +1 -1
  165. data/test/cases/associations/cascaded_eager_loading_test.rb +26 -15
  166. data/test/cases/associations/eager_load_nested_include_test.rb +1 -1
  167. data/test/cases/associations/eager_singularization_test.rb +1 -1
  168. data/test/cases/associations/eager_test.rb +255 -93
  169. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +25 -53
  170. data/test/cases/associations/has_many_associations_test.rb +282 -72
  171. data/test/cases/associations/has_many_through_associations_test.rb +172 -45
  172. data/test/cases/associations/has_many_through_disable_joins_associations_test.rb +197 -0
  173. data/test/cases/associations/has_one_associations_test.rb +160 -29
  174. data/test/cases/associations/has_one_through_associations_test.rb +64 -15
  175. data/test/cases/associations/has_one_through_disable_joins_associations_test.rb +82 -0
  176. data/test/cases/associations/inner_join_association_test.rb +36 -6
  177. data/test/cases/associations/inverse_associations_test.rb +177 -40
  178. data/test/cases/associations/join_model_test.rb +17 -12
  179. data/test/cases/associations/left_outer_join_association_test.rb +14 -3
  180. data/test/cases/associations/nested_error_test.rb +116 -0
  181. data/test/cases/associations/nested_through_associations_test.rb +54 -19
  182. data/test/cases/associations/required_test.rb +1 -1
  183. data/test/cases/associations_test.rb +1278 -21
  184. data/test/cases/asynchronous_queries_test.rb +310 -0
  185. data/test/cases/attribute_methods/read_test.rb +6 -0
  186. data/test/cases/attribute_methods/time_zone_converter_test.rb +21 -0
  187. data/test/cases/attribute_methods_test.rb +565 -46
  188. data/test/cases/attributes_test.rb +42 -1
  189. data/test/cases/autosave_association_test.rb +645 -92
  190. data/test/cases/base_prevent_writes_test.rb +28 -159
  191. data/test/cases/base_test.rb +434 -209
  192. data/test/cases/batches_test.rb +441 -57
  193. data/test/cases/binary_test.rb +31 -0
  194. data/test/cases/bind_parameter_test.rb +107 -16
  195. data/test/cases/cache_key_test.rb +7 -7
  196. data/test/cases/calculations_test.rb +541 -110
  197. data/test/cases/callbacks_test.rb +0 -1
  198. data/test/cases/clone_test.rb +5 -4
  199. data/test/cases/coders/yaml_column_test.rb +97 -2
  200. data/test/cases/collection_cache_key_test.rb +24 -16
  201. data/test/cases/column_alias_test.rb +2 -8
  202. data/test/cases/column_definition_test.rb +12 -3
  203. data/test/cases/comment_test.rb +23 -26
  204. data/test/cases/connection_adapters/adapter_leasing_test.rb +9 -9
  205. data/test/cases/connection_adapters/connection_handler_test.rb +145 -99
  206. data/test/cases/connection_adapters/connection_handlers_multi_db_test.rb +79 -55
  207. data/test/cases/connection_adapters/connection_handlers_multi_pool_config_test.rb +17 -20
  208. data/test/cases/connection_adapters/connection_handlers_sharding_db_test.rb +146 -55
  209. data/test/cases/connection_adapters/connection_swapping_nested_test.rb +136 -23
  210. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +96 -27
  211. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +5 -5
  212. data/test/cases/connection_adapters/registration_test.rb +98 -0
  213. data/test/cases/connection_adapters/schema_cache_test.rb +288 -135
  214. data/test/cases/connection_adapters/standalone_connection_test.rb +38 -0
  215. data/test/cases/connection_adapters/statement_pool_test.rb +29 -0
  216. data/test/cases/connection_adapters/type_lookup_test.rb +12 -24
  217. data/test/cases/connection_handling_test.rb +210 -0
  218. data/test/cases/connection_management_test.rb +44 -7
  219. data/test/cases/connection_pool_test.rb +466 -99
  220. data/test/cases/core_test.rb +167 -9
  221. data/test/cases/counter_cache_test.rb +129 -2
  222. data/test/cases/custom_locking_test.rb +3 -3
  223. data/test/cases/database_configurations/hash_config_test.rb +149 -13
  224. data/test/cases/database_configurations/resolver_test.rb +14 -10
  225. data/test/cases/database_configurations/url_config_test.rb +53 -0
  226. data/test/cases/database_configurations_test.rb +86 -43
  227. data/test/cases/database_selector_test.rb +30 -8
  228. data/test/cases/database_statements_test.rb +10 -14
  229. data/test/cases/date_time_precision_test.rb +141 -11
  230. data/test/cases/date_time_test.rb +19 -1
  231. data/test/cases/defaults_test.rb +107 -41
  232. data/test/cases/delegated_type_test.rb +69 -9
  233. data/test/cases/dirty_test.rb +82 -25
  234. data/test/cases/disconnected_test.rb +10 -9
  235. data/test/cases/dup_test.rb +26 -6
  236. data/test/cases/encryption/cipher/aes256_gcm_test.rb +50 -0
  237. data/test/cases/encryption/cipher_test.rb +65 -0
  238. data/test/cases/encryption/concurrency_test.rb +27 -0
  239. data/test/cases/encryption/config_test.rb +21 -0
  240. data/test/cases/encryption/configurable_test.rb +93 -0
  241. data/test/cases/encryption/contexts_test.rb +105 -0
  242. data/test/cases/encryption/derived_secret_key_provider_test.rb +31 -0
  243. data/test/cases/encryption/deterministic_key_provider_test.rb +11 -0
  244. data/test/cases/encryption/encryptable_record_api_test.rb +175 -0
  245. data/test/cases/encryption/encryptable_record_message_pack_serialized_test.rb +42 -0
  246. data/test/cases/encryption/encryptable_record_test.rb +470 -0
  247. data/test/cases/encryption/encrypted_fixtures_test.rb +22 -0
  248. data/test/cases/encryption/encrypting_only_encryptor_test.rb +20 -0
  249. data/test/cases/encryption/encryption_schemes_test.rb +240 -0
  250. data/test/cases/encryption/encryptor_test.rb +113 -0
  251. data/test/cases/encryption/envelope_encryption_key_provider_test.rb +49 -0
  252. data/test/cases/encryption/extended_deterministic_queries_test.rb +81 -0
  253. data/test/cases/encryption/helper.rb +152 -0
  254. data/test/cases/encryption/key_generator_test.rb +55 -0
  255. data/test/cases/encryption/key_provider_test.rb +57 -0
  256. data/test/cases/encryption/key_test.rb +17 -0
  257. data/test/cases/encryption/message_pack_message_serializer_test.rb +70 -0
  258. data/test/cases/encryption/message_serializer_test.rb +82 -0
  259. data/test/cases/encryption/message_test.rb +43 -0
  260. data/test/cases/encryption/null_encryptor_test.rb +21 -0
  261. data/test/cases/encryption/properties_test.rb +69 -0
  262. data/test/cases/encryption/read_only_null_encryptor_test.rb +19 -0
  263. data/test/cases/encryption/scheme_test.rb +58 -0
  264. data/test/cases/encryption/unencrypted_attributes_test.rb +27 -0
  265. data/test/cases/encryption/uniqueness_validations_test.rb +65 -0
  266. data/test/cases/enum_test.rb +374 -72
  267. data/test/cases/errors_test.rb +7 -4
  268. data/test/cases/excluding_test.rb +116 -0
  269. data/test/cases/explain_subscriber_test.rb +6 -1
  270. data/test/cases/explain_test.rb +119 -10
  271. data/test/cases/filter_attributes_test.rb +7 -14
  272. data/test/cases/finder_respond_to_test.rb +3 -3
  273. data/test/cases/finder_test.rb +357 -72
  274. data/test/cases/fixture_set/file_test.rb +9 -0
  275. data/test/cases/fixtures_test.rb +426 -190
  276. data/test/cases/helper.rb +66 -192
  277. data/test/cases/hot_compatibility_test.rb +10 -10
  278. data/test/cases/inheritance_test.rb +51 -61
  279. data/test/cases/inherited_test.rb +40 -0
  280. data/test/cases/insert_all_test.rb +419 -9
  281. data/test/cases/instrumentation_test.rb +202 -30
  282. data/test/cases/integration_test.rb +25 -7
  283. data/test/cases/invalid_connection_test.rb +5 -5
  284. data/test/cases/invertible_migration_test.rb +108 -24
  285. data/test/cases/json_attribute_test.rb +1 -0
  286. data/test/cases/json_serialization_test.rb +5 -5
  287. data/test/cases/json_shared_test_cases.rb +5 -9
  288. data/test/cases/locking_test.rb +67 -31
  289. data/test/cases/log_subscriber_test.rb +17 -15
  290. data/test/cases/marshal_serialization_test.rb +78 -5
  291. data/test/cases/message_pack_test.rb +91 -0
  292. data/test/cases/migration/change_schema_test.rb +77 -46
  293. data/test/cases/migration/change_table_test.rb +129 -114
  294. data/test/cases/migration/check_constraint_test.rb +192 -10
  295. data/test/cases/migration/column_attributes_test.rb +4 -9
  296. data/test/cases/migration/column_positioning_test.rb +2 -2
  297. data/test/cases/migration/columns_test.rb +118 -4
  298. data/test/cases/migration/command_recorder_test.rb +181 -14
  299. data/test/cases/migration/compatibility_test.rb +883 -196
  300. data/test/cases/migration/create_join_table_test.rb +8 -1
  301. data/test/cases/migration/exclusion_constraint_test.rb +192 -0
  302. data/test/cases/migration/foreign_key_test.rb +356 -14
  303. data/test/cases/migration/helper.rb +4 -1
  304. data/test/cases/migration/index_test.rb +67 -2
  305. data/test/cases/migration/invalid_options_test.rb +129 -0
  306. data/test/cases/migration/logger_test.rb +7 -4
  307. data/test/cases/migration/pending_migrations_test.rb +103 -60
  308. data/test/cases/migration/references_foreign_key_test.rb +73 -4
  309. data/test/cases/migration/references_index_test.rb +25 -27
  310. data/test/cases/migration/references_statements_test.rb +27 -3
  311. data/test/cases/migration/rename_table_test.rb +39 -54
  312. data/test/cases/migration/schema_definitions_test.rb +109 -0
  313. data/test/cases/migration/unique_constraint_test.rb +248 -0
  314. data/test/cases/migration_test.rb +677 -220
  315. data/test/cases/migrator_test.rb +102 -75
  316. data/test/cases/multi_db_migrator_test.rb +55 -34
  317. data/test/cases/multiparameter_attributes_test.rb +26 -29
  318. data/test/cases/multiple_db_test.rb +42 -19
  319. data/test/cases/nested_attributes_test.rb +124 -6
  320. data/test/cases/nested_attributes_with_callbacks_test.rb +2 -2
  321. data/test/cases/normalized_attribute_test.rb +117 -0
  322. data/test/cases/null_relation_test.rb +35 -2
  323. data/test/cases/persistence/reload_association_cache_test.rb +20 -0
  324. data/test/cases/persistence_test.rb +629 -22
  325. data/test/cases/pooled_connections_test.rb +57 -56
  326. data/test/cases/prepared_statement_status_test.rb +8 -3
  327. data/test/cases/primary_class_test.rb +134 -0
  328. data/test/cases/primary_keys_test.rb +171 -55
  329. data/test/cases/query_cache_test.rb +558 -263
  330. data/test/cases/query_logs_test.rb +293 -0
  331. data/test/cases/quoting_test.rb +39 -72
  332. data/test/cases/readonly_test.rb +50 -12
  333. data/test/cases/reaper_test.rb +22 -6
  334. data/test/cases/reflection_test.rb +207 -9
  335. data/test/cases/relation/and_test.rb +43 -0
  336. data/test/cases/relation/delegation_test.rb +32 -5
  337. data/test/cases/relation/delete_all_test.rb +27 -6
  338. data/test/cases/relation/field_ordered_values_test.rb +128 -0
  339. data/test/cases/relation/load_async_test.rb +650 -0
  340. data/test/cases/relation/merging_test.rb +80 -109
  341. data/test/cases/relation/mutation_test.rb +12 -7
  342. data/test/cases/relation/or_test.rb +11 -8
  343. data/test/cases/relation/order_test.rb +90 -0
  344. data/test/cases/relation/predicate_builder_test.rb +21 -6
  345. data/test/cases/relation/select_test.rb +162 -3
  346. data/test/cases/relation/structural_compatibility_test.rb +38 -0
  347. data/test/cases/relation/update_all_test.rb +81 -27
  348. data/test/cases/relation/where_chain_test.rb +190 -3
  349. data/test/cases/relation/where_clause_test.rb +43 -1
  350. data/test/cases/relation/where_test.rb +95 -7
  351. data/test/cases/relation/with_test.rb +165 -0
  352. data/test/cases/relation_test.rb +42 -37
  353. data/test/cases/relations_test.rb +436 -138
  354. data/test/cases/reload_models_test.rb +18 -14
  355. data/test/cases/reserved_word_test.rb +2 -1
  356. data/test/cases/result_test.rb +14 -22
  357. data/test/cases/sanitize_test.rb +89 -27
  358. data/test/cases/schema_dumper_test.rb +535 -62
  359. data/test/cases/scoping/default_scoping_test.rb +219 -35
  360. data/test/cases/scoping/named_scoping_test.rb +25 -46
  361. data/test/cases/scoping/relation_scoping_test.rb +112 -4
  362. data/test/cases/secure_password_test.rb +108 -0
  363. data/test/cases/secure_token_test.rb +72 -0
  364. data/test/cases/serialization_test.rb +1 -1
  365. data/test/cases/serialized_attribute_test.rb +305 -60
  366. data/test/cases/shard_keys_test.rb +125 -0
  367. data/test/cases/shard_selector_test.rb +45 -0
  368. data/test/cases/signed_id_test.rb +57 -5
  369. data/test/cases/statement_cache_test.rb +31 -30
  370. data/test/cases/statement_invalid_test.rb +8 -4
  371. data/test/cases/store_test.rb +73 -9
  372. data/test/cases/strict_loading_test.rb +327 -13
  373. data/test/cases/table_metadata_test.rb +16 -0
  374. data/test/cases/tasks/database_tasks_test.rb +517 -244
  375. data/test/cases/test_case.rb +254 -60
  376. data/test/cases/test_case_test.rb +69 -0
  377. data/test/cases/test_databases_test.rb +7 -3
  378. data/test/cases/test_fixtures_test.rb +19 -40
  379. data/test/cases/time_precision_test.rb +17 -5
  380. data/test/cases/timestamp_test.rb +124 -16
  381. data/test/cases/token_for_test.rb +165 -0
  382. data/test/cases/touch_later_test.rb +43 -1
  383. data/test/cases/transaction_callbacks_test.rb +325 -8
  384. data/test/cases/transaction_instrumentation_test.rb +453 -0
  385. data/test/cases/transaction_isolation_test.rb +12 -8
  386. data/test/cases/transactions_test.rb +629 -112
  387. data/test/cases/type/date_time_test.rb +7 -1
  388. data/test/cases/type/time_test.rb +9 -0
  389. data/test/cases/type/type_map_test.rb +108 -73
  390. data/test/cases/type/unsigned_integer_test.rb +12 -0
  391. data/test/cases/type_caster/connection_test.rb +19 -0
  392. data/test/cases/type_test.rb +1 -1
  393. data/test/cases/unconnected_test.rb +7 -7
  394. data/test/cases/unsafe_raw_sql_test.rb +39 -8
  395. data/test/cases/validations/absence_validation_test.rb +1 -1
  396. data/test/cases/validations/association_validation_test.rb +25 -3
  397. data/test/cases/validations/numericality_validation_test.rb +3 -9
  398. data/test/cases/validations/presence_validation_test.rb +1 -1
  399. data/test/cases/validations/uniqueness_validation_test.rb +280 -40
  400. data/test/cases/validations_test.rb +2 -2
  401. data/test/cases/view_test.rb +33 -22
  402. data/test/cases/yaml_serialization_test.rb +23 -17
  403. data/test/config.example.yml +58 -56
  404. data/test/config.rb +1 -0
  405. data/test/fixtures/1_need_quoting.yml +2 -0
  406. data/test/fixtures/accounts.yml +5 -0
  407. data/test/fixtures/aircrafts.yml +7 -0
  408. data/test/fixtures/book_identifiers.yml +11 -0
  409. data/test/fixtures/books.yml +5 -4
  410. data/test/fixtures/cake_designers.yml +5 -0
  411. data/test/fixtures/cars.yml +6 -0
  412. data/test/fixtures/chefs.yml +5 -0
  413. data/test/fixtures/clothing_items.yml +23 -0
  414. data/test/fixtures/clubs.yml +1 -1
  415. data/test/fixtures/comments.yml +2 -1
  416. data/test/fixtures/cpk_authors.yml +8 -0
  417. data/test/fixtures/cpk_books.yml +21 -0
  418. data/test/fixtures/cpk_order_agreements.yml +13 -0
  419. data/test/fixtures/cpk_order_tags.yml +15 -0
  420. data/test/fixtures/cpk_orders.yml +11 -0
  421. data/test/fixtures/cpk_posts.yml +12 -0
  422. data/test/fixtures/cpk_reviews.yml +13 -0
  423. data/test/fixtures/cpk_tags.yml +11 -0
  424. data/test/fixtures/drink_designers.yml +5 -0
  425. data/test/fixtures/encrypted_book_that_ignores_cases.yml +4 -0
  426. data/test/fixtures/encrypted_books.yml +4 -0
  427. data/test/fixtures/fk_object_to_point_to.yml +2 -0
  428. data/test/fixtures/memberships.yml +15 -15
  429. data/test/fixtures/paragraphs.yml +5 -0
  430. data/test/fixtures/parrots.yml +4 -0
  431. data/test/fixtures/people.yml +2 -0
  432. data/test/fixtures/pirates.yml +2 -2
  433. data/test/fixtures/primary_key_error/primary_key_error.yml +6 -0
  434. data/test/fixtures/references.yml +3 -3
  435. data/test/fixtures/sharded_blog_posts.yml +14 -0
  436. data/test/fixtures/sharded_blog_posts_tags.yml +27 -0
  437. data/test/fixtures/sharded_blogs.yml +8 -0
  438. data/test/fixtures/sharded_comments.yml +22 -0
  439. data/test/fixtures/sharded_tags.yml +34 -0
  440. data/test/fixtures/sponsors.yml +2 -2
  441. data/test/fixtures/topics.yml +1 -0
  442. data/test/fixtures/treasures.yml +4 -0
  443. data/test/fixtures/virtual_columns.yml +5 -0
  444. data/test/fixtures/warehouse_things.yml +1 -1
  445. data/test/migrations/old_and_new_versions/20210716122844_add_people_description.rb +5 -0
  446. data/test/migrations/old_and_new_versions/20210716123013_add_people_number_of_legs.rb +5 -0
  447. data/test/migrations/old_and_new_versions/230_add_people_hobby.rb +5 -0
  448. data/test/migrations/old_and_new_versions/231_add_people_last_name.rb +5 -0
  449. data/test/migrations/scope/1_unscoped.rb +7 -0
  450. data/test/migrations/scope/2_mysql_only.mysql.rb +7 -0
  451. data/test/models/admin/user.rb +2 -0
  452. data/test/models/admin/user_json.rb +48 -0
  453. data/test/models/attachment.rb +7 -0
  454. data/test/models/author.rb +70 -3
  455. data/test/models/author_encrypted.rb +16 -0
  456. data/test/models/bird.rb +1 -1
  457. data/test/models/book.rb +18 -11
  458. data/test/models/book_destroy_async.rb +1 -1
  459. data/test/models/book_encrypted.rb +106 -0
  460. data/test/models/book_identifier.rb +5 -0
  461. data/test/models/branch.rb +11 -0
  462. data/test/models/bulb.rb +1 -1
  463. data/test/models/car.rb +8 -1
  464. data/test/models/cat.rb +1 -1
  465. data/test/models/category.rb +3 -1
  466. data/test/models/chat_message.rb +8 -0
  467. data/test/models/chef.rb +52 -0
  468. data/test/models/clothing_item.rb +12 -0
  469. data/test/models/club.rb +4 -1
  470. data/test/models/comment.rb +7 -4
  471. data/test/models/comment_overlapping_counter_cache.rb +15 -0
  472. data/test/models/company.rb +16 -2
  473. data/test/models/computer.rb +1 -0
  474. data/test/models/contact.rb +3 -3
  475. data/test/models/contract.rb +5 -1
  476. data/test/models/cpk/author.rb +9 -0
  477. data/test/models/cpk/book.rb +55 -0
  478. data/test/models/cpk/book_destroy_async.rb +9 -0
  479. data/test/models/cpk/car.rb +9 -0
  480. data/test/models/cpk/car_review.rb +9 -0
  481. data/test/models/cpk/chapter.rb +16 -0
  482. data/test/models/cpk/chapter_destroy_async.rb +10 -0
  483. data/test/models/cpk/comment.rb +9 -0
  484. data/test/models/cpk/order.rb +55 -0
  485. data/test/models/cpk/order_agreement.rb +10 -0
  486. data/test/models/cpk/order_tag.rb +10 -0
  487. data/test/models/cpk/post.rb +10 -0
  488. data/test/models/cpk/posts_tag.rb +10 -0
  489. data/test/models/cpk/review.rb +9 -0
  490. data/test/models/cpk/tag.rb +10 -0
  491. data/test/models/cpk.rb +15 -0
  492. data/test/models/customer.rb +3 -1
  493. data/test/models/destroy_async_parent.rb +1 -1
  494. data/test/models/developer.rb +44 -3
  495. data/test/models/discount.rb +4 -0
  496. data/test/models/drink_designer.rb +1 -0
  497. data/test/models/editor.rb +8 -0
  498. data/test/models/editorship.rb +6 -0
  499. data/test/models/entry.rb +5 -0
  500. data/test/models/essay.rb +6 -1
  501. data/test/models/essay_destroy_async.rb +1 -0
  502. data/test/models/eye.rb +87 -21
  503. data/test/models/face.rb +1 -1
  504. data/test/models/friendship.rb +3 -0
  505. data/test/models/hardback.rb +7 -0
  506. data/test/models/hotel.rb +2 -0
  507. data/test/models/human.rb +2 -2
  508. data/test/models/invoice.rb +2 -1
  509. data/test/models/invokes_an_undefined_method.rb +5 -0
  510. data/test/models/line_item.rb +6 -0
  511. data/test/models/member.rb +9 -4
  512. data/test/models/membership.rb +2 -2
  513. data/test/models/message.rb +2 -1
  514. data/test/models/need_quoting.rb +5 -0
  515. data/test/models/paragraph.rb +5 -0
  516. data/test/models/parrot.rb +6 -3
  517. data/test/models/person.rb +7 -4
  518. data/test/models/pirate.rb +4 -1
  519. data/test/models/pk_autopopulated_by_a_trigger_record.rb +5 -0
  520. data/test/models/post.rb +65 -2
  521. data/test/models/post_encrypted.rb +15 -0
  522. data/test/models/post_with_prefetched_pk.rb +15 -0
  523. data/test/models/project.rb +1 -0
  524. data/test/models/publication.rb +16 -0
  525. data/test/models/raises_argument_error.rb +5 -0
  526. data/test/models/raises_no_method_error.rb +5 -0
  527. data/test/models/recipient.rb +5 -0
  528. data/test/models/reference.rb +1 -1
  529. data/test/models/reply.rb +1 -1
  530. data/test/models/room.rb +3 -0
  531. data/test/models/sharded/blog.rb +12 -0
  532. data/test/models/sharded/blog_post.rb +17 -0
  533. data/test/models/sharded/blog_post_destroy_async.rb +14 -0
  534. data/test/models/sharded/blog_post_tag.rb +11 -0
  535. data/test/models/sharded/blog_post_with_revision.rb +11 -0
  536. data/test/models/sharded/comment.rb +12 -0
  537. data/test/models/sharded/comment_destroy_async.rb +12 -0
  538. data/test/models/sharded/tag.rb +11 -0
  539. data/test/models/sharded.rb +8 -0
  540. data/test/models/ship.rb +1 -1
  541. data/test/models/shipping_line.rb +11 -0
  542. data/test/models/subscriber.rb +1 -0
  543. data/test/models/subscription.rb +3 -1
  544. data/test/models/too_long_table_name.rb +5 -0
  545. data/test/models/topic.rb +3 -1
  546. data/test/models/traffic_light.rb +2 -2
  547. data/test/models/traffic_light_encrypted.rb +21 -0
  548. data/test/models/translation.rb +9 -0
  549. data/test/models/treasure.rb +1 -1
  550. data/test/models/tyre.rb +1 -1
  551. data/test/models/user.rb +16 -0
  552. data/test/models/user_with_invalid_relation.rb +28 -0
  553. data/test/models/uuid_comment.rb +5 -0
  554. data/test/models/uuid_entry.rb +5 -0
  555. data/test/models/uuid_message.rb +5 -0
  556. data/test/models/zine.rb +2 -1
  557. data/test/schema/mysql2_specific_schema.rb +26 -12
  558. data/test/schema/postgresql_specific_schema.rb +121 -13
  559. data/test/schema/schema.rb +361 -103
  560. data/test/schema/sqlite_specific_schema.rb +17 -6
  561. data/test/schema/trilogy_specific_schema.rb +96 -0
  562. data/test/support/adapter_helper.rb +104 -0
  563. data/test/support/async_helper.rb +15 -0
  564. data/test/support/config.rb +1 -1
  565. data/test/support/connection.rb +14 -2
  566. data/test/support/ddl_helper.rb +1 -1
  567. data/test/support/fake_adapter.rb +42 -0
  568. data/test/support/load_schema_helper.rb +22 -0
  569. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_1_topic.dump +0 -0
  570. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_1_topic_associations.dump +0 -0
  571. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_7_1_topic.dump +0 -0
  572. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_7_1_topic_associations.dump +0 -0
  573. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_1_topic.dump +0 -0
  574. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_1_topic_associations.dump +0 -0
  575. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_7_1_topic.dump +0 -0
  576. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_7_1_topic_associations.dump +0 -0
  577. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_1_topic.dump +0 -0
  578. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_1_topic_associations.dump +0 -0
  579. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_7_1_topic.dump +0 -0
  580. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_7_1_topic_associations.dump +0 -0
  581. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_1_topic.dump +0 -0
  582. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_1_topic_associations.dump +0 -0
  583. data/test/support/marshal_compatibility_fixtures/SQLite/rails_7_1_topic.dump +0 -0
  584. data/test/support/marshal_compatibility_fixtures/SQLite/rails_7_1_topic_associations.dump +0 -0
  585. data/test/support/marshal_compatibility_fixtures/Trilogy/rails_6_1_topic.dump +0 -0
  586. data/test/support/marshal_compatibility_fixtures/Trilogy/rails_6_1_topic_associations.dump +0 -0
  587. data/test/support/marshal_compatibility_fixtures/Trilogy/rails_7_1_topic.dump +0 -0
  588. data/test/support/marshal_compatibility_fixtures/Trilogy/rails_7_1_topic_associations.dump +0 -0
  589. data/test/support/schema_dumping_helper.rb +15 -9
  590. data/test/support/tools.rb +37 -0
  591. data/test/support/yaml_compatibility_fixtures/rails_4_1_no_symbol.yml +22 -0
  592. metadata +247 -15
@@ -4,8 +4,6 @@ require "cases/helper"
4
4
  require "cases/migration/helper"
5
5
 
6
6
  class MigratorTest < ActiveRecord::TestCase
7
- self.use_transactional_tests = false
8
-
9
7
  # Use this class to sense if migrations have gone
10
8
  # up or down.
11
9
  class Sensor < ActiveRecord::Migration::Current
@@ -23,9 +21,11 @@ class MigratorTest < ActiveRecord::TestCase
23
21
 
24
22
  def setup
25
23
  super
26
- @schema_migration = ActiveRecord::Base.connection.schema_migration
24
+ @pool = ActiveRecord::Base.connection_pool
25
+ @schema_migration = @pool.schema_migration
27
26
  @schema_migration.create_table
28
- @schema_migration.delete_all rescue nil
27
+ @schema_migration.delete_all_versions rescue nil
28
+ @internal_metadata = @pool.internal_metadata
29
29
  @verbose_was = ActiveRecord::Migration.verbose
30
30
  ActiveRecord::Migration.message_count = 0
31
31
  ActiveRecord::Migration.class_eval do
@@ -37,7 +37,7 @@ class MigratorTest < ActiveRecord::TestCase
37
37
  end
38
38
 
39
39
  teardown do
40
- @schema_migration.delete_all rescue nil
40
+ @schema_migration.delete_all_versions rescue nil
41
41
  ActiveRecord::Migration.verbose = @verbose_was
42
42
  ActiveRecord::Migration.class_eval do
43
43
  undef :puts
@@ -50,7 +50,7 @@ class MigratorTest < ActiveRecord::TestCase
50
50
  def test_migrator_with_duplicate_names
51
51
  e = assert_raises(ActiveRecord::DuplicateMigrationNameError) do
52
52
  list = [ActiveRecord::Migration.new("Chunky"), ActiveRecord::Migration.new("Chunky")]
53
- ActiveRecord::Migrator.new(:up, list, @schema_migration)
53
+ ActiveRecord::Migrator.new(:up, list, @schema_migration, @internal_metadata)
54
54
  end
55
55
  assert_match(/Multiple migrations have the name Chunky/, e.message)
56
56
  end
@@ -58,40 +58,39 @@ class MigratorTest < ActiveRecord::TestCase
58
58
  def test_migrator_with_duplicate_versions
59
59
  assert_raises(ActiveRecord::DuplicateMigrationVersionError) do
60
60
  list = [ActiveRecord::Migration.new("Foo", 1), ActiveRecord::Migration.new("Bar", 1)]
61
- ActiveRecord::Migrator.new(:up, list, @schema_migration)
61
+ ActiveRecord::Migrator.new(:up, list, @schema_migration, @internal_metadata)
62
62
  end
63
63
  end
64
64
 
65
65
  def test_migrator_with_missing_version_numbers
66
66
  assert_raises(ActiveRecord::UnknownMigrationVersionError) do
67
67
  list = [ActiveRecord::Migration.new("Foo", 1), ActiveRecord::Migration.new("Bar", 2)]
68
- ActiveRecord::Migrator.new(:up, list, @schema_migration, 3).run
68
+ ActiveRecord::Migrator.new(:up, list, @schema_migration, @internal_metadata, 3).run
69
69
  end
70
70
 
71
71
  assert_raises(ActiveRecord::UnknownMigrationVersionError) do
72
72
  list = [ActiveRecord::Migration.new("Foo", 1), ActiveRecord::Migration.new("Bar", 2)]
73
- ActiveRecord::Migrator.new(:up, list, @schema_migration, -1).run
73
+ ActiveRecord::Migrator.new(:up, list, @schema_migration, @internal_metadata, -1).run
74
74
  end
75
75
 
76
76
  assert_raises(ActiveRecord::UnknownMigrationVersionError) do
77
77
  list = [ActiveRecord::Migration.new("Foo", 1), ActiveRecord::Migration.new("Bar", 2)]
78
- ActiveRecord::Migrator.new(:up, list, @schema_migration, 0).run
78
+ ActiveRecord::Migrator.new(:up, list, @schema_migration, @internal_metadata, 0).run
79
79
  end
80
80
 
81
81
  assert_raises(ActiveRecord::UnknownMigrationVersionError) do
82
82
  list = [ActiveRecord::Migration.new("Foo", 1), ActiveRecord::Migration.new("Bar", 2)]
83
- ActiveRecord::Migrator.new(:up, list, @schema_migration, 3).migrate
83
+ ActiveRecord::Migrator.new(:up, list, @schema_migration, @internal_metadata, 3).migrate
84
84
  end
85
85
 
86
86
  assert_raises(ActiveRecord::UnknownMigrationVersionError) do
87
87
  list = [ActiveRecord::Migration.new("Foo", 1), ActiveRecord::Migration.new("Bar", 2)]
88
- ActiveRecord::Migrator.new(:up, list, @schema_migration, -1).migrate
88
+ ActiveRecord::Migrator.new(:up, list, @schema_migration, @internal_metadata, -1).migrate
89
89
  end
90
90
  end
91
91
 
92
92
  def test_finds_migrations
93
- schema_migration = ActiveRecord::Base.connection.schema_migration
94
- migrations = ActiveRecord::MigrationContext.new(MIGRATIONS_ROOT + "/valid", schema_migration).migrations
93
+ migrations = ActiveRecord::MigrationContext.new(MIGRATIONS_ROOT + "/valid", @schema_migration, @internal_metadata).migrations
95
94
 
96
95
  [[1, "ValidPeopleHaveLastNames"], [2, "WeNeedReminders"], [3, "InnocentJointable"]].each_with_index do |pair, i|
97
96
  assert_equal migrations[i].version, pair.first
@@ -100,8 +99,7 @@ class MigratorTest < ActiveRecord::TestCase
100
99
  end
101
100
 
102
101
  def test_finds_migrations_in_subdirectories
103
- schema_migration = ActiveRecord::Base.connection.schema_migration
104
- migrations = ActiveRecord::MigrationContext.new(MIGRATIONS_ROOT + "/valid_with_subdirectories", schema_migration).migrations
102
+ migrations = ActiveRecord::MigrationContext.new(MIGRATIONS_ROOT + "/valid_with_subdirectories", @schema_migration, @internal_metadata).migrations
105
103
 
106
104
  [[1, "ValidPeopleHaveLastNames"], [2, "WeNeedReminders"], [3, "InnocentJointable"]].each_with_index do |pair, i|
107
105
  assert_equal migrations[i].version, pair.first
@@ -110,9 +108,8 @@ class MigratorTest < ActiveRecord::TestCase
110
108
  end
111
109
 
112
110
  def test_finds_migrations_from_two_directories
113
- schema_migration = ActiveRecord::Base.connection.schema_migration
114
111
  directories = [MIGRATIONS_ROOT + "/valid_with_timestamps", MIGRATIONS_ROOT + "/to_copy_with_timestamps"]
115
- migrations = ActiveRecord::MigrationContext.new(directories, schema_migration).migrations
112
+ migrations = ActiveRecord::MigrationContext.new(directories, @schema_migration, @internal_metadata).migrations
116
113
 
117
114
  [[20090101010101, "PeopleHaveHobbies"],
118
115
  [20090101010202, "PeopleHaveDescriptions"],
@@ -125,16 +122,14 @@ class MigratorTest < ActiveRecord::TestCase
125
122
  end
126
123
 
127
124
  def test_finds_migrations_in_numbered_directory
128
- schema_migration = ActiveRecord::Base.connection.schema_migration
129
- migrations = ActiveRecord::MigrationContext.new(MIGRATIONS_ROOT + "/10_urban", schema_migration).migrations
125
+ migrations = ActiveRecord::MigrationContext.new(MIGRATIONS_ROOT + "/10_urban", @schema_migration, @internal_metadata).migrations
130
126
  assert_equal 9, migrations[0].version
131
127
  assert_equal "AddExpressions", migrations[0].name
132
128
  end
133
129
 
134
130
  def test_relative_migrations
135
- schema_migration = ActiveRecord::Base.connection.schema_migration
136
131
  list = Dir.chdir(MIGRATIONS_ROOT) do
137
- ActiveRecord::MigrationContext.new("valid", schema_migration).migrations
132
+ ActiveRecord::MigrationContext.new("valid", @schema_migration, @internal_metadata).migrations
138
133
  end
139
134
 
140
135
  migration_proxy = list.find { |item|
@@ -144,9 +139,9 @@ class MigratorTest < ActiveRecord::TestCase
144
139
  end
145
140
 
146
141
  def test_finds_pending_migrations
147
- @schema_migration.create!(version: "1")
142
+ @schema_migration.create_version("1")
148
143
  migration_list = [ActiveRecord::Migration.new("foo", 1), ActiveRecord::Migration.new("bar", 3)]
149
- migrations = ActiveRecord::Migrator.new(:up, migration_list, @schema_migration).pending_migrations
144
+ migrations = ActiveRecord::Migrator.new(:up, migration_list, @schema_migration, @internal_metadata).pending_migrations
150
145
 
151
146
  assert_equal 1, migrations.size
152
147
  assert_equal migration_list.last, migrations.first
@@ -154,38 +149,70 @@ class MigratorTest < ActiveRecord::TestCase
154
149
 
155
150
  def test_migrations_status
156
151
  path = MIGRATIONS_ROOT + "/valid"
157
- schema_migration = ActiveRecord::Base.connection.schema_migration
158
152
 
159
- @schema_migration.create(version: 2)
160
- @schema_migration.create(version: 10)
153
+ @schema_migration.create_version(2)
154
+ @schema_migration.create_version(10)
161
155
 
162
156
  assert_equal [
163
157
  ["down", "001", "Valid people have last names"],
164
158
  ["up", "002", "We need reminders"],
165
159
  ["down", "003", "Innocent jointable"],
166
160
  ["up", "010", "********** NO FILE **********"],
167
- ], ActiveRecord::MigrationContext.new(path, schema_migration).migrations_status
161
+ ], ActiveRecord::MigrationContext.new(path, @schema_migration, @internal_metadata).migrations_status
162
+ end
163
+
164
+ def test_migrations_status_order_new_and_old_version
165
+ path = MIGRATIONS_ROOT + "/old_and_new_versions"
166
+ @schema_migration.create_version(230)
167
+ @schema_migration.create_version(231)
168
+ @schema_migration.create_version(20210716122844)
169
+ @schema_migration.create_version(20210716123013)
170
+
171
+ assert_equal [
172
+ ["up", "230", "Add people hobby"],
173
+ ["up", "231", "Add people last name"],
174
+ ["up", "20210716122844", "Add people description"],
175
+ ["up", "20210716123013", "Add people number of legs"],
176
+ ], ActiveRecord::MigrationContext.new(path, @schema_migration, @internal_metadata).migrations_status
177
+ end
178
+
179
+ def test_migrations_status_order_new_and_old_version_applied_out_of_order
180
+ path = MIGRATIONS_ROOT + "/old_and_new_versions"
181
+
182
+ @schema_migration.create_version(230)
183
+ @schema_migration.create_version(231)
184
+
185
+ # "Apply" a newer migration and not an older to simulate out-of-order
186
+ # migration application which should not affect ordering in status and is
187
+ # possible if a branch is merged which contains a migration which has an
188
+ # earlier version but is judged to be compatible with existing migrations.
189
+ @schema_migration.create_version(20210716123013)
190
+
191
+ assert_equal [
192
+ ["up", "230", "Add people hobby"],
193
+ ["up", "231", "Add people last name"],
194
+ ["down", "20210716122844", "Add people description"],
195
+ ["up", "20210716123013", "Add people number of legs"],
196
+ ], ActiveRecord::MigrationContext.new(path, @schema_migration, @internal_metadata).migrations_status
168
197
  end
169
198
 
170
199
  def test_migrations_status_in_subdirectories
171
200
  path = MIGRATIONS_ROOT + "/valid_with_subdirectories"
172
- schema_migration = ActiveRecord::Base.connection.schema_migration
173
201
 
174
- @schema_migration.create(version: 2)
175
- @schema_migration.create(version: 10)
202
+ @schema_migration.create_version(2)
203
+ @schema_migration.create_version(10)
176
204
 
177
205
  assert_equal [
178
206
  ["down", "001", "Valid people have last names"],
179
207
  ["up", "002", "We need reminders"],
180
208
  ["down", "003", "Innocent jointable"],
181
209
  ["up", "010", "********** NO FILE **********"],
182
- ], ActiveRecord::MigrationContext.new(path, schema_migration).migrations_status
210
+ ], ActiveRecord::MigrationContext.new(path, @schema_migration, @internal_metadata).migrations_status
183
211
  end
184
212
 
185
213
  def test_migrations_status_with_schema_define_in_subdirectories
186
214
  path = MIGRATIONS_ROOT + "/valid_with_subdirectories"
187
215
  prev_paths = ActiveRecord::Migrator.migrations_paths
188
- schema_migration = ActiveRecord::Base.connection.schema_migration
189
216
  ActiveRecord::Migrator.migrations_paths = path
190
217
 
191
218
  ActiveRecord::Schema.define(version: 3) do
@@ -195,17 +222,16 @@ class MigratorTest < ActiveRecord::TestCase
195
222
  ["up", "001", "Valid people have last names"],
196
223
  ["up", "002", "We need reminders"],
197
224
  ["up", "003", "Innocent jointable"],
198
- ], ActiveRecord::MigrationContext.new(path, schema_migration).migrations_status
225
+ ], ActiveRecord::MigrationContext.new(path, @schema_migration, @internal_metadata).migrations_status
199
226
  ensure
200
227
  ActiveRecord::Migrator.migrations_paths = prev_paths
201
228
  end
202
229
 
203
230
  def test_migrations_status_from_two_directories
204
231
  paths = [MIGRATIONS_ROOT + "/valid_with_timestamps", MIGRATIONS_ROOT + "/to_copy_with_timestamps"]
205
- schema_migration = ActiveRecord::Base.connection.schema_migration
206
232
 
207
- @schema_migration.create(version: "20100101010101")
208
- @schema_migration.create(version: "20160528010101")
233
+ @schema_migration.create_version("20100101010101")
234
+ @schema_migration.create_version("20160528010101")
209
235
 
210
236
  assert_equal [
211
237
  ["down", "20090101010101", "People have hobbies"],
@@ -214,18 +240,18 @@ class MigratorTest < ActiveRecord::TestCase
214
240
  ["down", "20100201010101", "Valid with timestamps we need reminders"],
215
241
  ["down", "20100301010101", "Valid with timestamps innocent jointable"],
216
242
  ["up", "20160528010101", "********** NO FILE **********"],
217
- ], ActiveRecord::MigrationContext.new(paths, schema_migration).migrations_status
243
+ ], ActiveRecord::MigrationContext.new(paths, @schema_migration, @internal_metadata).migrations_status
218
244
  end
219
245
 
220
246
  def test_migrator_interleaved_migrations
221
247
  pass_one = [Sensor.new("One", 1)]
222
248
 
223
- ActiveRecord::Migrator.new(:up, pass_one, @schema_migration).migrate
249
+ ActiveRecord::Migrator.new(:up, pass_one, @schema_migration, @internal_metadata).migrate
224
250
  assert pass_one.first.went_up
225
251
  assert_not pass_one.first.went_down
226
252
 
227
253
  pass_two = [Sensor.new("One", 1), Sensor.new("Three", 3)]
228
- ActiveRecord::Migrator.new(:up, pass_two, @schema_migration).migrate
254
+ ActiveRecord::Migrator.new(:up, pass_two, @schema_migration, @internal_metadata).migrate
229
255
  assert_not pass_two[0].went_up
230
256
  assert pass_two[1].went_up
231
257
  assert pass_two.all? { |x| !x.went_down }
@@ -234,7 +260,7 @@ class MigratorTest < ActiveRecord::TestCase
234
260
  Sensor.new("Two", 2),
235
261
  Sensor.new("Three", 3)]
236
262
 
237
- ActiveRecord::Migrator.new(:down, pass_three, @schema_migration).migrate
263
+ ActiveRecord::Migrator.new(:down, pass_three, @schema_migration, @internal_metadata).migrate
238
264
  assert pass_three[0].went_down
239
265
  assert_not pass_three[1].went_down
240
266
  assert pass_three[2].went_down
@@ -242,7 +268,7 @@ class MigratorTest < ActiveRecord::TestCase
242
268
 
243
269
  def test_up_calls_up
244
270
  migrations = [Sensor.new(nil, 0), Sensor.new(nil, 1), Sensor.new(nil, 2)]
245
- migrator = ActiveRecord::Migrator.new(:up, migrations, @schema_migration)
271
+ migrator = ActiveRecord::Migrator.new(:up, migrations, @schema_migration, @internal_metadata)
246
272
  migrator.migrate
247
273
  assert migrations.all?(&:went_up)
248
274
  assert migrations.all? { |m| !m.went_down }
@@ -253,7 +279,7 @@ class MigratorTest < ActiveRecord::TestCase
253
279
  test_up_calls_up
254
280
 
255
281
  migrations = [Sensor.new(nil, 0), Sensor.new(nil, 1), Sensor.new(nil, 2)]
256
- migrator = ActiveRecord::Migrator.new(:down, migrations, @schema_migration)
282
+ migrator = ActiveRecord::Migrator.new(:down, migrations, @schema_migration, @internal_metadata)
257
283
  migrator.migrate
258
284
  assert migrations.all? { |m| !m.went_up }
259
285
  assert migrations.all?(&:went_down)
@@ -261,31 +287,32 @@ class MigratorTest < ActiveRecord::TestCase
261
287
  end
262
288
 
263
289
  def test_current_version
264
- @schema_migration.create!(version: "1000")
265
- schema_migration = ActiveRecord::Base.connection.schema_migration
266
- migrator = ActiveRecord::MigrationContext.new("db/migrate", schema_migration)
290
+ @schema_migration.create_version("1000")
291
+ schema_migration = ActiveRecord::Base.connection_pool.schema_migration
292
+ internal_metadata = ActiveRecord::Base.connection_pool.internal_metadata
293
+ migrator = ActiveRecord::MigrationContext.new("db/migrate", schema_migration, internal_metadata)
267
294
  assert_equal 1000, migrator.current_version
268
295
  end
269
296
 
270
297
  def test_migrator_one_up
271
298
  calls, migrations = sensors(3)
272
299
 
273
- ActiveRecord::Migrator.new(:up, migrations, @schema_migration, 1).migrate
300
+ ActiveRecord::Migrator.new(:up, migrations, @schema_migration, @internal_metadata, 1).migrate
274
301
  assert_equal [[:up, 1]], calls
275
302
  calls.clear
276
303
 
277
- ActiveRecord::Migrator.new(:up, migrations, @schema_migration, 2).migrate
304
+ ActiveRecord::Migrator.new(:up, migrations, @schema_migration, @internal_metadata, 2).migrate
278
305
  assert_equal [[:up, 2]], calls
279
306
  end
280
307
 
281
308
  def test_migrator_one_down
282
309
  calls, migrations = sensors(3)
283
310
 
284
- ActiveRecord::Migrator.new(:up, migrations, @schema_migration).migrate
311
+ ActiveRecord::Migrator.new(:up, migrations, @schema_migration, @internal_metadata).migrate
285
312
  assert_equal [[:up, 1], [:up, 2], [:up, 3]], calls
286
313
  calls.clear
287
314
 
288
- ActiveRecord::Migrator.new(:down, migrations, @schema_migration, 1).migrate
315
+ ActiveRecord::Migrator.new(:down, migrations, @schema_migration, @internal_metadata, 1).migrate
289
316
 
290
317
  assert_equal [[:down, 3], [:down, 2]], calls
291
318
  end
@@ -293,17 +320,17 @@ class MigratorTest < ActiveRecord::TestCase
293
320
  def test_migrator_one_up_one_down
294
321
  calls, migrations = sensors(3)
295
322
 
296
- ActiveRecord::Migrator.new(:up, migrations, @schema_migration, 1).migrate
323
+ ActiveRecord::Migrator.new(:up, migrations, @schema_migration, @internal_metadata, 1).migrate
297
324
  assert_equal [[:up, 1]], calls
298
325
  calls.clear
299
326
 
300
- ActiveRecord::Migrator.new(:down, migrations, @schema_migration, 0).migrate
327
+ ActiveRecord::Migrator.new(:down, migrations, @schema_migration, @internal_metadata, 0).migrate
301
328
  assert_equal [[:down, 1]], calls
302
329
  end
303
330
 
304
331
  def test_migrator_double_up
305
332
  calls, migrations = sensors(3)
306
- migrator = ActiveRecord::Migrator.new(:up, migrations, @schema_migration, 1)
333
+ migrator = ActiveRecord::Migrator.new(:up, migrations, @schema_migration, @internal_metadata, 1)
307
334
  assert_equal(0, migrator.current_version)
308
335
 
309
336
  migrator.migrate
@@ -316,7 +343,7 @@ class MigratorTest < ActiveRecord::TestCase
316
343
 
317
344
  def test_migrator_double_down
318
345
  calls, migrations = sensors(3)
319
- migrator = ActiveRecord::Migrator.new(:up, migrations, @schema_migration, 1)
346
+ migrator = ActiveRecord::Migrator.new(:up, migrations, @schema_migration, @internal_metadata, 1)
320
347
 
321
348
  assert_equal 0, migrator.current_version
322
349
 
@@ -324,7 +351,7 @@ class MigratorTest < ActiveRecord::TestCase
324
351
  assert_equal [[:up, 1]], calls
325
352
  calls.clear
326
353
 
327
- migrator = ActiveRecord::Migrator.new(:down, migrations, @schema_migration, 1)
354
+ migrator = ActiveRecord::Migrator.new(:down, migrations, @schema_migration, @internal_metadata, 1)
328
355
  migrator.run
329
356
  assert_equal [[:down, 1]], calls
330
357
  calls.clear
@@ -339,12 +366,12 @@ class MigratorTest < ActiveRecord::TestCase
339
366
  _, migrations = sensors(3)
340
367
 
341
368
  ActiveRecord::Migration.verbose = true
342
- ActiveRecord::Migrator.new(:up, migrations, @schema_migration, 1).migrate
369
+ ActiveRecord::Migrator.new(:up, migrations, @schema_migration, @internal_metadata, 1).migrate
343
370
  assert_not_equal 0, ActiveRecord::Migration.message_count
344
371
 
345
372
  ActiveRecord::Migration.message_count = 0
346
373
 
347
- ActiveRecord::Migrator.new(:down, migrations, @schema_migration, 0).migrate
374
+ ActiveRecord::Migrator.new(:down, migrations, @schema_migration, @internal_metadata, 0).migrate
348
375
  assert_not_equal 0, ActiveRecord::Migration.message_count
349
376
  end
350
377
 
@@ -352,9 +379,9 @@ class MigratorTest < ActiveRecord::TestCase
352
379
  _, migrations = sensors(3)
353
380
 
354
381
  ActiveRecord::Migration.verbose = false
355
- ActiveRecord::Migrator.new(:up, migrations, @schema_migration, 1).migrate
382
+ ActiveRecord::Migrator.new(:up, migrations, @schema_migration, @internal_metadata, 1).migrate
356
383
  assert_equal 0, ActiveRecord::Migration.message_count
357
- ActiveRecord::Migrator.new(:down, migrations, @schema_migration, 0).migrate
384
+ ActiveRecord::Migrator.new(:down, migrations, @schema_migration, @internal_metadata, 0).migrate
358
385
  assert_equal 0, ActiveRecord::Migration.message_count
359
386
  end
360
387
 
@@ -362,22 +389,22 @@ class MigratorTest < ActiveRecord::TestCase
362
389
  calls, migrations = sensors(3)
363
390
 
364
391
  # migrate up to 1
365
- ActiveRecord::Migrator.new(:up, migrations, @schema_migration, 1).migrate
392
+ ActiveRecord::Migrator.new(:up, migrations, @schema_migration, @internal_metadata, 1).migrate
366
393
  assert_equal [[:up, 1]], calls
367
394
  calls.clear
368
395
 
369
396
  # migrate down to 0
370
- ActiveRecord::Migrator.new(:down, migrations, @schema_migration, 0).migrate
397
+ ActiveRecord::Migrator.new(:down, migrations, @schema_migration, @internal_metadata, 0).migrate
371
398
  assert_equal [[:down, 1]], calls
372
399
  calls.clear
373
400
 
374
401
  # migrate down to 0 again
375
- ActiveRecord::Migrator.new(:down, migrations, @schema_migration, 0).migrate
402
+ ActiveRecord::Migrator.new(:down, migrations, @schema_migration, @internal_metadata, 0).migrate
376
403
  assert_equal [], calls
377
404
  end
378
405
 
379
406
  def test_migrator_going_down_due_to_version_target
380
- schema_migration = ActiveRecord::Base.connection.schema_migration
407
+ schema_migration = ActiveRecord::Base.connection_pool.schema_migration
381
408
  calls, migrator = migrator_class(3)
382
409
  migrator = migrator.new("valid", schema_migration)
383
410
 
@@ -394,7 +421,7 @@ class MigratorTest < ActiveRecord::TestCase
394
421
  end
395
422
 
396
423
  def test_migrator_output_when_running_multiple_migrations
397
- schema_migration = ActiveRecord::Base.connection.schema_migration
424
+ schema_migration = ActiveRecord::Base.connection_pool.schema_migration
398
425
  _, migrator = migrator_class(3)
399
426
  migrator = migrator.new("valid", schema_migration)
400
427
 
@@ -410,17 +437,17 @@ class MigratorTest < ActiveRecord::TestCase
410
437
  end
411
438
 
412
439
  def test_migrator_output_when_running_single_migration
413
- schema_migration = ActiveRecord::Base.connection.schema_migration
440
+ schema_migration = ActiveRecord::Base.connection_pool.schema_migration
414
441
  _, migrator = migrator_class(1)
415
442
  migrator = migrator.new("valid", schema_migration)
416
443
 
417
444
  result = migrator.run(:up, 1)
418
445
 
419
- assert_equal(1, result.version)
446
+ assert_equal("1", result)
420
447
  end
421
448
 
422
449
  def test_migrator_rollback
423
- schema_migration = ActiveRecord::Base.connection.schema_migration
450
+ schema_migration = ActiveRecord::Base.connection_pool.schema_migration
424
451
  _, migrator = migrator_class(3)
425
452
  migrator = migrator.new("valid", schema_migration)
426
453
 
@@ -441,18 +468,18 @@ class MigratorTest < ActiveRecord::TestCase
441
468
  end
442
469
 
443
470
  def test_migrator_db_has_no_schema_migrations_table
444
- schema_migration = ActiveRecord::Base.connection.schema_migration
471
+ schema_migration = ActiveRecord::Base.connection_pool.schema_migration
445
472
  _, migrator = migrator_class(3)
446
473
  migrator = migrator.new("valid", schema_migration)
447
474
 
448
- ActiveRecord::SchemaMigration.drop_table
449
- assert_not_predicate ActiveRecord::SchemaMigration, :table_exists?
475
+ @schema_migration.drop_table
476
+ assert_not_predicate @schema_migration, :table_exists?
450
477
  migrator.migrate(1)
451
- assert_predicate ActiveRecord::SchemaMigration, :table_exists?
478
+ assert_predicate @schema_migration, :table_exists?
452
479
  end
453
480
 
454
481
  def test_migrator_forward
455
- schema_migration = ActiveRecord::Base.connection.schema_migration
482
+ schema_migration = ActiveRecord::Base.connection_pool.schema_migration
456
483
  _, migrator = migrator_class(3)
457
484
  migrator = migrator.new("/valid", schema_migration)
458
485
  migrator.migrate(1)
@@ -467,9 +494,9 @@ class MigratorTest < ActiveRecord::TestCase
467
494
 
468
495
  def test_only_loads_pending_migrations
469
496
  # migrate up to 1
470
- @schema_migration.create!(version: "1")
497
+ @schema_migration.create_version("1")
471
498
 
472
- schema_migration = ActiveRecord::Base.connection.schema_migration
499
+ schema_migration = ActiveRecord::Base.connection_pool.schema_migration
473
500
  calls, migrator = migrator_class(3)
474
501
  migrator = migrator.new("valid", schema_migration)
475
502
  migrator.migrate
@@ -478,7 +505,7 @@ class MigratorTest < ActiveRecord::TestCase
478
505
  end
479
506
 
480
507
  def test_get_all_versions
481
- schema_migration = ActiveRecord::Base.connection.schema_migration
508
+ schema_migration = ActiveRecord::Base.connection_pool.schema_migration
482
509
  _, migrator = migrator_class(3)
483
510
  migrator = migrator.new("valid", schema_migration)
484
511