sequel 4.49.0 → 5.3.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 (484) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +130 -0
  3. data/README.rdoc +195 -136
  4. data/Rakefile +26 -42
  5. data/bin/sequel +6 -9
  6. data/doc/advanced_associations.rdoc +91 -168
  7. data/doc/association_basics.rdoc +197 -274
  8. data/doc/bin_sequel.rdoc +5 -3
  9. data/doc/cheat_sheet.rdoc +66 -43
  10. data/doc/code_order.rdoc +1 -8
  11. data/doc/core_extensions.rdoc +81 -56
  12. data/doc/dataset_basics.rdoc +8 -17
  13. data/doc/dataset_filtering.rdoc +81 -86
  14. data/doc/extensions.rdoc +3 -10
  15. data/doc/mass_assignment.rdoc +73 -30
  16. data/doc/migration.rdoc +19 -36
  17. data/doc/model_dataset_method_design.rdoc +14 -17
  18. data/doc/model_hooks.rdoc +15 -25
  19. data/doc/model_plugins.rdoc +10 -10
  20. data/doc/mssql_stored_procedures.rdoc +3 -3
  21. data/doc/object_model.rdoc +52 -70
  22. data/doc/opening_databases.rdoc +39 -32
  23. data/doc/postgresql.rdoc +48 -38
  24. data/doc/prepared_statements.rdoc +27 -22
  25. data/doc/querying.rdoc +173 -150
  26. data/doc/reflection.rdoc +5 -6
  27. data/doc/release_notes/5.0.0.txt +159 -0
  28. data/doc/release_notes/5.1.0.txt +31 -0
  29. data/doc/release_notes/5.2.0.txt +33 -0
  30. data/doc/release_notes/5.3.0.txt +121 -0
  31. data/doc/schema_modification.rdoc +78 -64
  32. data/doc/security.rdoc +97 -88
  33. data/doc/sharding.rdoc +43 -30
  34. data/doc/sql.rdoc +53 -65
  35. data/doc/testing.rdoc +4 -5
  36. data/doc/thread_safety.rdoc +2 -4
  37. data/doc/transactions.rdoc +18 -17
  38. data/doc/validations.rdoc +48 -45
  39. data/doc/virtual_rows.rdoc +87 -115
  40. data/lib/sequel/adapters/ado/access.rb +7 -13
  41. data/lib/sequel/adapters/ado/mssql.rb +2 -9
  42. data/lib/sequel/adapters/ado.rb +9 -25
  43. data/lib/sequel/adapters/amalgalite.rb +3 -18
  44. data/lib/sequel/adapters/ibmdb.rb +9 -45
  45. data/lib/sequel/adapters/jdbc/db2.rb +8 -37
  46. data/lib/sequel/adapters/jdbc/derby.rb +4 -50
  47. data/lib/sequel/adapters/jdbc/h2.rb +6 -26
  48. data/lib/sequel/adapters/jdbc/hsqldb.rb +2 -27
  49. data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
  50. data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
  51. data/lib/sequel/adapters/jdbc/mysql.rb +11 -15
  52. data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
  53. data/lib/sequel/adapters/jdbc/postgresql.rb +23 -33
  54. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
  55. data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
  56. data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
  57. data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
  58. data/lib/sequel/adapters/jdbc.rb +18 -74
  59. data/lib/sequel/adapters/mock.rb +4 -30
  60. data/lib/sequel/adapters/mysql.rb +7 -44
  61. data/lib/sequel/adapters/mysql2.rb +5 -23
  62. data/lib/sequel/adapters/odbc/db2.rb +1 -1
  63. data/lib/sequel/adapters/odbc/mssql.rb +4 -12
  64. data/lib/sequel/adapters/odbc/oracle.rb +1 -1
  65. data/lib/sequel/adapters/odbc.rb +0 -19
  66. data/lib/sequel/adapters/oracle.rb +8 -13
  67. data/lib/sequel/adapters/postgres.rb +28 -150
  68. data/lib/sequel/adapters/postgresql.rb +1 -1
  69. data/lib/sequel/adapters/shared/access.rb +11 -51
  70. data/lib/sequel/adapters/shared/db2.rb +3 -61
  71. data/lib/sequel/adapters/shared/mssql.rb +21 -157
  72. data/lib/sequel/adapters/shared/mysql.rb +61 -227
  73. data/lib/sequel/adapters/shared/oracle.rb +13 -41
  74. data/lib/sequel/adapters/shared/postgres.rb +58 -264
  75. data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
  76. data/lib/sequel/adapters/shared/sqlite.rb +22 -101
  77. data/lib/sequel/adapters/sqlanywhere.rb +4 -23
  78. data/lib/sequel/adapters/sqlite.rb +2 -19
  79. data/lib/sequel/adapters/tinytds.rb +5 -15
  80. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
  81. data/lib/sequel/adapters/utils/mysql_mysql2.rb +4 -4
  82. data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
  83. data/lib/sequel/adapters/utils/replace.rb +0 -5
  84. data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
  85. data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
  86. data/lib/sequel/ast_transformer.rb +3 -94
  87. data/lib/sequel/connection_pool/sharded_single.rb +1 -4
  88. data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
  89. data/lib/sequel/connection_pool/single.rb +0 -2
  90. data/lib/sequel/connection_pool/threaded.rb +94 -110
  91. data/lib/sequel/connection_pool.rb +38 -28
  92. data/lib/sequel/core.rb +42 -101
  93. data/lib/sequel/database/connecting.rb +23 -60
  94. data/lib/sequel/database/dataset.rb +6 -9
  95. data/lib/sequel/database/dataset_defaults.rb +4 -48
  96. data/lib/sequel/database/features.rb +5 -4
  97. data/lib/sequel/database/logging.rb +2 -9
  98. data/lib/sequel/database/misc.rb +36 -55
  99. data/lib/sequel/database/query.rb +8 -13
  100. data/lib/sequel/database/schema_generator.rb +93 -64
  101. data/lib/sequel/database/schema_methods.rb +61 -79
  102. data/lib/sequel/database/transactions.rb +4 -24
  103. data/lib/sequel/database.rb +12 -2
  104. data/lib/sequel/dataset/actions.rb +57 -107
  105. data/lib/sequel/dataset/dataset_module.rb +4 -16
  106. data/lib/sequel/dataset/features.rb +35 -30
  107. data/lib/sequel/dataset/graph.rb +40 -49
  108. data/lib/sequel/dataset/misc.rb +12 -37
  109. data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
  110. data/lib/sequel/dataset/prepared_statements.rb +23 -51
  111. data/lib/sequel/dataset/query.rb +91 -161
  112. data/lib/sequel/dataset/sql.rb +33 -225
  113. data/lib/sequel/dataset.rb +18 -10
  114. data/lib/sequel/deprecated.rb +18 -27
  115. data/lib/sequel/exceptions.rb +1 -17
  116. data/lib/sequel/extensions/_model_pg_row.rb +0 -7
  117. data/lib/sequel/extensions/_pretty_table.rb +1 -3
  118. data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
  119. data/lib/sequel/extensions/connection_expiration.rb +1 -1
  120. data/lib/sequel/extensions/connection_validator.rb +1 -1
  121. data/lib/sequel/extensions/constraint_validations.rb +11 -11
  122. data/lib/sequel/extensions/core_extensions.rb +39 -49
  123. data/lib/sequel/extensions/core_refinements.rb +39 -45
  124. data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
  125. data/lib/sequel/extensions/date_arithmetic.rb +7 -7
  126. data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
  127. data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
  128. data/lib/sequel/extensions/eval_inspect.rb +4 -11
  129. data/lib/sequel/extensions/freeze_datasets.rb +1 -69
  130. data/lib/sequel/extensions/from_block.rb +1 -35
  131. data/lib/sequel/extensions/graph_each.rb +2 -2
  132. data/lib/sequel/extensions/identifier_mangling.rb +9 -19
  133. data/lib/sequel/extensions/implicit_subquery.rb +2 -2
  134. data/lib/sequel/extensions/inflector.rb +4 -4
  135. data/lib/sequel/extensions/migration.rb +27 -43
  136. data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
  137. data/lib/sequel/extensions/null_dataset.rb +2 -8
  138. data/lib/sequel/extensions/pagination.rb +1 -17
  139. data/lib/sequel/extensions/pg_array.rb +20 -189
  140. data/lib/sequel/extensions/pg_extended_date_support.rb +230 -0
  141. data/lib/sequel/extensions/pg_hstore.rb +11 -50
  142. data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
  143. data/lib/sequel/extensions/pg_inet.rb +3 -16
  144. data/lib/sequel/extensions/pg_interval.rb +1 -20
  145. data/lib/sequel/extensions/pg_json.rb +7 -27
  146. data/lib/sequel/extensions/pg_loose_count.rb +1 -1
  147. data/lib/sequel/extensions/pg_range.rb +6 -121
  148. data/lib/sequel/extensions/pg_range_ops.rb +1 -3
  149. data/lib/sequel/extensions/pg_row.rb +5 -77
  150. data/lib/sequel/extensions/pg_row_ops.rb +2 -13
  151. data/lib/sequel/extensions/query.rb +3 -4
  152. data/lib/sequel/extensions/round_timestamps.rb +0 -6
  153. data/lib/sequel/extensions/schema_dumper.rb +13 -13
  154. data/lib/sequel/extensions/select_remove.rb +3 -3
  155. data/lib/sequel/extensions/split_array_nil.rb +2 -2
  156. data/lib/sequel/extensions/sql_comments.rb +2 -2
  157. data/lib/sequel/extensions/string_agg.rb +11 -8
  158. data/lib/sequel/extensions/symbol_aref.rb +6 -20
  159. data/lib/sequel/extensions/synchronize_sql.rb +45 -0
  160. data/lib/sequel/model/associations.rb +129 -131
  161. data/lib/sequel/model/base.rb +133 -731
  162. data/lib/sequel/model/default_inflections.rb +1 -1
  163. data/lib/sequel/model/errors.rb +0 -3
  164. data/lib/sequel/model/exceptions.rb +2 -6
  165. data/lib/sequel/model/inflections.rb +1 -26
  166. data/lib/sequel/model/plugins.rb +1 -0
  167. data/lib/sequel/model.rb +27 -62
  168. data/lib/sequel/plugins/active_model.rb +2 -5
  169. data/lib/sequel/plugins/association_dependencies.rb +15 -15
  170. data/lib/sequel/plugins/association_pks.rb +14 -28
  171. data/lib/sequel/plugins/association_proxies.rb +6 -7
  172. data/lib/sequel/plugins/auto_validations.rb +4 -4
  173. data/lib/sequel/plugins/before_after_save.rb +0 -43
  174. data/lib/sequel/plugins/blacklist_security.rb +9 -8
  175. data/lib/sequel/plugins/boolean_readers.rb +3 -3
  176. data/lib/sequel/plugins/boolean_subsets.rb +2 -2
  177. data/lib/sequel/plugins/caching.rb +5 -5
  178. data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
  179. data/lib/sequel/plugins/column_conflicts.rb +2 -2
  180. data/lib/sequel/plugins/column_select.rb +2 -2
  181. data/lib/sequel/plugins/composition.rb +15 -24
  182. data/lib/sequel/plugins/constraint_validations.rb +4 -3
  183. data/lib/sequel/plugins/csv_serializer.rb +13 -20
  184. data/lib/sequel/plugins/dataset_associations.rb +2 -2
  185. data/lib/sequel/plugins/def_dataset_method.rb +5 -5
  186. data/lib/sequel/plugins/defaults_setter.rb +1 -1
  187. data/lib/sequel/plugins/delay_add_association.rb +1 -1
  188. data/lib/sequel/plugins/finder.rb +16 -10
  189. data/lib/sequel/plugins/force_encoding.rb +1 -7
  190. data/lib/sequel/plugins/hook_class_methods.rb +4 -106
  191. data/lib/sequel/plugins/input_transformer.rb +10 -11
  192. data/lib/sequel/plugins/insert_returning_select.rb +1 -9
  193. data/lib/sequel/plugins/instance_filters.rb +5 -5
  194. data/lib/sequel/plugins/instance_hooks.rb +7 -52
  195. data/lib/sequel/plugins/inverted_subsets.rb +3 -1
  196. data/lib/sequel/plugins/json_serializer.rb +19 -19
  197. data/lib/sequel/plugins/lazy_attributes.rb +1 -10
  198. data/lib/sequel/plugins/list.rb +6 -6
  199. data/lib/sequel/plugins/many_through_many.rb +11 -8
  200. data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
  201. data/lib/sequel/plugins/nested_attributes.rb +18 -31
  202. data/lib/sequel/plugins/optimistic_locking.rb +3 -3
  203. data/lib/sequel/plugins/pg_array_associations.rb +8 -2
  204. data/lib/sequel/plugins/pg_row.rb +2 -11
  205. data/lib/sequel/plugins/prepared_statements.rb +13 -66
  206. data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
  207. data/lib/sequel/plugins/rcte_tree.rb +7 -7
  208. data/lib/sequel/plugins/serialization.rb +15 -33
  209. data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
  210. data/lib/sequel/plugins/sharding.rb +2 -8
  211. data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
  212. data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
  213. data/lib/sequel/plugins/static_cache.rb +8 -9
  214. data/lib/sequel/plugins/string_stripper.rb +3 -3
  215. data/lib/sequel/plugins/subclasses.rb +1 -1
  216. data/lib/sequel/plugins/subset_conditions.rb +2 -2
  217. data/lib/sequel/plugins/table_select.rb +2 -2
  218. data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
  219. data/lib/sequel/plugins/timestamps.rb +6 -7
  220. data/lib/sequel/plugins/touch.rb +4 -8
  221. data/lib/sequel/plugins/tree.rb +3 -3
  222. data/lib/sequel/plugins/typecast_on_load.rb +2 -2
  223. data/lib/sequel/plugins/unlimited_update.rb +1 -7
  224. data/lib/sequel/plugins/update_or_create.rb +3 -3
  225. data/lib/sequel/plugins/update_refresh.rb +3 -3
  226. data/lib/sequel/plugins/uuid.rb +7 -11
  227. data/lib/sequel/plugins/validation_class_methods.rb +10 -9
  228. data/lib/sequel/plugins/validation_contexts.rb +4 -4
  229. data/lib/sequel/plugins/validation_helpers.rb +26 -25
  230. data/lib/sequel/plugins/whitelist_security.rb +13 -9
  231. data/lib/sequel/plugins/xml_serializer.rb +24 -25
  232. data/lib/sequel/sql.rb +145 -276
  233. data/lib/sequel/timezones.rb +8 -23
  234. data/lib/sequel/version.rb +2 -2
  235. data/lib/sequel.rb +1 -1
  236. data/spec/adapter_spec.rb +1 -1
  237. data/spec/adapters/db2_spec.rb +2 -103
  238. data/spec/adapters/mssql_spec.rb +89 -68
  239. data/spec/adapters/mysql_spec.rb +111 -478
  240. data/spec/adapters/oracle_spec.rb +1 -9
  241. data/spec/adapters/postgres_spec.rb +459 -664
  242. data/spec/adapters/spec_helper.rb +12 -31
  243. data/spec/adapters/sqlanywhere_spec.rb +2 -77
  244. data/spec/adapters/sqlite_spec.rb +8 -146
  245. data/spec/bin_spec.rb +11 -16
  246. data/spec/core/connection_pool_spec.rb +173 -74
  247. data/spec/core/database_spec.rb +96 -244
  248. data/spec/core/dataset_spec.rb +99 -414
  249. data/spec/core/deprecated_spec.rb +3 -3
  250. data/spec/core/expression_filters_spec.rb +37 -144
  251. data/spec/core/mock_adapter_spec.rb +241 -4
  252. data/spec/core/object_graph_spec.rb +11 -60
  253. data/spec/core/placeholder_literalizer_spec.rb +1 -14
  254. data/spec/core/schema_generator_spec.rb +51 -40
  255. data/spec/core/schema_spec.rb +88 -77
  256. data/spec/core/spec_helper.rb +6 -24
  257. data/spec/core/version_spec.rb +1 -1
  258. data/spec/core_extensions_spec.rb +7 -83
  259. data/spec/core_model_spec.rb +2 -2
  260. data/spec/deprecation_helper.rb +2 -14
  261. data/spec/extensions/accessed_columns_spec.rb +1 -1
  262. data/spec/extensions/active_model_spec.rb +3 -3
  263. data/spec/extensions/after_initialize_spec.rb +1 -1
  264. data/spec/extensions/arbitrary_servers_spec.rb +2 -2
  265. data/spec/extensions/association_dependencies_spec.rb +1 -1
  266. data/spec/extensions/association_pks_spec.rb +30 -92
  267. data/spec/extensions/association_proxies_spec.rb +1 -1
  268. data/spec/extensions/auto_literal_strings_spec.rb +1 -12
  269. data/spec/extensions/auto_validations_spec.rb +1 -1
  270. data/spec/extensions/blacklist_security_spec.rb +1 -1
  271. data/spec/extensions/blank_spec.rb +1 -1
  272. data/spec/extensions/boolean_readers_spec.rb +1 -1
  273. data/spec/extensions/boolean_subsets_spec.rb +1 -1
  274. data/spec/extensions/caching_spec.rb +1 -1
  275. data/spec/extensions/class_table_inheritance_spec.rb +53 -1118
  276. data/spec/extensions/column_conflicts_spec.rb +1 -1
  277. data/spec/extensions/column_select_spec.rb +4 -4
  278. data/spec/extensions/columns_introspection_spec.rb +1 -1
  279. data/spec/extensions/columns_updated_spec.rb +1 -1
  280. data/spec/extensions/composition_spec.rb +8 -30
  281. data/spec/extensions/connection_expiration_spec.rb +3 -3
  282. data/spec/extensions/connection_validator_spec.rb +3 -3
  283. data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
  284. data/spec/extensions/constraint_validations_spec.rb +1 -1
  285. data/spec/extensions/core_refinements_spec.rb +1 -3
  286. data/spec/extensions/csv_serializer_spec.rb +4 -9
  287. data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
  288. data/spec/extensions/dataset_associations_spec.rb +2 -1
  289. data/spec/extensions/dataset_source_alias_spec.rb +1 -1
  290. data/spec/extensions/date_arithmetic_spec.rb +3 -3
  291. data/spec/extensions/def_dataset_method_spec.rb +1 -1
  292. data/spec/extensions/defaults_setter_spec.rb +2 -2
  293. data/spec/extensions/delay_add_association_spec.rb +8 -9
  294. data/spec/extensions/dirty_spec.rb +1 -1
  295. data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
  296. data/spec/extensions/eager_each_spec.rb +2 -2
  297. data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
  298. data/spec/extensions/error_splitter_spec.rb +1 -1
  299. data/spec/extensions/error_sql_spec.rb +1 -1
  300. data/spec/extensions/eval_inspect_spec.rb +1 -1
  301. data/spec/extensions/finder_spec.rb +1 -1
  302. data/spec/extensions/force_encoding_spec.rb +2 -5
  303. data/spec/extensions/freeze_datasets_spec.rb +1 -1
  304. data/spec/extensions/graph_each_spec.rb +5 -5
  305. data/spec/extensions/hook_class_methods_spec.rb +1 -194
  306. data/spec/extensions/identifier_mangling_spec.rb +17 -170
  307. data/spec/extensions/implicit_subquery_spec.rb +1 -5
  308. data/spec/extensions/inflector_spec.rb +1 -1
  309. data/spec/extensions/input_transformer_spec.rb +7 -2
  310. data/spec/extensions/insert_returning_select_spec.rb +1 -1
  311. data/spec/extensions/instance_filters_spec.rb +1 -1
  312. data/spec/extensions/instance_hooks_spec.rb +1 -95
  313. data/spec/extensions/inverted_subsets_spec.rb +1 -1
  314. data/spec/extensions/json_serializer_spec.rb +1 -1
  315. data/spec/extensions/lazy_attributes_spec.rb +1 -7
  316. data/spec/extensions/list_spec.rb +5 -6
  317. data/spec/extensions/looser_typecasting_spec.rb +1 -1
  318. data/spec/extensions/many_through_many_spec.rb +25 -33
  319. data/spec/extensions/migration_spec.rb +12 -2
  320. data/spec/extensions/modification_detection_spec.rb +1 -1
  321. data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
  322. data/spec/extensions/named_timezones_spec.rb +3 -3
  323. data/spec/extensions/nested_attributes_spec.rb +1 -29
  324. data/spec/extensions/null_dataset_spec.rb +1 -11
  325. data/spec/extensions/optimistic_locking_spec.rb +2 -2
  326. data/spec/extensions/pagination_spec.rb +1 -1
  327. data/spec/extensions/pg_array_associations_spec.rb +22 -26
  328. data/spec/extensions/pg_array_ops_spec.rb +1 -1
  329. data/spec/extensions/pg_array_spec.rb +3 -48
  330. data/spec/extensions/pg_enum_spec.rb +1 -1
  331. data/spec/extensions/pg_extended_date_support_spec.rb +122 -0
  332. data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
  333. data/spec/extensions/pg_hstore_spec.rb +22 -31
  334. data/spec/extensions/pg_inet_ops_spec.rb +1 -1
  335. data/spec/extensions/pg_inet_spec.rb +1 -14
  336. data/spec/extensions/pg_interval_spec.rb +3 -13
  337. data/spec/extensions/pg_json_ops_spec.rb +1 -1
  338. data/spec/extensions/pg_json_spec.rb +1 -13
  339. data/spec/extensions/pg_loose_count_spec.rb +1 -1
  340. data/spec/extensions/pg_range_ops_spec.rb +1 -1
  341. data/spec/extensions/pg_range_spec.rb +3 -88
  342. data/spec/extensions/pg_row_ops_spec.rb +1 -1
  343. data/spec/extensions/pg_row_plugin_spec.rb +1 -1
  344. data/spec/extensions/pg_row_spec.rb +1 -44
  345. data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
  346. data/spec/extensions/prepared_statements_safe_spec.rb +7 -7
  347. data/spec/extensions/prepared_statements_spec.rb +13 -48
  348. data/spec/extensions/pretty_table_spec.rb +40 -9
  349. data/spec/extensions/query_spec.rb +1 -12
  350. data/spec/extensions/rcte_tree_spec.rb +23 -34
  351. data/spec/extensions/round_timestamps_spec.rb +1 -5
  352. data/spec/extensions/s_spec.rb +1 -1
  353. data/spec/extensions/schema_caching_spec.rb +1 -1
  354. data/spec/extensions/schema_dumper_spec.rb +43 -32
  355. data/spec/extensions/select_remove_spec.rb +1 -1
  356. data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
  357. data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
  358. data/spec/extensions/serialization_spec.rb +5 -17
  359. data/spec/extensions/server_block_spec.rb +1 -1
  360. data/spec/extensions/server_logging_spec.rb +2 -2
  361. data/spec/extensions/sharding_spec.rb +1 -1
  362. data/spec/extensions/shared_caching_spec.rb +1 -28
  363. data/spec/extensions/single_table_inheritance_spec.rb +2 -5
  364. data/spec/extensions/singular_table_names_spec.rb +1 -1
  365. data/spec/extensions/skip_create_refresh_spec.rb +1 -1
  366. data/spec/extensions/spec_helper.rb +5 -27
  367. data/spec/extensions/split_array_nil_spec.rb +1 -1
  368. data/spec/extensions/split_values_spec.rb +1 -1
  369. data/spec/extensions/sql_comments_spec.rb +1 -1
  370. data/spec/extensions/sql_expr_spec.rb +1 -1
  371. data/spec/extensions/static_cache_spec.rb +1 -1
  372. data/spec/extensions/string_agg_spec.rb +2 -2
  373. data/spec/extensions/string_date_time_spec.rb +1 -1
  374. data/spec/extensions/string_stripper_spec.rb +1 -1
  375. data/spec/extensions/subclasses_spec.rb +1 -1
  376. data/spec/extensions/subset_conditions_spec.rb +1 -1
  377. data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
  378. data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
  379. data/spec/extensions/synchronize_sql_spec.rb +124 -0
  380. data/spec/extensions/table_select_spec.rb +4 -4
  381. data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
  382. data/spec/extensions/thread_local_timezones_spec.rb +1 -1
  383. data/spec/extensions/timestamps_spec.rb +5 -7
  384. data/spec/extensions/to_dot_spec.rb +1 -1
  385. data/spec/extensions/touch_spec.rb +1 -1
  386. data/spec/extensions/tree_spec.rb +1 -1
  387. data/spec/extensions/typecast_on_load_spec.rb +1 -1
  388. data/spec/extensions/unlimited_update_spec.rb +1 -1
  389. data/spec/extensions/update_or_create_spec.rb +12 -16
  390. data/spec/extensions/update_primary_key_spec.rb +4 -3
  391. data/spec/extensions/update_refresh_spec.rb +1 -1
  392. data/spec/extensions/uuid_spec.rb +10 -13
  393. data/spec/extensions/validate_associated_spec.rb +1 -1
  394. data/spec/extensions/validation_class_methods_spec.rb +3 -3
  395. data/spec/extensions/validation_contexts_spec.rb +1 -1
  396. data/spec/extensions/validation_helpers_spec.rb +10 -44
  397. data/spec/extensions/whitelist_security_spec.rb +5 -5
  398. data/spec/extensions/xml_serializer_spec.rb +8 -13
  399. data/spec/guards_helper.rb +2 -1
  400. data/spec/integration/associations_test.rb +1 -23
  401. data/spec/integration/database_test.rb +7 -7
  402. data/spec/integration/dataset_test.rb +12 -47
  403. data/spec/integration/eager_loader_test.rb +1 -1
  404. data/spec/integration/migrator_test.rb +1 -1
  405. data/spec/integration/model_test.rb +4 -82
  406. data/spec/integration/plugin_test.rb +7 -23
  407. data/spec/integration/prepared_statement_test.rb +8 -88
  408. data/spec/integration/schema_test.rb +10 -10
  409. data/spec/integration/spec_helper.rb +17 -21
  410. data/spec/integration/timezone_test.rb +5 -5
  411. data/spec/integration/transaction_test.rb +3 -55
  412. data/spec/integration/type_test.rb +9 -9
  413. data/spec/model/association_reflection_spec.rb +24 -9
  414. data/spec/model/associations_spec.rb +124 -303
  415. data/spec/model/base_spec.rb +43 -137
  416. data/spec/model/class_dataset_methods_spec.rb +2 -20
  417. data/spec/model/dataset_methods_spec.rb +1 -20
  418. data/spec/model/eager_loading_spec.rb +48 -17
  419. data/spec/model/hooks_spec.rb +5 -300
  420. data/spec/model/inflector_spec.rb +1 -1
  421. data/spec/model/model_spec.rb +29 -339
  422. data/spec/model/plugins_spec.rb +2 -16
  423. data/spec/model/record_spec.rb +33 -129
  424. data/spec/model/spec_helper.rb +5 -15
  425. data/spec/model/validations_spec.rb +1 -1
  426. data/spec/sequel_warning.rb +1 -12
  427. metadata +19 -65
  428. data/doc/active_record.rdoc +0 -927
  429. data/lib/sequel/adapters/cubrid.rb +0 -160
  430. data/lib/sequel/adapters/do/mysql.rb +0 -69
  431. data/lib/sequel/adapters/do/postgres.rb +0 -46
  432. data/lib/sequel/adapters/do/sqlite3.rb +0 -41
  433. data/lib/sequel/adapters/do.rb +0 -166
  434. data/lib/sequel/adapters/jdbc/as400.rb +0 -92
  435. data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
  436. data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
  437. data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
  438. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
  439. data/lib/sequel/adapters/odbc/progress.rb +0 -12
  440. data/lib/sequel/adapters/shared/cubrid.rb +0 -245
  441. data/lib/sequel/adapters/shared/firebird.rb +0 -261
  442. data/lib/sequel/adapters/shared/informix.rb +0 -63
  443. data/lib/sequel/adapters/shared/progress.rb +0 -40
  444. data/lib/sequel/adapters/swift/mysql.rb +0 -50
  445. data/lib/sequel/adapters/swift/postgres.rb +0 -49
  446. data/lib/sequel/adapters/swift/sqlite.rb +0 -48
  447. data/lib/sequel/adapters/swift.rb +0 -169
  448. data/lib/sequel/adapters/utils/pg_types.rb +0 -4
  449. data/lib/sequel/dataset/mutation.rb +0 -98
  450. data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
  451. data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
  452. data/lib/sequel/extensions/filter_having.rb +0 -65
  453. data/lib/sequel/extensions/hash_aliases.rb +0 -51
  454. data/lib/sequel/extensions/meta_def.rb +0 -37
  455. data/lib/sequel/extensions/query_literals.rb +0 -86
  456. data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
  457. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
  458. data/lib/sequel/extensions/set_overrides.rb +0 -82
  459. data/lib/sequel/no_core_ext.rb +0 -4
  460. data/lib/sequel/plugins/association_autoreloading.rb +0 -11
  461. data/lib/sequel/plugins/identifier_columns.rb +0 -49
  462. data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
  463. data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
  464. data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
  465. data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
  466. data/lib/sequel/plugins/schema.rb +0 -84
  467. data/lib/sequel/plugins/scissors.rb +0 -37
  468. data/spec/core/dataset_mutation_spec.rb +0 -253
  469. data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
  470. data/spec/extensions/before_after_save_spec.rb +0 -40
  471. data/spec/extensions/filter_having_spec.rb +0 -42
  472. data/spec/extensions/from_block_spec.rb +0 -21
  473. data/spec/extensions/hash_aliases_spec.rb +0 -26
  474. data/spec/extensions/identifier_columns_spec.rb +0 -19
  475. data/spec/extensions/meta_def_spec.rb +0 -35
  476. data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
  477. data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
  478. data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
  479. data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
  480. data/spec/extensions/query_literals_spec.rb +0 -185
  481. data/spec/extensions/schema_spec.rb +0 -123
  482. data/spec/extensions/scissors_spec.rb +0 -27
  483. data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
  484. data/spec/extensions/set_overrides_spec.rb +0 -75
