sequel 4.49.0 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (477) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +70 -0
  3. data/README.rdoc +195 -136
  4. data/Rakefile +26 -42
  5. data/bin/sequel +3 -5
  6. data/doc/advanced_associations.rdoc +86 -163
  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/schema_modification.rdoc +63 -60
  29. data/doc/security.rdoc +97 -88
  30. data/doc/sharding.rdoc +43 -30
  31. data/doc/sql.rdoc +53 -65
  32. data/doc/testing.rdoc +3 -5
  33. data/doc/thread_safety.rdoc +2 -4
  34. data/doc/transactions.rdoc +18 -17
  35. data/doc/validations.rdoc +48 -45
  36. data/doc/virtual_rows.rdoc +87 -115
  37. data/lib/sequel.rb +1 -1
  38. data/lib/sequel/adapters/ado.rb +9 -25
  39. data/lib/sequel/adapters/ado/access.rb +7 -13
  40. data/lib/sequel/adapters/ado/mssql.rb +2 -9
  41. data/lib/sequel/adapters/amalgalite.rb +3 -18
  42. data/lib/sequel/adapters/ibmdb.rb +9 -45
  43. data/lib/sequel/adapters/jdbc.rb +13 -73
  44. data/lib/sequel/adapters/jdbc/db2.rb +8 -37
  45. data/lib/sequel/adapters/jdbc/derby.rb +4 -50
  46. data/lib/sequel/adapters/jdbc/h2.rb +4 -25
  47. data/lib/sequel/adapters/jdbc/hsqldb.rb +1 -26
  48. data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
  49. data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
  50. data/lib/sequel/adapters/jdbc/mysql.rb +1 -15
  51. data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
  52. data/lib/sequel/adapters/jdbc/postgresql.rb +2 -31
  53. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
  54. data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
  55. data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
  56. data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
  57. data/lib/sequel/adapters/mock.rb +4 -30
  58. data/lib/sequel/adapters/mysql.rb +7 -44
  59. data/lib/sequel/adapters/mysql2.rb +5 -23
  60. data/lib/sequel/adapters/odbc.rb +0 -19
  61. data/lib/sequel/adapters/odbc/db2.rb +1 -1
  62. data/lib/sequel/adapters/odbc/mssql.rb +4 -12
  63. data/lib/sequel/adapters/odbc/oracle.rb +1 -1
  64. data/lib/sequel/adapters/oracle.rb +7 -13
  65. data/lib/sequel/adapters/postgres.rb +13 -57
  66. data/lib/sequel/adapters/postgresql.rb +1 -1
  67. data/lib/sequel/adapters/shared/access.rb +11 -51
  68. data/lib/sequel/adapters/shared/db2.rb +3 -61
  69. data/lib/sequel/adapters/shared/mssql.rb +21 -157
  70. data/lib/sequel/adapters/shared/mysql.rb +23 -224
  71. data/lib/sequel/adapters/shared/oracle.rb +13 -41
  72. data/lib/sequel/adapters/shared/postgres.rb +44 -259
  73. data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
  74. data/lib/sequel/adapters/shared/sqlite.rb +12 -101
  75. data/lib/sequel/adapters/sqlanywhere.rb +4 -23
  76. data/lib/sequel/adapters/sqlite.rb +2 -19
  77. data/lib/sequel/adapters/tinytds.rb +5 -15
  78. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
  79. data/lib/sequel/adapters/utils/mysql_mysql2.rb +2 -4
  80. data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
  81. data/lib/sequel/adapters/utils/replace.rb +0 -5
  82. data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
  83. data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
  84. data/lib/sequel/ast_transformer.rb +3 -94
  85. data/lib/sequel/connection_pool.rb +26 -28
  86. data/lib/sequel/connection_pool/sharded_single.rb +1 -4
  87. data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
  88. data/lib/sequel/connection_pool/single.rb +0 -2
  89. data/lib/sequel/connection_pool/threaded.rb +94 -110
  90. data/lib/sequel/core.rb +42 -101
  91. data/lib/sequel/database.rb +12 -2
  92. data/lib/sequel/database/connecting.rb +23 -60
  93. data/lib/sequel/database/dataset.rb +6 -9
  94. data/lib/sequel/database/dataset_defaults.rb +4 -48
  95. data/lib/sequel/database/features.rb +5 -4
  96. data/lib/sequel/database/logging.rb +2 -9
  97. data/lib/sequel/database/misc.rb +23 -55
  98. data/lib/sequel/database/query.rb +8 -13
  99. data/lib/sequel/database/schema_generator.rb +89 -64
  100. data/lib/sequel/database/schema_methods.rb +61 -79
  101. data/lib/sequel/database/transactions.rb +4 -24
  102. data/lib/sequel/dataset.rb +18 -10
  103. data/lib/sequel/dataset/actions.rb +53 -107
  104. data/lib/sequel/dataset/dataset_module.rb +3 -15
  105. data/lib/sequel/dataset/features.rb +30 -30
  106. data/lib/sequel/dataset/graph.rb +40 -49
  107. data/lib/sequel/dataset/misc.rb +12 -37
  108. data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
  109. data/lib/sequel/dataset/prepared_statements.rb +23 -51
  110. data/lib/sequel/dataset/query.rb +71 -155
  111. data/lib/sequel/dataset/sql.rb +30 -225
  112. data/lib/sequel/deprecated.rb +18 -27
  113. data/lib/sequel/exceptions.rb +1 -17
  114. data/lib/sequel/extensions/_model_pg_row.rb +0 -7
  115. data/lib/sequel/extensions/_pretty_table.rb +1 -3
  116. data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
  117. data/lib/sequel/extensions/connection_expiration.rb +1 -1
  118. data/lib/sequel/extensions/connection_validator.rb +1 -1
  119. data/lib/sequel/extensions/constraint_validations.rb +11 -11
  120. data/lib/sequel/extensions/core_extensions.rb +39 -49
  121. data/lib/sequel/extensions/core_refinements.rb +39 -45
  122. data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
  123. data/lib/sequel/extensions/date_arithmetic.rb +7 -7
  124. data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
  125. data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
  126. data/lib/sequel/extensions/eval_inspect.rb +4 -11
  127. data/lib/sequel/extensions/freeze_datasets.rb +1 -69
  128. data/lib/sequel/extensions/from_block.rb +1 -35
  129. data/lib/sequel/extensions/graph_each.rb +2 -2
  130. data/lib/sequel/extensions/identifier_mangling.rb +9 -19
  131. data/lib/sequel/extensions/implicit_subquery.rb +2 -2
  132. data/lib/sequel/extensions/inflector.rb +4 -4
  133. data/lib/sequel/extensions/migration.rb +23 -40
  134. data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
  135. data/lib/sequel/extensions/null_dataset.rb +2 -8
  136. data/lib/sequel/extensions/pagination.rb +1 -17
  137. data/lib/sequel/extensions/pg_array.rb +20 -189
  138. data/lib/sequel/extensions/pg_hstore.rb +11 -50
  139. data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
  140. data/lib/sequel/extensions/pg_inet.rb +2 -15
  141. data/lib/sequel/extensions/pg_interval.rb +1 -20
  142. data/lib/sequel/extensions/pg_json.rb +7 -27
  143. data/lib/sequel/extensions/pg_loose_count.rb +1 -1
  144. data/lib/sequel/extensions/pg_range.rb +6 -121
  145. data/lib/sequel/extensions/pg_range_ops.rb +1 -3
  146. data/lib/sequel/extensions/pg_row.rb +5 -77
  147. data/lib/sequel/extensions/pg_row_ops.rb +2 -13
  148. data/lib/sequel/extensions/query.rb +3 -4
  149. data/lib/sequel/extensions/round_timestamps.rb +0 -6
  150. data/lib/sequel/extensions/schema_dumper.rb +13 -13
  151. data/lib/sequel/extensions/select_remove.rb +3 -3
  152. data/lib/sequel/extensions/split_array_nil.rb +2 -2
  153. data/lib/sequel/extensions/sql_comments.rb +2 -2
  154. data/lib/sequel/extensions/string_agg.rb +11 -8
  155. data/lib/sequel/extensions/symbol_aref.rb +6 -20
  156. data/lib/sequel/model.rb +27 -62
  157. data/lib/sequel/model/associations.rb +128 -131
  158. data/lib/sequel/model/base.rb +171 -711
  159. data/lib/sequel/model/default_inflections.rb +1 -1
  160. data/lib/sequel/model/errors.rb +0 -3
  161. data/lib/sequel/model/exceptions.rb +2 -6
  162. data/lib/sequel/model/inflections.rb +1 -26
  163. data/lib/sequel/model/plugins.rb +1 -0
  164. data/lib/sequel/plugins/active_model.rb +2 -5
  165. data/lib/sequel/plugins/association_dependencies.rb +15 -15
  166. data/lib/sequel/plugins/association_pks.rb +14 -28
  167. data/lib/sequel/plugins/association_proxies.rb +6 -7
  168. data/lib/sequel/plugins/auto_validations.rb +4 -4
  169. data/lib/sequel/plugins/before_after_save.rb +0 -43
  170. data/lib/sequel/plugins/blacklist_security.rb +9 -8
  171. data/lib/sequel/plugins/boolean_readers.rb +3 -3
  172. data/lib/sequel/plugins/boolean_subsets.rb +2 -2
  173. data/lib/sequel/plugins/caching.rb +5 -5
  174. data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
  175. data/lib/sequel/plugins/column_conflicts.rb +2 -2
  176. data/lib/sequel/plugins/column_select.rb +2 -2
  177. data/lib/sequel/plugins/composition.rb +15 -24
  178. data/lib/sequel/plugins/constraint_validations.rb +4 -3
  179. data/lib/sequel/plugins/csv_serializer.rb +13 -20
  180. data/lib/sequel/plugins/dataset_associations.rb +2 -2
  181. data/lib/sequel/plugins/def_dataset_method.rb +5 -5
  182. data/lib/sequel/plugins/defaults_setter.rb +1 -1
  183. data/lib/sequel/plugins/delay_add_association.rb +1 -1
  184. data/lib/sequel/plugins/finder.rb +16 -10
  185. data/lib/sequel/plugins/force_encoding.rb +1 -7
  186. data/lib/sequel/plugins/hook_class_methods.rb +4 -106
  187. data/lib/sequel/plugins/input_transformer.rb +10 -11
  188. data/lib/sequel/plugins/insert_returning_select.rb +1 -9
  189. data/lib/sequel/plugins/instance_filters.rb +5 -5
  190. data/lib/sequel/plugins/instance_hooks.rb +7 -52
  191. data/lib/sequel/plugins/inverted_subsets.rb +3 -1
  192. data/lib/sequel/plugins/json_serializer.rb +19 -19
  193. data/lib/sequel/plugins/lazy_attributes.rb +1 -10
  194. data/lib/sequel/plugins/list.rb +6 -6
  195. data/lib/sequel/plugins/many_through_many.rb +11 -8
  196. data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
  197. data/lib/sequel/plugins/nested_attributes.rb +18 -31
  198. data/lib/sequel/plugins/optimistic_locking.rb +3 -3
  199. data/lib/sequel/plugins/pg_array_associations.rb +8 -2
  200. data/lib/sequel/plugins/pg_row.rb +2 -11
  201. data/lib/sequel/plugins/prepared_statements.rb +13 -66
  202. data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
  203. data/lib/sequel/plugins/rcte_tree.rb +7 -7
  204. data/lib/sequel/plugins/serialization.rb +15 -33
  205. data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
  206. data/lib/sequel/plugins/sharding.rb +2 -8
  207. data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
  208. data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
  209. data/lib/sequel/plugins/static_cache.rb +8 -9
  210. data/lib/sequel/plugins/string_stripper.rb +3 -3
  211. data/lib/sequel/plugins/subclasses.rb +1 -1
  212. data/lib/sequel/plugins/subset_conditions.rb +2 -2
  213. data/lib/sequel/plugins/table_select.rb +2 -2
  214. data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
  215. data/lib/sequel/plugins/timestamps.rb +6 -7
  216. data/lib/sequel/plugins/touch.rb +4 -8
  217. data/lib/sequel/plugins/tree.rb +3 -3
  218. data/lib/sequel/plugins/typecast_on_load.rb +2 -2
  219. data/lib/sequel/plugins/unlimited_update.rb +1 -7
  220. data/lib/sequel/plugins/update_or_create.rb +3 -3
  221. data/lib/sequel/plugins/update_refresh.rb +3 -3
  222. data/lib/sequel/plugins/uuid.rb +7 -11
  223. data/lib/sequel/plugins/validation_class_methods.rb +10 -9
  224. data/lib/sequel/plugins/validation_contexts.rb +4 -4
  225. data/lib/sequel/plugins/validation_helpers.rb +26 -25
  226. data/lib/sequel/plugins/whitelist_security.rb +13 -9
  227. data/lib/sequel/plugins/xml_serializer.rb +24 -25
  228. data/lib/sequel/sql.rb +145 -276
  229. data/lib/sequel/timezones.rb +8 -22
  230. data/lib/sequel/version.rb +2 -2
  231. data/spec/adapter_spec.rb +1 -1
  232. data/spec/adapters/db2_spec.rb +2 -103
  233. data/spec/adapters/mssql_spec.rb +89 -68
  234. data/spec/adapters/mysql_spec.rb +101 -480
  235. data/spec/adapters/oracle_spec.rb +1 -9
  236. data/spec/adapters/postgres_spec.rb +312 -565
  237. data/spec/adapters/spec_helper.rb +12 -31
  238. data/spec/adapters/sqlanywhere_spec.rb +2 -77
  239. data/spec/adapters/sqlite_spec.rb +8 -146
  240. data/spec/bin_spec.rb +11 -16
  241. data/spec/core/connection_pool_spec.rb +173 -74
  242. data/spec/core/database_spec.rb +64 -244
  243. data/spec/core/dataset_spec.rb +81 -415
  244. data/spec/core/deprecated_spec.rb +3 -3
  245. data/spec/core/expression_filters_spec.rb +37 -144
  246. data/spec/core/mock_adapter_spec.rb +176 -4
  247. data/spec/core/object_graph_spec.rb +11 -60
  248. data/spec/core/placeholder_literalizer_spec.rb +1 -14
  249. data/spec/core/schema_generator_spec.rb +51 -40
  250. data/spec/core/schema_spec.rb +74 -77
  251. data/spec/core/spec_helper.rb +6 -24
  252. data/spec/core/version_spec.rb +1 -1
  253. data/spec/core_extensions_spec.rb +7 -83
  254. data/spec/core_model_spec.rb +2 -2
  255. data/spec/deprecation_helper.rb +2 -14
  256. data/spec/extensions/accessed_columns_spec.rb +1 -1
  257. data/spec/extensions/active_model_spec.rb +3 -3
  258. data/spec/extensions/after_initialize_spec.rb +1 -1
  259. data/spec/extensions/arbitrary_servers_spec.rb +2 -2
  260. data/spec/extensions/association_dependencies_spec.rb +1 -1
  261. data/spec/extensions/association_pks_spec.rb +4 -59
  262. data/spec/extensions/association_proxies_spec.rb +1 -1
  263. data/spec/extensions/auto_literal_strings_spec.rb +1 -12
  264. data/spec/extensions/auto_validations_spec.rb +1 -1
  265. data/spec/extensions/blacklist_security_spec.rb +1 -1
  266. data/spec/extensions/blank_spec.rb +1 -1
  267. data/spec/extensions/boolean_readers_spec.rb +1 -1
  268. data/spec/extensions/boolean_subsets_spec.rb +1 -1
  269. data/spec/extensions/caching_spec.rb +1 -1
  270. data/spec/extensions/class_table_inheritance_spec.rb +35 -1086
  271. data/spec/extensions/column_conflicts_spec.rb +1 -1
  272. data/spec/extensions/column_select_spec.rb +4 -4
  273. data/spec/extensions/columns_introspection_spec.rb +1 -1
  274. data/spec/extensions/columns_updated_spec.rb +1 -1
  275. data/spec/extensions/composition_spec.rb +1 -7
  276. data/spec/extensions/connection_expiration_spec.rb +3 -3
  277. data/spec/extensions/connection_validator_spec.rb +3 -3
  278. data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
  279. data/spec/extensions/constraint_validations_spec.rb +1 -1
  280. data/spec/extensions/core_refinements_spec.rb +1 -3
  281. data/spec/extensions/csv_serializer_spec.rb +4 -9
  282. data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
  283. data/spec/extensions/dataset_associations_spec.rb +2 -1
  284. data/spec/extensions/dataset_source_alias_spec.rb +1 -1
  285. data/spec/extensions/date_arithmetic_spec.rb +3 -3
  286. data/spec/extensions/def_dataset_method_spec.rb +1 -1
  287. data/spec/extensions/defaults_setter_spec.rb +2 -2
  288. data/spec/extensions/delay_add_association_spec.rb +8 -9
  289. data/spec/extensions/dirty_spec.rb +1 -1
  290. data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
  291. data/spec/extensions/eager_each_spec.rb +2 -2
  292. data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
  293. data/spec/extensions/error_splitter_spec.rb +1 -1
  294. data/spec/extensions/error_sql_spec.rb +1 -1
  295. data/spec/extensions/eval_inspect_spec.rb +1 -1
  296. data/spec/extensions/finder_spec.rb +1 -1
  297. data/spec/extensions/force_encoding_spec.rb +2 -5
  298. data/spec/extensions/freeze_datasets_spec.rb +1 -1
  299. data/spec/extensions/graph_each_spec.rb +5 -5
  300. data/spec/extensions/hook_class_methods_spec.rb +1 -194
  301. data/spec/extensions/identifier_mangling_spec.rb +17 -170
  302. data/spec/extensions/implicit_subquery_spec.rb +1 -5
  303. data/spec/extensions/inflector_spec.rb +1 -1
  304. data/spec/extensions/input_transformer_spec.rb +7 -2
  305. data/spec/extensions/insert_returning_select_spec.rb +1 -1
  306. data/spec/extensions/instance_filters_spec.rb +1 -1
  307. data/spec/extensions/instance_hooks_spec.rb +1 -95
  308. data/spec/extensions/inverted_subsets_spec.rb +1 -1
  309. data/spec/extensions/json_serializer_spec.rb +1 -1
  310. data/spec/extensions/lazy_attributes_spec.rb +1 -7
  311. data/spec/extensions/list_spec.rb +1 -1
  312. data/spec/extensions/looser_typecasting_spec.rb +1 -1
  313. data/spec/extensions/many_through_many_spec.rb +1 -1
  314. data/spec/extensions/migration_spec.rb +2 -2
  315. data/spec/extensions/modification_detection_spec.rb +1 -1
  316. data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
  317. data/spec/extensions/named_timezones_spec.rb +3 -3
  318. data/spec/extensions/nested_attributes_spec.rb +1 -29
  319. data/spec/extensions/null_dataset_spec.rb +1 -11
  320. data/spec/extensions/optimistic_locking_spec.rb +1 -1
  321. data/spec/extensions/pagination_spec.rb +1 -1
  322. data/spec/extensions/pg_array_associations_spec.rb +4 -1
  323. data/spec/extensions/pg_array_ops_spec.rb +1 -1
  324. data/spec/extensions/pg_array_spec.rb +3 -48
  325. data/spec/extensions/pg_enum_spec.rb +1 -1
  326. data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
  327. data/spec/extensions/pg_hstore_spec.rb +23 -32
  328. data/spec/extensions/pg_inet_ops_spec.rb +1 -1
  329. data/spec/extensions/pg_inet_spec.rb +1 -14
  330. data/spec/extensions/pg_interval_spec.rb +3 -13
  331. data/spec/extensions/pg_json_ops_spec.rb +1 -1
  332. data/spec/extensions/pg_json_spec.rb +1 -13
  333. data/spec/extensions/pg_loose_count_spec.rb +1 -1
  334. data/spec/extensions/pg_range_ops_spec.rb +1 -1
  335. data/spec/extensions/pg_range_spec.rb +3 -88
  336. data/spec/extensions/pg_row_ops_spec.rb +1 -1
  337. data/spec/extensions/pg_row_plugin_spec.rb +1 -1
  338. data/spec/extensions/pg_row_spec.rb +1 -44
  339. data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
  340. data/spec/extensions/prepared_statements_safe_spec.rb +1 -1
  341. data/spec/extensions/prepared_statements_spec.rb +13 -48
  342. data/spec/extensions/pretty_table_spec.rb +1 -1
  343. data/spec/extensions/query_spec.rb +1 -12
  344. data/spec/extensions/rcte_tree_spec.rb +1 -1
  345. data/spec/extensions/round_timestamps_spec.rb +1 -5
  346. data/spec/extensions/s_spec.rb +1 -1
  347. data/spec/extensions/schema_caching_spec.rb +1 -1
  348. data/spec/extensions/schema_dumper_spec.rb +1 -1
  349. data/spec/extensions/select_remove_spec.rb +1 -1
  350. data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
  351. data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
  352. data/spec/extensions/serialization_spec.rb +2 -14
  353. data/spec/extensions/server_block_spec.rb +1 -1
  354. data/spec/extensions/server_logging_spec.rb +2 -2
  355. data/spec/extensions/sharding_spec.rb +1 -1
  356. data/spec/extensions/shared_caching_spec.rb +1 -28
  357. data/spec/extensions/single_table_inheritance_spec.rb +2 -5
  358. data/spec/extensions/singular_table_names_spec.rb +1 -1
  359. data/spec/extensions/skip_create_refresh_spec.rb +1 -1
  360. data/spec/extensions/spec_helper.rb +5 -27
  361. data/spec/extensions/split_array_nil_spec.rb +1 -1
  362. data/spec/extensions/split_values_spec.rb +1 -1
  363. data/spec/extensions/sql_comments_spec.rb +1 -1
  364. data/spec/extensions/sql_expr_spec.rb +1 -1
  365. data/spec/extensions/static_cache_spec.rb +1 -1
  366. data/spec/extensions/string_agg_spec.rb +2 -2
  367. data/spec/extensions/string_date_time_spec.rb +1 -1
  368. data/spec/extensions/string_stripper_spec.rb +1 -1
  369. data/spec/extensions/subclasses_spec.rb +1 -1
  370. data/spec/extensions/subset_conditions_spec.rb +1 -1
  371. data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
  372. data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
  373. data/spec/extensions/table_select_spec.rb +4 -4
  374. data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
  375. data/spec/extensions/thread_local_timezones_spec.rb +1 -1
  376. data/spec/extensions/timestamps_spec.rb +3 -3
  377. data/spec/extensions/to_dot_spec.rb +1 -1
  378. data/spec/extensions/touch_spec.rb +1 -1
  379. data/spec/extensions/tree_spec.rb +1 -1
  380. data/spec/extensions/typecast_on_load_spec.rb +1 -1
  381. data/spec/extensions/unlimited_update_spec.rb +1 -1
  382. data/spec/extensions/update_or_create_spec.rb +1 -1
  383. data/spec/extensions/update_primary_key_spec.rb +4 -3
  384. data/spec/extensions/update_refresh_spec.rb +1 -1
  385. data/spec/extensions/uuid_spec.rb +10 -12
  386. data/spec/extensions/validate_associated_spec.rb +1 -1
  387. data/spec/extensions/validation_class_methods_spec.rb +3 -3
  388. data/spec/extensions/validation_contexts_spec.rb +1 -1
  389. data/spec/extensions/validation_helpers_spec.rb +10 -44
  390. data/spec/extensions/whitelist_security_spec.rb +5 -5
  391. data/spec/extensions/xml_serializer_spec.rb +3 -3
  392. data/spec/guards_helper.rb +2 -1
  393. data/spec/integration/associations_test.rb +1 -23
  394. data/spec/integration/database_test.rb +7 -7
  395. data/spec/integration/dataset_test.rb +5 -47
  396. data/spec/integration/eager_loader_test.rb +1 -1
  397. data/spec/integration/migrator_test.rb +1 -1
  398. data/spec/integration/model_test.rb +4 -82
  399. data/spec/integration/plugin_test.rb +6 -22
  400. data/spec/integration/prepared_statement_test.rb +8 -88
  401. data/spec/integration/schema_test.rb +6 -6
  402. data/spec/integration/spec_helper.rb +13 -21
  403. data/spec/integration/timezone_test.rb +5 -5
  404. data/spec/integration/transaction_test.rb +3 -55
  405. data/spec/integration/type_test.rb +9 -9
  406. data/spec/model/association_reflection_spec.rb +24 -9
  407. data/spec/model/associations_spec.rb +124 -303
  408. data/spec/model/base_spec.rb +18 -137
  409. data/spec/model/class_dataset_methods_spec.rb +2 -20
  410. data/spec/model/dataset_methods_spec.rb +1 -20
  411. data/spec/model/eager_loading_spec.rb +17 -11
  412. data/spec/model/hooks_spec.rb +5 -300
  413. data/spec/model/inflector_spec.rb +1 -1
  414. data/spec/model/model_spec.rb +15 -320
  415. data/spec/model/plugins_spec.rb +2 -16
  416. data/spec/model/record_spec.rb +29 -121
  417. data/spec/model/spec_helper.rb +5 -15
  418. data/spec/model/validations_spec.rb +1 -1
  419. data/spec/sequel_warning.rb +1 -12
  420. metadata +8 -64
  421. data/doc/active_record.rdoc +0 -927
  422. data/lib/sequel/adapters/cubrid.rb +0 -160
  423. data/lib/sequel/adapters/do.rb +0 -166
  424. data/lib/sequel/adapters/do/mysql.rb +0 -69
  425. data/lib/sequel/adapters/do/postgres.rb +0 -46
  426. data/lib/sequel/adapters/do/sqlite3.rb +0 -41
  427. data/lib/sequel/adapters/jdbc/as400.rb +0 -92
  428. data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
  429. data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
  430. data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
  431. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
  432. data/lib/sequel/adapters/odbc/progress.rb +0 -12
  433. data/lib/sequel/adapters/shared/cubrid.rb +0 -245
  434. data/lib/sequel/adapters/shared/firebird.rb +0 -261
  435. data/lib/sequel/adapters/shared/informix.rb +0 -63
  436. data/lib/sequel/adapters/shared/progress.rb +0 -40
  437. data/lib/sequel/adapters/swift.rb +0 -169
  438. data/lib/sequel/adapters/swift/mysql.rb +0 -50
  439. data/lib/sequel/adapters/swift/postgres.rb +0 -49
  440. data/lib/sequel/adapters/swift/sqlite.rb +0 -48
  441. data/lib/sequel/adapters/utils/pg_types.rb +0 -4
  442. data/lib/sequel/dataset/mutation.rb +0 -98
  443. data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
  444. data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
  445. data/lib/sequel/extensions/filter_having.rb +0 -65
  446. data/lib/sequel/extensions/hash_aliases.rb +0 -51
  447. data/lib/sequel/extensions/meta_def.rb +0 -37
  448. data/lib/sequel/extensions/query_literals.rb +0 -86
  449. data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
  450. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
  451. data/lib/sequel/extensions/set_overrides.rb +0 -82
  452. data/lib/sequel/no_core_ext.rb +0 -4
  453. data/lib/sequel/plugins/association_autoreloading.rb +0 -11
  454. data/lib/sequel/plugins/identifier_columns.rb +0 -49
  455. data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
  456. data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
  457. data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
  458. data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
  459. data/lib/sequel/plugins/schema.rb +0 -84
  460. data/lib/sequel/plugins/scissors.rb +0 -37
  461. data/spec/core/dataset_mutation_spec.rb +0 -253
  462. data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
  463. data/spec/extensions/before_after_save_spec.rb +0 -40
  464. data/spec/extensions/filter_having_spec.rb +0 -42
  465. data/spec/extensions/from_block_spec.rb +0 -21
  466. data/spec/extensions/hash_aliases_spec.rb +0 -26
  467. data/spec/extensions/identifier_columns_spec.rb +0 -19
  468. data/spec/extensions/meta_def_spec.rb +0 -35
  469. data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
  470. data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
  471. data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
  472. data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
  473. data/spec/extensions/query_literals_spec.rb +0 -185
  474. data/spec/extensions/schema_spec.rb +0 -123
  475. data/spec/extensions/scissors_spec.rb +0 -27
  476. data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
  477. data/spec/extensions/set_overrides_spec.rb +0 -75
