sequel 3.21.0 → 3.39.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 (352) hide show
  1. data/CHANGELOG +1061 -3
  2. data/MIT-LICENSE +1 -1
  3. data/README.rdoc +103 -63
  4. data/Rakefile +59 -27
  5. data/bin/sequel +50 -26
  6. data/doc/active_record.rdoc +67 -51
  7. data/doc/advanced_associations.rdoc +189 -75
  8. data/doc/association_basics.rdoc +327 -79
  9. data/doc/cheat_sheet.rdoc +21 -21
  10. data/doc/core_extensions.rdoc +374 -0
  11. data/doc/dataset_basics.rdoc +10 -10
  12. data/doc/dataset_filtering.rdoc +54 -42
  13. data/doc/mass_assignment.rdoc +56 -0
  14. data/doc/migration.rdoc +89 -557
  15. data/doc/model_hooks.rdoc +80 -29
  16. data/doc/object_model.rdoc +547 -0
  17. data/doc/opening_databases.rdoc +114 -53
  18. data/doc/prepared_statements.rdoc +41 -15
  19. data/doc/querying.rdoc +137 -56
  20. data/doc/reflection.rdoc +36 -10
  21. data/doc/release_notes/3.22.0.txt +39 -0
  22. data/doc/release_notes/3.23.0.txt +172 -0
  23. data/doc/release_notes/3.24.0.txt +420 -0
  24. data/doc/release_notes/3.25.0.txt +88 -0
  25. data/doc/release_notes/3.26.0.txt +88 -0
  26. data/doc/release_notes/3.27.0.txt +82 -0
  27. data/doc/release_notes/3.28.0.txt +304 -0
  28. data/doc/release_notes/3.29.0.txt +459 -0
  29. data/doc/release_notes/3.30.0.txt +135 -0
  30. data/doc/release_notes/3.31.0.txt +146 -0
  31. data/doc/release_notes/3.32.0.txt +202 -0
  32. data/doc/release_notes/3.33.0.txt +157 -0
  33. data/doc/release_notes/3.34.0.txt +671 -0
  34. data/doc/release_notes/3.35.0.txt +144 -0
  35. data/doc/release_notes/3.36.0.txt +245 -0
  36. data/doc/release_notes/3.37.0.txt +338 -0
  37. data/doc/release_notes/3.38.0.txt +234 -0
  38. data/doc/release_notes/3.39.0.txt +237 -0
  39. data/doc/schema_modification.rdoc +585 -0
  40. data/doc/sharding.rdoc +99 -8
  41. data/doc/sql.rdoc +154 -112
  42. data/doc/testing.rdoc +169 -0
  43. data/doc/thread_safety.rdoc +17 -0
  44. data/doc/transactions.rdoc +137 -0
  45. data/doc/validations.rdoc +1 -1
  46. data/doc/virtual_rows.rdoc +78 -43
  47. data/lib/sequel/adapters/ado/mssql.rb +18 -6
  48. data/lib/sequel/adapters/ado.rb +40 -18
  49. data/lib/sequel/adapters/amalgalite.rb +17 -9
  50. data/lib/sequel/adapters/db2.rb +175 -86
  51. data/lib/sequel/adapters/dbi.rb +15 -15
  52. data/lib/sequel/adapters/do/mysql.rb +17 -11
  53. data/lib/sequel/adapters/do/postgres.rb +2 -61
  54. data/lib/sequel/adapters/do/sqlite.rb +0 -10
  55. data/lib/sequel/adapters/do.rb +18 -36
  56. data/lib/sequel/adapters/firebird.rb +27 -208
  57. data/lib/sequel/adapters/ibmdb.rb +453 -0
  58. data/lib/sequel/adapters/informix.rb +6 -23
  59. data/lib/sequel/adapters/jdbc/as400.rb +16 -34
  60. data/lib/sequel/adapters/jdbc/db2.rb +56 -0
  61. data/lib/sequel/adapters/jdbc/derby.rb +325 -0
  62. data/lib/sequel/adapters/jdbc/firebird.rb +24 -0
  63. data/lib/sequel/adapters/jdbc/h2.rb +73 -31
  64. data/lib/sequel/adapters/jdbc/hsqldb.rb +184 -0
  65. data/lib/sequel/adapters/jdbc/informix.rb +21 -0
  66. data/lib/sequel/adapters/jdbc/jtds.rb +40 -0
  67. data/lib/sequel/adapters/jdbc/mssql.rb +3 -33
  68. data/lib/sequel/adapters/jdbc/mysql.rb +7 -24
  69. data/lib/sequel/adapters/jdbc/oracle.rb +88 -25
  70. data/lib/sequel/adapters/jdbc/postgresql.rb +77 -52
  71. data/lib/sequel/adapters/jdbc/progress.rb +21 -0
  72. data/lib/sequel/adapters/jdbc/sqlite.rb +20 -10
  73. data/lib/sequel/adapters/jdbc/sqlserver.rb +66 -0
  74. data/lib/sequel/adapters/jdbc/transactions.rb +83 -0
  75. data/lib/sequel/adapters/jdbc.rb +279 -97
  76. data/lib/sequel/adapters/mock.rb +372 -0
  77. data/lib/sequel/adapters/mysql.rb +125 -222
  78. data/lib/sequel/adapters/mysql2.rb +65 -56
  79. data/lib/sequel/adapters/odbc/mssql.rb +17 -9
  80. data/lib/sequel/adapters/odbc.rb +28 -9
  81. data/lib/sequel/adapters/openbase.rb +3 -5
  82. data/lib/sequel/adapters/oracle.rb +349 -53
  83. data/lib/sequel/adapters/postgres.rb +368 -138
  84. data/lib/sequel/adapters/shared/access.rb +32 -9
  85. data/lib/sequel/adapters/shared/db2.rb +343 -0
  86. data/lib/sequel/adapters/shared/firebird.rb +221 -0
  87. data/lib/sequel/adapters/shared/informix.rb +53 -0
  88. data/lib/sequel/adapters/shared/mssql.rb +401 -116
  89. data/lib/sequel/adapters/shared/mysql.rb +424 -89
  90. data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +155 -0
  91. data/lib/sequel/adapters/shared/oracle.rb +257 -45
  92. data/lib/sequel/adapters/shared/postgres.rb +675 -279
  93. data/lib/sequel/adapters/shared/progress.rb +5 -8
  94. data/lib/sequel/adapters/shared/sqlite.rb +285 -96
  95. data/lib/sequel/adapters/sqlite.rb +101 -39
  96. data/lib/sequel/adapters/swift/mysql.rb +10 -12
  97. data/lib/sequel/adapters/swift/postgres.rb +13 -79
  98. data/lib/sequel/adapters/swift/sqlite.rb +9 -6
  99. data/lib/sequel/adapters/swift.rb +28 -19
  100. data/lib/sequel/adapters/tinytds.rb +174 -22
  101. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +77 -0
  102. data/lib/sequel/adapters/utils/pg_types.rb +81 -0
  103. data/lib/sequel/adapters/utils/stored_procedures.rb +1 -11
  104. data/lib/sequel/ast_transformer.rb +194 -0
  105. data/lib/sequel/connection_pool/sharded_single.rb +11 -1
  106. data/lib/sequel/connection_pool/sharded_threaded.rb +33 -2
  107. data/lib/sequel/connection_pool/single.rb +5 -0
  108. data/lib/sequel/connection_pool/threaded.rb +43 -14
  109. data/lib/sequel/connection_pool.rb +10 -2
  110. data/lib/sequel/core.rb +143 -11
  111. data/lib/sequel/database/connecting.rb +38 -28
  112. data/lib/sequel/database/dataset.rb +4 -4
  113. data/lib/sequel/database/dataset_defaults.rb +63 -2
  114. data/lib/sequel/database/logging.rb +7 -2
  115. data/lib/sequel/database/misc.rb +190 -46
  116. data/lib/sequel/database/query.rb +272 -110
  117. data/lib/sequel/database/schema_generator.rb +103 -36
  118. data/lib/sequel/database/schema_methods.rb +300 -67
  119. data/lib/sequel/dataset/actions.rb +344 -90
  120. data/lib/sequel/dataset/features.rb +101 -8
  121. data/lib/sequel/dataset/graph.rb +42 -15
  122. data/lib/sequel/dataset/misc.rb +52 -25
  123. data/lib/sequel/dataset/mutation.rb +12 -7
  124. data/lib/sequel/dataset/prepared_statements.rb +68 -30
  125. data/lib/sequel/dataset/query.rb +305 -54
  126. data/lib/sequel/dataset/sql.rb +720 -292
  127. data/lib/sequel/dataset.rb +8 -0
  128. data/lib/sequel/exceptions.rb +4 -0
  129. data/lib/sequel/extensions/_pretty_table.rb +83 -0
  130. data/lib/sequel/extensions/arbitrary_servers.rb +109 -0
  131. data/lib/sequel/extensions/blank.rb +4 -0
  132. data/lib/sequel/extensions/columns_introspection.rb +72 -0
  133. data/lib/sequel/extensions/constraint_validations.rb +451 -0
  134. data/lib/sequel/{core_sql.rb → extensions/core_extensions.rb} +30 -46
  135. data/lib/sequel/extensions/eval_inspect.rb +173 -0
  136. data/lib/sequel/extensions/inflector.rb +4 -0
  137. data/lib/sequel/extensions/looser_typecasting.rb +5 -4
  138. data/lib/sequel/extensions/migration.rb +100 -11
  139. data/lib/sequel/extensions/named_timezones.rb +9 -0
  140. data/lib/sequel/extensions/null_dataset.rb +94 -0
  141. data/lib/sequel/extensions/pagination.rb +4 -0
  142. data/lib/sequel/extensions/pg_array.rb +537 -0
  143. data/lib/sequel/extensions/pg_array_ops.rb +263 -0
  144. data/lib/sequel/extensions/pg_auto_parameterize.rb +175 -0
  145. data/lib/sequel/extensions/pg_hstore.rb +313 -0
  146. data/lib/sequel/extensions/pg_hstore_ops.rb +293 -0
  147. data/lib/sequel/extensions/pg_inet.rb +113 -0
  148. data/lib/sequel/extensions/pg_interval.rb +191 -0
  149. data/lib/sequel/extensions/pg_json.rb +208 -0
  150. data/lib/sequel/extensions/pg_range.rb +512 -0
  151. data/lib/sequel/extensions/pg_range_ops.rb +150 -0
  152. data/lib/sequel/extensions/pg_row.rb +572 -0
  153. data/lib/sequel/extensions/pg_row_ops.rb +182 -0
  154. data/lib/sequel/extensions/pg_statement_cache.rb +317 -0
  155. data/lib/sequel/extensions/pretty_table.rb +17 -72
  156. data/lib/sequel/extensions/query.rb +8 -4
  157. data/lib/sequel/extensions/query_literals.rb +79 -0
  158. data/lib/sequel/extensions/schema_caching.rb +76 -0
  159. data/lib/sequel/extensions/schema_dumper.rb +282 -76
  160. data/lib/sequel/extensions/select_remove.rb +39 -0
  161. data/lib/sequel/extensions/server_block.rb +140 -0
  162. data/lib/sequel/extensions/split_array_nil.rb +65 -0
  163. data/lib/sequel/extensions/sql_expr.rb +8 -110
  164. data/lib/sequel/extensions/string_date_time.rb +4 -0
  165. data/lib/sequel/extensions/thread_local_timezones.rb +10 -4
  166. data/lib/sequel/extensions/to_dot.rb +99 -83
  167. data/lib/sequel/model/associations.rb +1263 -409
  168. data/lib/sequel/model/base.rb +624 -171
  169. data/lib/sequel/model/errors.rb +1 -1
  170. data/lib/sequel/model/exceptions.rb +24 -2
  171. data/lib/sequel/model/inflections.rb +1 -1
  172. data/lib/sequel/model.rb +30 -11
  173. data/lib/sequel/no_core_ext.rb +2 -0
  174. data/lib/sequel/plugins/active_model.rb +13 -1
  175. data/lib/sequel/plugins/association_pks.rb +22 -4
  176. data/lib/sequel/plugins/caching.rb +25 -18
  177. data/lib/sequel/plugins/class_table_inheritance.rb +4 -4
  178. data/lib/sequel/plugins/composition.rb +44 -12
  179. data/lib/sequel/plugins/constraint_validations.rb +198 -0
  180. data/lib/sequel/plugins/dataset_associations.rb +100 -0
  181. data/lib/sequel/plugins/defaults_setter.rb +72 -0
  182. data/lib/sequel/plugins/dirty.rb +214 -0
  183. data/lib/sequel/plugins/eager_each.rb +59 -0
  184. data/lib/sequel/plugins/force_encoding.rb +6 -6
  185. data/lib/sequel/plugins/hook_class_methods.rb +1 -1
  186. data/lib/sequel/plugins/identity_map.rb +134 -15
  187. data/lib/sequel/plugins/instance_filters.rb +10 -0
  188. data/lib/sequel/plugins/instance_hooks.rb +1 -1
  189. data/lib/sequel/plugins/json_serializer.rb +58 -6
  190. data/lib/sequel/plugins/list.rb +13 -2
  191. data/lib/sequel/plugins/many_through_many.rb +103 -51
  192. data/lib/sequel/plugins/many_to_one_pk_lookup.rb +71 -0
  193. data/lib/sequel/plugins/nested_attributes.rb +150 -66
  194. data/lib/sequel/plugins/optimistic_locking.rb +8 -0
  195. data/lib/sequel/plugins/pg_row.rb +121 -0
  196. data/lib/sequel/plugins/pg_typecast_on_load.rb +65 -0
  197. data/lib/sequel/plugins/prepared_statements.rb +167 -0
  198. data/lib/sequel/plugins/prepared_statements_associations.rb +87 -0
  199. data/lib/sequel/plugins/prepared_statements_safe.rb +82 -0
  200. data/lib/sequel/plugins/prepared_statements_with_pk.rb +59 -0
  201. data/lib/sequel/plugins/rcte_tree.rb +31 -17
  202. data/lib/sequel/plugins/schema.rb +8 -3
  203. data/lib/sequel/plugins/serialization.rb +98 -49
  204. data/lib/sequel/plugins/serialization_modification_detection.rb +63 -0
  205. data/lib/sequel/plugins/sharding.rb +21 -54
  206. data/lib/sequel/plugins/single_table_inheritance.rb +5 -3
  207. data/lib/sequel/plugins/static_cache.rb +99 -0
  208. data/lib/sequel/plugins/subclasses.rb +29 -3
  209. data/lib/sequel/plugins/tactical_eager_loading.rb +7 -7
  210. data/lib/sequel/plugins/timestamps.rb +1 -1
  211. data/lib/sequel/plugins/tree.rb +3 -3
  212. data/lib/sequel/plugins/typecast_on_load.rb +9 -12
  213. data/lib/sequel/plugins/update_primary_key.rb +2 -2
  214. data/lib/sequel/plugins/validation_class_methods.rb +1 -1
  215. data/lib/sequel/plugins/validation_helpers.rb +55 -4
  216. data/lib/sequel/plugins/xml_serializer.rb +15 -4
  217. data/lib/sequel/sql.rb +649 -122
  218. data/lib/sequel/timezones.rb +67 -40
  219. data/lib/sequel/version.rb +1 -1
  220. data/spec/adapters/db2_spec.rb +146 -0
  221. data/spec/adapters/firebird_spec.rb +1 -1
  222. data/spec/adapters/mssql_spec.rb +194 -66
  223. data/spec/adapters/mysql_spec.rb +475 -306
  224. data/spec/adapters/oracle_spec.rb +92 -117
  225. data/spec/adapters/postgres_spec.rb +1982 -325
  226. data/spec/adapters/spec_helper.rb +9 -6
  227. data/spec/adapters/sqlite_spec.rb +203 -75
  228. data/spec/core/connection_pool_spec.rb +218 -93
  229. data/spec/core/database_spec.rb +956 -522
  230. data/spec/core/dataset_spec.rb +1631 -1242
  231. data/spec/core/expression_filters_spec.rb +690 -334
  232. data/spec/core/mock_adapter_spec.rb +453 -0
  233. data/spec/core/object_graph_spec.rb +88 -129
  234. data/spec/core/schema_generator_spec.rb +4 -4
  235. data/spec/core/schema_spec.rb +556 -53
  236. data/spec/core/spec_helper.rb +7 -48
  237. data/spec/core_extensions_spec.rb +626 -0
  238. data/spec/extensions/active_model_spec.rb +13 -0
  239. data/spec/extensions/arbitrary_servers_spec.rb +110 -0
  240. data/spec/extensions/association_autoreloading_spec.rb +18 -10
  241. data/spec/extensions/association_dependencies_spec.rb +15 -25
  242. data/spec/extensions/association_pks_spec.rb +66 -32
  243. data/spec/extensions/association_proxies_spec.rb +4 -4
  244. data/spec/extensions/boolean_readers_spec.rb +25 -25
  245. data/spec/extensions/caching_spec.rb +47 -51
  246. data/spec/extensions/class_table_inheritance_spec.rb +31 -83
  247. data/spec/extensions/columns_introspection_spec.rb +91 -0
  248. data/spec/extensions/composition_spec.rb +18 -13
  249. data/spec/extensions/constraint_validations_plugin_spec.rb +196 -0
  250. data/spec/extensions/constraint_validations_spec.rb +316 -0
  251. data/spec/extensions/dataset_associations_spec.rb +199 -0
  252. data/spec/extensions/defaults_setter_spec.rb +88 -0
  253. data/spec/extensions/dirty_spec.rb +155 -0
  254. data/spec/extensions/eager_each_spec.rb +34 -0
  255. data/spec/extensions/eval_inspect_spec.rb +67 -0
  256. data/spec/extensions/force_encoding_spec.rb +4 -2
  257. data/spec/extensions/hook_class_methods_spec.rb +97 -128
  258. data/spec/extensions/identity_map_spec.rb +142 -24
  259. data/spec/extensions/inflector_spec.rb +0 -4
  260. data/spec/extensions/instance_filters_spec.rb +11 -21
  261. data/spec/extensions/instance_hooks_spec.rb +72 -0
  262. data/spec/extensions/json_serializer_spec.rb +49 -12
  263. data/spec/extensions/lazy_attributes_spec.rb +16 -20
  264. data/spec/extensions/list_spec.rb +49 -40
  265. data/spec/extensions/looser_typecasting_spec.rb +7 -7
  266. data/spec/extensions/many_through_many_spec.rb +368 -254
  267. data/spec/extensions/many_to_one_pk_lookup_spec.rb +140 -0
  268. data/spec/extensions/migration_spec.rb +140 -35
  269. data/spec/extensions/named_timezones_spec.rb +29 -11
  270. data/spec/extensions/nested_attributes_spec.rb +268 -89
  271. data/spec/extensions/null_dataset_spec.rb +85 -0
  272. data/spec/extensions/optimistic_locking_spec.rb +24 -21
  273. data/spec/extensions/pg_array_ops_spec.rb +112 -0
  274. data/spec/extensions/pg_array_spec.rb +320 -0
  275. data/spec/extensions/pg_auto_parameterize_spec.rb +65 -0
  276. data/spec/extensions/pg_hstore_ops_spec.rb +140 -0
  277. data/spec/extensions/pg_hstore_spec.rb +194 -0
  278. data/spec/extensions/pg_inet_spec.rb +47 -0
  279. data/spec/extensions/pg_interval_spec.rb +72 -0
  280. data/spec/extensions/pg_json_spec.rb +99 -0
  281. data/spec/extensions/pg_range_ops_spec.rb +56 -0
  282. data/spec/extensions/pg_range_spec.rb +395 -0
  283. data/spec/extensions/pg_row_ops_spec.rb +58 -0
  284. data/spec/extensions/pg_row_plugin_spec.rb +49 -0
  285. data/spec/extensions/pg_row_spec.rb +323 -0
  286. data/spec/extensions/pg_statement_cache_spec.rb +208 -0
  287. data/spec/extensions/pg_typecast_on_load_spec.rb +58 -0
  288. data/spec/extensions/prepared_statements_associations_spec.rb +111 -0
  289. data/spec/extensions/prepared_statements_safe_spec.rb +61 -0
  290. data/spec/extensions/prepared_statements_spec.rb +87 -0
  291. data/spec/extensions/prepared_statements_with_pk_spec.rb +31 -0
  292. data/spec/extensions/pretty_table_spec.rb +7 -6
  293. data/spec/extensions/query_literals_spec.rb +167 -0
  294. data/spec/extensions/query_spec.rb +9 -3
  295. data/spec/extensions/rcte_tree_spec.rb +50 -43
  296. data/spec/extensions/schema_caching_spec.rb +41 -0
  297. data/spec/extensions/schema_dumper_spec.rb +434 -49
  298. data/spec/extensions/schema_spec.rb +30 -49
  299. data/spec/extensions/select_remove_spec.rb +38 -0
  300. data/spec/extensions/serialization_modification_detection_spec.rb +72 -0
  301. data/spec/extensions/serialization_spec.rb +86 -48
  302. data/spec/extensions/server_block_spec.rb +90 -0
  303. data/spec/extensions/sharding_spec.rb +69 -143
  304. data/spec/extensions/single_table_inheritance_spec.rb +23 -29
  305. data/spec/extensions/skip_create_refresh_spec.rb +1 -1
  306. data/spec/extensions/spec_helper.rb +34 -67
  307. data/spec/extensions/split_array_nil_spec.rb +24 -0
  308. data/spec/extensions/sql_expr_spec.rb +29 -60
  309. data/spec/extensions/static_cache_spec.rb +145 -0
  310. data/spec/extensions/subclasses_spec.rb +14 -0
  311. data/spec/extensions/tactical_eager_loading_spec.rb +17 -19
  312. data/spec/extensions/thread_local_timezones_spec.rb +22 -2
  313. data/spec/extensions/timestamps_spec.rb +6 -6
  314. data/spec/extensions/to_dot_spec.rb +8 -11
  315. data/spec/extensions/touch_spec.rb +13 -14
  316. data/spec/extensions/tree_spec.rb +11 -26
  317. data/spec/extensions/typecast_on_load_spec.rb +9 -6
  318. data/spec/extensions/update_primary_key_spec.rb +30 -24
  319. data/spec/extensions/validation_class_methods_spec.rb +58 -67
  320. data/spec/extensions/validation_helpers_spec.rb +31 -37
  321. data/spec/extensions/xml_serializer_spec.rb +29 -4
  322. data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +4 -0
  323. data/spec/files/transaction_specified_migrations/002_create_basic.rb +4 -0
  324. data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +3 -0
  325. data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +3 -0
  326. data/spec/integration/associations_test.rb +659 -21
  327. data/spec/integration/database_test.rb +11 -5
  328. data/spec/integration/dataset_test.rb +717 -129
  329. data/spec/integration/eager_loader_test.rb +38 -54
  330. data/spec/integration/migrator_test.rb +2 -3
  331. data/spec/integration/model_test.rb +81 -2
  332. data/spec/integration/plugin_test.rb +604 -147
  333. data/spec/integration/prepared_statement_test.rb +272 -128
  334. data/spec/integration/schema_test.rb +367 -57
  335. data/spec/integration/spec_helper.rb +42 -32
  336. data/spec/integration/timezone_test.rb +38 -12
  337. data/spec/integration/transaction_test.rb +183 -8
  338. data/spec/integration/type_test.rb +31 -8
  339. data/spec/model/association_reflection_spec.rb +207 -8
  340. data/spec/model/associations_spec.rb +1206 -693
  341. data/spec/model/base_spec.rb +334 -100
  342. data/spec/model/dataset_methods_spec.rb +45 -27
  343. data/spec/model/eager_loading_spec.rb +828 -692
  344. data/spec/model/hooks_spec.rb +355 -67
  345. data/spec/model/model_spec.rb +251 -179
  346. data/spec/model/plugins_spec.rb +24 -13
  347. data/spec/model/record_spec.rb +506 -232
  348. data/spec/model/spec_helper.rb +16 -77
  349. data/spec/model/validations_spec.rb +38 -2
  350. data/spec/rcov.opts +2 -0
  351. metadata +209 -80
  352. data/spec/core/core_sql_spec.rb +0 -451