@@ -3,11 +3,6 @@
3
3
  module Sequel
4
4
  class Dataset
5
5
  module Replace
6
- INSERT = 'INSERT'.freeze
7
- Sequel::Deprecation.deprecate_constant(self, :INSERT)
8
- REPLACE = 'REPLACE'.freeze
9
- Sequel::Deprecation.deprecate_constant(self, :REPLACE)
10
-
11
6
  # Execute a REPLACE statement on the database (deletes any duplicate
12
7
  # rows before inserting).
13
8
  def replace(*values)
@@ -3,8 +3,6 @@
3
3
  module Sequel
4
4
  class Dataset
5
5
  module StoredProcedureMethods
6
- Dataset.def_deprecated_opts_setter(self, :sproc_type, :sproc_name, :sproc_args)
7
-
8
6
  # The name of the stored procedure to call
9
7
  def sproc_name
10
8
  @opts[:sproc_name]
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  module Sequel
2
4
  module UnmodifiedIdentifiers
3
5
  module DatabaseMethods
@@ -55,7 +55,7 @@ module Sequel
55
55
  end
56
56
  SQL::Function.new!(o.name, v(o.args), h)
57
57
  when SQL::Subscript
58
- SQL::Subscript.new(v(o.f), v(o.sub))
58
+ SQL::Subscript.new(v(o.expression), v(o.sub))
59
59
  when SQL::Window
