sequel 5.28.0 → 5.33.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 (380) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +64 -1922
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +1 -1
  5. data/doc/advanced_associations.rdoc +4 -4
  6. data/doc/association_basics.rdoc +3 -3
  7. data/doc/code_order.rdoc +12 -2
  8. data/doc/model_dataset_method_design.rdoc +1 -1
  9. data/doc/postgresql.rdoc +71 -0
  10. data/doc/release_notes/5.29.0.txt +22 -0
  11. data/doc/release_notes/5.30.0.txt +20 -0
  12. data/doc/release_notes/5.31.0.txt +148 -0
  13. data/doc/release_notes/5.32.0.txt +46 -0
  14. data/doc/release_notes/5.33.0.txt +24 -0
  15. data/doc/testing.rdoc +1 -1
  16. data/lib/sequel/adapters/postgres.rb +5 -1
  17. data/lib/sequel/adapters/shared/access.rb +6 -6
  18. data/lib/sequel/adapters/shared/mssql.rb +5 -5
  19. data/lib/sequel/adapters/shared/mysql.rb +10 -10
  20. data/lib/sequel/adapters/shared/oracle.rb +16 -16
  21. data/lib/sequel/adapters/shared/postgres.rb +169 -14
  22. data/lib/sequel/adapters/shared/sqlanywhere.rb +9 -9
  23. data/lib/sequel/adapters/shared/sqlite.rb +32 -5
  24. data/lib/sequel/adapters/tinytds.rb +1 -1
  25. data/lib/sequel/connection_pool/sharded_threaded.rb +2 -2
  26. data/lib/sequel/connection_pool/threaded.rb +1 -1
  27. data/lib/sequel/core.rb +318 -314
  28. data/lib/sequel/database/query.rb +1 -1
  29. data/lib/sequel/database/schema_generator.rb +1 -1
  30. data/lib/sequel/database/transactions.rb +8 -12
  31. data/lib/sequel/dataset/misc.rb +2 -2
  32. data/lib/sequel/extensions/connection_expiration.rb +2 -2
  33. data/lib/sequel/extensions/connection_validator.rb +2 -2
  34. data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
  35. data/lib/sequel/extensions/index_caching.rb +9 -7
  36. data/lib/sequel/extensions/integer64.rb +2 -0
  37. data/lib/sequel/extensions/migration.rb +1 -1
  38. data/lib/sequel/extensions/pg_enum.rb +5 -2
  39. data/lib/sequel/extensions/pg_hstore.rb +6 -0
  40. data/lib/sequel/extensions/pg_inet.rb +13 -5
  41. data/lib/sequel/extensions/pg_interval.rb +2 -0
  42. data/lib/sequel/extensions/pg_range.rb +2 -0
  43. data/lib/sequel/extensions/pg_timestamptz.rb +2 -0
  44. data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
  45. data/lib/sequel/extensions/schema_dumper.rb +10 -4
  46. data/lib/sequel/extensions/server_block.rb +3 -3
  47. data/lib/sequel/model/associations.rb +18 -5
  48. data/lib/sequel/model/base.rb +60 -53
  49. data/lib/sequel/model/plugins.rb +1 -0
  50. data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
  51. data/lib/sequel/plugins/association_multi_add_remove.rb +2 -0
  52. data/lib/sequel/plugins/association_proxies.rb +2 -0
  53. data/lib/sequel/plugins/boolean_subsets.rb +4 -1
  54. data/lib/sequel/plugins/class_table_inheritance.rb +26 -26
  55. data/lib/sequel/plugins/dirty.rb +13 -13
  56. data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
  57. data/lib/sequel/plugins/forbid_lazy_load.rb +214 -0
  58. data/lib/sequel/plugins/json_serializer.rb +18 -11
  59. data/lib/sequel/plugins/single_table_inheritance.rb +15 -15
  60. data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
  61. data/lib/sequel/plugins/subclasses.rb +2 -0
  62. data/lib/sequel/plugins/throw_failures.rb +1 -1
  63. data/lib/sequel/timezones.rb +6 -4
  64. data/lib/sequel/version.rb +1 -1
  65. metadata +18 -367
  66. data/Rakefile +0 -151
  67. data/doc/release_notes/4.0.0.txt +0 -262
  68. data/doc/release_notes/4.1.0.txt +0 -85
  69. data/doc/release_notes/4.10.0.txt +0 -226
  70. data/doc/release_notes/4.11.0.txt +0 -147
  71. data/doc/release_notes/4.12.0.txt +0 -105
  72. data/doc/release_notes/4.13.0.txt +0 -169
  73. data/doc/release_notes/4.14.0.txt +0 -68
  74. data/doc/release_notes/4.15.0.txt +0 -56
  75. data/doc/release_notes/4.16.0.txt +0 -36
  76. data/doc/release_notes/4.17.0.txt +0 -38
  77. data/doc/release_notes/4.18.0.txt +0 -36
  78. data/doc/release_notes/4.19.0.txt +0 -45
  79. data/doc/release_notes/4.2.0.txt +0 -129
  80. data/doc/release_notes/4.20.0.txt +0 -79
  81. data/doc/release_notes/4.21.0.txt +0 -94
  82. data/doc/release_notes/4.22.0.txt +0 -72
  83. data/doc/release_notes/4.23.0.txt +0 -65
  84. data/doc/release_notes/4.24.0.txt +0 -99
  85. data/doc/release_notes/4.25.0.txt +0 -181
  86. data/doc/release_notes/4.26.0.txt +0 -44
  87. data/doc/release_notes/4.27.0.txt +0 -78
  88. data/doc/release_notes/4.28.0.txt +0 -57
  89. data/doc/release_notes/4.29.0.txt +0 -41
  90. data/doc/release_notes/4.3.0.txt +0 -40
  91. data/doc/release_notes/4.30.0.txt +0 -37
  92. data/doc/release_notes/4.31.0.txt +0 -57
  93. data/doc/release_notes/4.32.0.txt +0 -132
  94. data/doc/release_notes/4.33.0.txt +0 -88
  95. data/doc/release_notes/4.34.0.txt +0 -86
  96. data/doc/release_notes/4.35.0.txt +0 -130
  97. data/doc/release_notes/4.36.0.txt +0 -116
  98. data/doc/release_notes/4.37.0.txt +0 -50
  99. data/doc/release_notes/4.38.0.txt +0 -67
  100. data/doc/release_notes/4.39.0.txt +0 -127
  101. data/doc/release_notes/4.4.0.txt +0 -92
  102. data/doc/release_notes/4.40.0.txt +0 -179
  103. data/doc/release_notes/4.41.0.txt +0 -77
  104. data/doc/release_notes/4.42.0.txt +0 -221
  105. data/doc/release_notes/4.43.0.txt +0 -87
  106. data/doc/release_notes/4.44.0.txt +0 -125
  107. data/doc/release_notes/4.45.0.txt +0 -370
  108. data/doc/release_notes/4.46.0.txt +0 -404
  109. data/doc/release_notes/4.47.0.txt +0 -56
  110. data/doc/release_notes/4.48.0.txt +0 -293
  111. data/doc/release_notes/4.49.0.txt +0 -222
  112. data/doc/release_notes/4.5.0.txt +0 -34
  113. data/doc/release_notes/4.6.0.txt +0 -30
  114. data/doc/release_notes/4.7.0.txt +0 -103
  115. data/doc/release_notes/4.8.0.txt +0 -175
  116. data/doc/release_notes/4.9.0.txt +0 -190
  117. data/spec/adapter_spec.rb +0 -4
  118. data/spec/adapters/db2_spec.rb +0 -170
  119. data/spec/adapters/mssql_spec.rb +0 -828
  120. data/spec/adapters/mysql_spec.rb +0 -1060
  121. data/spec/adapters/oracle_spec.rb +0 -371
  122. data/spec/adapters/postgres_spec.rb +0 -4476
  123. data/spec/adapters/spec_helper.rb +0 -44
  124. data/spec/adapters/sqlanywhere_spec.rb +0 -97
  125. data/spec/adapters/sqlite_spec.rb +0 -652
  126. data/spec/bin_spec.rb +0 -278
  127. data/spec/core/connection_pool_spec.rb +0 -1250
  128. data/spec/core/database_spec.rb +0 -2915
  129. data/spec/core/dataset_spec.rb +0 -5547
  130. data/spec/core/deprecated_spec.rb +0 -70
  131. data/spec/core/expression_filters_spec.rb +0 -1498
  132. data/spec/core/mock_adapter_spec.rb +0 -722
  133. data/spec/core/object_graph_spec.rb +0 -336
  134. data/spec/core/placeholder_literalizer_spec.rb +0 -166
  135. data/spec/core/schema_generator_spec.rb +0 -214
  136. data/spec/core/schema_spec.rb +0 -1844
  137. data/spec/core/spec_helper.rb +0 -24
  138. data/spec/core/version_spec.rb +0 -14
  139. data/spec/core_extensions_spec.rb +0 -763
  140. data/spec/core_model_spec.rb +0 -2
  141. data/spec/core_spec.rb +0 -1
  142. data/spec/deprecation_helper.rb +0 -30
  143. data/spec/extensions/accessed_columns_spec.rb +0 -51
  144. data/spec/extensions/active_model_spec.rb +0 -99
  145. data/spec/extensions/after_initialize_spec.rb +0 -28
  146. data/spec/extensions/any_not_empty_spec.rb +0 -23
  147. data/spec/extensions/arbitrary_servers_spec.rb +0 -109
  148. data/spec/extensions/association_dependencies_spec.rb +0 -125
  149. data/spec/extensions/association_multi_add_remove_spec.rb +0 -1041
  150. data/spec/extensions/association_pks_spec.rb +0 -423
  151. data/spec/extensions/association_proxies_spec.rb +0 -100
  152. data/spec/extensions/auto_literal_strings_spec.rb +0 -205
  153. data/spec/extensions/auto_validations_spec.rb +0 -229
  154. data/spec/extensions/blacklist_security_spec.rb +0 -95
  155. data/spec/extensions/blank_spec.rb +0 -69
  156. data/spec/extensions/boolean_readers_spec.rb +0 -93
  157. data/spec/extensions/boolean_subsets_spec.rb +0 -47
  158. data/spec/extensions/caching_spec.rb +0 -273
  159. data/spec/extensions/caller_logging_spec.rb +0 -52
  160. data/spec/extensions/class_table_inheritance_spec.rb +0 -750
  161. data/spec/extensions/column_conflicts_spec.rb +0 -75
  162. data/spec/extensions/column_select_spec.rb +0 -129
  163. data/spec/extensions/columns_introspection_spec.rb +0 -90
  164. data/spec/extensions/columns_updated_spec.rb +0 -35
  165. data/spec/extensions/composition_spec.rb +0 -248
  166. data/spec/extensions/connection_expiration_spec.rb +0 -151
  167. data/spec/extensions/connection_validator_spec.rb +0 -144
  168. data/spec/extensions/constant_sql_override_spec.rb +0 -24
  169. data/spec/extensions/constraint_validations_plugin_spec.rb +0 -300
  170. data/spec/extensions/constraint_validations_spec.rb +0 -439
  171. data/spec/extensions/core_refinements_spec.rb +0 -528
  172. data/spec/extensions/csv_serializer_spec.rb +0 -183
  173. data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
  174. data/spec/extensions/dataset_associations_spec.rb +0 -365
  175. data/spec/extensions/dataset_source_alias_spec.rb +0 -51
  176. data/spec/extensions/date_arithmetic_spec.rb +0 -181
  177. data/spec/extensions/datetime_parse_to_time_spec.rb +0 -169
  178. data/spec/extensions/def_dataset_method_spec.rb +0 -100
  179. data/spec/extensions/defaults_setter_spec.rb +0 -150
  180. data/spec/extensions/delay_add_association_spec.rb +0 -73
  181. data/spec/extensions/dirty_spec.rb +0 -222
  182. data/spec/extensions/duplicate_columns_handler_spec.rb +0 -104
  183. data/spec/extensions/eager_each_spec.rb +0 -62
  184. data/spec/extensions/eager_graph_eager_spec.rb +0 -100
  185. data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
  186. data/spec/extensions/error_splitter_spec.rb +0 -18
  187. data/spec/extensions/error_sql_spec.rb +0 -20
  188. data/spec/extensions/escaped_like_spec.rb +0 -40
  189. data/spec/extensions/eval_inspect_spec.rb +0 -81
  190. data/spec/extensions/exclude_or_null_spec.rb +0 -15
  191. data/spec/extensions/finder_spec.rb +0 -260
  192. data/spec/extensions/force_encoding_spec.rb +0 -126
  193. data/spec/extensions/freeze_datasets_spec.rb +0 -31
  194. data/spec/extensions/graph_each_spec.rb +0 -113
  195. data/spec/extensions/hook_class_methods_spec.rb +0 -402
  196. data/spec/extensions/identifier_mangling_spec.rb +0 -201
  197. data/spec/extensions/implicit_subquery_spec.rb +0 -58
  198. data/spec/extensions/index_caching_spec.rb +0 -66
  199. data/spec/extensions/inflector_spec.rb +0 -183
  200. data/spec/extensions/input_transformer_spec.rb +0 -69
  201. data/spec/extensions/insert_conflict_spec.rb +0 -103
  202. data/spec/extensions/insert_returning_select_spec.rb +0 -72
  203. data/spec/extensions/instance_filters_spec.rb +0 -79
  204. data/spec/extensions/instance_hooks_spec.rb +0 -246
  205. data/spec/extensions/integer64_spec.rb +0 -22
  206. data/spec/extensions/inverted_subsets_spec.rb +0 -33
  207. data/spec/extensions/json_serializer_spec.rb +0 -336
  208. data/spec/extensions/lazy_attributes_spec.rb +0 -183
  209. data/spec/extensions/list_spec.rb +0 -291
  210. data/spec/extensions/looser_typecasting_spec.rb +0 -43
  211. data/spec/extensions/many_through_many_spec.rb +0 -2177
  212. data/spec/extensions/migration_spec.rb +0 -864
  213. data/spec/extensions/modification_detection_spec.rb +0 -93
  214. data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -92
  215. data/spec/extensions/named_timezones_spec.rb +0 -218
  216. data/spec/extensions/nested_attributes_spec.rb +0 -815
  217. data/spec/extensions/null_dataset_spec.rb +0 -85
  218. data/spec/extensions/optimistic_locking_spec.rb +0 -127
  219. data/spec/extensions/pagination_spec.rb +0 -116
  220. data/spec/extensions/pg_array_associations_spec.rb +0 -802
  221. data/spec/extensions/pg_array_ops_spec.rb +0 -144
  222. data/spec/extensions/pg_array_spec.rb +0 -398
  223. data/spec/extensions/pg_auto_constraint_validations_spec.rb +0 -209
  224. data/spec/extensions/pg_enum_spec.rb +0 -118
  225. data/spec/extensions/pg_extended_date_support_spec.rb +0 -126
  226. data/spec/extensions/pg_hstore_ops_spec.rb +0 -238
  227. data/spec/extensions/pg_hstore_spec.rb +0 -219
  228. data/spec/extensions/pg_inet_ops_spec.rb +0 -102
  229. data/spec/extensions/pg_inet_spec.rb +0 -72
  230. data/spec/extensions/pg_interval_spec.rb +0 -103
  231. data/spec/extensions/pg_json_ops_spec.rb +0 -356
  232. data/spec/extensions/pg_json_spec.rb +0 -451
  233. data/spec/extensions/pg_loose_count_spec.rb +0 -23
  234. data/spec/extensions/pg_range_ops_spec.rb +0 -60
  235. data/spec/extensions/pg_range_spec.rb +0 -600
  236. data/spec/extensions/pg_row_ops_spec.rb +0 -61
  237. data/spec/extensions/pg_row_plugin_spec.rb +0 -60
  238. data/spec/extensions/pg_row_spec.rb +0 -363
  239. data/spec/extensions/pg_static_cache_updater_spec.rb +0 -93
  240. data/spec/extensions/pg_timestamptz_spec.rb +0 -17
  241. data/spec/extensions/prepared_statements_safe_spec.rb +0 -66
  242. data/spec/extensions/prepared_statements_spec.rb +0 -177
  243. data/spec/extensions/pretty_table_spec.rb +0 -123
  244. data/spec/extensions/query_spec.rb +0 -94
  245. data/spec/extensions/rcte_tree_spec.rb +0 -387
  246. data/spec/extensions/round_timestamps_spec.rb +0 -39
  247. data/spec/extensions/s_spec.rb +0 -60
  248. data/spec/extensions/schema_caching_spec.rb +0 -64
  249. data/spec/extensions/schema_dumper_spec.rb +0 -870
  250. data/spec/extensions/select_remove_spec.rb +0 -38
  251. data/spec/extensions/sequel_4_dataset_methods_spec.rb +0 -121
  252. data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
  253. data/spec/extensions/serialization_spec.rb +0 -365
  254. data/spec/extensions/server_block_spec.rb +0 -135
  255. data/spec/extensions/server_logging_spec.rb +0 -45
  256. data/spec/extensions/sharding_spec.rb +0 -197
  257. data/spec/extensions/shared_caching_spec.rb +0 -151
  258. data/spec/extensions/single_table_inheritance_spec.rb +0 -347
  259. data/spec/extensions/singular_table_names_spec.rb +0 -22
  260. data/spec/extensions/skip_create_refresh_spec.rb +0 -18
  261. data/spec/extensions/spec_helper.rb +0 -70
  262. data/spec/extensions/split_array_nil_spec.rb +0 -24
  263. data/spec/extensions/split_values_spec.rb +0 -57
  264. data/spec/extensions/sql_comments_spec.rb +0 -33
  265. data/spec/extensions/sql_expr_spec.rb +0 -59
  266. data/spec/extensions/static_cache_cache_spec.rb +0 -35
  267. data/spec/extensions/static_cache_spec.rb +0 -471
  268. data/spec/extensions/string_agg_spec.rb +0 -90
  269. data/spec/extensions/string_date_time_spec.rb +0 -95
  270. data/spec/extensions/string_stripper_spec.rb +0 -68
  271. data/spec/extensions/subclasses_spec.rb +0 -79
  272. data/spec/extensions/subset_conditions_spec.rb +0 -38
  273. data/spec/extensions/symbol_aref_refinement_spec.rb +0 -28
  274. data/spec/extensions/symbol_as_refinement_spec.rb +0 -21
  275. data/spec/extensions/synchronize_sql_spec.rb +0 -124
  276. data/spec/extensions/table_select_spec.rb +0 -83
  277. data/spec/extensions/tactical_eager_loading_spec.rb +0 -402
  278. data/spec/extensions/thread_local_timezones_spec.rb +0 -67
  279. data/spec/extensions/throw_failures_spec.rb +0 -74
  280. data/spec/extensions/timestamps_spec.rb +0 -209
  281. data/spec/extensions/to_dot_spec.rb +0 -153
  282. data/spec/extensions/touch_spec.rb +0 -226
  283. data/spec/extensions/tree_spec.rb +0 -334
  284. data/spec/extensions/typecast_on_load_spec.rb +0 -86
  285. data/spec/extensions/unlimited_update_spec.rb +0 -21
  286. data/spec/extensions/update_or_create_spec.rb +0 -83
  287. data/spec/extensions/update_primary_key_spec.rb +0 -105
  288. data/spec/extensions/update_refresh_spec.rb +0 -59
  289. data/spec/extensions/uuid_spec.rb +0 -101
  290. data/spec/extensions/validate_associated_spec.rb +0 -52
  291. data/spec/extensions/validation_class_methods_spec.rb +0 -1040
  292. data/spec/extensions/validation_contexts_spec.rb +0 -31
  293. data/spec/extensions/validation_helpers_spec.rb +0 -525
  294. data/spec/extensions/whitelist_security_spec.rb +0 -157
  295. data/spec/extensions/xml_serializer_spec.rb +0 -213
  296. data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
  297. data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
  298. data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  299. data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  300. data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
  301. data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
  302. data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
  303. data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
  304. data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
  305. data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
  306. data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
  307. data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
  308. data/spec/files/double_migration/001_create_sessions.rb +0 -9
  309. data/spec/files/double_migration/002_create_nodes.rb +0 -19
  310. data/spec/files/double_migration/003_3_create_users.rb +0 -4
  311. data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
  312. data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
  313. data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  314. data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
  315. data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
  316. data/spec/files/empty_migration/001_create_sessions.rb +0 -9
  317. data/spec/files/empty_migration/002_create_nodes.rb +0 -0
  318. data/spec/files/empty_migration/003_3_create_users.rb +0 -4
  319. data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
  320. data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
  321. data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
  322. data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  323. data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
  324. data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  325. data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
  326. data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  327. data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
  328. data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
  329. data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  330. data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  331. data/spec/files/reversible_migrations/001_reversible.rb +0 -5
  332. data/spec/files/reversible_migrations/002_reversible.rb +0 -5
  333. data/spec/files/reversible_migrations/003_reversible.rb +0 -5
  334. data/spec/files/reversible_migrations/004_reversible.rb +0 -5
  335. data/spec/files/reversible_migrations/005_reversible.rb +0 -10
  336. data/spec/files/reversible_migrations/006_reversible.rb +0 -10
  337. data/spec/files/reversible_migrations/007_reversible.rb +0 -10
  338. data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
  339. data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
  340. data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
  341. data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
  342. data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
  343. data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
  344. data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
  345. data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
  346. data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
  347. data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
  348. data/spec/guards_helper.rb +0 -59
  349. data/spec/integration/associations_test.rb +0 -2597
  350. data/spec/integration/database_test.rb +0 -113
  351. data/spec/integration/dataset_test.rb +0 -2037
  352. data/spec/integration/eager_loader_test.rb +0 -687
  353. data/spec/integration/migrator_test.rb +0 -262
  354. data/spec/integration/model_test.rb +0 -203
  355. data/spec/integration/plugin_test.rb +0 -2423
  356. data/spec/integration/prepared_statement_test.rb +0 -405
  357. data/spec/integration/schema_test.rb +0 -903
  358. data/spec/integration/spec_helper.rb +0 -71
  359. data/spec/integration/timezone_test.rb +0 -86
  360. data/spec/integration/transaction_test.rb +0 -603
  361. data/spec/integration/type_test.rb +0 -127
  362. data/spec/model/association_reflection_spec.rb +0 -803
  363. data/spec/model/associations_spec.rb +0 -4738
  364. data/spec/model/base_spec.rb +0 -875
  365. data/spec/model/class_dataset_methods_spec.rb +0 -146
  366. data/spec/model/dataset_methods_spec.rb +0 -198
  367. data/spec/model/eager_loading_spec.rb +0 -2377
  368. data/spec/model/hooks_spec.rb +0 -370
  369. data/spec/model/inflector_spec.rb +0 -26
  370. data/spec/model/model_spec.rb +0 -956
  371. data/spec/model/plugins_spec.rb +0 -429
  372. data/spec/model/record_spec.rb +0 -2118
  373. data/spec/model/spec_helper.rb +0 -46
  374. data/spec/model/validations_spec.rb +0 -220
  375. data/spec/model_no_assoc_spec.rb +0 -1
  376. data/spec/model_spec.rb +0 -1
  377. data/spec/plugin_spec.rb +0 -1
  378. data/spec/sequel_coverage.rb +0 -15
  379. data/spec/sequel_warning.rb +0 -4
  380. data/spec/spec_config.rb +0 -12