@@ -46,6 +46,13 @@ unless the first argument is a hash. So the following statements are equivalent
46
46
  DB = Sequel.postgres('blog', :host=>'localhost', :user=>'user', :password=>'password')
47
47
  DB = Sequel.postgres(:host=>'localhost', :user=>'user', :password=>'password', :database=>'blog')
48
48
 
49
+ Note that using an adapter method forces the use of the specified adapter, not a database type, even
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.
52
+ If you want to connect to SQLite on JRuby using the jdbc adapter, you should not use <tt>Sequel.sqlite</tt>
53
+ for example, as that uses the C-based sqlite3 gem. Instead, the <tt>Sequel.jdbc</tt> would be appropriate (though
54
+ as mentioned below, using <tt>Sequel.connect</tt> is recommended instead of <tt>Sequel.jdbc</tt>).
55
+
49
56
  == Passing a block to either method
50
57
 
51
58
  Both the Sequel.connect method and the specialized adapter methods take a block. If you
@@ -59,24 +66,24 @@ For example:
59
66
 
60
67
  These options are shared by all adapters unless otherwise noted.
61
68
 
62
- * :adapter - The adapter to use
63
- * :database - The name of the database to which to connect
64
- * :default_schema - The database schema to use by default.
65
- * :host - The hostname of the database server to which to connect
66
- * :logger - An array of SQL loggers to log to
67
- * :loggers - An array of SQL loggers to log to
68
- * :password - The password for the user account
69
- * :servers - A hash with symbol keys and hash or proc values, used with master/slave/partitioned database configurations
70
- * :single_threaded - Whether to use a single-threaded (non-thread safe) connection pool
71
- * :test - Whether to test that a valid database connection can be made (false by default)
72
- * :user - The user account name to use logging in
69
+ :adapter :: The adapter to use
70
+ :database :: The name of the database to which to connect
71
+ :default_schema :: The database schema to use in schema_modification and introspection.
72
+ :host :: The hostname of the database server to which to connect
73
+ :logger :: An array of SQL loggers to log to
74
+ :loggers :: An array of SQL loggers to log to
75
+ :password :: The password for the user account
76
+ :servers :: A hash with symbol keys and hash or proc values, used with master/slave/partitioned database configurations
77
+ :single_threaded :: Whether to use a single-threaded (non-thread safe) connection pool
78
+ :test :: Whether to test that a valid database connection can be made (false by default)
79
+ :user :: The user account name to use logging in
73
80
 
