sequel 5.29.0 → 5.30.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 (323) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +8 -1922
  3. data/doc/release_notes/5.30.0.txt +20 -0
  4. data/lib/sequel/adapters/shared/sqlite.rb +7 -1
  5. data/lib/sequel/database/transactions.rb +5 -9
  6. data/lib/sequel/version.rb +1 -1
  7. metadata +4 -368
  8. data/Rakefile +0 -151
  9. data/doc/release_notes/4.0.0.txt +0 -262
  10. data/doc/release_notes/4.1.0.txt +0 -85
  11. data/doc/release_notes/4.10.0.txt +0 -226
  12. data/doc/release_notes/4.11.0.txt +0 -147
  13. data/doc/release_notes/4.12.0.txt +0 -105
  14. data/doc/release_notes/4.13.0.txt +0 -169
  15. data/doc/release_notes/4.14.0.txt +0 -68
  16. data/doc/release_notes/4.15.0.txt +0 -56
  17. data/doc/release_notes/4.16.0.txt +0 -36
  18. data/doc/release_notes/4.17.0.txt +0 -38
  19. data/doc/release_notes/4.18.0.txt +0 -36
  20. data/doc/release_notes/4.19.0.txt +0 -45
  21. data/doc/release_notes/4.2.0.txt +0 -129
  22. data/doc/release_notes/4.20.0.txt +0 -79
  23. data/doc/release_notes/4.21.0.txt +0 -94
  24. data/doc/release_notes/4.22.0.txt +0 -72
  25. data/doc/release_notes/4.23.0.txt +0 -65
  26. data/doc/release_notes/4.24.0.txt +0 -99
  27. data/doc/release_notes/4.25.0.txt +0 -181
  28. data/doc/release_notes/4.26.0.txt +0 -44
  29. data/doc/release_notes/4.27.0.txt +0 -78
  30. data/doc/release_notes/4.28.0.txt +0 -57
  31. data/doc/release_notes/4.29.0.txt +0 -41
  32. data/doc/release_notes/4.3.0.txt +0 -40
  33. data/doc/release_notes/4.30.0.txt +0 -37
  34. data/doc/release_notes/4.31.0.txt +0 -57
  35. data/doc/release_notes/4.32.0.txt +0 -132
  36. data/doc/release_notes/4.33.0.txt +0 -88
  37. data/doc/release_notes/4.34.0.txt +0 -86
  38. data/doc/release_notes/4.35.0.txt +0 -130
  39. data/doc/release_notes/4.36.0.txt +0 -116
  40. data/doc/release_notes/4.37.0.txt +0 -50
  41. data/doc/release_notes/4.38.0.txt +0 -67
  42. data/doc/release_notes/4.39.0.txt +0 -127
  43. data/doc/release_notes/4.4.0.txt +0 -92
  44. data/doc/release_notes/4.40.0.txt +0 -179
  45. data/doc/release_notes/4.41.0.txt +0 -77
  46. data/doc/release_notes/4.42.0.txt +0 -221
  47. data/doc/release_notes/4.43.0.txt +0 -87
  48. data/doc/release_notes/4.44.0.txt +0 -125
  49. data/doc/release_notes/4.45.0.txt +0 -370
  50. data/doc/release_notes/4.46.0.txt +0 -404
  51. data/doc/release_notes/4.47.0.txt +0 -56
  52. data/doc/release_notes/4.48.0.txt +0 -293
  53. data/doc/release_notes/4.49.0.txt +0 -222
  54. data/doc/release_notes/4.5.0.txt +0 -34
  55. data/doc/release_notes/4.6.0.txt +0 -30
  56. data/doc/release_notes/4.7.0.txt +0 -103
  57. data/doc/release_notes/4.8.0.txt +0 -175
  58. data/doc/release_notes/4.9.0.txt +0 -190
  59. data/spec/adapter_spec.rb +0 -4
  60. data/spec/adapters/db2_spec.rb +0 -170
  61. data/spec/adapters/mssql_spec.rb +0 -828
  62. data/spec/adapters/mysql_spec.rb +0 -1060
  63. data/spec/adapters/oracle_spec.rb +0 -371
  64. data/spec/adapters/postgres_spec.rb +0 -4476
  65. data/spec/adapters/spec_helper.rb +0 -44
  66. data/spec/adapters/sqlanywhere_spec.rb +0 -97
  67. data/spec/adapters/sqlite_spec.rb +0 -652
  68. data/spec/bin_spec.rb +0 -278
  69. data/spec/core/connection_pool_spec.rb +0 -1250
  70. data/spec/core/database_spec.rb +0 -2915
  71. data/spec/core/dataset_spec.rb +0 -5544
  72. data/spec/core/deprecated_spec.rb +0 -70
  73. data/spec/core/expression_filters_spec.rb +0 -1498
  74. data/spec/core/mock_adapter_spec.rb +0 -722
  75. data/spec/core/object_graph_spec.rb +0 -336
  76. data/spec/core/placeholder_literalizer_spec.rb +0 -166
  77. data/spec/core/schema_generator_spec.rb +0 -214
  78. data/spec/core/schema_spec.rb +0 -1844
  79. data/spec/core/spec_helper.rb +0 -24
  80. data/spec/core/version_spec.rb +0 -14
  81. data/spec/core_extensions_spec.rb +0 -763
  82. data/spec/core_model_spec.rb +0 -2
  83. data/spec/core_spec.rb +0 -1
  84. data/spec/deprecation_helper.rb +0 -30
  85. data/spec/extensions/accessed_columns_spec.rb +0 -51
  86. data/spec/extensions/active_model_spec.rb +0 -99
  87. data/spec/extensions/after_initialize_spec.rb +0 -28
  88. data/spec/extensions/any_not_empty_spec.rb +0 -23
  89. data/spec/extensions/arbitrary_servers_spec.rb +0 -109
  90. data/spec/extensions/association_dependencies_spec.rb +0 -125
  91. data/spec/extensions/association_multi_add_remove_spec.rb +0 -1041
  92. data/spec/extensions/association_pks_spec.rb +0 -423
  93. data/spec/extensions/association_proxies_spec.rb +0 -100
  94. data/spec/extensions/auto_literal_strings_spec.rb +0 -205
  95. data/spec/extensions/auto_validations_spec.rb +0 -229
  96. data/spec/extensions/blacklist_security_spec.rb +0 -95
  97. data/spec/extensions/blank_spec.rb +0 -69
  98. data/spec/extensions/boolean_readers_spec.rb +0 -93
  99. data/spec/extensions/boolean_subsets_spec.rb +0 -47
  100. data/spec/extensions/caching_spec.rb +0 -273
  101. data/spec/extensions/caller_logging_spec.rb +0 -52
  102. data/spec/extensions/class_table_inheritance_spec.rb +0 -750
  103. data/spec/extensions/column_conflicts_spec.rb +0 -75
  104. data/spec/extensions/column_select_spec.rb +0 -129
  105. data/spec/extensions/columns_introspection_spec.rb +0 -90
  106. data/spec/extensions/columns_updated_spec.rb +0 -35
  107. data/spec/extensions/composition_spec.rb +0 -248
  108. data/spec/extensions/connection_expiration_spec.rb +0 -151
  109. data/spec/extensions/connection_validator_spec.rb +0 -144
  110. data/spec/extensions/constant_sql_override_spec.rb +0 -24
  111. data/spec/extensions/constraint_validations_plugin_spec.rb +0 -300
  112. data/spec/extensions/constraint_validations_spec.rb +0 -439
  113. data/spec/extensions/core_refinements_spec.rb +0 -528
  114. data/spec/extensions/csv_serializer_spec.rb +0 -183
  115. data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
  116. data/spec/extensions/dataset_associations_spec.rb +0 -365
  117. data/spec/extensions/dataset_source_alias_spec.rb +0 -51
  118. data/spec/extensions/date_arithmetic_spec.rb +0 -181
  119. data/spec/extensions/datetime_parse_to_time_spec.rb +0 -169
  120. data/spec/extensions/def_dataset_method_spec.rb +0 -100
  121. data/spec/extensions/defaults_setter_spec.rb +0 -150
  122. data/spec/extensions/delay_add_association_spec.rb +0 -73
  123. data/spec/extensions/dirty_spec.rb +0 -222
  124. data/spec/extensions/duplicate_columns_handler_spec.rb +0 -104
  125. data/spec/extensions/eager_each_spec.rb +0 -62
  126. data/spec/extensions/eager_graph_eager_spec.rb +0 -100
  127. data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
  128. data/spec/extensions/empty_failure_backtraces_spec.rb +0 -60
  129. data/spec/extensions/error_splitter_spec.rb +0 -18
  130. data/spec/extensions/error_sql_spec.rb +0 -20
  131. data/spec/extensions/escaped_like_spec.rb +0 -40
  132. data/spec/extensions/eval_inspect_spec.rb +0 -81
  133. data/spec/extensions/exclude_or_null_spec.rb +0 -15
  134. data/spec/extensions/finder_spec.rb +0 -260
  135. data/spec/extensions/force_encoding_spec.rb +0 -126
  136. data/spec/extensions/freeze_datasets_spec.rb +0 -31
  137. data/spec/extensions/graph_each_spec.rb +0 -113
  138. data/spec/extensions/hook_class_methods_spec.rb +0 -402
  139. data/spec/extensions/identifier_mangling_spec.rb +0 -201
  140. data/spec/extensions/implicit_subquery_spec.rb +0 -58
  141. data/spec/extensions/index_caching_spec.rb +0 -66
  142. data/spec/extensions/inflector_spec.rb +0 -183
  143. data/spec/extensions/input_transformer_spec.rb +0 -69
  144. data/spec/extensions/insert_conflict_spec.rb +0 -103
  145. data/spec/extensions/insert_returning_select_spec.rb +0 -72
  146. data/spec/extensions/instance_filters_spec.rb +0 -79
  147. data/spec/extensions/instance_hooks_spec.rb +0 -246
  148. data/spec/extensions/integer64_spec.rb +0 -22
  149. data/spec/extensions/inverted_subsets_spec.rb +0 -33
  150. data/spec/extensions/json_serializer_spec.rb +0 -346
  151. data/spec/extensions/lazy_attributes_spec.rb +0 -183
  152. data/spec/extensions/list_spec.rb +0 -291
  153. data/spec/extensions/looser_typecasting_spec.rb +0 -43
  154. data/spec/extensions/many_through_many_spec.rb +0 -2177
  155. data/spec/extensions/migration_spec.rb +0 -864
  156. data/spec/extensions/modification_detection_spec.rb +0 -93
  157. data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -92
  158. data/spec/extensions/named_timezones_spec.rb +0 -218
  159. data/spec/extensions/nested_attributes_spec.rb +0 -815
  160. data/spec/extensions/null_dataset_spec.rb +0 -85
  161. data/spec/extensions/optimistic_locking_spec.rb +0 -127
  162. data/spec/extensions/pagination_spec.rb +0 -116
  163. data/spec/extensions/pg_array_associations_spec.rb +0 -802
  164. data/spec/extensions/pg_array_ops_spec.rb +0 -144
  165. data/spec/extensions/pg_array_spec.rb +0 -398
  166. data/spec/extensions/pg_auto_constraint_validations_spec.rb +0 -209
  167. data/spec/extensions/pg_enum_spec.rb +0 -118
  168. data/spec/extensions/pg_extended_date_support_spec.rb +0 -126
  169. data/spec/extensions/pg_hstore_ops_spec.rb +0 -238
  170. data/spec/extensions/pg_hstore_spec.rb +0 -219
  171. data/spec/extensions/pg_inet_ops_spec.rb +0 -102
  172. data/spec/extensions/pg_inet_spec.rb +0 -72
  173. data/spec/extensions/pg_interval_spec.rb +0 -103
  174. data/spec/extensions/pg_json_ops_spec.rb +0 -356
  175. data/spec/extensions/pg_json_spec.rb +0 -451
  176. data/spec/extensions/pg_loose_count_spec.rb +0 -23
  177. data/spec/extensions/pg_range_ops_spec.rb +0 -60
  178. data/spec/extensions/pg_range_spec.rb +0 -600
  179. data/spec/extensions/pg_row_ops_spec.rb +0 -61
  180. data/spec/extensions/pg_row_plugin_spec.rb +0 -60
  181. data/spec/extensions/pg_row_spec.rb +0 -363
  182. data/spec/extensions/pg_static_cache_updater_spec.rb +0 -93
  183. data/spec/extensions/pg_timestamptz_spec.rb +0 -17
  184. data/spec/extensions/prepared_statements_safe_spec.rb +0 -66
  185. data/spec/extensions/prepared_statements_spec.rb +0 -177
  186. data/spec/extensions/pretty_table_spec.rb +0 -123
  187. data/spec/extensions/query_spec.rb +0 -94
  188. data/spec/extensions/rcte_tree_spec.rb +0 -387
  189. data/spec/extensions/round_timestamps_spec.rb +0 -39
  190. data/spec/extensions/s_spec.rb +0 -60
  191. data/spec/extensions/schema_caching_spec.rb +0 -64
  192. data/spec/extensions/schema_dumper_spec.rb +0 -870
  193. data/spec/extensions/select_remove_spec.rb +0 -38
  194. data/spec/extensions/sequel_4_dataset_methods_spec.rb +0 -121
  195. data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
  196. data/spec/extensions/serialization_spec.rb +0 -365
  197. data/spec/extensions/server_block_spec.rb +0 -135
  198. data/spec/extensions/server_logging_spec.rb +0 -45
  199. data/spec/extensions/sharding_spec.rb +0 -197
  200. data/spec/extensions/shared_caching_spec.rb +0 -151
  201. data/spec/extensions/single_table_inheritance_spec.rb +0 -347
  202. data/spec/extensions/singular_table_names_spec.rb +0 -22
  203. data/spec/extensions/skip_create_refresh_spec.rb +0 -18
  204. data/spec/extensions/spec_helper.rb +0 -70
  205. data/spec/extensions/split_array_nil_spec.rb +0 -24
  206. data/spec/extensions/split_values_spec.rb +0 -57
  207. data/spec/extensions/sql_comments_spec.rb +0 -33
  208. data/spec/extensions/sql_expr_spec.rb +0 -59
  209. data/spec/extensions/static_cache_cache_spec.rb +0 -35
  210. data/spec/extensions/static_cache_spec.rb +0 -471
  211. data/spec/extensions/string_agg_spec.rb +0 -90
  212. data/spec/extensions/string_date_time_spec.rb +0 -95
  213. data/spec/extensions/string_stripper_spec.rb +0 -68
  214. data/spec/extensions/subclasses_spec.rb +0 -79
  215. data/spec/extensions/subset_conditions_spec.rb +0 -38
  216. data/spec/extensions/symbol_aref_refinement_spec.rb +0 -28
  217. data/spec/extensions/symbol_as_refinement_spec.rb +0 -21
  218. data/spec/extensions/synchronize_sql_spec.rb +0 -124
  219. data/spec/extensions/table_select_spec.rb +0 -83
  220. data/spec/extensions/tactical_eager_loading_spec.rb +0 -402
  221. data/spec/extensions/thread_local_timezones_spec.rb +0 -67
  222. data/spec/extensions/throw_failures_spec.rb +0 -74
  223. data/spec/extensions/timestamps_spec.rb +0 -209
  224. data/spec/extensions/to_dot_spec.rb +0 -153
  225. data/spec/extensions/touch_spec.rb +0 -226
  226. data/spec/extensions/tree_spec.rb +0 -334
  227. data/spec/extensions/typecast_on_load_spec.rb +0 -86
  228. data/spec/extensions/unlimited_update_spec.rb +0 -21
  229. data/spec/extensions/update_or_create_spec.rb +0 -83
  230. data/spec/extensions/update_primary_key_spec.rb +0 -105
  231. data/spec/extensions/update_refresh_spec.rb +0 -59
  232. data/spec/extensions/uuid_spec.rb +0 -101
  233. data/spec/extensions/validate_associated_spec.rb +0 -52
  234. data/spec/extensions/validation_class_methods_spec.rb +0 -1040
  235. data/spec/extensions/validation_contexts_spec.rb +0 -31
  236. data/spec/extensions/validation_helpers_spec.rb +0 -525
  237. data/spec/extensions/whitelist_security_spec.rb +0 -157
  238. data/spec/extensions/xml_serializer_spec.rb +0 -213
  239. data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
  240. data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
  241. data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  242. data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  243. data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
  244. data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
  245. data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
  246. data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
  247. data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
  248. data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
  249. data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
  250. data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
  251. data/spec/files/double_migration/001_create_sessions.rb +0 -9
  252. data/spec/files/double_migration/002_create_nodes.rb +0 -19
  253. data/spec/files/double_migration/003_3_create_users.rb +0 -4
  254. data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
  255. data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
  256. data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  257. data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
  258. data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
  259. data/spec/files/empty_migration/001_create_sessions.rb +0 -9
  260. data/spec/files/empty_migration/002_create_nodes.rb +0 -0
  261. data/spec/files/empty_migration/003_3_create_users.rb +0 -4
  262. data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
  263. data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
  264. data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
  265. data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  266. data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
  267. data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  268. data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
  269. data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  270. data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
  271. data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
  272. data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  273. data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  274. data/spec/files/reversible_migrations/001_reversible.rb +0 -5
  275. data/spec/files/reversible_migrations/002_reversible.rb +0 -5
  276. data/spec/files/reversible_migrations/003_reversible.rb +0 -5
  277. data/spec/files/reversible_migrations/004_reversible.rb +0 -5
  278. data/spec/files/reversible_migrations/005_reversible.rb +0 -10
  279. data/spec/files/reversible_migrations/006_reversible.rb +0 -10
  280. data/spec/files/reversible_migrations/007_reversible.rb +0 -10
  281. data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
  282. data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
  283. data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
  284. data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
  285. data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
  286. data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
  287. data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
  288. data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
  289. data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
  290. data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
  291. data/spec/guards_helper.rb +0 -59
  292. data/spec/integration/associations_test.rb +0 -2597
  293. data/spec/integration/database_test.rb +0 -113
  294. data/spec/integration/dataset_test.rb +0 -2037
  295. data/spec/integration/eager_loader_test.rb +0 -687
  296. data/spec/integration/migrator_test.rb +0 -262
  297. data/spec/integration/model_test.rb +0 -203
  298. data/spec/integration/plugin_test.rb +0 -2423
  299. data/spec/integration/prepared_statement_test.rb +0 -405
  300. data/spec/integration/schema_test.rb +0 -903
  301. data/spec/integration/spec_helper.rb +0 -71
  302. data/spec/integration/timezone_test.rb +0 -86
  303. data/spec/integration/transaction_test.rb +0 -603
  304. data/spec/integration/type_test.rb +0 -127
  305. data/spec/model/association_reflection_spec.rb +0 -803
  306. data/spec/model/associations_spec.rb +0 -4738
  307. data/spec/model/base_spec.rb +0 -875
  308. data/spec/model/class_dataset_methods_spec.rb +0 -146
  309. data/spec/model/dataset_methods_spec.rb +0 -198
  310. data/spec/model/eager_loading_spec.rb +0 -2377
  311. data/spec/model/hooks_spec.rb +0 -370
  312. data/spec/model/inflector_spec.rb +0 -26
  313. data/spec/model/model_spec.rb +0 -956
  314. data/spec/model/plugins_spec.rb +0 -429
  315. data/spec/model/record_spec.rb +0 -2118
  316. data/spec/model/spec_helper.rb +0 -46
  317. data/spec/model/validations_spec.rb +0 -220
  318. data/spec/model_no_assoc_spec.rb +0 -1
  319. data/spec/model_spec.rb +0 -1
  320. data/spec/plugin_spec.rb +0 -1
  321. data/spec/sequel_coverage.rb +0 -15
  322. data/spec/sequel_warning.rb +0 -5
  323. data/spec/spec_config.rb +0 -12