@@ -1,135 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- with_server_specs = shared_description do
4
- it "should set the default server to use in the block" do
5
- @db.with_server(:a){@db[:t].all}
6
- @db.sqls.must_equal ["SELECT * FROM t -- a"]
7
- @db.with_server(:b){@db[:t].all}
8
- @db.sqls.must_equal ["SELECT * FROM t -- b"]
9
- end
10
-
11
- it "should set the default server to use in the block" do
12
- @db.with_server(:a, :b){@db[:t].all}
13
- @db.sqls.must_equal ["SELECT * FROM t -- b"]
14
- @db.with_server(:a, :b){@db[:t].insert}
15
- @db.sqls.must_equal ["INSERT INTO t DEFAULT VALUES -- a"]
16
- end
17
-
18
- it "should have no affect after the block" do
19
- @db.with_server(:a){@db[:t].all}
20
- @db.sqls.must_equal ["SELECT * FROM t -- a"]
21
- @db[:t].all
22
- @db.sqls.must_equal ["SELECT * FROM t"]
23
- end
24
-
25
- it "should not override specific server inside the block" do
26
- @db.with_server(:a){@db[:t].server(:b).all}
27
- @db.sqls.must_equal ["SELECT * FROM t -- b"]
28
- end
29
-
30
- it "should work correctly when blocks are nested" do
31
- @db[:t].all
32
- @db.with_server(:a) do
33
- @db[:t].all
34
- @db.with_server(:b){@db[:t].all}
35
- @db[:t].all
36
- end
37
- @db[:t].all
38
- @db.sqls.must_equal ["SELECT * FROM t", "SELECT * FROM t -- a", "SELECT * FROM t -- b", "SELECT * FROM t -- a", "SELECT * FROM t"]
39
- end
40
-
41
- it "should work correctly for inserts/updates/deletes" do
42
- @db.with_server(:a) do
43
- @db[:t].insert
44
- @db[:t].update(:a=>1)
45
- @db[:t].delete
46
- end
47
- @db.sqls.must_equal ["INSERT INTO t DEFAULT VALUES -- a", "UPDATE t SET a = 1 -- a", "DELETE FROM t -- a"]
48
- end
49
- end
50
-
51
- describe "Database#with_server single threaded" do
52
- before do
53
- @db = Sequel.mock(:single_threaded=>true, :servers=>{:a=>{}, :b=>{}})
54
- @db.extension :server_block
55
- end
56
-
57
- include with_server_specs
58
- end
59
-
60
- describe "Database#with_server multi threaded" do
61
- before do
62
- @db = Sequel.mock(:servers=>{:a=>{}, :b=>{}, :c=>{}, :d=>{}})
63
- @db.extension :server_block
64
- end
65
-
66
- include with_server_specs
67
-
68
- it "should respect multithreaded access" do
69
- q, q1 = Queue.new, Queue.new
70
-
71
- t = nil
72
- @db[:t].all
73
- @db.with_server(:a) do
74
- @db[:t].all
75
- t = Thread.new do
76
- @db[:t].all
77
- @db.with_server(:c) do
78
- @db[:t].all
79
- @db.with_server(:d){@db[:t].all}
80
- q.push nil
81
- q1.pop
82
- @db[:t].all
83
- end
84
- @db[:t].all
85
- end
86
- q.pop
87
- @db.with_server(:b){@db[:t].all}
88
- @db[:t].all
89
- end
90
- @db[:t].all
91
- q1.push nil
92
- t.join
93
- @db.sqls.must_equal ["SELECT * FROM t", "SELECT * FROM t -- a", "SELECT * FROM t", "SELECT * FROM t -- c", "SELECT * FROM t -- d",
94
- "SELECT * FROM t -- b", "SELECT * FROM t -- a", "SELECT * FROM t", "SELECT * FROM t -- c", "SELECT * FROM t"]
95
- end
96
- end
97
-
98
- describe "Database#with_server with invalid servers" do
99
- def sqls(server)
100
- @db.with_server(server) do
101
- @db[:t].all
102
- @db[:t].insert
103
- @db[:t].update(:a=>1)
104
- @db[:t].delete
105
- end
106
- @db.sqls
107
- end
108
-
109
- it "when single threaded and no servers_hash" do
110
- @db = Sequel.mock(:single_threaded=>true, :servers=>{:a=>{}}).extension(:server_block)
111
- sqls(:a).must_equal ["SELECT * FROM t -- a", "INSERT INTO t DEFAULT VALUES -- a", "UPDATE t SET a = 1 -- a", "DELETE FROM t -- a"]
112
- sqls(:c).must_equal ["SELECT * FROM t", "INSERT INTO t DEFAULT VALUES", "UPDATE t SET a = 1", "DELETE FROM t"]
113
- end
114
-
115
- it "when multi-threaded and no servers_hash" do
116
- @db = Sequel.mock(:servers=>{:a=>{}}).extension(:server_block)
117
- sqls(:a).must_equal ["SELECT * FROM t -- a", "INSERT INTO t DEFAULT VALUES -- a", "UPDATE t SET a = 1 -- a", "DELETE FROM t -- a"]
118
- sqls(:c).must_equal ["SELECT * FROM t", "INSERT INTO t DEFAULT VALUES", "UPDATE t SET a = 1", "DELETE FROM t"]
119
- end
120
-
121
- it "when single threaded and servers_hash" do
122
- @db = Sequel.mock(:single_threaded=>true, :servers=>{:a=>{}, :b=>{}}, :servers_hash=>Hash.new{|_,k| raise}.merge!(:c=>:b)).extension(:server_block)
123
- sqls(:a).must_equal ["SELECT * FROM t -- a", "INSERT INTO t DEFAULT VALUES -- a", "UPDATE t SET a = 1 -- a", "DELETE FROM t -- a"]
124
- sqls(:c).must_equal ["SELECT * FROM t -- b", "INSERT INTO t DEFAULT VALUES -- b", "UPDATE t SET a = 1 -- b", "DELETE FROM t -- b"]
125
- proc{sqls(:d)}.must_raise(RuntimeError)
126
- end
127
-
128
- it "when multi-threaded and servers_hash" do
129
- @db = Sequel.mock(:servers=>{:a=>{}, :b=>{}}, :servers_hash=>Hash.new{|_,k| raise}.merge!(:c=>:b)).extension(:server_block)
130
- sqls(:a).must_equal ["SELECT * FROM t -- a", "INSERT INTO t DEFAULT VALUES -- a", "UPDATE t SET a = 1 -- a", "DELETE FROM t -- a"]
131
- sqls(:c).must_equal ["SELECT * FROM t -- b", "INSERT INTO t DEFAULT VALUES -- b", "UPDATE t SET a = 1 -- b", "DELETE FROM t -- b"]
132
- proc{sqls(:d)}.must_raise(RuntimeError)
133
- end
134
- end
135
-
@@ -1,45 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "server_logging extension" do
4
- before do
5
- @o = Object.new
6
- def @o.logs; @logs || []; end
7
- def @o.log; logs.length.must_equal 1; logs.first.length.must_equal 1; logs.shift.first; end
8
- def @o.to_ary; [self]; end
9
- def @o.method_missing(m, *args); (@logs ||= []) << args; end
10
- @db = Sequel::mock(:test=>false, :servers=>{:read_only=>{}, :b=>{}}, :logger=>@o).extension(:server_logging)
11
- end
12
-
13
- it "should include shard when logging" do
14
- @db[:a].all
15
- @o.log.must_include "server: read_only) SELECT * FROM a"
16
- @db[:a].insert
17
- @o.log.must_include "server: default) INSERT INTO a DEFAULT VALUES"
18
- @db[:a].server(:b).all
19
- @o.log.must_include "server: b) SELECT * FROM a"
20
- end
21
-
22
- it "should not include shard when not logging connection info" do
23
- @db.log_connection_info = false
24
- @db[:a].all
25
- log = @o.log
26
- log.wont_include "server: read_only) SELECT * FROM a"
27
- log.must_include "SELECT * FROM a"
28
- end
29
-
30
- it "should not turn on logging connction info if it was turned off" do
31
- @db.log_connection_info = false
32
- @db.extension :server_logging
33
- @db[:a].all
34
- log = @o.log
35
- log.wont_include "server: read_only) SELECT * FROM a"
36
- log.must_include "SELECT * FROM a"
37
- end
38
-
39
- it "should remove mapping when disconnecting" do
40
- c = @db.synchronize{|c1| c1}
41
- @db.disconnect
42
- @db.send(:log_connection_execute, c, "SELECT * FROM a")
43
- @o.log.must_include "server: ) SELECT * FROM a"
44
- end
45
- end
@@ -1,197 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "sharding plugin" do
4
- before do
5
- @db = Sequel.mock(:numrows=>1, :autoid=>proc{1}, :servers=>{:s1=>{}, :s2=>{}, :s3=>{}, :s4=>{}})
6
- @Artist = Class.new(Sequel::Model(@db[:artists].with_fetch(:id=>2, :name=>'YJM')))
7
- @Artist.class_eval do
8
- columns :id, :name
9
- plugin :sharding
10
- end
11
- @Album = Class.new(Sequel::Model(@db[:albums].with_fetch(:id=>1, :name=>'RF', :artist_id=>2)))
12
- @Album.class_eval do
13
- columns :id, :artist_id, :name
14
- plugin :sharding
15
- end
16
- @Tag = Class.new(Sequel::Model(@db[:tags].with_fetch(:id=>3, :name=>'M')))
17
- @Tag.class_eval do
18
- columns :id, :name
19
- plugin :sharding
20
- end
21
- @Artist.one_to_many :albums, :class=>@Album, :key=>:artist_id
22
- @Album.many_to_one :artist, :class=>@Artist
23
- @Album.many_to_many :tags, :class=>@Tag, :left_key=>:album_id, :right_key=>:tag_id, :join_table=>:albums_tags
24
- @db.sqls
25
- end
26
-
27
- it "should allow you to instantiate a new object for a specified shard" do
28
- @Album.new_using_server(:s1, :name=>'RF').save
29
- @db.sqls.must_equal ["INSERT INTO albums (name) VALUES ('RF') -- s1", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s1"]
30
-
31
- @Album.new_using_server(:s2){|o| o.name = 'MO'}.save
32
- @db.sqls.must_equal ["INSERT INTO albums (name) VALUES ('MO') -- s2", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s2"]
33
- end
34
-
35
- it "should allow you to create and save a new object for a specified shard" do
36
- @Album.create_using_server(:s1, :name=>'RF')
37
- @db.sqls.must_equal ["INSERT INTO albums (name) VALUES ('RF') -- s1", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s1"]
38
-
39
- @Album.create_using_server(:s2){|o| o.name = 'MO'}
40
- @db.sqls.must_equal ["INSERT INTO albums (name) VALUES ('MO') -- s2", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s2"]
41
- end
42
-
43
- it "should have objects retrieved from a specific shard update that shard" do
44
- @Album.server(:s1).first.update(:name=>'MO')
45
- @db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "UPDATE albums SET name = 'MO' WHERE (id = 1) -- s1"]
46
- end
47
-
48
- it "should have objects retrieved from a specific shard delete from that shard" do
49
- @Album.server(:s1).first.delete
50
- @db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "DELETE FROM albums WHERE (id = 1) -- s1"]
51
- end
52
-
53
- it "should have objects retrieved from a specific shard reload from that shard" do
54
- @Album.server(:s1).first.reload
55
- @db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s1"]
56
- end
57
-
58
- it "should use current dataset's shard when eager loading if eagerly loaded dataset doesn't have its own shard" do
59
- albums = @Album.server(:s1).eager(:artist).all
60
- @db.sqls.must_equal ["SELECT * FROM albums -- s1", "SELECT * FROM artists WHERE (artists.id IN (2)) -- s1"]
61
- albums.length.must_equal 1
62
- albums.first.artist.save
63
- @db.sqls.must_equal ["UPDATE artists SET name = 'YJM' WHERE (id = 2) -- s1"]
64
- end
65
-
66
- it "should not use current dataset's shard when eager loading if eagerly loaded dataset has its own shard" do
67
- @Artist.dataset = @Artist.dataset.server(:s2)
68
- albums = @Album.server(:s1).eager(:artist).all
69
- @db.sqls.must_equal ["SELECT * FROM albums -- s1", "SELECT * FROM artists WHERE (artists.id IN (2)) -- s2"]
70
- albums.length.must_equal 1
71
- albums.first.artist.save
72
- @db.sqls.must_equal ["UPDATE artists SET name = 'YJM' WHERE (id = 2) -- s2"]
73
- end
74
-
75
- it "should use current dataset's shard when eager graphing if eagerly graphed dataset doesn't have its own shard" do
76
- albums = @Album.server(:s1).eager_graph(:artist).with_fetch(:id=>1, :artist_id=>2, :name=>'RF', :artist_id_0=>2, :artist_name=>'YJM').all
77
- @db.sqls.must_equal ["SELECT albums.id, albums.artist_id, albums.name, artist.id AS artist_id_0, artist.name AS artist_name FROM albums LEFT OUTER JOIN artists AS artist ON (artist.id = albums.artist_id) -- s1"]
78
- albums.length.must_equal 1
79
- albums.first.artist.save
80
- @db.sqls.must_equal ["UPDATE artists SET name = 'YJM' WHERE (id = 2) -- s1"]
81
- end
82
-
83
- it "should not use current dataset's shard when eager graphing if eagerly graphed dataset has its own shard" do
84
- @Artist.dataset = @Artist.dataset.server(:s2)
85
- albums = @Album.server(:s1).eager_graph(:artist).with_fetch(:id=>1, :artist_id=>2, :name=>'RF', :artist_id_0=>2, :artist_name=>'YJM').all
86
- @db.sqls.must_equal ["SELECT albums.id, albums.artist_id, albums.name, artist.id AS artist_id_0, artist.name AS artist_name FROM albums LEFT OUTER JOIN artists AS artist ON (artist.id = albums.artist_id) -- s1"]
87
- albums.length.must_equal 1
88
- albums.first.artist.save
89
- @db.sqls.must_equal ["UPDATE artists SET name = 'YJM' WHERE (id = 2) -- s2"]
90
- end
91
-
92
- it "should use eagerly graphed dataset shard for eagerly graphed objects even if current dataset does not have a shard" do
93
- @Artist.dataset = @Artist.dataset.server(:s2)
94
- albums = @Album.eager_graph(:artist).with_fetch(:id=>1, :artist_id=>2, :name=>'RF', :artist_id_0=>2, :artist_name=>'YJM').all
95
- @db.sqls.must_equal ["SELECT albums.id, albums.artist_id, albums.name, artist.id AS artist_id_0, artist.name AS artist_name FROM albums LEFT OUTER JOIN artists AS artist ON (artist.id = albums.artist_id)"]
96
- albums.length.must_equal 1
97
- albums.first.artist.save
98
- @db.sqls.must_equal ["UPDATE artists SET name = 'YJM' WHERE (id = 2) -- s2"]
99
- end
100
-
101
- it "should have objects retrieved from a specific shard use associated objects from that shard, with modifications to the associated objects using that shard" do
102
- album = @Album.server(:s1).first
103
- @db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1"]
104
- album.artist.update(:name=>'AS')
105
- @db.sqls.must_equal ["SELECT * FROM artists WHERE (artists.id = 2) LIMIT 1 -- s1", "UPDATE artists SET name = 'AS' WHERE (id = 2) -- s1"]
106
- album.tags.map{|a| a.update(:name=>'SR')}
107
- @db.sqls.must_equal ["SELECT tags.* FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) WHERE (albums_tags.album_id = 1) -- s1", "UPDATE tags SET name = 'SR' WHERE (id = 3) -- s1"]
108
- @Artist.server(:s2).first.albums.map{|a| a.update(:name=>'MO')}
109
- @db.sqls.must_equal ["SELECT * FROM artists LIMIT 1 -- s2", "SELECT * FROM albums WHERE (albums.artist_id = 2) -- s2", "UPDATE albums SET name = 'MO' WHERE (id = 1) -- s2"]
110
- end
111
-
112
- it "should have objects retrieved from a specific shard add associated objects to that shard" do
113
- album = @Album.server(:s1).first
114
- artist = @Artist.server(:s2).first
115
- @db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM artists LIMIT 1 -- s2"]
116
-
117
- artist.add_album(:name=>'MO')
118
- sqls = @db.sqls
119
- ["INSERT INTO albums (artist_id, name) VALUES (2, 'MO') -- s2", "INSERT INTO albums (name, artist_id) VALUES ('MO', 2) -- s2"].must_include(sqls.shift)
120
- sqls.must_equal ["SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s2"]
121
-
122
- album.add_tag(:name=>'SR')
123
- sqls = @db.sqls
124
- ["INSERT INTO albums_tags (album_id, tag_id) VALUES (1, 3) -- s1", "INSERT INTO albums_tags (tag_id, album_id) VALUES (3, 1) -- s1"].must_include(sqls.pop)
125
- sqls.must_equal ["INSERT INTO tags (name) VALUES ('SR') -- s1", "SELECT * FROM tags WHERE (id = 1) LIMIT 1 -- s1", ]
126
- end
127
-
128
- it "should have objects retrieved from a specific shard remove associated objects from that shard" do
129
- album = @Album.server(:s1).first
130
- artist = @Artist.server(:s2).first
131
- @db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM artists LIMIT 1 -- s2"]
132
-
133
- artist.remove_album(1)
134
- sqls = @db.sqls
135
- ["UPDATE albums SET artist_id = NULL, name = 'RF' WHERE (id = 1) -- s2", "UPDATE albums SET name = 'RF', artist_id = NULL WHERE (id = 1) -- s2"].must_include(sqls.pop)
136
- sqls.must_equal ["SELECT * FROM albums WHERE ((albums.artist_id = 2) AND (albums.id = 1)) LIMIT 1 -- s2"]
137
-
138
- album.remove_tag(3)
139
- @db.sqls.must_equal ["SELECT tags.* FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) WHERE ((albums_tags.album_id = 1) AND (tags.id = 3)) LIMIT 1 -- s1", "DELETE FROM albums_tags WHERE ((album_id = 1) AND (tag_id = 3)) -- s1"]
140
- end
141
-
142
- it "should have objects retrieved from a specific shard remove all associated objects from that shard" do
143
- album = @Album.server(:s1).first
144
- artist = @Artist.server(:s2).first
145
- @db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM artists LIMIT 1 -- s2"]
146
-
147
- artist.remove_all_albums
148
- @db.sqls.must_equal ["UPDATE albums SET artist_id = NULL WHERE (artist_id = 2) -- s2"]
149
-
150
- album.remove_all_tags
151
- @db.sqls.must_equal ["DELETE FROM albums_tags WHERE (album_id = 1) -- s1"]
152
- end
153
-
154
- it "should not override a server already set on an associated object" do
155
- @Album.server(:s1).first
156
- artist = @Artist.server(:s2).first
157
- @db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM artists LIMIT 1 -- s2"]
158
-
159
- artist.add_album(@Album.load(:id=>4, :name=>'MO').set_server(:s3))
160
- ["UPDATE albums SET artist_id = 2, name = 'MO' WHERE (id = 4) -- s3", "UPDATE albums SET name = 'MO', artist_id = 2 WHERE (id = 4) -- s3"].must_include(@db.sqls.pop)
161
-
162
- artist.remove_album(@Album.load(:id=>5, :name=>'T', :artist_id=>2).set_server(:s4))
163
- # Should select from current object's shard to check existing association, but update associated object's shard
164
- sqls = @db.sqls
165
- ["UPDATE albums SET artist_id = NULL, name = 'T' WHERE (id = 5) -- s4", "UPDATE albums SET name = 'T', artist_id = NULL WHERE (id = 5) -- s4"].must_include(sqls.pop)
166
- sqls.must_equal ["SELECT 1 AS one FROM albums WHERE ((albums.artist_id = 2) AND (id = 5)) LIMIT 1 -- s2"]
167
- end
168
-
169
- it "should be able to set a shard to use for any object using set_server" do
170
- @Album.server(:s1).first.set_server(:s2).reload
171
- @db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s2"]
172
- end
173
-
174
- it "should use transactions on the correct shard" do
175
- @Album.use_transactions = true
176
- @Album.server(:s2).first.save
177
- sqls = @db.sqls
178
- ["UPDATE albums SET artist_id = 2, name = 'RF' WHERE (id = 1) -- s2", "UPDATE albums SET name = 'RF', artist_id = 2 WHERE (id = 1) -- s2"].must_include(sqls.slice!(2))
179
- sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s2", "BEGIN -- s2", "COMMIT -- s2"]
180
- end
181
-
182
- it "should use override current shard when saving with given :server option" do
183
- @Album.use_transactions = true
184
- @Album.server(:s2).first.save(:server=>:s1)
185
- sqls = @db.sqls
186
- ["UPDATE albums SET artist_id = 2, name = 'RF' WHERE (id = 1) -- s1", "UPDATE albums SET name = 'RF', artist_id = 2 WHERE (id = 1) -- s1"].must_include(sqls.slice!(2))
187
- sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s2", "BEGIN -- s1", "COMMIT -- s1"]
188
- end
189
-
190
- it "should have objects retrieved from a specific shard using with_server from server_block extension" do
191
- album = @db.extension(:server_block).with_server(:s1) do
192
- @Album.first
193
- end
194
- album.update(:name=>'MO')
195
- @db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "UPDATE albums SET name = 'MO' WHERE (id = 1) -- s1"]
196
- end
197
- end
@@ -1,151 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "Shared caching behavior" do
4
- before do
5
- @db = Sequel.mock
6
-
7
- class ::LookupModel < ::Sequel::Model(@db)
8
- columns :id, :caching_model_id, :caching_model_id2
9
- many_to_one :caching_model
10
- many_to_one :caching_model2, :key=>[:caching_model_id, :caching_model_id2], :class=>:CachingModel
11
- end
12
- @c = LookupModel
13
-
14
- class ::CachingModel < Sequel::Model(@db)
15
- columns :id, :id2
16
- end
17
- @cc = CachingModel
18
- end
19
- after do
20
- Object.send(:remove_const, :CachingModel)
21
- Object.send(:remove_const, :LookupModel)
22
- end
23
-
24
- many_to_one_cpk_specs = shared_description do
25
- it "should use a simple primary key lookup when retrieving many_to_one associated records with a composite key" do
26
- @db.sqls.must_equal []
27
- @c.load(:id=>3, :caching_model_id=>1, :caching_model_id2=>2).caching_model2.must_be_same_as(@cm12)
28
- @c.load(:id=>3, :caching_model_id=>2, :caching_model_id2=>1).caching_model2.must_be_same_as(@cm21)
29
- @db.sqls.must_equal []
30
- @db.fetch = []
31
- @c.load(:id=>4, :caching_model_id=>2, :caching_model_id2=>2).caching_model2.must_be_nil
32
- end
33
- end
34
-
35
- many_to_one_pk_specs = shared_description do
36
- it "should use a simple primary key lookup when retrieving many_to_one associated records" do
37
- @cc.set_primary_key([:id, :id2])
38
- @db.sqls.must_equal []
39
- @c.load(:id=>3, :caching_model_id=>1).caching_model.must_be_same_as(@cm1)
40
- @c.load(:id=>4, :caching_model_id=>2).caching_model.must_be_same_as(@cm2)
41
- @db.sqls.must_equal []
42
- @db.fetch = []
43
- @c.load(:id=>4, :caching_model_id=>3).caching_model.must_be_nil
44
- end
45
-
46
- it "should not use a simple primary key lookup if the assocation has a nil :key option" do
47
- @c.many_to_one :caching_model, :key=>nil, :dataset=>proc{CachingModel.filter(:caching_model_id=>caching_model_id)}
48
- @c.load(:id=>3, :caching_model_id=>1).caching_model
49
- @db.sqls.wont_equal []
50
- end
51
-
52
- it "should not use a simple primary key lookup if the assocation has a nil :key option" do
53
- @c.many_to_one :caching_model, :many_to_one_pk_lookup=>false
54
- @c.load(:id=>3, :caching_model_id=>1).caching_model
55
- @db.sqls.wont_equal []
56
- end
57
-
58
- it "should not use a simple primary key lookup if the assocation's :primary_key option doesn't match the primary key of the associated class" do
59
- @c.many_to_one :caching_model, :primary_key=>:id2
60
- @c.load(:id=>3, :caching_model_id=>1).caching_model
61
- @db.sqls.wont_equal []
62
- end
63
-
64
- it "should not use a simple primary key lookup if the assocation has :conditions" do
65
- @c.many_to_one :caching_model, :conditions=>{:a=>1}
66
- @c.load(:id=>3, :caching_model_id=>1).caching_model
67
- @db.sqls.wont_equal []
68
- end
69
-
70
- it "should not use a simple primary key lookup if the assocation has :select" do
71
- @c.many_to_one :caching_model, :select=>[:a, :b]
72
- @c.load(:id=>3, :caching_model_id=>1).caching_model
73
- @db.sqls.wont_equal []
74
- end
75
-
76
- it "should not use a simple primary key lookup if the assocation has a block" do
77
- @c.many_to_one(:caching_model){|ds| ds.where{a > 1}}
78
- @c.load(:id=>3, :caching_model_id=>1).caching_model
79
- @db.sqls.wont_equal []
80
- end
81
-
82
- it "should not use a simple primary key lookup if the assocation has a non-default :dataset option" do
83
- cc = @cc
84
- @c.many_to_one :caching_model, :dataset=>proc{cc.where(:id=>caching_model_id)}
85
- @c.load(:id=>3, :caching_model_id=>1).caching_model
86
- @db.sqls.wont_equal []
87
- end
88
-
89
- it "should use a simple primary key lookup if explicitly set" do
90
- @c.many_to_one :caching_model, :select=>[:a, :b], :many_to_one_pk_lookup=>true
91
- @c.load(:id=>3, :caching_model_id=>1).caching_model
92
- @db.sqls.must_equal []
93
- end
94
- end
95
-
96
- describe "With caching plugin" do
97
- before do
98
- @cache_class = Class.new(Hash) do
99
- attr_accessor :ttl
100
- def set(k, v, ttl); self[k] = v; @ttl = ttl; end
101
- def get(k); self[k]; end
102
- end
103
- cache = @cache_class.new
104
- @cache = cache
105
-
106
- @cc.plugin :caching, @cache
107
- @db.fetch = {:id=>1}
108
- @cm1 = @cc[1]
109
- @cm2 = @cc[2]
110
- @cm12 = @cc[1, 2]
111
- @cm21 = @cc[2, 1]
112
-
113
- @db.sqls
114
- end
115
-
116
- include many_to_one_cpk_specs
117
- include many_to_one_pk_specs
118
- end
119
-
120
- describe "With static_cache plugin with single key" do
121
- before do
122
- @db.fetch = [{:id=>1}, {:id=>2}]
123
- @cc.plugin :static_cache
124
- @cm1 = @cc[1]
125
- @cm2 = @cc[2]
126
- @db.sqls
127
- end
128
-
129
- include many_to_one_pk_specs
130
-
131
- it "should not issue regular query if primary key lookup returns no rows" do
132
- def @cc.primary_key_lookup(pk); end
133
- @c.many_to_one :caching_model
134
- @c.load(:id=>3, :caching_model_id=>1).caching_model
135
- @db.sqls.must_equal []
136
- end
137
- end
138
-
139
- describe "With static_cache plugin with composite key" do
140
- before do
141
- @cc.set_primary_key([:id, :id2])
142
- @db.fetch = [{:id=>1, :id2=>2}, {:id=>2, :id2=>1}]
143
- @cc.plugin :static_cache
144
- @cm12 = @cc[[1, 2]]
145
- @cm21 = @cc[[2, 1]]
146
- @db.sqls
147
- end
148
-
149
- include many_to_one_cpk_specs
150
- end
151
- end