74
81
  The following options can be specified and are passed to the the database's internal connection pool.
75
82
 
76
- * :after_connect - A proc called after a new connection is made, with the connection object (default: nil)
77
- * :max_connections - The maximum size of the connection pool (default: 4 connections on most databases)
78
- * :pool_sleep_time - The number of seconds to sleep before trying to acquire a connection again (default: 0.001 seconds)
79
- * :pool_timeout - The number of seconds to wait if a connection cannot be acquired before raising an error (default: 5 seconds)
83
+ :after_connect :: A proc called after a new connection is made, with the connection object (default: nil)
84
+ :max_connections :: The maximum size of the connection pool (default: 4 connections on most databases)
85
+ :pool_sleep_time :: The number of seconds to sleep before trying to acquire a connection again (default: 0.001 seconds)
86
+ :pool_timeout :: The number of seconds to wait if a connection cannot be acquired before raising an error (default: 5 seconds)
80
87
 
81
88
  == Adapter specific connection options
82
89
 
@@ -131,8 +138,8 @@ Amalgalite is an ruby extension that provides self contained access to SQLite,
131
138
  so you don't need to install SQLite separately. As amalgalite is a file backed
132
139
  database, the :host, :user, and :password options are not used.
133
140
 
134
- * :database - The name of the database file
135
- * :timeout - The busy timeout period given in milliseconds
141
+ :database :: The name of the database file
142
+ :timeout :: The busy timeout period given in milliseconds
136
143
 
