ibm_db 5.1.0-x86-mingw32 → 5.3.2-x86-mingw32

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 (624) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +9 -0
  3. data/LICENSE +55 -18
  4. data/ext/Makefile +14 -14
  5. data/ext/extconf.rb +4 -4
  6. data/ext/ibm_db.c +62 -57
  7. data/ext/ibm_db.o +0 -0
  8. data/ext/ibm_db.so +0 -0
  9. data/ext/mkmf.log +11 -11
  10. data/ext/ruby_ibm_db_cli.c +1 -0
  11. data/ext/ruby_ibm_db_cli.o +0 -0
  12. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +1463 -1279
  13. data/lib/ibm_db.so +1 -0
  14. data/lib/mswin32/ibm_db.rb +7 -3
  15. data/lib/mswin32/rb2x/i386/ruby25/ibm_db.so +0 -0
  16. data/lib/mswin32/rb3x/i386/ruby30/ibm_db.so +0 -0
  17. data/test/active_record/connection_adapters/fake_adapter.rb +5 -2
  18. data/test/activejob/destroy_association_async_test.rb +305 -0
  19. data/test/activejob/destroy_async_job_not_present_test.rb +31 -0
  20. data/test/activejob/helper.rb +15 -0
  21. data/test/assets/schema_dump_5_1.yml +345 -0
  22. data/test/cases/adapter_prevent_writes_test.rb +334 -0
  23. data/test/cases/adapter_test.rb +432 -218
  24. data/test/cases/adapters/mysql2/active_schema_test.rb +85 -75
  25. data/test/cases/adapters/mysql2/auto_increment_test.rb +34 -0
  26. data/test/cases/adapters/mysql2/bind_parameter_test.rb +5 -3
  27. data/test/cases/adapters/mysql2/boolean_test.rb +6 -4
  28. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +26 -24
  29. data/test/cases/adapters/mysql2/charset_collation_test.rb +20 -17
  30. data/test/cases/adapters/mysql2/connection_test.rb +48 -50
  31. data/test/cases/adapters/mysql2/count_deleted_rows_with_lock_test.rb +28 -0
  32. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +23 -19
  33. data/test/cases/adapters/mysql2/enum_test.rb +32 -11
  34. data/test/cases/adapters/mysql2/explain_test.rb +13 -11
  35. data/test/cases/adapters/mysql2/json_test.rb +17 -188
  36. data/test/cases/adapters/mysql2/mysql2_adapter_prevent_writes_test.rb +208 -0
  37. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +183 -28
  38. data/test/cases/adapters/mysql2/nested_deadlock_test.rb +75 -0
  39. data/test/cases/adapters/mysql2/optimizer_hints_test.rb +69 -0
  40. data/test/cases/adapters/mysql2/schema_migrations_test.rb +26 -21
  41. data/test/cases/adapters/mysql2/schema_test.rb +24 -22
  42. data/test/cases/adapters/mysql2/set_test.rb +32 -0
  43. data/test/cases/adapters/mysql2/sp_test.rb +10 -8
  44. data/test/cases/adapters/mysql2/sql_types_test.rb +8 -6
  45. data/test/cases/adapters/mysql2/table_options_test.rb +93 -10
  46. data/test/cases/adapters/mysql2/transaction_test.rb +151 -0
  47. data/test/cases/adapters/mysql2/unsigned_type_test.rb +11 -9
  48. data/test/cases/adapters/mysql2/virtual_column_test.rb +66 -0
  49. data/test/cases/adapters/postgresql/active_schema_test.rb +40 -25
  50. data/test/cases/adapters/postgresql/array_test.rb +118 -63
  51. data/test/cases/adapters/postgresql/bit_string_test.rb +12 -10
  52. data/test/cases/adapters/postgresql/bytea_test.rb +26 -25
  53. data/test/cases/adapters/postgresql/case_insensitive_test.rb +10 -9
  54. data/test/cases/adapters/postgresql/change_schema_test.rb +7 -5
  55. data/test/cases/adapters/postgresql/cidr_test.rb +2 -0
  56. data/test/cases/adapters/postgresql/citext_test.rb +58 -58
  57. data/test/cases/adapters/postgresql/collation_test.rb +17 -15
  58. data/test/cases/adapters/postgresql/composite_test.rb +25 -23
  59. data/test/cases/adapters/postgresql/connection_test.rb +73 -85
  60. data/test/cases/adapters/postgresql/create_unlogged_tables_test.rb +74 -0
  61. data/test/cases/adapters/postgresql/datatype_test.rb +19 -22
  62. data/test/cases/adapters/postgresql/date_test.rb +42 -0
  63. data/test/cases/adapters/postgresql/domain_test.rb +9 -7
  64. data/test/cases/adapters/postgresql/enum_test.rb +12 -10
  65. data/test/cases/adapters/postgresql/explain_test.rb +10 -8
  66. data/test/cases/adapters/postgresql/extension_migration_test.rb +13 -12
  67. data/test/cases/adapters/postgresql/foreign_table_test.rb +109 -0
  68. data/test/cases/adapters/postgresql/full_text_test.rb +8 -6
  69. data/test/cases/adapters/postgresql/geometric_test.rb +57 -63
  70. data/test/cases/adapters/postgresql/hstore_test.rb +288 -280
  71. data/test/cases/adapters/postgresql/infinity_test.rb +54 -15
  72. data/test/cases/adapters/postgresql/integer_test.rb +2 -0
  73. data/test/cases/adapters/postgresql/interval_test.rb +99 -0
  74. data/test/cases/adapters/postgresql/json_test.rb +16 -201
  75. data/test/cases/adapters/postgresql/ltree_test.rb +14 -16
  76. data/test/cases/adapters/postgresql/money_test.rb +47 -16
  77. data/test/cases/adapters/postgresql/network_test.rb +36 -28
  78. data/test/cases/adapters/postgresql/numbers_test.rb +7 -5
  79. data/test/cases/adapters/postgresql/optimizer_hints_test.rb +71 -0
  80. data/test/cases/adapters/postgresql/partitions_test.rb +22 -0
  81. data/test/cases/adapters/postgresql/postgresql_adapter_prevent_writes_test.rb +205 -0
  82. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +178 -136
  83. data/test/cases/adapters/postgresql/prepared_statements_disabled_test.rb +27 -0
  84. data/test/cases/adapters/postgresql/quoting_test.rb +12 -6
  85. data/test/cases/adapters/postgresql/range_test.rb +406 -292
  86. data/test/cases/adapters/postgresql/referential_integrity_test.rb +16 -15
  87. data/test/cases/adapters/postgresql/rename_table_test.rb +9 -8
  88. data/test/cases/adapters/postgresql/schema_authorization_test.rb +14 -23
  89. data/test/cases/adapters/postgresql/schema_test.rb +207 -91
  90. data/test/cases/adapters/postgresql/serial_test.rb +9 -7
  91. data/test/cases/adapters/postgresql/statement_pool_test.rb +26 -6
  92. data/test/cases/adapters/postgresql/timestamp_test.rb +17 -15
  93. data/test/cases/adapters/postgresql/transaction_nested_test.rb +114 -0
  94. data/test/cases/adapters/postgresql/transaction_test.rb +189 -0
  95. data/test/cases/adapters/postgresql/type_lookup_test.rb +12 -10
  96. data/test/cases/adapters/postgresql/utils_test.rb +11 -9
  97. data/test/cases/adapters/postgresql/uuid_test.rb +226 -109
  98. data/test/cases/adapters/postgresql/xml_test.rb +10 -14
  99. data/test/cases/adapters/sqlite3/collation_test.rb +26 -15
  100. data/test/cases/adapters/sqlite3/copy_table_test.rb +31 -28
  101. data/test/cases/adapters/sqlite3/explain_test.rb +13 -11
  102. data/test/cases/adapters/sqlite3/json_test.rb +29 -0
  103. data/test/cases/adapters/sqlite3/quoting_test.rb +35 -57
  104. data/test/cases/adapters/sqlite3/sqlite3_adapter_prevent_writes_test.rb +186 -0
  105. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +318 -131
  106. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +11 -11
  107. data/test/cases/adapters/sqlite3/statement_pool_test.rb +7 -6
  108. data/test/cases/adapters/sqlite3/transaction_test.rb +123 -0
  109. data/test/cases/aggregations_test.rb +14 -12
  110. data/test/cases/annotate_test.rb +46 -0
  111. data/test/cases/ar_schema_test.rb +153 -86
  112. data/test/cases/arel/attributes/attribute_test.rb +1145 -0
  113. data/test/cases/arel/attributes/math_test.rb +83 -0
  114. data/test/cases/arel/attributes_test.rb +27 -0
  115. data/test/cases/arel/collectors/bind_test.rb +40 -0
  116. data/test/cases/arel/collectors/composite_test.rb +47 -0
  117. data/test/cases/arel/collectors/sql_string_test.rb +41 -0
  118. data/test/cases/arel/collectors/substitute_bind_collector_test.rb +48 -0
  119. data/test/cases/arel/crud_test.rb +65 -0
  120. data/test/cases/arel/delete_manager_test.rb +53 -0
  121. data/test/cases/arel/factory_methods_test.rb +46 -0
  122. data/test/cases/arel/helper.rb +45 -0
  123. data/test/cases/arel/insert_manager_test.rb +241 -0
  124. data/test/cases/arel/nodes/and_test.rb +30 -0
  125. data/test/cases/arel/nodes/as_test.rb +36 -0
  126. data/test/cases/arel/nodes/ascending_test.rb +46 -0
  127. data/test/cases/arel/nodes/bin_test.rb +35 -0
  128. data/test/cases/arel/nodes/binary_test.rb +29 -0
  129. data/test/cases/arel/nodes/bind_param_test.rb +22 -0
  130. data/test/cases/arel/nodes/case_test.rb +96 -0
  131. data/test/cases/arel/nodes/casted_test.rb +18 -0
  132. data/test/cases/arel/nodes/comment_test.rb +22 -0
  133. data/test/cases/arel/nodes/count_test.rb +35 -0
  134. data/test/cases/arel/nodes/delete_statement_test.rb +36 -0
  135. data/test/cases/arel/nodes/descending_test.rb +46 -0
  136. data/test/cases/arel/nodes/distinct_test.rb +21 -0
  137. data/test/cases/arel/nodes/equality_test.rb +62 -0
  138. data/test/cases/arel/nodes/extract_test.rb +43 -0
  139. data/test/cases/arel/nodes/false_test.rb +21 -0
  140. data/test/cases/arel/nodes/grouping_test.rb +26 -0
  141. data/test/cases/arel/nodes/infix_operation_test.rb +42 -0
  142. data/test/cases/arel/nodes/insert_statement_test.rb +44 -0
  143. data/test/cases/arel/nodes/named_function_test.rb +48 -0
  144. data/test/cases/arel/nodes/node_test.rb +22 -0
  145. data/test/cases/arel/nodes/not_test.rb +31 -0
  146. data/test/cases/arel/nodes/or_test.rb +36 -0
  147. data/test/cases/arel/nodes/over_test.rb +69 -0
  148. data/test/cases/arel/nodes/select_core_test.rb +79 -0
  149. data/test/cases/arel/nodes/select_statement_test.rb +51 -0
  150. data/test/cases/arel/nodes/sql_literal_test.rb +75 -0
  151. data/test/cases/arel/nodes/sum_test.rb +35 -0
  152. data/test/cases/arel/nodes/table_alias_test.rb +29 -0
  153. data/test/cases/arel/nodes/true_test.rb +21 -0
  154. data/test/cases/arel/nodes/unary_operation_test.rb +41 -0
  155. data/test/cases/arel/nodes/update_statement_test.rb +60 -0
  156. data/test/cases/arel/nodes/window_test.rb +81 -0
  157. data/test/cases/arel/nodes_test.rb +34 -0
  158. data/test/cases/arel/select_manager_test.rb +1238 -0
  159. data/test/cases/arel/support/fake_record.rb +135 -0
  160. data/test/cases/arel/table_test.rb +216 -0
  161. data/test/cases/arel/update_manager_test.rb +126 -0
  162. data/test/cases/arel/visitors/dispatch_contamination_test.rb +78 -0
  163. data/test/cases/arel/visitors/dot_test.rb +90 -0
  164. data/test/cases/arel/visitors/mysql_test.rb +157 -0
  165. data/test/cases/arel/visitors/postgres_test.rb +366 -0
  166. data/test/cases/arel/visitors/sqlite_test.rb +75 -0
  167. data/test/cases/arel/visitors/to_sql_test.rb +750 -0
  168. data/test/cases/associations/belongs_to_associations_test.rb +510 -158
  169. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +4 -2
  170. data/test/cases/associations/callbacks_test.rb +56 -38
  171. data/test/cases/associations/cascaded_eager_loading_test.rb +118 -61
  172. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +138 -18
  173. data/test/cases/associations/eager_load_nested_include_test.rb +38 -37
  174. data/test/cases/associations/eager_singularization_test.rb +21 -21
  175. data/test/cases/associations/eager_test.rb +559 -415
  176. data/test/cases/associations/extension_test.rb +18 -12
  177. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +234 -213
  178. data/test/cases/associations/has_many_associations_test.rb +1038 -465
  179. data/test/cases/associations/has_many_through_associations_test.rb +558 -249
  180. data/test/cases/associations/has_one_associations_test.rb +294 -129
  181. data/test/cases/associations/has_one_through_associations_test.rb +121 -75
  182. data/test/cases/associations/inner_join_association_test.rb +114 -38
  183. data/test/cases/associations/inverse_associations_test.rb +606 -398
  184. data/test/cases/associations/join_model_test.rb +158 -148
  185. data/test/cases/associations/left_outer_join_association_test.rb +59 -24
  186. data/test/cases/associations/nested_through_associations_test.rb +166 -109
  187. data/test/cases/associations/required_test.rb +35 -10
  188. data/test/cases/associations_test.rb +241 -110
  189. data/test/cases/attribute_methods/read_test.rb +11 -11
  190. data/test/cases/attribute_methods_test.rb +413 -298
  191. data/test/cases/attributes_test.rb +145 -27
  192. data/test/cases/autosave_association_test.rb +681 -436
  193. data/test/cases/base_prevent_writes_test.rb +229 -0
  194. data/test/cases/base_test.rb +599 -542
  195. data/test/cases/batches_test.rb +288 -82
  196. data/test/cases/binary_test.rb +26 -31
  197. data/test/cases/bind_parameter_test.rb +194 -21
  198. data/test/cases/boolean_test.rb +52 -0
  199. data/test/cases/cache_key_test.rb +110 -5
  200. data/test/cases/calculations_test.rb +740 -177
  201. data/test/cases/callbacks_test.rb +74 -207
  202. data/test/cases/clone_test.rb +15 -10
  203. data/test/cases/coders/json_test.rb +2 -0
  204. data/test/cases/coders/yaml_column_test.rb +16 -13
  205. data/test/cases/collection_cache_key_test.rb +177 -20
  206. data/test/cases/column_alias_test.rb +9 -7
  207. data/test/cases/column_definition_test.rb +10 -68
  208. data/test/cases/comment_test.rb +166 -107
  209. data/test/cases/connection_adapters/adapter_leasing_test.rb +14 -10
  210. data/test/cases/connection_adapters/connection_handler_test.rb +358 -51
  211. data/test/cases/connection_adapters/connection_handlers_multi_db_test.rb +400 -0
  212. data/test/cases/connection_adapters/connection_handlers_multi_pool_config_test.rb +103 -0
  213. data/test/cases/connection_adapters/connection_handlers_sharding_db_test.rb +499 -0
  214. data/test/cases/connection_adapters/connection_swapping_nested_test.rb +457 -0
  215. data/test/cases/connection_adapters/legacy_connection_handlers_multi_db_test.rb +486 -0
  216. data/test/cases/connection_adapters/legacy_connection_handlers_sharding_db_test.rb +586 -0
  217. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +319 -138
  218. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +62 -50
  219. data/test/cases/connection_adapters/schema_cache_test.rb +259 -26
  220. data/test/cases/connection_adapters/type_lookup_test.rb +96 -95
  221. data/test/cases/connection_management_test.rb +13 -11
  222. data/test/cases/connection_pool_test.rb +316 -83
  223. data/test/cases/core_test.rb +82 -58
  224. data/test/cases/counter_cache_test.rb +204 -50
  225. data/test/cases/custom_locking_test.rb +5 -3
  226. data/test/cases/database_configurations/hash_config_test.rb +74 -0
  227. data/test/cases/database_configurations/resolver_test.rb +150 -0
  228. data/test/cases/database_configurations_test.rb +145 -0
  229. data/test/cases/database_selector_test.rb +296 -0
  230. data/test/cases/database_statements_test.rb +18 -16
  231. data/test/cases/date_test.rb +8 -16
  232. data/test/cases/date_time_precision_test.rb +100 -78
  233. data/test/cases/date_time_test.rb +23 -8
  234. data/test/cases/defaults_test.rb +106 -71
  235. data/test/cases/delegated_type_test.rb +57 -0
  236. data/test/cases/dirty_test.rb +419 -223
  237. data/test/cases/disconnected_test.rb +6 -6
  238. data/test/cases/dup_test.rb +54 -27
  239. data/test/cases/enum_test.rb +461 -82
  240. data/test/cases/errors_test.rb +7 -7
  241. data/test/cases/explain_subscriber_test.rb +17 -15
  242. data/test/cases/explain_test.rb +11 -19
  243. data/test/cases/filter_attributes_test.rb +153 -0
  244. data/test/cases/finder_respond_to_test.rb +14 -14
  245. data/test/cases/finder_test.rb +669 -287
  246. data/test/cases/fixture_set/file_test.rb +34 -38
  247. data/test/cases/fixtures_test.rb +833 -176
  248. data/test/cases/forbidden_attributes_protection_test.rb +32 -67
  249. data/test/cases/habtm_destroy_order_test.rb +25 -25
  250. data/test/cases/helper.rb +78 -49
  251. data/test/cases/hot_compatibility_test.rb +33 -32
  252. data/test/cases/i18n_test.rb +18 -17
  253. data/test/cases/inheritance_test.rb +180 -115
  254. data/test/cases/insert_all_test.rb +489 -0
  255. data/test/cases/instrumentation_test.rb +101 -0
  256. data/test/cases/integration_test.rb +119 -31
  257. data/test/cases/invalid_connection_test.rb +18 -16
  258. data/test/cases/invertible_migration_test.rb +183 -43
  259. data/test/cases/json_attribute_test.rb +35 -0
  260. data/test/cases/json_serialization_test.rb +57 -58
  261. data/test/cases/json_shared_test_cases.rb +290 -0
  262. data/test/cases/locking_test.rb +413 -119
  263. data/test/cases/log_subscriber_test.rb +68 -26
  264. data/test/cases/marshal_serialization_test.rb +39 -0
  265. data/test/cases/migration/change_schema_test.rb +118 -72
  266. data/test/cases/migration/change_table_test.rb +138 -30
  267. data/test/cases/migration/check_constraint_test.rb +162 -0
  268. data/test/cases/migration/column_attributes_test.rb +45 -35
  269. data/test/cases/migration/column_positioning_test.rb +18 -6
  270. data/test/cases/migration/columns_test.rb +93 -77
  271. data/test/cases/migration/command_recorder_test.rb +121 -34
  272. data/test/cases/migration/compatibility_test.rb +578 -23
  273. data/test/cases/migration/create_join_table_test.rb +35 -25
  274. data/test/cases/migration/foreign_key_test.rb +503 -284
  275. data/test/cases/migration/helper.rb +4 -3
  276. data/test/cases/migration/index_test.rb +119 -70
  277. data/test/cases/migration/logger_test.rb +9 -6
  278. data/test/cases/migration/pending_migrations_test.rb +88 -34
  279. data/test/cases/migration/references_foreign_key_test.rb +164 -150
  280. data/test/cases/migration/references_index_test.rb +38 -19
  281. data/test/cases/migration/references_statements_test.rb +15 -14
  282. data/test/cases/migration/rename_table_test.rb +53 -30
  283. data/test/cases/migration_test.rb +637 -269
  284. data/test/cases/migrator_test.rb +191 -135
  285. data/test/cases/mixin_test.rb +7 -11
  286. data/test/cases/modules_test.rb +36 -34
  287. data/test/cases/multi_db_migrator_test.rb +223 -0
  288. data/test/cases/multiparameter_attributes_test.rb +60 -33
  289. data/test/cases/multiple_db_test.rb +16 -22
  290. data/test/cases/nested_attributes_test.rb +341 -320
  291. data/test/cases/nested_attributes_with_callbacks_test.rb +26 -24
  292. data/test/cases/null_relation_test.rb +84 -0
  293. data/test/cases/numeric_data_test.rb +93 -0
  294. data/test/cases/persistence_test.rb +361 -269
  295. data/test/cases/pooled_connections_test.rb +18 -26
  296. data/test/cases/prepared_statement_status_test.rb +48 -0
  297. data/test/cases/primary_keys_test.rb +210 -104
  298. data/test/cases/query_cache_test.rb +610 -141
  299. data/test/cases/quoting_test.rb +132 -31
  300. data/test/cases/readonly_test.rb +49 -48
  301. data/test/cases/reaper_test.rb +146 -32
  302. data/test/cases/reflection_test.rb +167 -156
  303. data/test/cases/relation/delegation_test.rb +49 -36
  304. data/test/cases/relation/delete_all_test.rb +117 -0
  305. data/test/cases/relation/merging_test.rb +319 -42
  306. data/test/cases/relation/mutation_test.rb +55 -93
  307. data/test/cases/relation/or_test.rb +129 -29
  308. data/test/cases/relation/predicate_builder_test.rb +21 -6
  309. data/test/cases/relation/record_fetch_warning_test.rb +5 -3
  310. data/test/cases/relation/select_test.rb +67 -0
  311. data/test/cases/relation/update_all_test.rb +317 -0
  312. data/test/cases/relation/where_chain_test.rb +68 -32
  313. data/test/cases/relation/where_clause_test.rb +136 -61
  314. data/test/cases/relation/where_test.rb +155 -48
  315. data/test/cases/relation_test.rb +266 -112
  316. data/test/cases/relations_test.rb +969 -744
  317. data/test/cases/reload_models_test.rb +13 -9
  318. data/test/cases/reserved_word_test.rb +141 -0
  319. data/test/cases/result_test.rb +68 -17
  320. data/test/cases/sanitize_test.rb +87 -71
  321. data/test/cases/schema_dumper_test.rb +221 -128
  322. data/test/cases/schema_loading_test.rb +3 -2
  323. data/test/cases/scoping/default_scoping_test.rb +185 -144
  324. data/test/cases/scoping/named_scoping_test.rb +177 -89
  325. data/test/cases/scoping/relation_scoping_test.rb +197 -75
  326. data/test/cases/secure_token_test.rb +18 -3
  327. data/test/cases/serialization_test.rb +30 -28
  328. data/test/cases/serialized_attribute_test.rb +133 -42
  329. data/test/cases/signed_id_test.rb +168 -0
  330. data/test/cases/statement_cache_test.rb +41 -24
  331. data/test/cases/statement_invalid_test.rb +42 -0
  332. data/test/cases/store_test.rb +180 -55
  333. data/test/cases/strict_loading_test.rb +473 -0
  334. data/test/cases/suppressor_test.rb +26 -12
  335. data/test/cases/tasks/database_tasks_test.rb +1258 -194
  336. data/test/cases/tasks/mysql_rake_test.rb +370 -298
  337. data/test/cases/tasks/postgresql_rake_test.rb +481 -251
  338. data/test/cases/tasks/sqlite_rake_test.rb +225 -178
  339. data/test/cases/test_case.rb +51 -40
  340. data/test/cases/test_databases_test.rb +79 -0
  341. data/test/cases/test_fixtures_test.rb +79 -19
  342. data/test/cases/time_precision_test.rb +98 -76
  343. data/test/cases/timestamp_test.rb +102 -99
  344. data/test/cases/touch_later_test.rb +12 -10
  345. data/test/cases/transaction_callbacks_test.rb +344 -90
  346. data/test/cases/transaction_isolation_test.rb +12 -12
  347. data/test/cases/transactions_test.rb +612 -162
  348. data/test/cases/type/adapter_specific_registry_test.rb +14 -2
  349. data/test/cases/type/date_time_test.rb +4 -2
  350. data/test/cases/type/integer_test.rb +4 -2
  351. data/test/cases/type/string_test.rb +10 -8
  352. data/test/cases/type/time_test.rb +28 -0
  353. data/test/cases/type/type_map_test.rb +29 -28
  354. data/test/cases/type/unsigned_integer_test.rb +19 -0
  355. data/test/cases/type_test.rb +2 -0
  356. data/test/cases/types_test.rb +3 -1
  357. data/test/cases/unconnected_test.rb +14 -1
  358. data/test/cases/unsafe_raw_sql_test.rb +274 -0
  359. data/test/cases/validations/absence_validation_test.rb +19 -17
  360. data/test/cases/validations/association_validation_test.rb +30 -28
  361. data/test/cases/validations/i18n_generate_message_validation_test.rb +34 -16
  362. data/test/cases/validations/i18n_validation_test.rb +22 -21
  363. data/test/cases/validations/length_validation_test.rb +34 -33
  364. data/test/cases/validations/numericality_validation_test.rb +181 -0
  365. data/test/cases/validations/presence_validation_test.rb +21 -19
  366. data/test/cases/validations/uniqueness_validation_test.rb +156 -86
  367. data/test/cases/validations_repair_helper.rb +2 -0
  368. data/test/cases/validations_test.rb +61 -26
  369. data/test/cases/view_test.rb +122 -116
  370. data/test/cases/yaml_serialization_test.rb +79 -34
  371. data/test/config.example.yml +19 -19
  372. data/test/config.rb +3 -1
  373. data/test/config.yml +16 -6
  374. data/test/fixtures/all/namespaced/accounts.yml +2 -0
  375. data/test/fixtures/author_addresses.yml +1 -8
  376. data/test/fixtures/authors.yml +1 -7
  377. data/test/fixtures/binaries.yml +4 -0
  378. data/test/fixtures/books.yml +9 -2
  379. data/test/fixtures/categories_posts.yml +3 -0
  380. data/test/fixtures/citations.yml +5 -0
  381. data/test/fixtures/comments.yml +7 -0
  382. data/test/fixtures/companies.yml +5 -0
  383. data/test/fixtures/computers.yml +2 -0
  384. data/test/fixtures/customers.yml +10 -1
  385. data/test/fixtures/developers.yml +1 -1
  386. data/test/fixtures/essays.yml +10 -0
  387. data/test/fixtures/faces.yml +3 -3
  388. data/test/fixtures/humans.yml +5 -0
  389. data/test/fixtures/interests.yml +7 -7
  390. data/test/fixtures/memberships.yml +7 -0
  391. data/test/fixtures/minimalistics.yml +3 -0
  392. data/test/fixtures/mixed_case_monkeys.yml +2 -2
  393. data/test/fixtures/naked/yml/courses_with_invalid_key.yml +3 -0
  394. data/test/fixtures/naked/yml/parrots.yml +1 -0
  395. data/test/fixtures/other_books.yml +26 -0
  396. data/test/fixtures/other_posts.yml +1 -0
  397. data/test/fixtures/parrots.yml +7 -1
  398. data/test/fixtures/pirates.yml +3 -0
  399. data/test/fixtures/posts.yml +11 -3
  400. data/test/fixtures/readers.yml +6 -0
  401. data/test/fixtures/reserved_words/values.yml +2 -2
  402. data/test/fixtures/sponsors.yml +3 -0
  403. data/test/fixtures/strict_zines.yml +2 -0
  404. data/test/fixtures/subscribers.yml +1 -1
  405. data/test/fixtures/tasks.yml +1 -1
  406. data/test/fixtures/warehouse-things.yml +3 -0
  407. data/test/migrations/10_urban/9_add_expressions.rb +2 -0
  408. data/test/migrations/decimal/1_give_me_big_numbers.rb +6 -4
  409. data/test/migrations/magic/1_currencies_have_symbols.rb +3 -2
  410. data/test/migrations/missing/1000_people_have_middle_names.rb +2 -0
  411. data/test/migrations/missing/1_people_have_last_names.rb +2 -0
  412. data/test/migrations/missing/3_we_need_reminders.rb +2 -0
  413. data/test/migrations/missing/4_innocent_jointable.rb +3 -1
  414. data/test/migrations/rename/1_we_need_things.rb +2 -0
  415. data/test/migrations/rename/2_rename_things.rb +2 -0
  416. data/test/migrations/to_copy/1_people_have_hobbies.rb +3 -1
  417. data/test/migrations/to_copy/2_people_have_descriptions.rb +3 -1
  418. data/test/migrations/to_copy2/1_create_articles.rb +2 -0
  419. data/test/migrations/to_copy2/2_create_comments.rb +3 -1
  420. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +3 -1
  421. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +3 -1
  422. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +3 -1
  423. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +2 -0
  424. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +2 -0
  425. data/test/migrations/valid/1_valid_people_have_last_names.rb +2 -0
  426. data/test/migrations/valid/2_we_need_reminders.rb +2 -0
  427. data/test/migrations/valid/3_innocent_jointable.rb +3 -1
  428. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +2 -0
  429. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -0
  430. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +3 -1
  431. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +2 -0
  432. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +2 -0
  433. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +3 -1
  434. data/test/migrations/version_check/20131219224947_migration_version_check.rb +2 -0
  435. data/test/models/account.rb +46 -0
  436. data/test/models/admin/account.rb +3 -1
  437. data/test/models/admin/randomly_named_c1.rb +2 -0
  438. data/test/models/admin/user.rb +16 -8
  439. data/test/models/admin.rb +4 -2
  440. data/test/models/aircraft.rb +3 -1
  441. data/test/models/arunit2_model.rb +2 -0
  442. data/test/models/author.rb +153 -102
  443. data/test/models/auto_id.rb +2 -0
  444. data/test/models/autoloadable/extra_firm.rb +2 -0
  445. data/test/models/binary.rb +3 -1
  446. data/test/models/binary_field.rb +6 -0
  447. data/test/models/bird.rb +13 -1
  448. data/test/models/book.rb +14 -4
  449. data/test/models/book_destroy_async.rb +24 -0
  450. data/test/models/boolean.rb +5 -0
  451. data/test/models/bulb.rb +13 -4
  452. data/test/models/cake_designer.rb +2 -0
  453. data/test/models/car.rb +17 -10
  454. data/test/models/carrier.rb +2 -0
  455. data/test/models/cart.rb +5 -0
  456. data/test/models/cat.rb +2 -0
  457. data/test/models/categorization.rb +8 -6
  458. data/test/models/category.rb +28 -16
  459. data/test/models/chef.rb +2 -0
  460. data/test/models/citation.rb +5 -1
  461. data/test/models/club.rb +13 -10
  462. data/test/models/college.rb +4 -2
  463. data/test/models/column.rb +2 -0
  464. data/test/models/column_name.rb +2 -0
  465. data/test/models/comment.rb +32 -10
  466. data/test/models/company.rb +102 -106
  467. data/test/models/company_in_module.rb +27 -26
  468. data/test/models/computer.rb +3 -1
  469. data/test/models/contact.rb +15 -13
  470. data/test/models/content.rb +5 -3
  471. data/test/models/contract.rb +21 -3
  472. data/test/models/country.rb +2 -4
  473. data/test/models/course.rb +3 -1
  474. data/test/models/customer.rb +10 -8
  475. data/test/models/customer_carrier.rb +2 -0
  476. data/test/models/dashboard.rb +2 -0
  477. data/test/models/default.rb +2 -0
  478. data/test/models/department.rb +2 -0
  479. data/test/models/destroy_async_parent.rb +15 -0
  480. data/test/models/destroy_async_parent_soft_delete.rb +20 -0
  481. data/test/models/developer.rb +152 -85
  482. data/test/models/dl_keyed_belongs_to.rb +13 -0
  483. data/test/models/dl_keyed_belongs_to_soft_delete.rb +19 -0
  484. data/test/models/dl_keyed_has_many.rb +5 -0
  485. data/test/models/dl_keyed_has_many_through.rb +5 -0
  486. data/test/models/dl_keyed_has_one.rb +5 -0
  487. data/test/models/dl_keyed_join.rb +10 -0
  488. data/test/models/dog.rb +2 -0
  489. data/test/models/dog_lover.rb +2 -0
  490. data/test/models/doubloon.rb +3 -1
  491. data/test/models/drink_designer.rb +17 -0
  492. data/test/models/edge.rb +4 -2
  493. data/test/models/electron.rb +2 -0
  494. data/test/models/engine.rb +3 -2
  495. data/test/models/entrant.rb +2 -0
  496. data/test/models/entry.rb +5 -0
  497. data/test/models/essay.rb +6 -3
  498. data/test/models/essay_destroy_async.rb +12 -0
  499. data/test/models/event.rb +3 -1
  500. data/test/models/eye.rb +5 -3
  501. data/test/models/face.rb +14 -6
  502. data/test/models/family.rb +6 -0
  503. data/test/models/family_tree.rb +6 -0
  504. data/test/models/friendship.rb +5 -3
  505. data/test/models/frog.rb +8 -0
  506. data/test/models/guid.rb +3 -1
  507. data/test/models/guitar.rb +2 -0
  508. data/test/models/hotel.rb +5 -3
  509. data/test/models/human.rb +39 -0
  510. data/test/models/image.rb +3 -1
  511. data/test/models/interest.rb +14 -3
  512. data/test/models/invoice.rb +4 -2
  513. data/test/models/item.rb +3 -1
  514. data/test/models/job.rb +5 -3
  515. data/test/models/joke.rb +4 -2
  516. data/test/models/keyboard.rb +3 -1
  517. data/test/models/legacy_thing.rb +2 -0
  518. data/test/models/lesson.rb +2 -0
  519. data/test/models/line_item.rb +3 -1
  520. data/test/models/liquid.rb +2 -0
  521. data/test/models/matey.rb +3 -1
  522. data/test/models/measurement.rb +4 -0
  523. data/test/models/member.rb +23 -20
  524. data/test/models/member_detail.rb +3 -0
  525. data/test/models/member_type.rb +2 -0
  526. data/test/models/membership.rb +4 -1
  527. data/test/models/mentor.rb +3 -1
  528. data/test/models/message.rb +5 -0
  529. data/test/models/minimalistic.rb +2 -0
  530. data/test/models/minivan.rb +3 -2
  531. data/test/models/mixed_case_monkey.rb +3 -1
  532. data/test/models/molecule.rb +2 -0
  533. data/test/models/mouse.rb +6 -0
  534. data/test/models/movie.rb +2 -0
  535. data/test/models/node.rb +4 -2
  536. data/test/models/non_primary_key.rb +2 -0
  537. data/test/models/notification.rb +2 -0
  538. data/test/models/numeric_data.rb +12 -0
  539. data/test/models/order.rb +4 -2
  540. data/test/models/organization.rb +9 -7
  541. data/test/models/other_dog.rb +3 -1
  542. data/test/models/owner.rb +6 -4
  543. data/test/models/parrot.rb +12 -4
  544. data/test/models/person.rb +59 -54
  545. data/test/models/personal_legacy_thing.rb +3 -1
  546. data/test/models/pet.rb +4 -2
  547. data/test/models/pet_treasure.rb +2 -0
  548. data/test/models/pirate.rb +67 -43
  549. data/test/models/possession.rb +3 -1
  550. data/test/models/post.rb +184 -86
  551. data/test/models/price_estimate.rb +11 -1
  552. data/test/models/professor.rb +3 -1
  553. data/test/models/project.rb +14 -12
  554. data/test/models/publisher/article.rb +2 -0
  555. data/test/models/publisher/magazine.rb +2 -0
  556. data/test/models/publisher.rb +2 -0
  557. data/test/models/randomly_named_c1.rb +2 -0
  558. data/test/models/rating.rb +5 -1
  559. data/test/models/reader.rb +7 -5
  560. data/test/models/recipe.rb +2 -0
  561. data/test/models/record.rb +2 -0
  562. data/test/models/reference.rb +6 -3
  563. data/test/models/reply.rb +39 -21
  564. data/test/models/room.rb +6 -0
  565. data/test/models/section.rb +6 -0
  566. data/test/models/seminar.rb +6 -0
  567. data/test/models/session.rb +6 -0
  568. data/test/models/ship.rb +12 -9
  569. data/test/models/ship_part.rb +5 -3
  570. data/test/models/shop.rb +4 -2
  571. data/test/models/shop_account.rb +2 -0
  572. data/test/models/speedometer.rb +2 -0
  573. data/test/models/sponsor.rb +8 -5
  574. data/test/models/squeak.rb +6 -0
  575. data/test/models/strict_zine.rb +7 -0
  576. data/test/models/string_key_object.rb +2 -0
  577. data/test/models/student.rb +2 -0
  578. data/test/models/subscriber.rb +4 -2
  579. data/test/models/subscription.rb +5 -1
  580. data/test/models/tag.rb +6 -3
  581. data/test/models/tagging.rb +13 -6
  582. data/test/models/task.rb +2 -0
  583. data/test/models/topic.rb +54 -19
  584. data/test/models/toy.rb +4 -0
  585. data/test/models/traffic_light.rb +2 -0
  586. data/test/models/treasure.rb +5 -3
  587. data/test/models/treaty.rb +2 -4
  588. data/test/models/tree.rb +2 -0
  589. data/test/models/tuning_peg.rb +2 -0
  590. data/test/models/tyre.rb +2 -0
  591. data/test/models/user.rb +12 -4
  592. data/test/models/uuid_child.rb +2 -0
  593. data/test/models/uuid_item.rb +2 -0
  594. data/test/models/uuid_parent.rb +2 -0
  595. data/test/models/vegetables.rb +12 -3
  596. data/test/models/vertex.rb +6 -4
  597. data/test/models/warehouse_thing.rb +2 -0
  598. data/test/models/wheel.rb +3 -1
  599. data/test/models/without_table.rb +3 -1
  600. data/test/models/zine.rb +3 -1
  601. data/test/schema/mysql2_specific_schema.rb +49 -35
  602. data/test/schema/oracle_specific_schema.rb +13 -15
  603. data/test/schema/postgresql_specific_schema.rb +51 -40
  604. data/test/schema/schema.rb +334 -154
  605. data/test/schema/sqlite_specific_schema.rb +9 -16
  606. data/test/support/config.rb +26 -26
  607. data/test/support/connection.rb +14 -8
  608. data/test/support/connection_helper.rb +3 -1
  609. data/test/support/ddl_helper.rb +2 -0
  610. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic.dump +0 -0
  611. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic_associations.dump +0 -0
  612. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic.dump +0 -0
  613. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic_associations.dump +0 -0
  614. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic.dump +0 -0
  615. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic_associations.dump +0 -0
  616. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic.dump +0 -0
  617. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic_associations.dump +0 -0
  618. data/test/support/marshal_compatibility_fixtures/legacy_6_0_record_mysql.dump +0 -0
  619. data/test/support/marshal_compatibility_fixtures/legacy_relation.dump +0 -0
  620. data/test/support/schema_dumping_helper.rb +2 -0
  621. data/test/support/stubs/strong_parameters.rb +40 -0
  622. data/test/support/yaml_compatibility_fixtures/rails_v1_mysql.yml +206 -0
  623. data/test/support/yaml_compatibility_fixtures/rails_v2.yml +55 -0
  624. metadata +196 -11
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cases/helper"
2
4
 
