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,390 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "support/schema_dumping_helper"
5
+ require "support/stubs/strong_parameters"
6
+
7
+ class PostgresqlHstoreTest < ActiveRecord::PostgreSQLTestCase
8
+ include SchemaDumpingHelper
9
+ class Hstore < ActiveRecord::Base
10
+ self.table_name = "hstores"
11
+
12
+ store_accessor :settings, :language, :timezone
13
+ end
14
+
15
+ def setup
16
+ @connection = ActiveRecord::Base.connection
17
+
18
+ enable_extension!("hstore", @connection)
19
+
20
+ @connection.transaction do
21
+ @connection.create_table("hstores") do |t|
22
+ t.hstore "tags", default: ""
23
+ t.hstore "payload", array: true
24
+ t.hstore "settings"
25
+ end
26
+ end
27
+ Hstore.reset_column_information
28
+ @column = Hstore.columns_hash["tags"]
29
+ @type = Hstore.type_for_attribute("tags")
30
+ end
31
+
32
+ teardown do
33
+ @connection.drop_table "hstores", if_exists: true
34
+ disable_extension!("hstore", @connection)
35
+ end
36
+
37
+ def test_hstore_included_in_extensions
38
+ assert_respond_to @connection, :extensions
39
+ assert_includes @connection.extensions, "hstore", "extension list should include hstore"
40
+ end
41
+
42
+ def test_disable_enable_hstore
43
+ assert @connection.extension_enabled?("hstore")
44
+ @connection.disable_extension "hstore"
45
+ assert_not @connection.extension_enabled?("hstore")
46
+ @connection.enable_extension "hstore"
47
+ assert @connection.extension_enabled?("hstore")
48
+ ensure
49
+ # Restore column(s) dropped by `drop extension hstore cascade;`
50
+ load_schema
51
+ end
52
+
53
+ def test_column
54
+ assert_equal :hstore, @column.type
55
+ assert_equal "hstore", @column.sql_type
56
+ assert_not_predicate @column, :array?
57
+
58
+ assert_not_predicate @type, :binary?
59
+ end
60
+
61
+ def test_default
62
+ @connection.add_column "hstores", "permissions", :hstore, default: '"users"=>"read", "articles"=>"write"'
63
+ Hstore.reset_column_information
64
+
65
+ assert_equal({ "users" => "read", "articles" => "write" }, Hstore.column_defaults["permissions"])
66
+ assert_equal({ "users" => "read", "articles" => "write" }, Hstore.new.permissions)
67
+ ensure
68
+ Hstore.reset_column_information
69
+ end
70
+
71
+ def test_change_table_supports_hstore
72
+ @connection.transaction do
73
+ @connection.change_table("hstores") do |t|
74
+ t.hstore "users", default: ""
75
+ end
76
+ Hstore.reset_column_information
77
+ column = Hstore.columns_hash["users"]
78
+ assert_equal :hstore, column.type
79
+
80
+ raise ActiveRecord::Rollback # reset the schema change
81
+ end
82
+ ensure
83
+ Hstore.reset_column_information
84
+ end
85
+
86
+ def test_hstore_migration
87
+ hstore_migration = Class.new(ActiveRecord::Migration::Current) do
88
+ def change
89
+ change_table("hstores") do |t|
90
+ t.hstore :keys
91
+ end
92
+ end
93
+ end
94
+
95
+ hstore_migration.new.suppress_messages do
96
+ hstore_migration.migrate(:up)
97
+ assert_includes @connection.columns(:hstores).map(&:name), "keys"
98
+ hstore_migration.migrate(:down)
99
+ assert_not_includes @connection.columns(:hstores).map(&:name), "keys"
100
+ end
101
+ end
102
+
103
+ def test_cast_value_on_write
104
+ x = Hstore.new tags: { "bool" => true, "number" => 5 }
105
+ assert_equal({ "bool" => true, "number" => 5 }, x.tags_before_type_cast)
106
+ assert_equal({ "bool" => "true", "number" => "5" }, x.tags)
107
+ x.save
108
+ assert_equal({ "bool" => "true", "number" => "5" }, x.reload.tags)
109
+ end
110
+
111
+ def test_type_cast_hstore
112
+ assert_equal({ "1" => "2" }, @type.deserialize("\"1\"=>\"2\""))
113
+ assert_equal({}, @type.deserialize(""))
114
+ assert_equal({ "key" => nil }, @type.deserialize("key => NULL"))
115
+ assert_equal({ "c" => "}", '"a"' => 'b "a b' }, @type.deserialize(%q(c=>"}", "\"a\""=>"b \"a b")))
116
+ end
117
+
118
+ def test_with_store_accessors
119
+ x = Hstore.new(language: "fr", timezone: "GMT")
120
+ assert_equal "fr", x.language
121
+ assert_equal "GMT", x.timezone
122
+
123
+ x.save!
124
+ x = Hstore.first
125
+ assert_equal "fr", x.language
126
+ assert_equal "GMT", x.timezone
127
+
128
+ x.language = "de"
129
+ x.save!
130
+
131
+ x = Hstore.first
132
+ assert_equal "de", x.language
133
+ assert_equal "GMT", x.timezone
134
+ end
135
+
136
+ def test_duplication_with_store_accessors
137
+ x = Hstore.new(language: "fr", timezone: "GMT")
138
+ assert_equal "fr", x.language
139
+ assert_equal "GMT", x.timezone
140
+
141
+ y = x.dup
142
+ assert_equal "fr", y.language
143
+ assert_equal "GMT", y.timezone
144
+ end
145
+
146
+ def test_yaml_round_trip_with_store_accessors
147
+ x = Hstore.new(language: "fr", timezone: "GMT")
148
+ assert_equal "fr", x.language
149
+ assert_equal "GMT", x.timezone
150
+
151
+ payload = YAML.dump(x)
152
+ y = YAML.respond_to?(:unsafe_load) ? YAML.unsafe_load(payload) : YAML.load(payload)
153
+ assert_equal "fr", y.language
154
+ assert_equal "GMT", y.timezone
155
+ end
156
+
157
+ def test_changes_with_store_accessors
158
+ x = Hstore.new(language: "de")
159
+ assert x.language_changed?
160
+ assert_nil x.language_was
161
+ assert_equal [nil, "de"], x.language_change
162
+ x.save!
163
+
164
+ assert_not x.language_changed?
165
+ x.reload
166
+
167
+ x.settings = nil
168
+ assert x.language_changed?
169
+ assert_equal "de", x.language_was
170
+ assert_equal ["de", nil], x.language_change
171
+ end
172
+
173
+ def test_changes_in_place
174
+ hstore = Hstore.create!(settings: { "one" => "two" })
175
+ hstore.settings["three"] = "four"
176
+ hstore.save!
177
+ hstore.reload
178
+
179
+ assert_equal "four", hstore.settings["three"]
180
+ assert_not_predicate hstore, :changed?
181
+ end
182
+
183
+ def test_dirty_from_user_equal
184
+ settings = { "alongkey" => "anything", "key" => "value" }
185
+ hstore = Hstore.create!(settings: settings)
186
+
187
+ hstore.settings = { "key" => "value", "alongkey" => "anything" }
188
+ assert_equal settings, hstore.settings
189
+ assert_not_predicate hstore, :changed?
190
+ end
191
+
192
+ def test_hstore_dirty_from_database_equal
193
+ settings = { "alongkey" => "anything", "key" => "value" }
194
+ hstore = Hstore.create!(settings: settings)
195
+ hstore.reload
196
+
197
+ assert_equal settings, hstore.settings
198
+ hstore.settings = settings
199
+ assert_not_predicate hstore, :changed?
200
+ end
201
+
202
+ def test_gen1
203
+ assert_equal('" "=>""', @type.serialize(" " => ""))
204
+ end
205
+
206
+ def test_gen2
207
+ assert_equal('","=>""', @type.serialize("," => ""))
208
+ end
209
+
210
+ def test_gen3
211
+ assert_equal('"="=>""', @type.serialize("=" => ""))
212
+ end
213
+
214
+ def test_gen4
215
+ assert_equal('">"=>""', @type.serialize(">" => ""))
216
+ end
217
+
218
+ def test_parse1
219
+ assert_equal({ "a" => nil, "b" => nil, "c" => "NuLl", "null" => "c" }, @type.deserialize('a=>null,b=>NuLl,c=>"NuLl",null=>c'))
220
+ end
221
+
222
+ def test_parse2
223
+ assert_equal({ " " => " " }, @type.deserialize("\\ =>\\ "))
224
+ end
225
+
226
+ def test_parse3
227
+ assert_equal({ "=" => ">" }, @type.deserialize("==>>"))
228
+ end
229
+
230
+ def test_parse4
231
+ assert_equal({ "=a" => "q=w" }, @type.deserialize('\=a=>q=w'))
232
+ end
233
+
234
+ def test_parse5
235
+ assert_equal({ "=a" => "q=w" }, @type.deserialize('"=a"=>q\=w'))
236
+ end
237
+
238
+ def test_parse6
239
+ assert_equal({ "\"a" => "q>w" }, @type.deserialize('"\"a"=>q>w'))
240
+ end
241
+
242
+ def test_parse7
243
+ assert_equal({ "\"a" => "q\"w" }, @type.deserialize('\"a=>q"w'))
244
+ end
245
+
246
+ def test_rewrite
247
+ @connection.execute "insert into hstores (tags) VALUES ('1=>2')"
248
+ x = Hstore.first
249
+ x.tags = { '"a\'' => "b" }
250
+ assert x.save!
251
+ end
252
+
253
+ def test_select
254
+ @connection.execute "insert into hstores (tags) VALUES ('1=>2')"
255
+ x = Hstore.first
256
+ assert_equal({ "1" => "2" }, x.tags)
257
+ end
258
+
259
+ def test_array_cycle
260
+ assert_array_cycle([{ "AA" => "BB", "CC" => "DD" }, { "AA" => nil }])
261
+ end
262
+
263
+ def test_array_strings_with_quotes
264
+ assert_array_cycle([{ "this has" => 'some "s that need to be escaped"' }])
265
+ end
266
+
267
+ def test_array_strings_with_commas
268
+ assert_array_cycle([{ "this,has" => "many,values" }])
269
+ end
270
+
271
+ def test_array_strings_with_array_delimiters
272
+ assert_array_cycle(["{" => "}"])
273
+ end
274
+
275
+ def test_array_strings_with_null_strings
276
+ assert_array_cycle([{ "NULL" => "NULL" }])
277
+ end
278
+
279
+ def test_contains_nils
280
+ assert_array_cycle([{ "NULL" => nil }])
281
+ end
282
+
283
+ def test_select_multikey
284
+ @connection.execute "insert into hstores (tags) VALUES ('1=>2,2=>3')"
285
+ x = Hstore.first
286
+ assert_equal({ "1" => "2", "2" => "3" }, x.tags)
287
+ end
288
+
289
+ def test_create
290
+ assert_cycle("a" => "b", "1" => "2")
291
+ end
292
+
293
+ def test_nil
294
+ assert_cycle("a" => nil)
295
+ end
296
+
297
+ def test_quotes
298
+ assert_cycle("a" => 'b"ar', '1"foo' => "2")
299
+ end
300
+
301
+ def test_whitespace
302
+ assert_cycle("a b" => "b ar", '1"foo' => "2")
303
+ end
304
+
305
+ def test_backslash
306
+ assert_cycle('a\\b' => 'b\\ar', '1"foo' => "2")
307
+ end
308
+
309
+ def test_comma
310
+ assert_cycle("a, b" => "bar", '1"foo' => "2")
311
+ end
312
+
313
+ def test_arrow
314
+ assert_cycle("a=>b" => "bar", '1"foo' => "2")
315
+ end
316
+
317
+ def test_quoting_special_characters
318
+ assert_cycle("ca" => "cà", "ac" => "àc")
319
+ end
320
+
321
+ def test_multiline
322
+ assert_cycle("a\nb" => "c\nd")
323
+ end
324
+
325
+ class TagCollection
326
+ def initialize(hash); @hash = hash end
327
+ def to_hash; @hash end
328
+ def self.load(hash); new(hash) end
329
+ def self.dump(object); object.to_hash end
330
+ end
331
+
332
+ class HstoreWithSerialize < Hstore
333
+ serialize :tags, TagCollection
334
+ end
335
+
336
+ def test_hstore_with_serialized_attributes
337
+ HstoreWithSerialize.create! tags: TagCollection.new("one" => "two")
338
+ record = HstoreWithSerialize.first
339
+ assert_instance_of TagCollection, record.tags
340
+ assert_equal({ "one" => "two" }, record.tags.to_hash)
341
+ record.tags = TagCollection.new("three" => "four")
342
+ record.save!
343
+ assert_equal({ "three" => "four" }, HstoreWithSerialize.first.tags.to_hash)
344
+ end
345
+
346
+ def test_clone_hstore_with_serialized_attributes
347
+ HstoreWithSerialize.create! tags: TagCollection.new("one" => "two")
348
+ record = HstoreWithSerialize.first
349
+ dupe = record.dup
350
+ assert_equal({ "one" => "two" }, dupe.tags.to_hash)
351
+ end
352
+
353
+ def test_schema_dump_with_shorthand
354
+ output = dump_table_schema("hstores")
355
+ assert_match %r[t\.hstore "tags",\s+default: {}], output
356
+ end
357
+
358
+ def test_supports_to_unsafe_h_values
359
+ assert_equal "\"hi\"=>\"hi\"", @type.serialize(ProtectedParams.new("hi" => "hi"))
360
+ end
361
+
362
+ private
363
+ def assert_array_cycle(array)
364
+ # test creation
365
+ x = Hstore.create!(payload: array)
366
+ x.reload
367
+ assert_equal(array, x.payload)
368
+
369
+ # test updating
370
+ x = Hstore.create!(payload: [])
371
+ x.payload = array
372
+ x.save!
373
+ x.reload
374
+ assert_equal(array, x.payload)
375
+ end
376
+
377
+ def assert_cycle(hash)
378
+ # test creation
379
+ x = Hstore.create!(tags: hash)
380
+ x.reload
381
+ assert_equal(hash, x.tags)
382
+
383
+ # test updating
384
+ x = Hstore.create!(tags: {})
385
+ x.tags = hash
386
+ x.save!
387
+ x.reload
388
+ assert_equal(hash, x.tags)
389
+ end
390
+ end
@@ -0,0 +1,108 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+
5
+ class PostgresqlInfinityTest < ActiveRecord::PostgreSQLTestCase
6
+ include InTimeZone
7
+
8
+ class PostgresqlInfinity < ActiveRecord::Base
9
+ end
10
+
11
+ setup do
12
+ @connection = ActiveRecord::Base.connection
13
+ @connection.create_table(:postgresql_infinities) do |t|
14
+ t.float :float
15
+ t.datetime :datetime
16
+ t.date :date
17
+ end
18
+ end
19
+
20
+ teardown do
21
+ @connection.drop_table "postgresql_infinities", if_exists: true
22
+ end
23
+
24
+ test "type casting infinity on a float column" do
25
+ record = PostgresqlInfinity.create!(float: Float::INFINITY)
26
+ record.reload
27
+ assert_equal Float::INFINITY, record.float
28
+ end
29
+
30
+ test "type casting string on a float column" do
31
+ record = PostgresqlInfinity.new(float: "Infinity")
32
+ assert_equal Float::INFINITY, record.float
33
+ record = PostgresqlInfinity.new(float: "-Infinity")
34
+ assert_equal(-Float::INFINITY, record.float)
35
+ record = PostgresqlInfinity.new(float: "NaN")
36
+ assert record.float.nan?, "Expected #{record.float} to be NaN"
37
+ end
38
+
39
+ test "update_all with infinity on a float column" do
40
+ record = PostgresqlInfinity.create!
41
+ PostgresqlInfinity.update_all(float: Float::INFINITY)
42
+ record.reload
43
+ assert_equal Float::INFINITY, record.float
44
+ end
45
+
46
+ test "type casting infinity on a datetime column" do
47
+ record = PostgresqlInfinity.create!(datetime: "infinity")
48
+ record.reload
49
+ assert_equal Float::INFINITY, record.datetime
50
+
51
+ record = PostgresqlInfinity.create!(datetime: Float::INFINITY)
52
+ record.reload
53
+ assert_equal Float::INFINITY, record.datetime
54
+ end
55
+
56
+ test "type casting infinity on a date column" do
57
+ record = PostgresqlInfinity.create!(date: "infinity")
58
+ record.reload
59
+ assert_equal Float::INFINITY, record.date
60
+
61
+ record = PostgresqlInfinity.create!(date: Float::INFINITY)
62
+ record.reload
63
+ assert_equal Float::INFINITY, record.date
64
+ end
65
+
66
+ test "update_all with infinity on a datetime column" do
67
+ record = PostgresqlInfinity.create!
68
+ PostgresqlInfinity.update_all(datetime: Float::INFINITY)
69
+ record.reload
70
+ assert_equal Float::INFINITY, record.datetime
71
+ end
72
+
73
+ test "assigning 'infinity' on a datetime column with TZ aware attributes" do
74
+ in_time_zone "Pacific Time (US & Canada)" do
75
+ record = PostgresqlInfinity.create!(datetime: "infinity")
76
+ assert_equal Float::INFINITY, record.datetime
77
+ assert_equal record.datetime, record.reload.datetime
78
+ end
79
+ ensure
80
+ # setting time_zone_aware_attributes causes the types to change.
81
+ # There is no way to do this automatically since it can be set on a superclass
82
+ PostgresqlInfinity.reset_column_information
83
+ end
84
+
85
+ test "where clause with infinite range on a datetime column" do
86
+ record = PostgresqlInfinity.create!(datetime: Time.current)
87
+
88
+ string = PostgresqlInfinity.where(datetime: "-infinity".."infinity")
89
+ assert_equal record, string.take
90
+
91
+ infinity = PostgresqlInfinity.where(datetime: -::Float::INFINITY..::Float::INFINITY)
92
+ assert_equal record, infinity.take
93
+
94
+ assert_equal infinity.to_sql, string.to_sql
95
+ end
96
+
97
+ test "where clause with infinite range on a date column" do
98
+ record = PostgresqlInfinity.create!(date: Date.current)
99
+
100
+ string = PostgresqlInfinity.where(date: "-infinity".."infinity")
101
+ assert_equal record, string.take
102
+
103
+ infinity = PostgresqlInfinity.where(date: -::Float::INFINITY..::Float::INFINITY)
104
+ assert_equal record, infinity.take
105
+
106
+ assert_equal infinity.to_sql, string.to_sql
107
+ end
108
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "active_support/core_ext/numeric/bytes"
5
+
6
+ class PostgresqlIntegerTest < ActiveRecord::PostgreSQLTestCase
7
+ class PgInteger < ActiveRecord::Base
8
+ end
9
+
10
+ def setup
11
+ @connection = ActiveRecord::Base.connection
12
+
13
+ @connection.transaction do
14
+ @connection.create_table "pg_integers", force: true do |t|
15
+ t.integer :quota, limit: 8, default: 2.gigabytes
16
+ end
17
+ end
18
+ end
19
+
20
+ teardown do
21
+ @connection.drop_table "pg_integers", if_exists: true
22
+ end
23
+
24
+ test "schema properly respects bigint ranges" do
25
+ assert_equal 2.gigabytes, PgInteger.new.quota
26
+ end
27
+ end
@@ -0,0 +1,99 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "support/schema_dumping_helper"
5
+
6
+ class PostgresqlIntervalTest < ActiveRecord::PostgreSQLTestCase
7
+ include SchemaDumpingHelper
8
+
9
+ class IntervalDataType < ActiveRecord::Base
10
+ attribute :maximum_term, :interval
11
+ attribute :minimum_term, :interval, precision: 3
12
+ attribute :default_term, :interval
13
+ attribute :all_terms, :interval, array: true
14
+ attribute :legacy_term, :string
15
+ end
16
+
17
+ class DeprecatedIntervalDataType < ActiveRecord::Base; end
18
+
19
+ def setup
20
+ @connection = ActiveRecord::Base.connection
21
+ @connection.transaction do
22
+ @connection.create_table("interval_data_types") do |t|
23
+ t.interval "maximum_term"
24
+ t.interval "minimum_term", precision: 3
25
+ t.interval "default_term", default: "P3Y"
26
+ t.interval "all_terms", array: true
27
+ t.interval "legacy_term"
28
+ end
29
+ @connection.create_table("deprecated_interval_data_types") do |t|
30
+ t.interval "duration"
31
+ end
32
+ end
33
+ @column_max = IntervalDataType.columns_hash["maximum_term"]
34
+ @column_min = IntervalDataType.columns_hash["minimum_term"]
35
+ assert(@column_max.is_a?(ActiveRecord::ConnectionAdapters::PostgreSQLColumn))
36
+ assert(@column_min.is_a?(ActiveRecord::ConnectionAdapters::PostgreSQLColumn))
37
+ assert_nil @column_max.precision
38
+ assert_equal 3, @column_min.precision
39
+ end
40
+
41
+ teardown do
42
+ @connection.execute "DROP TABLE IF EXISTS interval_data_types"
43
+ @connection.execute "DROP TABLE IF EXISTS deprecated_interval_data_types"
44
+ end
45
+
46
+ def test_column
47
+ assert_equal :interval, @column_max.type
48
+ assert_equal :interval, @column_min.type
49
+ assert_equal "interval", @column_max.sql_type
50
+ assert_equal "interval(3)", @column_min.sql_type
51
+ end
52
+
53
+ def test_interval_type
54
+ IntervalDataType.create!(
55
+ maximum_term: 6.year + 5.month + 4.days + 3.hours + 2.minutes + 1.seconds,
56
+ minimum_term: 1.year + 2.month + 3.days + 4.hours + 5.minutes + (6.234567).seconds,
57
+ all_terms: [1.month, 1.year, 1.hour],
58
+ legacy_term: "33 years",
59
+ )
60
+ i = IntervalDataType.last!
61
+ assert_equal "P6Y5M4DT3H2M1S", i.maximum_term.iso8601
62
+ assert_equal "P1Y2M3DT4H5M6.235S", i.minimum_term.iso8601
63
+ assert_equal "P3Y", i.default_term.iso8601
64
+ assert_equal %w[ P1M P1Y PT1H ], i.all_terms.map(&:iso8601)
65
+ assert_equal "P33Y", i.legacy_term
66
+ end
67
+
68
+ def test_interval_type_cast_from_invalid_string
69
+ i = IntervalDataType.create!(maximum_term: "1 year 2 minutes")
70
+ i.reload
71
+ assert_nil i.maximum_term
72
+ end
73
+
74
+ def test_interval_type_cast_from_numeric
75
+ i = IntervalDataType.create!(minimum_term: 36000)
76
+ i.reload
77
+ assert_equal "PT10H", i.minimum_term.iso8601
78
+ end
79
+
80
+ def test_interval_type_cast_string_and_numeric_from_user
81
+ i = IntervalDataType.new(maximum_term: "P1YT2M", minimum_term: "PT10H", legacy_term: "P1DT1H")
82
+ assert i.maximum_term.is_a?(ActiveSupport::Duration)
83
+ assert i.legacy_term.is_a?(String)
84
+ assert_equal "P1YT2M", i.maximum_term.iso8601
85
+ assert_equal "PT10H", i.minimum_term.iso8601
86
+ assert_equal "P1DT1H", i.legacy_term
87
+ end
88
+
89
+ def test_deprecated_legacy_type
90
+ assert_deprecated do
91
+ DeprecatedIntervalDataType.new
92
+ end
93
+ end
94
+
95
+ def test_schema_dump_with_default_value
96
+ output = dump_table_schema "interval_data_types"
97
+ assert_match %r{t\.interval "default_term", default: "P3Y"}, output
98
+ end
99
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "cases/json_shared_test_cases"
5
+
6
+ module PostgresqlJSONSharedTestCases
7
+ include JSONSharedTestCases
8
+
9
+ def setup
10
+ super
11
+ @connection.create_table("json_data_type") do |t|
12
+ t.public_send column_type, "payload", default: {} # t.json 'payload', default: {}
13
+ t.public_send column_type, "settings" # t.json 'settings'
14
+ t.public_send column_type, "objects", array: true # t.json 'objects', array: true
15
+ end
16
+ rescue ActiveRecord::StatementInvalid
17
+ skip "do not test on PostgreSQL without #{column_type} type."
18
+ end
19
+
20
+ def test_default
21
+ @connection.add_column "json_data_type", "permissions", column_type, default: { "users": "read", "posts": ["read", "write"] }
22
+ klass.reset_column_information
23
+
24
+ assert_equal({ "users" => "read", "posts" => ["read", "write"] }, klass.column_defaults["permissions"])
25
+ assert_equal({ "users" => "read", "posts" => ["read", "write"] }, klass.new.permissions)
26
+ end
27
+
28
+ def test_deserialize_with_array
29
+ x = klass.new(objects: ["foo" => "bar"])
30
+ assert_equal ["foo" => "bar"], x.objects
31
+ x.save!
32
+ assert_equal ["foo" => "bar"], x.objects
33
+ x.reload
34
+ assert_equal ["foo" => "bar"], x.objects
35
+ end
36
+ end
37
+
38
+ class PostgresqlJSONTest < ActiveRecord::PostgreSQLTestCase
39
+ include PostgresqlJSONSharedTestCases
40
+
41
+ def column_type
42
+ :json
43
+ end
44
+ end
45
+
46
+ class PostgresqlJSONBTest < ActiveRecord::PostgreSQLTestCase
47
+ include PostgresqlJSONSharedTestCases
48
+
49
+ def column_type
50
+ :jsonb
51
+ end
52
+ end