ibm_db 5.7.0-x64-mingw-ucrt

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 (995) 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 +277 -0
  8. data/ext/Makefile.nt32 +181 -0
  9. data/ext/Makefile.nt32.191 +212 -0
  10. data/ext/extconf.rb +386 -0
  11. data/ext/gil_release_version.h +3 -0
  12. data/ext/ibm_db-x64-mingw-ucrt.def +2 -0
  13. data/ext/ibm_db.c +11925 -0
  14. data/ext/ibm_db.o +0 -0
  15. data/ext/ibm_db.so +0 -0
  16. data/ext/mkmf.log +110 -0
  17. data/ext/ruby_ibm_db.h +241 -0
  18. data/ext/ruby_ibm_db_cli.c +871 -0
  19. data/ext/ruby_ibm_db_cli.h +512 -0
  20. data/ext/ruby_ibm_db_cli.o +0 -0
  21. data/ext/unicode_support_version.h +3 -0
  22. data/init.rb +42 -0
  23. data/lib/IBM_DB.rb +27 -0
  24. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +5384 -0
  25. data/lib/active_record/connection_adapters/ibm_db_pstmt.rb +1965 -0
  26. data/lib/active_record/connection_adapters/ibmdb_adapter.rb +5 -0
  27. data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -0
  28. data/lib/ibm_db.so +1 -0
  29. data/lib/mswin/ibm_db.rb +105 -0
  30. data/lib/mswin/rb2x/i386/ruby25/ibm_db.so +0 -0
  31. data/lib/mswin/rb2x/i386/ruby26/ibm_db.so +0 -0
  32. data/lib/mswin/rb2x/i386/ruby27/ibm_db.so +0 -0
  33. data/lib/mswin/rb3x/i386/ruby30/ibm_db.so +0 -0
  34. data/lib/mswin/rb4x/x64/ruby40/ibm_db.so +0 -0
  35. data/test/active_record/connection_adapters/fake_adapter.rb +52 -0
  36. data/test/active_record/connection_adapters/fake_legacy_adapter.rb +17 -0
  37. data/test/active_record/connection_adapters/fake_misleading_legacy_adapter.rb +8 -0
  38. data/test/activejob/destroy_association_async_job_test.rb +62 -0
  39. data/test/activejob/destroy_association_async_test.rb +441 -0
  40. data/test/activejob/destroy_async_job_not_present_test.rb +31 -0
  41. data/test/activejob/helper.rb +15 -0
  42. data/test/activejob/job_runtime_test.rb +41 -0
  43. data/test/activejob/unloadable_base_job.rb +3 -0
  44. data/test/assets/example.log +1 -0
  45. data/test/assets/flowers.jpg +0 -0
  46. data/test/assets/schema_dump_5_1.yml +345 -0
  47. data/test/assets/test.txt +1 -0
  48. data/test/cases/active_record_schema_test.rb +196 -0
  49. data/test/cases/active_record_test.rb +21 -0
  50. data/test/cases/adapter_prevent_writes_test.rb +158 -0
  51. data/test/cases/adapter_test.rb +1075 -0
  52. data/test/cases/adapters/abstract_mysql_adapter/active_schema_test.rb +210 -0
  53. data/test/cases/adapters/abstract_mysql_adapter/adapter_prevent_writes_test.rb +111 -0
  54. data/test/cases/adapters/abstract_mysql_adapter/auto_increment_test.rb +48 -0
  55. data/test/cases/adapters/abstract_mysql_adapter/bind_parameter_test.rb +91 -0
  56. data/test/cases/adapters/abstract_mysql_adapter/case_sensitivity_test.rb +65 -0
  57. data/test/cases/adapters/abstract_mysql_adapter/charset_collation_test.rb +85 -0
  58. data/test/cases/adapters/abstract_mysql_adapter/connection_test.rb +267 -0
  59. data/test/cases/adapters/abstract_mysql_adapter/count_deleted_rows_with_lock_test.rb +29 -0
  60. data/test/cases/adapters/abstract_mysql_adapter/json_test.rb +24 -0
  61. data/test/cases/adapters/abstract_mysql_adapter/mysql_boolean_test.rb +102 -0
  62. data/test/cases/adapters/abstract_mysql_adapter/mysql_enum_test.rb +47 -0
  63. data/test/cases/adapters/abstract_mysql_adapter/mysql_explain_test.rb +71 -0
  64. data/test/cases/adapters/abstract_mysql_adapter/nested_deadlock_test.rb +191 -0
  65. data/test/cases/adapters/abstract_mysql_adapter/optimizer_hints_test.rb +69 -0
  66. data/test/cases/adapters/abstract_mysql_adapter/quoting_test.rb +49 -0
  67. data/test/cases/adapters/abstract_mysql_adapter/schema_migrations_test.rb +68 -0
  68. data/test/cases/adapters/abstract_mysql_adapter/schema_test.rb +130 -0
  69. data/test/cases/adapters/abstract_mysql_adapter/set_test.rb +32 -0
  70. data/test/cases/adapters/abstract_mysql_adapter/sp_test.rb +39 -0
  71. data/test/cases/adapters/abstract_mysql_adapter/sql_types_test.rb +16 -0
  72. data/test/cases/adapters/abstract_mysql_adapter/table_options_test.rb +125 -0
  73. data/test/cases/adapters/abstract_mysql_adapter/transaction_test.rb +204 -0
  74. data/test/cases/adapters/abstract_mysql_adapter/unsigned_type_test.rb +77 -0
  75. data/test/cases/adapters/abstract_mysql_adapter/virtual_column_test.rb +69 -0
  76. data/test/cases/adapters/abstract_mysql_adapter/warnings_test.rb +109 -0
  77. data/test/cases/adapters/mysql2/active_schema_test.rb +203 -0
  78. data/test/cases/adapters/mysql2/auto_increment_test.rb +34 -0
  79. data/test/cases/adapters/mysql2/bind_parameter_test.rb +52 -0
  80. data/test/cases/adapters/mysql2/boolean_test.rb +102 -0
  81. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +65 -0
  82. data/test/cases/adapters/mysql2/charset_collation_test.rb +57 -0
  83. data/test/cases/adapters/mysql2/check_constraint_quoting_test.rb +35 -0
  84. data/test/cases/adapters/mysql2/connection_test.rb +208 -0
  85. data/test/cases/adapters/mysql2/count_deleted_rows_with_lock_test.rb +28 -0
  86. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +49 -0
  87. data/test/cases/adapters/mysql2/dbconsole_test.rb +87 -0
  88. data/test/cases/adapters/mysql2/enum_test.rb +47 -0
  89. data/test/cases/adapters/mysql2/explain_test.rb +23 -0
  90. data/test/cases/adapters/mysql2/json_test.rb +24 -0
  91. data/test/cases/adapters/mysql2/mysql2_adapter_prevent_writes_test.rb +208 -0
  92. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +364 -0
  93. data/test/cases/adapters/mysql2/mysql2_rake_test.rb +433 -0
  94. data/test/cases/adapters/mysql2/nested_deadlock_test.rb +75 -0
  95. data/test/cases/adapters/mysql2/optimizer_hints_test.rb +69 -0
  96. data/test/cases/adapters/mysql2/reserved_word_test.rb +152 -0
  97. data/test/cases/adapters/mysql2/schema_migrations_test.rb +64 -0
  98. data/test/cases/adapters/mysql2/schema_test.rb +128 -0
  99. data/test/cases/adapters/mysql2/set_test.rb +32 -0
  100. data/test/cases/adapters/mysql2/sp_test.rb +38 -0
  101. data/test/cases/adapters/mysql2/sql_types_test.rb +16 -0
  102. data/test/cases/adapters/mysql2/table_options_test.rb +125 -0
  103. data/test/cases/adapters/mysql2/transaction_test.rb +151 -0
  104. data/test/cases/adapters/mysql2/unsigned_type_test.rb +68 -0
  105. data/test/cases/adapters/mysql2/virtual_column_test.rb +66 -0
  106. data/test/cases/adapters/postgresql/active_schema_test.rb +117 -0
  107. data/test/cases/adapters/postgresql/array_test.rb +394 -0
  108. data/test/cases/adapters/postgresql/bind_parameter_test.rb +52 -0
  109. data/test/cases/adapters/postgresql/bit_string_test.rb +84 -0
  110. data/test/cases/adapters/postgresql/bytea_test.rb +135 -0
  111. data/test/cases/adapters/postgresql/case_insensitive_test.rb +27 -0
  112. data/test/cases/adapters/postgresql/change_schema_test.rb +71 -0
  113. data/test/cases/adapters/postgresql/cidr_test.rb +44 -0
  114. data/test/cases/adapters/postgresql/citext_test.rb +84 -0
  115. data/test/cases/adapters/postgresql/collation_test.rb +55 -0
  116. data/test/cases/adapters/postgresql/composite_test.rb +134 -0
  117. data/test/cases/adapters/postgresql/connection_test.rb +252 -0
  118. data/test/cases/adapters/postgresql/create_unlogged_tables_test.rb +75 -0
  119. data/test/cases/adapters/postgresql/datatype_test.rb +94 -0
  120. data/test/cases/adapters/postgresql/date_test.rb +42 -0
  121. data/test/cases/adapters/postgresql/dbconsole_test.rb +109 -0
  122. data/test/cases/adapters/postgresql/deferred_constraints_test.rb +55 -0
  123. data/test/cases/adapters/postgresql/domain_test.rb +49 -0
  124. data/test/cases/adapters/postgresql/enum_test.rb +293 -0
  125. data/test/cases/adapters/postgresql/explain_test.rb +41 -0
  126. data/test/cases/adapters/postgresql/extension_migration_test.rb +106 -0
  127. data/test/cases/adapters/postgresql/foreign_table_test.rb +109 -0
  128. data/test/cases/adapters/postgresql/full_text_test.rb +46 -0
  129. data/test/cases/adapters/postgresql/geometric_test.rb +379 -0
  130. data/test/cases/adapters/postgresql/hstore_test.rb +380 -0
  131. data/test/cases/adapters/postgresql/infinity_test.rb +119 -0
  132. data/test/cases/adapters/postgresql/integer_test.rb +27 -0
  133. data/test/cases/adapters/postgresql/interval_test.rb +91 -0
  134. data/test/cases/adapters/postgresql/invertible_migration_test.rb +139 -0
  135. data/test/cases/adapters/postgresql/json_test.rb +57 -0
  136. data/test/cases/adapters/postgresql/ltree_test.rb +51 -0
  137. data/test/cases/adapters/postgresql/money_test.rb +135 -0
  138. data/test/cases/adapters/postgresql/network_test.rb +114 -0
  139. data/test/cases/adapters/postgresql/numbers_test.rb +67 -0
  140. data/test/cases/adapters/postgresql/optimizer_hints_test.rb +71 -0
  141. data/test/cases/adapters/postgresql/partitions_test.rb +25 -0
  142. data/test/cases/adapters/postgresql/postgresql_adapter_prevent_writes_test.rb +102 -0
  143. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +830 -0
  144. data/test/cases/adapters/postgresql/postgresql_rake_test.rb +637 -0
  145. data/test/cases/adapters/postgresql/prepared_statements_disabled_test.rb +27 -0
  146. data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -0
  147. data/test/cases/adapters/postgresql/quoting_test.rb +109 -0
  148. data/test/cases/adapters/postgresql/range_test.rb +621 -0
  149. data/test/cases/adapters/postgresql/referential_integrity_test.rb +136 -0
  150. data/test/cases/adapters/postgresql/rename_table_test.rb +62 -0
  151. data/test/cases/adapters/postgresql/schema_authorization_test.rb +110 -0
  152. data/test/cases/adapters/postgresql/schema_test.rb +963 -0
  153. data/test/cases/adapters/postgresql/serial_test.rb +156 -0
  154. data/test/cases/adapters/postgresql/statement_pool_test.rb +65 -0
  155. data/test/cases/adapters/postgresql/timestamp_test.rb +209 -0
  156. data/test/cases/adapters/postgresql/transaction_nested_test.rb +238 -0
  157. data/test/cases/adapters/postgresql/transaction_test.rb +215 -0
  158. data/test/cases/adapters/postgresql/type_lookup_test.rb +35 -0
  159. data/test/cases/adapters/postgresql/utils_test.rb +64 -0
  160. data/test/cases/adapters/postgresql/uuid_test.rb +479 -0
  161. data/test/cases/adapters/postgresql/virtual_column_test.rb +114 -0
  162. data/test/cases/adapters/postgresql/xml_test.rb +50 -0
  163. data/test/cases/adapters/sqlite3/bind_parameter_test.rb +52 -0
  164. data/test/cases/adapters/sqlite3/collation_test.rb +64 -0
  165. data/test/cases/adapters/sqlite3/copy_table_test.rb +122 -0
  166. data/test/cases/adapters/sqlite3/dbconsole_test.rb +81 -0
  167. data/test/cases/adapters/sqlite3/explain_test.rb +23 -0
  168. data/test/cases/adapters/sqlite3/json_test.rb +29 -0
  169. data/test/cases/adapters/sqlite3/quoting_test.rb +110 -0
  170. data/test/cases/adapters/sqlite3/sqlite3_adapter_prevent_writes_test.rb +93 -0
  171. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +1283 -0
  172. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +27 -0
  173. data/test/cases/adapters/sqlite3/sqlite_rake_test.rb +264 -0
  174. data/test/cases/adapters/sqlite3/statement_pool_test.rb +21 -0
  175. data/test/cases/adapters/sqlite3/transaction_test.rb +126 -0
  176. data/test/cases/adapters/sqlite3/virtual_column_test.rb +138 -0
  177. data/test/cases/adapters/sqlite3/virtual_table_test.rb +51 -0
  178. data/test/cases/adapters/trilogy/dbconsole_test.rb +76 -0
  179. data/test/cases/adapters/trilogy/trilogy_adapter_test.rb +473 -0
  180. data/test/cases/adapters/trilogy/trilogy_rake_test.rb +433 -0
  181. data/test/cases/aggregations_test.rb +186 -0
  182. data/test/cases/annotate_test.rb +48 -0
  183. data/test/cases/ar_schema_test.rb +213 -0
  184. data/test/cases/arel/attributes/attribute_test.rb +1184 -0
  185. data/test/cases/arel/attributes/math_test.rb +83 -0
  186. data/test/cases/arel/attributes_test.rb +27 -0
  187. data/test/cases/arel/collectors/bind_test.rb +40 -0
  188. data/test/cases/arel/collectors/composite_test.rb +57 -0
  189. data/test/cases/arel/collectors/sql_string_test.rb +41 -0
  190. data/test/cases/arel/collectors/substitute_bind_collector_test.rb +48 -0
  191. data/test/cases/arel/crud_test.rb +65 -0
  192. data/test/cases/arel/delete_manager_test.rb +47 -0
  193. data/test/cases/arel/factory_methods_test.rb +91 -0
  194. data/test/cases/arel/helper.rb +45 -0
  195. data/test/cases/arel/insert_manager_test.rb +235 -0
  196. data/test/cases/arel/nodes/and_test.rb +30 -0
  197. data/test/cases/arel/nodes/as_test.rb +48 -0
  198. data/test/cases/arel/nodes/ascending_test.rb +46 -0
  199. data/test/cases/arel/nodes/bin_test.rb +35 -0
  200. data/test/cases/arel/nodes/binary_test.rb +29 -0
  201. data/test/cases/arel/nodes/bind_param_test.rb +22 -0
  202. data/test/cases/arel/nodes/bound_sql_literal_test.rb +31 -0
  203. data/test/cases/arel/nodes/case_test.rb +96 -0
  204. data/test/cases/arel/nodes/casted_test.rb +18 -0
  205. data/test/cases/arel/nodes/comment_test.rb +22 -0
  206. data/test/cases/arel/nodes/count_test.rb +35 -0
  207. data/test/cases/arel/nodes/cte_test.rb +46 -0
  208. data/test/cases/arel/nodes/delete_statement_test.rb +36 -0
  209. data/test/cases/arel/nodes/descending_test.rb +46 -0
  210. data/test/cases/arel/nodes/distinct_test.rb +21 -0
  211. data/test/cases/arel/nodes/equality_test.rb +62 -0
  212. data/test/cases/arel/nodes/extract_test.rb +43 -0
  213. data/test/cases/arel/nodes/false_test.rb +21 -0
  214. data/test/cases/arel/nodes/filter_test.rb +37 -0
  215. data/test/cases/arel/nodes/fragments_test.rb +38 -0
  216. data/test/cases/arel/nodes/grouping_test.rb +26 -0
  217. data/test/cases/arel/nodes/homogeneous_in_test.rb +52 -0
  218. data/test/cases/arel/nodes/infix_operation_test.rb +42 -0
  219. data/test/cases/arel/nodes/insert_statement_test.rb +44 -0
  220. data/test/cases/arel/nodes/named_function_test.rb +48 -0
  221. data/test/cases/arel/nodes/node_test.rb +22 -0
  222. data/test/cases/arel/nodes/not_test.rb +31 -0
  223. data/test/cases/arel/nodes/or_test.rb +36 -0
  224. data/test/cases/arel/nodes/over_test.rb +69 -0
  225. data/test/cases/arel/nodes/select_core_test.rb +79 -0
  226. data/test/cases/arel/nodes/select_statement_test.rb +51 -0
  227. data/test/cases/arel/nodes/sql_literal_test.rb +92 -0
  228. data/test/cases/arel/nodes/sum_test.rb +35 -0
  229. data/test/cases/arel/nodes/table_alias_test.rb +41 -0
  230. data/test/cases/arel/nodes/true_test.rb +21 -0
  231. data/test/cases/arel/nodes/unary_operation_test.rb +41 -0
  232. data/test/cases/arel/nodes/update_statement_test.rb +64 -0
  233. data/test/cases/arel/nodes/window_test.rb +81 -0
  234. data/test/cases/arel/nodes_test.rb +35 -0
  235. data/test/cases/arel/select_manager_test.rb +1238 -0
  236. data/test/cases/arel/support/fake_record.rb +140 -0
  237. data/test/cases/arel/table_test.rb +206 -0
  238. data/test/cases/arel/update_manager_test.rb +171 -0
  239. data/test/cases/arel/visitors/dispatch_contamination_test.rb +78 -0
  240. data/test/cases/arel/visitors/dot_test.rb +265 -0
  241. data/test/cases/arel/visitors/mysql_test.rb +205 -0
  242. data/test/cases/arel/visitors/postgres_test.rb +336 -0
  243. data/test/cases/arel/visitors/sqlite_test.rb +75 -0
  244. data/test/cases/arel/visitors/to_sql_test.rb +1060 -0
  245. data/test/cases/assertions/query_assertions_test.rb +136 -0
  246. data/test/cases/associations/association_scope_test.rb +16 -0
  247. data/test/cases/associations/belongs_to_associations_test.rb +1954 -0
  248. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +43 -0
  249. data/test/cases/associations/callbacks_test.rb +208 -0
  250. data/test/cases/associations/cascaded_eager_loading_test.rb +256 -0
  251. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +156 -0
  252. data/test/cases/associations/eager_load_nested_include_test.rb +127 -0
  253. data/test/cases/associations/eager_singularization_test.rb +148 -0
  254. data/test/cases/associations/eager_test.rb +1820 -0
  255. data/test/cases/associations/extension_test.rb +93 -0
  256. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +997 -0
  257. data/test/cases/associations/has_many_associations_test.rb +3284 -0
  258. data/test/cases/associations/has_many_through_associations_test.rb +1707 -0
  259. data/test/cases/associations/has_many_through_disable_joins_associations_test.rb +197 -0
  260. data/test/cases/associations/has_one_associations_test.rb +1003 -0
  261. data/test/cases/associations/has_one_through_associations_test.rb +478 -0
  262. data/test/cases/associations/has_one_through_disable_joins_associations_test.rb +82 -0
  263. data/test/cases/associations/inner_join_association_test.rb +245 -0
  264. data/test/cases/associations/inverse_associations_test.rb +1078 -0
  265. data/test/cases/associations/join_model_test.rb +792 -0
  266. data/test/cases/associations/left_outer_join_association_test.rb +134 -0
  267. data/test/cases/associations/nested_error_test.rb +116 -0
  268. data/test/cases/associations/nested_through_associations_test.rb +671 -0
  269. data/test/cases/associations/required_test.rb +127 -0
  270. data/test/cases/associations_test.rb +1773 -0
  271. data/test/cases/asynchronous_queries_test.rb +310 -0
  272. data/test/cases/attribute_decorators_test.rb +126 -0
  273. data/test/cases/attribute_methods/read_test.rb +66 -0
  274. data/test/cases/attribute_methods/time_zone_converter_test.rb +21 -0
  275. data/test/cases/attribute_methods_test.rb +1643 -0
  276. data/test/cases/attribute_set_test.rb +270 -0
  277. data/test/cases/attribute_test.rb +246 -0
  278. data/test/cases/attributes_test.rb +412 -0
  279. data/test/cases/autosave_association_test.rb +2506 -0
  280. data/test/cases/base_prevent_writes_test.rb +98 -0
  281. data/test/cases/base_test.rb +1995 -0
  282. data/test/cases/batches_test.rb +1079 -0
  283. data/test/cases/binary_test.rb +70 -0
  284. data/test/cases/bind_parameter_test.rb +374 -0
  285. data/test/cases/boolean_test.rb +52 -0
  286. data/test/cases/cache_key_test.rb +131 -0
  287. data/test/cases/calculations_test.rb +1792 -0
  288. data/test/cases/callbacks_test.rb +502 -0
  289. data/test/cases/clone_test.rb +46 -0
  290. data/test/cases/coders/json_test.rb +17 -0
  291. data/test/cases/coders/yaml_column_test.rb +161 -0
  292. data/test/cases/collection_cache_key_test.rb +280 -0
  293. data/test/cases/column_alias_test.rb +13 -0
  294. data/test/cases/column_definition_test.rb +43 -0
  295. data/test/cases/comment_test.rb +201 -0
  296. data/test/cases/connection_adapters/adapter_leasing_test.rb +60 -0
  297. data/test/cases/connection_adapters/connection_handler_test.rb +513 -0
  298. data/test/cases/connection_adapters/connection_handlers_multi_db_test.rb +424 -0
  299. data/test/cases/connection_adapters/connection_handlers_multi_pool_config_test.rb +100 -0
  300. data/test/cases/connection_adapters/connection_handlers_sharding_db_test.rb +590 -0
  301. data/test/cases/connection_adapters/connection_specification_test.rb +12 -0
  302. data/test/cases/connection_adapters/connection_swapping_nested_test.rb +570 -0
  303. data/test/cases/connection_adapters/legacy_connection_handlers_multi_db_test.rb +486 -0
  304. data/test/cases/connection_adapters/legacy_connection_handlers_sharding_db_test.rb +586 -0
  305. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +505 -0
  306. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +81 -0
  307. data/test/cases/connection_adapters/quoting_test.rb +13 -0
  308. data/test/cases/connection_adapters/registration_test.rb +98 -0
  309. data/test/cases/connection_adapters/schema_cache_test.rb +447 -0
  310. data/test/cases/connection_adapters/standalone_connection_test.rb +38 -0
  311. data/test/cases/connection_adapters/statement_pool_test.rb +29 -0
  312. data/test/cases/connection_adapters/type_lookup_test.rb +107 -0
  313. data/test/cases/connection_handling_test.rb +210 -0
  314. data/test/cases/connection_management_test.rb +151 -0
  315. data/test/cases/connection_pool_test.rb +1121 -0
  316. data/test/cases/connection_specification/resolver_test.rb +131 -0
  317. data/test/cases/core_test.rb +294 -0
  318. data/test/cases/counter_cache_test.rb +495 -0
  319. data/test/cases/custom_locking_test.rb +19 -0
  320. data/test/cases/database_configurations/hash_config_test.rb +210 -0
  321. data/test/cases/database_configurations/resolver_test.rb +154 -0
  322. data/test/cases/database_configurations/url_config_test.rb +53 -0
  323. data/test/cases/database_configurations_test.rb +188 -0
  324. data/test/cases/database_selector_test.rb +318 -0
  325. data/test/cases/database_statements_test.rb +32 -0
  326. data/test/cases/date_test.rb +36 -0
  327. data/test/cases/date_time_precision_test.rb +259 -0
  328. data/test/cases/date_time_test.rb +94 -0
  329. data/test/cases/defaults_test.rb +320 -0
  330. data/test/cases/delegated_type_test.rb +117 -0
  331. data/test/cases/dirty_test.rb +1016 -0
  332. data/test/cases/disconnected_test.rb +31 -0
  333. data/test/cases/dup_test.rb +204 -0
  334. data/test/cases/encryption/cipher/aes256_gcm_test.rb +50 -0
  335. data/test/cases/encryption/cipher_test.rb +65 -0
  336. data/test/cases/encryption/concurrency_test.rb +27 -0
  337. data/test/cases/encryption/config_test.rb +21 -0
  338. data/test/cases/encryption/configurable_test.rb +93 -0
  339. data/test/cases/encryption/contexts_test.rb +105 -0
  340. data/test/cases/encryption/derived_secret_key_provider_test.rb +31 -0
  341. data/test/cases/encryption/deterministic_key_provider_test.rb +11 -0
  342. data/test/cases/encryption/encryptable_record_api_test.rb +175 -0
  343. data/test/cases/encryption/encryptable_record_message_pack_serialized_test.rb +42 -0
  344. data/test/cases/encryption/encryptable_record_test.rb +470 -0
  345. data/test/cases/encryption/encrypted_fixtures_test.rb +22 -0
  346. data/test/cases/encryption/encrypting_only_encryptor_test.rb +20 -0
  347. data/test/cases/encryption/encryption_schemes_test.rb +240 -0
  348. data/test/cases/encryption/encryptor_test.rb +113 -0
  349. data/test/cases/encryption/envelope_encryption_key_provider_test.rb +49 -0
  350. data/test/cases/encryption/extended_deterministic_queries_test.rb +81 -0
  351. data/test/cases/encryption/helper.rb +152 -0
  352. data/test/cases/encryption/key_generator_test.rb +55 -0
  353. data/test/cases/encryption/key_provider_test.rb +57 -0
  354. data/test/cases/encryption/key_test.rb +17 -0
  355. data/test/cases/encryption/message_pack_message_serializer_test.rb +70 -0
  356. data/test/cases/encryption/message_serializer_test.rb +82 -0
  357. data/test/cases/encryption/message_test.rb +43 -0
  358. data/test/cases/encryption/null_encryptor_test.rb +21 -0
  359. data/test/cases/encryption/properties_test.rb +69 -0
  360. data/test/cases/encryption/read_only_null_encryptor_test.rb +19 -0
  361. data/test/cases/encryption/scheme_test.rb +58 -0
  362. data/test/cases/encryption/unencrypted_attributes_test.rb +27 -0
  363. data/test/cases/encryption/uniqueness_validations_test.rb +65 -0
  364. data/test/cases/enum_test.rb +1125 -0
  365. data/test/cases/errors_test.rb +19 -0
  366. data/test/cases/excluding_test.rb +116 -0
  367. data/test/cases/explain_subscriber_test.rb +71 -0
  368. data/test/cases/explain_test.rb +188 -0
  369. data/test/cases/filter_attributes_test.rb +146 -0
  370. data/test/cases/finder_respond_to_test.rb +60 -0
  371. data/test/cases/finder_test.rb +1961 -0
  372. data/test/cases/fixture_set/file_test.rb +161 -0
  373. data/test/cases/fixtures_test.rb +1881 -0
  374. data/test/cases/forbidden_attributes_protection_test.rb +130 -0
  375. data/test/cases/habtm_destroy_order_test.rb +61 -0
  376. data/test/cases/helper.rb +107 -0
  377. data/test/cases/hot_compatibility_test.rb +143 -0
  378. data/test/cases/i18n_test.rb +46 -0
  379. data/test/cases/inheritance_test.rb +661 -0
  380. data/test/cases/inherited_test.rb +40 -0
  381. data/test/cases/insert_all_test.rb +899 -0
  382. data/test/cases/instrumentation_test.rb +273 -0
  383. data/test/cases/integration_test.rb +261 -0
  384. data/test/cases/invalid_connection_test.rb +26 -0
  385. data/test/cases/invertible_migration_test.rb +611 -0
  386. data/test/cases/json_attribute_test.rb +36 -0
  387. data/test/cases/json_serialization_test.rb +310 -0
  388. data/test/cases/json_shared_test_cases.rb +286 -0
  389. data/test/cases/locking_test.rb +823 -0
  390. data/test/cases/log_subscriber_test.rb +269 -0
  391. data/test/cases/marshal_serialization_test.rb +112 -0
  392. data/test/cases/message_pack_test.rb +91 -0
  393. data/test/cases/migration/change_schema_test.rb +535 -0
  394. data/test/cases/migration/change_table_test.rb +379 -0
  395. data/test/cases/migration/check_constraint_test.rb +344 -0
  396. data/test/cases/migration/column_attributes_test.rb +181 -0
  397. data/test/cases/migration/column_positioning_test.rb +68 -0
  398. data/test/cases/migration/columns_test.rb +440 -0
  399. data/test/cases/migration/command_recorder_test.rb +604 -0
  400. data/test/cases/migration/compatibility_test.rb +1360 -0
  401. data/test/cases/migration/create_join_table_test.rb +174 -0
  402. data/test/cases/migration/exclusion_constraint_test.rb +192 -0
  403. data/test/cases/migration/foreign_key_test.rb +923 -0
  404. data/test/cases/migration/helper.rb +43 -0
  405. data/test/cases/migration/index_test.rb +332 -0
  406. data/test/cases/migration/invalid_options_test.rb +129 -0
  407. data/test/cases/migration/logger_test.rb +42 -0
  408. data/test/cases/migration/pending_migrations_test.rb +149 -0
  409. data/test/cases/migration/references_foreign_key_test.rb +304 -0
  410. data/test/cases/migration/references_index_test.rb +118 -0
  411. data/test/cases/migration/references_statements_test.rb +161 -0
  412. data/test/cases/migration/rename_table_test.rb +101 -0
  413. data/test/cases/migration/schema_definitions_test.rb +109 -0
  414. data/test/cases/migration/unique_constraint_test.rb +248 -0
  415. data/test/cases/migration_test.rb +1982 -0
  416. data/test/cases/migrator_test.rb +554 -0
  417. data/test/cases/mixin_test.rb +64 -0
  418. data/test/cases/modules_test.rb +174 -0
  419. data/test/cases/multi_db_migrator_test.rb +244 -0
  420. data/test/cases/multiparameter_attributes_test.rb +396 -0
  421. data/test/cases/multiple_db_test.rb +139 -0
  422. data/test/cases/nested_attributes_test.rb +1237 -0
  423. data/test/cases/nested_attributes_with_callbacks_test.rb +146 -0
  424. data/test/cases/normalized_attribute_test.rb +117 -0
  425. data/test/cases/null_relation_test.rb +117 -0
  426. data/test/cases/numeric_data_test.rb +93 -0
  427. data/test/cases/persistence/reload_association_cache_test.rb +20 -0
  428. data/test/cases/persistence_test.rb +1700 -0
  429. data/test/cases/pooled_connections_test.rb +74 -0
  430. data/test/cases/prepared_statement_status_test.rb +53 -0
  431. data/test/cases/primary_class_test.rb +134 -0
  432. data/test/cases/primary_keys_test.rb +598 -0
  433. data/test/cases/query_cache_test.rb +1210 -0
  434. data/test/cases/query_logs_test.rb +293 -0
  435. data/test/cases/quoting_test.rb +270 -0
  436. data/test/cases/readonly_test.rb +158 -0
  437. data/test/cases/reaper_test.rb +215 -0
  438. data/test/cases/reflection_test.rb +718 -0
  439. data/test/cases/relation/and_test.rb +43 -0
  440. data/test/cases/relation/delegation_test.rb +103 -0
  441. data/test/cases/relation/delete_all_test.rb +138 -0
  442. data/test/cases/relation/field_ordered_values_test.rb +128 -0
  443. data/test/cases/relation/load_async_test.rb +650 -0
  444. data/test/cases/relation/merging_test.rb +405 -0
  445. data/test/cases/relation/mutation_test.rb +150 -0
  446. data/test/cases/relation/or_test.rb +195 -0
  447. data/test/cases/relation/order_test.rb +90 -0
  448. data/test/cases/relation/predicate_builder_test.rb +46 -0
  449. data/test/cases/relation/record_fetch_warning_test.rb +42 -0
  450. data/test/cases/relation/select_test.rb +226 -0
  451. data/test/cases/relation/structural_compatibility_test.rb +38 -0
  452. data/test/cases/relation/update_all_test.rb +371 -0
  453. data/test/cases/relation/where_chain_test.rb +328 -0
  454. data/test/cases/relation/where_clause_test.rb +299 -0
  455. data/test/cases/relation/where_test.rb +517 -0
  456. data/test/cases/relation/with_test.rb +165 -0
  457. data/test/cases/relation_test.rb +487 -0
  458. data/test/cases/relations_test.rb +2549 -0
  459. data/test/cases/reload_models_test.rb +30 -0
  460. data/test/cases/reserved_word_test.rb +142 -0
  461. data/test/cases/result_test.rb +133 -0
  462. data/test/cases/sanitize_test.rb +254 -0
  463. data/test/cases/schema_dumper_test.rb +1023 -0
  464. data/test/cases/schema_loading_test.rb +53 -0
  465. data/test/cases/scoping/default_scoping_test.rb +753 -0
  466. data/test/cases/scoping/named_scoping_test.rb +628 -0
  467. data/test/cases/scoping/relation_scoping_test.rb +630 -0
  468. data/test/cases/secure_password_test.rb +108 -0
  469. data/test/cases/secure_token_test.rb +119 -0
  470. data/test/cases/serialization_test.rb +106 -0
  471. data/test/cases/serialized_attribute_test.rb +700 -0
  472. data/test/cases/shard_keys_test.rb +125 -0
  473. data/test/cases/shard_selector_test.rb +45 -0
  474. data/test/cases/signed_id_test.rb +220 -0
  475. data/test/cases/statement_cache_test.rb +154 -0
  476. data/test/cases/statement_invalid_test.rb +46 -0
  477. data/test/cases/store_test.rb +384 -0
  478. data/test/cases/strict_loading_test.rb +787 -0
  479. data/test/cases/suppressor_test.rb +77 -0
  480. data/test/cases/table_metadata_test.rb +16 -0
  481. data/test/cases/tasks/database_tasks_test.rb +1799 -0
  482. data/test/cases/tasks/mysql_rake_test.rb +417 -0
  483. data/test/cases/tasks/postgresql_rake_test.rb +534 -0
  484. data/test/cases/tasks/sqlite_rake_test.rb +267 -0
  485. data/test/cases/test_case.rb +336 -0
  486. data/test/cases/test_case_test.rb +69 -0
  487. data/test/cases/test_databases_test.rb +83 -0
  488. data/test/cases/test_fixtures_test.rb +75 -0
  489. data/test/cases/time_precision_test.rb +137 -0
  490. data/test/cases/timestamp_test.rb +612 -0
  491. data/test/cases/token_for_test.rb +165 -0
  492. data/test/cases/touch_later_test.rb +165 -0
  493. data/test/cases/transaction_callbacks_test.rb +1089 -0
  494. data/test/cases/transaction_instrumentation_test.rb +453 -0
  495. data/test/cases/transaction_isolation_test.rb +110 -0
  496. data/test/cases/transactions_test.rb +1802 -0
  497. data/test/cases/type/adapter_specific_registry_test.rb +145 -0
  498. data/test/cases/type/date_time_test.rb +22 -0
  499. data/test/cases/type/integer_test.rb +29 -0
  500. data/test/cases/type/string_test.rb +24 -0
  501. data/test/cases/type/time_test.rb +37 -0
  502. data/test/cases/type/type_map_test.rb +213 -0
  503. data/test/cases/type/unsigned_integer_test.rb +31 -0
  504. data/test/cases/type_caster/connection_test.rb +19 -0
  505. data/test/cases/type_test.rb +41 -0
  506. data/test/cases/types_test.rb +26 -0
  507. data/test/cases/unconnected_test.rb +46 -0
  508. data/test/cases/unsafe_raw_sql_test.rb +305 -0
  509. data/test/cases/validations/absence_validation_test.rb +75 -0
  510. data/test/cases/validations/association_validation_test.rb +121 -0
  511. data/test/cases/validations/i18n_generate_message_validation_test.rb +102 -0
  512. data/test/cases/validations/i18n_validation_test.rb +87 -0
  513. data/test/cases/validations/length_validation_test.rb +80 -0
  514. data/test/cases/validations/numericality_validation_test.rb +175 -0
  515. data/test/cases/validations/presence_validation_test.rb +105 -0
  516. data/test/cases/validations/uniqueness_validation_test.rb +858 -0
  517. data/test/cases/validations_repair_helper.rb +21 -0
  518. data/test/cases/validations_test.rb +229 -0
  519. data/test/cases/view_test.rb +233 -0
  520. data/test/cases/yaml_serialization_test.rb +172 -0
  521. data/test/config.example.yml +99 -0
  522. data/test/config.rb +8 -0
  523. data/test/config.yml +220 -0
  524. data/test/connections/native_ibm_db/connection.rb +44 -0
  525. data/test/fixtures/1_need_quoting.yml +2 -0
  526. data/test/fixtures/accounts.yml +34 -0
  527. data/test/fixtures/admin/accounts.yml +2 -0
  528. data/test/fixtures/admin/randomly_named_a9.yml +7 -0
  529. data/test/fixtures/admin/randomly_named_b0.yml +7 -0
  530. data/test/fixtures/admin/users.yml +10 -0
  531. data/test/fixtures/aircrafts.yml +7 -0
  532. data/test/fixtures/all/admin +1 -0
  533. data/test/fixtures/all/developers.yml +0 -0
  534. data/test/fixtures/all/namespaced/accounts.yml +2 -0
  535. data/test/fixtures/all/people.yml +0 -0
  536. data/test/fixtures/all/tasks.yml +0 -0
  537. data/test/fixtures/author_addresses.yml +11 -0
  538. data/test/fixtures/author_favorites.yml +4 -0
  539. data/test/fixtures/authors.yml +17 -0
  540. data/test/fixtures/bad_posts.yml +9 -0
  541. data/test/fixtures/binaries.yml +137 -0
  542. data/test/fixtures/book_identifiers.yml +11 -0
  543. data/test/fixtures/books.yml +39 -0
  544. data/test/fixtures/bulbs.yml +5 -0
  545. data/test/fixtures/cake_designers.yml +5 -0
  546. data/test/fixtures/cars.yml +15 -0
  547. data/test/fixtures/categories/special_categories.yml +9 -0
  548. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -0
  549. data/test/fixtures/categories.yml +19 -0
  550. data/test/fixtures/categories_ordered.yml +7 -0
  551. data/test/fixtures/categories_posts.yml +34 -0
  552. data/test/fixtures/categorizations.yml +23 -0
  553. data/test/fixtures/chefs.yml +5 -0
  554. data/test/fixtures/citations.yml +5 -0
  555. data/test/fixtures/clothing_items.yml +23 -0
  556. data/test/fixtures/clubs.yml +8 -0
  557. data/test/fixtures/collections.yml +3 -0
  558. data/test/fixtures/colleges.yml +3 -0
  559. data/test/fixtures/comments.yml +73 -0
  560. data/test/fixtures/companies.yml +72 -0
  561. data/test/fixtures/computers.yml +12 -0
  562. data/test/fixtures/content.yml +3 -0
  563. data/test/fixtures/content_positions.yml +3 -0
  564. data/test/fixtures/courses.yml +8 -0
  565. data/test/fixtures/cpk_authors.yml +8 -0
  566. data/test/fixtures/cpk_books.yml +21 -0
  567. data/test/fixtures/cpk_order_agreements.yml +13 -0
  568. data/test/fixtures/cpk_order_tags.yml +15 -0
  569. data/test/fixtures/cpk_orders.yml +11 -0
  570. data/test/fixtures/cpk_posts.yml +12 -0
  571. data/test/fixtures/cpk_reviews.yml +13 -0
  572. data/test/fixtures/cpk_tags.yml +11 -0
  573. data/test/fixtures/customers.yml +35 -0
  574. data/test/fixtures/dashboards.yml +6 -0
  575. data/test/fixtures/dead_parrots.yml +5 -0
  576. data/test/fixtures/developers.yml +22 -0
  577. data/test/fixtures/developers_projects.yml +17 -0
  578. data/test/fixtures/dog_lovers.yml +7 -0
  579. data/test/fixtures/dogs.yml +4 -0
  580. data/test/fixtures/doubloons.yml +3 -0
  581. data/test/fixtures/drink_designers.yml +5 -0
  582. data/test/fixtures/edges.yml +5 -0
  583. data/test/fixtures/encrypted_book_that_ignores_cases.yml +4 -0
  584. data/test/fixtures/encrypted_books.yml +4 -0
  585. data/test/fixtures/entrants.yml +14 -0
  586. data/test/fixtures/essays.yml +16 -0
  587. data/test/fixtures/faces.yml +11 -0
  588. data/test/fixtures/fk_object_to_point_to.yml +2 -0
  589. data/test/fixtures/fk_test_has_fk.yml +3 -0
  590. data/test/fixtures/fk_test_has_pk.yml +2 -0
  591. data/test/fixtures/friendships.yml +4 -0
  592. data/test/fixtures/funny_jokes.yml +10 -0
  593. data/test/fixtures/humans.yml +5 -0
  594. data/test/fixtures/interests.yml +33 -0
  595. data/test/fixtures/items.yml +3 -0
  596. data/test/fixtures/jobs.yml +7 -0
  597. data/test/fixtures/legacy_things.yml +3 -0
  598. data/test/fixtures/live_parrots.yml +4 -0
  599. data/test/fixtures/mateys.yml +4 -0
  600. data/test/fixtures/member_details.yml +8 -0
  601. data/test/fixtures/member_types.yml +6 -0
  602. data/test/fixtures/members.yml +11 -0
  603. data/test/fixtures/memberships.yml +41 -0
  604. data/test/fixtures/men.yml +5 -0
  605. data/test/fixtures/minimalistics.yml +5 -0
  606. data/test/fixtures/minivans.yml +5 -0
  607. data/test/fixtures/mixed_case_monkeys.yml +6 -0
  608. data/test/fixtures/mixins.yml +29 -0
  609. data/test/fixtures/movies.yml +7 -0
  610. data/test/fixtures/naked/yml/accounts.yml +1 -0
  611. data/test/fixtures/naked/yml/companies.yml +1 -0
  612. data/test/fixtures/naked/yml/courses.yml +1 -0
  613. data/test/fixtures/naked/yml/courses_with_invalid_key.yml +3 -0
  614. data/test/fixtures/naked/yml/parrots.yml +3 -0
  615. data/test/fixtures/naked/yml/trees.yml +3 -0
  616. data/test/fixtures/nodes.yml +29 -0
  617. data/test/fixtures/organizations.yml +5 -0
  618. data/test/fixtures/other_books.yml +26 -0
  619. data/test/fixtures/other_comments.yml +6 -0
  620. data/test/fixtures/other_dogs.yml +2 -0
  621. data/test/fixtures/other_posts.yml +8 -0
  622. data/test/fixtures/other_topics.yml +42 -0
  623. data/test/fixtures/owners.yml +9 -0
  624. data/test/fixtures/paragraphs.yml +5 -0
  625. data/test/fixtures/parrots.yml +37 -0
  626. data/test/fixtures/parrots_pirates.yml +7 -0
  627. data/test/fixtures/people.yml +26 -0
  628. data/test/fixtures/peoples_treasures.yml +3 -0
  629. data/test/fixtures/pets.yml +19 -0
  630. data/test/fixtures/pirates.yml +15 -0
  631. data/test/fixtures/posts.yml +88 -0
  632. data/test/fixtures/price_estimates.yml +16 -0
  633. data/test/fixtures/primary_key_error/primary_key_error.yml +6 -0
  634. data/test/fixtures/products.yml +4 -0
  635. data/test/fixtures/projects.yml +7 -0
  636. data/test/fixtures/randomly_named_a9.yml +7 -0
  637. data/test/fixtures/ratings.yml +14 -0
  638. data/test/fixtures/readers.yml +17 -0
  639. data/test/fixtures/references.yml +17 -0
  640. data/test/fixtures/reserved_words/distinct.yml +5 -0
  641. data/test/fixtures/reserved_words/distinct_select.yml +11 -0
  642. data/test/fixtures/reserved_words/group.yml +14 -0
  643. data/test/fixtures/reserved_words/select.yml +8 -0
  644. data/test/fixtures/reserved_words/values.yml +7 -0
  645. data/test/fixtures/sharded_blog_posts.yml +14 -0
  646. data/test/fixtures/sharded_blog_posts_tags.yml +27 -0
  647. data/test/fixtures/sharded_blogs.yml +8 -0
  648. data/test/fixtures/sharded_comments.yml +22 -0
  649. data/test/fixtures/sharded_tags.yml +34 -0
  650. data/test/fixtures/ships.yml +6 -0
  651. data/test/fixtures/speedometers.yml +8 -0
  652. data/test/fixtures/sponsors.yml +15 -0
  653. data/test/fixtures/strict_zines.yml +2 -0
  654. data/test/fixtures/string_key_objects.yml +7 -0
  655. data/test/fixtures/subscribers.yml +11 -0
  656. data/test/fixtures/subscriptions.yml +12 -0
  657. data/test/fixtures/taggings.yml +78 -0
  658. data/test/fixtures/tags.yml +11 -0
  659. data/test/fixtures/tasks.yml +7 -0
  660. data/test/fixtures/teapots.yml +3 -0
  661. data/test/fixtures/to_be_linked/accounts.yml +2 -0
  662. data/test/fixtures/to_be_linked/users.yml +10 -0
  663. data/test/fixtures/topics.yml +50 -0
  664. data/test/fixtures/toys.yml +14 -0
  665. data/test/fixtures/traffic_lights.yml +10 -0
  666. data/test/fixtures/treasures.yml +14 -0
  667. data/test/fixtures/trees.yml +3 -0
  668. data/test/fixtures/uuid_children.yml +3 -0
  669. data/test/fixtures/uuid_parents.yml +2 -0
  670. data/test/fixtures/variants.yml +4 -0
  671. data/test/fixtures/vegetables.yml +20 -0
  672. data/test/fixtures/vertices.yml +4 -0
  673. data/test/fixtures/virtual_columns.yml +5 -0
  674. data/test/fixtures/warehouse-things.yml +3 -0
  675. data/test/fixtures/warehouse_things.yml +3 -0
  676. data/test/fixtures/zines.yml +5 -0
  677. data/test/ibm_db_test.rb +25 -0
  678. data/test/migrations/10_urban/9_add_expressions.rb +13 -0
  679. data/test/migrations/decimal/1_give_me_big_numbers.rb +17 -0
  680. data/test/migrations/magic/1_currencies_have_symbols.rb +13 -0
  681. data/test/migrations/missing/1000_people_have_middle_names.rb +11 -0
  682. data/test/migrations/missing/1_people_have_last_names.rb +11 -0
  683. data/test/migrations/missing/3_we_need_reminders.rb +14 -0
  684. data/test/migrations/missing/4_innocent_jointable.rb +14 -0
  685. data/test/migrations/old_and_new_versions/20210716122844_add_people_description.rb +5 -0
  686. data/test/migrations/old_and_new_versions/20210716123013_add_people_number_of_legs.rb +5 -0
  687. data/test/migrations/old_and_new_versions/230_add_people_hobby.rb +5 -0
  688. data/test/migrations/old_and_new_versions/231_add_people_last_name.rb +5 -0
  689. data/test/migrations/rename/1_we_need_things.rb +13 -0
  690. data/test/migrations/rename/2_rename_things.rb +11 -0
  691. data/test/migrations/scope/1_unscoped.rb +7 -0
  692. data/test/migrations/scope/2_mysql_only.mysql.rb +7 -0
  693. data/test/migrations/to_copy/1_people_have_hobbies.rb +11 -0
  694. data/test/migrations/to_copy/2_people_have_descriptions.rb +11 -0
  695. data/test/migrations/to_copy2/1_create_articles.rb +9 -0
  696. data/test/migrations/to_copy2/2_create_comments.rb +9 -0
  697. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +11 -0
  698. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +11 -0
  699. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +11 -0
  700. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +9 -0
  701. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +9 -0
  702. data/test/migrations/valid/1_valid_people_have_last_names.rb +11 -0
  703. data/test/migrations/valid/2_we_need_reminders.rb +14 -0
  704. data/test/migrations/valid/3_innocent_jointable.rb +14 -0
  705. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +11 -0
  706. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +14 -0
  707. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +14 -0
  708. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +11 -0
  709. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +14 -0
  710. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +14 -0
  711. data/test/migrations/version_check/20131219224947_migration_version_check.rb +10 -0
  712. data/test/models/account.rb +46 -0
  713. data/test/models/admin/account.rb +5 -0
  714. data/test/models/admin/randomly_named_c1.rb +9 -0
  715. data/test/models/admin/user.rb +50 -0
  716. data/test/models/admin/user_json.rb +48 -0
  717. data/test/models/admin.rb +7 -0
  718. data/test/models/aircraft.rb +7 -0
  719. data/test/models/arunit2_model.rb +5 -0
  720. data/test/models/attachment.rb +7 -0
  721. data/test/models/author.rb +327 -0
  722. data/test/models/author_encrypted.rb +16 -0
  723. data/test/models/auto_id.rb +6 -0
  724. data/test/models/autoloadable/extra_firm.rb +4 -0
  725. data/test/models/binary.rb +4 -0
  726. data/test/models/binary_field.rb +6 -0
  727. data/test/models/bird.rb +24 -0
  728. data/test/models/book.rb +40 -0
  729. data/test/models/book_destroy_async.rb +24 -0
  730. data/test/models/book_encrypted.rb +106 -0
  731. data/test/models/book_identifier.rb +5 -0
  732. data/test/models/boolean.rb +7 -0
  733. data/test/models/branch.rb +11 -0
  734. data/test/models/bulb.rb +61 -0
  735. data/test/models/cake_designer.rb +5 -0
  736. data/test/models/car.rb +43 -0
  737. data/test/models/carrier.rb +4 -0
  738. data/test/models/cart.rb +5 -0
  739. data/test/models/cat.rb +12 -0
  740. data/test/models/categorization.rb +21 -0
  741. data/test/models/category.rb +49 -0
  742. data/test/models/chat_message.rb +8 -0
  743. data/test/models/chef.rb +62 -0
  744. data/test/models/citation.rb +7 -0
  745. data/test/models/clothing_item.rb +12 -0
  746. data/test/models/club.rb +31 -0
  747. data/test/models/college.rb +12 -0
  748. data/test/models/column.rb +5 -0
  749. data/test/models/column_name.rb +5 -0
  750. data/test/models/comment.rb +101 -0
  751. data/test/models/comment_overlapping_counter_cache.rb +15 -0
  752. data/test/models/company.rb +240 -0
  753. data/test/models/company_in_module.rb +99 -0
  754. data/test/models/computer.rb +6 -0
  755. data/test/models/contact.rb +43 -0
  756. data/test/models/content.rb +42 -0
  757. data/test/models/contract.rb +42 -0
  758. data/test/models/country.rb +5 -0
  759. data/test/models/course.rb +8 -0
  760. data/test/models/cpk/author.rb +9 -0
  761. data/test/models/cpk/book.rb +55 -0
  762. data/test/models/cpk/book_destroy_async.rb +9 -0
  763. data/test/models/cpk/car.rb +9 -0
  764. data/test/models/cpk/car_review.rb +9 -0
  765. data/test/models/cpk/chapter.rb +16 -0
  766. data/test/models/cpk/chapter_destroy_async.rb +10 -0
  767. data/test/models/cpk/comment.rb +9 -0
  768. data/test/models/cpk/order.rb +55 -0
  769. data/test/models/cpk/order_agreement.rb +10 -0
  770. data/test/models/cpk/order_tag.rb +10 -0
  771. data/test/models/cpk/post.rb +10 -0
  772. data/test/models/cpk/posts_tag.rb +10 -0
  773. data/test/models/cpk/review.rb +9 -0
  774. data/test/models/cpk/tag.rb +10 -0
  775. data/test/models/cpk.rb +15 -0
  776. data/test/models/customer.rb +87 -0
  777. data/test/models/customer_carrier.rb +16 -0
  778. data/test/models/dashboard.rb +5 -0
  779. data/test/models/default.rb +4 -0
  780. data/test/models/department.rb +6 -0
  781. data/test/models/destroy_async_parent.rb +15 -0
  782. data/test/models/destroy_async_parent_soft_delete.rb +20 -0
  783. data/test/models/developer.rb +382 -0
  784. data/test/models/discount.rb +4 -0
  785. data/test/models/dl_keyed_belongs_to.rb +13 -0
  786. data/test/models/dl_keyed_belongs_to_soft_delete.rb +19 -0
  787. data/test/models/dl_keyed_has_many.rb +5 -0
  788. data/test/models/dl_keyed_has_many_through.rb +5 -0
  789. data/test/models/dl_keyed_has_one.rb +5 -0
  790. data/test/models/dl_keyed_join.rb +10 -0
  791. data/test/models/dog.rb +7 -0
  792. data/test/models/dog_lover.rb +7 -0
  793. data/test/models/doubloon.rb +14 -0
  794. data/test/models/drink_designer.rb +21 -0
  795. data/test/models/edge.rb +7 -0
  796. data/test/models/editor.rb +8 -0
  797. data/test/models/editorship.rb +6 -0
  798. data/test/models/electron.rb +7 -0
  799. data/test/models/engine.rb +5 -0
  800. data/test/models/entrant.rb +5 -0
  801. data/test/models/entry.rb +10 -0
  802. data/test/models/essay.rb +13 -0
  803. data/test/models/essay_destroy_async.rb +13 -0
  804. data/test/models/event.rb +5 -0
  805. data/test/models/eye.rb +105 -0
  806. data/test/models/face.rb +17 -0
  807. data/test/models/family.rb +6 -0
  808. data/test/models/family_tree.rb +6 -0
  809. data/test/models/friendship.rb +11 -0
  810. data/test/models/frog.rb +8 -0
  811. data/test/models/guid.rb +4 -0
  812. data/test/models/guitar.rb +6 -0
  813. data/test/models/hardback.rb +7 -0
  814. data/test/models/hotel.rb +15 -0
  815. data/test/models/human.rb +39 -0
  816. data/test/models/image.rb +5 -0
  817. data/test/models/interest.rb +16 -0
  818. data/test/models/invoice.rb +7 -0
  819. data/test/models/invokes_an_undefined_method.rb +5 -0
  820. data/test/models/item.rb +9 -0
  821. data/test/models/job.rb +9 -0
  822. data/test/models/joke.rb +9 -0
  823. data/test/models/keyboard.rb +5 -0
  824. data/test/models/legacy_thing.rb +5 -0
  825. data/test/models/lesson.rb +13 -0
  826. data/test/models/line_item.rb +11 -0
  827. data/test/models/liquid.rb +6 -0
  828. data/test/models/man.rb +11 -0
  829. data/test/models/matey.rb +6 -0
  830. data/test/models/measurement.rb +4 -0
  831. data/test/models/member.rb +50 -0
  832. data/test/models/member_detail.rb +11 -0
  833. data/test/models/member_type.rb +5 -0
  834. data/test/models/membership.rb +38 -0
  835. data/test/models/mentor.rb +5 -0
  836. data/test/models/message.rb +6 -0
  837. data/test/models/minimalistic.rb +4 -0
  838. data/test/models/minivan.rb +10 -0
  839. data/test/models/mixed_case_monkey.rb +5 -0
  840. data/test/models/mocktail_designer.rb +2 -0
  841. data/test/models/molecule.rb +8 -0
  842. data/test/models/mouse.rb +6 -0
  843. data/test/models/movie.rb +7 -0
  844. data/test/models/need_quoting.rb +5 -0
  845. data/test/models/node.rb +7 -0
  846. data/test/models/non_primary_key.rb +4 -0
  847. data/test/models/notification.rb +5 -0
  848. data/test/models/numeric_data.rb +12 -0
  849. data/test/models/order.rb +6 -0
  850. data/test/models/organization.rb +16 -0
  851. data/test/models/other_dog.rb +7 -0
  852. data/test/models/owner.rb +39 -0
  853. data/test/models/paragraph.rb +5 -0
  854. data/test/models/parrot.rb +39 -0
  855. data/test/models/person.rb +150 -0
  856. data/test/models/personal_legacy_thing.rb +6 -0
  857. data/test/models/pet.rb +20 -0
  858. data/test/models/pet_treasure.rb +8 -0
  859. data/test/models/pirate.rb +119 -0
  860. data/test/models/pk_autopopulated_by_a_trigger_record.rb +5 -0
  861. data/test/models/possession.rb +5 -0
  862. data/test/models/post.rb +434 -0
  863. data/test/models/post_encrypted.rb +15 -0
  864. data/test/models/post_with_prefetched_pk.rb +15 -0
  865. data/test/models/price_estimate.rb +14 -0
  866. data/test/models/professor.rb +7 -0
  867. data/test/models/project.rb +43 -0
  868. data/test/models/publication.rb +16 -0
  869. data/test/models/publisher/article.rb +6 -0
  870. data/test/models/publisher/magazine.rb +5 -0
  871. data/test/models/publisher.rb +4 -0
  872. data/test/models/raises_argument_error.rb +5 -0
  873. data/test/models/raises_no_method_error.rb +5 -0
  874. data/test/models/randomly_named_c1.rb +5 -0
  875. data/test/models/rating.rb +8 -0
  876. data/test/models/reader.rb +25 -0
  877. data/test/models/recipe.rb +5 -0
  878. data/test/models/recipient.rb +5 -0
  879. data/test/models/record.rb +4 -0
  880. data/test/models/reference.rb +25 -0
  881. data/test/models/reply.rb +79 -0
  882. data/test/models/room.rb +9 -0
  883. data/test/models/section.rb +6 -0
  884. data/test/models/seminar.rb +6 -0
  885. data/test/models/session.rb +6 -0
  886. data/test/models/sharded/blog.rb +12 -0
  887. data/test/models/sharded/blog_post.rb +17 -0
  888. data/test/models/sharded/blog_post_destroy_async.rb +14 -0
  889. data/test/models/sharded/blog_post_tag.rb +11 -0
  890. data/test/models/sharded/blog_post_with_revision.rb +11 -0
  891. data/test/models/sharded/comment.rb +12 -0
  892. data/test/models/sharded/comment_destroy_async.rb +12 -0
  893. data/test/models/sharded/tag.rb +11 -0
  894. data/test/models/sharded.rb +8 -0
  895. data/test/models/ship.rb +42 -0
  896. data/test/models/ship_part.rb +10 -0
  897. data/test/models/shipping_line.rb +11 -0
  898. data/test/models/shop.rb +19 -0
  899. data/test/models/shop_account.rb +8 -0
  900. data/test/models/speedometer.rb +8 -0
  901. data/test/models/sponsor.rb +10 -0
  902. data/test/models/squeak.rb +6 -0
  903. data/test/models/strict_zine.rb +7 -0
  904. data/test/models/string_key_object.rb +5 -0
  905. data/test/models/student.rb +6 -0
  906. data/test/models/subject.rb +16 -0
  907. data/test/models/subscriber.rb +11 -0
  908. data/test/models/subscription.rb +10 -0
  909. data/test/models/tag.rb +16 -0
  910. data/test/models/tagging.rb +20 -0
  911. data/test/models/task.rb +7 -0
  912. data/test/models/too_long_table_name.rb +5 -0
  913. data/test/models/topic.rb +155 -0
  914. data/test/models/toy.rb +10 -0
  915. data/test/models/traffic_light.rb +6 -0
  916. data/test/models/traffic_light_encrypted.rb +21 -0
  917. data/test/models/translation.rb +9 -0
  918. data/test/models/treasure.rb +16 -0
  919. data/test/models/treaty.rb +5 -0
  920. data/test/models/tree.rb +5 -0
  921. data/test/models/tuning_peg.rb +6 -0
  922. data/test/models/tyre.rb +13 -0
  923. data/test/models/user.rb +38 -0
  924. data/test/models/user_with_invalid_relation.rb +28 -0
  925. data/test/models/uuid_child.rb +5 -0
  926. data/test/models/uuid_comment.rb +5 -0
  927. data/test/models/uuid_entry.rb +5 -0
  928. data/test/models/uuid_item.rb +8 -0
  929. data/test/models/uuid_message.rb +5 -0
  930. data/test/models/uuid_parent.rb +5 -0
  931. data/test/models/vegetables.rb +33 -0
  932. data/test/models/vehicle.rb +7 -0
  933. data/test/models/vertex.rb +11 -0
  934. data/test/models/warehouse_thing.rb +7 -0
  935. data/test/models/wheel.rb +5 -0
  936. data/test/models/without_table.rb +5 -0
  937. data/test/models/zine.rb +6 -0
  938. data/test/schema/i5/ibm_db_specific_schema.rb +137 -0
  939. data/test/schema/ids/ibm_db_specific_schema.rb +140 -0
  940. data/test/schema/luw/ibm_db_specific_schema.rb +137 -0
  941. data/test/schema/mysql2_specific_schema.rb +96 -0
  942. data/test/schema/oracle_specific_schema.rb +38 -0
  943. data/test/schema/postgresql_specific_schema.rb +233 -0
  944. data/test/schema/schema.rb +1495 -0
  945. data/test/schema/schema.rb.original +1057 -0
  946. data/test/schema/sqlite_specific_schema.rb +22 -0
  947. data/test/schema/trilogy_specific_schema.rb +96 -0
  948. data/test/schema/zOS/ibm_db_specific_schema.rb +208 -0
  949. data/test/support/adapter_helper.rb +104 -0
  950. data/test/support/async_helper.rb +15 -0
  951. data/test/support/config.rb +43 -0
  952. data/test/support/connection.rb +41 -0
  953. data/test/support/connection_helper.rb +16 -0
  954. data/test/support/ddl_helper.rb +10 -0
  955. data/test/support/fake_adapter.rb +42 -0
  956. data/test/support/load_schema_helper.rb +22 -0
  957. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic.dump +0 -0
  958. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic_associations.dump +0 -0
  959. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_1_topic.dump +0 -0
  960. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_1_topic_associations.dump +0 -0
  961. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_7_1_topic.dump +0 -0
  962. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_7_1_topic_associations.dump +0 -0
  963. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic.dump +0 -0
  964. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic_associations.dump +0 -0
  965. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_1_topic.dump +0 -0
  966. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_1_topic_associations.dump +0 -0
  967. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_7_1_topic.dump +0 -0
  968. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_7_1_topic_associations.dump +0 -0
  969. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic.dump +0 -0
  970. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic_associations.dump +0 -0
  971. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_1_topic.dump +0 -0
  972. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_1_topic_associations.dump +0 -0
  973. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_7_1_topic.dump +0 -0
  974. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_7_1_topic_associations.dump +0 -0
  975. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic.dump +0 -0
  976. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic_associations.dump +0 -0
  977. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_1_topic.dump +0 -0
  978. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_1_topic_associations.dump +0 -0
  979. data/test/support/marshal_compatibility_fixtures/SQLite/rails_7_1_topic.dump +0 -0
  980. data/test/support/marshal_compatibility_fixtures/SQLite/rails_7_1_topic_associations.dump +0 -0
  981. data/test/support/marshal_compatibility_fixtures/Trilogy/rails_6_1_topic.dump +0 -0
  982. data/test/support/marshal_compatibility_fixtures/Trilogy/rails_6_1_topic_associations.dump +0 -0
  983. data/test/support/marshal_compatibility_fixtures/Trilogy/rails_7_1_topic.dump +0 -0
  984. data/test/support/marshal_compatibility_fixtures/Trilogy/rails_7_1_topic_associations.dump +0 -0
  985. data/test/support/marshal_compatibility_fixtures/legacy_6_0_record_mysql.dump +0 -0
  986. data/test/support/marshal_compatibility_fixtures/legacy_relation.dump +0 -0
  987. data/test/support/schema_dumping_helper.rb +28 -0
  988. data/test/support/stubs/strong_parameters.rb +40 -0
  989. data/test/support/tools.rb +37 -0
  990. data/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -0
  991. data/test/support/yaml_compatibility_fixtures/rails_4_1_no_symbol.yml +22 -0
  992. data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -0
  993. data/test/support/yaml_compatibility_fixtures/rails_v1_mysql.yml +206 -0
  994. data/test/support/yaml_compatibility_fixtures/rails_v2.yml +55 -0
  995. metadata +1129 -0