3
5
  module ActiveRecord
@@ -74,7 +76,6 @@ module ActiveRecord
74
76
  end
75
77
 
76
78
  test "construct args are passed to the type" do
77
- type = Struct.new(:args)
78
79
  registry = Type::AdapterSpecificRegistry.new
79
80
  registry.register(:foo, type)
80
81
 
@@ -115,7 +116,6 @@ module ActiveRecord
115
116
 
116
117
  test "registering adapter specific modifiers" do
117
118
  decoration = Struct.new(:value)
118
- type = Struct.new(:args)
119
119
  registry = Type::AdapterSpecificRegistry.new
120
120
  registry.register(:foo, type)
121
121
  registry.add_modifier({ array: true }, decoration, adapter: :postgresql)
@@ -129,5 +129,17 @@ module ActiveRecord
129
129
  registry.lookup(:foo, array: true, adapter: :sqlite3)
130
130
  )
131
131
  end
132
+
133
+ TYPE = Class.new do
134
+ attr_reader :args
135
+
136
+ def initialize(args = nil)
137
+ @args = args
138
+ end
139
+
140
+ def ==(other) self.args == other.args end
141
+ end
142
+
143
+ private def type; TYPE end
132
144
  end
133
145
  end
@@ -1,11 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cases/helper"
2
4
  require "models/task"