60
60
  opts = o.opts.dup
61
61
  opts[:partition] = v(opts[:partition]) if opts[:partition]
@@ -90,15 +90,8 @@ module Sequel
90
90
  # in the dataset are qualified with a given table name.
91
91
  class Qualifier < ASTTransformer
92
92
  # Set the table used to qualify unqualified columns
93
- def initialize(table, unused=nil)
94
- if unused
95
- # :nocov:
96
- Sequel::Deprecation.deprecate("Passing two arguments to Sequel::Qualifier.new", 'Pass only the second argument specifying the table used for qualification')
97
- @table = unused
98
- # :nocov:
99
- else
100
- @table = table
101
- end
93
+ def initialize(table)
94
+ @table = table
102
95
  end
103
96
 
104
97
  private
@@ -128,88 +121,4 @@ module Sequel
128
121
  end
129
122
  end
130
123
  end
131
-
132
- # +Unbinder+ is used to take a dataset filter and return a modified version
133
- # that unbinds already bound values and returns a dataset with bound value
134
- # placeholders and a hash of bind values. You can then prepare the dataset
135
- # and use the bound variables to execute it with the same values.
136
- #
137
- # This class only does a limited form of unbinding where the variable names
138
- # and values can be associated unambiguously. The only cases it handles
139
- # are <tt>SQL::ComplexExpression<tt> with an operator in +UNBIND_OPS+, a
140
- # first argument that's an instance of a member of +UNBIND_KEY_CLASSES+, and
141
- # a second argument that's an instance of a member of +UNBIND_VALUE_CLASSES+.
142
- #
143
- # So it can handle cases like:
144
- #
145
- # DB.where(:a=>1).exclude(:b=>2).where{c > 3}
146
- #
147
- # But it cannot handle cases like:
148
- #
149
- # DB.where(:a + 1 < 0)
150
- class Unbinder < ASTTransformer
151
- # The <tt>SQL::ComplexExpression<tt> operates that will be considered
152
- # for transformation.
153
- UNBIND_OPS = [:'=', :'!=', :<, :>, :<=, :>=]
154
-
155
- # The key classes (first argument of the ComplexExpression) that will
156
- # considered for transformation.
157
- UNBIND_KEY_CLASSES = [Symbol, SQL::Identifier, SQL::QualifiedIdentifier]
158
-
159
- # The value classes (second argument of the ComplexExpression) that
160
- # will be considered for transformation.
161
- UNBIND_VALUE_CLASSES = [Numeric, String, Date, Time]
162
-
163
- # The hash of bind variables that were extracted from the dataset filter.
164
- attr_reader :binds
165
-
166
- # Intialize an empty +binds+ hash.
167
- def initialize
168
- Sequel::Deprecation.deprecate("Sequel::Unbinder", 'There is no replacement')
169
- @binds = {}
170
- end
171
-
172
- private
173
-
174
- # Create a suitable bound variable key for the object, which should be
175
- # an instance of one of the +UNBIND_KEY_CLASSES+.
176
- def bind_key(obj)
177
- case obj
178
- when Symbol
179
- obj
180
- when String
181
- obj.to_sym
182
- when SQL::Identifier
183
- bind_key(obj.value)
184
- when SQL::QualifiedIdentifier
185
- :"#{bind_key(obj.table)}.#{bind_key(obj.column)}"
186
- else
187
- raise Error, "unhandled object in Sequel::Unbinder#bind_key: #{obj}"
188
- end
189
- end
190
-
191
- # Handle <tt>SQL::ComplexExpression</tt> instances with suitable ops
192
- # and arguments, substituting the value with a bound variable placeholder
193
- # and assigning it an entry in the +binds+ hash with a matching key.
194
- def v(o)
195
- if o.is_a?(SQL::ComplexExpression) && UNBIND_OPS.include?(o.op)
196
- l, r = o.args
197
- l = l.value if l.is_a?(Sequel::SQL::Wrapper)
198
- r = r.value if r.is_a?(Sequel::SQL::Wrapper)
199
- if UNBIND_KEY_CLASSES.any?{|c| l.is_a?(c)} && UNBIND_VALUE_CLASSES.any?{|c| r.is_a?(c)} && !r.is_a?(LiteralString)
200
- key = bind_key(l)
201
- if (old = binds[key]) && old != r
202
- raise UnbindDuplicate, "two different values for #{key.inspect}: #{[r, old].inspect}"
203
- end
204
- binds[key] = r
205
- SQL::ComplexExpression.new(o.op, l, :"$#{key}")
206
- else
207
- super
208
- end
209
- else
210
- super
211
- end
212
- end
213
- end
214
- Sequel::Deprecation.deprecate_constant(self, :Unbinder)
215
124
  end