@@ -0,0 +1,156 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "support/schema_dumping_helper"
5
+
6
+ class PostgresqlSerialTest < ActiveRecord::PostgreSQLTestCase
7
+ include SchemaDumpingHelper
8
+
9
+ class PostgresqlSerial < ActiveRecord::Base; end
10
+
11
+ setup do
12
+ @connection = ActiveRecord::Base.lease_connection
13
+ @connection.create_table "postgresql_serials", force: true do |t|
14
+ t.serial :seq
15
+ t.integer :serials_id, default: -> { "nextval('postgresql_serials_id_seq')" }
16
+ end
17
+ end
18
+
19
+ teardown do
20
+ @connection.drop_table "postgresql_serials", if_exists: true
21
+ end
22
+
23
+ def test_serial_column
24
+ column = PostgresqlSerial.columns_hash["seq"]
25
+ assert_equal :integer, column.type
26
+ assert_equal "integer", column.sql_type
27
+ assert_predicate column, :serial?
28
+ end
29
+
30
+ def test_not_serial_column
31
+ column = PostgresqlSerial.columns_hash["serials_id"]
32
+ assert_equal :integer, column.type
33
+ assert_equal "integer", column.sql_type
34
+ assert_not_predicate column, :serial?
35
+ end
36
+
37
+ def test_schema_dump_with_shorthand
38
+ output = dump_table_schema "postgresql_serials"
39
+ assert_match %r{t\.serial\s+"seq",\s+null: false$}, output
40
+ end
41
+
42
+ def test_schema_dump_with_not_serial
43
+ output = dump_table_schema "postgresql_serials"
44
+ assert_match %r{t\.integer\s+"serials_id",\s+default: -> \{ "nextval\('postgresql_serials_id_seq'::regclass\)" \}$}, output
45
+ end
46
+ end
47
+
48
+ class PostgresqlBigSerialTest < ActiveRecord::PostgreSQLTestCase
49
+ include SchemaDumpingHelper
50
+
51
+ class PostgresqlBigSerial < ActiveRecord::Base; end
52
+
53
+ setup do
54
+ @connection = ActiveRecord::Base.lease_connection
55
+ @connection.create_table "postgresql_big_serials", force: true do |t|
56
+ t.bigserial :seq
57
+ t.bigint :serials_id, default: -> { "nextval('postgresql_big_serials_id_seq')" }
58
+ end
59
+ end
60
+
61
+ teardown do
62
+ @connection.drop_table "postgresql_big_serials", if_exists: true
63
+ end
64
+
65
+ def test_bigserial_column
66
+ column = PostgresqlBigSerial.columns_hash["seq"]
67
+ assert_equal :integer, column.type
68
+ assert_equal "bigint", column.sql_type
69
+ assert_predicate column, :serial?
70
+ end
71
+
72
+ def test_not_bigserial_column
73
+ column = PostgresqlBigSerial.columns_hash["serials_id"]
74
+ assert_equal :integer, column.type
75
+ assert_equal "bigint", column.sql_type
76
+ assert_not_predicate column, :serial?
77
+ end
78
+
79
+ def test_schema_dump_with_shorthand
80
+ output = dump_table_schema "postgresql_big_serials"
81
+ assert_match %r{t\.bigserial\s+"seq",\s+null: false$}, output
82
+ end
83
+
84
+ def test_schema_dump_with_not_bigserial
85
+ output = dump_table_schema "postgresql_big_serials"
86
+ assert_match %r{t\.bigint\s+"serials_id",\s+default: -> \{ "nextval\('postgresql_big_serials_id_seq'::regclass\)" \}$}, output
87
+ end
88
+ end
89
+
90
+ module SequenceNameDetectionTestCases
91
+ class CollidedSequenceNameTest < ActiveRecord::PostgreSQLTestCase
92
+ include SchemaDumpingHelper
93
+
94
+ def setup
95
+ @connection = ActiveRecord::Base.lease_connection
96
+ @connection.create_table :foo_bar, force: true do |t|
97
+ t.serial :baz_id
98
+ end
99
+ @connection.create_table :foo, force: true do |t|
100
+ t.serial :bar_id
101
+ t.bigserial :bar_baz_id
102
+ end
103
+ end
104
+
105
+ def teardown
106
+ @connection.drop_table :foo_bar, if_exists: true
107
+ @connection.drop_table :foo, if_exists: true
108
+ end
109
+
110
+ def test_serial_columns
111
+ columns = @connection.columns(:foo)
112
+ columns.each do |column|
113
+ assert_equal :integer, column.type
114
+ assert_predicate column, :serial?
115
+ end
116
+ end
117
+
118
+ def test_schema_dump_with_collided_sequence_name
119
+ output = dump_table_schema "foo"
120
+ assert_match %r{t\.serial\s+"bar_id",\s+null: false$}, output
121
+ assert_match %r{t\.bigserial\s+"bar_baz_id",\s+null: false$}, output
122
+ end
123
+ end
124
+
125
+ class LongerSequenceNameDetectionTest < ActiveRecord::PostgreSQLTestCase
126
+ include SchemaDumpingHelper
127
+
128
+ def setup
129
+ @table_name = "long_table_name_to_test_sequence_name_detection_for_serial_cols"
130
+ @connection = ActiveRecord::Base.lease_connection
131
+ @connection.create_table @table_name, force: true, _uses_legacy_table_name: true do |t|
132
+ t.serial :seq
133
+ t.bigserial :bigseq
134
+ end
135
+ end
136
+
137
+ def teardown
138
+ @connection.drop_table @table_name, if_exists: true
139
+ end
140
+
141
+ def test_serial_columns
142
+ columns = @connection.columns(@table_name)
143
+ columns.each do |column|
144
+ assert_equal :integer, column.type
145
+ assert_predicate column, :serial?
146
+ end
147
+ end
148
+
149
+ def test_schema_dump_with_long_table_name
150
+ output = dump_table_schema @table_name
151
+ assert_match %r{create_table "#{@table_name}", force: :cascade}, output
152
+ assert_match %r{t\.serial\s+"seq",\s+null: false$}, output
153
+ assert_match %r{t\.bigserial\s+"bigseq",\s+null: false$}, output
154
+ end
155
+ end
156
+ end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "models/computer"
5
+ require "models/developer"
6
+
7
+ module ActiveRecord
8
+ module ConnectionAdapters
9
+ class PostgreSQLAdapter < AbstractAdapter
10
+ class InactivePgConnection
11
+ def initialize
12
+ @raw_connection = nil
13
+ end
14
+
15
+ def query(*args)
16
+ raise PG::Error
17
+ end
18
+
19
+ def status
20
+ PG::CONNECTION_BAD
21
+ end
22
+ end
23
+
24
+ class StatementPoolTest < ActiveRecord::PostgreSQLTestCase
25
+ fixtures :developers
26
+
27
+ if Process.respond_to?(:fork)
28
+ def test_cache_is_per_pid
29
+ cache = StatementPool.new nil, 10
30
+ cache["foo"] = "bar"
31
+ assert_equal "bar", cache["foo"]
32
+
33
+ pid = fork {
34
+ lookup = cache["foo"]
35
+ exit!(!lookup)
36
+ }
37
+
38
+ Process.waitpid pid
39
+ assert_predicate $?, :success?, "process should exit successfully"
40
+ end
41
+ end
42
+
43
+ def test_dealloc_does_not_raise_on_inactive_connection
44
+ cache = StatementPool.new InactivePgConnection.new, 10
45
+ cache["foo"] = "bar"
46
+ assert_nothing_raised { cache.clear }
47
+ end
48
+
49
+ def test_prepared_statements_do_not_get_stuck_on_query_interruption
50
+ pg_connection = ActiveRecord::Base.lease_connection.connect!.instance_variable_get(:@raw_connection)
51
+ pg_connection.stub(:get_last_result, -> { raise "random error" }) do
52
+ assert_raises(RuntimeError) do
53
+ Developer.where(name: "David").last
54
+ end
55
+
56
+ # without fix, this raises PG::DuplicatePstatement: ERROR: prepared statement "a3" already exists
57
+ assert_raises(RuntimeError) do
58
+ Developer.where(name: "David").last
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,209 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "models/developer"
5
+ require "models/topic"
6
+
7
+ class PostgresqlTimestampTest < ActiveRecord::PostgreSQLTestCase
8
+ class PostgresqlTimestampWithZone < ActiveRecord::Base; end
9
+
10
+ self.use_transactional_tests = false
11
+
12
+ setup do
13
+ @connection = ActiveRecord::Base.lease_connection
14
+ @connection.execute("INSERT INTO postgresql_timestamp_with_zones (id, time) VALUES (1, '2010-01-01 10:00:00-1')")
15
+ end
16
+
17
+ teardown do
18
+ PostgresqlTimestampWithZone.delete_all
19
+ end
20
+
21
+ def test_timestamp_with_zone_values_with_rails_time_zone_support_and_no_time_zone_set
22
+ with_timezone_config default: :utc, aware_attributes: true do
23
+ @connection.reconnect!
24
+
25
+ timestamp = PostgresqlTimestampWithZone.find(1)
26
+ assert_equal Time.utc(2010, 1, 1, 11, 0, 0), timestamp.time
27
+ assert_instance_of Time, timestamp.time
28
+ end
29
+ ensure
30
+ @connection.reconnect!
31
+ end
32
+
33
+ def test_timestamp_with_zone_values_without_rails_time_zone_support
34
+ with_timezone_config default: :local, aware_attributes: false do
35
+ @connection.reconnect!
36
+ # make sure to use a non-UTC time zone
37
+ @connection.execute("SET time zone 'America/Jamaica'", "SCHEMA")
38
+
39
+ timestamp = PostgresqlTimestampWithZone.find(1)
40
+ assert_equal Time.utc(2010, 1, 1, 11, 0, 0), timestamp.time
41
+ assert_instance_of Time, timestamp.time
42
+ end
43
+ ensure
44
+ @connection.reconnect!
45
+ end
46
+ end
47
+
48
+ class PostgresqlTimestampWithAwareTypesTest < ActiveRecord::PostgreSQLTestCase
49
+ class PostgresqlTimestampWithZone < ActiveRecord::Base; end
50
+
51
+ self.use_transactional_tests = false
52
+
53
+ setup do
54
+ @connection = ActiveRecord::Base.lease_connection
55
+ @connection.execute("INSERT INTO postgresql_timestamp_with_zones (id, time) VALUES (1, '2010-01-01 10:00:00-1')")
56
+ end
57
+
58
+ teardown do
59
+ PostgresqlTimestampWithZone.delete_all
60
+ end
61
+
62
+ def test_timestamp_with_zone_values_with_rails_time_zone_support_and_time_zone_set
63
+ with_timezone_config default: :utc, aware_attributes: true, zone: "Pacific Time (US & Canada)", aware_types: [:timestamptz, :datetime, :time] do
64
+ @connection.reconnect!
65
+
66
+ timestamp = PostgresqlTimestampWithZone.find(1)
67
+ assert_equal Time.utc(2010, 1, 1, 11, 0, 0), timestamp.time
68
+ assert_instance_of ActiveSupport::TimeWithZone, timestamp.time
69
+ end
70
+ ensure
71
+ @connection.reconnect!
72
+ end
73
+ end
74
+
75
+ class PostgresqlTimestampWithTimeZoneTest < ActiveRecord::PostgreSQLTestCase
76
+ class PostgresqlTimestampWithZone < ActiveRecord::Base; end
77
+
78
+ self.use_transactional_tests = false
79
+
80
+ setup do
81
+ with_postgresql_datetime_type(:timestamptz) do
82
+ @connection = ActiveRecord::Base.lease_connection
83
+ @connection.execute("INSERT INTO postgresql_timestamp_with_zones (id, time) VALUES (1, '2010-01-01 10:00:00-1')")
84
+ end
85
+ end
86
+
87
+ teardown do
88
+ PostgresqlTimestampWithZone.delete_all
89
+ end
90
+
91
+ def test_timestamp_with_zone_values_with_rails_time_zone_support_and_timestamptz_and_no_time_zone_set
92
+ with_postgresql_datetime_type(:timestamptz) do
93
+ with_timezone_config default: :utc, aware_attributes: true, aware_types: [:timestamptz, :datetime, :time] do
94
+ @connection.reconnect!
95
+
96
+ timestamp = PostgresqlTimestampWithZone.find(1)
97
+ assert_equal Time.utc(2010, 1, 1, 11, 0, 0), timestamp.time
98
+ assert_instance_of Time, timestamp.time
99
+ end
100
+ end
101
+ ensure
102
+ @connection.reconnect!
103
+ end
104
+
105
+ def test_timestamp_with_zone_values_with_rails_time_zone_support_and_timestamptz_and_time_zone_set
106
+ with_postgresql_datetime_type(:timestamptz) do
107
+ with_timezone_config default: :utc, aware_attributes: true, zone: "Pacific Time (US & Canada)", aware_types: [:timestamptz, :datetime, :time] do
108
+ @connection.reconnect!
109
+
110
+ timestamp = PostgresqlTimestampWithZone.find(1)
111
+ assert_equal Time.utc(2010, 1, 1, 11, 0, 0), timestamp.time
112
+ assert_instance_of ActiveSupport::TimeWithZone, timestamp.time
113
+ end
114
+ end
115
+ ensure
116
+ @connection.reconnect!
117
+ end
118
+ end
119
+
120
+ class PostgresqlTimestampFixtureTest < ActiveRecord::PostgreSQLTestCase
121
+ fixtures :topics
122
+
123
+ def test_group_by_date
124
+ keys = Topic.group("date_trunc('month', created_at)").count.keys
125
+ assert_operator keys.length, :>, 0
126
+ keys.each { |k| assert_kind_of Time, k }
127
+ end
128
+
129
+ def test_load_infinity_and_beyond
130
+ d = Developer.find_by_sql("select 'infinity'::timestamp as legacy_updated_at")
131
+ assert_predicate d.first.updated_at, :infinite?, "timestamp should be infinite"
132
+
133
+ d = Developer.find_by_sql("select '-infinity'::timestamp as legacy_updated_at")
134
+ time = d.first.updated_at
135
+ assert_predicate time, :infinite?, "timestamp should be infinite"
136
+ assert_operator time, :<, 0
137
+ end
138
+
139
+ def test_save_infinity_and_beyond
140
+ d = Developer.create!(name: "aaron", updated_at: 1.0 / 0.0)
141
+ assert_equal(1.0 / 0.0, d.updated_at)
142
+
143
+ d = Developer.create!(name: "aaron", updated_at: -1.0 / 0.0)
144
+ assert_equal(-1.0 / 0.0, d.updated_at)
145
+ end
146
+
147
+ def test_bc_timestamp
148
+ date = Time.new(0) - 1.week
149
+ Developer.create!(name: "aaron", updated_at: date)
150
+ assert_equal date, Developer.find_by_name("aaron").updated_at
151
+ end
152
+
153
+ def test_bc_timestamp_leap_year
154
+ date = Time.utc(-4, 2, 29)
155
+ Developer.create!(name: "taihou", updated_at: date)
156
+ assert_equal date, Developer.find_by_name("taihou").updated_at
157
+ end
158
+
159
+ def test_bc_timestamp_year_zero
160
+ date = Time.utc(0, 4, 7)
161
+ Developer.create!(name: "yahagi", updated_at: date)
162
+ assert_equal date, Developer.find_by_name("yahagi").updated_at
163
+ end
164
+ end
165
+
166
+ class PostgresqlTimestampMigrationTest < ActiveRecord::PostgreSQLTestCase
167
+ class PostgresqlTimestampWithZone < ActiveRecord::Base; end
168
+
169
+ def test_adds_column_as_timestamp
170
+ original, $stdout = $stdout, StringIO.new
171
+
172
+ ActiveRecord::Migration.new.add_column :postgresql_timestamp_with_zones, :times, :datetime
173
+
174
+ assert_equal({ "data_type" => "timestamp without time zone" },
175
+ PostgresqlTimestampWithZone.lease_connection.execute("select data_type from information_schema.columns where column_name = 'times'").to_a.first)
176
+ ensure
177
+ $stdout = original
178
+ end
179
+
180
+ def test_adds_column_as_timestamptz_if_datetime_type_changed
181
+ original, $stdout = $stdout, StringIO.new
182
+
183
+ with_postgresql_datetime_type(:timestamptz) do
184
+ ActiveRecord::Migration.new.add_column :postgresql_timestamp_with_zones, :times, :datetime
185
+
186
+ assert_equal({ "data_type" => "timestamp with time zone" },
187
+ PostgresqlTimestampWithZone.lease_connection.execute("select data_type from information_schema.columns where column_name = 'times'").to_a.first)
188
+ end
189
+ ensure
190
+ $stdout = original
191
+ end
192
+
193
+ def test_adds_column_as_custom_type
194
+ original, $stdout = $stdout, StringIO.new
195
+
196
+ PostgresqlTimestampWithZone.lease_connection.execute("CREATE TYPE custom_time_format AS ENUM ('past', 'present', 'future');")
197
+
198
+ ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:datetimes_as_enum] = { name: "custom_time_format" }
199
+ with_postgresql_datetime_type(:datetimes_as_enum) do
200
+ ActiveRecord::Migration.new.add_column :postgresql_timestamp_with_zones, :times, :datetime, precision: nil
201
+
202
+ assert_equal({ "data_type" => "USER-DEFINED", "udt_name" => "custom_time_format" },
203
+ PostgresqlTimestampWithZone.lease_connection.execute("select data_type, udt_name from information_schema.columns where column_name = 'times'").to_a.first)
204
+ end
205
+ ensure
206
+ ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::NATIVE_DATABASE_TYPES.delete(:datetimes_as_enum)
207
+ $stdout = original
208
+ end
209
+ end
@@ -0,0 +1,238 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "support/connection_helper"
5
+ require "concurrent/atomic/cyclic_barrier"
6
+
7
+ module ActiveRecord
8
+ class PostgresqlTransactionNestedTest < ActiveRecord::PostgreSQLTestCase
9
+ self.use_transactional_tests = false
10
+
11
+ class Sample < ActiveRecord::Base
12
+ self.table_name = "samples"
13
+ end
14
+ class Bit < ActiveRecord::Base
15
+ self.table_name = "bits"
16
+ end
17
+
18
+ setup do
19
+ @abort, Thread.abort_on_exception = Thread.abort_on_exception, false
20
+ Thread.report_on_exception, @original_report_on_exception = false, Thread.report_on_exception
21
+
22
+ connection = ActiveRecord::Base.lease_connection
23
+
24
+ connection.transaction do
25
+ connection.drop_table "samples", if_exists: true
26
+ connection.drop_table "bits", if_exists: true
27
+ connection.create_table("samples") do |t|
28
+ t.integer "value"
29
+ end
30
+ connection.create_table("bits") do |t|
31
+ t.integer "value"
32
+ end
33
+ end
34
+
35
+ Sample.reset_column_information
36
+ Bit.reset_column_information
37
+ end
38
+
39
+ teardown do
40
+ ActiveRecord::Base.lease_connection.drop_table "samples", if_exists: true
41
+ ActiveRecord::Base.lease_connection.drop_table "bits", if_exists: true
42
+
43
+ Thread.abort_on_exception = @abort
44
+ Thread.report_on_exception = @original_report_on_exception
45
+ end
46
+
47
+ test "unserializable transaction raises SerializationFailure inside nested SavepointTransaction" do
48
+ assert_raises(ActiveRecord::SerializationFailure) do
49
+ before = Concurrent::CyclicBarrier.new(2)
50
+ after = Concurrent::CyclicBarrier.new(2)
51
+
52
+ thread = Thread.new do
53
+ with_warning_suppression do
54
+ Sample.transaction(isolation: :serializable, requires_new: false) do
55
+ make_parent_transaction_dirty
56
+ Sample.transaction(requires_new: true) do
57
+ assert_current_transaction_is_savepoint_transaction
58
+ before.wait
59
+ Sample.create value: Sample.sum(:value)
60
+ after.wait
61
+ end
62
+ end
63
+ end
64
+ end
65
+
66
+ begin
67
+ with_warning_suppression do
68
+ Sample.transaction(isolation: :serializable, requires_new: false) do
69
+ make_parent_transaction_dirty
70
+ Sample.transaction(requires_new: true) do
71
+ assert_current_transaction_is_savepoint_transaction
72
+ before.wait
73
+ Sample.create value: Sample.sum(:value)
74
+ after.wait
75
+ end
76
+ end
77
+ end
78
+ ensure
79
+ thread.join
80
+ end
81
+ end
82
+ end
83
+
84
+ test "SerializationFailure inside nested SavepointTransaction is recoverable" do
85
+ start_right = Concurrent::Event.new
86
+ commit_left = Concurrent::Event.new
87
+ finish_right = Concurrent::Event.new
88
+ Sample.create value: 1
89
+
90
+ thread = Thread.new do
91
+ with_warning_suppression do
92
+ Sample.transaction(isolation: :serializable, requires_new: false) do
93
+ Sample.update_all value: 2
94
+ start_right.set
95
+ commit_left.wait(1)
96
+ end
97
+ finish_right.set
98
+ end
99
+ end
100
+
101
+ begin
102
+ with_warning_suppression do
103
+ start_right.wait
104
+ Sample.transaction(isolation: :serializable, requires_new: false) do
105
+ make_parent_transaction_dirty
106
+ assert_raises(ActiveRecord::SerializationFailure) do
107
+ Sample.transaction(requires_new: true) do
108
+ assert_current_transaction_is_savepoint_transaction
109
+ Sample.create value: 3
110
+ commit_left.set
111
+ finish_right.wait(2)
112
+ Sample.update_all value: 4
113
+ end
114
+ end
115
+ Bit.create value: 1
116
+ end
117
+ end
118
+ ensure
119
+ thread.join
120
+ end
121
+ assert_equal [2], Sample.pluck(:value)
122
+ assert_equal [1], Bit.pluck(:value)
123
+ end
124
+
125
+ test "deadlock raises Deadlocked inside nested SavepointTransaction" do
126
+ with_warning_suppression do
127
+ connections = Concurrent::Set.new
128
+ assert_raises(ActiveRecord::Deadlocked) do
129
+ barrier = Concurrent::CyclicBarrier.new(2)
130
+
131
+ s1 = Sample.create value: 1
132
+ s2 = Sample.create value: 2
133
+
134
+ thread = Thread.new do
135
+ connections.add Sample.lease_connection
136
+ Sample.transaction(requires_new: false) do
137
+ make_parent_transaction_dirty
138
+ Sample.transaction(requires_new: true) do
139
+ assert_current_transaction_is_savepoint_transaction
140
+ s1.lock!
141
+ barrier.wait
142
+ s2.update value: 1
143
+ end
144
+ end
145
+ end
146
+
147
+ begin
148
+ connections.add Sample.lease_connection
149
+ Sample.transaction(requires_new: false) do
150
+ make_parent_transaction_dirty
151
+ Sample.transaction(requires_new: true) do
152
+ assert_current_transaction_is_savepoint_transaction
153
+ s2.lock!
154
+ barrier.wait
155
+ s1.update value: 2
156
+ end
157
+ end
158
+ ensure
159
+ thread.join
160
+ end
161
+ end
162
+ assert connections.all?(&:active?)
163
+ end
164
+ end
165
+
166
+ test "deadlock inside nested SavepointTransaction is recoverable" do
167
+ with_warning_suppression do
168
+ barrier = Concurrent::CyclicBarrier.new(2)
169
+ deadlocks = 0
170
+
171
+ s1 = Sample.create value: 1
172
+ s2 = Sample.create value: 2
173
+
174
+ thread = Thread.new do
175
+ Sample.transaction(requires_new: false) do
176
+ make_parent_transaction_dirty
177
+ begin
178
+ Sample.transaction(requires_new: true) do
179
+ assert_current_transaction_is_savepoint_transaction
180
+ s1.lock!
181
+ barrier.wait
182
+ s2.update value: 4
183
+ end
184
+ rescue ActiveRecord::Deadlocked
185
+ deadlocks += 1
186
+ end
187
+ s2.update value: 10
188
+ end
189
+ end
190
+
191
+ begin
192
+ Sample.transaction(requires_new: false) do
193
+ make_parent_transaction_dirty
194
+ begin
195
+ Sample.transaction(requires_new: true) do
196
+ assert_current_transaction_is_savepoint_transaction
197
+ s2.lock!
198
+ barrier.wait
199
+ s1.update value: 3
200
+ end
201
+ rescue ActiveRecord::Deadlocked
202
+ deadlocks += 1
203
+ end
204
+ s1.update value: 10
205
+ end
206
+ ensure
207
+ thread.join
208
+ end
209
+ assert_equal 1, deadlocks
210
+ assert_equal [10, 10], Sample.pluck(:value)
211
+ end
212
+ end
213
+
214
+ private
215
+ def with_warning_suppression
216
+ log_level = ActiveRecord::Base.lease_connection.client_min_messages
217
+ ActiveRecord::Base.lease_connection.client_min_messages = "error"
218
+ yield
219
+ ensure
220
+ ActiveRecord::Base.connection_handler.clear_active_connections!(:all)
221
+ ActiveRecord::Base.lease_connection.client_min_messages = log_level
222
+ end
223
+
224
+ # These tests are coordinating a controlled sequence of accesses to rows in `samples` table under serializable isolation.
225
+ # We need to run a query to dirty our transaction, but must avoid touching `samples` rows
226
+ # because otherwise our no-op query becomes an active participant of the test setup
227
+ def make_parent_transaction_dirty
228
+ Bit.take
229
+ end
230
+
231
+ def assert_current_transaction_is_savepoint_transaction
232
+ current_transaction = Sample.lease_connection.current_transaction
233
+ unless current_transaction.is_a?(ActiveRecord::ConnectionAdapters::SavepointTransaction)
234
+ flunk("current transaction is not a savepoint transaction")
235
+ end
236
+ end
237
+ end
238
+ end