3
5
 
4
6
  module ActiveRecord
5
7
  module Type
6
- class IntegerTest < ActiveRecord::TestCase
8
+ class DateTimeTest < ActiveRecord::TestCase
7
9
  def test_datetime_seconds_precision_applied_to_timestamp
8
- skip "This test is invalid if subsecond precision isn't supported" unless subsecond_precision_supported?
10
+ skip "This test is invalid if subsecond precision isn't supported" unless supports_datetime_with_precision?
9
11
  p = Task.create!(starting: ::Time.now)
10
12
  assert_equal p.starting.usec, p.reload.starting.usec
11
13
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cases/helper"
2
4
  require "models/company"
3
5
 
@@ -6,13 +8,13 @@ module ActiveRecord
6
8
  class IntegerTest < ActiveRecord::TestCase
7
9
  test "casting ActiveRecord models" do
8
10
  type = Type::Integer.new
9
- firm = Firm.create(:name => 'Apple')
11
+ firm = Firm.create(name: "Apple")
10
12
  assert_nil type.cast(firm)
11
13
  end
12
14
 
13
15
  test "values which are out of range can be re-assigned" do
14
16
  klass = Class.new(ActiveRecord::Base) do
15
- self.table_name = 'posts'
17
+ self.table_name = "posts"
16
18
  attribute :foo, :integer
