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.
- data/CHANGELOG +1061 -3
- data/MIT-LICENSE +1 -1
- data/README.rdoc +103 -63
- data/Rakefile +59 -27
- data/bin/sequel +50 -26
- data/doc/active_record.rdoc +67 -51
- data/doc/advanced_associations.rdoc +189 -75
- data/doc/association_basics.rdoc +327 -79
- data/doc/cheat_sheet.rdoc +21 -21
- data/doc/core_extensions.rdoc +374 -0
- data/doc/dataset_basics.rdoc +10 -10
- data/doc/dataset_filtering.rdoc +54 -42
- data/doc/mass_assignment.rdoc +56 -0
- data/doc/migration.rdoc +89 -557
- data/doc/model_hooks.rdoc +80 -29
- data/doc/object_model.rdoc +547 -0
- data/doc/opening_databases.rdoc +114 -53
- data/doc/prepared_statements.rdoc +41 -15
- data/doc/querying.rdoc +137 -56
- data/doc/reflection.rdoc +36 -10
- data/doc/release_notes/3.22.0.txt +39 -0
- data/doc/release_notes/3.23.0.txt +172 -0
- data/doc/release_notes/3.24.0.txt +420 -0
- data/doc/release_notes/3.25.0.txt +88 -0
- data/doc/release_notes/3.26.0.txt +88 -0
- data/doc/release_notes/3.27.0.txt +82 -0
- data/doc/release_notes/3.28.0.txt +304 -0
- data/doc/release_notes/3.29.0.txt +459 -0
- data/doc/release_notes/3.30.0.txt +135 -0
- data/doc/release_notes/3.31.0.txt +146 -0
- data/doc/release_notes/3.32.0.txt +202 -0
- data/doc/release_notes/3.33.0.txt +157 -0
- data/doc/release_notes/3.34.0.txt +671 -0
- data/doc/release_notes/3.35.0.txt +144 -0
- data/doc/release_notes/3.36.0.txt +245 -0
- data/doc/release_notes/3.37.0.txt +338 -0
- data/doc/release_notes/3.38.0.txt +234 -0
- data/doc/release_notes/3.39.0.txt +237 -0
- data/doc/schema_modification.rdoc +585 -0
- data/doc/sharding.rdoc +99 -8
- data/doc/sql.rdoc +154 -112
- data/doc/testing.rdoc +169 -0
- data/doc/thread_safety.rdoc +17 -0
- data/doc/transactions.rdoc +137 -0
- data/doc/validations.rdoc +1 -1
- data/doc/virtual_rows.rdoc +78 -43
- data/lib/sequel/adapters/ado/mssql.rb +18 -6
- data/lib/sequel/adapters/ado.rb +40 -18
- data/lib/sequel/adapters/amalgalite.rb +17 -9
- data/lib/sequel/adapters/db2.rb +175 -86
- data/lib/sequel/adapters/dbi.rb +15 -15
- data/lib/sequel/adapters/do/mysql.rb +17 -11
- data/lib/sequel/adapters/do/postgres.rb +2 -61
- data/lib/sequel/adapters/do/sqlite.rb +0 -10
- data/lib/sequel/adapters/do.rb +18 -36
- data/lib/sequel/adapters/firebird.rb +27 -208
- data/lib/sequel/adapters/ibmdb.rb +453 -0
- data/lib/sequel/adapters/informix.rb +6 -23
- data/lib/sequel/adapters/jdbc/as400.rb +16 -34
- data/lib/sequel/adapters/jdbc/db2.rb +56 -0
- data/lib/sequel/adapters/jdbc/derby.rb +325 -0
- data/lib/sequel/adapters/jdbc/firebird.rb +24 -0
- data/lib/sequel/adapters/jdbc/h2.rb +73 -31
- data/lib/sequel/adapters/jdbc/hsqldb.rb +184 -0
- data/lib/sequel/adapters/jdbc/informix.rb +21 -0
- data/lib/sequel/adapters/jdbc/jtds.rb +40 -0
- data/lib/sequel/adapters/jdbc/mssql.rb +3 -33
- data/lib/sequel/adapters/jdbc/mysql.rb +7 -24
- data/lib/sequel/adapters/jdbc/oracle.rb +88 -25
- data/lib/sequel/adapters/jdbc/postgresql.rb +77 -52
- data/lib/sequel/adapters/jdbc/progress.rb +21 -0
- data/lib/sequel/adapters/jdbc/sqlite.rb +20 -10
- data/lib/sequel/adapters/jdbc/sqlserver.rb +66 -0
- data/lib/sequel/adapters/jdbc/transactions.rb +83 -0
- data/lib/sequel/adapters/jdbc.rb +279 -97
- data/lib/sequel/adapters/mock.rb +372 -0
- data/lib/sequel/adapters/mysql.rb +125 -222
- data/lib/sequel/adapters/mysql2.rb +65 -56
- data/lib/sequel/adapters/odbc/mssql.rb +17 -9
- data/lib/sequel/adapters/odbc.rb +28 -9
- data/lib/sequel/adapters/openbase.rb +3 -5
- data/lib/sequel/adapters/oracle.rb +349 -53
- data/lib/sequel/adapters/postgres.rb +368 -138
- data/lib/sequel/adapters/shared/access.rb +32 -9
- data/lib/sequel/adapters/shared/db2.rb +343 -0
- data/lib/sequel/adapters/shared/firebird.rb +221 -0
- data/lib/sequel/adapters/shared/informix.rb +53 -0
- data/lib/sequel/adapters/shared/mssql.rb +401 -116
- data/lib/sequel/adapters/shared/mysql.rb +424 -89
- data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +155 -0
- data/lib/sequel/adapters/shared/oracle.rb +257 -45
- data/lib/sequel/adapters/shared/postgres.rb +675 -279
- data/lib/sequel/adapters/shared/progress.rb +5 -8
- data/lib/sequel/adapters/shared/sqlite.rb +285 -96
- data/lib/sequel/adapters/sqlite.rb +101 -39
- data/lib/sequel/adapters/swift/mysql.rb +10 -12
- data/lib/sequel/adapters/swift/postgres.rb +13 -79
- data/lib/sequel/adapters/swift/sqlite.rb +9 -6
- data/lib/sequel/adapters/swift.rb +28 -19
- data/lib/sequel/adapters/tinytds.rb +174 -22
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +77 -0
- data/lib/sequel/adapters/utils/pg_types.rb +81 -0
- data/lib/sequel/adapters/utils/stored_procedures.rb +1 -11
- data/lib/sequel/ast_transformer.rb +194 -0
- data/lib/sequel/connection_pool/sharded_single.rb +11 -1
- data/lib/sequel/connection_pool/sharded_threaded.rb +33 -2
- data/lib/sequel/connection_pool/single.rb +5 -0
- data/lib/sequel/connection_pool/threaded.rb +43 -14
- data/lib/sequel/connection_pool.rb +10 -2
- data/lib/sequel/core.rb +143 -11
- data/lib/sequel/database/connecting.rb +38 -28
- data/lib/sequel/database/dataset.rb +4 -4
- data/lib/sequel/database/dataset_defaults.rb +63 -2
- data/lib/sequel/database/logging.rb +7 -2
- data/lib/sequel/database/misc.rb +190 -46
- data/lib/sequel/database/query.rb +272 -110
- data/lib/sequel/database/schema_generator.rb +103 -36
- data/lib/sequel/database/schema_methods.rb +300 -67
- data/lib/sequel/dataset/actions.rb +344 -90
- data/lib/sequel/dataset/features.rb +101 -8
- data/lib/sequel/dataset/graph.rb +42 -15
- data/lib/sequel/dataset/misc.rb +52 -25
- data/lib/sequel/dataset/mutation.rb +12 -7
- data/lib/sequel/dataset/prepared_statements.rb +68 -30
- data/lib/sequel/dataset/query.rb +305 -54
- data/lib/sequel/dataset/sql.rb +720 -292
- data/lib/sequel/dataset.rb +8 -0
- data/lib/sequel/exceptions.rb +4 -0
- data/lib/sequel/extensions/_pretty_table.rb +83 -0
- data/lib/sequel/extensions/arbitrary_servers.rb +109 -0
- data/lib/sequel/extensions/blank.rb +4 -0
- data/lib/sequel/extensions/columns_introspection.rb +72 -0
- data/lib/sequel/extensions/constraint_validations.rb +451 -0
- data/lib/sequel/{core_sql.rb → extensions/core_extensions.rb} +30 -46
- data/lib/sequel/extensions/eval_inspect.rb +173 -0
- data/lib/sequel/extensions/inflector.rb +4 -0
- data/lib/sequel/extensions/looser_typecasting.rb +5 -4
- data/lib/sequel/extensions/migration.rb +100 -11
- data/lib/sequel/extensions/named_timezones.rb +9 -0
- data/lib/sequel/extensions/null_dataset.rb +94 -0
- data/lib/sequel/extensions/pagination.rb +4 -0
- data/lib/sequel/extensions/pg_array.rb +537 -0
- data/lib/sequel/extensions/pg_array_ops.rb +263 -0
- data/lib/sequel/extensions/pg_auto_parameterize.rb +175 -0
- data/lib/sequel/extensions/pg_hstore.rb +313 -0
- data/lib/sequel/extensions/pg_hstore_ops.rb +293 -0
- data/lib/sequel/extensions/pg_inet.rb +113 -0
- data/lib/sequel/extensions/pg_interval.rb +191 -0
- data/lib/sequel/extensions/pg_json.rb +208 -0
- data/lib/sequel/extensions/pg_range.rb +512 -0
- data/lib/sequel/extensions/pg_range_ops.rb +150 -0
- data/lib/sequel/extensions/pg_row.rb +572 -0
- data/lib/sequel/extensions/pg_row_ops.rb +182 -0
- data/lib/sequel/extensions/pg_statement_cache.rb +317 -0
- data/lib/sequel/extensions/pretty_table.rb +17 -72
- data/lib/sequel/extensions/query.rb +8 -4
- data/lib/sequel/extensions/query_literals.rb +79 -0
- data/lib/sequel/extensions/schema_caching.rb +76 -0
- data/lib/sequel/extensions/schema_dumper.rb +282 -76
- data/lib/sequel/extensions/select_remove.rb +39 -0
- data/lib/sequel/extensions/server_block.rb +140 -0
- data/lib/sequel/extensions/split_array_nil.rb +65 -0
- data/lib/sequel/extensions/sql_expr.rb +8 -110
- data/lib/sequel/extensions/string_date_time.rb +4 -0
- data/lib/sequel/extensions/thread_local_timezones.rb +10 -4
- data/lib/sequel/extensions/to_dot.rb +99 -83
- data/lib/sequel/model/associations.rb +1263 -409
- data/lib/sequel/model/base.rb +624 -171
- data/lib/sequel/model/errors.rb +1 -1
- data/lib/sequel/model/exceptions.rb +24 -2
- data/lib/sequel/model/inflections.rb +1 -1
- data/lib/sequel/model.rb +30 -11
- data/lib/sequel/no_core_ext.rb +2 -0
- data/lib/sequel/plugins/active_model.rb +13 -1
- data/lib/sequel/plugins/association_pks.rb +22 -4
- data/lib/sequel/plugins/caching.rb +25 -18
- data/lib/sequel/plugins/class_table_inheritance.rb +4 -4
- data/lib/sequel/plugins/composition.rb +44 -12
- data/lib/sequel/plugins/constraint_validations.rb +198 -0
- data/lib/sequel/plugins/dataset_associations.rb +100 -0
- data/lib/sequel/plugins/defaults_setter.rb +72 -0
- data/lib/sequel/plugins/dirty.rb +214 -0
- data/lib/sequel/plugins/eager_each.rb +59 -0
- data/lib/sequel/plugins/force_encoding.rb +6 -6
- data/lib/sequel/plugins/hook_class_methods.rb +1 -1
- data/lib/sequel/plugins/identity_map.rb +134 -15
- data/lib/sequel/plugins/instance_filters.rb +10 -0
- data/lib/sequel/plugins/instance_hooks.rb +1 -1
- data/lib/sequel/plugins/json_serializer.rb +58 -6
- data/lib/sequel/plugins/list.rb +13 -2
- data/lib/sequel/plugins/many_through_many.rb +103 -51
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +71 -0
- data/lib/sequel/plugins/nested_attributes.rb +150 -66
- data/lib/sequel/plugins/optimistic_locking.rb +8 -0
- data/lib/sequel/plugins/pg_row.rb +121 -0
- data/lib/sequel/plugins/pg_typecast_on_load.rb +65 -0
- data/lib/sequel/plugins/prepared_statements.rb +167 -0
- data/lib/sequel/plugins/prepared_statements_associations.rb +87 -0
- data/lib/sequel/plugins/prepared_statements_safe.rb +82 -0
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +59 -0
- data/lib/sequel/plugins/rcte_tree.rb +31 -17
- data/lib/sequel/plugins/schema.rb +8 -3
- data/lib/sequel/plugins/serialization.rb +98 -49
- data/lib/sequel/plugins/serialization_modification_detection.rb +63 -0
- data/lib/sequel/plugins/sharding.rb +21 -54
- data/lib/sequel/plugins/single_table_inheritance.rb +5 -3
- data/lib/sequel/plugins/static_cache.rb +99 -0
- data/lib/sequel/plugins/subclasses.rb +29 -3
- data/lib/sequel/plugins/tactical_eager_loading.rb +7 -7
- data/lib/sequel/plugins/timestamps.rb +1 -1
- data/lib/sequel/plugins/tree.rb +3 -3
- data/lib/sequel/plugins/typecast_on_load.rb +9 -12
- data/lib/sequel/plugins/update_primary_key.rb +2 -2
- data/lib/sequel/plugins/validation_class_methods.rb +1 -1
- data/lib/sequel/plugins/validation_helpers.rb +55 -4
- data/lib/sequel/plugins/xml_serializer.rb +15 -4
- data/lib/sequel/sql.rb +649 -122
- data/lib/sequel/timezones.rb +67 -40
- data/lib/sequel/version.rb +1 -1
- data/spec/adapters/db2_spec.rb +146 -0
- data/spec/adapters/firebird_spec.rb +1 -1
- data/spec/adapters/mssql_spec.rb +194 -66
- data/spec/adapters/mysql_spec.rb +475 -306
- data/spec/adapters/oracle_spec.rb +92 -117
- data/spec/adapters/postgres_spec.rb +1982 -325
- data/spec/adapters/spec_helper.rb +9 -6
- data/spec/adapters/sqlite_spec.rb +203 -75
- data/spec/core/connection_pool_spec.rb +218 -93
- data/spec/core/database_spec.rb +956 -522
- data/spec/core/dataset_spec.rb +1631 -1242
- data/spec/core/expression_filters_spec.rb +690 -334
- data/spec/core/mock_adapter_spec.rb +453 -0
- data/spec/core/object_graph_spec.rb +88 -129
- data/spec/core/schema_generator_spec.rb +4 -4
- data/spec/core/schema_spec.rb +556 -53
- data/spec/core/spec_helper.rb +7 -48
- data/spec/core_extensions_spec.rb +626 -0
- data/spec/extensions/active_model_spec.rb +13 -0
- data/spec/extensions/arbitrary_servers_spec.rb +110 -0
- data/spec/extensions/association_autoreloading_spec.rb +18 -10
- data/spec/extensions/association_dependencies_spec.rb +15 -25
- data/spec/extensions/association_pks_spec.rb +66 -32
- data/spec/extensions/association_proxies_spec.rb +4 -4
- data/spec/extensions/boolean_readers_spec.rb +25 -25
- data/spec/extensions/caching_spec.rb +47 -51
- data/spec/extensions/class_table_inheritance_spec.rb +31 -83
- data/spec/extensions/columns_introspection_spec.rb +91 -0
- data/spec/extensions/composition_spec.rb +18 -13
- data/spec/extensions/constraint_validations_plugin_spec.rb +196 -0
- data/spec/extensions/constraint_validations_spec.rb +316 -0
- data/spec/extensions/dataset_associations_spec.rb +199 -0
- data/spec/extensions/defaults_setter_spec.rb +88 -0
- data/spec/extensions/dirty_spec.rb +155 -0
- data/spec/extensions/eager_each_spec.rb +34 -0
- data/spec/extensions/eval_inspect_spec.rb +67 -0
- data/spec/extensions/force_encoding_spec.rb +4 -2
- data/spec/extensions/hook_class_methods_spec.rb +97 -128
- data/spec/extensions/identity_map_spec.rb +142 -24
- data/spec/extensions/inflector_spec.rb +0 -4
- data/spec/extensions/instance_filters_spec.rb +11 -21
- data/spec/extensions/instance_hooks_spec.rb +72 -0
- data/spec/extensions/json_serializer_spec.rb +49 -12
- data/spec/extensions/lazy_attributes_spec.rb +16 -20
- data/spec/extensions/list_spec.rb +49 -40
- data/spec/extensions/looser_typecasting_spec.rb +7 -7
- data/spec/extensions/many_through_many_spec.rb +368 -254
- data/spec/extensions/many_to_one_pk_lookup_spec.rb +140 -0
- data/spec/extensions/migration_spec.rb +140 -35
- data/spec/extensions/named_timezones_spec.rb +29 -11
- data/spec/extensions/nested_attributes_spec.rb +268 -89
- data/spec/extensions/null_dataset_spec.rb +85 -0
- data/spec/extensions/optimistic_locking_spec.rb +24 -21
- data/spec/extensions/pg_array_ops_spec.rb +112 -0
- data/spec/extensions/pg_array_spec.rb +320 -0
- data/spec/extensions/pg_auto_parameterize_spec.rb +65 -0
- data/spec/extensions/pg_hstore_ops_spec.rb +140 -0
- data/spec/extensions/pg_hstore_spec.rb +194 -0
- data/spec/extensions/pg_inet_spec.rb +47 -0
- data/spec/extensions/pg_interval_spec.rb +72 -0
- data/spec/extensions/pg_json_spec.rb +99 -0
- data/spec/extensions/pg_range_ops_spec.rb +56 -0
- data/spec/extensions/pg_range_spec.rb +395 -0
- data/spec/extensions/pg_row_ops_spec.rb +58 -0
- data/spec/extensions/pg_row_plugin_spec.rb +49 -0
- data/spec/extensions/pg_row_spec.rb +323 -0
- data/spec/extensions/pg_statement_cache_spec.rb +208 -0
- data/spec/extensions/pg_typecast_on_load_spec.rb +58 -0
- data/spec/extensions/prepared_statements_associations_spec.rb +111 -0
- data/spec/extensions/prepared_statements_safe_spec.rb +61 -0
- data/spec/extensions/prepared_statements_spec.rb +87 -0
- data/spec/extensions/prepared_statements_with_pk_spec.rb +31 -0
- data/spec/extensions/pretty_table_spec.rb +7 -6
- data/spec/extensions/query_literals_spec.rb +167 -0
- data/spec/extensions/query_spec.rb +9 -3
- data/spec/extensions/rcte_tree_spec.rb +50 -43
- data/spec/extensions/schema_caching_spec.rb +41 -0
- data/spec/extensions/schema_dumper_spec.rb +434 -49
- data/spec/extensions/schema_spec.rb +30 -49
- data/spec/extensions/select_remove_spec.rb +38 -0
- data/spec/extensions/serialization_modification_detection_spec.rb +72 -0
- data/spec/extensions/serialization_spec.rb +86 -48
- data/spec/extensions/server_block_spec.rb +90 -0
- data/spec/extensions/sharding_spec.rb +69 -143
- data/spec/extensions/single_table_inheritance_spec.rb +23 -29
- data/spec/extensions/skip_create_refresh_spec.rb +1 -1
- data/spec/extensions/spec_helper.rb +34 -67
- data/spec/extensions/split_array_nil_spec.rb +24 -0
- data/spec/extensions/sql_expr_spec.rb +29 -60
- data/spec/extensions/static_cache_spec.rb +145 -0
- data/spec/extensions/subclasses_spec.rb +14 -0
- data/spec/extensions/tactical_eager_loading_spec.rb +17 -19
- data/spec/extensions/thread_local_timezones_spec.rb +22 -2
- data/spec/extensions/timestamps_spec.rb +6 -6
- data/spec/extensions/to_dot_spec.rb +8 -11
- data/spec/extensions/touch_spec.rb +13 -14
- data/spec/extensions/tree_spec.rb +11 -26
- data/spec/extensions/typecast_on_load_spec.rb +9 -6
- data/spec/extensions/update_primary_key_spec.rb +30 -24
- data/spec/extensions/validation_class_methods_spec.rb +58 -67
- data/spec/extensions/validation_helpers_spec.rb +31 -37
- data/spec/extensions/xml_serializer_spec.rb +29 -4
- data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +4 -0
- data/spec/files/transaction_specified_migrations/002_create_basic.rb +4 -0
- data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +3 -0
- data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +3 -0
- data/spec/integration/associations_test.rb +659 -21
- data/spec/integration/database_test.rb +11 -5
- data/spec/integration/dataset_test.rb +717 -129
- data/spec/integration/eager_loader_test.rb +38 -54
- data/spec/integration/migrator_test.rb +2 -3
- data/spec/integration/model_test.rb +81 -2
- data/spec/integration/plugin_test.rb +604 -147
- data/spec/integration/prepared_statement_test.rb +272 -128
- data/spec/integration/schema_test.rb +367 -57
- data/spec/integration/spec_helper.rb +42 -32
- data/spec/integration/timezone_test.rb +38 -12
- data/spec/integration/transaction_test.rb +183 -8
- data/spec/integration/type_test.rb +31 -8
- data/spec/model/association_reflection_spec.rb +207 -8
- data/spec/model/associations_spec.rb +1206 -693
- data/spec/model/base_spec.rb +334 -100
- data/spec/model/dataset_methods_spec.rb +45 -27
- data/spec/model/eager_loading_spec.rb +828 -692
- data/spec/model/hooks_spec.rb +355 -67
- data/spec/model/model_spec.rb +251 -179
- data/spec/model/plugins_spec.rb +24 -13
- data/spec/model/record_spec.rb +506 -232
- data/spec/model/spec_helper.rb +16 -77
- data/spec/model/validations_spec.rb +38 -2
- data/spec/rcov.opts +2 -0
- metadata +209 -80
- data/spec/core/core_sql_spec.rb +0 -451
data/doc/opening_databases.rdoc
CHANGED
|
@@ -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
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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
|
-
|
|
135
|
-
|
|
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
|
-
|
|
149
|
-
|
|
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
|
-
|
|
158
|
-
|
|
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,
|
|
225
|
-
jdbc-* gem, for
|
|
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
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
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
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
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
|
-
|
|
291
|
-
|
|
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
|
-
|
|
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
|
-
|
|
315
|
-
|
|
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
|
-
|
|
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 :
|
|
359
|
-
the Sequel :
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
:
|
|
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
|
|
6
|
+
the following adapters:
|
|
7
7
|
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
|
|
11
|
-
*
|
|
12
|
-
*
|
|
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
|
|
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].
|
|
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
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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
|
|
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.
|