137
144
  Without a database argument, assumes a memory database, so you can do:
138
145
 
@@ -145,17 +152,15 @@ the sqlite section below for details.
145
152
 
146
153
  Requires: db2/db2cli
147
154
 
148
- I'm not even sure exactly how this works, or if it works at all (I've never heard from
149
- anyone who attempted to use it). It uses the SQL_HANDLE_DBC constant to
150
- get a handle, and respects the :database, :user, and :password options. It doesn't
151
- appear to respect the :host or :port options.
155
+ This is the older DB2 adapter. It's recommended you try the ibmdb adapter
156
+ instead for new DB2 work, as it is better supported.
152
157
 
153
158
  === dbi
154
159
 
155
160
  Allows access to a multitude of databases via ruby-dbi. Additional options:
156
161
 
157
- * :db_type - Specifying 'mssql' allows Microsoft SQL Server specific syntax to
158
- be used. Otherwise has no effect.
162
+ :db_type :: Specifying 'mssql' allows Microsoft SQL Server specific syntax to
163
+ be used. Otherwise has no effect.
159
164
 
160
165
  DBI connection strings are a preprocessed a bit, and are specified with a dbi-
161
166
  in front of the protocol. Examples:
@@ -187,7 +192,7 @@ be faster than the other adapters.
187
192
  Similar to the JDBC adapter, the DO adapter only cares about connection strings,