17
19
  end
18
20
  model = klass.new
@@ -1,22 +1,24 @@
1
- require 'cases/helper'
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
2
4
 
3
5
  module ActiveRecord
4
6
  class StringTypeTest < ActiveRecord::TestCase
5
7
  test "string mutations are detected" do
6
8
  klass = Class.new(Base)
7
- klass.table_name = 'authors'
9
+ klass.table_name = "authors"
8
10
 
9
- author = klass.create!(name: 'Sean')
10
- assert_not author.changed?
11
+ author = klass.create!(name: "Sean")
12
+ assert_not_predicate author, :changed?
11
13
 
12
- author.name << ' Griffin'
13
- assert author.name_changed?
14
+ author.name << " Griffin"
15
+ assert_predicate author, :name_changed?
14
16
 
15
17
  author.save!
16
18
  author.reload
17
19
 
18
- assert_equal 'Sean Griffin', author.name
19
- assert_not author.changed?
20
+ assert_equal "Sean Griffin", author.name
21
+ assert_not_predicate author, :changed?
20
22
  end
21
23
  end
22
24
  end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "models/topic"
5
+
6
+ module ActiveRecord
7
+ module Type
8
+ class TimeTest < ActiveRecord::TestCase
9
+ def test_default_year_is_correct
10
+ expected_time = ::Time.utc(2000, 1, 1, 10, 30, 0)
11
+ topic = Topic.new(bonus_time: { 4 => 10, 5 => 30 })
12
+
13
+ assert_equal expected_time, topic.bonus_time
14
+ assert_instance_of ::Time, topic.bonus_time
15
+
16
+ topic.save!
17
+
18
+ assert_equal expected_time, topic.bonus_time
19
+ assert_instance_of ::Time, topic.bonus_time
20
+
21
+ topic.reload
22
+
23
+ assert_equal expected_time, topic.bonus_time
24
+ assert_instance_of ::Time, topic.bonus_time
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cases/helper"
2
4
 
