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,628 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "models/owner"
5
+ require "tempfile"
6
+ require "support/ddl_helper"
7
+
8
+ module ActiveRecord
9
+ module ConnectionAdapters
10
+ class SQLite3AdapterTest < ActiveRecord::SQLite3TestCase
11
+ include DdlHelper
12
+
13
+ self.use_transactional_tests = false
14
+
15
+ class DualEncoding < ActiveRecord::Base
16
+ end
17
+
18
+ def setup
19
+ @conn = Base.sqlite3_connection database: ":memory:",
20
+ adapter: "sqlite3",
21
+ timeout: 100
22
+
23
+ @connection_handler = ActiveRecord::Base.connection_handler
24
+ end
25
+
26
+ def test_bad_connection
27
+ assert_raise ActiveRecord::NoDatabaseError do
28
+ connection = ActiveRecord::Base.sqlite3_connection(adapter: "sqlite3", database: "/tmp/should/_not/_exist/-cinco-dog.db")
29
+ connection.drop_table "ex", if_exists: true
30
+ end
31
+ end
32
+
33
+ def test_database_exists_returns_false_when_the_database_does_not_exist
34
+ assert_not SQLite3Adapter.database_exists?(adapter: "sqlite3", database: "non_extant_db"),
35
+ "expected non_extant_db to not exist"
36
+ end
37
+
38
+ def test_database_exists_returns_true_when_database_exists
39
+ db_config = ActiveRecord::Base.configurations.configs_for(env_name: "arunit", name: "primary")
40
+ assert SQLite3Adapter.database_exists?(db_config.configuration_hash),
41
+ "expected #{db_config.database} to exist"
42
+ end
43
+
44
+ unless in_memory_db?
45
+ def test_connect_with_url
46
+ original_connection = ActiveRecord::Base.remove_connection
47
+ tf = Tempfile.open "whatever"
48
+ url = "sqlite3:#{tf.path}"
49
+ ActiveRecord::Base.establish_connection(url)
50
+ assert ActiveRecord::Base.connection
51
+ ensure
52
+ tf.close
53
+ tf.unlink
54
+ ActiveRecord::Base.establish_connection(original_connection)
55
+ end
56
+
57
+ def test_connect_memory_with_url
58
+ original_connection = ActiveRecord::Base.remove_connection
59
+ url = "sqlite3::memory:"
60
+ ActiveRecord::Base.establish_connection(url)
61
+ assert ActiveRecord::Base.connection
62
+ ensure
63
+ ActiveRecord::Base.establish_connection(original_connection)
64
+ end
65
+ end
66
+
67
+ def test_database_exists_returns_true_for_an_in_memory_db
68
+ assert SQLite3Adapter.database_exists?(database: ":memory:"),
69
+ "Expected in memory database to exist"
70
+ end
71
+
72
+ def test_column_types
73
+ owner = Owner.create!(name: "hello".encode("ascii-8bit"))
74
+ owner.reload
75
+ select = Owner.columns.map { |c| "typeof(#{c.name})" }.join ", "
76
+ result = Owner.connection.exec_query <<~SQL
77
+ SELECT #{select}
78
+ FROM #{Owner.table_name}
79
+ WHERE #{Owner.primary_key} = #{owner.id}
80
+ SQL
81
+
82
+ assert_not(result.rows.first.include?("blob"), "should not store blobs")
83
+ ensure
84
+ owner.delete
85
+ end
86
+
87
+ def test_exec_insert
88
+ with_example_table do
89
+ vals = [Relation::QueryAttribute.new("number", 10, Type::Value.new)]
90
+ @conn.exec_insert("insert into ex (number) VALUES (?)", "SQL", vals)
91
+
92
+ result = @conn.exec_query(
93
+ "select number from ex where number = ?", "SQL", vals)
94
+
95
+ assert_equal 1, result.rows.length
96
+ assert_equal 10, result.rows.first.first
97
+ end
98
+ end
99
+
100
+ def test_primary_key_returns_nil_for_no_pk
101
+ with_example_table "id int, data string" do
102
+ assert_nil @conn.primary_key("ex")
103
+ end
104
+ end
105
+
106
+ def test_connection_no_db
107
+ assert_raises(ArgumentError) do
108
+ Base.sqlite3_connection { }
109
+ end
110
+ end
111
+
112
+ def test_bad_timeout
113
+ assert_raises(TypeError) do
114
+ Base.sqlite3_connection database: ":memory:",
115
+ adapter: "sqlite3",
116
+ timeout: "usa"
117
+ end
118
+ end
119
+
120
+ # connection is OK with a nil timeout
121
+ def test_nil_timeout
122
+ conn = Base.sqlite3_connection database: ":memory:",
123
+ adapter: "sqlite3",
124
+ timeout: nil
125
+ assert conn, "made a connection"
126
+ end
127
+
128
+ def test_connect
129
+ assert @conn, "should have connection"
130
+ end
131
+
132
+ # sqlite3 defaults to UTF-8 encoding
133
+ def test_encoding
134
+ assert_equal "UTF-8", @conn.encoding
135
+ end
136
+
137
+ def test_exec_no_binds
138
+ with_example_table "id int, data string" do
139
+ result = @conn.exec_query("SELECT id, data FROM ex")
140
+ assert_equal 0, result.rows.length
141
+ assert_equal 2, result.columns.length
142
+ assert_equal %w{ id data }, result.columns
143
+
144
+ @conn.exec_query('INSERT INTO ex (id, data) VALUES (1, "foo")')
145
+ result = @conn.exec_query("SELECT id, data FROM ex")
146
+ assert_equal 1, result.rows.length
147
+ assert_equal 2, result.columns.length
148
+
149
+ assert_equal [[1, "foo"]], result.rows
150
+ end
151
+ end
152
+
153
+ def test_exec_query_with_binds
154
+ with_example_table "id int, data string" do
155
+ @conn.exec_query('INSERT INTO ex (id, data) VALUES (1, "foo")')
156
+ result = @conn.exec_query(
157
+ "SELECT id, data FROM ex WHERE id = ?", nil, [Relation::QueryAttribute.new(nil, 1, Type::Value.new)])
158
+
159
+ assert_equal 1, result.rows.length
160
+ assert_equal 2, result.columns.length
161
+
162
+ assert_equal [[1, "foo"]], result.rows
163
+ end
164
+ end
165
+
166
+ def test_exec_query_typecasts_bind_vals
167
+ with_example_table "id int, data string" do
168
+ @conn.exec_query('INSERT INTO ex (id, data) VALUES (1, "foo")')
169
+
170
+ result = @conn.exec_query(
171
+ "SELECT id, data FROM ex WHERE id = ?", nil, [Relation::QueryAttribute.new("id", "1-fuu", Type::Integer.new)])
172
+
173
+ assert_equal 1, result.rows.length
174
+ assert_equal 2, result.columns.length
175
+
176
+ assert_equal [[1, "foo"]], result.rows
177
+ end
178
+ end
179
+
180
+ def test_quote_binary_column_escapes_it
181
+ DualEncoding.connection.execute(<<~SQL)
182
+ CREATE TABLE IF NOT EXISTS dual_encodings (
183
+ id integer PRIMARY KEY AUTOINCREMENT,
184
+ name varchar(255),
185
+ data binary
186
+ )
187
+ SQL
188
+ str = (+"\x80").force_encoding("ASCII-8BIT")
189
+ binary = DualEncoding.new name: "いただきます!", data: str
190
+ binary.save!
191
+ assert_equal str, binary.data
192
+ ensure
193
+ DualEncoding.connection.drop_table "dual_encodings", if_exists: true
194
+ end
195
+
196
+ def test_type_cast_should_not_mutate_encoding
197
+ name = (+"hello").force_encoding(Encoding::ASCII_8BIT)
198
+ Owner.create(name: name)
199
+ assert_equal Encoding::ASCII_8BIT, name.encoding
200
+ ensure
201
+ Owner.delete_all
202
+ end
203
+
204
+ def test_execute
205
+ with_example_table do
206
+ @conn.execute "INSERT INTO ex (number) VALUES (10)"
207
+ records = @conn.execute "SELECT * FROM ex"
208
+ assert_equal 1, records.length
209
+
210
+ record = records.first
211
+ assert_equal 10, record["number"]
212
+ assert_equal 1, record["id"]
213
+ end
214
+ end
215
+
216
+ def test_quote_string
217
+ assert_equal "''", @conn.quote_string("'")
218
+ end
219
+
220
+ def test_insert_logged
221
+ with_example_table do
222
+ sql = "INSERT INTO ex (number) VALUES (10)"
223
+ name = "foo"
224
+ assert_logged [[sql, name, []]] do
225
+ @conn.insert(sql, name)
226
+ end
227
+ end
228
+ end
229
+
230
+ def test_insert_id_value_returned
231
+ with_example_table do
232
+ sql = "INSERT INTO ex (number) VALUES (10)"
233
+ idval = "vuvuzela"
234
+ id = @conn.insert(sql, nil, nil, idval)
235
+ assert_equal idval, id
236
+ end
237
+ end
238
+
239
+ def test_select_rows
240
+ with_example_table do
241
+ 2.times do |i|
242
+ @conn.create "INSERT INTO ex (number) VALUES (#{i})"
243
+ end
244
+ rows = @conn.select_rows "select number, id from ex"
245
+ assert_equal [[0, 1], [1, 2]], rows
246
+ end
247
+ end
248
+
249
+ def test_select_rows_logged
250
+ with_example_table do
251
+ sql = "select * from ex"
252
+ name = "foo"
253
+ assert_logged [[sql, name, []]] do
254
+ @conn.select_rows sql, name
255
+ end
256
+ end
257
+ end
258
+
259
+ def test_transaction
260
+ with_example_table do
261
+ count_sql = "select count(*) from ex"
262
+
263
+ @conn.begin_db_transaction
264
+ @conn.create "INSERT INTO ex (number) VALUES (10)"
265
+
266
+ assert_equal 1, @conn.select_rows(count_sql).first.first
267
+ @conn.rollback_db_transaction
268
+ assert_equal 0, @conn.select_rows(count_sql).first.first
269
+ end
270
+ end
271
+
272
+ def test_tables
273
+ with_example_table do
274
+ assert_equal %w{ ex }, @conn.tables
275
+ with_example_table "id integer PRIMARY KEY AUTOINCREMENT, number integer", "people" do
276
+ assert_equal %w{ ex people }.sort, @conn.tables.sort
277
+ end
278
+ end
279
+ end
280
+
281
+ def test_tables_logs_name
282
+ sql = <<~SQL
283
+ SELECT name FROM sqlite_master WHERE name <> 'sqlite_sequence' AND type IN ('table')
284
+ SQL
285
+ assert_logged [[sql.squish, "SCHEMA", []]] do
286
+ @conn.tables
287
+ end
288
+ end
289
+
290
+ def test_table_exists_logs_name
291
+ with_example_table do
292
+ sql = <<~SQL
293
+ SELECT name FROM sqlite_master WHERE name <> 'sqlite_sequence' AND name = 'ex' AND type IN ('table')
294
+ SQL
295
+ assert_logged [[sql.squish, "SCHEMA", []]] do
296
+ assert @conn.table_exists?("ex")
297
+ end
298
+ end
299
+ end
300
+
301
+ def test_columns
302
+ with_example_table do
303
+ columns = @conn.columns("ex").sort_by(&:name)
304
+ assert_equal 2, columns.length
305
+ assert_equal %w{ id number }.sort, columns.map(&:name)
306
+ assert_equal [nil, nil], columns.map(&:default)
307
+ assert_equal [true, true], columns.map(&:null)
308
+ end
309
+ end
310
+
311
+ def test_columns_with_default
312
+ with_example_table "id integer PRIMARY KEY AUTOINCREMENT, number integer default 10" do
313
+ column = @conn.columns("ex").find { |x|
314
+ x.name == "number"
315
+ }
316
+ assert_equal "10", column.default
317
+ end
318
+ end
319
+
320
+ def test_columns_with_not_null
321
+ with_example_table "id integer PRIMARY KEY AUTOINCREMENT, number integer not null" do
322
+ column = @conn.columns("ex").find { |x| x.name == "number" }
323
+ assert_not column.null, "column should not be null"
324
+ end
325
+ end
326
+
327
+ def test_add_column_with_not_null
328
+ with_example_table "id integer PRIMARY KEY AUTOINCREMENT, number integer not null" do
329
+ assert_nothing_raised { @conn.add_column :ex, :name, :string, null: false }
330
+ column = @conn.columns("ex").find { |x| x.name == "name" }
331
+ assert_not column.null, "column should not be null"
332
+ end
333
+ end
334
+
335
+ def test_indexes_logs
336
+ with_example_table do
337
+ assert_logged [["PRAGMA index_list(\"ex\")", "SCHEMA", []]] do
338
+ @conn.indexes("ex")
339
+ end
340
+ end
341
+ end
342
+
343
+ def test_no_indexes
344
+ assert_equal [], @conn.indexes("items")
345
+ end
346
+
347
+ def test_index
348
+ with_example_table do
349
+ @conn.add_index "ex", "id", unique: true, name: "fun"
350
+ index = @conn.indexes("ex").find { |idx| idx.name == "fun" }
351
+
352
+ assert_equal "ex", index.table
353
+ assert index.unique, "index is unique"
354
+ assert_equal ["id"], index.columns
355
+ end
356
+ end
357
+
358
+ def test_index_with_if_not_exists
359
+ with_example_table do
360
+ @conn.add_index "ex", "id"
361
+
362
+ assert_nothing_raised do
363
+ @conn.add_index "ex", "id", if_not_exists: true
364
+ end
365
+ end
366
+ end
367
+
368
+ def test_non_unique_index
369
+ with_example_table do
370
+ @conn.add_index "ex", "id", name: "fun"
371
+ index = @conn.indexes("ex").find { |idx| idx.name == "fun" }
372
+ assert_not index.unique, "index is not unique"
373
+ end
374
+ end
375
+
376
+ def test_compound_index
377
+ with_example_table do
378
+ @conn.add_index "ex", %w{ id number }, name: "fun"
379
+ index = @conn.indexes("ex").find { |idx| idx.name == "fun" }
380
+ assert_equal %w{ id number }.sort, index.columns.sort
381
+ end
382
+ end
383
+
384
+ if ActiveRecord::Base.connection.supports_expression_index?
385
+ def test_expression_index
386
+ with_example_table do
387
+ @conn.add_index "ex", "max(id, number)", name: "expression"
388
+ index = @conn.indexes("ex").find { |idx| idx.name == "expression" }
389
+ assert_equal "max(id, number)", index.columns
390
+ end
391
+ end
392
+
393
+ def test_expression_index_with_where
394
+ with_example_table do
395
+ @conn.add_index "ex", "id % 10, max(id, number)", name: "expression", where: "id > 1000"
396
+ index = @conn.indexes("ex").find { |idx| idx.name == "expression" }
397
+ assert_equal "id % 10, max(id, number)", index.columns
398
+ assert_equal "id > 1000", index.where
399
+ end
400
+ end
401
+
402
+ def test_complicated_expression
403
+ with_example_table do
404
+ @conn.execute "CREATE INDEX expression ON ex (id % 10, (CASE WHEN number > 0 THEN max(id, number) END))WHERE(id > 1000)"
405
+ index = @conn.indexes("ex").find { |idx| idx.name == "expression" }
406
+ assert_equal "id % 10, (CASE WHEN number > 0 THEN max(id, number) END)", index.columns
407
+ assert_equal "(id > 1000)", index.where
408
+ end
409
+ end
410
+
411
+ def test_not_everything_an_expression
412
+ with_example_table do
413
+ @conn.add_index "ex", "id, max(id, number)", name: "expression"
414
+ index = @conn.indexes("ex").find { |idx| idx.name == "expression" }
415
+ assert_equal "id, max(id, number)", index.columns
416
+ end
417
+ end
418
+ end
419
+
420
+ def test_primary_key
421
+ with_example_table do
422
+ assert_equal "id", @conn.primary_key("ex")
423
+ with_example_table "internet integer PRIMARY KEY AUTOINCREMENT, number integer not null", "foos" do
424
+ assert_equal "internet", @conn.primary_key("foos")
425
+ end
426
+ end
427
+ end
428
+
429
+ def test_no_primary_key
430
+ with_example_table "number integer not null" do
431
+ assert_nil @conn.primary_key("ex")
432
+ end
433
+ end
434
+
435
+ class Barcode < ActiveRecord::Base
436
+ self.primary_key = "code"
437
+ end
438
+
439
+ def test_copy_table_with_existing_records_have_custom_primary_key
440
+ connection = Barcode.connection
441
+ connection.create_table(:barcodes, primary_key: "code", id: :string, limit: 42, force: true) do |t|
442
+ t.text :other_attr
443
+ end
444
+ code = "214fe0c2-dd47-46df-b53b-66090b3c1d40"
445
+ Barcode.create!(code: code, other_attr: "xxx")
446
+
447
+ connection.remove_column("barcodes", "other_attr")
448
+
449
+ assert_equal code, Barcode.first.id
450
+ ensure
451
+ Barcode.reset_column_information
452
+ end
453
+
454
+ def test_copy_table_with_composite_primary_keys
455
+ connection = Barcode.connection
456
+ connection.create_table(:barcodes, primary_key: ["region", "code"], force: true) do |t|
457
+ t.string :region
458
+ t.string :code
459
+ t.text :other_attr
460
+ end
461
+ region = "US"
462
+ code = "214fe0c2-dd47-46df-b53b-66090b3c1d40"
463
+ Barcode.create!(region: region, code: code, other_attr: "xxx")
464
+
465
+ connection.remove_column("barcodes", "other_attr")
466
+
467
+ assert_equal ["region", "code"], connection.primary_keys("barcodes")
468
+
469
+ barcode = Barcode.first
470
+ assert_equal region, barcode.region
471
+ assert_equal code, barcode.code
472
+ ensure
473
+ Barcode.reset_column_information
474
+ end
475
+
476
+ def test_custom_primary_key_in_create_table
477
+ connection = Barcode.connection
478
+ connection.create_table :barcodes, id: false, force: true do |t|
479
+ t.primary_key :id, :string
480
+ end
481
+
482
+ assert_equal "id", connection.primary_key("barcodes")
483
+
484
+ custom_pk = Barcode.columns_hash["id"]
485
+
486
+ assert_equal :string, custom_pk.type
487
+ assert_not custom_pk.null
488
+ ensure
489
+ Barcode.reset_column_information
490
+ end
491
+
492
+ def test_custom_primary_key_in_change_table
493
+ connection = Barcode.connection
494
+ connection.create_table :barcodes, id: false, force: true do |t|
495
+ t.integer :dummy
496
+ end
497
+ connection.change_table :barcodes do |t|
498
+ t.primary_key :id, :string
499
+ end
500
+
501
+ assert_equal "id", connection.primary_key("barcodes")
502
+
503
+ custom_pk = Barcode.columns_hash["id"]
504
+
505
+ assert_equal :string, custom_pk.type
506
+ assert_not custom_pk.null
507
+ ensure
508
+ Barcode.reset_column_information
509
+ end
510
+
511
+ def test_add_column_with_custom_primary_key
512
+ connection = Barcode.connection
513
+ connection.create_table :barcodes, id: false, force: true do |t|
514
+ t.integer :dummy
515
+ end
516
+ connection.add_column :barcodes, :id, :string, primary_key: true
517
+
518
+ assert_equal "id", connection.primary_key("barcodes")
519
+
520
+ custom_pk = Barcode.columns_hash["id"]
521
+
522
+ assert_equal :string, custom_pk.type
523
+ assert_not custom_pk.null
524
+ ensure
525
+ Barcode.reset_column_information
526
+ end
527
+
528
+ def test_remove_column_preserves_partial_indexes
529
+ connection = Barcode.connection
530
+ connection.create_table :barcodes, force: true do |t|
531
+ t.string :code
532
+ t.string :region
533
+ t.boolean :bool_attr
534
+
535
+ t.index :code, unique: true, where: :bool_attr, name: "partial"
536
+ end
537
+ connection.remove_column :barcodes, :region
538
+
539
+ index = connection.indexes("barcodes").find { |idx| idx.name == "partial" }
540
+ assert_equal "bool_attr", index.where
541
+ ensure
542
+ Barcode.reset_column_information
543
+ end
544
+
545
+ def test_supports_extensions
546
+ assert_not @conn.supports_extensions?, "does not support extensions"
547
+ end
548
+
549
+ def test_respond_to_enable_extension
550
+ assert_respond_to @conn, :enable_extension
551
+ end
552
+
553
+ def test_respond_to_disable_extension
554
+ assert_respond_to @conn, :disable_extension
555
+ end
556
+
557
+ def test_statement_closed
558
+ db_config = ActiveRecord::Base.configurations.configs_for(env_name: "arunit", name: "primary")
559
+ db = ::SQLite3::Database.new(db_config.database)
560
+
561
+ statement = ::SQLite3::Statement.new(db,
562
+ "CREATE TABLE statement_test (number integer not null)")
563
+ statement.stub(:step, -> { raise ::SQLite3::BusyException.new("busy") }) do
564
+ assert_called(statement, :columns, returns: []) do
565
+ assert_called(statement, :close) do
566
+ ::SQLite3::Statement.stub(:new, statement) do
567
+ assert_raises ActiveRecord::StatementInvalid do
568
+ @conn.exec_query "select * from statement_test"
569
+ end
570
+ end
571
+ end
572
+ end
573
+ end
574
+ end
575
+
576
+ def test_db_is_not_readonly_when_readonly_option_is_false
577
+ conn = Base.sqlite3_connection database: ":memory:",
578
+ adapter: "sqlite3",
579
+ readonly: false
580
+
581
+ assert_not_predicate conn.raw_connection, :readonly?
582
+ end
583
+
584
+ def test_db_is_not_readonly_when_readonly_option_is_unspecified
585
+ conn = Base.sqlite3_connection database: ":memory:",
586
+ adapter: "sqlite3"
587
+
588
+ assert_not_predicate conn.raw_connection, :readonly?
589
+ end
590
+
591
+ def test_db_is_readonly_when_readonly_option_is_true
592
+ conn = Base.sqlite3_connection database: ":memory:",
593
+ adapter: "sqlite3",
594
+ readonly: true
595
+
596
+ assert_predicate conn.raw_connection, :readonly?
597
+ end
598
+
599
+ def test_writes_are_not_permitted_to_readonly_databases
600
+ conn = Base.sqlite3_connection database: ":memory:",
601
+ adapter: "sqlite3",
602
+ readonly: true
603
+
604
+ assert_raises(ActiveRecord::StatementInvalid, /SQLite3::ReadOnlyException/) do
605
+ conn.execute("CREATE TABLE test(id integer)")
606
+ end
607
+ end
608
+
609
+ private
610
+ def assert_logged(logs)
611
+ subscriber = SQLSubscriber.new
612
+ subscription = ActiveSupport::Notifications.subscribe("sql.active_record", subscriber)
613
+ yield
614
+ assert_equal logs, subscriber.logged
615
+ ensure
616
+ ActiveSupport::Notifications.unsubscribe(subscription)
617
+ end
618
+
619
+ def with_example_table(definition = nil, table_name = "ex", &block)
620
+ definition ||= <<~SQL
621
+ id integer PRIMARY KEY AUTOINCREMENT,
622
+ number integer
623
+ SQL
624
+ super(@conn, table_name, definition, &block)
625
+ end
626
+ end
627
+ end
628
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "models/owner"
5
+
6
+ module ActiveRecord
7
+ module ConnectionAdapters
8
+ class SQLite3CreateFolder < ActiveRecord::SQLite3TestCase
9
+ def test_sqlite_creates_directory
10
+ Dir.mktmpdir do |dir|
11
+ dir = Pathname.new(dir)
12
+ @conn = Base.sqlite3_connection database: dir.join("db/foo.sqlite3"),
13
+ adapter: "sqlite3",
14
+ timeout: 100
15
+
16
+ assert Dir.exist? dir.join("db")
17
+ assert File.exist? dir.join("db/foo.sqlite3")
18
+ ensure
19
+ @conn.disconnect! if @conn
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+
5
+ class SQLite3StatementPoolTest < ActiveRecord::SQLite3TestCase
6
+ if Process.respond_to?(:fork)
7
+ def test_cache_is_per_pid
8
+ cache = ActiveRecord::ConnectionAdapters::SQLite3Adapter::StatementPool.new(10)
9
+ cache["foo"] = "bar"
10
+ assert_equal "bar", cache["foo"]
11
+
12
+ pid = fork {
13
+ lookup = cache["foo"]
14
+ exit!(!lookup)
15
+ }
16
+
17
+ Process.waitpid pid
18
+ assert $?.success?, "process should exit successfully"
19
+ end
20
+ end
21
+ end