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,649 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "models/post"
5
+ require "models/topic"
6
+ require "models/comment"
7
+ require "models/reply"
8
+ require "models/author"
9
+ require "models/developer"
10
+ require "models/computer"
11
+
12
+ class NamedScopingTest < ActiveRecord::TestCase
13
+ fixtures :posts, :authors, :topics, :comments, :author_addresses
14
+
15
+ def test_implements_enumerable
16
+ assert_not_empty Topic.all
17
+
18
+ assert_equal Topic.all.to_a, Topic.base
19
+ assert_equal Topic.all.to_a, Topic.base.to_a
20
+ assert_equal Topic.first, Topic.base.first
21
+ assert_equal Topic.all.to_a, Topic.base.map { |i| i }
22
+ end
23
+
24
+ def test_found_items_are_cached
25
+ all_posts = Topic.base
26
+
27
+ assert_queries(1) do
28
+ all_posts.collect { true }
29
+ all_posts.collect { true }
30
+ end
31
+ end
32
+
33
+ def test_reload_expires_cache_of_found_items
34
+ all_posts = Topic.base
35
+ all_posts.to_a
36
+
37
+ new_post = Topic.create!
38
+ assert_not_includes all_posts, new_post
39
+ assert_includes all_posts.reload, new_post
40
+ end
41
+
42
+ def test_delegates_finds_and_calculations_to_the_base_class
43
+ assert_not_empty Topic.all
44
+
45
+ assert_equal Topic.all.to_a, Topic.base.to_a
46
+ assert_equal Topic.first, Topic.base.first
47
+ assert_equal Topic.count, Topic.base.count
48
+ assert_equal Topic.average(:replies_count), Topic.base.average(:replies_count)
49
+ end
50
+
51
+ def test_calling_merge_at_first_in_scope
52
+ Topic.class_eval do
53
+ scope :calling_merge_at_first_in_scope, Proc.new { merge(Topic.replied) }
54
+ end
55
+ assert_equal Topic.calling_merge_at_first_in_scope.to_a, Topic.replied.to_a
56
+ end
57
+
58
+ def test_method_missing_priority_when_delegating
59
+ klazz = Class.new(ActiveRecord::Base) do
60
+ self.table_name = "topics"
61
+ scope :since, Proc.new { where("written_on >= ?", Time.now - 1.day) }
62
+ scope :to, Proc.new { where("written_on <= ?", Time.now) }
63
+ end
64
+ assert_equal klazz.to.since.to_a, klazz.since.to.to_a
65
+ end
66
+
67
+ def test_define_scope_for_reserved_words
68
+ assert Topic.true.all?(&:approved?), "all objects should be approved"
69
+ assert Topic.false.none?(&:approved?), "all objects should not be approved"
70
+ end
71
+
72
+ def test_scope_should_respond_to_own_methods_and_methods_of_the_proxy
73
+ assert_respond_to Topic.approved, :limit
74
+ assert_respond_to Topic.approved, :count
75
+ assert_respond_to Topic.approved, :length
76
+ end
77
+
78
+ def test_scopes_with_options_limit_finds_to_those_matching_the_criteria_specified
79
+ assert_not_empty Topic.all.merge!(where: { approved: true }).to_a
80
+
81
+ assert_equal Topic.all.merge!(where: { approved: true }).to_a, Topic.approved
82
+ assert_equal Topic.where(approved: true).count, Topic.approved.count
83
+ end
84
+
85
+ def test_scopes_with_string_name_can_be_composed
86
+ # NOTE that scopes defined with a string as a name worked on their own
87
+ # but when called on another scope the other scope was completely replaced
88
+ assert_equal Topic.replied.approved, Topic.replied.approved_as_string
89
+ end
90
+
91
+ def test_scopes_are_composable
92
+ assert_equal((approved = Topic.all.merge!(where: { approved: true }).to_a), Topic.approved)
93
+ assert_equal((replied = Topic.all.merge!(where: "replies_count > 0").to_a), Topic.replied)
94
+ assert_not (approved == replied)
95
+ assert_not_empty (approved & replied)
96
+
97
+ assert_equal approved & replied, Topic.approved.replied
98
+ end
99
+
100
+ def test_procedural_scopes
101
+ topics_written_before_the_third = Topic.where("written_on < ?", topics(:third).written_on)
102
+ topics_written_before_the_second = Topic.where("written_on < ?", topics(:second).written_on)
103
+ assert_not_equal topics_written_before_the_second, topics_written_before_the_third
104
+
105
+ assert_equal topics_written_before_the_third, Topic.written_before(topics(:third).written_on)
106
+ assert_equal topics_written_before_the_second, Topic.written_before(topics(:second).written_on)
107
+ end
108
+
109
+ def test_procedural_scopes_returning_nil
110
+ all_topics = Topic.all
111
+
112
+ assert_equal all_topics, Topic.written_before(nil)
113
+ end
114
+
115
+ def test_positional_scope_method
116
+ stats = {}
117
+ topics = Topic.all.scope_stats(stats)
118
+
119
+ assert_equal topics.count, stats[:count]
120
+ end
121
+
122
+ def test_positional_klass_method
123
+ stats = {}
124
+ topics = Topic.all.klass_stats(stats)
125
+
126
+ assert_equal topics.count, stats[:count]
127
+ end
128
+
129
+ def test_scope_with_object
130
+ objects = Topic.with_object
131
+ assert_operator objects.length, :>, 0
132
+ assert objects.all?(&:approved?), "all objects should be approved"
133
+ end
134
+
135
+ def test_scope_with_kwargs
136
+ # Explicit true
137
+ topics = Topic.with_kwargs(approved: true)
138
+ assert_operator topics.length, :>, 0
139
+ assert topics.all?(&:approved?), "all objects should be approved"
140
+
141
+ # No arguments
142
+ topics = Topic.with_kwargs()
143
+ assert_operator topics.length, :>, 0
144
+ assert topics.none?(&:approved?), "all objects should not be approved"
145
+ end
146
+
147
+ def test_has_many_associations_have_access_to_scopes
148
+ assert_not_equal Post.containing_the_letter_a, authors(:david).posts
149
+ assert_not_empty Post.containing_the_letter_a
150
+
151
+ expected = authors(:david).posts & Post.containing_the_letter_a
152
+ assert_equal expected.sort_by(&:id), authors(:david).posts.containing_the_letter_a.sort_by(&:id)
153
+ end
154
+
155
+ def test_scope_with_STI
156
+ assert_equal 3, Post.containing_the_letter_a.count
157
+ assert_equal 1, SpecialPost.containing_the_letter_a.count
158
+ end
159
+
160
+ def test_has_many_through_associations_have_access_to_scopes
161
+ assert_not_equal Comment.containing_the_letter_e, authors(:david).comments
162
+ assert_not_empty Comment.containing_the_letter_e
163
+
164
+ expected = authors(:david).comments & Comment.containing_the_letter_e
165
+ assert_equal expected.sort_by(&:id), authors(:david).comments.containing_the_letter_e.sort_by(&:id)
166
+ end
167
+
168
+ def test_scopes_honor_current_scopes_from_when_defined
169
+ assert_not_empty Post.ranked_by_comments.limit_by(5)
170
+ assert_not_empty authors(:david).posts.ranked_by_comments.limit_by(5)
171
+ assert_not_equal Post.ranked_by_comments.limit_by(5), authors(:david).posts.ranked_by_comments.limit_by(5)
172
+ assert_not_equal Post.top(5), authors(:david).posts.top(5)
173
+ # Oracle sometimes sorts differently if WHERE condition is changed
174
+ assert_equal authors(:david).posts.ranked_by_comments.limit_by(5).to_a.sort_by(&:id), authors(:david).posts.top(5).to_a.sort_by(&:id)
175
+ assert_equal Post.ranked_by_comments.limit_by(5), Post.top(5)
176
+ end
177
+
178
+ def test_scopes_body_is_a_callable
179
+ e = assert_raises ArgumentError do
180
+ Class.new(Post).class_eval { scope :containing_the_letter_z, where("body LIKE '%z%'") }
181
+ end
182
+ assert_equal "The scope body needs to be callable.", e.message
183
+ end
184
+
185
+ def test_scopes_name_is_relation_method
186
+ conflicts = [
187
+ :records,
188
+ :to_ary,
189
+ :to_sql,
190
+ :explain
191
+ ]
192
+
193
+ conflicts.each do |name|
194
+ e = assert_raises ArgumentError do
195
+ Class.new(Post).class_eval { scope name, -> { where(approved: true) } }
196
+ end
197
+ assert_match(/You tried to define a scope named \"#{name}\" on the model/, e.message)
198
+ end
199
+ end
200
+
201
+ def test_active_records_have_scope_named__all__
202
+ assert_not_empty Topic.all
203
+
204
+ assert_equal Topic.all.to_a, Topic.base
205
+ end
206
+
207
+ def test_active_records_have_scope_named__scoped__
208
+ scope = Topic.where("content LIKE '%Have%'")
209
+ assert_not_empty scope
210
+
211
+ assert_equal scope, Topic.all.merge!(where: "content LIKE '%Have%'")
212
+ end
213
+
214
+ def test_first_and_last_should_allow_integers_for_limit
215
+ assert_equal Topic.base.first(2), Topic.base.order("id").to_a.first(2)
216
+ assert_equal Topic.base.last(2), Topic.base.order("id").to_a.last(2)
217
+ end
218
+
219
+ def test_first_and_last_should_not_use_query_when_results_are_loaded
220
+ topics = Topic.base
221
+ topics.load # force load
222
+ assert_no_queries do
223
+ topics.first
224
+ topics.last
225
+ end
226
+ end
227
+
228
+ def test_empty_should_not_load_results
229
+ topics = Topic.base
230
+ assert_queries(2) do
231
+ topics.empty? # use count query
232
+ topics.load # force load
233
+ topics.empty? # use loaded (no query)
234
+ end
235
+ end
236
+
237
+ def test_any_should_not_load_results
238
+ topics = Topic.base
239
+ assert_queries(2) do
240
+ topics.any? # use count query
241
+ topics.load # force load
242
+ topics.any? # use loaded (no query)
243
+ end
244
+ end
245
+
246
+ def test_any_should_call_proxy_found_if_using_a_block
247
+ topics = Topic.base
248
+ assert_queries(1) do
249
+ assert_not_called(topics, :empty?) do
250
+ topics.any? { true }
251
+ end
252
+ end
253
+ end
254
+
255
+ def test_any_should_not_fire_query_if_scope_loaded
256
+ topics = Topic.base
257
+ topics.load # force load
258
+ assert_no_queries { assert topics.any? }
259
+ end
260
+
261
+ def test_model_class_should_respond_to_any
262
+ assert_predicate Topic, :any?
263
+ Topic.delete_all
264
+ assert_not_predicate Topic, :any?
265
+ end
266
+
267
+ def test_many_should_not_load_results
268
+ topics = Topic.base
269
+ assert_queries(2) do
270
+ topics.many? # use count query
271
+ topics.load # force load
272
+ topics.many? # use loaded (no query)
273
+ end
274
+ end
275
+
276
+ def test_many_should_call_proxy_found_if_using_a_block
277
+ topics = Topic.base
278
+ assert_queries(1) do
279
+ assert_not_called(topics, :size) do
280
+ topics.many? { true }
281
+ end
282
+ end
283
+ end
284
+
285
+ def test_many_should_not_fire_query_if_scope_loaded
286
+ topics = Topic.base
287
+ topics.load # force load
288
+ assert_no_queries { assert topics.many? }
289
+ end
290
+
291
+ def test_many_should_return_false_if_none_or_one
292
+ topics = Topic.base.where(id: 0)
293
+ assert_not_predicate topics, :many?
294
+ topics = Topic.base.where(id: 1)
295
+ assert_not_predicate topics, :many?
296
+ end
297
+
298
+ def test_many_should_return_true_if_more_than_one
299
+ assert_predicate Topic.base, :many?
300
+ end
301
+
302
+ def test_model_class_should_respond_to_many
303
+ Topic.delete_all
304
+ assert_not_predicate Topic, :many?
305
+ Topic.create!
306
+ assert_not_predicate Topic, :many?
307
+ Topic.create!
308
+ assert_predicate Topic, :many?
309
+ end
310
+
311
+ def test_should_build_on_top_of_scope
312
+ topic = Topic.approved.build({})
313
+ assert topic.approved
314
+ end
315
+
316
+ def test_should_build_new_on_top_of_scope
317
+ topic = Topic.approved.new
318
+ assert topic.approved
319
+ end
320
+
321
+ def test_should_create_on_top_of_scope
322
+ topic = Topic.approved.create({})
323
+ assert topic.approved
324
+ end
325
+
326
+ def test_should_create_with_bang_on_top_of_scope
327
+ topic = Topic.approved.create!({})
328
+ assert topic.approved
329
+ end
330
+
331
+ def test_should_build_on_top_of_chained_scopes
332
+ topic = Topic.approved.by_lifo.build({})
333
+ assert topic.approved
334
+ assert_equal "lifo", topic.author_name
335
+ end
336
+
337
+ def test_reserved_scope_names
338
+ klass = Class.new(ActiveRecord::Base) do
339
+ self.table_name = "topics"
340
+
341
+ scope :approved, -> { where(approved: true) }
342
+
343
+ class << self
344
+ public
345
+ def pub; end
346
+
347
+ private
348
+ def pri; end
349
+
350
+ protected
351
+ def pro; end
352
+ end
353
+ end
354
+
355
+ subklass = Class.new(klass)
356
+
357
+ conflicts = [
358
+ :create, # public class method on AR::Base
359
+ :relation, # private class method on AR::Base
360
+ :new, # redefined class method on AR::Base
361
+ :all, # a default scope
362
+ :public, # some important methods on Module and Class
363
+ :protected,
364
+ :private,
365
+ :name,
366
+ :parent,
367
+ :superclass
368
+ ]
369
+
370
+ non_conflicts = [
371
+ :find_by_title, # dynamic finder method
372
+ :approved, # existing scope
373
+ :pub, # existing public class method
374
+ :pri, # existing private class method
375
+ :pro, # existing protected class method
376
+ :open, # a ::Kernel method
377
+ ]
378
+
379
+ conflicts.each do |name|
380
+ e = assert_raises(ArgumentError, "scope `#{name}` should not be allowed") do
381
+ klass.class_eval { scope name, -> { where(approved: true) } }
382
+ end
383
+ assert_match(/You tried to define a scope named \"#{name}\" on the model/, e.message)
384
+
385
+ e = assert_raises(ArgumentError, "scope `#{name}` should not be allowed") do
386
+ subklass.class_eval { scope name, -> { where(approved: true) } }
387
+ end
388
+ assert_match(/You tried to define a scope named \"#{name}\" on the model/, e.message)
389
+ end
390
+
391
+ non_conflicts.each do |name|
392
+ assert_nothing_raised do
393
+ silence_warnings do
394
+ klass.class_eval { scope name, -> { where(approved: true) } }
395
+ end
396
+ end
397
+
398
+ assert_nothing_raised do
399
+ subklass.class_eval { scope name, -> { where(approved: true) } }
400
+ end
401
+ end
402
+ end
403
+
404
+ # Method delegation for scope names which look like /\A[a-zA-Z_]\w*[!?]?\z/
405
+ # has been done by evaluating a string with a plain def statement. For scope
406
+ # names which contain spaces this approach doesn't work.
407
+ def test_spaces_in_scope_names
408
+ klass = Class.new(ActiveRecord::Base) do
409
+ self.table_name = "topics"
410
+ scope :"title containing space", ->(space: " ") { where("title LIKE '%#{space}%'") }
411
+ scope :approved, -> { where(approved: true) }
412
+ end
413
+ assert_equal klass.where("title LIKE '% %'"), klass.public_send(:"title containing space", space: " ")
414
+ assert_equal klass.approved.where("title LIKE '% %'"), klass.approved.public_send(:"title containing space", space: " ")
415
+ end
416
+
417
+ def test_find_all_should_behave_like_select
418
+ assert_equal Topic.base.to_a.select(&:approved), Topic.base.to_a.find_all(&:approved)
419
+ end
420
+
421
+ def test_rand_should_select_a_random_object_from_proxy
422
+ assert_kind_of Topic, Topic.approved.sample
423
+ end
424
+
425
+ def test_should_use_where_in_query_for_scope
426
+ assert_equal Developer.where(name: "Jamis").to_set, Developer.where(id: Developer.jamises).to_set
427
+ end
428
+
429
+ def test_size_should_use_count_when_results_are_not_loaded
430
+ topics = Topic.base
431
+ assert_queries(1) do
432
+ assert_sql(/COUNT/i) { topics.size }
433
+ end
434
+ end
435
+
436
+ def test_size_should_use_length_when_results_are_loaded
437
+ topics = Topic.base
438
+ topics.load # force load
439
+ assert_no_queries do
440
+ topics.size # use loaded (no query)
441
+ end
442
+ end
443
+
444
+ def test_should_not_duplicates_where_values
445
+ relation = Topic.where("1=1")
446
+ assert_equal relation.where_clause, relation.scope_with_lambda.where_clause
447
+ end
448
+
449
+ def test_chaining_with_duplicate_joins
450
+ join = "INNER JOIN comments ON comments.post_id = posts.id"
451
+ post = Post.find(1)
452
+ assert_equal post.comments.size, Post.joins(join).joins(join).where("posts.id = #{post.id}").size
453
+ end
454
+
455
+ def test_chaining_applies_last_conditions_when_creating
456
+ post = Topic.rejected.new
457
+ assert_not_predicate post, :approved?
458
+
459
+ post = Topic.rejected.approved.new
460
+ assert_predicate post, :approved?
461
+
462
+ post = Topic.approved.rejected.new
463
+ assert_not_predicate post, :approved?
464
+
465
+ post = Topic.approved.rejected.approved.new
466
+ assert_predicate post, :approved?
467
+ end
468
+
469
+ def test_chaining_combines_conditions_when_searching
470
+ # Normal hash conditions
471
+ assert_equal Topic.where(approved: false).where(approved: true).to_a, Topic.rejected.approved.to_a
472
+ assert_equal Topic.where(approved: true).where(approved: false).to_a, Topic.approved.rejected.to_a
473
+
474
+ # Nested hash conditions with same keys
475
+ assert_equal [], Post.with_special_comments.with_very_special_comments.to_a
476
+
477
+ # Nested hash conditions with different keys
478
+ assert_equal [posts(:sti_comments)], Post.with_special_comments.with_post(4).to_a.uniq
479
+ end
480
+
481
+ def test_class_method_in_scope
482
+ assert_equal topics(:second, :fourth), topics(:first).approved_replies.ordered
483
+ end
484
+
485
+ def test_chaining_doesnt_leak_conditions_to_another_scopes
486
+ expected = Topic.where(approved: false).where(id: Topic.children.select(:parent_id))
487
+ assert_equal expected.to_a, Topic.rejected.has_children.to_a
488
+ end
489
+
490
+ def test_nested_scoping
491
+ expected = Reply.approved
492
+ assert_equal expected.to_a, Topic.rejected.nested_scoping(expected)
493
+ end
494
+
495
+ def test_scopes_batch_finders
496
+ assert_equal 4, Topic.approved.count
497
+
498
+ assert_queries(5) do
499
+ Topic.approved.find_each(batch_size: 1) { |t| assert t.approved? }
500
+ end
501
+
502
+ assert_queries(3) do
503
+ Topic.approved.find_in_batches(batch_size: 2) do |group|
504
+ group.each { |t| assert t.approved? }
505
+ end
506
+ end
507
+ end
508
+
509
+ def test_table_names_for_chaining_scopes_with_and_without_table_name_included
510
+ assert_nothing_raised do
511
+ Comment.for_first_post.for_first_author.to_a
512
+ end
513
+ end
514
+
515
+ def test_scopes_with_reserved_names
516
+ class << Topic
517
+ def public_method; end
518
+ public :public_method
519
+
520
+ def protected_method; end
521
+ protected :protected_method
522
+
523
+ def private_method; end
524
+ private :private_method
525
+ end
526
+
527
+ [:public_method, :protected_method, :private_method].each do |reserved_method|
528
+ assert Topic.respond_to?(reserved_method, true)
529
+ assert_called(ActiveRecord::Base.logger, :warn) do
530
+ silence_warnings { Topic.scope(reserved_method, -> { }) }
531
+ end
532
+ end
533
+ end
534
+
535
+ def test_scopes_on_relations
536
+ # Topic.replied
537
+ approved_topics = Topic.all.approved.order("id DESC")
538
+ assert_equal topics(:fifth), approved_topics.first
539
+
540
+ replied_approved_topics = approved_topics.replied
541
+ assert_equal topics(:third), replied_approved_topics.first
542
+ end
543
+
544
+ def test_index_on_scope
545
+ approved = Topic.approved.order("id ASC")
546
+ assert_equal topics(:second), approved[0]
547
+ assert_predicate approved, :loaded?
548
+ end
549
+
550
+ def test_nested_scopes_queries_size
551
+ assert_queries(1) do
552
+ Topic.approved.by_lifo.replied.written_before(Time.now).to_a
553
+ end
554
+ end
555
+
556
+ # Note: these next two are kinda odd because they are essentially just testing that the
557
+ # query cache works as it should, but they are here for legacy reasons as they was previously
558
+ # a separate cache on association proxies, and these show that that is not necessary.
559
+ def test_scopes_are_cached_on_associations
560
+ post = posts(:welcome)
561
+
562
+ Post.cache do
563
+ assert_queries(1) { post.comments.containing_the_letter_e.to_a }
564
+ assert_no_queries { post.comments.containing_the_letter_e.to_a }
565
+ end
566
+ end
567
+
568
+ def test_scopes_with_arguments_are_cached_on_associations
569
+ post = posts(:welcome)
570
+
571
+ Post.cache do
572
+ one = assert_queries(1) { post.comments.limit_by(1).to_a }
573
+ assert_equal 1, one.size
574
+
575
+ two = assert_queries(1) { post.comments.limit_by(2).to_a }
576
+ assert_equal 2, two.size
577
+
578
+ assert_no_queries { post.comments.limit_by(1).to_a }
579
+ assert_no_queries { post.comments.limit_by(2).to_a }
580
+ end
581
+ end
582
+
583
+ def test_scopes_to_get_newest
584
+ post = posts(:welcome)
585
+ old_last_comment = post.comments.newest
586
+ new_comment = post.comments.create(body: "My new comment")
587
+ assert_equal new_comment, post.comments.newest
588
+ assert_not_equal old_last_comment, post.comments.newest
589
+ end
590
+
591
+ def test_scopes_are_reset_on_association_reload
592
+ post = posts(:welcome)
593
+
594
+ [:destroy_all, :reset, :delete_all].each do |method|
595
+ before = post.comments.containing_the_letter_e
596
+ post.association(:comments).public_send(method)
597
+ assert_not_same before, post.comments.containing_the_letter_e, "CollectionAssociation##{method} should reset the named scopes cache"
598
+ end
599
+ end
600
+
601
+ def test_scoped_are_lazy_loaded_if_table_still_does_not_exist
602
+ assert_nothing_raised do
603
+ require "models/without_table"
604
+ end
605
+ end
606
+
607
+ def test_eager_default_scope_relations_are_remove
608
+ klass = Class.new(ActiveRecord::Base)
609
+ klass.table_name = "posts"
610
+
611
+ assert_raises(ArgumentError) do
612
+ klass.send(:default_scope, klass.where(id: posts(:welcome).id))
613
+ end
614
+ end
615
+
616
+ def test_subclass_merges_scopes_properly
617
+ assert_equal 1, SpecialComment.where(body: "go crazy").created.count
618
+ end
619
+
620
+ def test_model_class_should_respond_to_extending
621
+ assert_raises OopsError do
622
+ Comment.unscoped.oops_comments.destroy_all
623
+ end
624
+ end
625
+
626
+ def test_model_class_should_respond_to_none
627
+ assert_not_predicate Topic, :none?
628
+ Topic.delete_all
629
+ assert_predicate Topic, :none?
630
+ end
631
+
632
+ def test_model_class_should_respond_to_one
633
+ assert_not_predicate Topic, :one?
634
+ Topic.delete_all
635
+ assert_not_predicate Topic, :one?
636
+ Topic.create!
637
+ assert_predicate Topic, :one?
638
+ end
639
+
640
+ def test_scope_with_annotation
641
+ Topic.class_eval do
642
+ scope :including_annotate_in_scope, Proc.new { annotate("from-scope") }
643
+ end
644
+
645
+ assert_sql(%r{/\* from-scope \*/}) do
646
+ assert Topic.including_annotate_in_scope.to_a, Topic.all.to_a
647
+ end
648
+ end
649
+ end