3
5
  module ActiveRecord
@@ -15,7 +17,7 @@ module ActiveRecord
15
17
 
16
18
  mapping.register_type(/boolean/i, boolean)
17
19
 
18
- assert_equal mapping.lookup('boolean'), boolean
20
+ assert_equal mapping.lookup("boolean"), boolean
19
21
  end
20
22
 
21
23
  def test_overriding_registered_types
@@ -26,26 +28,26 @@ module ActiveRecord
26
28
  mapping.register_type(/time/i, time)
27
29
  mapping.register_type(/time/i, timestamp)
28
30
 
29
- assert_equal mapping.lookup('time'), timestamp
31
+ assert_equal mapping.lookup("time"), timestamp
30
32
  end
31
33
 
32
34
  def test_fuzzy_lookup
33
- string = String.new
35
+ string = +""
34
36
  mapping = TypeMap.new
35
37
 
36
38
  mapping.register_type(/varchar/i, string)
37
39
 
38
- assert_equal mapping.lookup('varchar(20)'), string
40
+ assert_equal mapping.lookup("varchar(20)"), string
39
41
  end
40
42
 
41
43
  def test_aliasing_types
42
- string = String.new
44
+ string = +""
43
45
  mapping = TypeMap.new
44
46
 
45
47
  mapping.register_type(/string/i, string)
