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
data/lib/sequel/core.rb CHANGED
@@ -9,13 +9,16 @@
9
9
  #
10
10
  # DB = Sequel.sqlite # Memory database
11
11
  # DB = Sequel.sqlite('blog.db')
12
- # DB = Sequel.postgres('database_name', :user=>'user',
13
- # :password=>'password', :host=>'host', :port=>5432,
14
- # :max_connections=>10)
12
+ # DB = Sequel.postgres('database_name',
13
+ # user:'user',
14
+ # password: 'password',
15
+ # host: 'host'
16
+ # port: 5432,
17
+ # max_connections: 10)
15
18
  #
16
19
  # If a block is given to these methods, it is passed the opened Database
17
20
  # object, which is closed (disconnected) when the block exits, just
18
- # like a block passed to connect. For example:
21
+ # like a block passed to Sequel.connect. For example:
19
22
  #
20
23
  # Sequel.sqlite('blog.db'){|db| puts db[:users].count}
21
24
  #
@@ -24,7 +27,7 @@
24
27
  module Sequel
25
28
  @convert_two_digit_years = true
26
29
  @datetime_class = Time
27
- @split_symbols = :deprecated
30
+ @split_symbols = false
28
31
  @single_threaded = false
29
32
 
30
33
  class << self
@@ -41,16 +44,13 @@ module Sequel
41
44
  #
42
45
  # Sequel.datetime_class = DateTime
43
46
  #
44
- # For ruby versions less than 1.9.2, +Time+ has a limited range (1901 to
45
- # 2038), so if you use datetimes out of that range, you need to switch
46
- # to +DateTime+. Also, before 1.9.2, +Time+ can only handle local and UTC
47
- # times, not other timezones. Note that +Time+ and +DateTime+ objects
47
+ # Note that +Time+ and +DateTime+ objects
48
48
  # have a different API, and in cases where they implement the same methods,
49
49
  # they often implement them differently (e.g. + using seconds on +Time+ and
50
50
  # days on +DateTime+).
51
51
  attr_accessor :datetime_class
52
52
 
53
- # Set whether sequel is being used in single threaded mode. by default,
53
+ # Set whether Sequel is being used in single threaded mode. by default,
54
54
  # Sequel uses a thread-safe connection pool, which isn't as fast as the
55
55
  # single threaded connection pool, and also has some additional thread
56
56
  # safety checks. If your program will only have one thread,
@@ -92,11 +92,11 @@ module Sequel
92
92
  # DB = Sequel.connect('sqlite://blog.db') # ./blog.db
93
93
  # DB = Sequel.connect('sqlite:///blog.db') # /blog.db
94
94
  # DB = Sequel.connect('postgres://user:password@host:port/database_name')
95
- # DB = Sequel.connect('sqlite:///blog.db', :max_connections=>10)
95
+ # DB = Sequel.connect('sqlite:///blog.db', max_connections: 10)
96
96
  #
97
97
  # You can also pass a single options hash:
98
98
  #
99
- # DB = Sequel.connect(:adapter=>'sqlite', :database=>'./blog.db')
99
+ # DB = Sequel.connect(adapter: 'sqlite', database: './blog.db')
100
100
  #
101
101
  # If a block is given, it is passed the opened +Database+ object, which is
102
102
  # closed when the block exits. For example:
@@ -108,7 +108,7 @@ module Sequel
108
108
  # design, and used by <tt>Sequel::Model</tt> to pick the default
109
109
  # database. It is recommended to pass a block if you do not want the
110
110
  # resulting Database object to remain in memory until the process
111
- # terminates.
111
+ # terminates, or use the <tt>keep_reference: false</tt> Database option.
112
112
  #
113
113
  # For details, see the {"Connecting to a Database" guide}[rdoc-ref:doc/opening_databases.rdoc].
114
114
  # To set up a master/slave or sharded database connection, see the {"Master/Slave Databases and Sharding" guide}[rdoc-ref:doc/sharding.rdoc].
@@ -134,9 +134,7 @@ module Sequel
134
134
  end
135
135
 