@@ -1,51 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "dataset_source_alias extension" do
4
- before do
5
- @db = Sequel.mock
6
- @db.extension(:dataset_source_alias)
7
- end
8
-
9
- it "should automatically alias datasets to their first source in #from" do
10
- @db[@db[:a]].sql.must_equal 'SELECT * FROM (SELECT * FROM a) AS a'
11
- @db[:a, @db[:b]].sql.must_equal 'SELECT * FROM a, (SELECT * FROM b) AS b'
12
- end
13
-
14
- it "should handle virtual row blocks in #from" do
15
- @db.dataset.from{|_| @db[:a]}.sql.must_equal 'SELECT * FROM (SELECT * FROM a) AS a'
16
- @db.dataset.from(:a){|_| @db[:b]}.sql.must_equal 'SELECT * FROM a, (SELECT * FROM b) AS b'
17
- end
18
-
19
- it "should automatically alias datasets to their first source in #join" do
20
- @db[:a].cross_join(@db[:b]).sql.must_equal 'SELECT * FROM a CROSS JOIN (SELECT * FROM b) AS b'
21
- end
22
-
23
- it "should handle :table_alias option when joining" do
24
- @db[:a].cross_join(@db[:b], :table_alias=>:c).sql.must_equal 'SELECT * FROM a CROSS JOIN (SELECT * FROM b) AS c'
25
- end
26
-
27
- it "should handle aliasing issues automatically" do
28
- @db[:a, @db[:a]].sql.must_equal 'SELECT * FROM a, (SELECT * FROM a) AS a_0'
29
- @db.dataset.from(:a, @db[:a]){|_| @db[:a]}.sql.must_equal 'SELECT * FROM a, (SELECT * FROM a) AS a_0, (SELECT * FROM a) AS a_1'
30
- @db.dataset.from(:a, @db[:a]){|_| @db[:a]}.cross_join(@db[:a]).sql.must_equal 'SELECT * FROM a, (SELECT * FROM a) AS a_0, (SELECT * FROM a) AS a_1 CROSS JOIN (SELECT * FROM a) AS a_2'
31
- end
32
-
33
- it "should handle from_self" do
34
- @db[:a].from_self.sql.must_equal 'SELECT * FROM (SELECT * FROM a) AS a'
35
- @db[:a].from_self.from_self.sql.must_equal 'SELECT * FROM (SELECT * FROM (SELECT * FROM a) AS a) AS a'
36
- end
37
-
38
- it "should handle datasets without sources" do
39
- @db[@db.select(1)].sql.must_equal 'SELECT * FROM (SELECT 1) AS t1'
40
- @db[:t, @db.select(1)].sql.must_equal 'SELECT * FROM t, (SELECT 1) AS t1'
41
- @db[:a].cross_join(@db.select(1)).sql.must_equal 'SELECT * FROM a CROSS JOIN (SELECT 1) AS t1'
42
- end
43
-
44
- it "should handle datasets selecting from functions" do
45
- @db.dataset.from{|o| @db[o.f(:a)]}.sql.must_equal 'SELECT * FROM (SELECT * FROM f(a)) AS t1'
46
- end
47
-
48
- it "should handle datasets with literal SQL" do
49
- @db.from(@db['SELECT c FROM d']).sql.must_equal 'SELECT * FROM (SELECT c FROM d) AS t1'
50
- end
51
- end
@@ -1,181 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- asd = begin
4
- require 'active_support/duration'
5
- true
6
- rescue LoadError
7
- warn "Skipping some tests of date_arithmetic extension: can't load active_support/duration"
8
- false
9
- end
10
-
11
- Sequel.extension :date_arithmetic
12
-
13
- describe "date_arithmetic extension" do
14
- dbf = lambda do |db_type|
15
- db = Sequel.connect("mock://#{db_type}")
16
- db.extension :date_arithmetic
17
- db
18
- end
19
-
20
- before do
21
- @h0 = {:days=>0}
22
- @h1 = {:days=>1, :years=>nil, :hours=>0}
23
- @h2 = {:years=>1, :months=>1, :days=>1, :hours=>1, :minutes=>1, :seconds=>1}
24
- end
25
-
26
- it "should have Sequel.date_add with an interval hash return an appropriate Sequel::SQL::DateAdd expression" do
27
- da = Sequel.date_add(:a, :days=>1)
28
- da.must_be_kind_of(Sequel::SQL::DateAdd)
29
- da.expr.must_equal :a
30
- da.interval.must_equal(:days=>1)
31
- Sequel.date_add(:a, :years=>1, :months=>2, :days=>3, :hours=>1, :minutes=>1, :seconds=>1).interval.must_equal(:years=>1, :months=>2, :days=>3, :hours=>1, :minutes=>1, :seconds=>1)
32
- end
33
-
34
- it "should have Sequel.date_sub with an interval hash return an appropriate Sequel::SQL::DateAdd expression" do
35
- da = Sequel.date_sub(:a, :days=>1)
36
- da.must_be_kind_of(Sequel::SQL::DateAdd)
37
- da.expr.must_equal :a
38
- da.interval.must_equal(:days=>-1)
39
- Sequel.date_sub(:a, :years=>1, :months=>2, :days=>3, :hours=>1, :minutes=>1, :seconds=>1).interval.must_equal(:years=>-1, :months=>-2, :days=>-3, :hours=>-1, :minutes=>-1, :seconds=>-1)
40
- end
41
-
42
- it "should have Sequel.date_* with an interval hash handle nil values" do
43
- Sequel.date_sub(:a, :days=>1, :hours=>nil).interval.must_equal(:days=>-1)
44
- end
45
-
46
- it "should raise an error if given string values in an interval hash" do
47
- lambda{Sequel.date_add(:a, :days=>'1')}.must_raise(Sequel::InvalidValue)
48
- end
49
-
50
- if asd
51
- it "should have Sequel.date_add with an ActiveSupport::Duration return an appropriate Sequel::SQL::DateAdd expression" do
52
- da = Sequel.date_add(:a, ActiveSupport::Duration.new(1, [[:days, 1]]))
53
- da.must_be_kind_of(Sequel::SQL::DateAdd)
54
- da.expr.must_equal :a
55
- da.interval.must_equal(:days=>1)
56
- Sequel.date_add(:a, ActiveSupport::Duration.new(1, [[:years, 1], [:months, 1], [:days, 1], [:minutes, 61], [:seconds, 1]])).interval.must_equal(:years=>1, :months=>1, :days=>1, :minutes=>61, :seconds=>1)
57
- end
58
-
59
- it "should have Sequel.date_sub with an ActiveSupport::Duration return an appropriate Sequel::SQL::DateAdd expression" do
60
- da = Sequel.date_sub(:a, ActiveSupport::Duration.new(1, [[:days, 1]]))
61
- da.must_be_kind_of(Sequel::SQL::DateAdd)
62
- da.expr.must_equal :a
63
- da.interval.must_equal(:days=>-1)
64
- Sequel.date_sub(:a, ActiveSupport::Duration.new(1, [[:years, 1], [:months, 1], [:days, 1], [:minutes, 61], [:seconds, 1]])).interval.must_equal(:years=>-1, :months=>-1, :days=>-1, :minutes=>-61, :seconds=>-1)
65
- end
66
- end
67
-
68
- it "should use existing method" do
69
- db = Sequel.mock
70
- db.extend_datasets do
71
- def date_add_sql_append(sql, da)
72
- interval = String.new
73
- each_valid_interval_unit(da.interval, Sequel::SQL::DateAdd::DatasetMethods::DEF_DURATION_UNITS) do |value, sql_unit|
74
- interval << "#{value} #{sql_unit} "
75
- end
76
- literal_append(sql, Sequel.function(:da, da.expr, interval))
77
- end
78
- end
79
- db.extension :date_arithmetic
80
- db.literal(Sequel.date_add(:a, @h0)).must_equal "da(a, '')"
81
- db.literal(Sequel.date_add(:a, @h1)).must_equal "da(a, '1 days ')"
82
- db.literal(Sequel.date_add(:a, @h2)).must_equal "da(a, '1 years 1 months 1 days 1 hours 1 minutes 1 seconds ')"
83
- end
84
-
85
- it "should correctly literalize on Postgres" do
86
- db = dbf.call(:postgres).dataset.with_quote_identifiers(false)
87
- db.literal(Sequel.date_add(:a, @h0)).must_equal "CAST(a AS timestamp)"
88
- db.literal(Sequel.date_add(:a, @h1)).must_equal "(CAST(a AS timestamp) + CAST('1 days ' AS interval))"
89
- db.literal(Sequel.date_add(:a, @h2)).must_equal "(CAST(a AS timestamp) + CAST('1 years 1 months 1 days 1 hours 1 minutes 1 seconds ' AS interval))"
90
-
91
- db.literal(Sequel.date_add(:a, @h0, :cast=>:timestamptz)).must_equal "CAST(a AS timestamptz)"
92
- db.literal(Sequel.date_sub(:a, @h0, :cast=>:timestamptz)).must_equal "CAST(a AS timestamptz)"
93
- db.literal(Sequel.date_add(:a, @h2, :cast=>:timestamptz)).must_equal "(CAST(a AS timestamptz) + CAST('1 years 1 months 1 days 1 hours 1 minutes 1 seconds ' AS interval))"
94
- end
95
-
96
- it "should correctly literalize on SQLite" do
97
- db = dbf.call(:sqlite).dataset.with_quote_identifiers(false)
98
- db.literal(Sequel.date_add(:a, @h0)).must_equal "datetime(a)"
99
- db.literal(Sequel.date_add(:a, @h1)).must_equal "datetime(a, '1 days')"
100
- db.literal(Sequel.date_add(:a, @h2)).must_equal "datetime(a, '1 years', '1 months', '1 days', '1 hours', '1 minutes', '1 seconds')"
101
- end
102
-
103
- it "should correctly literalize on MySQL" do
104
- db = dbf.call(:mysql).dataset.with_quote_identifiers(false)
105
- db.literal(Sequel.date_add(:a, @h0)).must_equal "CAST(a AS DATETIME)"
106
- db.literal(Sequel.date_add(:a, @h1)).must_equal "DATE_ADD(a, INTERVAL 1 DAY)"
107
- db.literal(Sequel.date_add(:a, @h2)).must_equal "DATE_ADD(DATE_ADD(DATE_ADD(DATE_ADD(DATE_ADD(DATE_ADD(a, INTERVAL 1 YEAR), INTERVAL 1 MONTH), INTERVAL 1 DAY), INTERVAL 1 HOUR), INTERVAL 1 MINUTE), INTERVAL 1 SECOND)"
108
- db.literal(Sequel.date_add(:a, @h0, :cast=>:timestamp)).must_equal "CAST(a AS timestamp)"
109
- end
110
-
111
- it "should correctly literalize on HSQLDB" do
112
- db = Sequel.mock
113
- def db.database_type; :hsqldb end
114
- db.extension :date_arithmetic
115
- db.literal(Sequel.date_add(:a, @h0)).must_equal "CAST(CAST(a AS timestamp) AS timestamp)"
116
- db.literal(Sequel.date_add(:a, @h1)).must_equal "DATE_ADD(CAST(a AS timestamp), INTERVAL 1 DAY)"
117
- db.literal(Sequel.date_add(:a, @h2)).must_equal "DATE_ADD(DATE_ADD(DATE_ADD(DATE_ADD(DATE_ADD(DATE_ADD(CAST(a AS timestamp), INTERVAL 1 YEAR), INTERVAL 1 MONTH), INTERVAL 1 DAY), INTERVAL 1 HOUR), INTERVAL 1 MINUTE), INTERVAL 1 SECOND)"
118
-
119
- db.literal(Sequel.date_add(:a, @h0, :cast=>:datetime)).must_equal "CAST(CAST(a AS datetime) AS datetime)"
120
- db.literal(Sequel.date_add(:a, @h2, :cast=>:datetime)).must_equal "DATE_ADD(DATE_ADD(DATE_ADD(DATE_ADD(DATE_ADD(DATE_ADD(CAST(a AS datetime), INTERVAL 1 YEAR), INTERVAL 1 MONTH), INTERVAL 1 DAY), INTERVAL 1 HOUR), INTERVAL 1 MINUTE), INTERVAL 1 SECOND)"
121
- end
122
-
123
- it "should correctly literalize on MSSQL" do
124
- db = dbf.call(:mssql).dataset.with_quote_identifiers(false)
125
- db.literal(Sequel.date_add(:A, @h0)).must_equal "CAST(A AS datetime)"
126
- db.literal(Sequel.date_add(:A, @h1)).must_equal "DATEADD(day, 1, A)"
127
- db.literal(Sequel.date_add(:A, @h2)).must_equal "DATEADD(second, 1, DATEADD(minute, 1, DATEADD(hour, 1, DATEADD(day, 1, DATEADD(month, 1, DATEADD(year, 1, A))))))"
128
- db.literal(Sequel.date_add(:A, @h0, :cast=>:timestamp)).must_equal "CAST(A AS timestamp)"
129
- end
130
-
131
- it "should correctly literalize on H2" do
132
- db = Sequel.mock
133
- def db.database_type; :h2 end
134
- db.extension :date_arithmetic
135
- db.literal(Sequel.date_add(:a, @h0)).must_equal "CAST(a AS timestamp)"
136
- db.literal(Sequel.date_add(:a, @h1)).must_equal "DATEADD('day', 1, a)"
137
- db.literal(Sequel.date_add(:a, @h2)).must_equal "DATEADD('second', 1, DATEADD('minute', 1, DATEADD('hour', 1, DATEADD('day', 1, DATEADD('month', 1, DATEADD('year', 1, a))))))"
138
- db.literal(Sequel.date_add(:a, @h0, :cast=>:datetime)).must_equal "CAST(a AS datetime)"
139
- end
140
-
141
- it "should correctly literalize on access" do
142
- db = dbf.call(:access).dataset.with_quote_identifiers(false)
143
- db.literal(Sequel.date_add(:a, @h0)).must_equal "CDate(a)"
144
- db.literal(Sequel.date_add(:a, @h1)).must_equal "DATEADD('d', 1, a)"
145
- db.literal(Sequel.date_add(:a, @h2)).must_equal "DATEADD('s', 1, DATEADD('n', 1, DATEADD('h', 1, DATEADD('d', 1, DATEADD('m', 1, DATEADD('yyyy', 1, a))))))"
146
- end
147
-
148
- it "should correctly literalize on Derby" do
149
- db = Sequel.mock
150
- def db.database_type; :derby end
151
- db.extension :date_arithmetic
152
- db.literal(Sequel.date_add(:a, @h0)).must_equal "CAST(a AS timestamp)"
153
- db.literal(Sequel.date_add(:a, @h1)).must_equal "{fn timestampadd(SQL_TSI_DAY, 1, timestamp(a))}"
154
- db.literal(Sequel.date_add(:a, @h2)).must_equal "{fn timestampadd(SQL_TSI_SECOND, 1, timestamp({fn timestampadd(SQL_TSI_MINUTE, 1, timestamp({fn timestampadd(SQL_TSI_HOUR, 1, timestamp({fn timestampadd(SQL_TSI_DAY, 1, timestamp({fn timestampadd(SQL_TSI_MONTH, 1, timestamp({fn timestampadd(SQL_TSI_YEAR, 1, timestamp(a))}))}))}))}))}))}"
155
- db.literal(Sequel.date_add(Date.civil(2012, 11, 12), @h1)).must_equal "{fn timestampadd(SQL_TSI_DAY, 1, timestamp((CAST('2012-11-12' AS varchar(255)) || ' 00:00:00')))}"
156
- db.literal(Sequel.date_add(:a, @h0, :cast=>:datetime)).must_equal "CAST(a AS datetime)"
157
- end
158
-
159
- it "should correctly literalize on Oracle" do
160
- db = dbf.call(:oracle).dataset.with_quote_identifiers(false)
161
- db.literal(Sequel.date_add(:A, @h0)).must_equal "CAST(A AS timestamp)"
162
- db.literal(Sequel.date_add(:A, @h1)).must_equal "(A + INTERVAL '1' DAY)"
163
- db.literal(Sequel.date_add(:A, @h2)).must_equal "(A + INTERVAL '1' YEAR + INTERVAL '1' MONTH + INTERVAL '1' DAY + INTERVAL '1' HOUR + INTERVAL '1' MINUTE + INTERVAL '1' SECOND)"
164
- db.literal(Sequel.date_add(:A, @h0, :cast=>:datetime)).must_equal "CAST(A AS datetime)"
165
- end
166
-
167
- it "should correctly literalize on DB2" do
168
- db = dbf.call(:db2)
169
- db.literal(Sequel.date_add(:A, @h0)).must_equal "CAST(A AS timestamp)"
170
- db.literal(Sequel.date_add(:A, @h1)).must_equal "(CAST(A AS timestamp) + 1 days)"
171
- db.literal(Sequel.date_add(:A, @h0)).must_equal "CAST(A AS timestamp)"
172
- db.literal(Sequel.date_add(:A, @h1, :cast=>:datetime)).must_equal "(CAST(A AS datetime) + 1 days)"
173
- db.literal(Sequel.date_add(:A, @h2, :cast=>:datetime)).must_equal "(CAST(A AS datetime) + 1 years + 1 months + 1 days + 1 hours + 1 minutes + 1 seconds)"
174
- end
175
-
176
- it "should raise error if literalizing on an unsupported database" do
177
- db = Sequel.mock
178
- db.extension :date_arithmetic
179
- lambda{db.literal(Sequel.date_add(:a, @h0))}.must_raise(Sequel::Error)
180
- end
181
- end
@@ -1,169 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "datetime_parse_to_time extension" do
4
- before(:all) do
5
- Sequel.extension :datetime_parse_to_time
6
- end
7
- after(:all) do
8
- # Can't undo the adding of the module to Sequel, so removing the
9
- # method in the module is the only way to fix it.
10
- Sequel::DateTimeParseToTime.send(:remove_method, :convert_input_timestamp)
11
- end
12
-
13
- before do
14
- @db = Sequel::Database.new
15
- @dataset = @db.dataset.with_extend do
16
- def supports_timestamp_timezones?; true end
17
- def supports_timestamp_usecs?; false end
18
- end
19
- @utc_time = Time.utc(2010, 1, 2, 3, 4, 5)
20
- @local_time = Time.local(2010, 1, 2, 3, 4, 5)
21
- @offset = sprintf("%+03i%02i", *(@local_time.utc_offset/60).divmod(60))
22
- @dt_offset = @local_time.utc_offset/Rational(86400, 1)
23
- @utc_datetime = DateTime.new(2010, 1, 2, 3, 4, 5)
24
- @local_datetime = DateTime.new(2010, 1, 2, 3, 4, 5, @dt_offset)
25
- end
26
- after do
27
- Sequel.default_timezone = nil
28
- Sequel.datetime_class = Time
29
- end
30
-
31
- it "should handle conversions during invalid localtimes" do
32
- # This only checks of a couple of times that may be invalid.
33
- # You can run with TZ=Europe/Berlin or TZ=US/Pacific
34
- Sequel.database_timezone = :utc
35
- Sequel.database_to_application_timestamp("2017-03-26 02:30:00").getutc.hour.must_equal 2
36
- Sequel.database_to_application_timestamp("2017-03-12 02:30:00").getutc.hour.must_equal 2
37
- end
38
-
39
- it "should handle an database timezone of :utc when literalizing values" do
40
- Sequel.database_timezone = :utc
41
- @dataset.literal(Time.utc(2010, 1, 2, 3, 4, 5)).must_equal "'2010-01-02 03:04:05+0000'"
42
- @dataset.literal(DateTime.new(2010, 1, 2, 3, 4, 5)).must_equal "'2010-01-02 03:04:05+0000'"
43
- end
44
-
45
- it "should handle an database timezone of :local when literalizing values" do
46
- Sequel.database_timezone = :local
47
- @dataset.literal(Time.local(2010, 1, 2, 3, 4, 5)).must_equal "'2010-01-02 03:04:05#{@offset}'"
48
- @dataset.literal(DateTime.new(2010, 1, 2, 3, 4, 5, @dt_offset)).must_equal "'2010-01-02 03:04:05#{@offset}'"
49
- end
50
-
51
- it "should have Database#timezone override Sequel.database_timezone" do
52
- Sequel.database_timezone = :local
53
- @db.timezone = :utc
54
- @dataset.literal(Time.utc(2010, 1, 2, 3, 4, 5)).must_equal "'2010-01-02 03:04:05+0000'"
55
- @dataset.literal(DateTime.new(2010, 1, 2, 3, 4, 5)).must_equal "'2010-01-02 03:04:05+0000'"
56
-
57
- Sequel.database_timezone = :utc
58
- @db.timezone = :local
59
- @dataset.literal(Time.local(2010, 1, 2, 3, 4, 5)).must_equal "'2010-01-02 03:04:05#{@offset}'"
60
- @dataset.literal(DateTime.new(2010, 1, 2, 3, 4, 5, @dt_offset)).must_equal "'2010-01-02 03:04:05#{@offset}'"
61
- end
62
-
63
- it "should handle converting database timestamps into application timestamps" do
64
- Sequel.database_timezone = :utc
65
- Sequel.application_timezone = :local
66
- t = Time.now.utc
67
- Sequel.database_to_application_timestamp(t).to_s.must_equal t.getlocal.to_s
68
- Sequel.database_to_application_timestamp(t.to_s).to_s.must_equal t.getlocal.to_s
69
- Sequel.database_to_application_timestamp(t.strftime('%Y-%m-%d %H:%M:%S')).to_s.must_equal t.getlocal.to_s
70
-
71
- Sequel.datetime_class = DateTime
72
- dt = DateTime.now
73
- dt2 = dt.new_offset(0)
74
- Sequel.database_to_application_timestamp(dt2).to_s.must_equal dt.to_s
75
- Sequel.database_to_application_timestamp(dt2.to_s).to_s.must_equal dt.to_s
76
- Sequel.database_to_application_timestamp(dt2.strftime('%Y-%m-%d %H:%M:%S')).to_s.must_equal dt.to_s
77
-
78
- Sequel.datetime_class = Time
79
- Sequel.database_timezone = :local
80
- Sequel.application_timezone = :utc
81
- Sequel.database_to_application_timestamp(t.getlocal).to_s.must_equal t.to_s
82
- Sequel.database_to_application_timestamp(t.getlocal.to_s).to_s.must_equal t.to_s
83
- Sequel.database_to_application_timestamp(t.getlocal.strftime('%Y-%m-%d %H:%M:%S')).to_s.must_equal t.to_s
84
-
85
- Sequel.datetime_class = DateTime
86
- Sequel.database_to_application_timestamp(dt).to_s.must_equal dt2.to_s
87
- Sequel.database_to_application_timestamp(dt.to_s).to_s.must_equal dt2.to_s
88
- Sequel.database_to_application_timestamp(dt.strftime('%Y-%m-%d %H:%M:%S')).to_s.must_equal dt2.to_s
89
- end
90
-
91
- it "should handle typecasting timestamp columns" do
92
- Sequel.typecast_timezone = :utc
93
- Sequel.application_timezone = :local
94
- t = Time.now.utc
95
- @db.typecast_value(:datetime, t).to_s.must_equal t.getlocal.to_s
96
- @db.typecast_value(:datetime, t.to_s).to_s.must_equal t.getlocal.to_s
97
- @db.typecast_value(:datetime, t.strftime('%Y-%m-%d %H:%M:%S')).to_s.must_equal t.getlocal.to_s
98
-
99
- Sequel.datetime_class = DateTime
100
- dt = DateTime.now
101
- dt2 = dt.new_offset(0)
102
- @db.typecast_value(:datetime, dt2).to_s.must_equal dt.to_s
103
- @db.typecast_value(:datetime, dt2.to_s).to_s.must_equal dt.to_s
104
- @db.typecast_value(:datetime, dt2.strftime('%Y-%m-%d %H:%M:%S')).to_s.must_equal dt.to_s
105
-
106
- Sequel.datetime_class = Time
107
- Sequel.typecast_timezone = :local
108
- Sequel.application_timezone = :utc
109
- @db.typecast_value(:datetime, t.getlocal).to_s.must_equal t.to_s
110
- @db.typecast_value(:datetime, t.getlocal.to_s).to_s.must_equal t.to_s
111
- @db.typecast_value(:datetime, t.getlocal.strftime('%Y-%m-%d %H:%M:%S')).to_s.must_equal t.to_s
112
-
113
- Sequel.datetime_class = DateTime
114
- @db.typecast_value(:datetime, dt).to_s.must_equal dt2.to_s
115
- @db.typecast_value(:datetime, dt.to_s).to_s.must_equal dt2.to_s
116
- @db.typecast_value(:datetime, dt.strftime('%Y-%m-%d %H:%M:%S')).to_s.must_equal dt2.to_s
117
- end
118
-
119
- it "should handle converting database timestamp columns from an array of values" do
120
- Sequel.database_timezone = :utc
121
- Sequel.application_timezone = :local
122
- t = Time.now.utc
123
- Sequel.database_to_application_timestamp([t.year, t.mon, t.day, t.hour, t.min, t.sec]).to_s.must_equal t.getlocal.to_s
124
-
125
- Sequel.datetime_class = DateTime
126
- dt = DateTime.now
127
- dt2 = dt.new_offset(0)
128
- Sequel.database_to_application_timestamp([dt2.year, dt2.mon, dt2.day, dt2.hour, dt2.min, dt2.sec]).to_s.must_equal dt.to_s
129
-
130
- Sequel.datetime_class = Time
131
- Sequel.database_timezone = :local
132
- Sequel.application_timezone = :utc
133
- t = t.getlocal
134
- Sequel.database_to_application_timestamp([t.year, t.mon, t.day, t.hour, t.min, t.sec]).to_s.must_equal t.getutc.to_s
135
-
136
- Sequel.datetime_class = DateTime
137
- Sequel.database_to_application_timestamp([dt.year, dt.mon, dt.day, dt.hour, dt.min, dt.sec]).to_s.must_equal dt2.to_s
138
- end
139
-
140
- it "should raise an InvalidValue error when an error occurs while converting a timestamp" do
141
- proc{Sequel.database_to_application_timestamp([0, 0, 0, 0, 0, 0])}.must_raise(Sequel::InvalidValue)
142
- end
143
-
144
- it "should raise an error when attempting to typecast to a timestamp from an unsupported type" do
145
- proc{Sequel.database_to_application_timestamp(Object.new)}.must_raise(Sequel::InvalidValue)
146
- end
147
-
148
- it "should raise an InvalidValue error when the DateTime class is used and when a bad application timezone is used when attempting to convert timestamps" do
149
- Sequel.application_timezone = :blah
150
- Sequel.datetime_class = DateTime
151
- proc{Sequel.database_to_application_timestamp('2009-06-01 10:20:30')}.must_raise(Sequel::InvalidValue)
152
- end
153
-
154
- it "should raise an InvalidValue error when the DateTime class is used and when a bad database timezone is used when attempting to convert timestamps" do
155
- Sequel.database_timezone = :blah
156
- Sequel.datetime_class = DateTime
157
- proc{Sequel.database_to_application_timestamp('2009-06-01 10:20:30')}.must_raise(Sequel::InvalidValue)
158
- end
159
-
160
- it "should have Sequel.default_timezone= should set all other timezones" do
161
- Sequel.database_timezone.must_be_nil
162
- Sequel.application_timezone.must_be_nil
163
- Sequel.typecast_timezone.must_be_nil
164
- Sequel.default_timezone = :utc
165
- Sequel.database_timezone.must_equal :utc
166
- Sequel.application_timezone.must_equal :utc
167
- Sequel.typecast_timezone.must_equal :utc
168
- end
169
- end
@@ -1,100 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe Sequel::Model, ".def_dataset_method" do
4
- before do
5
- @c = Class.new(Sequel::Model(:items))
6
- @c.plugin :def_dataset_method
7
- end
8
-
9
- it "should add a method to the dataset and model if called with a block argument" do
10
- @c.def_dataset_method(:return_3){3}
11
- @c.return_3.must_equal 3
12
- @c.dataset.return_3.must_equal 3
13
- end
14
-
15
- it "should handle weird method names" do
16
- @c.def_dataset_method(:"return 3"){3}
17
- @c.send(:"return 3").must_equal 3
18
- @c.dataset.send(:"return 3").must_equal 3
19
- end
20
-
21
- it "should not add a model method if the model already responds to the method" do
22
- @c.instance_eval do
23
- def foo
24
- 1
25
- end
26
-
27
- private
28
-
29
- def bar
30
- 2
31
- end
32
-
33
- def_dataset_method(:foo){3}
34
- def_dataset_method(:bar){4}
35
- end
36
- @c.foo.must_equal 1
37
- @c.dataset.foo.must_equal 3
38
- @c.send(:bar).must_equal 2
39
- @c.dataset.bar.must_equal 4
40
- end
41
-
42
- it "should add all passed methods to the model if called without a block argument" do
43
- @c.def_dataset_method(:return_3, :return_4)
44
- proc{@c.return_3}.must_raise(NoMethodError)
45
- proc{@c.return_4}.must_raise(NoMethodError)
46
- @c.dataset = @c.dataset.with_extend do
47
- def return_3; 3; end
48
- def return_4; 4; end
49
- end
50
- @c.return_3.must_equal 3
51
- @c.return_4.must_equal 4
52
- end
53
-
54
- it "should cache calls and readd methods if set_dataset is used" do
55
- @c.def_dataset_method(:return_3){3}
56
- @c.set_dataset :items
57
- @c.return_3.must_equal 3
58
- @c.dataset.return_3.must_equal 3
59
- end
60
-
61
- it "should readd methods to subclasses, if set_dataset is used in a subclass" do
62
- @c.def_dataset_method(:return_3){3}
63
- c = Class.new(@c)
64
- c.set_dataset :items
65
- c.return_3.must_equal 3
66
- c.dataset.return_3.must_equal 3
67
- end
68
- end
69
-
70
- describe Sequel::Model, ".subset" do
71
- before do
72
- @c = Class.new(Sequel::Model(:items))
73
- @c.plugin :def_dataset_method
74
- DB.reset
75
- end
76
-
77
- it "should create a filter on the underlying dataset" do
78
- proc {@c.new_only}.must_raise(NoMethodError)
79
-
80
- @c.subset(:new_only){age < 'new'}
81
-
82
- @c.new_only.sql.must_equal "SELECT * FROM items WHERE (age < 'new')"
83
- @c.dataset.new_only.sql.must_equal "SELECT * FROM items WHERE (age < 'new')"
84
-
85
- @c.subset(:pricey){price > 100}
86
-
87
- @c.pricey.sql.must_equal "SELECT * FROM items WHERE (price > 100)"
88
- @c.dataset.pricey.sql.must_equal "SELECT * FROM items WHERE (price > 100)"
89
-
90
- @c.pricey.new_only.sql.must_equal "SELECT * FROM items WHERE ((price > 100) AND (age < 'new'))"
91
- @c.new_only.pricey.sql.must_equal "SELECT * FROM items WHERE ((age < 'new') AND (price > 100))"
92
- end
93
-
94
- it "should not override existing model methods" do
95
- def @c.active() true end
96
- @c.subset(:active, :active)
97
- @c.active.must_equal true
98
- end
99
- end
100
-