46
- mapping.alias_type(/varchar/i, 'string')
48
+ mapping.alias_type(/varchar/i, "string")
47
49
 
48
- assert_equal mapping.lookup('varchar'), string
50
+ assert_equal mapping.lookup("varchar"), string
49
51
  end
50
52
 
51
53
  def test_changing_type_changes_aliases
@@ -54,37 +56,37 @@ module ActiveRecord
54
56
  mapping = TypeMap.new
55
57
 
56
58
  mapping.register_type(/timestamp/i, time)
57
- mapping.alias_type(/datetime/i, 'timestamp')
59
+ mapping.alias_type(/datetime/i, "timestamp")
58
60
  mapping.register_type(/timestamp/i, timestamp)
59
61
 
60
- assert_equal mapping.lookup('datetime'), timestamp
62
+ assert_equal mapping.lookup("datetime"), timestamp
61
63
  end
62
64
 
63
65
  def test_aliases_keep_metadata
64
66
  mapping = TypeMap.new
65
67
 
66
68
  mapping.register_type(/decimal/i) { |sql_type| sql_type }
67
- mapping.alias_type(/number/i, 'decimal')
69
+ mapping.alias_type(/number/i, "decimal")
68
70
 
69
- assert_equal mapping.lookup('number(20)'), 'decimal(20)'
70
- assert_equal mapping.lookup('number'), 'decimal'
71
+ assert_equal mapping.lookup("number(20)"), "decimal(20)"
72
+ assert_equal mapping.lookup("number"), "decimal"
71
73
  end