@@ -6,13 +6,12 @@ Sequel objects by calling #new on the object's class (other than Sequel::Model
6
6
  instances). However, just as almost everything in ruby is an object, all
7
7
  the methods you call in Sequel deal with objects behind the scenes.
8
8
 
9
- There are five main types of Sequel-specific objects that you deal with in
10
- Sequel:
9
+ In addition to the standard ruby types, there are four main types of
10
+ Sequel-specific objects that you deal when programming with Sequel:
11
11
 
12
12
  * Sequel::Database
13
13
  * Sequel::Dataset
14
14
  * Sequel::Model
15
- * Standard Ruby Types
16
15
  * Sequel::SQL::Expression (and subclasses)
17
16
 
18
17
  == Sequel::Database
@@ -47,27 +46,27 @@ and literalize the object to an SQL string fragment:
47
46
 
48
47
  == Sequel::Dataset
49
48
 
50
- Sequel::Dataset objects represent SQL queries, or more generally, they represent
51
- abstract collections of rows in the database. They are usually created from
49
+ Sequel::Dataset objects represent SQL queries. They are created from
52
50
  a Sequel::Database object:
53
51
 
54
52
  dataset = DB[:table] # SELECT * FROM "table"
55
53
  dataset = DB.from(table) # SELECT * FROM "table"
