ibm_db 5.6.1-arm64-darwin-24

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 (753) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGES +299 -0
  3. data/LICENSE +55 -0
  4. data/MANIFEST +14 -0
  5. data/ParameterizedQueries README +39 -0
  6. data/README +210 -0
  7. data/ext/Makefile +270 -0
  8. data/ext/Makefile.nt32 +181 -0
  9. data/ext/Makefile.nt32.191 +212 -0
  10. data/ext/extconf.rb +320 -0
  11. data/ext/gil_release_version.h +3 -0
  12. data/ext/ibm_db.bundle +0 -0
  13. data/ext/ibm_db.c +11865 -0
  14. data/ext/ibm_db.o +0 -0
  15. data/ext/mkmf.log +98 -0
  16. data/ext/ruby_ibm_db.h +241 -0
  17. data/ext/ruby_ibm_db_cli.c +867 -0
  18. data/ext/ruby_ibm_db_cli.h +508 -0
  19. data/ext/ruby_ibm_db_cli.o +0 -0
  20. data/ext/unicode_support_version.h +3 -0
  21. data/init.rb +42 -0
  22. data/lib/IBM_DB.rb +27 -0
  23. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +4407 -0
  24. data/lib/active_record/connection_adapters/ibm_db_pstmt.rb +1965 -0
  25. data/lib/active_record/connection_adapters/ibmdb_adapter.rb +5 -0
  26. data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -0
  27. data/lib/ibm_db.bundle +0 -0
  28. data/test/active_record/connection_adapters/fake_adapter.rb +52 -0
  29. data/test/activejob/destroy_association_async_test.rb +305 -0
  30. data/test/activejob/destroy_async_job_not_present_test.rb +31 -0
  31. data/test/activejob/helper.rb +15 -0
  32. data/test/assets/example.log +1 -0
  33. data/test/assets/flowers.jpg +0 -0
  34. data/test/assets/schema_dump_5_1.yml +345 -0
  35. data/test/assets/test.txt +1 -0
  36. data/test/cases/adapter_prevent_writes_test.rb +334 -0
  37. data/test/cases/adapter_test.rb +565 -0
  38. data/test/cases/adapters/mysql2/active_schema_test.rb +203 -0
  39. data/test/cases/adapters/mysql2/auto_increment_test.rb +34 -0
  40. data/test/cases/adapters/mysql2/bind_parameter_test.rb +52 -0
  41. data/test/cases/adapters/mysql2/boolean_test.rb +102 -0
  42. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +65 -0
  43. data/test/cases/adapters/mysql2/charset_collation_test.rb +57 -0
  44. data/test/cases/adapters/mysql2/connection_test.rb +208 -0
  45. data/test/cases/adapters/mysql2/count_deleted_rows_with_lock_test.rb +28 -0
  46. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +49 -0
  47. data/test/cases/adapters/mysql2/enum_test.rb +47 -0
  48. data/test/cases/adapters/mysql2/explain_test.rb +23 -0
  49. data/test/cases/adapters/mysql2/json_test.rb +24 -0
  50. data/test/cases/adapters/mysql2/mysql2_adapter_prevent_writes_test.rb +208 -0
  51. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +238 -0
  52. data/test/cases/adapters/mysql2/nested_deadlock_test.rb +75 -0
  53. data/test/cases/adapters/mysql2/optimizer_hints_test.rb +69 -0
  54. data/test/cases/adapters/mysql2/reserved_word_test.rb +152 -0
  55. data/test/cases/adapters/mysql2/schema_migrations_test.rb +64 -0
  56. data/test/cases/adapters/mysql2/schema_test.rb +128 -0
  57. data/test/cases/adapters/mysql2/set_test.rb +32 -0
  58. data/test/cases/adapters/mysql2/sp_test.rb +38 -0
  59. data/test/cases/adapters/mysql2/sql_types_test.rb +16 -0
  60. data/test/cases/adapters/mysql2/table_options_test.rb +125 -0
  61. data/test/cases/adapters/mysql2/transaction_test.rb +151 -0
  62. data/test/cases/adapters/mysql2/unsigned_type_test.rb +68 -0
  63. data/test/cases/adapters/mysql2/virtual_column_test.rb +66 -0
  64. data/test/cases/adapters/postgresql/active_schema_test.rb +113 -0
  65. data/test/cases/adapters/postgresql/array_test.rb +394 -0
  66. data/test/cases/adapters/postgresql/bit_string_test.rb +84 -0
  67. data/test/cases/adapters/postgresql/bytea_test.rb +135 -0
  68. data/test/cases/adapters/postgresql/case_insensitive_test.rb +27 -0
  69. data/test/cases/adapters/postgresql/change_schema_test.rb +40 -0
  70. data/test/cases/adapters/postgresql/cidr_test.rb +27 -0
  71. data/test/cases/adapters/postgresql/citext_test.rb +78 -0
  72. data/test/cases/adapters/postgresql/collation_test.rb +55 -0
  73. data/test/cases/adapters/postgresql/composite_test.rb +134 -0
  74. data/test/cases/adapters/postgresql/connection_test.rb +245 -0
  75. data/test/cases/adapters/postgresql/create_unlogged_tables_test.rb +74 -0
  76. data/test/cases/adapters/postgresql/datatype_test.rb +89 -0
  77. data/test/cases/adapters/postgresql/date_test.rb +42 -0
  78. data/test/cases/adapters/postgresql/domain_test.rb +49 -0
  79. data/test/cases/adapters/postgresql/enum_test.rb +93 -0
  80. data/test/cases/adapters/postgresql/explain_test.rb +22 -0
  81. data/test/cases/adapters/postgresql/extension_migration_test.rb +64 -0
  82. data/test/cases/adapters/postgresql/foreign_table_test.rb +109 -0
  83. data/test/cases/adapters/postgresql/full_text_test.rb +46 -0
  84. data/test/cases/adapters/postgresql/geometric_test.rb +372 -0
  85. data/test/cases/adapters/postgresql/hstore_test.rb +390 -0
  86. data/test/cases/adapters/postgresql/infinity_test.rb +108 -0
  87. data/test/cases/adapters/postgresql/integer_test.rb +27 -0
  88. data/test/cases/adapters/postgresql/interval_test.rb +99 -0
  89. data/test/cases/adapters/postgresql/json_test.rb +52 -0
  90. data/test/cases/adapters/postgresql/ltree_test.rb +51 -0
  91. data/test/cases/adapters/postgresql/money_test.rb +127 -0
  92. data/test/cases/adapters/postgresql/network_test.rb +102 -0
  93. data/test/cases/adapters/postgresql/numbers_test.rb +51 -0
  94. data/test/cases/adapters/postgresql/optimizer_hints_test.rb +71 -0
  95. data/test/cases/adapters/postgresql/partitions_test.rb +22 -0
  96. data/test/cases/adapters/postgresql/postgresql_adapter_prevent_writes_test.rb +205 -0
  97. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +447 -0
  98. data/test/cases/adapters/postgresql/prepared_statements_disabled_test.rb +27 -0
  99. data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -0
  100. data/test/cases/adapters/postgresql/quoting_test.rb +50 -0
  101. data/test/cases/adapters/postgresql/range_test.rb +457 -0
  102. data/test/cases/adapters/postgresql/referential_integrity_test.rb +112 -0
  103. data/test/cases/adapters/postgresql/rename_table_test.rb +35 -0
  104. data/test/cases/adapters/postgresql/schema_authorization_test.rb +110 -0
  105. data/test/cases/adapters/postgresql/schema_test.rb +713 -0
  106. data/test/cases/adapters/postgresql/serial_test.rb +156 -0
  107. data/test/cases/adapters/postgresql/statement_pool_test.rb +61 -0
  108. data/test/cases/adapters/postgresql/timestamp_test.rb +92 -0
  109. data/test/cases/adapters/postgresql/transaction_nested_test.rb +114 -0
  110. data/test/cases/adapters/postgresql/transaction_test.rb +189 -0
  111. data/test/cases/adapters/postgresql/type_lookup_test.rb +35 -0
  112. data/test/cases/adapters/postgresql/utils_test.rb +64 -0
  113. data/test/cases/adapters/postgresql/uuid_test.rb +411 -0
  114. data/test/cases/adapters/postgresql/xml_test.rb +50 -0
  115. data/test/cases/adapters/sqlite3/collation_test.rb +64 -0
  116. data/test/cases/adapters/sqlite3/copy_table_test.rb +101 -0
  117. data/test/cases/adapters/sqlite3/explain_test.rb +23 -0
  118. data/test/cases/adapters/sqlite3/json_test.rb +29 -0
  119. data/test/cases/adapters/sqlite3/quoting_test.rb +79 -0
  120. data/test/cases/adapters/sqlite3/sqlite3_adapter_prevent_writes_test.rb +186 -0
  121. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +628 -0
  122. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +24 -0
  123. data/test/cases/adapters/sqlite3/statement_pool_test.rb +21 -0
  124. data/test/cases/adapters/sqlite3/transaction_test.rb +123 -0
  125. data/test/cases/aggregations_test.rb +170 -0
  126. data/test/cases/annotate_test.rb +46 -0
  127. data/test/cases/ar_schema_test.rb +213 -0
  128. data/test/cases/arel/attributes/attribute_test.rb +1145 -0
  129. data/test/cases/arel/attributes/math_test.rb +83 -0
  130. data/test/cases/arel/attributes_test.rb +27 -0
  131. data/test/cases/arel/collectors/bind_test.rb +40 -0
  132. data/test/cases/arel/collectors/composite_test.rb +47 -0
  133. data/test/cases/arel/collectors/sql_string_test.rb +41 -0
  134. data/test/cases/arel/collectors/substitute_bind_collector_test.rb +48 -0
  135. data/test/cases/arel/crud_test.rb +65 -0
  136. data/test/cases/arel/delete_manager_test.rb +53 -0
  137. data/test/cases/arel/factory_methods_test.rb +46 -0
  138. data/test/cases/arel/helper.rb +45 -0
  139. data/test/cases/arel/insert_manager_test.rb +241 -0
  140. data/test/cases/arel/nodes/and_test.rb +30 -0
  141. data/test/cases/arel/nodes/as_test.rb +36 -0
  142. data/test/cases/arel/nodes/ascending_test.rb +46 -0
  143. data/test/cases/arel/nodes/bin_test.rb +35 -0
  144. data/test/cases/arel/nodes/binary_test.rb +29 -0
  145. data/test/cases/arel/nodes/bind_param_test.rb +22 -0
  146. data/test/cases/arel/nodes/case_test.rb +96 -0
  147. data/test/cases/arel/nodes/casted_test.rb +18 -0
  148. data/test/cases/arel/nodes/comment_test.rb +22 -0
  149. data/test/cases/arel/nodes/count_test.rb +35 -0
  150. data/test/cases/arel/nodes/delete_statement_test.rb +36 -0
  151. data/test/cases/arel/nodes/descending_test.rb +46 -0
  152. data/test/cases/arel/nodes/distinct_test.rb +21 -0
  153. data/test/cases/arel/nodes/equality_test.rb +62 -0
  154. data/test/cases/arel/nodes/extract_test.rb +43 -0
  155. data/test/cases/arel/nodes/false_test.rb +21 -0
  156. data/test/cases/arel/nodes/grouping_test.rb +26 -0
  157. data/test/cases/arel/nodes/infix_operation_test.rb +42 -0
  158. data/test/cases/arel/nodes/insert_statement_test.rb +44 -0
  159. data/test/cases/arel/nodes/named_function_test.rb +48 -0
  160. data/test/cases/arel/nodes/node_test.rb +22 -0
  161. data/test/cases/arel/nodes/not_test.rb +31 -0
  162. data/test/cases/arel/nodes/or_test.rb +36 -0
  163. data/test/cases/arel/nodes/over_test.rb +69 -0
  164. data/test/cases/arel/nodes/select_core_test.rb +79 -0
  165. data/test/cases/arel/nodes/select_statement_test.rb +51 -0
  166. data/test/cases/arel/nodes/sql_literal_test.rb +75 -0
  167. data/test/cases/arel/nodes/sum_test.rb +35 -0
  168. data/test/cases/arel/nodes/table_alias_test.rb +29 -0
  169. data/test/cases/arel/nodes/true_test.rb +21 -0
  170. data/test/cases/arel/nodes/unary_operation_test.rb +41 -0
  171. data/test/cases/arel/nodes/update_statement_test.rb +60 -0
  172. data/test/cases/arel/nodes/window_test.rb +81 -0
  173. data/test/cases/arel/nodes_test.rb +34 -0
  174. data/test/cases/arel/select_manager_test.rb +1238 -0
  175. data/test/cases/arel/support/fake_record.rb +135 -0
  176. data/test/cases/arel/table_test.rb +216 -0
  177. data/test/cases/arel/update_manager_test.rb +126 -0
  178. data/test/cases/arel/visitors/dispatch_contamination_test.rb +78 -0
  179. data/test/cases/arel/visitors/dot_test.rb +90 -0
  180. data/test/cases/arel/visitors/mysql_test.rb +157 -0
  181. data/test/cases/arel/visitors/postgres_test.rb +366 -0
  182. data/test/cases/arel/visitors/sqlite_test.rb +75 -0
  183. data/test/cases/arel/visitors/to_sql_test.rb +750 -0
  184. data/test/cases/associations/association_scope_test.rb +16 -0
  185. data/test/cases/associations/belongs_to_associations_test.rb +1493 -0
  186. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +43 -0
  187. data/test/cases/associations/callbacks_test.rb +208 -0
  188. data/test/cases/associations/cascaded_eager_loading_test.rb +245 -0
  189. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +156 -0
  190. data/test/cases/associations/eager_load_nested_include_test.rb +127 -0
  191. data/test/cases/associations/eager_singularization_test.rb +148 -0
  192. data/test/cases/associations/eager_test.rb +1658 -0
  193. data/test/cases/associations/extension_test.rb +93 -0
  194. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +1025 -0
  195. data/test/cases/associations/has_many_associations_test.rb +3074 -0
  196. data/test/cases/associations/has_many_through_associations_test.rb +1580 -0
  197. data/test/cases/associations/has_one_associations_test.rb +872 -0
  198. data/test/cases/associations/has_one_through_associations_test.rb +429 -0
  199. data/test/cases/associations/inner_join_association_test.rb +215 -0
  200. data/test/cases/associations/inverse_associations_test.rb +941 -0
  201. data/test/cases/associations/join_model_test.rb +787 -0
  202. data/test/cases/associations/left_outer_join_association_test.rb +123 -0
  203. data/test/cases/associations/nested_through_associations_test.rb +636 -0
  204. data/test/cases/associations/required_test.rb +127 -0
  205. data/test/cases/associations_test.rb +516 -0
  206. data/test/cases/attribute_decorators_test.rb +126 -0
  207. data/test/cases/attribute_methods/read_test.rb +60 -0
  208. data/test/cases/attribute_methods_test.rb +1124 -0
  209. data/test/cases/attribute_set_test.rb +270 -0
  210. data/test/cases/attribute_test.rb +246 -0
  211. data/test/cases/attributes_test.rb +371 -0
  212. data/test/cases/autosave_association_test.rb +1953 -0
  213. data/test/cases/base_prevent_writes_test.rb +229 -0
  214. data/test/cases/base_test.rb +1770 -0
  215. data/test/cases/batches_test.rb +695 -0
  216. data/test/cases/binary_test.rb +39 -0
  217. data/test/cases/bind_parameter_test.rb +283 -0
  218. data/test/cases/boolean_test.rb +52 -0
  219. data/test/cases/cache_key_test.rb +131 -0
  220. data/test/cases/calculations_test.rb +1361 -0
  221. data/test/cases/callbacks_test.rb +503 -0
  222. data/test/cases/clone_test.rb +45 -0
  223. data/test/cases/coders/json_test.rb +17 -0
  224. data/test/cases/coders/yaml_column_test.rb +66 -0
  225. data/test/cases/collection_cache_key_test.rb +272 -0
  226. data/test/cases/column_alias_test.rb +19 -0
  227. data/test/cases/column_definition_test.rb +34 -0
  228. data/test/cases/comment_test.rb +204 -0
  229. data/test/cases/connection_adapters/adapter_leasing_test.rb +60 -0
  230. data/test/cases/connection_adapters/connection_handler_test.rb +467 -0
  231. data/test/cases/connection_adapters/connection_handlers_multi_db_test.rb +400 -0
  232. data/test/cases/connection_adapters/connection_handlers_multi_pool_config_test.rb +103 -0
  233. data/test/cases/connection_adapters/connection_handlers_sharding_db_test.rb +499 -0
  234. data/test/cases/connection_adapters/connection_specification_test.rb +12 -0
  235. data/test/cases/connection_adapters/connection_swapping_nested_test.rb +457 -0
  236. data/test/cases/connection_adapters/legacy_connection_handlers_multi_db_test.rb +486 -0
  237. data/test/cases/connection_adapters/legacy_connection_handlers_sharding_db_test.rb +586 -0
  238. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +436 -0
  239. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +81 -0
  240. data/test/cases/connection_adapters/quoting_test.rb +13 -0
  241. data/test/cases/connection_adapters/schema_cache_test.rb +294 -0
  242. data/test/cases/connection_adapters/type_lookup_test.rb +119 -0
  243. data/test/cases/connection_management_test.rb +114 -0
  244. data/test/cases/connection_pool_test.rb +754 -0
  245. data/test/cases/connection_specification/resolver_test.rb +131 -0
  246. data/test/cases/core_test.rb +136 -0
  247. data/test/cases/counter_cache_test.rb +368 -0
  248. data/test/cases/custom_locking_test.rb +19 -0
  249. data/test/cases/database_configurations/hash_config_test.rb +74 -0
  250. data/test/cases/database_configurations/resolver_test.rb +150 -0
  251. data/test/cases/database_configurations_test.rb +145 -0
  252. data/test/cases/database_selector_test.rb +296 -0
  253. data/test/cases/database_statements_test.rb +36 -0
  254. data/test/cases/date_test.rb +36 -0
  255. data/test/cases/date_time_precision_test.rb +129 -0
  256. data/test/cases/date_time_test.rb +76 -0
  257. data/test/cases/defaults_test.rb +254 -0
  258. data/test/cases/delegated_type_test.rb +57 -0
  259. data/test/cases/dirty_test.rb +959 -0
  260. data/test/cases/disconnected_test.rb +30 -0
  261. data/test/cases/dup_test.rb +184 -0
  262. data/test/cases/enum_test.rb +823 -0
  263. data/test/cases/errors_test.rb +16 -0
  264. data/test/cases/explain_subscriber_test.rb +66 -0
  265. data/test/cases/explain_test.rb +79 -0
  266. data/test/cases/filter_attributes_test.rb +153 -0
  267. data/test/cases/finder_respond_to_test.rb +60 -0
  268. data/test/cases/finder_test.rb +1676 -0
  269. data/test/cases/fixture_set/file_test.rb +152 -0
  270. data/test/cases/fixtures_test.rb +1645 -0
  271. data/test/cases/forbidden_attributes_protection_test.rb +130 -0
  272. data/test/cases/habtm_destroy_order_test.rb +61 -0
  273. data/test/cases/helper.rb +233 -0
  274. data/test/cases/hot_compatibility_test.rb +143 -0
  275. data/test/cases/i18n_test.rb +46 -0
  276. data/test/cases/inheritance_test.rb +671 -0
  277. data/test/cases/insert_all_test.rb +489 -0
  278. data/test/cases/instrumentation_test.rb +101 -0
  279. data/test/cases/integration_test.rb +243 -0
  280. data/test/cases/invalid_connection_test.rb +26 -0
  281. data/test/cases/invertible_migration_test.rb +527 -0
  282. data/test/cases/json_attribute_test.rb +35 -0
  283. data/test/cases/json_serialization_test.rb +310 -0
  284. data/test/cases/json_shared_test_cases.rb +290 -0
  285. data/test/cases/locking_test.rb +787 -0
  286. data/test/cases/log_subscriber_test.rb +267 -0
  287. data/test/cases/marshal_serialization_test.rb +39 -0
  288. data/test/cases/migration/change_schema_test.rb +504 -0
  289. data/test/cases/migration/change_table_test.rb +364 -0
  290. data/test/cases/migration/check_constraint_test.rb +162 -0
  291. data/test/cases/migration/column_attributes_test.rb +186 -0
  292. data/test/cases/migration/column_positioning_test.rb +68 -0
  293. data/test/cases/migration/columns_test.rb +326 -0
  294. data/test/cases/migration/command_recorder_test.rb +437 -0
  295. data/test/cases/migration/compatibility_test.rb +673 -0
  296. data/test/cases/migration/create_join_table_test.rb +167 -0
  297. data/test/cases/migration/foreign_key_test.rb +581 -0
  298. data/test/cases/migration/helper.rb +40 -0
  299. data/test/cases/migration/index_test.rb +267 -0
  300. data/test/cases/migration/logger_test.rb +39 -0
  301. data/test/cases/migration/pending_migrations_test.rb +106 -0
  302. data/test/cases/migration/references_foreign_key_test.rb +235 -0
  303. data/test/cases/migration/references_index_test.rb +120 -0
  304. data/test/cases/migration/references_statements_test.rb +137 -0
  305. data/test/cases/migration/rename_table_test.rb +116 -0
  306. data/test/cases/migration_test.rb +1525 -0
  307. data/test/cases/migrator_test.rb +527 -0
  308. data/test/cases/mixin_test.rb +64 -0
  309. data/test/cases/modules_test.rb +174 -0
  310. data/test/cases/multi_db_migrator_test.rb +223 -0
  311. data/test/cases/multiparameter_attributes_test.rb +399 -0
  312. data/test/cases/multiple_db_test.rb +116 -0
  313. data/test/cases/nested_attributes_test.rb +1119 -0
  314. data/test/cases/nested_attributes_with_callbacks_test.rb +146 -0
  315. data/test/cases/null_relation_test.rb +84 -0
  316. data/test/cases/numeric_data_test.rb +93 -0
  317. data/test/cases/persistence_test.rb +1093 -0
  318. data/test/cases/pooled_connections_test.rb +73 -0
  319. data/test/cases/prepared_statement_status_test.rb +48 -0
  320. data/test/cases/primary_keys_test.rb +482 -0
  321. data/test/cases/query_cache_test.rb +915 -0
  322. data/test/cases/quoting_test.rb +303 -0
  323. data/test/cases/readonly_test.rb +120 -0
  324. data/test/cases/reaper_test.rb +199 -0
  325. data/test/cases/reflection_test.rb +520 -0
  326. data/test/cases/relation/delegation_test.rb +76 -0
  327. data/test/cases/relation/delete_all_test.rb +117 -0
  328. data/test/cases/relation/merging_test.rb +434 -0
  329. data/test/cases/relation/mutation_test.rb +145 -0
  330. data/test/cases/relation/or_test.rb +192 -0
  331. data/test/cases/relation/predicate_builder_test.rb +31 -0
  332. data/test/cases/relation/record_fetch_warning_test.rb +42 -0
  333. data/test/cases/relation/select_test.rb +67 -0
  334. data/test/cases/relation/update_all_test.rb +317 -0
  335. data/test/cases/relation/where_chain_test.rb +141 -0
  336. data/test/cases/relation/where_clause_test.rb +257 -0
  337. data/test/cases/relation/where_test.rb +429 -0
  338. data/test/cases/relation_test.rb +482 -0
  339. data/test/cases/relations_test.rb +2251 -0
  340. data/test/cases/reload_models_test.rb +26 -0
  341. data/test/cases/reserved_word_test.rb +141 -0
  342. data/test/cases/result_test.rb +141 -0
  343. data/test/cases/sanitize_test.rb +192 -0
  344. data/test/cases/schema_dumper_test.rb +550 -0
  345. data/test/cases/schema_loading_test.rb +53 -0
  346. data/test/cases/scoping/default_scoping_test.rb +569 -0
  347. data/test/cases/scoping/named_scoping_test.rb +649 -0
  348. data/test/cases/scoping/relation_scoping_test.rb +522 -0
  349. data/test/cases/secure_token_test.rb +47 -0
  350. data/test/cases/serialization_test.rb +106 -0
  351. data/test/cases/serialized_attribute_test.rb +455 -0
  352. data/test/cases/signed_id_test.rb +168 -0
  353. data/test/cases/statement_cache_test.rb +153 -0
  354. data/test/cases/statement_invalid_test.rb +42 -0
  355. data/test/cases/store_test.rb +320 -0
  356. data/test/cases/strict_loading_test.rb +473 -0
  357. data/test/cases/suppressor_test.rb +77 -0
  358. data/test/cases/tasks/database_tasks_test.rb +1526 -0
  359. data/test/cases/tasks/mysql_rake_test.rb +417 -0
  360. data/test/cases/tasks/postgresql_rake_test.rb +534 -0
  361. data/test/cases/tasks/sqlite_rake_test.rb +267 -0
  362. data/test/cases/test_case.rb +142 -0
  363. data/test/cases/test_databases_test.rb +79 -0
  364. data/test/cases/test_fixtures_test.rb +96 -0
  365. data/test/cases/time_precision_test.rb +125 -0
  366. data/test/cases/timestamp_test.rb +504 -0
  367. data/test/cases/touch_later_test.rb +123 -0
  368. data/test/cases/transaction_callbacks_test.rb +772 -0
  369. data/test/cases/transaction_isolation_test.rb +106 -0
  370. data/test/cases/transactions_test.rb +1285 -0
  371. data/test/cases/type/adapter_specific_registry_test.rb +145 -0
  372. data/test/cases/type/date_time_test.rb +16 -0
  373. data/test/cases/type/integer_test.rb +29 -0
  374. data/test/cases/type/string_test.rb +24 -0
  375. data/test/cases/type/time_test.rb +28 -0
  376. data/test/cases/type/type_map_test.rb +178 -0
  377. data/test/cases/type/unsigned_integer_test.rb +19 -0
  378. data/test/cases/type_test.rb +41 -0
  379. data/test/cases/types_test.rb +26 -0
  380. data/test/cases/unconnected_test.rb +46 -0
  381. data/test/cases/unsafe_raw_sql_test.rb +274 -0
  382. data/test/cases/validations/absence_validation_test.rb +75 -0
  383. data/test/cases/validations/association_validation_test.rb +99 -0
  384. data/test/cases/validations/i18n_generate_message_validation_test.rb +102 -0
  385. data/test/cases/validations/i18n_validation_test.rb +87 -0
  386. data/test/cases/validations/length_validation_test.rb +80 -0
  387. data/test/cases/validations/numericality_validation_test.rb +181 -0
  388. data/test/cases/validations/presence_validation_test.rb +105 -0
  389. data/test/cases/validations/uniqueness_validation_test.rb +618 -0
  390. data/test/cases/validations_repair_helper.rb +21 -0
  391. data/test/cases/validations_test.rb +229 -0
  392. data/test/cases/view_test.rb +222 -0
  393. data/test/cases/yaml_serialization_test.rb +166 -0
  394. data/test/config.example.yml +97 -0
  395. data/test/config.rb +7 -0
  396. data/test/config.yml +220 -0
  397. data/test/connections/native_ibm_db/connection.rb +44 -0
  398. data/test/fixtures/accounts.yml +29 -0
  399. data/test/fixtures/admin/accounts.yml +2 -0
  400. data/test/fixtures/admin/randomly_named_a9.yml +7 -0
  401. data/test/fixtures/admin/randomly_named_b0.yml +7 -0
  402. data/test/fixtures/admin/users.yml +10 -0
  403. data/test/fixtures/all/admin +1 -0
  404. data/test/fixtures/all/developers.yml +0 -0
  405. data/test/fixtures/all/namespaced/accounts.yml +2 -0
  406. data/test/fixtures/all/people.yml +0 -0
  407. data/test/fixtures/all/tasks.yml +0 -0
  408. data/test/fixtures/author_addresses.yml +11 -0
  409. data/test/fixtures/author_favorites.yml +4 -0
  410. data/test/fixtures/authors.yml +17 -0
  411. data/test/fixtures/bad_posts.yml +9 -0
  412. data/test/fixtures/binaries.yml +137 -0
  413. data/test/fixtures/books.yml +38 -0
  414. data/test/fixtures/bulbs.yml +5 -0
  415. data/test/fixtures/cars.yml +9 -0
  416. data/test/fixtures/categories/special_categories.yml +9 -0
  417. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -0
  418. data/test/fixtures/categories.yml +19 -0
  419. data/test/fixtures/categories_ordered.yml +7 -0
  420. data/test/fixtures/categories_posts.yml +34 -0
  421. data/test/fixtures/categorizations.yml +23 -0
  422. data/test/fixtures/citations.yml +5 -0
  423. data/test/fixtures/clubs.yml +8 -0
  424. data/test/fixtures/collections.yml +3 -0
  425. data/test/fixtures/colleges.yml +3 -0
  426. data/test/fixtures/comments.yml +72 -0
  427. data/test/fixtures/companies.yml +72 -0
  428. data/test/fixtures/computers.yml +12 -0
  429. data/test/fixtures/content.yml +3 -0
  430. data/test/fixtures/content_positions.yml +3 -0
  431. data/test/fixtures/courses.yml +8 -0
  432. data/test/fixtures/customers.yml +35 -0
  433. data/test/fixtures/dashboards.yml +6 -0
  434. data/test/fixtures/dead_parrots.yml +5 -0
  435. data/test/fixtures/developers.yml +22 -0
  436. data/test/fixtures/developers_projects.yml +17 -0
  437. data/test/fixtures/dog_lovers.yml +7 -0
  438. data/test/fixtures/dogs.yml +4 -0
  439. data/test/fixtures/doubloons.yml +3 -0
  440. data/test/fixtures/edges.yml +5 -0
  441. data/test/fixtures/entrants.yml +14 -0
  442. data/test/fixtures/essays.yml +16 -0
  443. data/test/fixtures/faces.yml +11 -0
  444. data/test/fixtures/fk_test_has_fk.yml +3 -0
  445. data/test/fixtures/fk_test_has_pk.yml +2 -0
  446. data/test/fixtures/friendships.yml +4 -0
  447. data/test/fixtures/funny_jokes.yml +10 -0
  448. data/test/fixtures/humans.yml +5 -0
  449. data/test/fixtures/interests.yml +33 -0
  450. data/test/fixtures/items.yml +3 -0
  451. data/test/fixtures/jobs.yml +7 -0
  452. data/test/fixtures/legacy_things.yml +3 -0
  453. data/test/fixtures/live_parrots.yml +4 -0
  454. data/test/fixtures/mateys.yml +4 -0
  455. data/test/fixtures/member_details.yml +8 -0
  456. data/test/fixtures/member_types.yml +6 -0
  457. data/test/fixtures/members.yml +11 -0
  458. data/test/fixtures/memberships.yml +41 -0
  459. data/test/fixtures/men.yml +5 -0
  460. data/test/fixtures/minimalistics.yml +5 -0
  461. data/test/fixtures/minivans.yml +5 -0
  462. data/test/fixtures/mixed_case_monkeys.yml +6 -0
  463. data/test/fixtures/mixins.yml +29 -0
  464. data/test/fixtures/movies.yml +7 -0
  465. data/test/fixtures/naked/yml/accounts.yml +1 -0
  466. data/test/fixtures/naked/yml/companies.yml +1 -0
  467. data/test/fixtures/naked/yml/courses.yml +1 -0
  468. data/test/fixtures/naked/yml/courses_with_invalid_key.yml +3 -0
  469. data/test/fixtures/naked/yml/parrots.yml +3 -0
  470. data/test/fixtures/naked/yml/trees.yml +3 -0
  471. data/test/fixtures/nodes.yml +29 -0
  472. data/test/fixtures/organizations.yml +5 -0
  473. data/test/fixtures/other_books.yml +26 -0
  474. data/test/fixtures/other_comments.yml +6 -0
  475. data/test/fixtures/other_dogs.yml +2 -0
  476. data/test/fixtures/other_posts.yml +8 -0
  477. data/test/fixtures/other_topics.yml +42 -0
  478. data/test/fixtures/owners.yml +9 -0
  479. data/test/fixtures/parrots.yml +33 -0
  480. data/test/fixtures/parrots_pirates.yml +7 -0
  481. data/test/fixtures/people.yml +24 -0
  482. data/test/fixtures/peoples_treasures.yml +3 -0
  483. data/test/fixtures/pets.yml +19 -0
  484. data/test/fixtures/pirates.yml +15 -0
  485. data/test/fixtures/posts.yml +88 -0
  486. data/test/fixtures/price_estimates.yml +16 -0
  487. data/test/fixtures/products.yml +4 -0
  488. data/test/fixtures/projects.yml +7 -0
  489. data/test/fixtures/randomly_named_a9.yml +7 -0
  490. data/test/fixtures/ratings.yml +14 -0
  491. data/test/fixtures/readers.yml +17 -0
  492. data/test/fixtures/references.yml +17 -0
  493. data/test/fixtures/reserved_words/distinct.yml +5 -0
  494. data/test/fixtures/reserved_words/distinct_select.yml +11 -0
  495. data/test/fixtures/reserved_words/group.yml +14 -0
  496. data/test/fixtures/reserved_words/select.yml +8 -0
  497. data/test/fixtures/reserved_words/values.yml +7 -0
  498. data/test/fixtures/ships.yml +6 -0
  499. data/test/fixtures/speedometers.yml +8 -0
  500. data/test/fixtures/sponsors.yml +15 -0
  501. data/test/fixtures/strict_zines.yml +2 -0
  502. data/test/fixtures/string_key_objects.yml +7 -0
  503. data/test/fixtures/subscribers.yml +11 -0
  504. data/test/fixtures/subscriptions.yml +12 -0
  505. data/test/fixtures/taggings.yml +78 -0
  506. data/test/fixtures/tags.yml +11 -0
  507. data/test/fixtures/tasks.yml +7 -0
  508. data/test/fixtures/teapots.yml +3 -0
  509. data/test/fixtures/to_be_linked/accounts.yml +2 -0
  510. data/test/fixtures/to_be_linked/users.yml +10 -0
  511. data/test/fixtures/topics.yml +49 -0
  512. data/test/fixtures/toys.yml +14 -0
  513. data/test/fixtures/traffic_lights.yml +10 -0
  514. data/test/fixtures/treasures.yml +10 -0
  515. data/test/fixtures/trees.yml +3 -0
  516. data/test/fixtures/uuid_children.yml +3 -0
  517. data/test/fixtures/uuid_parents.yml +2 -0
  518. data/test/fixtures/variants.yml +4 -0
  519. data/test/fixtures/vegetables.yml +20 -0
  520. data/test/fixtures/vertices.yml +4 -0
  521. data/test/fixtures/warehouse-things.yml +3 -0
  522. data/test/fixtures/warehouse_things.yml +3 -0
  523. data/test/fixtures/zines.yml +5 -0
  524. data/test/ibm_db_test.rb +25 -0
  525. data/test/migrations/10_urban/9_add_expressions.rb +13 -0
  526. data/test/migrations/decimal/1_give_me_big_numbers.rb +17 -0
  527. data/test/migrations/magic/1_currencies_have_symbols.rb +13 -0
  528. data/test/migrations/missing/1000_people_have_middle_names.rb +11 -0
  529. data/test/migrations/missing/1_people_have_last_names.rb +11 -0
  530. data/test/migrations/missing/3_we_need_reminders.rb +14 -0
  531. data/test/migrations/missing/4_innocent_jointable.rb +14 -0
  532. data/test/migrations/rename/1_we_need_things.rb +13 -0
  533. data/test/migrations/rename/2_rename_things.rb +11 -0
  534. data/test/migrations/to_copy/1_people_have_hobbies.rb +11 -0
  535. data/test/migrations/to_copy/2_people_have_descriptions.rb +11 -0
  536. data/test/migrations/to_copy2/1_create_articles.rb +9 -0
  537. data/test/migrations/to_copy2/2_create_comments.rb +9 -0
  538. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +11 -0
  539. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +11 -0
  540. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +11 -0
  541. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +9 -0
  542. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +9 -0
  543. data/test/migrations/valid/1_valid_people_have_last_names.rb +11 -0
  544. data/test/migrations/valid/2_we_need_reminders.rb +14 -0
  545. data/test/migrations/valid/3_innocent_jointable.rb +14 -0
  546. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +11 -0
  547. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +14 -0
  548. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +14 -0
  549. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +11 -0
  550. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +14 -0
  551. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +14 -0
  552. data/test/migrations/version_check/20131219224947_migration_version_check.rb +10 -0
  553. data/test/models/account.rb +46 -0
  554. data/test/models/admin/account.rb +5 -0
  555. data/test/models/admin/randomly_named_c1.rb +9 -0
  556. data/test/models/admin/user.rb +48 -0
  557. data/test/models/admin.rb +7 -0
  558. data/test/models/aircraft.rb +7 -0
  559. data/test/models/arunit2_model.rb +5 -0
  560. data/test/models/author.rb +260 -0
  561. data/test/models/auto_id.rb +6 -0
  562. data/test/models/autoloadable/extra_firm.rb +4 -0
  563. data/test/models/binary.rb +4 -0
  564. data/test/models/binary_field.rb +6 -0
  565. data/test/models/bird.rb +24 -0
  566. data/test/models/book.rb +33 -0
  567. data/test/models/book_destroy_async.rb +24 -0
  568. data/test/models/boolean.rb +7 -0
  569. data/test/models/bulb.rb +61 -0
  570. data/test/models/cake_designer.rb +5 -0
  571. data/test/models/car.rb +36 -0
  572. data/test/models/carrier.rb +4 -0
  573. data/test/models/cart.rb +5 -0
  574. data/test/models/cat.rb +12 -0
  575. data/test/models/categorization.rb +21 -0
  576. data/test/models/category.rb +47 -0
  577. data/test/models/chef.rb +10 -0
  578. data/test/models/citation.rb +7 -0
  579. data/test/models/club.rb +28 -0
  580. data/test/models/college.rb +12 -0
  581. data/test/models/column.rb +5 -0
  582. data/test/models/column_name.rb +5 -0
  583. data/test/models/comment.rb +98 -0
  584. data/test/models/company.rb +226 -0
  585. data/test/models/company_in_module.rb +99 -0
  586. data/test/models/computer.rb +5 -0
  587. data/test/models/contact.rb +43 -0
  588. data/test/models/content.rb +42 -0
  589. data/test/models/contract.rb +38 -0
  590. data/test/models/country.rb +5 -0
  591. data/test/models/course.rb +8 -0
  592. data/test/models/customer.rb +85 -0
  593. data/test/models/customer_carrier.rb +16 -0
  594. data/test/models/dashboard.rb +5 -0
  595. data/test/models/default.rb +4 -0
  596. data/test/models/department.rb +6 -0
  597. data/test/models/destroy_async_parent.rb +15 -0
  598. data/test/models/destroy_async_parent_soft_delete.rb +20 -0
  599. data/test/models/developer.rb +341 -0
  600. data/test/models/dl_keyed_belongs_to.rb +13 -0
  601. data/test/models/dl_keyed_belongs_to_soft_delete.rb +19 -0
  602. data/test/models/dl_keyed_has_many.rb +5 -0
  603. data/test/models/dl_keyed_has_many_through.rb +5 -0
  604. data/test/models/dl_keyed_has_one.rb +5 -0
  605. data/test/models/dl_keyed_join.rb +10 -0
  606. data/test/models/dog.rb +7 -0
  607. data/test/models/dog_lover.rb +7 -0
  608. data/test/models/doubloon.rb +14 -0
  609. data/test/models/drink_designer.rb +20 -0
  610. data/test/models/edge.rb +7 -0
  611. data/test/models/electron.rb +7 -0
  612. data/test/models/engine.rb +5 -0
  613. data/test/models/entrant.rb +5 -0
  614. data/test/models/entry.rb +5 -0
  615. data/test/models/essay.rb +8 -0
  616. data/test/models/essay_destroy_async.rb +12 -0
  617. data/test/models/event.rb +5 -0
  618. data/test/models/eye.rb +39 -0
  619. data/test/models/face.rb +17 -0
  620. data/test/models/family.rb +6 -0
  621. data/test/models/family_tree.rb +6 -0
  622. data/test/models/friendship.rb +8 -0
  623. data/test/models/frog.rb +8 -0
  624. data/test/models/guid.rb +4 -0
  625. data/test/models/guitar.rb +6 -0
  626. data/test/models/hotel.rb +13 -0
  627. data/test/models/human.rb +39 -0
  628. data/test/models/image.rb +5 -0
  629. data/test/models/interest.rb +16 -0
  630. data/test/models/invoice.rb +6 -0
  631. data/test/models/item.rb +9 -0
  632. data/test/models/job.rb +9 -0
  633. data/test/models/joke.rb +9 -0
  634. data/test/models/keyboard.rb +5 -0
  635. data/test/models/legacy_thing.rb +5 -0
  636. data/test/models/lesson.rb +13 -0
  637. data/test/models/line_item.rb +5 -0
  638. data/test/models/liquid.rb +6 -0
  639. data/test/models/man.rb +11 -0
  640. data/test/models/matey.rb +6 -0
  641. data/test/models/measurement.rb +4 -0
  642. data/test/models/member.rb +45 -0
  643. data/test/models/member_detail.rb +11 -0
  644. data/test/models/member_type.rb +5 -0
  645. data/test/models/membership.rb +38 -0
  646. data/test/models/mentor.rb +5 -0
  647. data/test/models/message.rb +5 -0
  648. data/test/models/minimalistic.rb +4 -0
  649. data/test/models/minivan.rb +10 -0
  650. data/test/models/mixed_case_monkey.rb +5 -0
  651. data/test/models/mocktail_designer.rb +2 -0
  652. data/test/models/molecule.rb +8 -0
  653. data/test/models/mouse.rb +6 -0
  654. data/test/models/movie.rb +7 -0
  655. data/test/models/node.rb +7 -0
  656. data/test/models/non_primary_key.rb +4 -0
  657. data/test/models/notification.rb +5 -0
  658. data/test/models/numeric_data.rb +12 -0
  659. data/test/models/order.rb +6 -0
  660. data/test/models/organization.rb +16 -0
  661. data/test/models/other_dog.rb +7 -0
  662. data/test/models/owner.rb +39 -0
  663. data/test/models/parrot.rb +36 -0
  664. data/test/models/person.rb +147 -0
  665. data/test/models/personal_legacy_thing.rb +6 -0
  666. data/test/models/pet.rb +20 -0
  667. data/test/models/pet_treasure.rb +8 -0
  668. data/test/models/pirate.rb +116 -0
  669. data/test/models/possession.rb +5 -0
  670. data/test/models/post.rb +371 -0
  671. data/test/models/price_estimate.rb +14 -0
  672. data/test/models/professor.rb +7 -0
  673. data/test/models/project.rb +42 -0
  674. data/test/models/publisher/article.rb +6 -0
  675. data/test/models/publisher/magazine.rb +5 -0
  676. data/test/models/publisher.rb +4 -0
  677. data/test/models/randomly_named_c1.rb +5 -0
  678. data/test/models/rating.rb +8 -0
  679. data/test/models/reader.rb +25 -0
  680. data/test/models/recipe.rb +5 -0
  681. data/test/models/record.rb +4 -0
  682. data/test/models/reference.rb +25 -0
  683. data/test/models/reply.rb +79 -0
  684. data/test/models/room.rb +6 -0
  685. data/test/models/section.rb +6 -0
  686. data/test/models/seminar.rb +6 -0
  687. data/test/models/session.rb +6 -0
  688. data/test/models/ship.rb +42 -0
  689. data/test/models/ship_part.rb +10 -0
  690. data/test/models/shop.rb +19 -0
  691. data/test/models/shop_account.rb +8 -0
  692. data/test/models/speedometer.rb +8 -0
  693. data/test/models/sponsor.rb +10 -0
  694. data/test/models/squeak.rb +6 -0
  695. data/test/models/strict_zine.rb +7 -0
  696. data/test/models/string_key_object.rb +5 -0
  697. data/test/models/student.rb +6 -0
  698. data/test/models/subject.rb +16 -0
  699. data/test/models/subscriber.rb +10 -0
  700. data/test/models/subscription.rb +8 -0
  701. data/test/models/tag.rb +16 -0
  702. data/test/models/tagging.rb +20 -0
  703. data/test/models/task.rb +7 -0
  704. data/test/models/topic.rb +153 -0
  705. data/test/models/toy.rb +10 -0
  706. data/test/models/traffic_light.rb +6 -0
  707. data/test/models/treasure.rb +16 -0
  708. data/test/models/treaty.rb +5 -0
  709. data/test/models/tree.rb +5 -0
  710. data/test/models/tuning_peg.rb +6 -0
  711. data/test/models/tyre.rb +13 -0
  712. data/test/models/user.rb +22 -0
  713. data/test/models/uuid_child.rb +5 -0
  714. data/test/models/uuid_item.rb +8 -0
  715. data/test/models/uuid_parent.rb +5 -0
  716. data/test/models/vegetables.rb +33 -0
  717. data/test/models/vehicle.rb +7 -0
  718. data/test/models/vertex.rb +11 -0
  719. data/test/models/warehouse_thing.rb +7 -0
  720. data/test/models/wheel.rb +5 -0
  721. data/test/models/without_table.rb +5 -0
  722. data/test/models/zine.rb +5 -0
  723. data/test/schema/i5/ibm_db_specific_schema.rb +137 -0
  724. data/test/schema/ids/ibm_db_specific_schema.rb +140 -0
  725. data/test/schema/luw/ibm_db_specific_schema.rb +137 -0
  726. data/test/schema/mysql2_specific_schema.rb +82 -0
  727. data/test/schema/oracle_specific_schema.rb +38 -0
  728. data/test/schema/postgresql_specific_schema.rb +125 -0
  729. data/test/schema/schema.rb +1237 -0
  730. data/test/schema/schema.rb.original +1057 -0
  731. data/test/schema/sqlite_specific_schema.rb +11 -0
  732. data/test/schema/zOS/ibm_db_specific_schema.rb +208 -0
  733. data/test/support/config.rb +43 -0
  734. data/test/support/connection.rb +29 -0
  735. data/test/support/connection_helper.rb +16 -0
  736. data/test/support/ddl_helper.rb +10 -0
  737. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic.dump +0 -0
  738. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic_associations.dump +0 -0
  739. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic.dump +0 -0
  740. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic_associations.dump +0 -0
  741. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic.dump +0 -0
  742. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic_associations.dump +0 -0
  743. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic.dump +0 -0
  744. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic_associations.dump +0 -0
  745. data/test/support/marshal_compatibility_fixtures/legacy_6_0_record_mysql.dump +0 -0
  746. data/test/support/marshal_compatibility_fixtures/legacy_relation.dump +0 -0
  747. data/test/support/schema_dumping_helper.rb +22 -0
  748. data/test/support/stubs/strong_parameters.rb +40 -0
  749. data/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -0
  750. data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -0
  751. data/test/support/yaml_compatibility_fixtures/rails_v1_mysql.yml +206 -0
  752. data/test/support/yaml_compatibility_fixtures/rails_v2.yml +55 -0
  753. metadata +876 -0