72
74
 
73
75
  def test_register_proc
74
- string = String.new
76
+ string = +""
75
77
  binary = Binary.new
76
78
  mapping = TypeMap.new
77
79
 
78
80
  mapping.register_type(/varchar/i) do |type|
79
- if type.include?('(')
81
+ if type.include?("(")
80
82
  string
81
83
  else
82
84
  binary
83
85
  end
84
86
  end
85
87
 
86
- assert_equal mapping.lookup('varchar(20)'), string
87
- assert_equal mapping.lookup('varchar'), binary
88
+ assert_equal mapping.lookup("varchar(20)"), string
89
+ assert_equal mapping.lookup("varchar"), binary
88
90
  end
89
91
 
90
92
  def test_additional_lookup_args
@@ -92,16 +94,16 @@ module ActiveRecord
92
94
 
93
95
  mapping.register_type(/varchar/i) do |type, limit|
94
96
  if limit > 255
95
- 'text'
97
+ "text"
96
98
  else
97
- 'string'
99
+ "string"
98
100
  end
99
101
  end
100
- mapping.alias_type(/string/i, 'varchar')
102
+ mapping.alias_type(/string/i, "varchar")
101
103
 
102
- assert_equal mapping.lookup('varchar', 200), 'string'
103
- assert_equal mapping.lookup('varchar', 400), 'text'
104
- assert_equal mapping.lookup('string', 400), 'text'
104
+ assert_equal mapping.lookup("varchar", 200), "string"
105
+ assert_equal mapping.lookup("varchar", 400), "text"
106
+ assert_equal mapping.lookup("string", 400), "text"
105
107
  end
106
108
 
107
109
  def test_requires_value_or_block
@@ -115,13 +117,13 @@ module ActiveRecord
115
117
  def test_lookup_non_strings
116
118
  mapping = HashLookupTypeMap.new
117
119
 
118
- mapping.register_type(1, 'string')
119
- mapping.register_type(2, 'int')
120
+ mapping.register_type(1, "string")
121
+ mapping.register_type(2, "int")
120
122
  mapping.alias_type(3, 1)
121
123
 
122
- assert_equal mapping.lookup(1), 'string'
123
- assert_equal mapping.lookup(2), 'int'
124
- assert_equal mapping.lookup(3), 'string'
124
+ assert_equal mapping.lookup(1), "string"
125
+ assert_equal mapping.lookup(2), "int"
126
+ assert_equal mapping.lookup(3), "string"
125
127
  assert_kind_of Type::Value, mapping.lookup(4)
126
128
  end
127
129
 
@@ -174,4 +176,3 @@ module ActiveRecord
174
176
  end
175
177
  end
176
178
  end
177
-
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+
5
+ module ActiveRecord
6
+ module Type
7
+ class UnsignedIntegerTest < ActiveRecord::TestCase
8
+ test "unsigned int max value is in range" do
9
+ assert_equal(4294967295, UnsignedInteger.new.serialize(4294967295))
10
+ end
11
+
12
+ test "minus value is out of range" do
13
+ assert_raises(ActiveModel::RangeError) do
14
+ UnsignedInteger.new.serialize(-1)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cases/helper"
2
4
 
3
5
  class TypeTest < ActiveRecord::TestCase
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cases/helper"
2
4
 
3
5
  module ActiveRecord
@@ -9,7 +11,7 @@ module ActiveRecord
9
11
  raise
10
12
  end
11
13
  klass = Class.new(ActiveRecord::Base) do
12
- self.table_name = 'posts'
14
+ self.table_name = "posts"
13
15
  attribute :foo, type_which_cannot_go_to_the_database
14
16
  end
15
17
  model = klass.new
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cases/helper"
2
4
 
3
5
  class TestRecord < ActiveRecord::Base
@@ -9,6 +11,9 @@ class TestUnconnectedAdapter < ActiveRecord::TestCase
9
11
  def setup
10
12
  @underlying = ActiveRecord::Base.connection
11
13
  @specification = ActiveRecord::Base.remove_connection
14
+
15
+ # Clear out connection info from other pids (like a fork parent) too
16
+ ActiveRecord::ConnectionAdapters::PoolConfig.discard_pools!
12
17
  end
13
18
 
14
19
  teardown do
@@ -27,7 +32,15 @@ class TestUnconnectedAdapter < ActiveRecord::TestCase
27
32
  end
28
33
  end
29
34
 
35
+ def test_error_message_when_connection_not_established
36
+ error = assert_raise(ActiveRecord::ConnectionNotEstablished) do
37
+ TestRecord.find(1)
38
+ end
39
+
40
+ assert_equal "No connection pool for 'ActiveRecord::Base' found.", error.message
41
+ end
42
+
30
43
  def test_underlying_adapter_no_longer_active
31
- assert !@underlying.active?, "Removed adapter should no longer be active"
44
+ assert_not @underlying.active?, "Removed adapter should no longer be active"
32
45
  end
33
46
  end