56
54
  dataset = DB.select(:column) # SELECT "column"
57
55
 
58
- Most Sequel::Dataset methods return modified copies of the receiver, and the
59
- general way to build queries in Sequel is via a method chain:
56
+ Most Sequel::Dataset methods that do not execute queries return modified
57
+ copies of the receiver, and the general way to build queries in Sequel is
58
+ via a method chain:
60
59
 
61
60
  dataset = DB[:test].
62
61
  select(:column1, :column2).
63
- where(:column3 => 4).
62
+ where(column3: 4).
64
63
  order(:column5)
65
64
 
66
65
  Such a method chain is a more direct way of doing:
67
66
 
68
67
  dataset = DB[:test]
69
68
  dataset = dataset.select(:column1, :column2)
70
- dataset = dataset.where(:column3 => 4)
69
+ dataset = dataset.where(column3: 4)
71
70
  dataset = dataset.order(:column5)
72
71
 
73
72
  When you are ready to execute your query, you call one of the Sequel::Dataset
@@ -79,8 +78,8 @@ action methods. For returning rows, you can do:
79
78
 
80
79
  For inserting, updating, or deleting rows, you can do:
81
80
 
82
- dataset.insert(:column=>value)
83
- dataset.update(:column=>value)
81
+ dataset.insert(column: value)
82
+ dataset.update(column: value)
84
83
  dataset.delete