@@ -66,8 +66,7 @@ class Sequel::ShardedSingleConnectionPool < Sequel::ConnectionPool
66
66
  1
67
67
  end
68
68
 
69
- # Remove servers from the connection pool. Primarily used in conjunction with master/slave
70
- # or shard configurations. Similar to disconnecting from all given servers,
69
+ # Remove servers from the connection pool. Similar to disconnecting from all given servers,
71
70
  # except that after it is used, future requests for the server will use the
72
71
  # :default server instead.
73
72
  def remove_servers(servers)
@@ -110,6 +109,4 @@ class Sequel::ShardedSingleConnectionPool < Sequel::ConnectionPool
110
109
  def preconnect(concurrent = nil)
111
110
  servers.each{|s| hold(s){}}
112
111
  end
113
-
114
- CONNECTION_POOL__MAP[[true, true]] = self
115
112
  end
@@ -1,6 +1,6 @@
1
1
  # frozen-string-literal: true
2
2
 
3
- require 'sequel/connection_pool/threaded'
3
+ require_relative 'threaded'
4
4
 
5
5
  # The slowest and most advanced connection, dealing with both multi-threaded
6
6
  # access and configurations with multiple shards/servers.
@@ -20,18 +20,14 @@ class Sequel::ShardedThreadedConnectionPool < Sequel::ThreadedConnectionPool
20
20
  @available_connections = {}