188
193
  which can either be the String argument given to Sequel.connect directly or contained
189
194
  in a :uri or :url option. The DO adapter passes through the connection string
190
- directly to DataObjects, it does no processing of it.
195
+ directly to DataObjects, it does no processing of it (other than removing the do: prefix).
191
196
 
192
197
  Connection string examples:
193
198
 
@@ -201,6 +206,13 @@ Requires: fb (using code at http://github.com/wishdev/fb)
201
206
 
202
207
  Does not support the :port option.
203
208
 
209
+ === ibmdb
210
+
211
+ requires 'ibm_db'
212
+
213
+ This connects to DB2 using IBM_DB. This is the recommended adapter if you are
214
+ using a C-based ruby to connect to DB2.
215
+
204
216
  === informix
205
217
 
206
218
  Does not support the :host or :port options. Depending on the configuration of your server
@@ -220,9 +232,9 @@ Requires: java
220
232
 
221
233
  Houses Sequel's JDBC support when running on JRuby.
222
234
  Support for individual database types is done using sub adapters.
223
- There are currently subadapters for PostgreSQL, MySQL, SQLite, H2,
224
- Oracle, MSSQL, JTDS, and AS400. All except Oracle, MSSQL, and AS400 can load the
225
- jdbc-* gem, for those you need to have the .jar in your CLASSPATH
235
+ There are currently subadapters for PostgreSQL, MySQL, SQLite, H2, HSQLDB, Derby,
236
+ Oracle, MSSQL, JTDS, AS400, Progress, Firebird, Informix, and DB2. For PostgreSQL, MySQL, SQLite, H2, Derby,
237
+ and JTDS, this can use the jdbc-* gem, for the others you need to have the .jar in your CLASSPATH
226
238
  or load the Java class manually before calling Sequel.connect.
227
239
 
228
240
  You just use the JDBC connection string directly, which can be specified
@@ -246,37 +258,54 @@ Example connection strings:
246
258
  jdbc:postgresql://localhost/database?user=username
247
259
  jdbc:mysql://localhost/test?user=root&password=root
248
260
  jdbc:h2:mem:
261
+ jdbc:hsqldb:mem:mymemdb
262
+ jdbc:derby:memory:myDb;create=true
249
263
  jdbc:sqlserver://localhost;database=sequel_test;integratedSecurity=true
250
264
  jdbc:jtds:sqlserver://localhost/sequel_test;user=sequel_test;password=sequel_test
251
-
265
+ jdbc:oracle:thin:user/password@localhost:1521:database
266
+ jdbc:db2://localhost:3700/database:user=user;password=password;
267
+ jdbc:firebirdsql:localhost/3050:/path/to/database.fdb
268
+ jdbc:jdbcprogress:T:hostname:port:database
269
+
252
270
  You can also use JNDI connection strings:
253
271
 
254
272
  jdbc:jndi:java:comp/env/jndi_resource_name
255
273
 
256
274
  The following additional options are supported:
257
275
 
258
- * :convert_types - If set to false, does not attempt to convert some Java types to ruby types.
259
- Setting to false roughly doubles performance when selecting large numbers of rows.
260
- Note that you can't provide this option inside the connection string (as that is passed
261
- directly to JDBC), you have to pass it as a separate option.
276
+ :convert_types :: If set to false, does not attempt to convert some Java types to ruby types.
277
+ Setting to false roughly doubles performance when selecting large numbers of rows.
278
+ Note that you can't provide this option inside the connection string (as that is passed
279
+ directly to JDBC), you have to pass it as a separate option.
280
+ :login_timeout :: Set the login timeout on the JDBC connection (in seconds).
262
281
 