85
84
 
86
85
  All datasets are related to their database object, which you can access via
@@ -90,7 +89,7 @@ the Sequel::Dataset#db method:
90
89
 
91
90
  == Sequel::Model
92
91
 
93
- Sequel::Model objects are wrappers around a particular Sequel::Dataset object that
92
+ Sequel::Model classes are wrappers around a particular Sequel::Dataset object that
94
93
  add custom behavior, both custom behavior for the entire set of rows in the dataset
95
94
  (the model's class methods), custom behavior for a subset of rows in the dataset
96
95
  (the model's dataset methods), and custom behavior for single rows in the dataset
@@ -103,6 +102,13 @@ generally created by the user using standard ruby syntax:
103
102
  end
104
103
  album = Album.new
105
104
 
105
+ Model classes that use a non-default Database instance or table name generally
106
+ use the Sequel::Model method to create the superclass:
107
+
108
+ class Album < Sequel::Model(DB[:music_albums])
109
+ end
110
+ album = Album.new
111
+
106
112
  All model classes are related to their Sequel::Dataset object, which you
107
113
  can access via the Sequel::Model.dataset method:
108
114
 
@@ -121,34 +127,12 @@ if you pass the left side to Sequel::Database#literal.
121
127
 
122
128
  === Symbol
123
129
 
124
- For example, ruby symbols represent SQL identifiers (tables, columns, schemas):
130
+ Ruby symbols represent SQL identifiers (tables, columns, schemas):
125
131
 
132
+ :schema # "schema"
126
133
  :table # "table"
127
134
  :column # "column"
128
135
 
129
- By default, Sequel supports splitting symbols using double or triple underscores
130
- to represent qualified and aliased identifiers. A symbol with a double underscore
131
- is treated as a qualified identifier:
132
-
133
- :table__column # "table"."column"
134
-
135
- A symbol with a triple underscore is treated as an aliased identifier:
136
-
137
- :column___alias # "column" AS "alias"
138
-
139
- A symbol with a double underscore followed by a triple underscore is treated
140
- as an aliased qualified identifer:
141
-
142
- :table__column___alias # "table"."column" AS "alias"
143
-
144
- By allowing the creation of qualified and aliased identifiers via symbols,
145
- Sequel makes it simpler to represent more SQL expressions. However, if you
146
- are using double or triple underscores in your own identifiers, Sequel's
147
- automatic splitting of identifiers can be problematic, in which case you
148
- may want to turn them off via:
149
-
150
- Sequel.split_symbols = false
151
-
152
136
  === Integer, Float, BigDecimal, String, Date, Time, DateTime
153
137
 
154
138
  Ruby's Integer, Float, BigDecimal, String, Date, Time, and DateTime classes
@@ -166,31 +150,31 @@ represent similar types in SQL:
166
150
 
167
151
  Sequel generally uses hash objects to represent equality:
168
152
 
169
- {:column => 1} # ("column" = 1)
153
+ {column: 1} # ("column" = 1)
170
154
 
171
- However, if you use an array as the hash value, it will usually be used to represent inclusion:
155
+ However, if you use an array as the hash value, it represents inclusion in the value list:
172
156
 
173
- {:column => [1, 2, 3]} # ("column" IN (1, 2, 3))
157
+ {column: [1, 2, 3]} # ("column" IN (1, 2, 3))
174
158
 
175
159
  You can also use a Sequel::Dataset instance as the hash value, which will be used to
176
160
  represent inclusion in the subselect:
177
161
 
178
- {:column => DB[:table].select(:column)} # ("column" IN (SELECT "column" FROM "table"))
162
+ {column: DB[:table].select(:column)} # ("column" IN (SELECT "column" FROM "table"))
179
163
 
180
- If you pass true, false, or nil as the hash value, it will be used to represent identity:
164
+ If you pass true, false, or nil as the hash value, it represents identity:
181
165
 
182
- {:column => nil} # ("column" IS NULL)
166
+ {column: nil} # ("column" IS NULL)
183
167
 
184
168
  If you pass a Range object, it will be used as the bounds for a greater than and less than
185
169
  operation:
186
170
 
187
- {:column => 1..2} # (("column" >= 1) AND ("column" <= 2))
188
- {:column => 1...3} # (("column" >= 1) AND ("column" < 3))
171
+ {column: 1..2} # (("column" >= 1) AND ("column" <= 2))
172
+ {column: 1...3} # (("column" >= 1) AND ("column" < 3))
189
173
 
190
174
  If you pass a Regexp object as the value, it will be used as a regular expression
191
- operation (only supported on PostgreSQL and MySQL currently):
175
+ operation if the database supports it:
192
176
 
193
- {:column => /a.*b/} # ("column" ~ 'a.*b')
177
+ {column: /a.*b/} # ("column" ~ 'a.*b')
194
178
 
195
179
  === Array
196
180
 
@@ -259,9 +243,8 @@ no additional behavior, so it can be instantiated like a normal array:
259
243
 
260
244
  Sequel::SQL::ValueList.new([[1, 2], [3, 4]]) # ((1, 2), (3, 4))
261
245
 
262
- In old versions of Sequel, these objects often needed to be created manually,
263
- but in newer versions of Sequel, they are created automatically in most cases
264
- where they are required.
246
+ In general, you don't need to create Sequel::SQL::ValueList instances manually,
247
+ they will be created automatically where they are required in most cases.
265
248
 
266
249
  The following shortcuts exist for creating Sequel::SQL::ValueList objects:
267
250
 
@@ -271,16 +254,16 @@ The following shortcuts exist for creating Sequel::SQL::ValueList objects:
271
254
  === Sequel::SQL::Identifier
272
255
 
273
256
  Sequel::SQL::Identifier objects represent single identifiers. The main reason for
274
- their existence is that they are not checked for double or triple underscores, so no
275
- automatic qualification or aliasing happens for them:
257
+ their existence is they support many additional Sequel specific methods that are
258
+ not supported on plain symbols:
276
259
 
277
- Sequel::SQL::Identifier.new(:col__umn) # "col__umn"
260
+ Sequel::SQL::Identifier.new(:colum) # "col"
278
261
 
279
262
  The following shortcuts exist for creating Sequel::SQL::Identifier objects:
280
263
 
281
264
  Sequel[:column]
282
- Sequel.identifier(:col__umn)
283
- :col__umn.identifier # core_extensions extension
265
+ Sequel.identifier(:column)
266
+ :column.identifier # core_extensions extension
284
267
 
285
268
  === Sequel::SQL::QualifiedIdentifier
286
269
 
@@ -290,7 +273,6 @@ Sequel::SQL::QualifiedIdentifier objects represent qualified identifiers:
290
273
 
291
274
  The following shortcuts exist for creating Sequel::SQL::QualifiedIdentifier objects:
292
275
 
293
- Sequel[:table__column]
294
276
  Sequel[:table][:column]
295
277
  Sequel.qualify(:table, :column)
296
278
  :column.qualify(:table) # core_extensions extension
@@ -303,12 +285,14 @@ is treated as an identifier, but the expression can be an arbitrary Sequel expre
303
285
  Sequel::SQL::AliasedExpression.new(:column, :alias)
304
286
  # "column" AS "alias"
305
287
 
288
+ Derived column lists are also supported:
289
+
306
290
  Sequel::SQL::AliasedExpression.new(:table, :alias, [:column_alias1, :column_alias2])
307
291
  # "table" AS "alias"("column_alias1", "column_alias2")
308
292
 
309
293
  The following shortcuts exist for creating Sequel::SQL::AliasedExpression objects:
310
294
 
311
- Sequel[:column___alias]
295
+ Sequel[:column].as(:alias)
312
296
  Sequel.as(:column, :alias)
313
297
  Sequel.as(:column, :alias, [:column_alias1, :column_alias2])
314
298
  :column.as(:alias) # core_extensions or symbol_as extension
@@ -347,7 +331,7 @@ against:
347
331
 
348
332
  Or they can treat each condition separately:
349
333
 
350
- Sequel::SQL::CaseExpression.new({{:a=>2}=>1}, 0) # CASE WHEN ("a" = 2) THEN 1 ELSE 0 END
334
+ Sequel::SQL::CaseExpression.new({{a: 2}=>1}, 0) # CASE WHEN ("a" = 2) THEN 1 ELSE 0 END
351
335
 
352
336
  In addition to providing a hash, you can also provide an array of two-element arrays:
353
337
 
@@ -356,10 +340,10 @@ In addition to providing a hash, you can also provide an array of two-element ar
356
340
  The following shortcuts exist for creating Sequel::SQL::CaseExpression objects:
357
341
 
358
342
  Sequel.case({2=>1}, 0, :a)
359
- Sequel.case({{:a=>2}=>1}, 0)
343
+ Sequel.case({{a: 2}=>1}, 0)
360
344
 
361
345
  {2=>1}.case(0, :a) # core_extensions extension
362
- {{:a=>2}=>1}.case(0) # core_extensions extension
346
+ {{a: 2}=>1}.case(0) # core_extensions extension
363
347
 
364
348
  === Sequel::SQL::Cast
365
349
 
@@ -384,16 +368,14 @@ The following shortcuts exist for creating Sequel::SQL::Cast objects:
384
368
 
385
369
  === Sequel::SQL::ColumnAll
386
370
 
387
- Sequel::SQL::ColumnAll objects represent the selection of all columns from a
388
- table. They are pretty much only used as arguments to one of the Dataset select
389
- methods, and are not used much anymore since Dataset#select_all was expanded to
390
- take arguments. Still, it's possible they are still useful in some code:
371
+ Sequel::SQL::ColumnAll objects represent the selection of all columns from a table:
391
372
 
392
373
  Sequel::SQL::ColumnAll.new(:table) # "table".*
393
374
 
394
375
  The following shortcut exists for creating Sequel::SQL::ColumnAll objects:
395
376
 
396
377
  Sequel[:table].*
378
+ Sequel[:schema][:table].*
397
379
  :table.* # core_extensions extension
398
380
 
399
381
  === Sequel::SQL::Constant
@@ -407,7 +389,7 @@ Sequel namespace:
407
389
 
408
390
  These objects are usually used as values in queries:
409
391
 
410
- DB[:table].insert(:time=>Sequel::CURRENT_TIMESTAMP)
392
+ DB[:table].insert(time: Sequel::CURRENT_TIMESTAMP)
411
393
 
412
394
  === Sequel::SQL::DelayedEvaluation
413
395
 
@@ -466,7 +448,7 @@ The first type uses question marks with multiple placeholder value objects:
466
448
  The second uses named placeholders with colons and a hash of placeholder
467
449
  value objects:
468
450
 
469
- Sequel::SQL::PlaceholderLiteralString.new(':b = :v', [{:b=>:a, :v=>1}]) # "a" = 1
451
+ Sequel::SQL::PlaceholderLiteralString.new(':b = :v', [{b: :a, v: 1}]) # "a" = 1
470
452
 
471
453
  The third uses an array instead of a string, with multiple placeholder
472
454
  objects, each one going in between the members of the array:
@@ -482,7 +464,7 @@ The following shortcuts exist for creating Sequel::SQL::PlaceholderLiteralString
482
464
  objects:
483
465
 
484
466
  Sequel.lit('? = ?', :a, 1)
485
- Sequel.lit(':b = :v', :b=>:a, :v=>1)
467
+ Sequel.lit(':b = :v', b: :a, v: 1)
486
468
  Sequel.lit(['', ' = '], :a, 1)
487
469
 
488
470
  '? = ?'.lit(:a, 1) # core_extensions extension
@@ -552,10 +534,10 @@ Sequel::SQL::Window objects represent the windows used by Sequel::SQL::Function.
552
534
  They use a hash-based API, supporting the :frame, :order, :partition, and :window
553
535
  options:
554
536
 
555
- Sequel::SQL::Window.new(:order=>:a) # (ORDER BY "a")
556
- Sequel::SQL::Window.new(:partition=>:a) # (PARTITION BY "a")
537
+ Sequel::SQL::Window.new(order: :a) # (ORDER BY "a")
538
+ Sequel::SQL::Window.new(partition: :a) # (PARTITION BY "a")
557
539
 
558
- Sequel::SQL::Window.new(:partition=>:a, :frame=>:all)
540
+ Sequel::SQL::Window.new(partition: :a, frame: :all)
559
541
  # (PARTITION BY "a" ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
560
542
 
561
543
  === Sequel::SQL::Wrapper
@@ -564,7 +546,7 @@ Sequel::SQL::Wrapper objects wrap arbitrary objects so that they can be used
564
546
  in Sequel expressions:
565
547
 
566
548
  o = Object.new
567
- def o.sql_literal(ds) "foo" end
549
+ def o.sql_literal_append(ds, sql) sql << "foo" end
568
550
  Sequel::SQL::Wrapper.new(o) # foo
569
551
 
570
552
  The advantage of wrapping the object is that you can the call Sequel methods
@@ -28,12 +28,12 @@ You can use URI query parameters to specify options:
28
28
 
29
29
  You can also pass an additional option hash with the connection string:
30
30
 
31
- DB = Sequel.connect('postgres://localhost/blog', :user=>'user', :password=>'password')
31
+ DB = Sequel.connect('postgres://localhost/blog', user: 'user', password: 'password')
32
32
 
33
33
  You can also just use an options hash without a connection string. If you do this, you must
34
34
  provide the adapter to use:
35
35
 
36
- DB = Sequel.connect(:adapter=>'postgres', :host=>'localhost', :database=>'blog', :user=>'user', :password=>'password')
36
+ DB = Sequel.connect(adapter: 'postgres', host: 'localhost', database: 'blog', user: 'user', password: 'password')
37
37
 
38
38
  All of the above statements are equivalent.
39
39
 
@@ -43,12 +43,12 @@ The specialized adapter method is similar to Sequel.connect with an options hash
43
43
  automatically populates the :adapter option and assumes the first argument is the :database option,
44
44
  unless the first argument is a hash. So the following statements are equivalent to the previous statements.
45
45
 
46
- DB = Sequel.postgres('blog', :host=>'localhost', :user=>'user', :password=>'password')
47
- DB = Sequel.postgres(:host=>'localhost', :user=>'user', :password=>'password', :database=>'blog')
46
+ DB = Sequel.postgres('blog', host: 'localhost', user: 'user', password: 'password')
47
+ DB = Sequel.postgres(host: 'localhost', user: 'user', password: 'password', database: 'blog')
48
48
 
49
49
  Note that using an adapter method forces the use of the specified adapter, not a database type, even
50
50
  though some adapters have the same name as the database type. So if you
51
- want to connect to SQLite, for example, you can do so using the sqlite, do, jdbc, and swift adapters.
51
+ want to connect to SQLite, for example, you can do so using the sqlite, amalgalite, and jdbc adapters.
52
52
  If you want to connect to SQLite on JRuby using the jdbc adapter, you should not use <tt>Sequel.sqlite</tt>
53
53
  for example, as that uses the C-based sqlite3 gem. Instead, the <tt>Sequel.jdbc</tt> would be appropriate (though
54
54
  as mentioned below, using <tt>Sequel.connect</tt> is recommended instead of <tt>Sequel.jdbc</tt>).
@@ -75,22 +75,29 @@ These options are shared by all adapters unless otherwise noted.
75
75
 
76
76
  :adapter :: The adapter to use
77
77
  :database :: The name of the database to which to connect
78
+ :cache_schema :: Whether schema should be cached for this database (true by default)
79
+ :default_string_column_size :: The default size for string columns (255 by default)
78
80
  :host :: The hostname of the database server to which to connect
81
+ :keep_reference :: Whether to keep a reference to the database in Sequel::DATABASES (true by default)
79
82
  :loggers :: An array of SQL loggers to log to
83
+ :log_connection_info :: Whether to include connection information in log messages (false by default)
84
+ :log_warn_duration :: The amount of seconds after which the queries are logged at :warn level
80
85
  :password :: The password for the user account
81
86
  :servers :: A hash with symbol keys and hash or proc values, used with master/slave/partitioned database configurations
82
- :single_threaded :: Whether to use a single-threaded (non-thread safe) connection pool
83
- :test :: Whether to test that a valid database connection can be made (false by default)
87
+ :sql_log_level :: The level at which to issue queries to the loggers (:info by default)
88
+ :test :: Whether to test that a valid database connection can be made (true by default)
84
89
  :user :: The user account name to use logging in
85
90
 
86
91
  The following options can be specified and are passed to the database's internal connection pool.
87
92
 
88
93
  :after_connect :: A callable object called after each new connection is made, with the
89
94
  connection object (and server argument if the callable accepts 2 arguments),
90
- useful for customizations that you want to apply to all connections (default: nil).
91
- :max_connections :: The maximum size of the connection pool (default: 4 connections on most databases)
92
- :pool_sleep_time :: The number of seconds to sleep before trying to acquire a connection again (default: 0.001 seconds)
93
- :pool_timeout :: The number of seconds to wait if a connection cannot be acquired before raising an error (default: 5 seconds)
95
+ useful for customizations that you want to apply to all connections (nil by default).
96
+ :max_connections :: The maximum size of the connection pool (4 connections by default on most databases)
97
+ :pool_timeout :: The number of seconds to wait if a connection cannot be acquired before raising an error (5 seconds by default)
98
+ :preconnect :: Whether to automatically make the maximum number of connections when setting up the pool.
99
+ Can be set to "concurrently" to connect in parallel.
100
+ :single_threaded :: Whether to use a single-threaded (non-thread safe) connection pool
94
101
 
95
102
  == Adapter specific connection options
96
103
 
@@ -112,7 +119,6 @@ The following options are supported:
112
119
  :command_timeout :: Sets the time in seconds to wait while attempting
113
120
  to execute a command before cancelling the attempt and generating
114
121
  an error. Specifically, it sets the ADO CommandTimeout property.
115
- If this property is not set, the default of 30 seconds is used.
116
122
  :driver :: The driver to use in the ADO connection string. If not provided, a default
117
123
  of "SQL Server" is used.
118
124
  :conn_string :: The full ADO connection string. If this is provided,
@@ -133,11 +139,11 @@ Example connections:
133
139
  Sequel.connect('ado:///sequel_test?host=server%5cdb_instance')
134
140
  Sequel.connect('ado://user:password@server/database?host=server%5cdb_instance&provider=SQLNCLI10')
135
141
  # Access 2007
136
- Sequel.ado(:conn_string=>'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=drive:\\path\\filename.accdb')
142
+ Sequel.ado(conn_string: 'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=drive:\\path\\filename.accdb')
137
143
  # Access 2000
138
- Sequel.ado(:conn_string=>'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=drive:\\path\\filename.mdb')
144
+ Sequel.ado(conn_string: 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=drive:\\path\\filename.mdb')
139
145
  # Excel 2000 (for table names, use a dollar after the sheet name, e.g. Sheet1$)
140
- Sequel.ado(:conn_string=>'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=drive:\\path\\filename.xls;Extended Properties=Excel 8.0;')
146
+ Sequel.ado(conn_string: 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=drive:\\path\\filename.xls;Extended Properties=Excel 8.0;')
141
147
 
142
148
  === amalgalite
143
149
 
@@ -168,17 +174,12 @@ Requires: java
168
174
 
169
175
  Houses Sequel's JDBC support when running on JRuby.
170
176
  Support for individual database types is done using subadapters.
171
- There are currently subadapters for PostgreSQL, MySQL, SQLite, H2, HSQLDB, Derby,
172
- Oracle, MSSQL, JTDS, AS400, Progress, Firebird, Informix, and DB2.
173
- For PostgreSQL, MySQL, SQLite, H2, HSQLDB, Derby, AS400 and JTDS,
174
- this can use the `jdbc-*` gem, for the others you need to have the `.jar` in your CLASSPATH
177
+ There are currently subadapters for DB2, Derby, H2, HSQLDB, JTDS,
178
+ MySQL, Oracle, PostgreSQL, SQLAnywhere, SQLite, and SQL Server.
179
+ For Derby, H2, HSQLDB, JTDS, MySQL, Postgres, SQLite3
180
+ the adapters can use the `jdbc-*` gem, for the others you need to have the `.jar` in your CLASSPATH
175
181
  or load the Java class manually before calling Sequel.connect.
176
182
 
177
- You just use the JDBC connection string directly, which can be specified
178
- via the string given to Sequel.connect or via the :uri, :url, or :database options.
179
- Sequel does no preprocessing of the string, it passes it directly to JDBC.
180
- So if you have problems getting a connection string to work, look up the JDBC
181
- documentation.
182
183
 
183
184
  Note that when using a JDBC adapter, the best way to use Sequel
184
185
  is via Sequel.connect, NOT Sequel.jdbc. Use the JDBC connection
@@ -189,6 +190,10 @@ SQLite you do not need 2 preceding slashes for the database name
189
190
  (use no preceding slashes for a relative path, and one preceding
190
191
  slash for an absolute path).
191
192
 
193
+ Sequel does no preprocessing of JDBC connection strings, it passes them directly to JDBC.
194
+ So if you have problems getting a connection string to work, look up the
195
+ documentation for the JDBC driver.
196
+
192
197
  Example connection strings:
193
198
 
194
199
  jdbc:sqlite::memory:
@@ -218,8 +223,11 @@ The following additional options are supported:
218
223
  and only helps cases where <tt>java.sql.DriverManager.getConnection</tt> does not
219
224
  return a connection.
220
225
  :login_timeout :: Set the login timeout on the JDBC connection (in seconds).
226
+ :jdbc_properties :: A hash for properties to set, skips the normal connection process of using
227
+ java.sql.drivermanager.getconnection and tries the backup process of using
228
+ driver.new.connect for the appropriate driver.
221
229
 
222
- There are a few issues with specific jdbc drivers:
230
+ There are a few issues with specific jdbc driver gems:
223
231
 
224
232
  jdbc-h2 :: jdbc-h2 versions greater than 1.3.175 have issues with ORDER BY not working correctly in some cases.
225
233
  jdbc-postgres :: jdbc-postgres 9.4.1204 has issues using PostgreSQL-specific types in bound variables.
@@ -229,15 +237,14 @@ jdbc-postgres :: jdbc-postgres 9.4.1204 has issues using PostgreSQL-specific typ
229
237
 
230
238
  Requires: mysqlplus (or mysql if mysqlplus is not available)
231
239
 
232
- The MySQL adapter does not support the pure-ruby MySQL adapter that used to ship with
233
- ActiveRecord, it requires the native adapter.
240
+ The MySQL adapter does not support the pure-ruby mysql.rb driver, it requires the C-extension driver.
234
241
 
235
242
  The following additional options are supported:
236
243
 
237
244
  :auto_is_null :: If set to true, makes "WHERE primary_key IS NULL" select the last inserted id.
238
245
  :charset :: Same as :encoding, :encoding takes precedence.
239
246
  :compress :: Whether to compress data sent/received via the socket connection.
240
- :config_default_group :: The default group to read from the in the MySQL config file.
247
+ :config_default_group :: The default group to read from the in the MySQL config file, defaults to "client")
241
248
  :config_local_infile :: If provided, sets the Mysql::OPT_LOCAL_INFILE option on the connection with the given value.
242
249
  :encoding :: Specify the encoding/character set to use for the connection.
243
250
  :fractional_seconds :: On MySQL 5.6.5+, this option is recognized and will include fractional seconds in
@@ -251,6 +258,9 @@ The following additional options are supported:
251
258
  :read_timeout :: Set the timeout in seconds for reading back results to a query.
252
259
  :connect_timeout :: Set the timeout in seconds before a connection attempt is abandoned.
253
260
 
261
+ The :sslkey, :sslcert, :sslca, :sslcapath, and :sslca options (in that order) are passed to Mysql#ssl_set method
262
+ if either the :sslca or :sslkey option is given.
263
+
254
264
  === mysql2
255
265
 
256
266
  This is a newer MySQL adapter that does typecasting in C, so it is often faster than the
@@ -286,7 +296,7 @@ The following additional options are supported:
286
296
 
287
297
  Requires: pg (or postgres-pr/postgres-compat if pg is not available)
288
298
 
289
- The Sequel postgres adapter works with the pg, postgres, and postgres-pr ruby libraries.
299
+ The Sequel postgres adapter works with the pg and postgres-pr ruby libraries.
290
300
  The pg library is the best supported, as it supports real bound variables and prepared statements.
291
301
  If the pg library is being used, Sequel will also attempt to load the sequel_pg library, which is
292
302
  a C extension that optimizes performance when Sequel is used with pg. All users of Sequel who
@@ -386,6 +396,3 @@ Other Sequel specific options:
386
396
  This should be specified as an integer. If you plan on setting large
387
397
  text or blob values via tinytds, you should use this option or modify
388
398
  your freetds.conf file.
389
-
390
- The Sequel tinytds adapter requires tiny_tds >= 0.4.5, and if you are using FreeTDS
391
- 0.91, you must at least be using 0.91rc2 (0.91rc1 does not work).