sequel 5.20.0 → 5.49.0

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 (511) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +398 -1922
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +7 -7
  5. data/doc/advanced_associations.rdoc +4 -4
  6. data/doc/association_basics.rdoc +80 -16
  7. data/doc/cheat_sheet.rdoc +6 -5
  8. data/doc/code_order.rdoc +10 -12
  9. data/doc/dataset_filtering.rdoc +17 -2
  10. data/doc/fork_safety.rdoc +84 -0
  11. data/doc/migration.rdoc +11 -5
  12. data/doc/model_dataset_method_design.rdoc +1 -1
  13. data/doc/model_plugins.rdoc +1 -1
  14. data/doc/opening_databases.rdoc +10 -2
  15. data/doc/postgresql.rdoc +82 -3
  16. data/doc/querying.rdoc +4 -4
  17. data/doc/release_notes/5.21.0.txt +87 -0
  18. data/doc/release_notes/5.22.0.txt +48 -0
  19. data/doc/release_notes/5.23.0.txt +56 -0
  20. data/doc/release_notes/5.24.0.txt +56 -0
  21. data/doc/release_notes/5.25.0.txt +32 -0
  22. data/doc/release_notes/5.26.0.txt +35 -0
  23. data/doc/release_notes/5.27.0.txt +21 -0
  24. data/doc/release_notes/5.28.0.txt +16 -0
  25. data/doc/release_notes/5.29.0.txt +22 -0
  26. data/doc/release_notes/5.30.0.txt +20 -0
  27. data/doc/release_notes/5.31.0.txt +148 -0
  28. data/doc/release_notes/5.32.0.txt +46 -0
  29. data/doc/release_notes/5.33.0.txt +24 -0
  30. data/doc/release_notes/5.34.0.txt +40 -0
  31. data/doc/release_notes/5.35.0.txt +56 -0
  32. data/doc/release_notes/5.36.0.txt +60 -0
  33. data/doc/release_notes/5.37.0.txt +30 -0
  34. data/doc/release_notes/5.38.0.txt +28 -0
  35. data/doc/release_notes/5.39.0.txt +19 -0
  36. data/doc/release_notes/5.40.0.txt +40 -0
  37. data/doc/release_notes/5.41.0.txt +25 -0
  38. data/doc/release_notes/5.42.0.txt +136 -0
  39. data/doc/release_notes/5.43.0.txt +98 -0
  40. data/doc/release_notes/5.44.0.txt +32 -0
  41. data/doc/release_notes/5.45.0.txt +34 -0
  42. data/doc/release_notes/5.46.0.txt +87 -0
  43. data/doc/release_notes/5.47.0.txt +59 -0
  44. data/doc/release_notes/5.48.0.txt +14 -0
  45. data/doc/release_notes/5.49.0.txt +59 -0
  46. data/doc/sharding.rdoc +2 -0
  47. data/doc/sql.rdoc +13 -1
  48. data/doc/testing.rdoc +20 -7
  49. data/doc/transactions.rdoc +0 -8
  50. data/doc/validations.rdoc +1 -1
  51. data/doc/virtual_rows.rdoc +1 -1
  52. data/lib/sequel/adapters/ado/access.rb +1 -1
  53. data/lib/sequel/adapters/ado.rb +43 -35
  54. data/lib/sequel/adapters/ibmdb.rb +2 -2
  55. data/lib/sequel/adapters/jdbc/mysql.rb +6 -6
  56. data/lib/sequel/adapters/jdbc/postgresql.rb +11 -17
  57. data/lib/sequel/adapters/jdbc/sqlite.rb +29 -0
  58. data/lib/sequel/adapters/jdbc.rb +24 -6
  59. data/lib/sequel/adapters/mysql.rb +1 -1
  60. data/lib/sequel/adapters/mysql2.rb +2 -3
  61. data/lib/sequel/adapters/odbc.rb +8 -6
  62. data/lib/sequel/adapters/oracle.rb +5 -4
  63. data/lib/sequel/adapters/postgres.rb +15 -9
  64. data/lib/sequel/adapters/shared/access.rb +6 -6
  65. data/lib/sequel/adapters/shared/mssql.rb +66 -21
  66. data/lib/sequel/adapters/shared/mysql.rb +27 -10
  67. data/lib/sequel/adapters/shared/oracle.rb +29 -23
  68. data/lib/sequel/adapters/shared/postgres.rb +271 -32
  69. data/lib/sequel/adapters/shared/sqlanywhere.rb +9 -9
  70. data/lib/sequel/adapters/shared/sqlite.rb +161 -19
  71. data/lib/sequel/adapters/sqlanywhere.rb +1 -1
  72. data/lib/sequel/adapters/sqlite.rb +1 -1
  73. data/lib/sequel/adapters/tinytds.rb +15 -2
  74. data/lib/sequel/adapters/utils/mysql_mysql2.rb +4 -1
  75. data/lib/sequel/ast_transformer.rb +6 -0
  76. data/lib/sequel/connection_pool/sharded_single.rb +4 -1
  77. data/lib/sequel/connection_pool/sharded_threaded.rb +12 -12
  78. data/lib/sequel/connection_pool/single.rb +1 -1
  79. data/lib/sequel/connection_pool/threaded.rb +2 -2
  80. data/lib/sequel/core.rb +333 -319
  81. data/lib/sequel/database/connecting.rb +3 -4
  82. data/lib/sequel/database/logging.rb +7 -1
  83. data/lib/sequel/database/misc.rb +31 -12
  84. data/lib/sequel/database/query.rb +3 -1
  85. data/lib/sequel/database/schema_generator.rb +53 -51
  86. data/lib/sequel/database/schema_methods.rb +38 -23
  87. data/lib/sequel/database/transactions.rb +17 -18
  88. data/lib/sequel/dataset/actions.rb +14 -9
  89. data/lib/sequel/dataset/features.rb +16 -0
  90. data/lib/sequel/dataset/misc.rb +2 -2
  91. data/lib/sequel/dataset/placeholder_literalizer.rb +3 -7
  92. data/lib/sequel/dataset/prepared_statements.rb +2 -0
  93. data/lib/sequel/dataset/query.rb +26 -9
  94. data/lib/sequel/dataset/sql.rb +76 -25
  95. data/lib/sequel/dataset.rb +4 -2
  96. data/lib/sequel/deprecated.rb +3 -1
  97. data/lib/sequel/exceptions.rb +2 -0
  98. data/lib/sequel/extensions/_pretty_table.rb +1 -2
  99. data/lib/sequel/extensions/any_not_empty.rb +45 -0
  100. data/lib/sequel/extensions/async_thread_pool.rb +438 -0
  101. data/lib/sequel/extensions/blank.rb +8 -0
  102. data/lib/sequel/extensions/columns_introspection.rb +1 -2
  103. data/lib/sequel/extensions/connection_expiration.rb +2 -2
  104. data/lib/sequel/extensions/connection_validator.rb +2 -2
  105. data/lib/sequel/extensions/core_refinements.rb +2 -0
  106. data/lib/sequel/extensions/date_arithmetic.rb +36 -24
  107. data/lib/sequel/extensions/duplicate_columns_handler.rb +3 -1
  108. data/lib/sequel/extensions/eval_inspect.rb +2 -0
  109. data/lib/sequel/extensions/exclude_or_null.rb +68 -0
  110. data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
  111. data/lib/sequel/extensions/index_caching.rb +9 -7
  112. data/lib/sequel/extensions/inflector.rb +9 -1
  113. data/lib/sequel/extensions/integer64.rb +2 -0
  114. data/lib/sequel/extensions/migration.rb +11 -3
  115. data/lib/sequel/extensions/named_timezones.rb +56 -8
  116. data/lib/sequel/extensions/pagination.rb +1 -1
  117. data/lib/sequel/extensions/pg_array.rb +5 -0
  118. data/lib/sequel/extensions/pg_array_ops.rb +14 -6
  119. data/lib/sequel/extensions/pg_enum.rb +11 -3
  120. data/lib/sequel/extensions/pg_extended_date_support.rb +2 -2
  121. data/lib/sequel/extensions/pg_hstore.rb +6 -0
  122. data/lib/sequel/extensions/pg_hstore_ops.rb +54 -2
  123. data/lib/sequel/extensions/pg_inet.rb +15 -5
  124. data/lib/sequel/extensions/pg_interval.rb +36 -8
  125. data/lib/sequel/extensions/pg_json.rb +387 -123
  126. data/lib/sequel/extensions/pg_json_ops.rb +238 -0
  127. data/lib/sequel/extensions/pg_loose_count.rb +3 -1
  128. data/lib/sequel/extensions/pg_range.rb +17 -9
  129. data/lib/sequel/extensions/pg_range_ops.rb +2 -0
  130. data/lib/sequel/extensions/pg_row.rb +4 -2
  131. data/lib/sequel/extensions/pg_row_ops.rb +24 -0
  132. data/lib/sequel/extensions/pg_timestamptz.rb +2 -0
  133. data/lib/sequel/extensions/query.rb +3 -0
  134. data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
  135. data/lib/sequel/extensions/s.rb +2 -0
  136. data/lib/sequel/extensions/schema_dumper.rb +24 -7
  137. data/lib/sequel/extensions/server_block.rb +18 -7
  138. data/lib/sequel/extensions/sql_comments.rb +2 -2
  139. data/lib/sequel/extensions/string_agg.rb +1 -1
  140. data/lib/sequel/extensions/symbol_aref_refinement.rb +2 -0
  141. data/lib/sequel/extensions/symbol_as_refinement.rb +2 -0
  142. data/lib/sequel/extensions/to_dot.rb +9 -3
  143. data/lib/sequel/model/associations.rb +356 -117
  144. data/lib/sequel/model/base.rb +107 -68
  145. data/lib/sequel/model/errors.rb +10 -1
  146. data/lib/sequel/model/inflections.rb +1 -1
  147. data/lib/sequel/model/plugins.rb +9 -3
  148. data/lib/sequel/model.rb +3 -1
  149. data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
  150. data/lib/sequel/plugins/association_multi_add_remove.rb +85 -0
  151. data/lib/sequel/plugins/association_pks.rb +60 -18
  152. data/lib/sequel/plugins/association_proxies.rb +8 -2
  153. data/lib/sequel/plugins/async_thread_pool.rb +39 -0
  154. data/lib/sequel/plugins/auto_validations.rb +39 -5
  155. data/lib/sequel/plugins/auto_validations_constraint_validations_presence_message.rb +68 -0
  156. data/lib/sequel/plugins/blacklist_security.rb +1 -2
  157. data/lib/sequel/plugins/boolean_subsets.rb +4 -1
  158. data/lib/sequel/plugins/caching.rb +3 -0
  159. data/lib/sequel/plugins/class_table_inheritance.rb +33 -28
  160. data/lib/sequel/plugins/column_encryption.rb +728 -0
  161. data/lib/sequel/plugins/composition.rb +7 -2
  162. data/lib/sequel/plugins/concurrent_eager_loading.rb +174 -0
  163. data/lib/sequel/plugins/constraint_validations.rb +2 -1
  164. data/lib/sequel/plugins/csv_serializer.rb +28 -9
  165. data/lib/sequel/plugins/dataset_associations.rb +4 -1
  166. data/lib/sequel/plugins/dirty.rb +60 -22
  167. data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
  168. data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
  169. data/lib/sequel/plugins/insert_conflict.rb +72 -0
  170. data/lib/sequel/plugins/instance_specific_default.rb +113 -0
  171. data/lib/sequel/plugins/json_serializer.rb +57 -35
  172. data/lib/sequel/plugins/lazy_attributes.rb +1 -1
  173. data/lib/sequel/plugins/many_through_many.rb +108 -9
  174. data/lib/sequel/plugins/nested_attributes.rb +15 -3
  175. data/lib/sequel/plugins/pg_array_associations.rb +58 -41
  176. data/lib/sequel/plugins/pg_auto_constraint_validations.rb +91 -30
  177. data/lib/sequel/plugins/prepared_statements.rb +15 -12
  178. data/lib/sequel/plugins/prepared_statements_safe.rb +1 -3
  179. data/lib/sequel/plugins/rcte_tree.rb +43 -35
  180. data/lib/sequel/plugins/serialization.rb +8 -3
  181. data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
  182. data/lib/sequel/plugins/sharding.rb +11 -5
  183. data/lib/sequel/plugins/single_table_inheritance.rb +22 -15
  184. data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
  185. data/lib/sequel/plugins/static_cache.rb +9 -4
  186. data/lib/sequel/plugins/static_cache_cache.rb +53 -0
  187. data/lib/sequel/plugins/string_stripper.rb +1 -1
  188. data/lib/sequel/plugins/subclasses.rb +2 -0
  189. data/lib/sequel/plugins/throw_failures.rb +1 -1
  190. data/lib/sequel/plugins/timestamps.rb +1 -1
  191. data/lib/sequel/plugins/tree.rb +9 -4
  192. data/lib/sequel/plugins/typecast_on_load.rb +3 -2
  193. data/lib/sequel/plugins/unused_associations.rb +521 -0
  194. data/lib/sequel/plugins/update_or_create.rb +1 -1
  195. data/lib/sequel/plugins/validation_class_methods.rb +5 -1
  196. data/lib/sequel/plugins/validation_helpers.rb +18 -11
  197. data/lib/sequel/plugins/xml_serializer.rb +1 -1
  198. data/lib/sequel/sql.rb +20 -5
  199. data/lib/sequel/timezones.rb +63 -17
  200. data/lib/sequel/version.rb +1 -1
  201. metadata +113 -381
  202. data/Rakefile +0 -151
  203. data/doc/release_notes/4.0.0.txt +0 -262
  204. data/doc/release_notes/4.1.0.txt +0 -85
  205. data/doc/release_notes/4.10.0.txt +0 -226
  206. data/doc/release_notes/4.11.0.txt +0 -147
  207. data/doc/release_notes/4.12.0.txt +0 -105
  208. data/doc/release_notes/4.13.0.txt +0 -169
  209. data/doc/release_notes/4.14.0.txt +0 -68
  210. data/doc/release_notes/4.15.0.txt +0 -56
  211. data/doc/release_notes/4.16.0.txt +0 -36
  212. data/doc/release_notes/4.17.0.txt +0 -38
  213. data/doc/release_notes/4.18.0.txt +0 -36
  214. data/doc/release_notes/4.19.0.txt +0 -45
  215. data/doc/release_notes/4.2.0.txt +0 -129
  216. data/doc/release_notes/4.20.0.txt +0 -79
  217. data/doc/release_notes/4.21.0.txt +0 -94
  218. data/doc/release_notes/4.22.0.txt +0 -72
  219. data/doc/release_notes/4.23.0.txt +0 -65
  220. data/doc/release_notes/4.24.0.txt +0 -99
  221. data/doc/release_notes/4.25.0.txt +0 -181
  222. data/doc/release_notes/4.26.0.txt +0 -44
  223. data/doc/release_notes/4.27.0.txt +0 -78
  224. data/doc/release_notes/4.28.0.txt +0 -57
  225. data/doc/release_notes/4.29.0.txt +0 -41
  226. data/doc/release_notes/4.3.0.txt +0 -40
  227. data/doc/release_notes/4.30.0.txt +0 -37
  228. data/doc/release_notes/4.31.0.txt +0 -57
  229. data/doc/release_notes/4.32.0.txt +0 -132
  230. data/doc/release_notes/4.33.0.txt +0 -88
  231. data/doc/release_notes/4.34.0.txt +0 -86
  232. data/doc/release_notes/4.35.0.txt +0 -130
  233. data/doc/release_notes/4.36.0.txt +0 -116
  234. data/doc/release_notes/4.37.0.txt +0 -50
  235. data/doc/release_notes/4.38.0.txt +0 -67
  236. data/doc/release_notes/4.39.0.txt +0 -127
  237. data/doc/release_notes/4.4.0.txt +0 -92
  238. data/doc/release_notes/4.40.0.txt +0 -179
  239. data/doc/release_notes/4.41.0.txt +0 -77
  240. data/doc/release_notes/4.42.0.txt +0 -221
  241. data/doc/release_notes/4.43.0.txt +0 -87
  242. data/doc/release_notes/4.44.0.txt +0 -125
  243. data/doc/release_notes/4.45.0.txt +0 -370
  244. data/doc/release_notes/4.46.0.txt +0 -404
  245. data/doc/release_notes/4.47.0.txt +0 -56
  246. data/doc/release_notes/4.48.0.txt +0 -293
  247. data/doc/release_notes/4.49.0.txt +0 -222
  248. data/doc/release_notes/4.5.0.txt +0 -34
  249. data/doc/release_notes/4.6.0.txt +0 -30
  250. data/doc/release_notes/4.7.0.txt +0 -103
  251. data/doc/release_notes/4.8.0.txt +0 -175
  252. data/doc/release_notes/4.9.0.txt +0 -190
  253. data/spec/adapter_spec.rb +0 -4
  254. data/spec/adapters/db2_spec.rb +0 -170
  255. data/spec/adapters/mssql_spec.rb +0 -804
  256. data/spec/adapters/mysql_spec.rb +0 -1065
  257. data/spec/adapters/oracle_spec.rb +0 -371
  258. data/spec/adapters/postgres_spec.rb +0 -4125
  259. data/spec/adapters/spec_helper.rb +0 -44
  260. data/spec/adapters/sqlanywhere_spec.rb +0 -97
  261. data/spec/adapters/sqlite_spec.rb +0 -652
  262. data/spec/bin_spec.rb +0 -278
  263. data/spec/core/connection_pool_spec.rb +0 -1250
  264. data/spec/core/database_spec.rb +0 -2865
  265. data/spec/core/dataset_spec.rb +0 -5515
  266. data/spec/core/deprecated_spec.rb +0 -70
  267. data/spec/core/expression_filters_spec.rb +0 -1455
  268. data/spec/core/mock_adapter_spec.rb +0 -722
  269. data/spec/core/object_graph_spec.rb +0 -336
  270. data/spec/core/placeholder_literalizer_spec.rb +0 -166
  271. data/spec/core/schema_generator_spec.rb +0 -214
  272. data/spec/core/schema_spec.rb +0 -1826
  273. data/spec/core/spec_helper.rb +0 -24
  274. data/spec/core/version_spec.rb +0 -14
  275. data/spec/core_extensions_spec.rb +0 -763
  276. data/spec/core_model_spec.rb +0 -2
  277. data/spec/core_spec.rb +0 -1
  278. data/spec/deprecation_helper.rb +0 -30
  279. data/spec/extensions/accessed_columns_spec.rb +0 -51
  280. data/spec/extensions/active_model_spec.rb +0 -99
  281. data/spec/extensions/after_initialize_spec.rb +0 -28
  282. data/spec/extensions/arbitrary_servers_spec.rb +0 -109
  283. data/spec/extensions/association_dependencies_spec.rb +0 -125
  284. data/spec/extensions/association_pks_spec.rb +0 -423
  285. data/spec/extensions/association_proxies_spec.rb +0 -100
  286. data/spec/extensions/auto_literal_strings_spec.rb +0 -205
  287. data/spec/extensions/auto_validations_spec.rb +0 -229
  288. data/spec/extensions/blacklist_security_spec.rb +0 -95
  289. data/spec/extensions/blank_spec.rb +0 -69
  290. data/spec/extensions/boolean_readers_spec.rb +0 -93
  291. data/spec/extensions/boolean_subsets_spec.rb +0 -47
  292. data/spec/extensions/caching_spec.rb +0 -273
  293. data/spec/extensions/caller_logging_spec.rb +0 -52
  294. data/spec/extensions/class_table_inheritance_spec.rb +0 -750
  295. data/spec/extensions/column_conflicts_spec.rb +0 -75
  296. data/spec/extensions/column_select_spec.rb +0 -129
  297. data/spec/extensions/columns_introspection_spec.rb +0 -90
  298. data/spec/extensions/columns_updated_spec.rb +0 -35
  299. data/spec/extensions/composition_spec.rb +0 -248
  300. data/spec/extensions/connection_expiration_spec.rb +0 -151
  301. data/spec/extensions/connection_validator_spec.rb +0 -144
  302. data/spec/extensions/constant_sql_override_spec.rb +0 -24
  303. data/spec/extensions/constraint_validations_plugin_spec.rb +0 -300
  304. data/spec/extensions/constraint_validations_spec.rb +0 -439
  305. data/spec/extensions/core_refinements_spec.rb +0 -528
  306. data/spec/extensions/csv_serializer_spec.rb +0 -183
  307. data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
  308. data/spec/extensions/dataset_associations_spec.rb +0 -365
  309. data/spec/extensions/dataset_source_alias_spec.rb +0 -51
  310. data/spec/extensions/date_arithmetic_spec.rb +0 -181
  311. data/spec/extensions/datetime_parse_to_time_spec.rb +0 -169
  312. data/spec/extensions/def_dataset_method_spec.rb +0 -100
  313. data/spec/extensions/defaults_setter_spec.rb +0 -150
  314. data/spec/extensions/delay_add_association_spec.rb +0 -73
  315. data/spec/extensions/dirty_spec.rb +0 -189
  316. data/spec/extensions/duplicate_columns_handler_spec.rb +0 -104
  317. data/spec/extensions/eager_each_spec.rb +0 -62
  318. data/spec/extensions/eager_graph_eager_spec.rb +0 -100
  319. data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
  320. data/spec/extensions/error_splitter_spec.rb +0 -18
  321. data/spec/extensions/error_sql_spec.rb +0 -20
  322. data/spec/extensions/escaped_like_spec.rb +0 -40
  323. data/spec/extensions/eval_inspect_spec.rb +0 -81
  324. data/spec/extensions/finder_spec.rb +0 -260
  325. data/spec/extensions/force_encoding_spec.rb +0 -126
  326. data/spec/extensions/freeze_datasets_spec.rb +0 -31
  327. data/spec/extensions/graph_each_spec.rb +0 -113
  328. data/spec/extensions/hook_class_methods_spec.rb +0 -402
  329. data/spec/extensions/identifier_mangling_spec.rb +0 -201
  330. data/spec/extensions/implicit_subquery_spec.rb +0 -58
  331. data/spec/extensions/index_caching_spec.rb +0 -66
  332. data/spec/extensions/inflector_spec.rb +0 -183
  333. data/spec/extensions/input_transformer_spec.rb +0 -69
  334. data/spec/extensions/insert_returning_select_spec.rb +0 -72
  335. data/spec/extensions/instance_filters_spec.rb +0 -79
  336. data/spec/extensions/instance_hooks_spec.rb +0 -246
  337. data/spec/extensions/integer64_spec.rb +0 -22
  338. data/spec/extensions/inverted_subsets_spec.rb +0 -33
  339. data/spec/extensions/json_serializer_spec.rb +0 -336
  340. data/spec/extensions/lazy_attributes_spec.rb +0 -183
  341. data/spec/extensions/list_spec.rb +0 -291
  342. data/spec/extensions/looser_typecasting_spec.rb +0 -43
  343. data/spec/extensions/many_through_many_spec.rb +0 -2177
  344. data/spec/extensions/migration_spec.rb +0 -864
  345. data/spec/extensions/modification_detection_spec.rb +0 -93
  346. data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -92
  347. data/spec/extensions/named_timezones_spec.rb +0 -111
  348. data/spec/extensions/nested_attributes_spec.rb +0 -767
  349. data/spec/extensions/null_dataset_spec.rb +0 -85
  350. data/spec/extensions/optimistic_locking_spec.rb +0 -127
  351. data/spec/extensions/pagination_spec.rb +0 -116
  352. data/spec/extensions/pg_array_associations_spec.rb +0 -802
  353. data/spec/extensions/pg_array_ops_spec.rb +0 -144
  354. data/spec/extensions/pg_array_spec.rb +0 -398
  355. data/spec/extensions/pg_auto_constraint_validations_spec.rb +0 -172
  356. data/spec/extensions/pg_enum_spec.rb +0 -118
  357. data/spec/extensions/pg_extended_date_support_spec.rb +0 -126
  358. data/spec/extensions/pg_hstore_ops_spec.rb +0 -238
  359. data/spec/extensions/pg_hstore_spec.rb +0 -219
  360. data/spec/extensions/pg_inet_ops_spec.rb +0 -102
  361. data/spec/extensions/pg_inet_spec.rb +0 -72
  362. data/spec/extensions/pg_interval_spec.rb +0 -103
  363. data/spec/extensions/pg_json_ops_spec.rb +0 -289
  364. data/spec/extensions/pg_json_spec.rb +0 -262
  365. data/spec/extensions/pg_loose_count_spec.rb +0 -23
  366. data/spec/extensions/pg_range_ops_spec.rb +0 -60
  367. data/spec/extensions/pg_range_spec.rb +0 -519
  368. data/spec/extensions/pg_row_ops_spec.rb +0 -61
  369. data/spec/extensions/pg_row_plugin_spec.rb +0 -60
  370. data/spec/extensions/pg_row_spec.rb +0 -363
  371. data/spec/extensions/pg_static_cache_updater_spec.rb +0 -93
  372. data/spec/extensions/pg_timestamptz_spec.rb +0 -17
  373. data/spec/extensions/prepared_statements_safe_spec.rb +0 -66
  374. data/spec/extensions/prepared_statements_spec.rb +0 -177
  375. data/spec/extensions/pretty_table_spec.rb +0 -123
  376. data/spec/extensions/query_spec.rb +0 -94
  377. data/spec/extensions/rcte_tree_spec.rb +0 -381
  378. data/spec/extensions/round_timestamps_spec.rb +0 -39
  379. data/spec/extensions/s_spec.rb +0 -60
  380. data/spec/extensions/schema_caching_spec.rb +0 -64
  381. data/spec/extensions/schema_dumper_spec.rb +0 -870
  382. data/spec/extensions/select_remove_spec.rb +0 -38
  383. data/spec/extensions/sequel_4_dataset_methods_spec.rb +0 -121
  384. data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
  385. data/spec/extensions/serialization_spec.rb +0 -365
  386. data/spec/extensions/server_block_spec.rb +0 -97
  387. data/spec/extensions/server_logging_spec.rb +0 -45
  388. data/spec/extensions/sharding_spec.rb +0 -189
  389. data/spec/extensions/shared_caching_spec.rb +0 -151
  390. data/spec/extensions/single_table_inheritance_spec.rb +0 -347
  391. data/spec/extensions/singular_table_names_spec.rb +0 -22
  392. data/spec/extensions/skip_create_refresh_spec.rb +0 -18
  393. data/spec/extensions/spec_helper.rb +0 -63
  394. data/spec/extensions/split_array_nil_spec.rb +0 -24
  395. data/spec/extensions/split_values_spec.rb +0 -57
  396. data/spec/extensions/sql_comments_spec.rb +0 -33
  397. data/spec/extensions/sql_expr_spec.rb +0 -59
  398. data/spec/extensions/static_cache_spec.rb +0 -471
  399. data/spec/extensions/string_agg_spec.rb +0 -90
  400. data/spec/extensions/string_date_time_spec.rb +0 -95
  401. data/spec/extensions/string_stripper_spec.rb +0 -68
  402. data/spec/extensions/subclasses_spec.rb +0 -79
  403. data/spec/extensions/subset_conditions_spec.rb +0 -38
  404. data/spec/extensions/symbol_aref_refinement_spec.rb +0 -28
  405. data/spec/extensions/symbol_as_refinement_spec.rb +0 -21
  406. data/spec/extensions/synchronize_sql_spec.rb +0 -124
  407. data/spec/extensions/table_select_spec.rb +0 -83
  408. data/spec/extensions/tactical_eager_loading_spec.rb +0 -402
  409. data/spec/extensions/thread_local_timezones_spec.rb +0 -67
  410. data/spec/extensions/throw_failures_spec.rb +0 -74
  411. data/spec/extensions/timestamps_spec.rb +0 -209
  412. data/spec/extensions/to_dot_spec.rb +0 -153
  413. data/spec/extensions/touch_spec.rb +0 -226
  414. data/spec/extensions/tree_spec.rb +0 -334
  415. data/spec/extensions/typecast_on_load_spec.rb +0 -86
  416. data/spec/extensions/unlimited_update_spec.rb +0 -21
  417. data/spec/extensions/update_or_create_spec.rb +0 -83
  418. data/spec/extensions/update_primary_key_spec.rb +0 -105
  419. data/spec/extensions/update_refresh_spec.rb +0 -59
  420. data/spec/extensions/uuid_spec.rb +0 -101
  421. data/spec/extensions/validate_associated_spec.rb +0 -52
  422. data/spec/extensions/validation_class_methods_spec.rb +0 -1040
  423. data/spec/extensions/validation_contexts_spec.rb +0 -31
  424. data/spec/extensions/validation_helpers_spec.rb +0 -525
  425. data/spec/extensions/whitelist_security_spec.rb +0 -157
  426. data/spec/extensions/xml_serializer_spec.rb +0 -213
  427. data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
  428. data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
  429. data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  430. data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  431. data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
  432. data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
  433. data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
  434. data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
  435. data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
  436. data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
  437. data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
  438. data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
  439. data/spec/files/double_migration/001_create_sessions.rb +0 -9
  440. data/spec/files/double_migration/002_create_nodes.rb +0 -19
  441. data/spec/files/double_migration/003_3_create_users.rb +0 -4
  442. data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
  443. data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
  444. data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  445. data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
  446. data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
  447. data/spec/files/empty_migration/001_create_sessions.rb +0 -9
  448. data/spec/files/empty_migration/002_create_nodes.rb +0 -0
  449. data/spec/files/empty_migration/003_3_create_users.rb +0 -4
  450. data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
  451. data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
  452. data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
  453. data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  454. data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
  455. data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  456. data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
  457. data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  458. data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
  459. data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
  460. data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  461. data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  462. data/spec/files/reversible_migrations/001_reversible.rb +0 -5
  463. data/spec/files/reversible_migrations/002_reversible.rb +0 -5
  464. data/spec/files/reversible_migrations/003_reversible.rb +0 -5
  465. data/spec/files/reversible_migrations/004_reversible.rb +0 -5
  466. data/spec/files/reversible_migrations/005_reversible.rb +0 -10
  467. data/spec/files/reversible_migrations/006_reversible.rb +0 -10
  468. data/spec/files/reversible_migrations/007_reversible.rb +0 -10
  469. data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
  470. data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
  471. data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
  472. data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
  473. data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
  474. data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
  475. data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
  476. data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
  477. data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
  478. data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
  479. data/spec/guards_helper.rb +0 -59
  480. data/spec/integration/associations_test.rb +0 -2597
  481. data/spec/integration/database_test.rb +0 -113
  482. data/spec/integration/dataset_test.rb +0 -1981
  483. data/spec/integration/eager_loader_test.rb +0 -687
  484. data/spec/integration/migrator_test.rb +0 -262
  485. data/spec/integration/model_test.rb +0 -203
  486. data/spec/integration/plugin_test.rb +0 -2396
  487. data/spec/integration/prepared_statement_test.rb +0 -405
  488. data/spec/integration/schema_test.rb +0 -889
  489. data/spec/integration/spec_helper.rb +0 -65
  490. data/spec/integration/timezone_test.rb +0 -86
  491. data/spec/integration/transaction_test.rb +0 -603
  492. data/spec/integration/type_test.rb +0 -127
  493. data/spec/model/association_reflection_spec.rb +0 -803
  494. data/spec/model/associations_spec.rb +0 -4738
  495. data/spec/model/base_spec.rb +0 -875
  496. data/spec/model/class_dataset_methods_spec.rb +0 -146
  497. data/spec/model/dataset_methods_spec.rb +0 -198
  498. data/spec/model/eager_loading_spec.rb +0 -2377
  499. data/spec/model/hooks_spec.rb +0 -370
  500. data/spec/model/inflector_spec.rb +0 -26
  501. data/spec/model/model_spec.rb +0 -956
  502. data/spec/model/plugins_spec.rb +0 -429
  503. data/spec/model/record_spec.rb +0 -2118
  504. data/spec/model/spec_helper.rb +0 -46
  505. data/spec/model/validations_spec.rb +0 -220
  506. data/spec/model_no_assoc_spec.rb +0 -1
  507. data/spec/model_spec.rb +0 -1
  508. data/spec/plugin_spec.rb +0 -1
  509. data/spec/sequel_coverage.rb +0 -15
  510. data/spec/sequel_warning.rb +0 -4
  511. data/spec/spec_config.rb +0 -12