21
21
  @connections_to_remove = []
22
22
  @servers = opts.fetch(:servers_hash, Hash.new(:default))
23
-
24
- if USE_WAITER
25
- @waiter = nil
26
- @waiters = {}
27
- end
23
+ remove_instance_variable(:@waiter)
24
+ @waiters = {}
28
25
 
29
26
  add_servers([:default])
30
27
  add_servers(opts[:servers].keys) if opts[:servers]
31
28
  end
32
29
 
33
- # Adds new servers to the connection pool. Primarily used in conjunction with master/slave
34
- # or shard configurations. Allows for dynamic expansion of the potential slaves/shards
30
+ # Adds new servers to the connection pool. Allows for dynamic expansion of the potential slaves/shards
35
31
  # at runtime. servers argument should be an array of symbols.
36
32
  def add_servers(servers)
37
33
  sync do
@@ -40,7 +36,7 @@ class Sequel::ShardedThreadedConnectionPool < Sequel::ThreadedConnectionPool
40
36
  @servers[server] = server
41
37
  @available_connections[server] = []
42
38
  @allocated[server] = {}
43
- @waiters[server] = ConditionVariable.new if USE_WAITER
39
+ @waiters[server] = ConditionVariable.new
44
40
  end
45
41
  end
46
42
  end