136
136
  # Load all Sequel extensions given. Extensions are just files that exist under
137
- # <tt>sequel/extensions</tt> in the load path, and are just required. Generally,
138
- # extensions modify the behavior of +Database+ and/or +Dataset+, but Sequel ships
139
- # with some extensions that modify other classes that exist for backwards compatibility.
137
+ # <tt>sequel/extensions</tt> in the load path, and are just required.
140
138
  # In some cases, requiring an extension modifies classes directly, and in others,
141
139
  # it just loads a module that you can extend other classes with. Consult the documentation
142
140
  # for each extension you plan on using for usage.
@@ -147,39 +145,6 @@ module Sequel
147
145
  extensions.each{|e| Kernel.require "sequel/extensions/#{e}"}
148
146
  end
149
147
 
150
- # Set the method to call on identifiers going into the database. This affects
151
- # the literalization of identifiers by calling this method on them before they are input.
152
- # Sequel upcases identifiers in all SQL strings for most databases, so to turn that off:
153
- #
154
- # Sequel.identifier_input_method = nil
155
- #
156
- # to downcase instead:
157
- #
158
- # Sequel.identifier_input_method = :downcase
159
- #
160
- # Other String instance methods work as well.
161
- def self.identifier_input_method=(value)
162
- # SEQUEL5: Remove
163
- Database.identifier_input_method = value
164
- end
165
-
166
- # Set the method to call on identifiers coming out of the database. This affects
167
- # the literalization of identifiers by calling this method on them when they are
168
- # retrieved from the database. Sequel downcases identifiers retrieved for most
169
- # databases, so to turn that off:
170
- #
171
- # Sequel.identifier_output_method = nil
172
- #
173
- # to upcase instead:
174
- #
175
- # Sequel.identifier_output_method = :upcase
176
- #
177
- # Other String instance methods work as well.
178
- def self.identifier_output_method=(value)
179
- # SEQUEL5: Remove
180
- Database.identifier_output_method = value
181
- end
182
-
183
148
  # The exception classed raised if there is an error parsing JSON.
184
149
  # This can be overridden to use an alternative json implementation.
185
150
  def self.json_parser_error_class
@@ -198,15 +163,6 @@ module Sequel
198
163
  JSON.parse(json, :create_additions=>false)
199
164
  end
200
165
 
201
- # Set whether to quote identifiers for all databases by default. By default,
202
- # Sequel quotes identifiers in all SQL strings, so to turn that off:
203
- #
204
- # Sequel.quote_identifiers = false
205
- def self.quote_identifiers=(value)
206
- # SEQUEL5: Remove
207
- Database.quote_identifiers = value
208
- end
209
-
210
166
  # Convert each item in the array to the correct type, handling multi-dimensional
211
167
  # arrays. For each element in the array or subarrays, call the converter,
212
168
  # unless the value is nil.
@@ -220,17 +176,15 @@ module Sequel
220
176
  end
221
177
  end
222
178
 
223
- # Require all given +files+ which should be in the same or a subdirectory of
224
- # this file. If a +subdir+ is given, assume all +files+ are in that subdir.
225
- # This is used to ensure that the files loaded are from the same version of
226
- # Sequel as this file.
179
+ # For backwards compatibility only. require_relative should be used instead.
227
180
  def self.require(files, subdir=nil)
