sequel 3.21.0 → 3.41.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 +1131 -3
- data/MIT-LICENSE +1 -1
- data/README.rdoc +106 -65
- data/Rakefile +59 -27
- data/bin/sequel +50 -26
- data/doc/active_record.rdoc +68 -52
- data/doc/advanced_associations.rdoc +201 -75
- data/doc/association_basics.rdoc +327 -79
- data/doc/bin_sequel.rdoc +144 -0
- 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 +576 -0
- data/doc/opening_databases.rdoc +121 -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/release_notes/3.40.0.txt +73 -0
- data/doc/release_notes/3.41.0.txt +155 -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/access.rb +334 -0
- data/lib/sequel/adapters/ado/mssql.rb +18 -12
- data/lib/sequel/adapters/ado.rb +69 -21
- data/lib/sequel/adapters/amalgalite.rb +17 -14
- data/lib/sequel/adapters/cubrid.rb +143 -0
- data/lib/sequel/adapters/db2.rb +178 -85
- data/lib/sequel/adapters/dbi.rb +19 -21
- 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 +20 -39
- data/lib/sequel/adapters/firebird.rb +33 -210
- data/lib/sequel/adapters/ibmdb.rb +452 -0
- data/lib/sequel/adapters/informix.rb +6 -29
- data/lib/sequel/adapters/jdbc/as400.rb +16 -34
- data/lib/sequel/adapters/jdbc/cubrid.rb +52 -0
- data/lib/sequel/adapters/jdbc/db2.rb +78 -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 +68 -31
- data/lib/sequel/adapters/jdbc/hsqldb.rb +189 -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 +16 -28
- 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 +72 -0
- data/lib/sequel/adapters/jdbc/transactions.rb +83 -0
- data/lib/sequel/adapters/jdbc.rb +308 -114
- data/lib/sequel/adapters/mock.rb +372 -0
- data/lib/sequel/adapters/mysql.rb +130 -230
- data/lib/sequel/adapters/mysql2.rb +64 -63
- data/lib/sequel/adapters/odbc/mssql.rb +17 -9
- data/lib/sequel/adapters/odbc.rb +29 -10
- data/lib/sequel/adapters/openbase.rb +7 -11
- data/lib/sequel/adapters/oracle.rb +364 -57
- data/lib/sequel/adapters/postgres.rb +379 -145
- data/lib/sequel/adapters/shared/access.rb +236 -11
- data/lib/sequel/adapters/shared/cubrid.rb +216 -0
- data/lib/sequel/adapters/shared/db2.rb +353 -0
- data/lib/sequel/adapters/shared/firebird.rb +231 -0
- data/lib/sequel/adapters/shared/informix.rb +53 -0
- data/lib/sequel/adapters/shared/mssql.rb +412 -116
- data/lib/sequel/adapters/shared/mysql.rb +396 -89
- data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +166 -0
- data/lib/sequel/adapters/shared/oracle.rb +262 -45
- data/lib/sequel/adapters/shared/postgres.rb +688 -279
- data/lib/sequel/adapters/shared/progress.rb +5 -8
- data/lib/sequel/adapters/shared/sqlite.rb +317 -96
- data/lib/sequel/adapters/sqlite.rb +109 -46
- 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 +31 -27
- data/lib/sequel/adapters/tinytds.rb +177 -25
- 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/split_alter_table.rb +36 -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 +23 -13
- data/lib/sequel/connection_pool/sharded_threaded.rb +64 -13
- data/lib/sequel/connection_pool/single.rb +11 -3
- data/lib/sequel/connection_pool/threaded.rb +69 -20
- data/lib/sequel/connection_pool.rb +20 -18
- data/lib/sequel/core.rb +143 -11
- data/lib/sequel/database/connecting.rb +66 -29
- 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 +192 -51
- data/lib/sequel/database/query.rb +299 -114
- data/lib/sequel/database/schema_generator.rb +103 -36
- data/lib/sequel/database/schema_methods.rb +310 -69
- 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 +322 -68
- data/lib/sequel/dataset/sql.rb +716 -293
- 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/connection_validator.rb +109 -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 +539 -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 +334 -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 +212 -0
- data/lib/sequel/extensions/pg_range.rb +513 -0
- data/lib/sequel/extensions/pg_range_ops.rb +150 -0
- data/lib/sequel/extensions/pg_row.rb +576 -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 +137 -16
- 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 +77 -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 +168 -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 +57 -12
- 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/touch.rb +18 -6
- 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 +2 -1
- data/lib/sequel/plugins/validation_helpers.rb +57 -4
- data/lib/sequel/plugins/xml_serializer.rb +15 -4
- data/lib/sequel/sql.rb +721 -141
- 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 +53 -39
- data/spec/adapters/mssql_spec.rb +261 -66
- data/spec/adapters/mysql_spec.rb +597 -352
- data/spec/adapters/oracle_spec.rb +92 -117
- data/spec/adapters/postgres_spec.rb +2103 -341
- data/spec/adapters/spec_helper.rb +16 -6
- data/spec/adapters/sqlite_spec.rb +237 -76
- data/spec/core/connection_pool_spec.rb +270 -141
- data/spec/core/database_spec.rb +980 -524
- data/spec/core/dataset_spec.rb +1658 -1243
- data/spec/core/expression_filters_spec.rb +741 -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 +227 -33
- 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/connection_validator_spec.rb +118 -0
- 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 +324 -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 +200 -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 +340 -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 +65 -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 +53 -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 +77 -68
- data/spec/extensions/validation_helpers_spec.rb +48 -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 +25 -5
- data/spec/integration/dataset_test.rb +729 -141
- 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 +871 -160
- data/spec/integration/prepared_statement_test.rb +272 -128
- data/spec/integration/schema_test.rb +377 -57
- data/spec/integration/spec_helper.rb +49 -32
- data/spec/integration/timezone_test.rb +38 -12
- data/spec/integration/transaction_test.rb +183 -8
- data/spec/integration/type_test.rb +40 -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 +223 -81
- 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
|
|
|
@@ -141,21 +148,25 @@ Without a database argument, assumes a memory database, so you can do:
|
|
|
141
148
|
Handles paths in the connection string similar to the SQLite adapter, so see
|
|
142
149
|
the sqlite section below for details.
|
|
143
150
|
|
|
151
|
+
=== cubrid
|
|
152
|
+
|
|
153
|
+
cubrid is a ruby extension for accessing a CUBRID database. Currently,
|
|
154
|
+
the ruby cubrid gem is in fairly rough state, with broken transaction
|
|
155
|
+
support and some other issues, but most things work.
|
|
156
|
+
|
|
144
157
|
=== db2
|
|
145
158
|
|
|
146
159
|
Requires: db2/db2cli
|
|
147
160
|
|
|
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.
|
|
161
|
+
This is the older DB2 adapter. It's recommended you try the ibmdb adapter
|
|
162
|
+
instead for new DB2 work, as it is better supported.
|
|
152
163
|
|
|
153
164
|
=== dbi
|
|
154
165
|
|
|
155
166
|
Allows access to a multitude of databases via ruby-dbi. Additional options:
|
|
156
167
|
|
|
157
|
-
|
|
158
|
-
|
|
168
|
+
:db_type :: Specifying 'mssql' allows Microsoft SQL Server specific syntax to
|
|
169
|
+
be used. Otherwise has no effect.
|
|
159
170
|
|
|
160
171
|
DBI connection strings are a preprocessed a bit, and are specified with a dbi-
|
|
161
172
|
in front of the protocol. Examples:
|
|
@@ -187,7 +198,7 @@ be faster than the other adapters.
|
|
|
187
198
|
Similar to the JDBC adapter, the DO adapter only cares about connection strings,
|
|
188
199
|
which can either be the String argument given to Sequel.connect directly or contained
|
|
189
200
|
in a :uri or :url option. The DO adapter passes through the connection string
|
|
190
|
-
directly to DataObjects, it does no processing of it.
|
|
201
|
+
directly to DataObjects, it does no processing of it (other than removing the do: prefix).
|
|
191
202
|
|
|
192
203
|
Connection string examples:
|
|
193
204
|
|
|
@@ -201,6 +212,13 @@ Requires: fb (using code at http://github.com/wishdev/fb)
|
|
|
201
212
|
|
|
202
213
|
Does not support the :port option.
|
|
203
214
|
|
|
215
|
+
=== ibmdb
|
|
216
|
+
|
|
217
|
+
requires 'ibm_db'
|
|
218
|
+
|
|
219
|
+
This connects to DB2 using IBM_DB. This is the recommended adapter if you are
|
|
220
|
+
using a C-based ruby to connect to DB2.
|
|
221
|
+
|
|
204
222
|
=== informix
|
|
205
223
|
|
|
206
224
|
Does not support the :host or :port options. Depending on the configuration of your server
|
|
@@ -220,9 +238,9 @@ Requires: java
|
|
|
220
238
|
|
|
221
239
|
Houses Sequel's JDBC support when running on JRuby.
|
|
222
240
|
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
|
|
241
|
+
There are currently subadapters for PostgreSQL, MySQL, SQLite, H2, HSQLDB, Derby,
|
|
242
|
+
Oracle, MSSQL, JTDS, AS400, Progress, Firebird, Informix, and DB2. For PostgreSQL, MySQL, SQLite, H2, Derby,
|
|
243
|
+
and JTDS, this can use the jdbc-* gem, for the others you need to have the .jar in your CLASSPATH
|
|
226
244
|
or load the Java class manually before calling Sequel.connect.
|
|
227
245
|
|
|
228
246
|
You just use the JDBC connection string directly, which can be specified
|
|
@@ -246,37 +264,55 @@ Example connection strings:
|
|
|
246
264
|
jdbc:postgresql://localhost/database?user=username
|
|
247
265
|
jdbc:mysql://localhost/test?user=root&password=root
|
|
248
266
|
jdbc:h2:mem:
|
|
267
|
+
jdbc:hsqldb:mem:mymemdb
|
|
268
|
+
jdbc:derby:memory:myDb;create=true
|
|
249
269
|
jdbc:sqlserver://localhost;database=sequel_test;integratedSecurity=true
|
|
250
270
|
jdbc:jtds:sqlserver://localhost/sequel_test;user=sequel_test;password=sequel_test
|
|
251
|
-
|
|
271
|
+
jdbc:oracle:thin:user/password@localhost:1521:database
|
|
272
|
+
jdbc:db2://localhost:3700/database:user=user;password=password;
|
|
273
|
+
jdbc:firebirdsql:localhost/3050:/path/to/database.fdb
|
|
274
|
+
jdbc:jdbcprogress:T:hostname:port:database
|
|
275
|
+
jdbc:cubrid:hostname:port:database:::
|
|
276
|
+
|
|
252
277
|
You can also use JNDI connection strings:
|
|
253
278
|
|
|
254
279
|
jdbc:jndi:java:comp/env/jndi_resource_name
|
|
255
280
|
|
|
256
281
|
The following additional options are supported:
|
|
257
282
|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
283
|
+
:convert_types :: If set to false, does not attempt to convert some Java types to ruby types.
|
|
284
|
+
Setting to false roughly doubles performance when selecting large numbers of rows.
|
|
285
|
+
Note that you can't provide this option inside the connection string (as that is passed
|
|
286
|
+
directly to JDBC), you have to pass it as a separate option.
|
|
287
|
+
:login_timeout :: Set the login timeout on the JDBC connection (in seconds).
|
|
262
288
|
|
|
263
289
|
=== mysql
|
|
264
290
|
|
|
291
|
+
Requires: mysqlplus (or mysql if mysqlplus is not available)
|
|
292
|
+
|
|
265
293
|
The MySQL adapter does not support the pure-ruby MySQL adapter that used to ship with
|
|
266
294
|
ActiveRecord, it requires the native adapter.
|
|
267
295
|
|
|
268
296
|
The following additional options are supported:
|
|
269
297
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
298
|
+
:auto_is_null :: If set to true, makes "WHERE primary_key IS NULL" select the last inserted id.
|
|
299
|
+
:charset :: Same as :encoding, :encoding takes precedence.
|
|
300
|
+
:compress :: Whether to compress data sent/received via the socket connection.
|
|
301
|
+
:config_default_group :: The default group to read from the in the MySQL config file.
|
|
302
|
+
:config_local_infile :: If provided, sets the Mysql::OPT_LOCAL_INFILE option on the connection with the given value.
|
|
303
|
+
:encoding :: Specify the encoding/character set to use for the connection.
|
|
304
|
+
:socket :: Can be used to specify a Unix socket file to connect to instead of a TCP host and port.
|
|
305
|
+
:sql_mode :: Set the sql_mode(s) for a given connection. Can be single symbol or string,
|
|
306
|
+
or an array of symbols or strings (e.g. <tt>:sql_mode=>[:no_zero_date, :pipes_as_concat]</tt>).
|
|
307
|
+
:timeout :: Sets the wait_timeout for the connection, defaults to 1 month.
|
|
308
|
+
:read_timeout :: Set the timeout in seconds for reading back results to a query.
|
|
309
|
+
:connect_timeout :: Set the timeout in seconds before a connection attempt is abandoned.
|
|
310
|
+
|
|
311
|
+
=== mysql2
|
|
312
|
+
|
|
313
|
+
This is a newer MySQL adapter that does typecasting in C, so it is often faster than the
|
|
314
|
+
mysql adapter. Supports the same additional options as the mysql adapter, except for :compress, and uses
|
|
315
|
+
:timeout instead of :read_timeout and :connect_timeout.
|
|
280
316
|
|
|
281
317
|
=== odbc
|
|
282
318
|
|
|
@@ -287,8 +323,8 @@ The :database option given ODBC database should be the DSN (Descriptive Service
|
|
|
287
323
|
|
|
288
324
|
The :host and :port options are not respected. The following additional options are supported:
|
|
289
325
|
|
|
290
|
-
|
|
291
|
-
|
|
326
|
+
:db_type :: Can be specified as 'mssql' or 'progress' to use SQL syntax specific to those databases.
|
|
327
|
+
:driver :: The name of the ODBC driver to utilize.
|
|
292
328
|
|
|
293
329
|
=== openbase
|
|
294
330
|
|
|
@@ -300,7 +336,11 @@ Requires: oci8
|
|
|
300
336
|
|
|
301
337
|
The following additional options are supported:
|
|
302
338
|
|
|
303
|
-
|
|
339
|
+
:autosequence :: Set to true to use Sequel's conventions to guess the sequence to use for datasets. False
|
|
340
|
+
by default.
|
|
341
|
+
:prefetch_rows :: The number of rows to prefetch. Defaults to 1, a larger number can be specified
|
|
342
|
+
and will improve performance when retrieving a large number of rows.
|
|
343
|
+
:privilege :: The Oracle privilege level.
|
|
304
344
|
|
|
305
345
|
=== postgres
|
|
306
346
|
|
|
@@ -308,14 +348,23 @@ Requires: pg (or postgres if pg is not available)
|
|
|
308
348
|
|
|
309
349
|
The Sequel postgres adapter works with the pg, postgres, and postgres-pr ruby libraries.
|
|
310
350
|
The pg library is the best supported, as it supports real bound variables and prepared statements.
|
|
351
|
+
If the pg library is being used, Sequel will also attempt to load the sequel_pg library, which is
|
|
352
|
+
a C extension that optimizes performance when Sequel is used with pg. All users of Sequel who
|
|
353
|
+
use pg are encouraged to install sequel_pg.
|
|
311
354
|
|
|
312
355
|
The following additional options are supported:
|
|
313
356
|
|
|
314
|
-
|
|
315
|
-
|
|
357
|
+
:charset :: Same as :encoding, :encoding takes precedence
|
|
358
|
+
:encoding :: Set the client_encoding to the given string
|
|
359
|
+
:connect_timeout :: Set the number of seconds to wait for a connection (default 20, only respected
|
|
360
|
+
if using the pg library).
|
|
361
|
+
:sslmode :: Set to 'disable', 'allow', 'prefer', 'require' to choose how to treat SSL (only
|
|
362
|
+
respected if using the pg library)
|
|
316
363
|
|
|
317
364
|
=== sqlite
|
|
318
365
|
|
|
366
|
+
Requires: sqlite3
|
|
367
|
+
|
|
319
368
|
As SQLite is a file-based database, the :host and :port options are ignored, and
|
|
320
369
|
the :database option should be a path to the file.
|
|
321
370
|
|
|
@@ -337,7 +386,7 @@ Examples:
|
|
|
337
386
|
|
|
338
387
|
The following additional options are supported:
|
|
339
388
|
|
|
340
|
-
|
|
389
|
+
:timeout :: the busy timeout to use in milliseconds (default: 5000).
|
|
341
390
|
|
|
342
391
|
=== swift
|
|
343
392
|
|
|
@@ -345,6 +394,12 @@ swift is a ruby 1.9 only library, so you'll need to be running ruby 1.9. It
|
|
|
345
394
|
can connect to SQLite, MySQL, and PostgreSQL, and you must specify which
|
|
346
395
|
database using the db_type option.
|
|
347
396
|
|
|
397
|
+
You need to install one of the swift db adapters
|
|
398
|
+
|
|
399
|
+
* swift-db-sqlite3
|
|
400
|
+
* swift-db-mysql
|
|
401
|
+
* swift-db-postgres
|
|
402
|
+
|
|
348
403
|
Examples:
|
|
349
404
|
|
|
350
405
|
swift:///?database=:memory:&db_type=sqlite
|
|
@@ -353,16 +408,29 @@ Examples:
|
|
|
353
408
|
|
|
354
409
|
=== tinytds
|
|
355
410
|
|
|
411
|
+
Requires: tiny_tds
|
|
412
|
+
|
|
356
413
|
Because the underscore is not a valid character in a URI schema, the adapter
|
|
357
414
|
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
|
-
:
|
|
415
|
+
to tiny_tds, except that the tiny_tds :username option is set to
|
|
416
|
+
the Sequel :user option. If you want to use an entry in the freetds.conf file, you
|
|
417
|
+
should specify the :dataserver option with that name as the value. Some other
|
|
418
|
+
options that you may want to set are :login_timeout, :timeout, :tds_version, :azure,
|
|
419
|
+
:appname, and :encoding, see the tiny_tds README for details.
|
|
420
|
+
|
|
421
|
+
Other Sequel specific options:
|
|
422
|
+
|
|
423
|
+
:textsize :: Override the default TEXTSIZE setting for this connection. The FreeTDS
|
|
424
|
+
default is small (around 64000 bytes), but can be set up to around 2GB.
|
|
425
|
+
This should be specified as an integer. If you plan on setting large
|
|
426
|
+
text or blob values via tinytds, you should use this option or modify
|
|
427
|
+
your freetds.conf file.
|
|
428
|
+
|
|
363
429
|
For highest performance, you should disable any identifier output method when
|
|
364
430
|
using the tinytds adapter, which probably means disabling any identifier input method
|
|
365
431
|
as well. The default for Microsoft SQL Server is to :downcase identifiers on output
|
|
366
432
|
and :upcase them on input, so the highest performance will require changing the setting
|
|
367
433
|
from the default.
|
|
368
434
|
|
|
435
|
+
The Sequel tinytds adapter requires tiny_tds >= 0.4.5, and if you are using FreeTDS
|
|
436
|
+
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.
|