263
282
  === mysql
264
283
 
284
+ Requires: mysqlplus (or mysql if mysqlplus is not available)
285
+
265
286
  The MySQL adapter does not support the pure-ruby MySQL adapter that used to ship with
266
287
  ActiveRecord, it requires the native adapter.
267
288
 
268
289
  The following additional options are supported:
269
290
 
270
- * :auto_is_null - If set to true, makes "WHERE primary_key IS NULL" select the last inserted id.
271
- * :charset - Same as :encoding, :encoding takes precedence.
272
- * :compress - Whether to compress data sent/received via the socket connection.
273
- * :config_default_group - The default group to read from the in the MySQL config file.
274
- * :config_local_infile - If provided, sets the Mysql::OPT_LOCAL_INFILE option on the connection with the given value.
275
- * :encoding - Specify the encoding/character set to use for the connection.
276
- * :socket - Can be used to specify a Unix socket file to connect to instead of a TCP host and port.
277
- * :timeout - Sets the wait_timeout for the connection, defaults to 1 month.
278
- * :read_timeout - Set the timeout in seconds for reading back results to a query.
279
- * :connect_timeout - Set the timeout in seconds before a connection attempt is abandoned.
291
+ :auto_is_null :: If set to true, makes "WHERE primary_key IS NULL" select the last inserted id.
292
+ :charset :: Same as :encoding, :encoding takes precedence.
293
+ :compress :: Whether to compress data sent/received via the socket connection.
294
+ :config_default_group :: The default group to read from the in the MySQL config file.
295
+ :config_local_infile :: If provided, sets the Mysql::OPT_LOCAL_INFILE option on the connection with the given value.
296
+ :encoding :: Specify the encoding/character set to use for the connection.
297
+ :socket :: Can be used to specify a Unix socket file to connect to instead of a TCP host and port.
298
+ :sql_mode :: Set the sql_mode(s) for a given connection. Can be single symbol or string,
299
+ or an array of symbols or strings (e.g. <tt>:sql_mode=>[:no_zero_date, :pipes_as_concat]</tt>).
300
+ :timeout :: Sets the wait_timeout for the connection, defaults to 1 month.
301
+ :read_timeout :: Set the timeout in seconds for reading back results to a query.
302
+ :connect_timeout :: Set the timeout in seconds before a connection attempt is abandoned.
303
+
304
+ === mysql2
305
+
306
+ This is a newer MySQL adapter that does typecasting in C, so it is often faster than the
307
+ mysql adapter. Supports the same additional options as the mysql adapter, except for :compress, and uses
308
+ :timeout instead of :read_timeout and :connect_timeout.
280
309
 