@@ -77,12 +73,11 @@ class Sequel::ShardedThreadedConnectionPool < Sequel::ThreadedConnectionPool
77
73
  @available_connections[server]
78
74
  end
79
75
 
80
- # The total number of connections opened for the given server, should
81
- # be equal to available_connections.length + allocated.length. Nonexistent
82
- # servers will return the created count of the default server.
76
+ # The total number of connections opened for the given server.
77
+ # Nonexistent servers will return the created count of the default server.
78
+ # The calling code should not have the mutex before calling this.
83
79
  def size(server=:default)
84
- server = @servers[server]
85
- @allocated[server].length + @available_connections[server].length
80
+ @mutex.synchronize{_size(server)}
86
81
  end
87
82
 
88
83
  # Removes all connections currently available on all servers, optionally
@@ -120,8 +115,7 @@ class Sequel::ShardedThreadedConnectionPool < Sequel::ThreadedConnectionPool
120
115
  # If no connection is immediately available and the pool is already using the maximum
121
116
  # number of connections, Pool#hold will block until a connection
122
117
  # is available or the timeout expires. If the timeout expires before a
123
- # connection can be acquired, a Sequel::PoolTimeout is
124
- # raised.
118
+ # connection can be acquired, a Sequel::PoolTimeout is raised.
125
119
  def hold(server=:default)