@@ -0,0 +1,274 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "models/post"
5
+ require "models/comment"
6
+
7
+ class UnsafeRawSqlTest < ActiveRecord::TestCase
8
+ fixtures :posts, :comments
9
+
10
+ test "order: allows string column name" do
11
+ ids_expected = Post.order(Arel.sql("title")).pluck(:id)
12
+
13
+ ids = Post.order("title").pluck(:id)
14
+
15
+ assert_equal ids_expected, ids
16
+ end
17
+
18
+ test "order: allows symbol column name" do
19
+ ids_expected = Post.order(Arel.sql("title")).pluck(:id)
20
+
21
+ ids = Post.order(:title).pluck(:id)
22
+
23
+ assert_equal ids_expected, ids
24
+ end
25
+
26
+ test "order: allows downcase symbol direction" do
27
+ ids_expected = Post.order(Arel.sql("title") => Arel.sql("asc")).pluck(:id)
28
+
29
+ ids = Post.order(title: :asc).pluck(:id)
30
+
31
+ assert_equal ids_expected, ids
32
+ end
33
+
34
+ test "order: allows upcase symbol direction" do
35
+ ids_expected = Post.order(Arel.sql("title") => Arel.sql("ASC")).pluck(:id)
36
+
37
+ ids = Post.order(title: :ASC).pluck(:id)
38
+
39
+ assert_equal ids_expected, ids
40
+ end
41
+
42
+ test "order: allows string direction" do
43
+ ids_expected = Post.order(Arel.sql("title") => Arel.sql("asc")).pluck(:id)
44
+
45
+ ids = Post.order(title: "asc").pluck(:id)
46
+
47
+ assert_equal ids_expected, ids
48
+ end
49
+
50
+ test "order: allows multiple columns" do
51
+ ids_expected = Post.order(Arel.sql("author_id"), Arel.sql("title")).pluck(:id)
52
+
53
+ ids = Post.order(:author_id, :title).pluck(:id)
54
+
55
+ assert_equal ids_expected, ids
56
+ end
57
+
58
+ test "order: allows mixed" do
59
+ ids_expected = Post.order(Arel.sql("author_id"), Arel.sql("title") => Arel.sql("asc")).pluck(:id)
60
+
61
+ ids = Post.order(:author_id, title: :asc).pluck(:id)
62
+
63
+ assert_equal ids_expected, ids
64
+ end
65
+
66
+ test "order: allows table and column names" do
67
+ ids_expected = Post.order(Arel.sql("title")).pluck(:id)
68
+
69
+ ids = Post.order("posts.title").pluck(:id)
70
+
71
+ assert_equal ids_expected, ids
72
+ end
73
+
74
+ test "order: allows quoted table and column names" do
75
+ ids_expected = Post.order(Arel.sql("title")).pluck(:id)
76
+
77
+ quoted_title = Post.connection.quote_table_name("posts.title")
78
+ ids = Post.order(quoted_title).pluck(:id)
79
+
80
+ assert_equal ids_expected, ids
81
+ end
82
+
83
+ test "order: allows column name and direction in string" do
84
+ ids_expected = Post.order(Arel.sql("title desc")).pluck(:id)
85
+
86
+ ids = Post.order("title desc").pluck(:id)
87
+
88
+ assert_equal ids_expected, ids
89
+ end
90
+
91
+ test "order: allows table name, column name and direction in string" do
92
+ ids_expected = Post.order(Arel.sql("title desc")).pluck(:id)
93
+
94
+ ids = Post.order("posts.title desc").pluck(:id)
95
+
96
+ assert_equal ids_expected, ids
97
+ end
98
+
99
+ test "order: allows NULLS FIRST and NULLS LAST too" do
100
+ raise "precondition failed" if Post.count < 2
101
+
102
+ # Ensure there are NULL and non-NULL post types.
103
+ Post.first.update_column(:type, nil)
104
+ Post.last.update_column(:type, "Programming")
105
+
106
+ ["asc", "desc", ""].each do |direction|
107
+ %w(first last).each do |position|
108
+ ids_expected = Post.order(Arel.sql("type::text #{direction} nulls #{position}")).pluck(:id)
109
+
110
+ ids = Post.order("type::text #{direction} nulls #{position}").pluck(:id)
111
+
112
+ assert_equal ids_expected, ids
113
+ end
114
+ end
115
+ end if current_adapter?(:PostgreSQLAdapter)
116
+
117
+ test "order: disallows invalid column name" do
118
+ assert_raises(ActiveRecord::UnknownAttributeReference) do
119
+ Post.order("REPLACE(title, 'misc', 'zzzz') asc").pluck(:id)
120
+ end
121
+ end
122
+
123
+ test "order: disallows invalid direction" do
124
+ assert_raises(ArgumentError) do
125
+ Post.order(title: :foo).pluck(:id)
126
+ end
127
+ end
128
+
129
+ test "order: disallows invalid column with direction" do
130
+ assert_raises(ActiveRecord::UnknownAttributeReference) do
131
+ Post.order("REPLACE(title, 'misc', 'zzzz')" => :asc).pluck(:id)
132
+ end
133
+ end
134
+
135
+ test "order: always allows Arel" do
136
+ titles = Post.order(Arel.sql("length(title)")).pluck(:title)
137
+
138
+ assert_not_empty titles
139
+ end
140
+
141
+ test "order: allows Arel.sql with binds" do
142
+ ids_expected = Post.order(Arel.sql("REPLACE(title, 'misc', 'zzzz'), id")).pluck(:id)
143
+
144
+ ids = Post.order([Arel.sql("REPLACE(title, ?, ?), id"), "misc", "zzzz"]).pluck(:id)
145
+
146
+ assert_equal ids_expected, ids
147
+ end
148
+
149
+ test "order: disallows invalid bind statement" do
150
+ assert_raises(ActiveRecord::UnknownAttributeReference) do
151
+ Post.order(["REPLACE(title, ?, ?), id", "misc", "zzzz"]).pluck(:id)
152
+ end
153
+ end
154
+
155
+ test "order: disallows invalid Array arguments" do
156
+ assert_raises(ActiveRecord::UnknownAttributeReference) do
157
+ Post.order(["author_id", "REPLACE(title, 'misc', 'zzzz')"]).pluck(:id)
158
+ end
159
+ end
160
+
161
+ test "order: allows valid Array arguments" do
162
+ ids_expected = Post.order(Arel.sql("author_id, length(title)")).pluck(:id)
163
+
164
+ ids = Post.order(["author_id", "length(title)"]).pluck(:id)
165
+
166
+ assert_equal ids_expected, ids
167
+ end
168
+
169
+ test "order: logs deprecation warning for unrecognized column" do
170
+ e = assert_raises(ActiveRecord::UnknownAttributeReference) do
171
+ Post.order("REPLACE(title, 'misc', 'zzzz')")
172
+ end
173
+
174
+ assert_match(/Query method called with non-attribute argument\(s\):/, e.message)
175
+ end
176
+
177
+ test "pluck: allows string column name" do
178
+ titles_expected = Post.pluck(Arel.sql("title"))
179
+
180
+ titles = Post.pluck("title")
181
+
182
+ assert_equal titles_expected, titles
183
+ end
184
+
185
+ test "pluck: allows string column name with function and alias" do
186
+ titles_expected = Post.pluck(Arel.sql("UPPER(title)"))
187
+
188
+ titles = Post.pluck("UPPER(title) AS title")
189
+
190
+ assert_equal titles_expected, titles
191
+ end
192
+
193
+ test "pluck: allows symbol column name" do
194
+ titles_expected = Post.pluck(Arel.sql("title"))
195
+
196
+ titles = Post.pluck(:title)
197
+
198
+ assert_equal titles_expected, titles
199
+ end
200
+
201
+ test "pluck: allows multiple column names" do
202
+ values_expected = Post.pluck(Arel.sql("title"), Arel.sql("id"))
203
+
204
+ values = Post.pluck(:title, :id)
205
+
206
+ assert_equal values_expected, values
207
+ end
208
+
209
+ test "pluck: allows column names with includes" do
210
+ values_expected = Post.includes(:comments).pluck(Arel.sql("title"), Arel.sql("id"))
211
+
212
+ values = Post.includes(:comments).pluck(:title, :id)
213
+
214
+ assert_equal values_expected, values
215
+ end
216
+
217
+ test "pluck: allows auto-generated attributes" do
218
+ values_expected = Post.pluck(Arel.sql("tags_count"))
219
+
220
+ values = Post.pluck(:tags_count)
221
+
222
+ assert_equal values_expected, values
223
+ end
224
+
225
+ test "pluck: allows table and column names" do
226
+ titles_expected = Post.pluck(Arel.sql("title"))
227
+
228
+ titles = Post.pluck("posts.title")
229
+
230
+ assert_equal titles_expected, titles
231
+ end
232
+
233
+ test "pluck: allows quoted table and column names" do
234
+ titles_expected = Post.pluck(Arel.sql("title"))
235
+
236
+ quoted_title = Post.connection.quote_table_name("posts.title")
237
+ titles = Post.pluck(quoted_title)
238
+
239
+ assert_equal titles_expected, titles
240
+ end
241
+
242
+ test "pluck: disallows invalid column name" do
243
+ assert_raises(ActiveRecord::UnknownAttributeReference) do
244
+ Post.pluck("REPLACE(title, 'misc', 'zzzz')")
245
+ end
246
+ end
247
+
248
+ test "pluck: disallows invalid column name amongst valid names" do
249
+ assert_raises(ActiveRecord::UnknownAttributeReference) do
250
+ Post.pluck(:title, "REPLACE(title, 'misc', 'zzzz')")
251
+ end
252
+ end
253
+
254
+ test "pluck: disallows invalid column names with includes" do
255
+ assert_raises(ActiveRecord::UnknownAttributeReference) do
256
+ Post.includes(:comments).pluck(:title, "REPLACE(title, 'misc', 'zzzz')")
257
+ end
258
+ end
259
+
260
+ test "pluck: always allows Arel" do
261
+ excepted_values = Post.includes(:comments).pluck(:title).map { |title| [title, title.size] }
262
+ values = Post.includes(:comments).pluck(:title, Arel.sql("length(title)"))
263
+
264
+ assert_equal excepted_values, values
265
+ end
266
+
267
+ test "pluck: logs deprecation warning" do
268
+ e = assert_raises(ActiveRecord::UnknownAttributeReference) do
269
+ Post.includes(:comments).pluck(:title, "REPLACE(title, 'misc', 'zzzz')")
270
+ end
271
+
272
+ assert_match(/Query method called with non-attribute argument\(s\):/, e.message)
273
+ end
274
+ end