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,471 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "Sequel::Plugins::StaticCache" do
4
- before do
5
- @db = Sequel.mock
6
- @db.fetch = [{:id=>1}, {:id=>2}]
7
- @db.numrows = 1
8
- @c = Class.new(Sequel::Model(@db[:t]))
9
- @c.columns :id, :name
10
- end
11
-
12
- it "should not attempt to validate objects" do
13
- @c.send(:define_method, :validate){errors.add(:name, 'bad')}
14
- @c.plugin(:static_cache)
15
- @c.map{|o| o.valid?}.must_equal [true, true]
16
- end
17
-
18
- static_cache_specs = shared_description do
19
- it "should use a ruby hash as a cache of all model instances" do
20
- @c.cache.must_equal(1=>@c.load(:id=>1), 2=>@c.load(:id=>2))
21
- @c.cache[1].must_be_same_as(@c1)
22
- @c.cache[2].must_be_same_as(@c2)
23
- end
24
-
25
- it "should make .[] method with primary key use the cache" do
26
- @c[1].must_equal @c1
27
- @c[2].must_equal @c2
28
- @c[3].must_be_nil
29
- @c[[1, 2]].must_be_nil
30
- @c[nil].must_be_nil
31
- @c[].must_be_nil
32
- @db.sqls.must_equal []
33
- end
34
-
35
- it "should have .[] with a hash not use the cache" do
36
- @db.fetch = {:id=>2}
37
- @c[:id=>2].must_equal @c2
38
- @db.sqls.must_equal ['SELECT * FROM t WHERE (id = 2) LIMIT 1']
39
- end
40
-
41
- it "should support cache_get_pk" do
42
- @c.cache_get_pk(1).must_equal @c1
43
- @c.cache_get_pk(2).must_equal @c2
44
- @c.cache_get_pk(3).must_be_nil
45
- @db.sqls.must_equal []
46
- end
47
-
48
- it "should have first just returns instances without sending a query" do
49
- @c.first.must_equal @c1
50
- @c.first(2).must_equal [@c1, @c2]
51
- @c.first(0).must_equal []
52
- @db.sqls.must_equal []
53
- end
54
-
55
- it "should have first just returns instances with sending a query" do
56
- @db.fetch = lambda do |s|
57
- case s
58
- when /id = '?(\d+)'?/
59
- id = $1.to_i
60
- id <= 2 ? { id: id } : nil
61
- when /id >= '?(\d+)'?/
62
- id = $1.to_i
63
- id <= 2 ? (id..2).map { |i| { id: i } } : []
64
- end
65
- end
66
-
67
- @c.first(id: 2).must_equal @c2
68
- @c.first(id: '2').must_equal @c2
69
- @c.first(id: 3).must_be_nil
70
- @c.first { id >= 2 }.must_equal @c2
71
- @c.first(2) { id >= 1 }.must_equal [@c1, @c2]
72
- @c.first(Sequel.lit('id = ?', 2)).must_equal @c2
73
- @db.sqls.must_equal [
74
- "SELECT * FROM t WHERE (id = 2) LIMIT 1",
75
- "SELECT * FROM t WHERE (id = '2') LIMIT 1",
76
- "SELECT * FROM t WHERE (id = 3) LIMIT 1",
77
- "SELECT * FROM t WHERE (id >= 2) LIMIT 1",
78
- "SELECT * FROM t WHERE (id >= 1) LIMIT 2",
79
- "SELECT * FROM t WHERE (id = 2) LIMIT 1"
80
- ]
81
- end
82
-
83
- it "should have each just iterate over the hash's values without sending a query" do
84
- a = []
85
- @c.each{|o| a << o}
86
- a = a.sort_by{|o| o.id}
87
- a.first.must_equal @c1
88
- a.last.must_equal @c2
89
- @db.sqls.must_equal []
90
- end
91
-
92
- it "should have map just iterate over the hash's values without sending a query if no argument is given" do
93
- @c.map{|v| v.id}.sort.must_equal [1, 2]
94
- @db.sqls.must_equal []
95
- end
96
-
97
- it "should have count with no argument or block not issue a query" do
98
- @c.count.must_equal 2
99
- @db.sqls.must_equal []
100
- end
101
-
102
- it "should have count with argument or block not issue a query" do
103
- @db.fetch = [[{:count=>1}], [{:count=>2}]]
104
- @c.count(:a).must_equal 1
105
- @c.count{b}.must_equal 2
106
- @db.sqls.must_equal ["SELECT count(a) AS count FROM t LIMIT 1", "SELECT count(b) AS count FROM t LIMIT 1"]
107
- end
108
-
109
- it "should have map not send a query if given an argument" do
110
- @c.map(:id).sort.must_equal [1, 2]
111
- @db.sqls.must_equal []
112
- @c.map([:id,:id]).sort.must_equal [[1,1], [2,2]]
113
- @db.sqls.must_equal []
114
- end
115
-
116
- it "should have map without a block or argument not raise an exception or issue a query" do
117
- @c.map.to_a.must_equal @c.all
118
- @db.sqls.must_equal []
119
- end
120
-
121
- it "should have map without a block not return a frozen object" do
122
- @c.map.frozen?.must_equal false
123
- end
124
-
125
- it "should have map without a block return an Enumerator" do
126
- @c.map.class.must_equal Enumerator
127
- end
128
-
129
- it "should have map with a block and argument raise" do
130
- proc{@c.map(:id){}}.must_raise(Sequel::Error)
131
- end
132
-
133
- it "should have other enumerable methods work without sending a query" do
134
- a = @c.sort_by{|o| o.id}
135
- a.first.must_equal @c1
136
- a.last.must_equal @c2
137
- @db.sqls.must_equal []
138
- end
139
-
140
- it "should have all return all objects" do
141
- a = @c.all.sort_by{|o| o.id}
142
- a.first.must_equal @c1
143
- a.last.must_equal @c2
144
- @db.sqls.must_equal []
145
- end
146
-
147
- it "should have all not return a frozen object" do
148
- @c.all.frozen?.must_equal false
149
- end
150
-
151
- it "should have all return things in dataset order" do
152
- @c.all.must_equal [@c1, @c2]
153
- end
154
-
155
- it "should have all receiving block" do
156
- a = []
157
- b = @c.all { |o| a << o }
158
- a.must_equal [@c1, @c2]
159
- a.must_equal b
160
- @db.sqls.must_equal []
161
- end
162
-
163
- it "should have as_hash/to_hash without arguments run without a query" do
164
- a = @c.to_hash
165
- a.must_equal(1=>@c1, 2=>@c2)
166
- a[1].must_equal @c1
167
- a[2].must_equal @c2
168
-
169
- a = @c.as_hash
170
- a.must_equal(1=>@c1, 2=>@c2)
171
- a[1].must_equal @c1
172
- a[2].must_equal @c2
173
- @db.sqls.must_equal []
174
- end
175
-
176
- it "should have as_hash handle :hash option" do
177
- h = {}
178
- a = @c.as_hash(nil, nil, :hash=>h)
179
- a.must_be_same_as h
180
- a.must_equal(1=>@c1, 2=>@c2)
181
- a[1].must_equal @c1
182
- a[2].must_equal @c2
183
-
184
- h = {}
185
- a = @c.as_hash(:id, nil, :hash=>h)
186
- a.must_be_same_as h
187
- a.must_equal(1=>@c1, 2=>@c2)
188
- a[1].must_equal @c1
189
- a[2].must_equal @c2
190
-
191
- @db.sqls.must_equal []
192
- end
193
-
194
- it "should have as_hash with arguments return results without a query" do
195
- a = @c.as_hash(:id)
196
- a.must_equal(1=>@c1, 2=>@c2)
197
- a[1].must_equal @c1
198
- a[2].must_equal @c2
199
-
200
- a = @c.as_hash([:id])
201
- a.must_equal([1]=>@c1, [2]=>@c2)
202
- a[[1]].must_equal @c1
203
- a[[2]].must_equal @c2
204
-
205
- @c.as_hash(:id, :id).must_equal(1=>1, 2=>2)
206
- @c.as_hash([:id], :id).must_equal([1]=>1, [2]=>2)
207
- @c.as_hash(:id, [:id]).must_equal(1=>[1], 2=>[2])
208
- @c.as_hash([:id], [:id]).must_equal([1]=>[1], [2]=>[2])
209
-
210
- @db.sqls.must_equal []
211
- end
212
-
213
- it "should have as_hash not return a frozen object" do
214
- @c.as_hash.frozen?.must_equal false
215
- end
216
-
217
- it "should have to_hash_groups without arguments return the cached objects without a query" do
218
- a = @c.to_hash_groups(:id)
219
- a.must_equal(1=>[@c1], 2=>[@c2])
220
- a[1].first.must_equal @c1
221
- a[2].first.must_equal @c2
222
-
223
- a = @c.to_hash_groups([:id])
224
- a.must_equal([1]=>[@c1], [2]=>[@c2])
225
- a[[1]].first.must_equal @c1
226
- a[[2]].first.must_equal @c2
227
-
228
- @c.to_hash_groups(:id, :id).must_equal(1=>[1], 2=>[2])
229
- @c.to_hash_groups([:id], :id).must_equal([1]=>[1], [2]=>[2])
230
- @c.to_hash_groups(:id, [:id]).must_equal(1=>[[1]], 2=>[[2]])
231
- @c.to_hash_groups([:id], [:id]).must_equal([1]=>[[1]], [2]=>[[2]])
232
-
233
- @db.sqls.must_equal []
234
- end
235
-
236
- it "should have to_hash_groups handle :hash option" do
237
- h = {}
238
- a = @c.to_hash_groups(:id, nil, :hash=>h)
239
- a.must_be_same_as h
240
- a.must_equal(1=>[@c1], 2=>[@c2])
241
- a[1].first.must_equal @c1
242
- a[2].first.must_equal @c2
243
- end
244
-
245
- it "should have as_hash_groups without arguments return the cached objects without a query" do
246
- a = @c.to_hash_groups(:id)
247
- a.must_equal(1=>[@c1], 2=>[@c2])
248
- a[1].first.must_equal @c1
249
- a[2].first.must_equal @c2
250
-
251
- a = @c.to_hash_groups([:id])
252
- a.must_equal([1]=>[@c1], [2]=>[@c2])
253
- a[[1]].first.must_equal @c1
254
- a[[2]].first.must_equal @c2
255
-
256
- @c.to_hash_groups(:id, :id).must_equal(1=>[1], 2=>[2])
257
- @c.to_hash_groups([:id], :id).must_equal([1]=>[1], [2]=>[2])
258
- @c.to_hash_groups(:id, [:id]).must_equal(1=>[[1]], 2=>[[2]])
259
- @c.to_hash_groups([:id], [:id]).must_equal([1]=>[[1]], [2]=>[[2]])
260
-
261
- @db.sqls.must_equal []
262
- end
263
-
264
- it "subclasses should work correctly" do
265
- c = Class.new(@c)
266
- c.all.must_equal [c.load(:id=>1), c.load(:id=>2)]
267
- c.as_hash.must_equal(1=>c.load(:id=>1), 2=>c.load(:id=>2))
268
- @db.sqls.must_equal ['SELECT * FROM t']
269
- end
270
-
271
- it "set_dataset should work correctly" do
272
- ds = @c.dataset.from(:t2).columns(:id).with_fetch(:id=>3)
273
- @c.dataset = ds
274
- @c.all.must_equal [@c.load(:id=>3)]
275
- @c.as_hash.must_equal(3=>@c.load(:id=>3))
276
- @c.as_hash[3].must_equal @c.all.first
277
- @db.sqls.must_equal ['SELECT * FROM t2']
278
- end
279
-
280
- it "should have load_cache" do
281
- a = @c.all.sort_by{|o| o.id}
282
- a.first.must_equal @c1
283
- a.last.must_equal @c2
284
- @db.sqls.must_equal []
285
-
286
- @c.load_cache
287
-
288
- a = @c.all.sort_by{|o| o.id}
289
- a.first.must_equal @c1
290
- a.last.must_equal @c2
291
- @db.sqls.must_equal ['SELECT * FROM t']
292
- end
293
- end
294
-
295
- describe "without options" do
296
- before do
297
- @c.plugin :static_cache
298
- @c1 = @c.cache[1]
299
- @c2 = @c.cache[2]
300
- @db.sqls
301
- end
302
-
303
- include static_cache_specs
304
-
305
- it "should work correctly with composite keys" do
306
- @db.fetch = [{:id=>1, :id2=>1}, {:id=>2, :id2=>1}]
307
- @c = Class.new(Sequel::Model(@db[:t]))
308
- @c.columns :id, :id2
309
- @c.set_primary_key([:id, :id2])
310
- @c.plugin :static_cache
311
- @db.sqls
312
- @c1 = @c.cache[[1, 2]]
313
- @c2 = @c.cache[[2, 1]]
314
- @c[[1, 2]].must_be_same_as(@c1)
315
- @c[[2, 1]].must_be_same_as(@c2)
316
- @db.sqls.must_equal []
317
- end
318
-
319
- it "all of the static cache values (model instances) should be frozen" do
320
- @c.all.all?{|o| o.frozen?}.must_equal true
321
- end
322
-
323
- it "should make .[] method with primary key return cached instances" do
324
- @c[1].must_be_same_as(@c1)
325
- @c[2].must_be_same_as(@c2)
326
- end
327
-
328
- it "should have cache_get_pk return cached instances" do
329
- @c.cache_get_pk(1).must_be_same_as(@c1)
330
- @c.cache_get_pk(2).must_be_same_as(@c2)
331
- end
332
-
333
- it "should have each yield cached objects" do
334
- a = []
335
- @c.each{|o| a << o}
336
- a = a.sort_by{|o| o.id}
337
- a.first.must_be_same_as(@c1)
338
- a.last.must_be_same_as(@c2)
339
- end
340
-
341
- it "should have other enumerable methods work yield cached objects" do
342
- a = @c.sort_by{|o| o.id}
343
- a.first.must_be_same_as(@c1)
344
- a.last.must_be_same_as(@c2)
345
- end
346
-
347
- it "should have all return cached instances" do
348
- a = @c.all.sort_by{|o| o.id}
349
- a.first.must_be_same_as(@c1)
350
- a.last.must_be_same_as(@c2)
351
- end
352
-
353
- it "should have as_hash without arguments use cached instances" do
354
- a = @c.as_hash
355
- a[1].must_be_same_as(@c1)
356
- a[2].must_be_same_as(@c2)
357
- end
358
-
359
- it "should have as_hash with arguments return cached instances" do
360
- a = @c.as_hash(:id)
361
- a[1].must_be_same_as(@c1)
362
- a[2].must_be_same_as(@c2)
363
-
364
- a = @c.as_hash([:id])
365
- a[[1]].must_be_same_as(@c1)
366
- a[[2]].must_be_same_as(@c2)
367
- end
368
-
369
- it "should have to_hash_groups without single argument return the cached instances" do
370
- a = @c.to_hash_groups(:id)
371
- a[1].first.must_be_same_as(@c1)
372
- a[2].first.must_be_same_as(@c2)
373
-
374
- a = @c.to_hash_groups([:id])
375
- a[[1]].first.must_be_same_as(@c1)
376
- a[[2]].first.must_be_same_as(@c2)
377
- end
378
-
379
- it "should not allow the saving of new objects" do
380
- proc{@c.create}.must_raise(Sequel::HookFailed)
381
- end
382
-
383
- it "should not allow the saving of existing objects" do
384
- @db.fetch = {:id=>1}
385
- proc{@c.first(:id=>1).save}.must_raise(Sequel::HookFailed)
386
- end
387
-
388
- it "should not allow the destroying of existing objects" do
389
- @db.fetch = {:id=>1}
390
- proc{@c.first(:id=>1).destroy}.must_raise(Sequel::HookFailed)
391
- end
392
- end
393
-
394
- describe "with :frozen=>false option" do
395
- before do
396
- @c.plugin :static_cache, :frozen=>false
397
- @c1 = @c.cache[1]
398
- @c2 = @c.cache[2]
399
- @db.sqls
400
- end
401
-
402
- include static_cache_specs
403
-
404
- it "record retrieved by primary key should not be frozen" do
405
- @c[1].frozen?.must_equal false
406
- @c.cache_get_pk(1).frozen?.must_equal false
407
- end
408
-
409
- it "none of values returned in #all should be frozen" do
410
- @c.all.all?{|o| !o.frozen?}.must_equal true
411
- end
412
-
413
- it "none of values yielded by each should be frozen" do
414
- a = []
415
- @c.each{|o| a << o}
416
- a.all?{|o| !o.frozen?}.must_equal true
417
- end
418
-
419
- it "none of values yielded by Enumerable method should be frozen" do
420
- @c.sort_by{|o| o.id}.all?{|o| !o.frozen?}.must_equal true
421
- end
422
-
423
- it "none of values returned by map without an argument or block should be frozen" do
424
- @c.map{|o| o}.all?{|o| !o.frozen?}.must_equal true
425
- @c.map.all?{|o| !o.frozen?}.must_equal true
426
- end
427
-
428
- it "none of values in the hash returned by as_hash without an argument should be frozen" do
429
- @c.as_hash.values.all?{|o| !o.frozen?}.must_equal true
430
- end
431
-
432
- it "none of values in the hash returned by as_hash with a single argument should be frozen" do
433
- @c.as_hash(:id).values.all?{|o| !o.frozen?}.must_equal true
434
- end
435
-
436
- it "none of values in the hash returned by as_hash with a single array argument should be frozen" do
437
- @c.as_hash([:id, :id]).values.all?{|o| !o.frozen?}.must_equal true
438
- end
439
-
440
- it "none of values in the hash returned by to_hash_groups with a single argument should be frozen" do
441
- @c.to_hash_groups(:id).values.flatten.all?{|o| !o.frozen?}.must_equal true
442
- end
443
-
444
- it "none of values in the hash returned by to_hash_groups with a single array argument should be frozen" do
445
- @c.to_hash_groups([:id, :id]).values.flatten.all?{|o| !o.frozen?}.must_equal true
446
- end
447
-
448
- it "should not automatically update the cache when creating new model objects" do
449
- o = @c.new
450
- o.id = 3
451
- @db.autoid = 3
452
- @db.fetch = [[{:id=>1}, {:id=>2}, {:id=>3}], [{:id=>3}]]
453
- o.save
454
- @c[3].must_be_nil
455
- end
456
-
457
- it "should not automatically update the cache when updating model objects" do
458
- o = @c[2]
459
- @db.fetch = [[{:id=>1}, {:id=>2, :name=>'a'}]]
460
- o.update(:name=>'a')
461
- @c[2].values.must_equal(:id=>2)
462
- end
463
-
464
- it "should not automatically update the cache when updating model objects" do
465
- o = @c[2]
466
- @db.fetch = [[{:id=>1}]]
467
- o.destroy
468
- @c[2].must_equal @c2
469
- end
470
- end
471
- end
@@ -1,90 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
-
4
- describe "string_agg extension" do
5
- dbf = lambda do |db_type|
6
- db = Sequel.connect("mock://#{db_type}")
7
- db.extension :string_agg
8
- db
9
- end
10
-
11
- before(:all) do
12
- Sequel.extension :string_agg
13
- end
14
- before do
15
- @sa1 = Sequel.string_agg(:c)
16
- @sa2 = Sequel.string_agg(:c, '-')
17
- @sa3 = Sequel.string_agg(:c, '-').order(:o)
18
- @sa4 = Sequel.string_agg(:c).order(:o).distinct
19
- end
20
-
21
- it "should use existing method" do
22
- db = Sequel.mock
23
- db.extend_datasets do
24
- def string_agg_sql_append(sql, sa)
25
- sql << "sa(#{sa.expr})"
26
- end
27
- end
28
- db.extension :string_agg
29
- db.literal(Sequel.string_agg(:c)).must_equal "sa(c)"
30
- end
31
-
32
- it "should correctly literalize on Postgres" do
33
- ds = dbf.call(:postgres).dataset.with_quote_identifiers(false)
34
- ds.literal(@sa1).must_equal "string_agg(c, ',')"
35
- ds.literal(@sa2).must_equal "string_agg(c, '-')"
36
- ds.literal(@sa3).must_equal "string_agg(c, '-' ORDER BY o)"
37
- ds.literal(@sa4).must_equal "string_agg(DISTINCT c, ',' ORDER BY o)"
38
- end
39
-
40
- it "should correctly literalize on SQLAnywhere" do
41
- ds = dbf.call(:sqlanywhere).dataset.with_quote_identifiers(false).with_extend{def input_identifier(v) v.to_s end}
42
- ds.literal(@sa1).must_equal "list(c, ',')"
43
- ds.literal(@sa2).must_equal "list(c, '-')"
44
- ds.literal(@sa3).must_equal "list(c, '-' ORDER BY o)"
45
- ds.literal(@sa4).must_equal "list(DISTINCT c, ',' ORDER BY o)"
46
- end
47
-
48
- it "should correctly literalize on MySQL, H2, HSQLDB" do
49
- [:mysql, :h2, :hsqldb].each do |type|
50
- db = dbf.call(type)
51
- db.define_singleton_method(:database_type){type}
52
- ds = db.dataset.with_quote_identifiers(false).with_extend{def input_identifier(v) v.to_s end}
53
- ds.literal(@sa1).upcase.must_equal "GROUP_CONCAT(C SEPARATOR ',')"
54
- ds.literal(@sa2).upcase.must_equal "GROUP_CONCAT(C SEPARATOR '-')"
55
- ds.literal(@sa3).upcase.must_equal "GROUP_CONCAT(C ORDER BY O SEPARATOR '-')"
56
- ds.literal(@sa4).upcase.must_equal "GROUP_CONCAT(DISTINCT C ORDER BY O SEPARATOR ',')"
57
- end
58
- end
59
-
60
- it "should correctly literalize on Oracle and DB2" do
61
- [:oracle, :db2].each do |type|
62
- ds = dbf.call(type).dataset.with_quote_identifiers(false).with_extend{def input_identifier(v) v.to_s end}
63
- ds.literal(@sa1).must_equal "listagg(c, ',') WITHIN GROUP (ORDER BY 1)"
64
- ds.literal(@sa2).must_equal "listagg(c, '-') WITHIN GROUP (ORDER BY 1)"
65
- ds.literal(@sa3).must_equal "listagg(c, '-') WITHIN GROUP (ORDER BY o)"
66
- proc{ds.literal(@sa4)}.must_raise Sequel::Error
67
- end
68
- end
69
-
70
- it "should raise Sequel::Error on unsupported database" do
71
- proc{dbf.call(:foo).literal(@sa1)}.must_raise Sequel::Error
72
- end
73
-
74
- it "should handle order without arguments" do
75
- db = dbf.call(:postgres)
76
- db.dataset.with_quote_identifiers(false).literal(@sa1.order).must_equal "string_agg(c, ',')"
77
- end
78
-
79
- it "should handle operations on object" do
80
- ds = dbf.call(:postgres).dataset.with_quote_identifiers(false)
81
- ds.literal(@sa1 + 'b').must_equal "(string_agg(c, ',') || 'b')"
82
- ds.literal(@sa1.like('b')).must_equal "(string_agg(c, ',') LIKE 'b')"
83
- ds.literal(@sa1 < 'b').must_equal "(string_agg(c, ',') < 'b')"
84
- ds.literal(@sa1.as(:b)).must_equal "string_agg(c, ',') AS b"
85
- ds.literal(@sa1.cast(:b)).must_equal "CAST(string_agg(c, ',') AS b)"
86
- ds.literal(@sa1.desc).must_equal "string_agg(c, ',') DESC"
87
- ds.literal(@sa1 =~ /a/).must_equal "(string_agg(c, ',') ~ 'a')"
88
- ds.literal(@sa1.sql_subscript(1)).must_equal "(string_agg(c, ','))[1]"
89
- end
90
- end
@@ -1,95 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- Sequel.extension :string_date_time
4
-
5
- describe "String#to_time" do
6
- it "should convert the string into a Time object" do
7
- "2007-07-11".to_time.must_equal Time.parse("2007-07-11")
8
- "06:30".to_time.must_equal Time.parse("06:30")
9
- end
10
-
11
- it "should raise InvalidValue for an invalid time" do
12
- proc {'0000-00-00'.to_time}.must_raise(Sequel::InvalidValue)
13
- end
14
- end
15
-
16
- describe "String#to_date" do
17
- after do
18
- Sequel.convert_two_digit_years = true
19
- end
20
-
21
- it "should convert the string into a Date object" do
22
- "2007-07-11".to_date.must_equal Date.parse("2007-07-11")
23
- end
24
-
25
- it "should convert 2 digit years by default" do
26
- "July 11, 07".to_date.must_equal Date.parse("2007-07-11")
27
- end
28
-
29
- it "should not convert 2 digit years if set not to" do
30
- Sequel.convert_two_digit_years = false
31
- "July 11, 07".to_date.must_equal Date.parse("0007-07-11")
32
- end
33
-
34
- it "should raise InvalidValue for an invalid date" do
35
- proc {'0000-00-00'.to_date}.must_raise(Sequel::InvalidValue)
36
- end
37
- end
38
-
39
- describe "String#to_datetime" do
40
- after do
41
- Sequel.convert_two_digit_years = true
42
- end
43
-
44
- it "should convert the string into a DateTime object" do
45
- "2007-07-11 10:11:12a".to_datetime.must_equal DateTime.parse("2007-07-11 10:11:12a")
46
- end
47
-
48
- it "should convert 2 digit years by default" do
49
- "July 11, 07 10:11:12a".to_datetime.must_equal DateTime.parse("2007-07-11 10:11:12a")
50
- end
51
-
52
- it "should not convert 2 digit years if set not to" do
53
- Sequel.convert_two_digit_years = false
54
- "July 11, 07 10:11:12a".to_datetime.must_equal DateTime.parse("0007-07-11 10:11:12a")
55
- end
56
-
57
- it "should raise InvalidValue for an invalid date" do
58
- proc {'0000-00-00'.to_datetime}.must_raise(Sequel::InvalidValue)
59
- end
60
- end
61
-
62
- describe "String#to_sequel_time" do
63
- after do
64
- Sequel.datetime_class = Time
65
- Sequel.convert_two_digit_years = true
66
- end
67
-
68
- it "should convert the string into a Time object by default" do
69
- "2007-07-11 10:11:12a".to_sequel_time.class.must_equal Time
70
- "2007-07-11 10:11:12a".to_sequel_time.must_equal Time.parse("2007-07-11 10:11:12a")
71
- end
72
-
73
- it "should convert the string into a DateTime object if that is set" do
74
- Sequel.datetime_class = DateTime
75
- "2007-07-11 10:11:12a".to_sequel_time.class.must_equal DateTime
76
- "2007-07-11 10:11:12a".to_sequel_time.must_equal DateTime.parse("2007-07-11 10:11:12a")
77
- end
78
-
79
- it "should convert 2 digit years by default if using DateTime class" do
80
- Sequel.datetime_class = DateTime
81
- "July 11, 07 10:11:12a".to_sequel_time.must_equal DateTime.parse("2007-07-11 10:11:12a")
82
- end
83
-
84
- it "should not convert 2 digit years if set not to when using DateTime class" do
85
- Sequel.datetime_class = DateTime
86
- Sequel.convert_two_digit_years = false
87
- "July 11, 07 10:11:12a".to_sequel_time.must_equal DateTime.parse("0007-07-11 10:11:12a")
88
- end
89
-
90
- it "should raise InvalidValue for an invalid time" do
91
- proc {'0000-00-00'.to_sequel_time}.must_raise(Sequel::InvalidValue)
92
- Sequel.datetime_class = DateTime
93
- proc {'0000-00-00'.to_sequel_time}.must_raise(Sequel::InvalidValue)
94
- end
95
- end