126
120
  server = pick_server(server)
127
121
  t = Thread.current
@@ -139,8 +133,7 @@ class Sequel::ShardedThreadedConnectionPool < Sequel::ThreadedConnectionPool
139
133
  end
140
134
  end
141
135
 
142
- # Remove servers from the connection pool. Primarily used in conjunction with master/slave
143
- # or shard configurations. Similar to disconnecting from all given servers,
136
+ # Remove servers from the connection pool. Similar to disconnecting from all given servers,
144
137
  # except that after it is used, future requests for the server will use the
145
138
  # :default server instead.
146
139
  def remove_servers(servers)
@@ -150,7 +143,7 @@ class Sequel::ShardedThreadedConnectionPool < Sequel::ThreadedConnectionPool
150
143
  servers.each do |server|
151
144
  if @servers.include?(server)
152
145
  conns = disconnect_server_connections(server)
153
- @waiters.delete(server) if USE_WAITER
146
+ @waiters.delete(server)
154
147
  @available_connections.delete(server)
155
148
  @allocated.delete(server)
156
149
  @servers.delete(server)
@@ -174,71 +167,89 @@ class Sequel::ShardedThreadedConnectionPool < Sequel::ThreadedConnectionPool
174
167
 
175
168
  private
176
169
 
177
- # Assigns a connection to the supplied thread for the given server, if one
178
- # is available. The calling code should already have the mutex when
179
- # calling this.
180
- def _acquire(thread, server)
181
- if conn = available(server)
182
- allocated(server)[thread] = conn
183
- end
170
+ # The total number of connections opened for the given server.
171
+ # The calling code should already have the mutex before calling this.
172
+ def _size(server)
173
+ server = @servers[server]
174
+ @allocated[server].length + @available_connections[server].length
184
175
  end
185
176
 
186
- if USE_WAITER
187
- # Assigns a connection to the supplied thread, if one
188
- # is available. The calling code should NOT already have the mutex when
189
- # calling this.
190
- #
191
- # This should return a connection is one is available within the timeout,
192
- # or nil if a connection could not be acquired within the timeout.
193
- def acquire(thread, server)
177
+ # Assigns a connection to the supplied thread, if one
178
+ # is available. The calling code should NOT already have the mutex when
179
+ # calling this.
180
+ #
181
+ # This should return a connection is one is available within the timeout,
182
+ # or nil if a connection could not be acquired within the timeout.
183
+ def acquire(thread, server)
184
+ if conn = assign_connection(thread, server)
185
+ return conn
186
+ end
187
+
188
+ time = Time.now
189
+
190
+ sync do
191
+ @waiters[server].wait(@mutex, @timeout)
192
+ if conn = next_available(server)
193
+ return(allocated(server)[thread] = conn)
194
+ end
195
+ end
196
+
197
+ until conn = assign_connection(thread, server)
198
+ deadline ||= time + @timeout
199
+ current_time = Time.now
200
+ raise_pool_timeout(current_time - time, server) if current_time > deadline
201
+ # :nocov:
202
+ # It's difficult to get to this point, it can only happen if there is a race condition
203
+ # where a connection cannot be acquired even after the thread is signalled by the condition
194
204
  sync do
195
- if conn = _acquire(thread, server)
196
- return conn
205
+ @waiters[server].wait(@mutex, deadline - current_time)
206
+ if conn = next_available(server)
207
+ return(allocated(server)[thread] = conn)
197
208
  end
209
+ end
210
+ # :nocov:
211
+ end
212
+
213
+ conn
214
+ end
198
215
 
199
- time = Time.now
200
- @waiters[server].wait(@mutex, @timeout)
201
- Thread.pass
216
+ # Assign a connection to the thread, or return nil if one cannot be assigned.
217
+ # The caller should NOT have the mutex before calling this.
218
+ def assign_connection(thread, server)
219
+ alloc = allocated(server)
202
220
 