281
310
  === odbc
282
311
 
@@ -287,8 +316,8 @@ The :database option given ODBC database should be the DSN (Descriptive Service
287
316
 
288
317
  The :host and :port options are not respected. The following additional options are supported:
289
318
 
290
- * :db_type - Can be specified as 'mssql' or 'progress' to use SQL syntax specific to those databases.
291
- * :driver - The name of the ODBC driver to utilize.
319
+ :db_type :: Can be specified as 'mssql' or 'progress' to use SQL syntax specific to those databases.
320
+ :driver :: The name of the ODBC driver to utilize.
292
321
 
293
322
  === openbase
294
323
 
@@ -300,7 +329,11 @@ Requires: oci8
300
329
 
301
330
  The following additional options are supported:
302
331
 
303
- * :privilege - The Oracle privilege level.
332
+ :autosequence :: Set to true to use Sequel's conventions to guess the sequence to use for datasets. False
333
+ by default.
334
+ :prefetch_rows :: The number of rows to prefetch. Defaults to 1, a larger number can be specified
335
+ and will improve performance when retrieving a large number of rows.
336
+ :privilege :: The Oracle privilege level.
304
337
 
305
338
  === postgres
306
339
 
@@ -308,14 +341,23 @@ Requires: pg (or postgres if pg is not available)
308
341
 
309
342
  The Sequel postgres adapter works with the pg, postgres, and postgres-pr ruby libraries.
310
343
  The pg library is the best supported, as it supports real bound variables and prepared statements.
344
+ If the pg library is being used, Sequel will also attempt to load the sequel_pg library, which is
345
+ a C extension that optimizes performance when Sequel is used with pg. All users of Sequel who
346
+ use pg are encouraged to install sequel_pg.
311
347
 
312
348
  The following additional options are supported:
313
349
 
314
- * :charset - Same as :encoding, :encoding takes precedence
315
- * :encoding - Set the client_encoding to the given string
350
+ :charset :: Same as :encoding, :encoding takes precedence
351
+ :encoding :: Set the client_encoding to the given string
352
+ :connect_timeout :: Set the number of seconds to wait for a connection (default 20, only respected
353
+ if using the pg library).
354
+ :sslmode :: Set to 'disable', 'allow', 'prefer', 'require' to choose how to treat SSL (only
355
+ respected if using the pg library)
316
356
 
317
357
  === sqlite
318
358
 
359
+ Requires: sqlite3
360
+
319
361
  As SQLite is a file-based database, the :host and :port options are ignored, and
320
362
  the :database option should be a path to the file.
321
363
 
@@ -337,7 +379,7 @@ Examples:
337
379
 
338
380
  The following additional options are supported:
339
381
 
340
- * :timeout - the busy timeout to use in milliseconds (default: 5000).
382
+ :timeout :: the busy timeout to use in milliseconds (default: 5000).
341
383
 
342
384
  === swift
343
385
 
@@ -345,6 +387,12 @@ swift is a ruby 1.9 only library, so you'll need to be running ruby 1.9. It
345
387
  can connect to SQLite, MySQL, and PostgreSQL, and you must specify which
346
388
  database using the db_type option.
347
389
 
390
+ You need to install one of the swift db adapters
391
+
392
+ * swift-db-sqlite3
393
+ * swift-db-mysql
394
+ * swift-db-postgres
395
+
348
396
  Examples:
349
397
 
350
398
  swift:///?database=:memory:&db_type=sqlite
@@ -353,16 +401,29 @@ Examples:
353
401
 
354
402
  === tinytds
355
403
 
404
+ Requires: tiny_tds
405
+
356
406
  Because the underscore is not a valid character in a URI schema, the adapter
357
407
  is named tinytds instead of tiny_tds. The connection options are passed directly
358
- to tiny_tds, except that the tiny_tds :dataserver and :username options are set to
359
- the Sequel :host and :user options. The :host option should be an entry in the
360
- freetds.conf file, it's not currently possible to a host not present in the
361
- freetds.conf file. Some options that you may want to set are
362
- :login_timeout, :timeout, :appname, and :encoding, see the tiny_tds README for details.
408
+ to tiny_tds, except that the tiny_tds :username option is set to
409
+ the Sequel :user option. If you want to use an entry in the freetds.conf file, you
410
+ should specify the :dataserver option with that name as the value. Some other
411
+ options that you may want to set are :login_timeout, :timeout, :tds_version, :azure,
412
+ :appname, and :encoding, see the tiny_tds README for details.
413
+
414
+ Other Sequel specific options:
415
+
416
+ :textsize :: Override the default TEXTSIZE setting for this connection. The FreeTDS
417
+ default is small (around 64000 bytes), but can be set up to around 2GB.
418
+ This should be specified as an integer. If you plan on setting large
419
+ text or blob values via tinytds, you should use this option or modify
420
+ your freetds.conf file.
421
+
363
422
  For highest performance, you should disable any identifier output method when
364
423
  using the tinytds adapter, which probably means disabling any identifier input method
365
424
  as well. The default for Microsoft SQL Server is to :downcase identifiers on output
366
425
  and :upcase them on input, so the highest performance will require changing the setting
367
426
  from the default.
368
427
 
428
+ The Sequel tinytds adapter requires tiny_tds >= 0.4.5, and if you are using FreeTDS
429
+ 0.91, you must at least be using 0.91rc2 (0.91rc1 does not work).
@@ -3,15 +3,22 @@
3
3
  Sequel has support for prepared statements and bound variables. No matter which
4
4
  database you are using, the Sequel prepared statement/bound variable API remains
5
5
  the same. There is native support for prepared statements/bound variables on
6
- the following databases:
6
+ the following adapters:
7
7
 
8
- * PostgreSQL (using the pg driver, requires type specifiers)
9
- * MySQL (prepared statements only, as the ruby mysql driver doesn't support
10
- bound variables)
11
- * SQLite
12
- * JDBC
8
+ * ibmdb (prepared statements only)
9
+ * jdbc
10
+ * mysql (prepared statements only)
11
+ * mysql2 (prepared statements only)
12
+ * oracle (requires type specifiers for nil/NULL values)
13
+ * postgres (when using the pg driver)
14
+ * sqlite
15
+ * tinytds
13
16
 
14
- Support on other databases is emulated via string interpolation.
17
+ Support on other adapters is emulated via string interpolation.
18
+
19
+ You can use the prepared_statements model plugin to automatically use prepared
20
+ statements for some common model actions such as saving or deleting a model
21
+ instance, or looking up a model based on a primary key.
15
22
 
16
23
  == Placeholders
17
24
 
@@ -22,7 +29,7 @@ significantly for placeholders (e.g. :name, $1, ?). Sequel abstracts all of
22
29
  that and allows you to specify placeholders by using the :$name format for
23
30
  placeholders, e.g.:
24
31
 
25
- ds = DB[:items].filter(:name=>:$n)
32
+ ds = DB[:items].where(:name=>:$n)
26
33
 
27
34
  == Bound Variables
28
35
 
@@ -74,20 +81,19 @@ and update queries, the hash to insert/update is passed to +prepare+:
74
81
 
75
82
  If you are using the ruby-postgres or postgres-pr driver, PostgreSQL uses the
76
83
  default emulated support. If you are using ruby-pg, there is native support,
77
- but it requires type specifiers most of the time. This is easy if you have
78
- direct control over the SQL string, but since Sequel abstracts that, the types
79
- have to be specified another way. This is done by adding a __* suffix to the
80
- placeholder symbol (e.g. :$name__text, which will be compiled to "$1::text"
81
- in the SQL). Prepared statements are always server side.
84
+ but it may require type specifiers on some old versions (generally not anymore).
85
+ You can add a __* suffix to the placeholder symbol to specify a type, which
86
+ casts to that type in the SQL (e.g. :$name__text, which will be compiled to
87
+ "$1::text" in the SQL). Prepared statements are always server side.
82
88
 
83
89
  === SQLite
84
90
 
85
91
  SQLite supports both prepared statements and bound variables. Prepared
86
92
  statements are cached per connection.
87
93
 
88
- === MySQL
94
+ === MySQL/Mysql2
89
95
 
90
- The MySQL ruby driver does not support bound variables, so the the bound
96
+ The MySQL/Mysql2 ruby drivers do not support bound variables, so the bound
91
97
  variable methods fall back to string interpolation. It uses server side
92
98
  prepared statements.
93
99
 
@@ -99,6 +105,26 @@ over JDBC, you can add the prepareThreshold=N parameter to the connection
99
105
  string, which will use a server side prepared statement after N calls to
100
106
  the prepared statement.
101
107
 
108
+ === TinyTDS
109
+
110
+ Uses the sp_executesql stored procedure with bound variables, since
111
+ Microsoft SQL Server doesn't support true prepared statements.
112
+
113
+ === IBM_DB
114
+
115
+ DB2 supports both prepared statements and bound variables. Prepared
116
+ statement objects are cached per connection.
117
+
118
+ === Oracle
119
+
120
+ Oracle supports both prepared statements and bound variables. Prepared
121
+ statements (OCI8::Cursor objects) are cached per connection. If you
122
+ ever plan to use a nil/NULL value as a bound variable/prepared statement
123
+ value, you must specify the type in the placeholder using a __* suffix.
124
+ You can use any of the schema types that Sequel supports, such as
125
+ :$name__string or :$num__integer. Using blobs as bound variables is
126
+ not currently supported.
127
+
102
128
  === All Others
103
129
 
104
130
  Support is emulated using interpolation.