@@ -1,189 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "Sequel::Plugins::Dirty" do
4
- before do
5
- @db = Sequel.mock(:fetch=>{:initial=>'i'.dup, :initial_changed=>'ic'.dup}, :numrows=>1)
6
- @c = Class.new(Sequel::Model(@db[:c]))
7
- @c.plugin :dirty
8
- @c.columns :initial, :initial_changed, :missing, :missing_changed
9
- end
10
-
11
- dirty_plugin_specs = shared_description do
12
- it "initial_value should be the current value if value has not changed" do
13
- @o.initial_value(:initial).must_equal 'i'
14
- @o.initial_value(:missing).must_be_nil
15
- end
16
-
17
- it "initial_value should be the intial value if value has changed" do
18
- @o.initial_value(:initial_changed).must_equal 'ic'
19
- @o.initial_value(:missing_changed).must_be_nil
20
- end
21
-
22
- it "initial_value should handle case where initial value is reassigned later" do
23
- @o.initial_changed = 'ic'
24
- @o.initial_value(:initial_changed).must_equal 'ic'
25
- @o.missing_changed = nil
26
- @o.initial_value(:missing_changed).must_be_nil
27
- end
28
-
29
- it "changed_columns should handle case where initial value is reassigned later" do
30
- @o.changed_columns.must_equal [:initial_changed, :missing_changed]
31
- @o.initial_changed = 'ic'
32
- @o.changed_columns.must_equal [:missing_changed]
33
- @o.missing_changed = nil
34
- @o.changed_columns.must_equal [:missing_changed]
35
- end
36
-
37
- it "column_change should give initial and current values if there has been a change made" do
38
- @o.column_change(:initial_changed).must_equal ['ic', 'ic2']
39
- @o.column_change(:missing_changed).must_equal [nil, 'mc2']
40
- end
41
-
42
- it "column_change should be nil if no change has been made" do
43
- @o.column_change(:initial).must_be_nil
44
- @o.column_change(:missing).must_be_nil
45
- end
46
-
47
- it "column_changed? should return whether the column has changed" do
48
- @o.column_changed?(:initial).must_equal false
49
- @o.column_changed?(:initial_changed).must_equal true
50
- @o.column_changed?(:missing).must_equal false
51
- @o.column_changed?(:missing_changed).must_equal true
52
- end
53
-
54
- it "column_changed? should handle case where initial value is reassigned later" do
55
- @o.initial_changed = 'ic'
56
- @o.column_changed?(:initial_changed).must_equal false
57
- @o.missing_changed = nil
58
- @o.column_changed?(:missing_changed).must_equal false
59
- end
60
-
61
- it "changed_columns should handle case where initial value is reassigned later" do
62
- @o.changed_columns.must_equal [:initial_changed, :missing_changed]
63
- @o.initial_changed = 'ic'
64
- @o.changed_columns.must_equal [:missing_changed]
65
- @o.missing_changed = nil
66
- @o.changed_columns.must_equal [:missing_changed]
67
- end
68
-
69
- it "column_changes should give initial and current values" do
70
- @o.column_changes.must_equal(:initial_changed=>['ic', 'ic2'], :missing_changed=>[nil, 'mc2'])
71
- end
72
-
73
- it "reset_column should reset the column to its initial value" do
74
- @o.reset_column(:initial)
75
- @o.initial.must_equal 'i'
76
- @o.reset_column(:initial_changed)
77
- @o.initial_changed.must_equal 'ic'
78
- @o.reset_column(:missing)
79
- @o.missing.must_be_nil
80
- @o.reset_column(:missing_changed)
81
- @o.missing_changed.must_be_nil
82
- end
83
-
84
- it "reset_column should remove missing values from the values" do
85
- @o.reset_column(:missing)
86
- @o.values.has_key?(:missing).must_equal false
87
- @o.reset_column(:missing_changed)
88
- @o.values.has_key?(:missing_changed).must_equal false
89
- end
90
-
91
- it "refresh should clear the cached initial values" do
92
- @o.refresh
93
- @o.column_changes.must_equal({})
94
- end
95
-
96
- it "will_change_column should be used to signal in-place modification to column" do
97
- @o.will_change_column(:initial)
98
- @o.initial << 'b'
99
- @o.column_change(:initial).must_equal ['i', 'ib']
100
- @o.will_change_column(:initial_changed)
101
- @o.initial_changed << 'b'
102
- @o.column_change(:initial_changed).must_equal ['ic', 'ic2b']
103
- @o.will_change_column(:missing)
104
- @o.values[:missing] = 'b'
105
- @o.column_change(:missing).must_equal [nil, 'b']
106
- @o.will_change_column(:missing_changed)
107
- @o.missing_changed << 'b'
108
- @o.column_change(:missing_changed).must_equal [nil, 'mc2b']
109
- end
110
-
111
- it "will_change_column should different types of existing objects" do
112
- [nil, true, false, Class.new{undef_method :clone}.new, Class.new{def clone; raise TypeError; end}.new].each do |v|
113
- o = @c.new(:initial=>v)
114
- o.will_change_column(:initial)
115
- o.initial = 'a'
116
- o.column_change(:initial).must_equal [v, 'a']
117
- end
118
- end
119
-
120
- it "should work when freezing objects" do
121
- @o.freeze
122
- @o.initial_value(:initial).must_equal 'i'
123
- proc{@o.initial = 'b'}.must_raise
124
- end
125
-
126
- it "should have #dup duplicate structures" do
127
- was_new = @o.new?
128
- @o.update(:missing=>'m2')
129
- @o.dup.initial_values.must_equal @o.initial_values
130
- @o.dup.initial_values.wont_be_same_as(@o.initial_values)
131
- @o.dup.instance_variable_get(:@missing_initial_values).must_equal @o.instance_variable_get(:@missing_initial_values)
132
- @o.dup.instance_variable_get(:@missing_initial_values).wont_be_same_as(@o.instance_variable_get(:@missing_initial_values))
133
- if was_new
134
- @o.previous_changes.must_be_nil
135
- @o.dup.previous_changes.must_be_nil
136
- else
137
- @o.dup.previous_changes.must_equal @o.previous_changes
138
- end
139
- @o.dup.previous_changes.wont_be_same_as(@o.previous_changes) if @o.previous_changes
140
- end
141
- end
142
-
143
- describe "with new instance" do
144
- before do
145
- @o = @c.new(:initial=>'i'.dup, :initial_changed=>'ic'.dup)
146
- @o.initial_changed = 'ic2'.dup
147
- @o.missing_changed = 'mc2'.dup
148
- end
149
-
150
- include dirty_plugin_specs
151
-
152
- it "save should clear the cached initial values" do
153
- @o.save
154
- @o.column_changes.must_equal({})
155
- end
156
-
157
- it "save_changes should clear the cached initial values" do
158
- @c.dataset = @c.dataset.with_extend do
159
- def supports_insert_select?; true end
160
- def insert_select(*) {:id=>1} end
161
- end
162
- @o.save
163
- @o.column_changes.must_equal({})
164
- end
165
- end
166
-
167
- describe "with existing instance" do
168
- before do
169
- @o = @c[1]
170
- @o.initial_changed = 'ic2'.dup
171
- @o.missing_changed = 'mc2'.dup
172
- end
173
-
174
- include dirty_plugin_specs
175
-
176
- it "previous_changes should be the previous changes after saving" do
177
- @o.save
178
- @o.previous_changes.must_equal(:initial_changed=>['ic', 'ic2'], :missing_changed=>[nil, 'mc2'])
179
- end
180
-
181
- it "should work when freezing objects after saving" do
182
- @o.initial = 'a'
183
- @o.save
184
- @o.freeze
185
- @o.previous_changes[:initial].must_equal ['i', 'a']
186
- proc{@o.initial = 'b'}.must_raise
187
- end
188
- end
189
- end
@@ -1,104 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- mod = shared_description do
4
- it "should take action depending on :on_duplicate_columns if 2 or more columns have the same name" do
5
- check(nil, @cols)
6
- @warned.must_be_nil
7
-
8
- check(:ignore, @cols)
9
- @warned.must_be_nil
10
-
11
- check(:warn, @cols)
12
- @warned.must_include("One or more duplicate columns present in #{@cols.inspect}")
13
-
14
- proc{check(:raise, @cols)}.must_raise(Sequel::DuplicateColumnError)
15
-
16
- cols = nil
17
- check(proc{|cs| cols = cs; nil}, @cols)
18
- @warned.must_be_nil
19
- cols.must_equal @cols
20
-
21
- cols = nil
22
- check(proc{|cs| cols = cs; :ignore}, @cols)
23
- @warned.must_be_nil
24
- cols.must_equal @cols
25
-
26
- cols = nil
27
- proc{check(proc{|cs| cols = cs; :raise}, @cols)}.must_raise(Sequel::DuplicateColumnError)
28
- cols.must_equal @cols
29
-
30
- cols = nil
31
- check(proc{|cs| cols = cs; :warn}, @cols)
32
- @warned.must_include("One or more duplicate columns present in #{@cols.inspect}")
33
- cols.must_equal @cols
34
-
35
- check(:raise, nil)
36
- @warned.must_be_nil
37
- end
38
-
39
- it "should not raise error or warning if no columns have the same name" do
40
- [nil, :ignore, :raise, :warn, proc{|cs| :raise}].each do |handler|
41
- check(handler, @cols.uniq)
42
- @warned.must_be_nil
43
- end
44
- end
45
- end
46
-
47
- describe "Sequel::DuplicateColumnsHandler Database configuration" do
48
- before do
49
- @db = Sequel.mock
50
- @db.extension(:duplicate_columns_handler)
51
- @cols = [:id, :name, :id]
52
- @warned = nil
53
- set_warned = @set_warned = proc{|m| @warned = m}
54
- @ds = @db[:things].with_extend{define_method(:warn){|message| set_warned.call(message)}}
55
- end
56
-
57
- def check(handler, cols)
58
- @db.opts[:on_duplicate_columns] = handler
59
- @set_warned.call(nil)
60
- @ds.send(:columns=, cols)
61
- end
62
-
63
- include mod
64
- end
65
-
66
- describe "Sequel::DuplicateColumnsHandler Dataset configuration" do
67
- before do
68
- @cols = [:id, :name, :id]
69
- @warned = nil
70
- set_warned = @set_warned = proc{|m| @warned = m}
71
- @ds = Sequel.mock[:things].extension(:duplicate_columns_handler).with_extend{define_method(:warn){|message| set_warned.call(message)}}
72
- end
73
-
74
- def check(handler, cols)
75
- @set_warned.call(nil)
76
- @ds.on_duplicate_columns(handler).send(:columns=, cols)
77
- end
78
-
79
- include mod
80
-
81
- it "should use handlers passed as blocks to on_duplicate_columns" do
82
- proc{@ds.on_duplicate_columns{:raise}.send(:columns=, @cols)}.must_raise(Sequel::DuplicateColumnError)
83
- end
84
-
85
- it "should raise an error if not providing either an argument or block to on_duplicate_columns" do
86
- proc{@ds.on_duplicate_columns}.must_raise(Sequel::Error)
87
- end
88
-
89
- it "should raise an error if providing both an argument and block to on_duplicate_columns" do
90
- proc{@ds.on_duplicate_columns(:raise){:raise}}.must_raise(Sequel::Error)
91
- end
92
-
93
- it "should warn by defaul if there is no database or dataset handler" do
94
- @ds.send(:columns=, @cols)
95
- @warned.must_include("One or more duplicate columns present in #{@cols.inspect}")
96
- end
97
-
98
- it "should fallback to database setting if there is no dataset-level handler" do
99
- @ds.db.opts[:on_duplicate_columns] = :raise
100
- proc{@ds.send(:columns=, @cols)}.must_raise(Sequel::DuplicateColumnError)
101
- check(:ignore, @cols)
102
- @warned.must_be_nil
103
- end
104
- end
@@ -1,62 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "Sequel::Plugins::EagerEach" do
4
- before do
5
- @c = Class.new(Sequel::Model(:items))
6
- @c.columns :id, :parent_id
7
- @c.plugin :eager_each
8
- @c.one_to_many :children, :class=>@c, :key=>:parent_id
9
- @c.db.sqls
10
- end
11
-
12
- it "should make #each on an eager dataset do eager loading" do
13
- a = []
14
- ds = @c.eager(:children).with_fetch([{:id=>1, :parent_id=>nil}, {:id=>2, :parent_id=>nil}])
15
- @c.dataset = @c.dataset.with_fetch([{:id=>3, :parent_id=>1}, {:id=>4, :parent_id=>1}, {:id=>5, :parent_id=>2}, {:id=>6, :parent_id=>2}])
16
- ds.each{|c| a << c}
17
- a.must_equal [@c.load(:id=>1, :parent_id=>nil), @c.load(:id=>2, :parent_id=>nil)]
18
- a.map{|c| c.associations[:children]}.must_equal [[@c.load(:id=>3, :parent_id=>1), @c.load(:id=>4, :parent_id=>1)], [@c.load(:id=>5, :parent_id=>2), @c.load(:id=>6, :parent_id=>2)]]
19
- sqls = @c.db.sqls
20
- sqls.shift.must_equal 'SELECT * FROM items'
21
- ['SELECT * FROM items WHERE (items.parent_id IN (1, 2))',
22
- 'SELECT * FROM items WHERE (items.parent_id IN (2, 1))'].must_include(sqls.pop)
23
- end
24
-
25
- it "should make #each on an eager_graph dataset do eager loading" do
26
- a = []
27
- ds = @c.eager_graph(:children).with_fetch([{:id=>1, :parent_id=>nil, :children_id=>3, :children_parent_id=>1}, {:id=>1, :parent_id=>nil, :children_id=>4, :children_parent_id=>1}, {:id=>2, :parent_id=>nil, :children_id=>5, :children_parent_id=>2}, {:id=>2, :parent_id=>nil, :children_id=>6, :children_parent_id=>2}])
28
- ds.each{|c| a << c}
29
- a.must_equal [@c.load(:id=>1, :parent_id=>nil), @c.load(:id=>2, :parent_id=>nil)]
30
- a.map{|c| c.associations[:children]}.must_equal [[@c.load(:id=>3, :parent_id=>1), @c.load(:id=>4, :parent_id=>1)], [@c.load(:id=>5, :parent_id=>2), @c.load(:id=>6, :parent_id=>2)]]
31
- @c.db.sqls.must_equal ['SELECT items.id, items.parent_id, children.id AS children_id, children.parent_id AS children_parent_id FROM items LEFT OUTER JOIN items AS children ON (children.parent_id = items.id)']
32
- end
33
-
34
- it "should make #first on an eager dataset do eager loading" do
35
- ds = @c.eager(:children).with_fetch([{:id=>1, :parent_id=>nil}])
36
- @c.dataset = @c.dataset.with_fetch([{:id=>3, :parent_id=>1}, {:id=>4, :parent_id=>1}])
37
- a = ds.first
38
- a.values.must_equal(:id=>1, :parent_id=>nil)
39
- a.associations[:children].must_equal [@c.load(:id=>3, :parent_id=>1), @c.load(:id=>4, :parent_id=>1)]
40
- @c.db.sqls.must_equal ['SELECT * FROM items LIMIT 1','SELECT * FROM items WHERE (items.parent_id IN (1))']
41
- end
42
-
43
- it "should make #first on an eager_graph dataset do eager loading" do
44
- a = @c.eager_graph(:children).with_fetch([[{:id=>1, :parent_id=>nil, :children_id=>3, :children_parent_id=>1}], [{:id=>1, :parent_id=>nil, :children_id=>3, :children_parent_id=>1}, {:id=>1, :parent_id=>nil, :children_id=>4, :children_parent_id=>1}]]).first
45
- a.values.must_equal(:id=>1, :parent_id=>nil)
46
- a.associations[:children].must_equal [@c.load(:id=>3, :parent_id=>1), @c.load(:id=>4, :parent_id=>1)]
47
- @c.db.sqls.must_equal ['SELECT items.id, items.parent_id, children.id AS children_id, children.parent_id AS children_parent_id FROM items LEFT OUTER JOIN items AS children ON (children.parent_id = items.id) LIMIT 1',
48
- 'SELECT items.id, items.parent_id, children.id AS children_id, children.parent_id AS children_parent_id FROM items LEFT OUTER JOIN items AS children ON (children.parent_id = items.id) WHERE (items.id = 1)']
49
- end
50
-
51
- it "should make #first on a non-eager dataset work correctly" do
52
- @c.dataset.with_fetch([{:id=>1, :parent_id=>nil}]).first.must_equal @c.load(:id=>1, :parent_id=>nil)
53
- end
54
-
55
- it "should get columns normally columns" do
56
- @c.dataset.columns!.must_equal [:id, :parent_id]
57
- end
58
-
59
- it "should not attempt to eager load when getting the columns" do
60
- @c.eager(:children).with_extend{def all; raise; end}.columns!.must_equal [:id, :parent_id]
61
- end
62
- end
@@ -1,100 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "eager_graph_eager plugin" do
4
- before do
5
- @c = Class.new(Sequel::Model(:items))
6
- @c.columns :id, :parent_id
7
- @c.plugin :eager_graph_eager
8
- @c.one_to_many :children, :class=>@c, :key=>:parent_id
9
- @c.many_to_one :parent, :class=>@c
10
- @c.db.sqls
11
- end
12
-
13
- it "should support Dataset#eager_graph_eager for eager loading dependencies of eager_graph associations for one_to_many associations" do
14
- a = @c.eager_graph(:children).
15
- with_fetch([{:id=>1, :parent_id=>nil, :children_id=>3, :children_parent_id=>1}, {:id=>2, :parent_id=>nil}]).
16
- eager_graph_eager([:children], :children=>proc{|ds| ds.with_fetch(:id=>4, :parent_id=>3)}).
17
- all
18
- @c.db.sqls.must_equal ["SELECT items.id, items.parent_id, children.id AS children_id, children.parent_id AS children_parent_id FROM items LEFT OUTER JOIN items AS children ON (children.parent_id = items.id)",
19
- "SELECT * FROM items WHERE (items.parent_id IN (3))"]
20
-
21
- a.must_equal [@c.load(:id=>1, :parent_id=>nil), @c.load(:id=>2, :parent_id=>nil)]
22
- a.map(&:children).must_equal [[@c.load(:id=>3, :parent_id=>1)], []]
23
- a.first.children.first.children.must_equal [@c.load(:id=>4, :parent_id=>3)]
24
- @c.db.sqls.must_equal []
25
- end
26
-
27
- it "should support Dataset#eager_graph_eager for eager loading dependencies of eager_graph associations for many_to_one associations" do
28
- a = @c.eager_graph(:parent).
29
- with_fetch([{:id=>4, :parent_id=>3, :parent_id_0=>3, :parent_parent_id=>1}, {:id=>2, :parent_id=>nil}]).
30
- eager_graph_eager([:parent], :parent=>proc{|ds| ds.with_fetch(:id=>1, :parent_id=>nil)}).
31
- all
32
- @c.db.sqls.must_equal ["SELECT items.id, items.parent_id, parent.id AS parent_id_0, parent.parent_id AS parent_parent_id FROM items LEFT OUTER JOIN items AS parent ON (parent.id = items.parent_id)",
33
- "SELECT * FROM items WHERE (items.id IN (1))"]
34
-
35
- a.must_equal [@c.load(:id=>4, :parent_id=>3), @c.load(:id=>2, :parent_id=>nil)]
36
- a.map(&:parent).must_equal [@c.load(:id=>3, :parent_id=>1), nil]
37
- a.first.parent.parent.must_equal @c.load(:id=>1, :parent_id=>nil)
38
- @c.db.sqls.must_equal []
39
- end
40
-
41
- it "should support multiple entries in dependency chain" do
42
- a = @c.eager_graph(:children=>:children).
43
- with_fetch([{:id=>1, :parent_id=>nil, :children_id=>3, :children_parent_id=>1, :children_0_id=>4, :children_0_parent_id=>3}, {:id=>2, :parent_id=>nil}]).
44
- eager_graph_eager([:children, :children], :children=>proc{|ds| ds.with_fetch(:id=>5, :parent_id=>4)}).
45
- all
46
- @c.db.sqls.must_equal ["SELECT items.id, items.parent_id, children.id AS children_id, children.parent_id AS children_parent_id, children_0.id AS children_0_id, children_0.parent_id AS children_0_parent_id FROM items LEFT OUTER JOIN items AS children ON (children.parent_id = items.id) LEFT OUTER JOIN items AS children_0 ON (children_0.parent_id = children.id)",
47
- "SELECT * FROM items WHERE (items.parent_id IN (4))"]
48
-
49
- a.must_equal [@c.load(:id=>1, :parent_id=>nil), @c.load(:id=>2, :parent_id=>nil)]
50
- a.map(&:children).must_equal [[@c.load(:id=>3, :parent_id=>1)], []]
51
- a.first.children.first.children.must_equal [@c.load(:id=>4, :parent_id=>3)]
52
- a.first.children.first.children.first.children.must_equal [@c.load(:id=>5, :parent_id=>4)]
53
- @c.db.sqls.must_equal []
54
- end
55
-
56
- it "should support multiple dependency chains" do
57
- a = @c.eager_graph(:children, :parent).
58
- with_fetch([{:id=>4, :parent_id=>3, :children_id=>5, :children_parent_id=>4, :parent_id_0=>3, :parent_parent_id=>1}, {:id=>2, :parent_id=>nil}]).
59
- eager_graph_eager([:children], :children=>proc{|ds| ds.with_fetch(:id=>6, :parent_id=>5)}).
60
- eager_graph_eager([:parent], :parent=>proc{|ds| ds.with_fetch(:id=>1, :parent_id=>nil)}).
61
- all
62
- @c.db.sqls.must_equal ["SELECT items.id, items.parent_id, children.id AS children_id, children.parent_id AS children_parent_id, parent.id AS parent_id_0, parent.parent_id AS parent_parent_id FROM items LEFT OUTER JOIN items AS children ON (children.parent_id = items.id) LEFT OUTER JOIN items AS parent ON (parent.id = items.parent_id)",
63
- "SELECT * FROM items WHERE (items.parent_id IN (5))",
64
- "SELECT * FROM items WHERE (items.id IN (1))"]
65
-
66
- a.must_equal [@c.load(:id=>4, :parent_id=>3), @c.load(:id=>2, :parent_id=>nil)]
67
- a.map(&:children).must_equal [[@c.load(:id=>5, :parent_id=>4)], []]
68
- a.map(&:parent).must_equal [@c.load(:id=>3, :parent_id=>1), nil]
69
- a.first.children.first.children.must_equal [@c.load(:id=>6, :parent_id=>5)]
70
- a.first.parent.parent.must_equal @c.load(:id=>1, :parent_id=>nil)
71
- @c.db.sqls.must_equal []
72
- end
73
-
74
- it "should raise for invalid dependency chains" do
75
- proc{@c.dataset.eager_graph_eager([], :children)}.must_raise Sequel::Error
76
- proc{@c.dataset.eager_graph_eager(:children, :children)}.must_raise Sequel::Error
77
- proc{@c.dataset.eager_graph_eager(['foo'], :children)}.must_raise Sequel::Error
78
- proc{@c.dataset.eager_graph_eager([:foo], :children)}.must_raise Sequel::Error
79
- end
80
-
81
- it "should handle cases where not all associated objects are unique" do
82
- a = @c.eager_graph(:parent=>:children).
83
- with_fetch([
84
- {:id=>4, :parent_id=>3, :parent_id_0=>3, :parent_parent_id=>1, :children_id=>4, :children_parent_id=>3},
85
- {:id=>5, :parent_id=>3, :parent_id_0=>3, :parent_parent_id=>1, :children_id=>4, :children_parent_id=>3},
86
- {:id=>4, :parent_id=>3, :parent_id_0=>3, :parent_parent_id=>1, :children_id=>5, :children_parent_id=>3},
87
- {:id=>5, :parent_id=>3, :parent_id_0=>3, :parent_parent_id=>1, :children_id=>5, :children_parent_id=>3}
88
- ]).
89
- eager_graph_eager([:parent], :parent=>proc{|ds| ds.with_fetch(:id=>1, :parent_id=>nil)}).
90
- all
91
- @c.db.sqls.must_equal ["SELECT items.id, items.parent_id, parent.id AS parent_id_0, parent.parent_id AS parent_parent_id, children.id AS children_id, children.parent_id AS children_parent_id FROM items LEFT OUTER JOIN items AS parent ON (parent.id = items.parent_id) LEFT OUTER JOIN items AS children ON (children.parent_id = parent.id)",
92
- "SELECT * FROM items WHERE (items.id IN (1))"]
93
-
94
- a.must_equal [@c.load(:id=>4, :parent_id=>3), @c.load(:id=>5, :parent_id=>3)]
95
- a.map(&:parent).must_equal [@c.load(:id=>3, :parent_id=>1), @c.load(:id=>3, :parent_id=>1)]
96
- a.map(&:parent).map(&:children).must_equal [a, a]
97
- a.map(&:parent).map(&:parent).must_equal [@c.load(:id=>1, :parent_id=>nil), @c.load(:id=>1, :parent_id=>nil)]
98
- @c.db.sqls.must_equal []
99
- end
100
- end
@@ -1,24 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "filter_having extension" do
4
- before do
5
- @dataset = Sequel.mock[:test].extension(:empty_array_consider_nulls)
6
- end
7
-
8
- it "should handle all types of IN/NOT IN queries with empty arrays" do
9
- @dataset.filter(:id => []).sql.must_equal "SELECT * FROM test WHERE (id != id)"
10
- @dataset.filter([:id1, :id2] => []).sql.must_equal "SELECT * FROM test WHERE ((id1 != id1) AND (id2 != id2))"
11
- @dataset.exclude(:id => []).sql.must_equal "SELECT * FROM test WHERE (id = id)"
12
- @dataset.exclude([:id1, :id2] => []).sql.must_equal "SELECT * FROM test WHERE ((id1 = id1) AND (id2 = id2))"
13
- end
14
-
15
- it "should handle IN/NOT IN queries with multiple columns and an empty dataset where the database doesn't support it" do
16
- db = Sequel.mock
17
- d1 = db[:test].select(:id1, :id2).filter(:region=>'Asia').columns(:id1, :id2)
18
- @dataset = @dataset.with_extend{def supports_multiple_column_in?; false end}
19
- @dataset.filter([:id1, :id2] => d1).sql.must_equal "SELECT * FROM test WHERE ((id1 != id1) AND (id2 != id2))"
20
- db.sqls.must_equal ["SELECT id1, id2 FROM test WHERE (region = 'Asia')"]
21
- @dataset.exclude([:id1, :id2] => d1).sql.must_equal "SELECT * FROM test WHERE ((id1 = id1) AND (id2 = id2))"
22
- db.sqls.must_equal ["SELECT id1, id2 FROM test WHERE (region = 'Asia')"]
23
- end
24
- end
@@ -1,18 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "Sequel::Plugins::ErrorSplitter" do
4
- before do
5
- @c = Class.new(Sequel::Model)
6
- @c.plugin :error_splitter
7
- @m = @c.new
8
- def @m.validate
9
- errors.add([:a, :b], 'is bad')
10
- end
11
- end
12
-
13
- it "should split errors for multiple columns and assign them to each column" do
14
- @m.valid?.must_equal false
15
- @m.errors.must_equal(:a=>['is bad'], :b=>['is bad'])
16
- end
17
- end
18
-
@@ -1,20 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "error_sql extension" do
4
- before do
5
- @db = Sequel.mock(:fetch=>proc{|sql| @db.log_connection_yield(sql, nil){raise StandardError}}).extension(:error_sql)
6
- end
7
-
8
- it "should have Sequel::DatabaseError#sql give the SQL causing the error" do
9
- @db["SELECT"].all rescue (e = $!)
10
- e.sql.must_equal "SELECT"
11
- end
12
-
13
- it "should have Sequel::DatabaseError#sql give the SQL causing the error when using a logger" do
14
- l = Object.new
15
- def l.method_missing(*) end
16
- @db.loggers = [l]
17
- @db["SELECT"].all rescue (e = $!)
18
- e.sql.must_equal "SELECT"
19
- end
20
- end
@@ -1,40 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "escaped_like extension" do
4
- before do
5
- Sequel.extension(:escaped_like)
6
- @ds = Sequel.mock[:t]
7
- @c = Sequel[:c]
8
- end
9
-
10
- it "escaped_like should support creating case sensitive pattern matches" do
11
- @ds.where(@c.escaped_like('?', 'a')).sql.must_equal "SELECT * FROM t WHERE (c LIKE 'a' ESCAPE '\\')"
12
- @ds.where(@c.escaped_like('?%', 'a')).sql.must_equal "SELECT * FROM t WHERE (c LIKE 'a%' ESCAPE '\\')"
13
- @ds.where(@c.escaped_like('?', 'a%')).sql.must_equal "SELECT * FROM t WHERE (c LIKE 'a\\%' ESCAPE '\\')"
14
- @ds.where(@c.escaped_like('?', ['a%'])).sql.must_equal "SELECT * FROM t WHERE (c LIKE 'a\\%' ESCAPE '\\')"
15
- @ds.where(@c.escaped_like('??', ['a', '%'])).sql.must_equal "SELECT * FROM t WHERE (c LIKE 'a\\%' ESCAPE '\\')"
16
- end
17
-
18
- it "escaped_ilike should support creating case insensitive pattern matches" do
19
- @ds.where(@c.escaped_ilike('?', 'a')).sql.must_equal "SELECT * FROM t WHERE (UPPER(c) LIKE UPPER('a') ESCAPE '\\')"
20
- @ds.where(@c.escaped_ilike('?%', 'a')).sql.must_equal "SELECT * FROM t WHERE (UPPER(c) LIKE UPPER('a%') ESCAPE '\\')"
21
- @ds.where(@c.escaped_ilike('?', 'a%')).sql.must_equal "SELECT * FROM t WHERE (UPPER(c) LIKE UPPER('a\\%') ESCAPE '\\')"
22
- @ds.where(@c.escaped_ilike('?', ['a%'])).sql.must_equal "SELECT * FROM t WHERE (UPPER(c) LIKE UPPER('a\\%') ESCAPE '\\')"
23
- @ds.where(@c.escaped_ilike('??', ['a', '%'])).sql.must_equal "SELECT * FROM t WHERE (UPPER(c) LIKE UPPER('a\\%') ESCAPE '\\')"
24
- end
25
-
26
- it "should raise an Error for a mismatched number of placeholders" do
27
- proc{@ds.where(@c.escaped_like('?', [])).sql}.must_raise Sequel::Error
28
- proc{@ds.where(@c.escaped_like('??', ['a'])).sql}.must_raise Sequel::Error
29
- proc{@ds.where(@c.escaped_ilike('', ['a'])).sql}.must_raise Sequel::Error
30
- proc{@ds.where(@c.escaped_ilike('?', ['a', 'a'])).sql}.must_raise Sequel::Error
31
- end
32
-
33
- it "escaped_like and escaped_ilike should return expressions" do
34
- @ds.select(@c.escaped_like('?', 'a').as(:b)).sql.must_equal "SELECT (c LIKE 'a' ESCAPE '\\') AS b FROM t"
35
- @ds.select(@c.escaped_like('?', 'a').cast(String)).sql.must_equal "SELECT CAST((c LIKE 'a' ESCAPE '\\') AS varchar(255)) FROM t"
36
- @ds.order(@c.escaped_like('?', 'a').desc).sql.must_equal "SELECT * FROM t ORDER BY (c LIKE 'a' ESCAPE '\\') DESC"
37
- @ds.where(@c.escaped_like('?', 'a') | @c.escaped_like('?', 'b')).sql.must_equal "SELECT * FROM t WHERE ((c LIKE 'a' ESCAPE '\\') OR (c LIKE 'b' ESCAPE '\\'))"
38
- end
39
- end
40
-
@@ -1,81 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- Sequel.extension :eval_inspect
4
-
5
- describe "eval_inspect extension" do
6
- before do
7
- @ds = Sequel.mock.dataset.with_extend do
8
- def supports_window_functions?; true end
9
- def literal_blob_append(sql, s) sql << "X'#{s}'" end
10
- end
11
- end
12
-
13
- it "should make eval(obj.inspect) == obj for all Sequel::SQL::Expression subclasses" do
14
- [
15
- # Objects with components where eval(inspect) == self
16
- Sequel::SQL::AliasedExpression.new(:b, :a),
17
- Sequel::SQL::AliasedExpression.new(:b, :a, [:c, :d]),
18
- Sequel::SQL::CaseExpression.new({:b=>:a}, :c),
19
- Sequel::SQL::CaseExpression.new({:b=>:a}, :c, :d),
20
- Sequel::SQL::Cast.new(:a, :b),
21
- Sequel::SQL::ColumnAll.new(:a),
22
- Sequel::SQL::ComplexExpression.new(:'=', :b, :a),
23
- Sequel::SQL::Constant.new(:a),
24
- Sequel::CURRENT_DATE,
25
- Sequel::CURRENT_TIMESTAMP,
26
- Sequel::CURRENT_TIME,
27
- Sequel::SQLTRUE,
28
- Sequel::SQLFALSE,
29
- Sequel::NULL,
30
- Sequel::NOTNULL,
31
- Sequel::SQL::Function.new(:a, :b, :c),
32
- Sequel::SQL::Identifier.new(:a),
33
- Sequel::SQL::JoinClause.new(:inner, :b),
34
- Sequel::SQL::JoinOnClause.new({:d=>:a}, :inner, :b),
35
- Sequel::SQL::JoinUsingClause.new([:a], :inner, :b),
36
- Sequel::SQL::JoinClause.new(:inner, Sequel.as(:b, :c, [:d, :e])),
37
- Sequel::SQL::JoinOnClause.new({:d=>:a}, :inner, Sequel.as(:b, :c, [:d, :e])),
38
- Sequel::SQL::JoinUsingClause.new([:a], :inner, Sequel.as(:b, :c, [:d, :e])),
39
- Sequel::SQL::PlaceholderLiteralString.new('? = ?', [:a, :b]),
40
- Sequel::SQL::PlaceholderLiteralString.new(':a = :b', [{:a=>:b, :b=>42}]),
41
- Sequel::SQL::OrderedExpression.new(:a),
42
- Sequel::SQL::OrderedExpression.new(:a, false),
43
- Sequel::SQL::OrderedExpression.new(:a, false, :nulls=>:first),
44
- Sequel::SQL::OrderedExpression.new(:a, false, :nulls=>:last),
45
- Sequel::SQL::QualifiedIdentifier.new(:b, :a),
46
- Sequel::SQL::Subscript.new(:a, [1, 2]),
47
- Sequel::SQL::Window.new(:order=>:a, :partition=>:b),
48
- Sequel::SQL::Function.new(:a, :b, :c).over(:order=>:a, :partition=>:b),
49
- Sequel::SQL::Wrapper.new(:a),
50
-
51
- # Objects with components where eval(inspect) != self
52
- Sequel::SQL::AliasedExpression.new(Sequel::SQL::Blob.new('s'), :a),
53
- Sequel::SQL::AliasedExpression.new(Sequel::LiteralString.new('s'), :a),
54
- Sequel::SQL::PlaceholderLiteralString.new('(a, b) IN ?', [Sequel::SQL::ValueList.new([[1, 2]])]),
55
- Sequel::SQL::CaseExpression.new({{:d=>Sequel::LiteralString.new('e')}=>:a}, :c, :d),
56
- Sequel::SQL::AliasedExpression.new(Date.new(2011, 10, 11), :a),
57
- Sequel::SQL::AliasedExpression.new(Sequel::SQLTime.create(10, 20, 30, 500000.125), :a),
58
- Sequel::SQL::AliasedExpression.new(DateTime.new(2011, 9, 11, 10, 20, 30), :a),
59
- Sequel::SQL::AliasedExpression.new(DateTime.new(2011, 9, 11, 10, 20, 30, 0.25), :a),
60
- Sequel::SQL::AliasedExpression.new(DateTime.new(2011, 9, 11, 10, 20, 30, -0.25), :a),
61
- Sequel::SQL::AliasedExpression.new(Time.local(2011, 9, 11, 10, 20, 30), :a),
62
- Sequel::SQL::AliasedExpression.new(Time.local(2011, 9, 11, 10, 20, 30, 500000.125), :a),
63
- Sequel::SQL::AliasedExpression.new(Time.utc(2011, 9, 11, 10, 20, 30), :a),
64
- Sequel::SQL::AliasedExpression.new(Time.utc(2011, 9, 11, 10, 20, 30, 500000.125), :a),
65
- Sequel::SQL::AliasedExpression.new(BigDecimal('1.000000000000000000000000000000000000000000000001'), :a),
66
- Sequel::SQL::AliasedExpression.new(Sequel::CURRENT_DATE, :a),
67
- Sequel::SQL::AliasedExpression.new(Sequel::CURRENT_TIMESTAMP, :a),
68
- ].each do |o|
69
- v = eval(o.inspect)
70
- v.must_equal o
71
- @ds.literal(v).must_equal @ds.literal(o)
72
-
73
- ds = @ds
74
- @ds.db.create_table(:test) do
75
- v = eval(o.inspect)
76
- v.must_equal o
77
- ds.literal(v).must_equal ds.literal(o)
78
- end
79
- end
80
- end
81
- end