@@ -0,0 +1,186 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/migration/helper"
4
+
5
+ module ActiveRecord
6
+ class Migration
7
+ class ColumnAttributesTest < ActiveRecord::TestCase
8
+ include ActiveRecord::Migration::TestHelper
9
+
10
+ self.use_transactional_tests = false
11
+
12
+ def test_add_column_newline_default
13
+ string = "foo\nbar"
14
+ add_column "test_models", "command", :string, default: string
15
+ TestModel.reset_column_information
16
+
17
+ assert_equal string, TestModel.new.command
18
+ end
19
+
20
+ def test_add_remove_single_field_using_string_arguments
21
+ assert_no_column TestModel, :last_name
22
+
23
+ add_column "test_models", "last_name", :string
24
+ assert_column TestModel, :last_name
25
+
26
+ remove_column "test_models", "last_name"
27
+ assert_no_column TestModel, :last_name
28
+ end
29
+
30
+ def test_add_remove_single_field_using_symbol_arguments
31
+ assert_no_column TestModel, :last_name
32
+
33
+ add_column :test_models, :last_name, :string
34
+ assert_column TestModel, :last_name
35
+
36
+ remove_column :test_models, :last_name
37
+ assert_no_column TestModel, :last_name
38
+ end
39
+
40
+ def test_add_column_without_limit
41
+ # TODO: limit: nil should work with all adapters.
42
+ skip "MySQL wrongly enforces a limit of 255" if current_adapter?(:Mysql2Adapter)
43
+ add_column :test_models, :description, :string, limit: nil
44
+ TestModel.reset_column_information
45
+ assert_nil TestModel.columns_hash["description"].limit
46
+ end
47
+
48
+ if current_adapter?(:Mysql2Adapter, :PostgreSQLAdapter)
49
+ def test_unabstracted_database_dependent_types
50
+ add_column :test_models, :intelligence_quotient, :smallint
51
+ TestModel.reset_column_information
52
+ assert_match(/smallint/, TestModel.columns_hash["intelligence_quotient"].sql_type)
53
+ end
54
+ end
55
+
56
+ unless current_adapter?(:SQLite3Adapter)
57
+ # We specifically do a manual INSERT here, and then test only the SELECT
58
+ # functionality. This allows us to more easily catch INSERT being broken,
59
+ # but SELECT actually working fine.
60
+ def test_native_decimal_insert_manual_vs_automatic
61
+ correct_value = "0012345678901234567890.0123456789".to_d
62
+
63
+ connection.add_column "test_models", "wealth", :decimal, precision: "30", scale: "10"
64
+
65
+ # Do a manual insertion
66
+ if current_adapter?(:OracleAdapter)
67
+ connection.execute "insert into test_models (id, wealth) values (people_seq.nextval, 12345678901234567890.0123456789)"
68
+ else
69
+ connection.execute "insert into test_models (wealth) values (12345678901234567890.0123456789)"
70
+ end
71
+
72
+ # SELECT
73
+ row = TestModel.first
74
+ assert_kind_of BigDecimal, row.wealth
75
+
76
+ # If this assert fails, that means the SELECT is broken!
77
+ assert_equal correct_value, row.wealth
78
+
79
+ # Reset to old state
80
+ TestModel.delete_all
81
+
82
+ # Now use the Rails insertion
83
+ TestModel.create wealth: BigDecimal("12345678901234567890.0123456789")
84
+
85
+ # SELECT
86
+ row = TestModel.first
87
+ assert_kind_of BigDecimal, row.wealth
88
+
89
+ # If these asserts fail, that means the INSERT (create function, or cast to SQL) is broken!
90
+ assert_equal correct_value, row.wealth
91
+ end
92
+ end
93
+
94
+ def test_add_column_with_precision_and_scale
95
+ connection.add_column "test_models", "wealth", :decimal, precision: 9, scale: 7
96
+
97
+ wealth_column = TestModel.columns_hash["wealth"]
98
+ assert_equal 9, wealth_column.precision
99
+ assert_equal 7, wealth_column.scale
100
+ end
101
+
102
+ # Test SQLite3 adapter specifically for decimal types with precision and scale
103
+ # attributes, since these need to be maintained in schema but aren't actually
104
+ # used in SQLite3 itself
105
+ if current_adapter?(:SQLite3Adapter)
106
+ def test_change_column_with_new_precision_and_scale
107
+ connection.add_column "test_models", "wealth", :decimal, precision: 9, scale: 7
108
+
109
+ connection.change_column "test_models", "wealth", :decimal, precision: 12, scale: 8
110
+ TestModel.reset_column_information
111
+
112
+ wealth_column = TestModel.columns_hash["wealth"]
113
+ assert_equal 12, wealth_column.precision
114
+ assert_equal 8, wealth_column.scale
115
+ end
116
+
117
+ def test_change_column_preserve_other_column_precision_and_scale
118
+ connection.add_column "test_models", "last_name", :string
119
+ connection.add_column "test_models", "wealth", :decimal, precision: 9, scale: 7
120
+
121
+ wealth_column = TestModel.columns_hash["wealth"]
122
+ assert_equal 9, wealth_column.precision
123
+ assert_equal 7, wealth_column.scale
124
+
125
+ connection.change_column "test_models", "last_name", :string, null: false
126
+ TestModel.reset_column_information
127
+
128
+ wealth_column = TestModel.columns_hash["wealth"]
129
+ assert_equal 9, wealth_column.precision
130
+ assert_equal 7, wealth_column.scale
131
+ end
132
+ end
133
+
134
+ unless current_adapter?(:SQLite3Adapter)
135
+ def test_native_types
136
+ add_column "test_models", "first_name", :string
137
+ add_column "test_models", "last_name", :string
138
+ add_column "test_models", "bio", :text
139
+ add_column "test_models", "age", :integer
140
+ add_column "test_models", "height", :float
141
+ add_column "test_models", "wealth", :decimal, precision: "30", scale: "10"
142
+ add_column "test_models", "birthday", :datetime
143
+ add_column "test_models", "favorite_day", :date
144
+ add_column "test_models", "moment_of_truth", :datetime
145
+ add_column "test_models", "male", :boolean
146
+
147
+ TestModel.create first_name: "bob", last_name: "bobsen",
148
+ bio: "I was born ....", age: 18, height: 1.78,
149
+ wealth: BigDecimal("12345678901234567890.0123456789"),
150
+ birthday: 18.years.ago, favorite_day: 10.days.ago,
151
+ moment_of_truth: "1782-10-10 21:40:18", male: true
152
+
153
+ bob = TestModel.first
154
+ assert_equal "bob", bob.first_name
155
+ assert_equal "bobsen", bob.last_name
156
+ assert_equal "I was born ....", bob.bio
157
+ assert_equal 18, bob.age
158
+
159
+ # Test for 30 significant digits (beyond the 16 of float), 10 of them
160
+ # after the decimal place.
161
+
162
+ assert_equal BigDecimal("0012345678901234567890.0123456789"), bob.wealth
163
+
164
+ assert_equal true, bob.male?
165
+
166
+ assert_equal String, bob.first_name.class
167
+ assert_equal String, bob.last_name.class
168
+ assert_equal String, bob.bio.class
169
+ assert_kind_of Integer, bob.age
170
+ assert_equal Time, bob.birthday.class
171
+ assert_equal Date, bob.favorite_day.class
172
+ assert_instance_of TrueClass, bob.male?
173
+ assert_kind_of BigDecimal, bob.wealth
174
+ end
175
+ end
176
+
177
+ if current_adapter?(:Mysql2Adapter, :PostgreSQLAdapter)
178
+ def test_out_of_range_limit_should_raise
179
+ assert_raise(ArgumentError) { add_column :test_models, :integer_too_big, :integer, limit: 10 }
180
+ assert_raise(ArgumentError) { add_column :test_models, :text_too_big, :text, limit: 0xfffffffff }
181
+ assert_raise(ArgumentError) { add_column :test_models, :binary_too_big, :binary, limit: 0xfffffffff }
182
+ end
183
+ end
184
+ end
185
+ end
186
+ end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+
5
+ module ActiveRecord
6
+ class Migration
7
+ class ColumnPositioningTest < ActiveRecord::TestCase
8
+ attr_reader :connection
9
+ alias :conn :connection
10
+
11
+ def setup
12
+ super
13
+
14
+ @connection = ActiveRecord::Base.connection
15
+
16
+ connection.create_table :testings, id: false do |t|
17
+ t.column :first, :integer
18
+ t.column :second, :integer
19
+ t.column :third, :integer
20
+ end
21
+ end
22
+
23
+ teardown do
24
+ connection.drop_table :testings rescue nil
25
+ ActiveRecord::Base.primary_key_prefix_type = nil
26
+ end
27
+
28
+ if current_adapter?(:Mysql2Adapter)
29
+ def test_column_positioning
30
+ assert_equal %w(first second third), conn.columns(:testings).map(&:name)
31
+ end
32
+
33
+ def test_add_column_with_positioning
34
+ conn.add_column :testings, :new_col, :integer
35
+ assert_equal %w(first second third new_col), conn.columns(:testings).map(&:name)
36
+ end
37
+
38
+ def test_add_column_with_positioning_first
39
+ conn.add_column :testings, :new_col, :integer, first: true
40
+ assert_equal %w(new_col first second third), conn.columns(:testings).map(&:name)
41
+ end
42
+
43
+ def test_add_column_with_positioning_after
44
+ conn.add_column :testings, :new_col, :integer, after: :first
45
+ assert_equal %w(first new_col second third), conn.columns(:testings).map(&:name)
46
+ end
47
+
48
+ def test_change_column_with_positioning
49
+ conn.change_column :testings, :second, :integer, first: true
50
+ assert_equal %w(second first third), conn.columns(:testings).map(&:name)
51
+
52
+ conn.change_column :testings, :second, :integer, after: :third
53
+ assert_equal %w(first third second), conn.columns(:testings).map(&:name)
54
+ end
55
+
56
+ def test_add_reference_with_positioning_first
57
+ conn.add_reference :testings, :new, polymorphic: true, first: true
58
+ assert_equal %w(new_id new_type first second third), conn.columns(:testings).map(&:name)
59
+ end
60
+
61
+ def test_add_reference_with_positioning_after
62
+ conn.add_reference :testings, :new, polymorphic: true, after: :first
63
+ assert_equal %w(first new_id new_type second third), conn.columns(:testings).map(&:name)
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,326 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/migration/helper"
4
+
5
+ module ActiveRecord
6
+ class Migration
7
+ class ColumnsTest < ActiveRecord::TestCase
8
+ include ActiveRecord::Migration::TestHelper
9
+
10
+ self.use_transactional_tests = false
11
+
12
+ # FIXME: this is more of an integration test with AR::Base and the
13
+ # schema modifications. Maybe we should move this?
14
+ def test_add_rename
15
+ add_column "test_models", "girlfriend", :string
16
+ TestModel.reset_column_information
17
+
18
+ TestModel.create girlfriend: "bobette"
19
+
20
+ rename_column "test_models", "girlfriend", "exgirlfriend"
21
+
22
+ TestModel.reset_column_information
23
+ bob = TestModel.first
24
+
25
+ assert_equal "bobette", bob.exgirlfriend
26
+ end
27
+
28
+ # FIXME: another integration test. We should decouple this from the
29
+ # AR::Base implementation.
30
+ def test_rename_column_using_symbol_arguments
31
+ add_column :test_models, :first_name, :string
32
+
33
+ TestModel.create first_name: "foo"
34
+
35
+ rename_column :test_models, :first_name, :nick_name
36
+ TestModel.reset_column_information
37
+ assert_includes TestModel.column_names, "nick_name"
38
+ assert_equal ["foo"], TestModel.all.map(&:nick_name)
39
+ end
40
+
41
+ # FIXME: another integration test. We should decouple this from the
42
+ # AR::Base implementation.
43
+ def test_rename_column
44
+ add_column "test_models", "first_name", "string"
45
+
46
+ TestModel.create first_name: "foo"
47
+
48
+ rename_column "test_models", "first_name", "nick_name"
49
+ TestModel.reset_column_information
50
+ assert_includes TestModel.column_names, "nick_name"
51
+ assert_equal ["foo"], TestModel.all.map(&:nick_name)
52
+ end
53
+
54
+ def test_rename_column_preserves_default_value_not_null
55
+ add_column "test_models", "salary", :integer, default: 70000
56
+
57
+ default_before = connection.columns("test_models").find { |c| c.name == "salary" }.default
58
+ assert_equal "70000", default_before
59
+
60
+ rename_column "test_models", "salary", "annual_salary"
61
+
62
+ assert_includes TestModel.column_names, "annual_salary"
63
+ default_after = connection.columns("test_models").find { |c| c.name == "annual_salary" }.default
64
+ assert_equal "70000", default_after
65
+ end
66
+
67
+ if current_adapter?(:Mysql2Adapter)
68
+ def test_mysql_rename_column_preserves_auto_increment
69
+ rename_column "test_models", "id", "id_test"
70
+ assert_predicate connection.columns("test_models").find { |c| c.name == "id_test" }, :auto_increment?
71
+ TestModel.reset_column_information
72
+ ensure
73
+ rename_column "test_models", "id_test", "id"
74
+ end
75
+ end
76
+
77
+ def test_rename_nonexistent_column
78
+ exception = if current_adapter?(:PostgreSQLAdapter, :OracleAdapter)
79
+ ActiveRecord::StatementInvalid
80
+ else
81
+ ActiveRecord::ActiveRecordError
82
+ end
83
+
84
+ assert_raise(exception) do
85
+ rename_column "test_models", "nonexistent", "should_fail"
86
+ end
87
+ end
88
+
89
+ def test_rename_column_with_sql_reserved_word
90
+ add_column "test_models", "first_name", :string
91
+ rename_column "test_models", "first_name", "group"
92
+
93
+ assert_includes TestModel.column_names, "group"
94
+ end
95
+
96
+ def test_rename_column_with_an_index
97
+ add_column "test_models", :hat_name, :string
98
+ add_index :test_models, :hat_name
99
+
100
+ assert_equal 1, connection.indexes("test_models").size
101
+ rename_column "test_models", "hat_name", "name"
102
+
103
+ assert_equal ["index_test_models_on_name"], connection.indexes("test_models").map(&:name)
104
+ end
105
+
106
+ def test_rename_column_with_multi_column_index
107
+ add_column "test_models", :hat_size, :integer
108
+ add_column "test_models", :hat_style, :string, limit: 100
109
+ add_index "test_models", ["hat_style", "hat_size"], unique: true
110
+
111
+ rename_column "test_models", "hat_size", "size"
112
+ assert_equal ["index_test_models_on_hat_style_and_size"], connection.indexes("test_models").map(&:name)
113
+
114
+ rename_column "test_models", "hat_style", "style"
115
+ assert_equal ["index_test_models_on_style_and_size"], connection.indexes("test_models").map(&:name)
116
+ end
117
+
118
+ def test_rename_column_does_not_rename_custom_named_index
119
+ add_column "test_models", :hat_name, :string
120
+ add_index :test_models, :hat_name, name: "idx_hat_name"
121
+
122
+ assert_equal 1, connection.indexes("test_models").size
123
+ rename_column "test_models", "hat_name", "name"
124
+ assert_equal ["idx_hat_name"], connection.indexes("test_models").map(&:name)
125
+ end
126
+
127
+ def test_remove_column_with_index
128
+ add_column "test_models", :hat_name, :string
129
+ add_index :test_models, :hat_name
130
+
131
+ assert_equal 1, connection.indexes("test_models").size
132
+ remove_column("test_models", "hat_name")
133
+ assert_equal 0, connection.indexes("test_models").size
134
+ end
135
+
136
+ def test_remove_column_with_multi_column_index
137
+ # MariaDB starting with 10.2.8
138
+ # Dropping a column that is part of a multi-column UNIQUE constraint is not permitted.
139
+ skip if current_adapter?(:Mysql2Adapter) && connection.mariadb? && connection.database_version >= "10.2.8"
140
+
141
+ add_column "test_models", :hat_size, :integer
142
+ add_column "test_models", :hat_style, :string, limit: 100
143
+ add_index "test_models", ["hat_style", "hat_size"], unique: true
144
+
145
+ assert_equal 1, connection.indexes("test_models").size
146
+ remove_column("test_models", "hat_size")
147
+
148
+ # Every database and/or database adapter has their own behavior
149
+ # if it drops the multi-column index when any of the indexed columns dropped by remove_column.
150
+ if current_adapter?(:PostgreSQLAdapter, :OracleAdapter, :IBM_DBAdapter)
151
+ assert_equal [], connection.indexes("test_models").map(&:name)
152
+ else
153
+ assert_equal ["index_test_models_on_hat_style_and_hat_size"], connection.indexes("test_models").map(&:name)
154
+ end
155
+ end
156
+
157
+ def test_change_type_of_not_null_column
158
+ change_column "test_models", "updated_at", :datetime, null: false
159
+ change_column "test_models", "updated_at", :datetime, null: false
160
+
161
+ TestModel.reset_column_information
162
+ assert_equal false, TestModel.columns_hash["updated_at"].null
163
+ ensure
164
+ change_column "test_models", "updated_at", :datetime, null: true
165
+ end
166
+
167
+ def test_change_column_nullability
168
+ add_column "test_models", "funny", :boolean
169
+ assert TestModel.columns_hash["funny"].null, "Column 'funny' must initially allow nulls"
170
+
171
+ change_column "test_models", "funny", :boolean, null: false, default: true
172
+
173
+ TestModel.reset_column_information
174
+ assert_not TestModel.columns_hash["funny"].null, "Column 'funny' must *not* allow nulls at this point"
175
+
176
+ change_column "test_models", "funny", :boolean, null: true
177
+ TestModel.reset_column_information
178
+ assert TestModel.columns_hash["funny"].null, "Column 'funny' must allow nulls again at this point"
179
+ end
180
+
181
+ def test_change_column
182
+ add_column "test_models", "age", :integer
183
+ add_column "test_models", "approved", :boolean, default: true
184
+
185
+ old_columns = connection.columns(TestModel.table_name)
186
+
187
+ assert old_columns.find { |c| c.name == "age" && c.type == :integer }
188
+
189
+ change_column "test_models", "age", :string
190
+
191
+ new_columns = connection.columns(TestModel.table_name)
192
+
193
+ assert_not new_columns.find { |c| c.name == "age" && c.type == :integer }
194
+ assert new_columns.find { |c| c.name == "age" && c.type == :string }
195
+
196
+ old_columns = connection.columns(TestModel.table_name)
197
+ assert old_columns.find { |c|
198
+ default = connection.lookup_cast_type_from_column(c).deserialize(c.default)
199
+ c.name == "approved" && c.type == :boolean && default == true
200
+ }
201
+
202
+ change_column :test_models, :approved, :boolean, default: false
203
+ new_columns = connection.columns(TestModel.table_name)
204
+
205
+ assert_not new_columns.find { |c|
206
+ default = connection.lookup_cast_type_from_column(c).deserialize(c.default)
207
+ c.name == "approved" && c.type == :boolean && default == true
208
+ }
209
+ assert new_columns.find { |c|
210
+ default = connection.lookup_cast_type_from_column(c).deserialize(c.default)
211
+ c.name == "approved" && c.type == :boolean && default == false
212
+ }
213
+ change_column :test_models, :approved, :boolean, default: true
214
+ end
215
+
216
+ def test_change_column_with_nil_default
217
+ add_column "test_models", "contributor", :boolean, default: true
218
+ assert_predicate TestModel.new, :contributor?
219
+
220
+ change_column "test_models", "contributor", :boolean, default: nil
221
+ TestModel.reset_column_information
222
+ assert_not_predicate TestModel.new, :contributor?
223
+ assert_nil TestModel.new.contributor
224
+ end
225
+
226
+ def test_change_column_to_drop_default_with_null_false
227
+ add_column "test_models", "contributor", :boolean, default: true, null: false
228
+ assert_predicate TestModel.new, :contributor?
229
+
230
+ change_column "test_models", "contributor", :boolean, default: nil, null: false
231
+ TestModel.reset_column_information
232
+ assert_not_predicate TestModel.new, :contributor?
233
+ assert_nil TestModel.new.contributor
234
+ end
235
+
236
+ def test_change_column_with_new_default
237
+ add_column "test_models", "administrator", :boolean, default: true
238
+ assert_predicate TestModel.new, :administrator?
239
+
240
+ change_column "test_models", "administrator", :boolean, default: false
241
+ TestModel.reset_column_information
242
+ assert_not_predicate TestModel.new, :administrator?
243
+ end
244
+
245
+ def test_change_column_with_custom_index_name
246
+ add_column "test_models", "category", :string
247
+ add_index :test_models, :category, name: "test_models_categories_idx"
248
+
249
+ assert_equal ["test_models_categories_idx"], connection.indexes("test_models").map(&:name)
250
+ change_column "test_models", "category", :string, null: false, default: "article"
251
+
252
+ assert_equal ["test_models_categories_idx"], connection.indexes("test_models").map(&:name)
253
+ end
254
+
255
+ def test_change_column_with_long_index_name
256
+ table_name_prefix = "test_models_"
257
+ long_index_name = table_name_prefix + ("x" * (connection.index_name_length - table_name_prefix.length))
258
+ add_column "test_models", "category", :string
259
+ add_index :test_models, :category, name: long_index_name
260
+
261
+ change_column "test_models", "category", :string, null: false, default: "article"
262
+
263
+ assert_equal [long_index_name], connection.indexes("test_models").map(&:name)
264
+ end
265
+
266
+ def test_change_column_default
267
+ add_column "test_models", "first_name", :string
268
+ connection.change_column_default "test_models", "first_name", "Tester"
269
+
270
+ assert_equal "Tester", TestModel.new.first_name
271
+ end
272
+
273
+ def test_change_column_default_to_null
274
+ add_column "test_models", "first_name", :string
275
+ connection.change_column_default "test_models", "first_name", nil
276
+ assert_nil TestModel.new.first_name
277
+ end
278
+
279
+ def test_change_column_default_with_from_and_to
280
+ add_column "test_models", "first_name", :string
281
+ connection.change_column_default "test_models", "first_name", from: nil, to: "Tester"
282
+
283
+ assert_equal "Tester", TestModel.new.first_name
284
+ end
285
+
286
+ def test_remove_column_no_second_parameter_raises_exception
287
+ assert_raise(ArgumentError) { connection.remove_column("funny") }
288
+ end
289
+
290
+ def test_removing_and_renaming_column_preserves_custom_primary_key
291
+ connection.create_table "my_table", primary_key: "my_table_id", force: true do |t|
292
+ t.integer "col_one"
293
+ t.string "col_two", limit: 128, null: false
294
+ end
295
+
296
+ remove_column("my_table", "col_two")
297
+ rename_column("my_table", "col_one", "col_three")
298
+
299
+ assert_equal "my_table_id", connection.primary_key("my_table")
300
+ ensure
301
+ connection.drop_table(:my_table) rescue nil
302
+ end
303
+
304
+ def test_column_with_index
305
+ connection.create_table "my_table", force: true do |t|
306
+ t.string :item_number, index: true
307
+ end
308
+
309
+ assert connection.index_exists?("my_table", :item_number, name: :index_my_table_on_item_number)
310
+ ensure
311
+ connection.drop_table(:my_table) rescue nil
312
+ end
313
+
314
+ def test_add_column_without_column_name
315
+ e = assert_raise ArgumentError do
316
+ connection.create_table "my_table", force: true do |t|
317
+ t.timestamp
318
+ end
319
+ end
320
+ assert_equal "Missing column name(s) for timestamp", e.message
321
+ ensure
322
+ connection.drop_table :my_table, if_exists: true
323
+ end
324
+ end
325
+ end
326
+ end