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
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../helper"
4
+
5
+ module Arel
6
+ module Nodes
7
+ describe "Distinct" do
8
+ describe "equality" do
9
+ it "is equal to other distinct nodes" do
10
+ array = [Distinct.new, Distinct.new]
11
+ assert_equal 1, array.uniq.size
12
+ end
13
+
14
+ it "is not equal with other nodes" do
15
+ array = [Distinct.new, Node.new]
16
+ assert_equal 2, array.uniq.size
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../helper"
4
+
5
+ module Arel
6
+ module Nodes
7
+ describe "equality" do
8
+ # FIXME: backwards compat
9
+ describe "backwards compat" do
10
+ describe "to_sql" do
11
+ it "takes an engine" do
12
+ engine = FakeRecord::Base.new
13
+ engine.connection.extend Module.new {
14
+ attr_accessor :quote_count
15
+ def quote(*args) @quote_count += 1; super; end
16
+ def quote_column_name(*args) @quote_count += 1; super; end
17
+ def quote_table_name(*args) @quote_count += 1; super; end
18
+ }
19
+ engine.connection.quote_count = 0
20
+
21
+ attr = Table.new(:users)[:id]
22
+ test = attr.eq(10)
23
+ test.to_sql engine
24
+ _(engine.connection.quote_count).must_equal 3
25
+ end
26
+ end
27
+ end
28
+
29
+ describe "or" do
30
+ it "makes an OR node" do
31
+ attr = Table.new(:users)[:id]
32
+ left = attr.eq(10)
33
+ right = attr.eq(11)
34
+ node = left.or right
35
+ _(node.expr.left).must_equal left
36
+ _(node.expr.right).must_equal right
37
+ end
38
+ end
39
+
40
+ describe "and" do
41
+ it "makes and AND node" do
42
+ attr = Table.new(:users)[:id]
43
+ left = attr.eq(10)
44
+ right = attr.eq(11)
45
+ node = left.and right
46
+ _(node.left).must_equal left
47
+ _(node.right).must_equal right
48
+ end
49
+ end
50
+
51
+ it "is equal with equal ivars" do
52
+ array = [Equality.new("foo", "bar"), Equality.new("foo", "bar")]
53
+ assert_equal 1, array.uniq.size
54
+ end
55
+
56
+ it "is not equal with different ivars" do
57
+ array = [Equality.new("foo", "bar"), Equality.new("foo", "baz")]
58
+ assert_equal 2, array.uniq.size
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../helper"
4
+
5
+ class Arel::Nodes::ExtractTest < Arel::Spec
6
+ it "should extract field" do
7
+ table = Arel::Table.new :users
8
+ _(table[:timestamp].extract("date").to_sql).must_be_like %{
9
+ EXTRACT(DATE FROM "users"."timestamp")
10
+ }
11
+ end
12
+
13
+ describe "as" do
14
+ it "should alias the extract" do
15
+ table = Arel::Table.new :users
16
+ _(table[:timestamp].extract("date").as("foo").to_sql).must_be_like %{
17
+ EXTRACT(DATE FROM "users"."timestamp") AS foo
18
+ }
19
+ end
20
+
21
+ it "should not mutate the extract" do
22
+ table = Arel::Table.new :users
23
+ extract = table[:timestamp].extract("date")
24
+ before = extract.dup
25
+ extract.as("foo")
26
+ assert_equal extract, before
27
+ end
28
+ end
29
+
30
+ describe "equality" do
31
+ it "is equal with equal ivars" do
32
+ table = Arel::Table.new :users
33
+ array = [table[:attr].extract("foo"), table[:attr].extract("foo")]
34
+ assert_equal 1, array.uniq.size
35
+ end
36
+
37
+ it "is not equal with different ivars" do
38
+ table = Arel::Table.new :users
39
+ array = [table[:attr].extract("foo"), table[:attr].extract("bar")]
40
+ assert_equal 2, array.uniq.size
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../helper"
4
+
5
+ module Arel
6
+ module Nodes
7
+ describe "False" do
8
+ describe "equality" do
9
+ it "is equal to other false nodes" do
10
+ array = [False.new, False.new]
11
+ assert_equal 1, array.uniq.size
12
+ end
13
+
14
+ it "is not equal with other nodes" do
15
+ array = [False.new, Node.new]
16
+ assert_equal 2, array.uniq.size
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../helper"
4
+
5
+ module Arel
6
+ module Nodes
7
+ class GroupingTest < Arel::Spec
8
+ it "should create Equality nodes" do
9
+ grouping = Grouping.new(Nodes.build_quoted("foo"))
10
+ _(grouping.eq("foo").to_sql).must_be_like "('foo') = 'foo'"
11
+ end
12
+
13
+ describe "equality" do
14
+ it "is equal with equal ivars" do
15
+ array = [Grouping.new("foo"), Grouping.new("foo")]
16
+ assert_equal 1, array.uniq.size
17
+ end
18
+
19
+ it "is not equal with different ivars" do
20
+ array = [Grouping.new("foo"), Grouping.new("bar")]
21
+ assert_equal 2, array.uniq.size
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../helper"
4
+
5
+ module Arel
6
+ module Nodes
7
+ class TestInfixOperation < Arel::Test
8
+ def test_construct
9
+ operation = InfixOperation.new :+, 1, 2
10
+ assert_equal :+, operation.operator
11
+ assert_equal 1, operation.left
12
+ assert_equal 2, operation.right
13
+ end
14
+
15
+ def test_operation_alias
16
+ operation = InfixOperation.new :+, 1, 2
17
+ aliaz = operation.as("zomg")
18
+ assert_kind_of As, aliaz
19
+ assert_equal operation, aliaz.left
20
+ assert_equal "zomg", aliaz.right
21
+ end
22
+
23
+ def test_operation_ordering
24
+ operation = InfixOperation.new :+, 1, 2
25
+ ordering = operation.desc
26
+ assert_kind_of Descending, ordering
27
+ assert_equal operation, ordering.expr
28
+ assert ordering.descending?
29
+ end
30
+
31
+ def test_equality_with_same_ivars
32
+ array = [InfixOperation.new(:+, 1, 2), InfixOperation.new(:+, 1, 2)]
33
+ assert_equal 1, array.uniq.size
34
+ end
35
+
36
+ def test_inequality_with_different_ivars
37
+ array = [InfixOperation.new(:+, 1, 2), InfixOperation.new(:+, 1, 3)]
38
+ assert_equal 2, array.uniq.size
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../helper"
4
+
5
+ describe Arel::Nodes::InsertStatement do
6
+ describe "#clone" do
7
+ it "clones columns and values" do
8
+ statement = Arel::Nodes::InsertStatement.new
9
+ statement.columns = %w[a b c]
10
+ statement.values = %w[x y z]
11
+
12
+ dolly = statement.clone
13
+ _(dolly.columns).must_equal statement.columns
14
+ _(dolly.values).must_equal statement.values
15
+
16
+ _(dolly.columns).wont_be_same_as statement.columns
17
+ _(dolly.values).wont_be_same_as statement.values
18
+ end
19
+ end
20
+
21
+ describe "equality" do
22
+ it "is equal with equal ivars" do
23
+ statement1 = Arel::Nodes::InsertStatement.new
24
+ statement1.columns = %w[a b c]
25
+ statement1.values = %w[x y z]
26
+ statement2 = Arel::Nodes::InsertStatement.new
27
+ statement2.columns = %w[a b c]
28
+ statement2.values = %w[x y z]
29
+ array = [statement1, statement2]
30
+ assert_equal 1, array.uniq.size
31
+ end
32
+
33
+ it "is not equal with different ivars" do
34
+ statement1 = Arel::Nodes::InsertStatement.new
35
+ statement1.columns = %w[a b c]
36
+ statement1.values = %w[x y z]
37
+ statement2 = Arel::Nodes::InsertStatement.new
38
+ statement2.columns = %w[a b c]
39
+ statement2.values = %w[1 2 3]
40
+ array = [statement1, statement2]
41
+ assert_equal 2, array.uniq.size
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../helper"
4
+
5
+ module Arel
6
+ module Nodes
7
+ class TestNamedFunction < Arel::Test
8
+ def test_construct
9
+ function = NamedFunction.new "omg", "zomg"
10
+ assert_equal "omg", function.name
11
+ assert_equal "zomg", function.expressions
12
+ end
13
+
14
+ def test_function_alias
15
+ function = NamedFunction.new "omg", "zomg"
16
+ function = function.as("wth")
17
+ assert_equal "omg", function.name
18
+ assert_equal "zomg", function.expressions
19
+ assert_kind_of SqlLiteral, function.alias
20
+ assert_equal "wth", function.alias
21
+ end
22
+
23
+ def test_construct_with_alias
24
+ function = NamedFunction.new "omg", "zomg", "wth"
25
+ assert_equal "omg", function.name
26
+ assert_equal "zomg", function.expressions
27
+ assert_kind_of SqlLiteral, function.alias
28
+ assert_equal "wth", function.alias
29
+ end
30
+
31
+ def test_equality_with_same_ivars
32
+ array = [
33
+ NamedFunction.new("omg", "zomg", "wth"),
34
+ NamedFunction.new("omg", "zomg", "wth")
35
+ ]
36
+ assert_equal 1, array.uniq.size
37
+ end
38
+
39
+ def test_inequality_with_different_ivars
40
+ array = [
41
+ NamedFunction.new("omg", "zomg", "wth"),
42
+ NamedFunction.new("zomg", "zomg", "wth")
43
+ ]
44
+ assert_equal 2, array.uniq.size
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../helper"
4
+
5
+ module Arel
6
+ class TestNode < Arel::Test
7
+ def test_includes_factory_methods
8
+ assert Arel::Nodes::Node.new.respond_to?(:create_join)
9
+ end
10
+
11
+ def test_all_nodes_are_nodes
12
+ Nodes.constants.map { |k|
13
+ Nodes.const_get(k)
14
+ }.grep(Class).each do |klass|
15
+ next if Nodes::SqlLiteral == klass
16
+ next if Nodes::BindParam == klass
17
+ next if /^Arel::Nodes::(?:Test|.*Test$)/.match?(klass.name)
18
+ assert klass.ancestors.include?(Nodes::Node), klass.name
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../helper"
4
+
5
+ module Arel
6
+ module Nodes
7
+ describe "not" do
8
+ describe "#not" do
9
+ it "makes a NOT node" do
10
+ attr = Table.new(:users)[:id]
11
+ expr = attr.eq(10)
12
+ node = expr.not
13
+ _(node).must_be_kind_of Not
14
+ _(node.expr).must_equal expr
15
+ end
16
+ end
17
+
18
+ describe "equality" do
19
+ it "is equal with equal ivars" do
20
+ array = [Not.new("foo"), Not.new("foo")]
21
+ assert_equal 1, array.uniq.size
22
+ end
23
+
24
+ it "is not equal with different ivars" do
25
+ array = [Not.new("foo"), Not.new("baz")]
26
+ assert_equal 2, array.uniq.size
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../helper"
4
+
5
+ module Arel
6
+ module Nodes
7
+ describe "or" do
8
+ describe "#or" do
9
+ it "makes an OR node" do
10
+ attr = Table.new(:users)[:id]
11
+ left = attr.eq(10)
12
+ right = attr.eq(11)
13
+ node = left.or right
14
+ _(node.expr.left).must_equal left
15
+ _(node.expr.right).must_equal right
16
+
17
+ oror = node.or(right)
18
+ _(oror.expr.left).must_equal node
19
+ _(oror.expr.right).must_equal right
20
+ end
21
+ end
22
+
23
+ describe "equality" do
24
+ it "is equal with equal ivars" do
25
+ array = [Or.new("foo", "bar"), Or.new("foo", "bar")]
26
+ assert_equal 1, array.uniq.size
27
+ end
28
+
29
+ it "is not equal with different ivars" do
30
+ array = [Or.new("foo", "bar"), Or.new("foo", "baz")]
31
+ assert_equal 2, array.uniq.size
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../helper"
4
+
5
+ class Arel::Nodes::OverTest < Arel::Spec
6
+ describe "as" do
7
+ it "should alias the expression" do
8
+ table = Arel::Table.new :users
9
+ _(table[:id].count.over.as("foo").to_sql).must_be_like %{
10
+ COUNT("users"."id") OVER () AS foo
11
+ }
12
+ end
13
+ end
14
+
15
+ describe "with literal" do
16
+ it "should reference the window definition by name" do
17
+ table = Arel::Table.new :users
18
+ _(table[:id].count.over("foo").to_sql).must_be_like %{
19
+ COUNT("users"."id") OVER "foo"
20
+ }
21
+ end
22
+ end
23
+
24
+ describe "with SQL literal" do
25
+ it "should reference the window definition by name" do
26
+ table = Arel::Table.new :users
27
+ _(table[:id].count.over(Arel.sql("foo")).to_sql).must_be_like %{
28
+ COUNT("users"."id") OVER foo
29
+ }
30
+ end
31
+ end
32
+
33
+ describe "with no expression" do
34
+ it "should use empty definition" do
35
+ table = Arel::Table.new :users
36
+ _(table[:id].count.over.to_sql).must_be_like %{
37
+ COUNT("users"."id") OVER ()
38
+ }
39
+ end
40
+ end
41
+
42
+ describe "with expression" do
43
+ it "should use definition in sub-expression" do
44
+ table = Arel::Table.new :users
45
+ window = Arel::Nodes::Window.new.order(table["foo"])
46
+ _(table[:id].count.over(window).to_sql).must_be_like %{
47
+ COUNT("users"."id") OVER (ORDER BY \"users\".\"foo\")
48
+ }
49
+ end
50
+ end
51
+
52
+ describe "equality" do
53
+ it "is equal with equal ivars" do
54
+ array = [
55
+ Arel::Nodes::Over.new("foo", "bar"),
56
+ Arel::Nodes::Over.new("foo", "bar")
57
+ ]
58
+ assert_equal 1, array.uniq.size
59
+ end
60
+
61
+ it "is not equal with different ivars" do
62
+ array = [
63
+ Arel::Nodes::Over.new("foo", "bar"),
64
+ Arel::Nodes::Over.new("foo", "baz")
65
+ ]
66
+ assert_equal 2, array.uniq.size
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../helper"
4
+
5
+ module Arel
6
+ module Nodes
7
+ class TestSelectCore < Arel::Test
8
+ def test_clone
9
+ core = Arel::Nodes::SelectCore.new
10
+ core.froms = %w[a b c]
11
+ core.projections = %w[d e f]
12
+ core.wheres = %w[g h i]
13
+
14
+ dolly = core.clone
15
+
16
+ assert_equal core.froms, dolly.froms
17
+ assert_equal core.projections, dolly.projections
18
+ assert_equal core.wheres, dolly.wheres
19
+
20
+ assert_not_same core.froms, dolly.froms
21
+ assert_not_same core.projections, dolly.projections
22
+ assert_not_same core.wheres, dolly.wheres
23
+ end
24
+
25
+ def test_set_quantifier
26
+ core = Arel::Nodes::SelectCore.new
27
+ core.set_quantifier = Arel::Nodes::Distinct.new
28
+ viz = Arel::Visitors::ToSql.new Table.engine.connection_pool
29
+ assert_match "DISTINCT", viz.accept(core, Collectors::SQLString.new).value
30
+ end
31
+
32
+ def test_equality_with_same_ivars
33
+ core1 = SelectCore.new
34
+ core1.froms = %w[a b c]
35
+ core1.projections = %w[d e f]
36
+ core1.wheres = %w[g h i]
37
+ core1.groups = %w[j k l]
38
+ core1.windows = %w[m n o]
39
+ core1.havings = %w[p q r]
40
+ core1.comment = Arel::Nodes::Comment.new(["comment"])
41
+ core2 = SelectCore.new
42
+ core2.froms = %w[a b c]
43
+ core2.projections = %w[d e f]
44
+ core2.wheres = %w[g h i]
45
+ core2.groups = %w[j k l]
46
+ core2.windows = %w[m n o]
47
+ core2.havings = %w[p q r]
48
+ core2.comment = Arel::Nodes::Comment.new(["comment"])
49
+ array = [core1, core2]
50
+ assert_equal 1, array.uniq.size
51
+ end
52
+
53
+ def test_inequality_with_different_ivars
54
+ core1 = SelectCore.new
55
+ core1.froms = %w[a b c]
56
+ core1.projections = %w[d e f]
57
+ core1.wheres = %w[g h i]
58
+ core1.groups = %w[j k l]
59
+ core1.windows = %w[m n o]
60
+ core1.havings = %w[p q r]
61
+ core1.comment = Arel::Nodes::Comment.new(["comment"])
62
+ core2 = SelectCore.new
63
+ core2.froms = %w[a b c]
64
+ core2.projections = %w[d e f]
65
+ core2.wheres = %w[g h i]
66
+ core2.groups = %w[j k l]
67
+ core2.windows = %w[m n o]
68
+ core2.havings = %w[l o l]
69
+ core2.comment = Arel::Nodes::Comment.new(["comment"])
70
+ array = [core1, core2]
71
+ assert_equal 2, array.uniq.size
72
+ core2.havings = %w[p q r]
73
+ core2.comment = Arel::Nodes::Comment.new(["other"])
74
+ array = [core1, core2]
75
+ assert_equal 2, array.uniq.size
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../helper"
4
+
5
+ describe Arel::Nodes::SelectStatement do
6
+ describe "#clone" do
7
+ it "clones cores" do
8
+ statement = Arel::Nodes::SelectStatement.new %w[a b c]
9
+
10
+ dolly = statement.clone
11
+ _(dolly.cores).must_equal statement.cores
12
+ _(dolly.cores).wont_be_same_as statement.cores
13
+ end
14
+ end
15
+
16
+ describe "equality" do
17
+ it "is equal with equal ivars" do
18
+ statement1 = Arel::Nodes::SelectStatement.new %w[a b c]
19
+ statement1.offset = 1
20
+ statement1.limit = 2
21
+ statement1.lock = false
22
+ statement1.orders = %w[x y z]
23
+ statement1.with = "zomg"
24
+ statement2 = Arel::Nodes::SelectStatement.new %w[a b c]
25
+ statement2.offset = 1
26
+ statement2.limit = 2
27
+ statement2.lock = false
28
+ statement2.orders = %w[x y z]
29
+ statement2.with = "zomg"
30
+ array = [statement1, statement2]
31
+ assert_equal 1, array.uniq.size
32
+ end
33
+
34
+ it "is not equal with different ivars" do
35
+ statement1 = Arel::Nodes::SelectStatement.new %w[a b c]
36
+ statement1.offset = 1
37
+ statement1.limit = 2
38
+ statement1.lock = false
39
+ statement1.orders = %w[x y z]
40
+ statement1.with = "zomg"
41
+ statement2 = Arel::Nodes::SelectStatement.new %w[a b c]
42
+ statement2.offset = 1
43
+ statement2.limit = 2
44
+ statement2.lock = false
45
+ statement2.orders = %w[x y z]
46
+ statement2.with = "wth"
47
+ array = [statement1, statement2]
48
+ assert_equal 2, array.uniq.size
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../helper"
4
+ require "yaml"
5
+
6
+ module Arel
7
+ module Nodes
8
+ class SqlLiteralTest < Arel::Spec
9
+ before do
10
+ @visitor = Visitors::ToSql.new Table.engine.connection
11
+ end
12
+
13
+ def compile(node)
14
+ @visitor.accept(node, Collectors::SQLString.new).value
15
+ end
16
+
17
+ describe "sql" do
18
+ it "makes a sql literal node" do
19
+ sql = Arel.sql "foo"
20
+ _(sql).must_be_kind_of Arel::Nodes::SqlLiteral
21
+ end
22
+ end
23
+
24
+ describe "count" do
25
+ it "makes a count node" do
26
+ node = SqlLiteral.new("*").count
27
+ _(compile(node)).must_be_like %{ COUNT(*) }
28
+ end
29
+
30
+ it "makes a distinct node" do
31
+ node = SqlLiteral.new("*").count true
32
+ _(compile(node)).must_be_like %{ COUNT(DISTINCT *) }
33
+ end
34
+ end
35
+
36
+ describe "equality" do
37
+ it "makes an equality node" do
38
+ node = SqlLiteral.new("foo").eq(1)
39
+ _(compile(node)).must_be_like %{ foo = 1 }
40
+ end
41
+
42
+ it "is equal with equal contents" do
43
+ array = [SqlLiteral.new("foo"), SqlLiteral.new("foo")]
44
+ assert_equal 1, array.uniq.size
45
+ end
46
+
47
+ it "is not equal with different contents" do
48
+ array = [SqlLiteral.new("foo"), SqlLiteral.new("bar")]
49
+ assert_equal 2, array.uniq.size
50
+ end
51
+ end
52
+
53
+ describe 'grouped "or" equality' do
54
+ it "makes a grouping node with an or node" do
55
+ node = SqlLiteral.new("foo").eq_any([1, 2])
56
+ _(compile(node)).must_be_like %{ (foo = 1 OR foo = 2) }
57
+ end
58
+ end
59
+
60
+ describe 'grouped "and" equality' do
61
+ it "makes a grouping node with an and node" do
62
+ node = SqlLiteral.new("foo").eq_all([1, 2])
63
+ _(compile(node)).must_be_like %{ (foo = 1 AND foo = 2) }
64
+ end
65
+ end
66
+
67
+ describe "serialization" do
68
+ it "serializes into YAML" do
69
+ yaml_literal = SqlLiteral.new("foo").to_yaml
70
+ assert_equal("foo", YAML.load(yaml_literal))
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end