203
- until conn = _acquire(thread, server)
204
- deadline ||= time + @timeout
205
- current_time = Time.now
206
- raise_pool_timeout(current_time - time, server) if current_time > deadline
207
- # :nocov:
208
- # It's difficult to get to this point, it can only happen if there is a race condition
209
- # where a connection cannot be acquired even after the thread is signalled by the condition
210
- # variable that a connection is ready.
211
- @waiters[server].wait(@mutex, deadline - current_time)
212
- Thread.pass
213
- # :nocov:
214
- end
221
+ do_make_new = false
222
+ sync do
223
+ if conn = next_available(server)
224
+ alloc[thread] = conn
225
+ return conn
226
+ end
227
+
228
+ if (n = _size(server)) >= (max = @max_size)
229
+ alloc.to_a.each{|t,c| release(t, c, server) unless t.alive?}
230
+ n = nil
231
+ end
215
232
 
216
- conn
233
+ if (n || _size(server)) < max
234
+ do_make_new = alloc[thread] = true
217
235
  end
218
236
  end
219
- else
220
- # :nocov:
221
- def acquire(thread, server)
222
- unless conn = sync{_acquire(thread, server)}
223
- time = Time.now
224
- timeout = time + @timeout
225
- sleep_time = @sleep_time
226
- sleep sleep_time
227
- until conn = sync{_acquire(thread, server)}
228
- raise_pool_timeout(Time.now - time, server) if Time.now > timeout
229
- sleep sleep_time
237
+
238
+ # Connect to the database outside of the connection pool mutex,
239
+ # as that can take a long time and the connection pool mutex
240
+ # shouldn't be locked while the connection takes place.
241
+ if do_make_new
242
+ begin
243
+ conn = make_new(server)
244
+ sync{alloc[thread] = conn}
245
+ ensure
246
+ unless conn
247
+ sync{alloc.delete(thread)}
230
248
  end
231
249
  end
232
- conn
233
250
  end
234
- # :nocov:
235
- end
236
251
 
237
- # Returns an available connection to the given server. If no connection is
238
- # available, tries to create a new connection. The calling code should already
239
- # have the mutex before calling this.
240
- def available(server)
241
- next_available(server) || make_new(server)
252
+ conn
242
253
  end
243
254
 
244
255
  # Return a connection to the pool of available connections for the server,
@@ -246,10 +257,7 @@ class Sequel::ShardedThreadedConnectionPool < Sequel::ThreadedConnectionPool
246
257
  # before calling this.
247
258
  def checkin_connection(server, conn)
248
259
  available_connections(server) << conn
249
- if USE_WAITER
250
- @waiters[server].signal
251
- Thread.pass
252
- end
260
+ @waiters[server].signal
253
261
  conn
254
262
  end
255
263
 
@@ -263,29 +271,18 @@ class Sequel::ShardedThreadedConnectionPool < Sequel::ThreadedConnectionPool
263
271
  if dis_conns = available_connections(server)
264
272
  conns = dis_conns.dup
265
273
  dis_conns.clear
274
+ @waiters[server].signal
266
275
  end
267
276
  conns
268
277
  end
269
278
 
270
- # Disconnect all given connections.
271
- # immediately, and schedules currently allocated connections for disconnection
279
+ # Disconnect all available connections immediately, and schedule currently allocated connections for disconnection
272
280
  # as soon as they are returned to the pool. The calling code should not
273
281
  # have the mutex before calling this.
274
282
  def disconnect_connections(conns)
275
283
  conns.each{|conn| disconnect_connection(conn)}
276
284
  end
277
285
 
278
- # Creates a new connection to the given server if the size of the pool for
279
- # the server is less than the maximum size of the pool. The calling code
280
- # should already have the mutex before calling this.
281
- def make_new(server)
282
- if (n = size(server)) >= @max_size
283
- allocated(server).to_a.each{|t, c| release(t, c, server) unless t.alive?}
284
- n = nil
285
- end
286
- default_make_new(server) if (n || size(server)) < @max_size
287
- end
288
-
289
286
  # Return the next available connection in the pool for the given server, or nil
290
287
  # if there is not currently an available connection for the server.
291
288
  # The calling code should already have the mutex before calling this.
@@ -309,17 +306,20 @@ class Sequel::ShardedThreadedConnectionPool < Sequel::ThreadedConnectionPool
309
306
  sync{@servers[server]}
310
307
  end
311
308
 
312
- # Create the maximum number of connections to each server immediately.
309
+ # Create the maximum number of connections immediately. The calling code should
310
+ # NOT have the mutex before calling this.
313
311
  def preconnect(concurrent = false)
314
- conn_servers = @servers.keys.map{|s| Array.new(max_size - size(s), s)}.flatten
312
+ conn_servers = @servers.keys.map!{|s| Array.new(max_size - _size(s), s)}.flatten!
315
313
 
316
314
  if concurrent
317
- conn_servers.map{|s| Thread.new{[s, make_new(s)]}}.map(&:join).each{|t| checkin_connection(*t.value)}
315
+ conn_servers.map!{|s| Thread.new{[s, make_new(s)]}}.map!(&:value)
318
316
  else
319
- conn_servers.each{|s| checkin_connection(s, make_new(s))}
317
+ conn_servers.map!{|s| [s, make_new(s)]}
320
318
  end
319
+
320
+ sync{conn_servers.each{|s, conn| checkin_connection(s, conn)}}
321
321
  end
322
-
322
+
323
323
  # Raise a PoolTimeout error showing the current timeout, the elapsed time, the server
324
324
  # the connection attempt was made to, and the database's name (if any).
325
325
  def raise_pool_timeout(elapsed, server)
@@ -343,6 +343,10 @@ class Sequel::ShardedThreadedConnectionPool < Sequel::ThreadedConnectionPool
343
343
  checkin_connection(server, conn)
344
344
  end
345
345
  end
346
+
347
+ if waiter = @waiters[server]
348
+ waiter.signal
349
+ end
346
350
  end
347
351
 
348
352
  # Removes the currently allocated connection from the connection pool. The
@@ -352,6 +356,4 @@ class Sequel::ShardedThreadedConnectionPool < Sequel::ThreadedConnectionPool
352
356
  allocated(server).delete(thread) if @servers.include?(server)
353
357
  disconnect_connection(conn)
354
358
  end
355
-
356
- CONNECTION_POOL__MAP[[false, true]] = self
357
359
  end
@@ -56,6 +56,4 @@ class Sequel::SingleConnectionPool < Sequel::ConnectionPool
56
56
  def preconnect(concurrent = nil)
57
57
  hold{}
58
58
  end
59
-
60
- CONNECTION_POOL__MAP[[true, false]] = self
61
59
  end