228
- Array(files).each{|f| super("#{File.dirname(__FILE__).untaint}/#{"#{subdir}/" if subdir}#{f}")}
181
+ # Use Kernel.require_relative to work around JRuby 9.0 bug
182
+ Array(files).each{|f| Kernel.require_relative "#{"#{subdir}/" if subdir}#{f}"}
229
183
  end
230
184
 
231
185
  SPLIT_SYMBOL_CACHE = {}
232
186
 
233
- # Splits the symbol into three parts, if symbol splitting is enabled.
187
+ # Splits the symbol into three parts, if symbol splitting is enabled (not the default).
234
188
  # Each part will either be a string or nil. If symbol splitting
235
189
  # is disabled, returns an array with the first and third parts
236
190
  # being nil, and the second part beind a string version of the symbol.
@@ -239,22 +193,13 @@ module Sequel
239
193
  # For tables, these parts are the schema, table, and alias.
240
194
  def self.split_symbol(sym)
241
195
  unless v = Sequel.synchronize{SPLIT_SYMBOL_CACHE[sym]}
242
- if split = split_symbols?
196
+ if split_symbols?
243
197
  v = case s = sym.to_s
244
198
  when /\A((?:(?!__).)+)__((?:(?!___).)+)___(.+)\z/
245
- if split == :deprecated
246
- Sequel::Deprecation.deprecate("Symbol splitting", "Either set Sequel.split_symbols = true, or change #{sym.inspect} to Sequel.qualify(#{$1.inspect}, #{$2.inspect}).as(#{$3.inspect})")
247
- end
248
199
  [$1.freeze, $2.freeze, $3.freeze].freeze
249
200
  when /\A((?:(?!___).)+)___(.+)\z/
250
- if split == :deprecated
251
- Sequel::Deprecation.deprecate("Symbol splitting", "Either set Sequel.split_symbols = true, or change #{sym.inspect} to Sequel.identifier(#{$1.inspect}).as(#{$2.inspect})")
252
- end
253
201
  [nil, $1.freeze, $2.freeze].freeze
254
202
  when /\A((?:(?!__).)+)__(.+)\z/
255
- if split == :deprecated
256
- Sequel::Deprecation.deprecate("Symbol splitting", "Either set Sequel.split_symbols = true, or change #{sym.inspect} to Sequel.qualify(#{$1.inspect}, #{$2.inspect})")
257
- end
258
203
  [$1.freeze, $2.freeze, nil].freeze
259
204
  else
260
205
  [nil, s.freeze, nil].freeze
@@ -267,32 +212,28 @@ module Sequel
267
212
  v
268
213
  end
269
214
 
270
- # Sequel by default will split symbols, treating:
215
+ # Setting this to true enables Sequel's historical behavior of splitting
216
+ # symbols on double or triple underscores:
271
217
  #
272
218
  # :table__column # table.column
273
219
  # :column___alias # column AS alias
274
220
  # :table__column___alias # table.column AS alias
275
221
  #
276
- # This can cause problems if any identifiers in the database use a double
277
- # or triple underscore. When Sequel was first created, using symbols with
278
- # double or triple underscores was the only way to represent qualified or
279
- # aliased identifiers. Sequel now offers many ways to create qualified and
280
- # aliased identifiers, so there is less of a need for this now. This allows
281
- # you to turn off symbol splitting, potentially avoiding problems if you
282
- # have identifiers that use double underscores:
222
+ # It is only recommended to turn this on for backwards compatibility until
223
+ # such symbols have been converted to use newer Sequel APIs such as:
283
224
  #
284
- # Sequel.split_symbols = false
225
+ # Sequel[:table][:column] # table.column
226
+ # Sequel[:column].as(:alias) # column AS alias
227
+ # Sequel[:table][:column].as(:alias) # table.column AS alias
285
228
  #
286
- # Note that Sequel::Database instances do their own caching of literalized
229
+ # Sequel::Database instances do their own caching of literalized
287
230
  # symbols, and changing this setting does not affect those caches. It is
288
231
  # recommended that if you want to change this setting, you do so directly
289
232
  # after requiring Sequel, before creating any Sequel::Database instances.
290
233
  #
291
- # Also note that disabling symbol splitting will also disable the handling
234
+ # Disabling symbol splitting will also disable the handling
292
235
  # of double underscores in virtual row methods, causing such methods to
293
- # yield regular identifers instead of qualified identifiers. To make sure
294
- # the code works when splitting symbols is both disabled and enabled, you
295
- # can use Sequel::SQL::Identifier#[].
236
+ # yield regular identifers instead of qualified identifiers:
296
237
  #
297
238
  # # Sequel.split_symbols = true
298
239
  # Sequel.expr{table__column} # table.column
@@ -356,6 +297,8 @@ module Sequel
356
297
  # Unless in single threaded mode, protects access to any mutable
357
298
  # global data structure in Sequel.
358
299
  # Uses a non-reentrant mutex, so calling code should be careful.
300
+ # In general, this should only be used around the minimal possible code
301
+ # such as Hash#[], Hash#[]=, Hash#delete, Array#<<, and Array#delete.
359
302
  def self.synchronize(&block)
360
303
  @single_threaded ? yield : @data_mutex.synchronize(&block)
361
304
  end
@@ -433,18 +376,23 @@ module Sequel
433
376
 
434
377
  # Method that adds a database adapter class method to Sequel that calls
435
378
  # Sequel.adapter_method.
436
- #
437
- # Do not call this method with untrusted input, as that can result in
438
- # arbitrary code execution.
439
379
  def self.def_adapter_method(*adapters) # :nodoc:
440
380
  adapters.each do |adapter|
441
- instance_eval("def #{adapter}(*args, &block); adapter_method('#{adapter}', *args, &block) end", __FILE__, __LINE__)
381
+ define_singleton_method(adapter){|*args, &block| adapter_method(adapter, *args, &block)}
442
382
  end
443
383
  end
444
384
 
445
385
  private_class_method :adapter_method, :def_adapter_method
446
386
 
447
- require(%w"deprecated sql connection_pool exceptions dataset database timezones ast_transformer version")
387
+ require_relative "deprecated"
388
+ require_relative "sql"
389
+ require_relative "connection_pool"
390
+ require_relative "exceptions"
391
+ require_relative "dataset"
392
+ require_relative "database"
393
+ require_relative "timezones"
394
+ require_relative "ast_transformer"
395
+ require_relative "version"
448
396
 
449
397
  class << self
450
398
  # Allow nicer syntax for creating Sequel expressions:
@@ -452,17 +400,10 @@ module Sequel
452
400
  # Sequel[1] # => Sequel::SQL::NumericExpression: 1
453
401
  # Sequel["a"] # => Sequel::SQL::StringExpression: 'a'
454
402
  # Sequel[:a] # => Sequel::SQL::Identifier: "a"
455
- # Sequel[:a=>1] # => Sequel::SQL::BooleanExpression: ("a" = 1)
403
+ # Sequel[a: 1] # => Sequel::SQL::BooleanExpression: ("a" = 1)
456
404
  alias_method :[], :expr
457
405
  end
458
406
 
459
407
  # Add the database adapter class methods to Sequel via metaprogramming
460
408
  def_adapter_method(*Database::ADAPTERS)
461
-
462
- COLUMN_REF_RE1 = /\A((?:(?!__).)+)__((?:(?!___).)+)___(.+)\z/.freeze
463
- Sequel::Deprecation.deprecate_constant(self, :COLUMN_REF_RE1)
464
- COLUMN_REF_RE2 = /\A((?:(?!___).)+)___(.+)\z/.freeze
465
- Sequel::Deprecation.deprecate_constant(self, :COLUMN_REF_RE2)
466
- COLUMN_REF_RE3 = /\A((?:(?!__).)+)__(.+)\z/.freeze
467
- Sequel::Deprecation.deprecate_constant(self, :COLUMN_REF_RE3)
468
409
  end
@@ -8,35 +8,13 @@ module Sequel
8
8
  # ---------------------
9
9
 
10
10
  # Array of supported database adapters
11
- ADAPTERS = %w'ado amalgalite cubrid do ibmdb jdbc mock mysql mysql2 odbc oracle postgres sqlanywhere sqlite swift tinytds'.map(&:to_sym)
12
- # SEQUEL5: Remove cubrid do swift
13
-
14
- def self.single_threaded
15
- Sequel::Deprecation.deprecate("Sequel::Database.single_threaded", "Use Sequel.single_threaded instead")
16
- Sequel.single_threaded
17
- end
18
-
19
- def self.single_threaded=(v)
20
- Sequel::Deprecation.deprecate("Sequel::Database.single_threaded=", "Use Sequel.single_threaded= instead")
21
- Sequel.single_threaded = v
22
- end
11
+ ADAPTERS = %w'ado amalgalite ibmdb jdbc mock mysql mysql2 odbc oracle postgres sqlanywhere sqlite tinytds'.map(&:to_sym)
23
12
 
24
13
  # The Database subclass for the given adapter scheme.
25
14
  # Raises Sequel::AdapterNotFound if the adapter
26
15
  # could not be loaded.
27
16
  def self.adapter_class(scheme)
28
- return scheme if scheme.is_a?(Class)
29
-
30
- if scheme.to_s.include?('-')
31
- # :nocov:
32
- Sequel::Deprecation.deprecate("Automatically converting '-' to '_' in adapter schemes", "Use '_' instead of '-' in the adapter scheme")
33
- # :nocov:
34
- end
35
-
36
- scheme = scheme.to_s.gsub('-', '_').to_sym # SEQUEL5: Remove
37
- # scheme = scheme.to_sym # SEQUEL5
38
-
39
- load_adapter(scheme)
17
+ scheme.is_a?(Class) ? scheme : load_adapter(scheme.to_sym)
40
18
  end
41
19
 
42
20
  # Returns the scheme symbol for the Database class.
@@ -48,9 +26,8 @@ module Sequel
48
26
  def self.connect(conn_string, opts = OPTS)
49
27
  case conn_string
50
28
  when String
51
- # SEQUEL5: Remove do
52
- if match = /\A(jdbc|do):/.match(conn_string)
53
- c = adapter_class(match[1].to_sym)
29
+ if conn_string.start_with?('jdbc:')
30
+ c = adapter_class(:jdbc)
54
31
  opts = opts.merge(:orig_opts=>opts.dup)
55
32
  opts = {:uri=>conn_string}.merge!(opts)
56
33
  else
@@ -69,16 +46,16 @@ module Sequel
69
46
  else
70
47
  raise Error, "Sequel::Database.connect takes either a Hash or a String, given: #{conn_string.inspect}"
71
48
  end
72
- # process opts a bit
49
+
73
50
  opts = opts.inject({}) do |m, (k,v)|
74
51
  k = :user if k.to_s == 'username'
75
52
  m[k.to_sym] = v
76
53
  m
77
54
  end
55
+
78
56
  begin
79
57
  db = c.new(opts)
80
- # SEQUEL5: Default opts[:test] to true
81
- db.test_connection if opts[:test] && db.send(:typecast_value_boolean, opts[:test])
58
+ db.test_connection if db.send(:typecast_value_boolean, opts.fetch(:test, true))
82
59
  if block_given?
83
60
  return yield(db)
84
61
  end
@@ -155,7 +132,6 @@ module Sequel
155
132
  # end
156
133
  #
157
134
  # module DatabaseMethods
158
- # extend Sequel::Database::ResetIdentifierMangling
159
135
  # # ...
160
136
  # end
161
137
  #
@@ -181,27 +157,26 @@ module Sequel
181
157
  # +database_type+ (for native adapters), in others (i.e. adapters with
182
158
  # subadapters), it will be different.
183
159
  #
184
- # Sequel.connect('jdbc:postgres://...').adapter_scheme # => :jdbc
160
+ # Sequel.connect('jdbc:postgres://...').adapter_scheme
161
+ # # => :jdbc
185
162
  def adapter_scheme
186
163
  self.class.adapter_scheme
187
164
  end
188
165
 
189
166
  # Dynamically add new servers or modify server options at runtime. Also adds new
190
- # servers to the connection pool. Intended for use with master/slave or shard
191
- # configurations where it is useful to add new server hosts at runtime.
167
+ # servers to the connection pool. Only usable when using a sharded connection pool.
192
168
  #
193
169
  # servers argument should be a hash with server name symbol keys and hash or
194
170
  # proc values. If a servers key is already in use, it's value is overridden
195
171
  # with the value provided.
196
172
  #
197
- # DB.add_servers(:f=>{:host=>"hash_host_f"})
173
+ # DB.add_servers(f: {host: "hash_host_f"})
198
174
  def add_servers(servers)
199
- unless h = @opts[:servers]
200
- Sequel::Deprecation.deprecate("Calling Database#add_servers on a database that does not use sharding", "This method should only be called if the database supports sharding")
201
- # raise Error, "cannot call Database#add_servers on a Database instance that does not use a sharded connection pool" # SEQUEL5
202
- return
175
+ unless sharded?
176
+ raise Error, "cannot call Database#add_servers on a Database instance that does not use a sharded connection pool"
203
177
  end
204
178
 
179
+ h = @opts[:servers]
205
180
  Sequel.synchronize{h.merge!(servers)}
206
181
  @pool.add_servers(servers.keys)
207
182
  end
@@ -213,7 +188,8 @@ module Sequel
213
188
  # type. Even better, you can tell that two Database objects that are using
214
189
  # the same adapter are connecting to different database types.
215
190
  #
216
- # Sequel.connect('jdbc:postgres://...').database_type # => :postgres
191
+ # Sequel.connect('jdbc:postgres://...').database_type
192
+ # # => :postgres
217
193
  def database_type
218
194
  adapter_scheme
219
195
  end
@@ -226,8 +202,8 @@ module Sequel
226
202
  # Example:
227
203
  #
228
204
  # DB.disconnect # All servers
229
- # DB.disconnect(:server=>:server1) # Single server
230
- # DB.disconnect(:server=>[:server1, :server2]) # Multiple servers
205
+ # DB.disconnect(server: :server1) # Single server
206
+ # DB.disconnect(server: [:server1, :server2]) # Multiple servers
231
207
  def disconnect(opts = OPTS)
232
208
  pool.disconnect(opts)
233
209
  end
@@ -239,20 +215,8 @@ module Sequel
239
215
  conn.close
240
216
  end
241
217
 
242
- # Yield a new Database instance for every server in the connection pool.
243
- # Intended for use in sharded environments where there is a need to make schema
244
- # modifications (DDL queries) on each shard.
245
- #
246
- # DB.each_server{|db| db.create_table(:users){primary_key :id; String :name}}
247
- def each_server(&block)
248
- Sequel::Deprecation.deprecate("Database#each_server", "Switching to using Dataset#servers and Database#with_server from the server_block extension: \"DB.servers.each{|s| DB.with_server(s){}}\"")
249
- raise(Error, "Database#each_server must be passed a block") unless block
250
- servers.each{|s| self.class.connect(server_opts(s), &block)}
251
- end
252
-
253
- # Dynamically remove existing servers from the connection pool. Intended for
254
- # use with master/slave or shard configurations where it is useful to remove
255
- # existing server hosts at runtime.
218
+ # Dynamically remove existing servers from the connection pool. Only usable
219
+ # when using a sharded connection pool
256
220
  #
257
221
  # servers should be symbols or arrays of symbols. If a nonexistent server
258
222
  # is specified, it is ignored. If no servers have been specified for
@@ -261,12 +225,11 @@ module Sequel
261
225
  #
262
226
  # DB.remove_servers(:f1, :f2)
263
227
  def remove_servers(*servers)
264
- unless h = @opts[:servers]
265
- Sequel::Deprecation.deprecate("Calling Database#add_servers on a database that does not use sharding", "This method should only be called if the database supports sharding")
266
- # raise Error, "cannot call Database#remove_servers on a Database instance that does not use a sharded connection pool" # SEQUEL5
267
- return
228
+ unless sharded?
229
+ raise Error, "cannot call Database#remove_servers on a Database instance that does not use a sharded connection pool"
268
230
  end
269
231
 
232
+ h = @opts[:servers]
270
233
  servers.flatten.each{|s| Sequel.synchronize{h.delete(s)}}
271
234
  @pool.remove_servers(servers)
272
235
  end
@@ -53,18 +53,15 @@ module Sequel
53
53
  end
54
54
 
55
55
  # Returns a new dataset with the +from+ method invoked. If a block is given,
56
- # it is used as a filter on the dataset.
56
+ # it acts as a virtual row block
57
57
  #
58
58
  # DB.from(:items) # SELECT * FROM items
59
- # DB.from(:items){id > 2} # SELECT * FROM items WHERE (id > 2)
59
+ # DB.from{schema[:table]} # SELECT * FROM schema.table
60
60
  def from(*args, &block)
61
61
  if block
62
- Sequel::Deprecation.deprecate("Sequel::Database#from with a block", "Use .from(*args).where(&block) instead")
63
- @default_dataset.from(*args).where(&block)
64
- #SEQUEL5
65
- # @default_dataset.from(*args, &block)
66
- #elsif args.length == 1 && (table = args[0]).is_a?(Symbol)
67
- # @default_dataset.send(:cached_dataset, :"_from_#{table}_ds"){@default_dataset.from(table)}
62
+ @default_dataset.from(*args, &block)
63
+ elsif args.length == 1 && (table = args[0]).is_a?(Symbol)
64
+ @default_dataset.send(:cached_dataset, :"_from_#{table}_ds"){@default_dataset.from(table)}
68
65
  else
69
66
  @default_dataset.from(*args)
70
67
  end
@@ -73,7 +70,7 @@ module Sequel
73
70
  # Returns a new dataset with the select method invoked.
74
71
  #
75
72
  # DB.select(1) # SELECT 1
76
- # DB.select{server_version{}} # SELECT server_version()
73
+ # DB.select{server_version.function} # SELECT server_version()
77
74
  # DB.select(:id).from(:items) # SELECT id FROM items
78
75
  def select(*args, &block)
79
76
  @default_dataset.select(*args, &block)
@@ -7,42 +7,6 @@ module Sequel
7
7
  # This methods change the default behavior of this database's datasets.
8
8
  # ---------------------
9
9
 
10
- # The default class to use for datasets
11
- DatasetClass = Sequel::Dataset
12
- Sequel::Deprecation.deprecate_constant(self, :DatasetClass)
13
-
14
- # SEQUEL5: Remove
15
- @identifier_input_method = nil
16
- @identifier_output_method = nil
17
- @quote_identifiers = nil
18
- class << self
19
- # The identifier input method to use by default for all databases (default: adapter default)
20
- attr_reader :identifier_input_method
21
-
22
- # The identifier output method to use by default for all databases (default: adapter default)
23
- attr_reader :identifier_output_method
24
-
25
- # Whether to quote identifiers (columns and tables) by default for all databases (default: adapter default)
26
- attr_reader :quote_identifiers
27
- end
28
-
29
- # Change the default identifier input method to use for all databases,
30
- def self.identifier_input_method=(v)
31
- Sequel::Deprecation.deprecate("Sequel.identifier_input_method= and Sequel::Database.identifier_input_method=", "Call Sequel::Database#identifier_input_method= instead")
32
- @identifier_input_method = v.nil? ? false : v
33
- end
34
-
35
- # Change the default identifier output method to use for all databases,
36
- def self.identifier_output_method=(v)
37
- Sequel::Deprecation.deprecate("Sequel.identifier_output_method= and Sequel::Database.identifier_output_method=", "Call Sequel::Database#identifier_output_method= instead")
38
- @identifier_output_method = v.nil? ? false : v
39
- end
40
-
41
- def self.quote_identifiers=(v)
42
- Sequel::Deprecation.deprecate("Sequel.quote_identifiers= and Sequel::Database.quote_identifiers=", "Call Sequel::Database#quote_identifiers= instead")
43
- @quote_identifiers = v
44
- end
45
-
46
10
  # The class to use for creating datasets. Should respond to
47
11
  # new with the Database argument as the first argument, and
48
12
  # an optional options hash.
@@ -74,7 +38,7 @@ module Sequel
74
38
  #
75
39
  # Examples:
76
40
  #
77
- # # Introspec columns for all of DB's datasets
41
+ # # Introspect columns for all of DB's datasets
78
42
  # DB.extend_datasets(Sequel::ColumnsIntrospection)
79
43
  #
80
44
  # # Trace all SELECT queries by printing the SQL and the full backtrace
@@ -112,24 +76,16 @@ module Sequel
112
76
 
113
77
  # The default dataset class to use for the database
114
78
  def dataset_class_default
115
- if self.class == Sequel::Database
116
- Sequel::Dataset
117
- else
118
- Sequel::Deprecation.deprecate("Using self.class.const_get(:DatasetClass) to get the default dataset class", "Modify the database adapter to implement Database#dataset_class_default")
119
- self.class.const_get(:DatasetClass)
120
- end
79
+ Sequel::Dataset
121
80
  end
122
81
 
123
- # Reset the default dataset used by most Database methods that
124
- # create datasets. Usually done after changes to the identifier
125
- # mangling methods.
82
+ # Reset the default dataset used by most Database methods that create datasets.
126
83
  def reset_default_dataset
127
84
  Sequel.synchronize{@symbol_literal_cache.clear}
128
85
  @default_dataset = dataset
129
86
  end
130
87
 
131
- # Whether to quote identifiers by default for this database, true
132
- # by default.
88
+ # Whether to quote identifiers by default for this database, true by default.
133
89
  def quote_identifiers_default
134
90
  true
135
91
  end
@@ -8,7 +8,7 @@ module Sequel
8
8
  # database supprots a given feature.
9
9
  # ---------------------
10
10
 
11
- # Whether the database uses a global namespace for the index. If
11
+ # Whether the database uses a global namespace for the index, true by default. If
12
12
  # false, the indexes are going to be namespaced per table.
13
13
  def global_index_namespace?
14
14
  true
@@ -33,7 +33,7 @@ module Sequel
33
33
  end
34
34
 
35
35
  # Whether the database supports DROP TABLE IF EXISTS syntax,
36
- # default is the same as #supports_create_table_if_not_exists?.
36
+ # false by default.
37
37
  def supports_drop_table_if_exists?
38
38
  supports_create_table_if_not_exists?
39
39
  end
@@ -49,7 +49,8 @@ module Sequel
49
49
  respond_to?(:indexes)
50
50
  end
51
51
 
52
- # Whether the database supports partial indexes (indexes on a subset of a table).
52
+ # Whether the database supports partial indexes (indexes on a subset of a table),
53
+ # false by default.
53
54
  def supports_partial_indexes?
54
55
  false
55
56
  end
@@ -66,7 +67,7 @@ module Sequel
66
67
  end
67
68
 
68
69
  # Whether the database and adapter support savepoints inside prepared transactions
69
- # (two-phase commit), default is false.
70
+ # (two-phase commit), false by default.
70
71
  def supports_savepoints_in_prepared_transactions?
71
72
  supports_prepared_transactions? && supports_savepoints?
72
73
  end
@@ -32,13 +32,6 @@ module Sequel
32
32
  log_each(:info, args ? "#{message}; #{args.inspect}" : message)
33
33
  end
34
34
 
35
- # Yield to the block, logging any errors at error level to all loggers,
36
- # and all other queries with the duration at warn or info level.
37
- def log_yield(sql, args=nil, &block)
38
- Sequel::Deprecation.deprecate("Sequel::Database#log_yield", "Update the adapter to use Sequel::Database#log_connection_yield")
39
- log_connection_yield(sql, nil, args, &block)
40
- end
41
-
42
35
  # Yield to the block, logging any errors at error level to all loggers,
43
36
  # and all other queries with the duration at warn or info level.
44
37
  def log_connection_yield(sql, conn, args=nil)
@@ -73,7 +66,7 @@ module Sequel
73
66
  # Log the given SQL and then execute it on the connection, used by
74
67
  # the transaction code.
75
68
  def log_connection_execute(conn, sql)
76
- log_connection_yield(sql, conn){conn.send(connection_execute_method, sql)}
69
+ log_connection_yield(sql, conn){conn.public_send(connection_execute_method, sql)}
77
70
  end
78
71
 
79
72
  # Log message with message prefixed by duration at info level, or
@@ -85,7 +78,7 @@ module Sequel
85
78
  # Log message at level (which should be :error, :warn, or :info)
86
79
  # to all loggers.
87
80
  def log_each(level, message)
88
- @loggers.each{|logger| logger.send(level, message)}
81
+ @loggers.each{|logger| logger.public_send(level, message)}
89
82
  end
90
83
  end
91
84
  end