sequel 3.21.0 → 3.36.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 +855 -3
- data/MIT-LICENSE +1 -1
- data/README.rdoc +23 -7
- data/Rakefile +42 -24
- data/bin/sequel +26 -8
- data/doc/active_record.rdoc +1 -0
- data/doc/advanced_associations.rdoc +171 -11
- data/doc/association_basics.rdoc +293 -43
- data/doc/dataset_basics.rdoc +5 -5
- data/doc/dataset_filtering.rdoc +8 -0
- data/doc/mass_assignment.rdoc +56 -0
- data/doc/migration.rdoc +85 -552
- data/doc/model_hooks.rdoc +78 -27
- data/doc/object_model.rdoc +541 -0
- data/doc/opening_databases.rdoc +97 -50
- data/doc/prepared_statements.rdoc +40 -14
- data/doc/querying.rdoc +28 -4
- data/doc/reflection.rdoc +30 -4
- 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/schema_modification.rdoc +572 -0
- data/doc/sharding.rdoc +95 -3
- data/doc/testing.rdoc +129 -0
- data/doc/thread_safety.rdoc +17 -0
- data/doc/transactions.rdoc +137 -0
- data/doc/virtual_rows.rdoc +51 -2
- 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 +1 -57
- 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 +47 -0
- data/lib/sequel/adapters/jdbc/derby.rb +287 -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 +29 -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 +58 -48
- 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 +265 -94
- data/lib/sequel/adapters/mock.rb +361 -0
- data/lib/sequel/adapters/mysql.rb +118 -222
- data/lib/sequel/adapters/mysql2.rb +58 -57
- data/lib/sequel/adapters/odbc/mssql.rb +15 -7
- 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 +356 -107
- data/lib/sequel/adapters/shared/access.rb +32 -9
- data/lib/sequel/adapters/shared/db2.rb +342 -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 +335 -118
- data/lib/sequel/adapters/shared/mysql.rb +340 -76
- data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +155 -0
- data/lib/sequel/adapters/shared/oracle.rb +243 -45
- data/lib/sequel/adapters/shared/postgres.rb +524 -279
- data/lib/sequel/adapters/shared/progress.rb +5 -8
- data/lib/sequel/adapters/shared/sqlite.rb +265 -89
- data/lib/sequel/adapters/sqlite.rb +101 -39
- data/lib/sequel/adapters/swift/mysql.rb +9 -12
- data/lib/sequel/adapters/swift/postgres.rb +9 -74
- data/lib/sequel/adapters/swift/sqlite.rb +8 -6
- data/lib/sequel/adapters/swift.rb +8 -7
- data/lib/sequel/adapters/tinytds.rb +161 -21
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +66 -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 +28 -2
- data/lib/sequel/connection_pool/single.rb +5 -0
- data/lib/sequel/connection_pool/threaded.rb +38 -14
- data/lib/sequel/connection_pool.rb +10 -2
- data/lib/sequel/core.rb +118 -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 +150 -46
- data/lib/sequel/database/query.rb +215 -65
- data/lib/sequel/database/schema_generator.rb +64 -20
- data/lib/sequel/database/schema_methods.rb +212 -54
- data/lib/sequel/dataset/actions.rb +322 -85
- data/lib/sequel/dataset/features.rb +96 -8
- data/lib/sequel/dataset/graph.rb +38 -11
- data/lib/sequel/dataset/misc.rb +50 -23
- data/lib/sequel/dataset/mutation.rb +12 -7
- data/lib/sequel/dataset/prepared_statements.rb +68 -30
- data/lib/sequel/dataset/query.rb +237 -44
- data/lib/sequel/dataset/sql.rb +698 -278
- data/lib/sequel/dataset.rb +8 -0
- data/lib/sequel/exceptions.rb +4 -0
- data/lib/sequel/extensions/_pretty_table.rb +79 -0
- data/lib/sequel/extensions/arbitrary_servers.rb +108 -0
- data/lib/sequel/extensions/columns_introspection.rb +61 -0
- data/lib/sequel/{core_sql.rb → extensions/core_extensions.rb} +16 -34
- data/lib/sequel/extensions/migration.rb +97 -11
- data/lib/sequel/extensions/named_timezones.rb +5 -0
- data/lib/sequel/extensions/null_dataset.rb +90 -0
- data/lib/sequel/extensions/pg_array.rb +460 -0
- data/lib/sequel/extensions/pg_array_ops.rb +220 -0
- data/lib/sequel/extensions/pg_auto_parameterize.rb +169 -0
- data/lib/sequel/extensions/pg_hstore.rb +296 -0
- data/lib/sequel/extensions/pg_hstore_ops.rb +259 -0
- data/lib/sequel/extensions/pg_inet.rb +89 -0
- data/lib/sequel/extensions/pg_json.rb +178 -0
- data/lib/sequel/extensions/pg_statement_cache.rb +316 -0
- data/lib/sequel/extensions/pretty_table.rb +5 -71
- data/lib/sequel/extensions/query.rb +1 -1
- 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 +251 -37
- data/lib/sequel/extensions/select_remove.rb +35 -0
- data/lib/sequel/extensions/server_block.rb +139 -0
- data/lib/sequel/extensions/sql_expr.rb +4 -110
- data/lib/sequel/extensions/thread_local_timezones.rb +1 -1
- data/lib/sequel/extensions/to_dot.rb +95 -83
- data/lib/sequel/model/associations.rb +1187 -393
- data/lib/sequel/model/base.rb +578 -170
- data/lib/sequel/model/errors.rb +1 -1
- data/lib/sequel/model/exceptions.rb +5 -1
- 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/dataset_associations.rb +100 -0
- data/lib/sequel/plugins/defaults_setter.rb +58 -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 +123 -8
- 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 +12 -2
- data/lib/sequel/plugins/many_through_many.rb +79 -28
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +71 -0
- data/lib/sequel/plugins/nested_attributes.rb +139 -63
- data/lib/sequel/plugins/optimistic_locking.rb +8 -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 +29 -15
- data/lib/sequel/plugins/schema.rb +7 -2
- 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 +10 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +7 -7
- data/lib/sequel/plugins/timestamps.rb +1 -1
- 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/xml_serializer.rb +15 -4
- data/lib/sequel/sql.rb +526 -59
- data/lib/sequel/timezones.rb +57 -38
- 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 +142 -40
- data/spec/adapters/mysql_spec.rb +380 -234
- data/spec/adapters/oracle_spec.rb +67 -77
- data/spec/adapters/postgres_spec.rb +1050 -212
- data/spec/adapters/spec_helper.rb +8 -5
- data/spec/adapters/sqlite_spec.rb +139 -27
- data/spec/core/connection_pool_spec.rb +196 -93
- data/spec/core/database_spec.rb +879 -510
- data/spec/core/dataset_spec.rb +1415 -1086
- data/spec/core/expression_filters_spec.rb +554 -109
- data/spec/core/mock_adapter_spec.rb +449 -0
- data/spec/core/object_graph_spec.rb +86 -114
- data/spec/core/schema_generator_spec.rb +4 -4
- data/spec/core/schema_spec.rb +482 -38
- data/spec/core/spec_helper.rb +6 -48
- 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/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/{core/core_sql_spec.rb → extensions/core_extensions_spec.rb} +119 -139
- data/spec/extensions/dataset_associations_spec.rb +199 -0
- data/spec/extensions/defaults_setter_spec.rb +64 -0
- data/spec/extensions/dirty_spec.rb +155 -0
- data/spec/extensions/eager_each_spec.rb +34 -0
- data/spec/extensions/force_encoding_spec.rb +4 -2
- data/spec/extensions/hook_class_methods_spec.rb +69 -92
- data/spec/extensions/identity_map_spec.rb +131 -22
- 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 -6
- data/spec/extensions/lazy_attributes_spec.rb +16 -20
- data/spec/extensions/list_spec.rb +48 -39
- data/spec/extensions/many_through_many_spec.rb +283 -250
- 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 +251 -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 +105 -0
- data/spec/extensions/pg_array_spec.rb +196 -0
- data/spec/extensions/pg_auto_parameterize_spec.rb +65 -0
- data/spec/extensions/pg_hstore_ops_spec.rb +136 -0
- data/spec/extensions/pg_hstore_spec.rb +195 -0
- data/spec/extensions/pg_inet_spec.rb +44 -0
- data/spec/extensions/pg_json_spec.rb +101 -0
- data/spec/extensions/pg_statement_cache_spec.rb +209 -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 +168 -0
- data/spec/extensions/query_spec.rb +6 -0
- 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 +429 -22
- data/spec/extensions/schema_spec.rb +25 -21
- 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 +85 -43
- 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 +22 -61
- data/spec/extensions/sql_expr_spec.rb +29 -60
- data/spec/extensions/static_cache_spec.rb +145 -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 +4 -7
- 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 +30 -51
- data/spec/extensions/validation_helpers_spec.rb +16 -35
- 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 +9 -3
- data/spec/integration/dataset_test.rb +605 -91
- data/spec/integration/eager_loader_test.rb +19 -21
- data/spec/integration/migrator_test.rb +2 -3
- data/spec/integration/model_test.rb +81 -2
- data/spec/integration/plugin_test.rb +454 -143
- data/spec/integration/prepared_statement_test.rb +263 -128
- data/spec/integration/schema_test.rb +309 -43
- data/spec/integration/spec_helper.rb +40 -30
- data/spec/integration/timezone_test.rb +38 -12
- data/spec/integration/transaction_test.rb +183 -8
- data/spec/integration/type_test.rb +18 -4
- data/spec/model/association_reflection_spec.rb +201 -7
- data/spec/model/associations_spec.rb +1067 -661
- data/spec/model/base_spec.rb +329 -95
- data/spec/model/dataset_methods_spec.rb +7 -27
- data/spec/model/eager_loading_spec.rb +677 -676
- data/spec/model/hooks_spec.rb +349 -67
- data/spec/model/model_spec.rb +240 -168
- data/spec/model/plugins_spec.rb +24 -13
- data/spec/model/record_spec.rb +490 -232
- data/spec/model/spec_helper.rb +14 -71
- data/spec/model/validations_spec.rb +11 -0
- data/spec/rcov.opts +2 -0
- metadata +178 -80
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, dbi, jdbc, odbc, 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:
|
|
@@ -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
|
|
@@ -221,7 +233,7 @@ Requires: java
|
|
|
221
233
|
Houses Sequel's JDBC support when running on JRuby.
|
|
222
234
|
Support for individual database types is done using sub adapters.
|
|
223
235
|
There are currently subadapters for PostgreSQL, MySQL, SQLite, H2,
|
|
224
|
-
Oracle, MSSQL, JTDS, and
|
|
236
|
+
Oracle, MSSQL, JTDS, AS400, and DB2. All except Oracle, MSSQL, AS400, and DB2 can load the
|
|
225
237
|
jdbc-* gem, for those you need to have the .jar in your CLASSPATH
|
|
226
238
|
or load the Java class manually before calling Sequel.connect.
|
|
227
239
|
|
|
@@ -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
|
|
|
@@ -353,16 +395,21 @@ Examples:
|
|
|
353
395
|
|
|
354
396
|
=== tinytds
|
|
355
397
|
|
|
398
|
+
Requires: tiny_tds
|
|
399
|
+
|
|
356
400
|
Because the underscore is not a valid character in a URI schema, the adapter
|
|
357
401
|
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
|
-
:
|
|
402
|
+
to tiny_tds, except that the tiny_tds :username option is set to
|
|
403
|
+
the Sequel :user option. If you want to use an entry in the freetds.conf file, you
|
|
404
|
+
should specify the :dataserver option with that name as the value. Some other
|
|
405
|
+
options that you may want to set are :login_timeout, :timeout, :tds_version, :azure,
|
|
406
|
+
:appname, and :encoding, see the tiny_tds README for details.
|
|
407
|
+
|
|
363
408
|
For highest performance, you should disable any identifier output method when
|
|
364
409
|
using the tinytds adapter, which probably means disabling any identifier input method
|
|
365
410
|
as well. The default for Microsoft SQL Server is to :downcase identifiers on output
|
|
366
411
|
and :upcase them on input, so the highest performance will require changing the setting
|
|
367
412
|
from the default.
|
|
368
413
|
|
|
414
|
+
The Sequel tinytds adapter requires tiny_tds >= 0.4.5, and if you are using FreeTDS
|
|
415
|
+
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, may require type specifiers)
|
|
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
|
|
|
@@ -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.
|
data/doc/querying.rdoc
CHANGED
|
@@ -167,17 +167,26 @@ It's also common to want to order such a map, so Sequel provides a
|
|
|
167
167
|
Sequel makes it easy to take an SQL query and return it as a ruby hash,
|
|
168
168
|
using the +to_hash+ method:
|
|
169
169
|
|
|
170
|
-
artist_names = Artist.to_hash(:
|
|
170
|
+
artist_names = Artist.to_hash(:id, :name)
|
|
171
171
|
# SELECT * FROM artists
|
|
172
|
-
=> {"YJM"
|
|
172
|
+
=> {1=>"YJM", 2=>"AS"}
|
|
173
173
|
|
|
174
174
|
As you can see, the +to_hash+ method uses the first symbol as the key
|
|
175
175
|
and the second symbol as the value. So if you swap the two arguments the hash
|
|
176
176
|
will have its keys and values transposed:
|
|
177
177
|
|
|
178
|
-
artist_names = Artist.to_hash(:
|
|
178
|
+
artist_names = Artist.to_hash(:name, :id)
|
|
179
179
|
# SELECT * FROM artists
|
|
180
|
-
=> {
|
|
180
|
+
=> {"YJM"=>1, "AS"=>2}
|
|
181
|
+
|
|
182
|
+
Now what if you have multiple values for the same key? By default, +to_hash+
|
|
183
|
+
will just have the last matching value. If you care about all matching values,
|
|
184
|
+
use +to_hash_groups+, which makes the values of the array an array of matching
|
|
185
|
+
values, in the order they were received:
|
|
186
|
+
|
|
187
|
+
artist_names = Artist.to_hash_groups(:name, :id)
|
|
188
|
+
# SELECT * FROM artists
|
|
189
|
+
=> {"YJM"=>[1, 10, ...], "AS"=>[2, 20, ...]}
|
|
181
190
|
|
|
182
191
|
If you only provide one argument to +to_hash+, it uses the entire hash
|
|
183
192
|
or model object as the value:
|
|
@@ -186,6 +195,12 @@ or model object as the value:
|
|
|
186
195
|
# SELECT * FROM artists
|
|
187
196
|
=> {"YJM"=>{:id=>1, :name=>"YJM"}, "AS"=>{:id=>2, :name=>"AS"}}
|
|
188
197
|
|
|
198
|
+
and +to_hash_groups+ works similarly:
|
|
199
|
+
|
|
200
|
+
artist_names = DB[:artists].to_hash_groups(:name)
|
|
201
|
+
# SELECT * FROM artists
|
|
202
|
+
=> {"YJM"=>[{:id=>1, :name=>"YJM"}, {:id=>10, :name=>"YJM"}], ...}
|
|
203
|
+
|
|
189
204
|
Model datasets have a +to_hash+ method that can be called without any
|
|
190
205
|
arguments, in which case it will use the primary key as the key and
|
|
191
206
|
the model object as the value. This can be used to easily create an
|
|
@@ -196,6 +211,9 @@ identity map:
|
|
|
196
211
|
=> {1=>#<Artist @values={:id=>1, :name=>"YGM"}>,
|
|
197
212
|
2=>#<Artist @values={:id=>2, :name=>"AS"}>}
|
|
198
213
|
|
|
214
|
+
There is no equivalent handling to +to_hash_groups+, since there would
|
|
215
|
+
only be one matching record, as the primary key must be unique.
|
|
216
|
+
|
|
199
217
|
Note that +to_hash+ never modifies the columns selected. However, just
|
|
200
218
|
like Sequel has a +select_map+ method to modify the columns selected and
|
|
201
219
|
return an array, Sequel also has a +select_hash+ method to modify the
|
|
@@ -205,6 +223,12 @@ columns selected and return a hash:
|
|
|
205
223
|
# SELECT name, id FROM artists
|
|
206
224
|
=> {"YJM"=>1, "AS"=>2}
|
|
207
225
|
|
|
226
|
+
Likewise, +select_hash_groups+ also exists:
|
|
227
|
+
|
|
228
|
+
artist_names = Artist.select_hash_groups(:name, :id)
|
|
229
|
+
# SELECT name, id FROM artists
|
|
230
|
+
=> {"YJM"=>[1, 10, ...], "AS"=>[2, 20, ...]}
|
|
231
|
+
|
|
208
232
|
== Modifying datasets
|
|
209
233
|
|
|
210
234
|
Note that the retrieval methods discussed above just return
|
data/doc/reflection.rdoc
CHANGED
|
@@ -4,9 +4,9 @@ Sequel supports reflection information in multiple ways.
|
|
|
4
4
|
|
|
5
5
|
== Adapter in Use
|
|
6
6
|
|
|
7
|
-
You can get the adapter in use using Database
|
|
7
|
+
You can get the adapter in use using Database#adapter_scheme:
|
|
8
8
|
|
|
9
|
-
DB.
|
|
9
|
+
DB.adapter_scheme # e.g. :postgres, :jdbc, :odbc
|
|
10
10
|
|
|
11
11
|
== Database Connected To
|
|
12
12
|
|
|
@@ -16,18 +16,44 @@ In some cases, the adapter scheme will be the same as the database to which you
|
|
|
16
16
|
|
|
17
17
|
== Tables in the Database
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
Database#tables gives an array of table name symbols:
|
|
20
20
|
|
|
21
21
|
DB.tables # [:table1, :table2, :table3, ...]
|
|
22
22
|
|
|
23
|
+
== Views in the Database
|
|
24
|
+
|
|
25
|
+
Database#views and gives an array of view name symbols:
|
|
26
|
+
|
|
27
|
+
DB.views # [:view1, :view2, :view3, ...]
|
|
28
|
+
|
|
23
29
|
== Indexes on a table
|
|
24
30
|
|
|
25
|
-
|
|
31
|
+
Database#indexes takes a table name gives a hash of index information. Keys are index names, values are subhashes with the keys :columns and :unique :
|
|
26
32
|
|
|
27
33
|
DB.indexes(:table1) # {:index1=>{:columns=>[:column1], :unique=>false}, :index2=>{:columns=>[:column2, :column3], :unique=>true}}
|
|
28
34
|
|
|
29
35
|
Index information generally does not include partial indexes, functional indexes, or indexes on the primary key of the table.
|
|
30
36
|
|
|
37
|
+
== Foreign Key Information for a Table
|
|
38
|
+
|
|
39
|
+
Database#foreign_key_list takes a table name and gives an array of hashes of foreign key information:
|
|
40
|
+
|
|
41
|
+
DB.foreign_key_list(:table1) # [{:columns=>[:column1], :table=>:referenced_table, :key=>[:referenced_column1]}]
|
|
42
|
+
|
|
43
|
+
At least the following entries will be present in the hash:
|
|
44
|
+
|
|
45
|
+
:columns :: An array of columns in the given table
|
|
46
|
+
:table :: The table referenced by the columns
|
|
47
|
+
:key :: An array of columns referenced (in the table specified by :table), but can be nil on certain adapters
|
|
48
|
+
if the primary key is referenced.
|
|
49
|
+
|
|
50
|
+
The hash may also contain entries for:
|
|
51
|
+
|
|
52
|
+
:deferrable :: Whether the constraint is deferrable
|
|
53
|
+
:name :: The name of the constraint
|
|
54
|
+
:on_delete :: The action to take ON DELETE
|
|
55
|
+
:on_update :: The action to take ON UPDATE
|
|
56
|
+
|
|
31
57
|
== Column Information for a Table
|
|
32
58
|
|
|
33
59
|
Database#schema takes a table symbol and returns column information in an array with each element being an array with two elements. The first elements of the subarray is a column symbol, and the second element is a hash of information about that column. The hash should include the following keys:
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
= New Features
|
|
2
|
+
|
|
3
|
+
* Support COLLATE in column definitions. At least MySQL and Microsoft
|
|
4
|
+
SQL Server support them, and PostgreSQL 9.1 should as well.
|
|
5
|
+
|
|
6
|
+
* When connecting to Microsoft SQL Server, you can use the
|
|
7
|
+
mssql_unicode_strings accessor to turn of the default usage
|
|
8
|
+
of unicode strings (N'') and use regular strings (''). This
|
|
9
|
+
can improve performance, but changes the behavior. It's
|
|
10
|
+
set to true by default for backwards compatibility. You can
|
|
11
|
+
change it at both the dataset and database level:
|
|
12
|
+
|
|
13
|
+
DB.mssql_unicode_strings = false # default for datasets
|
|
14
|
+
dataset.mssql_unicode_strings = false # just this dataset
|
|
15
|
+
|
|
16
|
+
* In the oracle adapter, if Sequel.application_timezone is :utc, set
|
|
17
|
+
the timezone for the connection to use the 00:00 timezone.
|
|
18
|
+
|
|
19
|
+
= Other Improvements
|
|
20
|
+
|
|
21
|
+
* In the single_table_inheritance plugin, correctly handle a
|
|
22
|
+
multi-level class hierarchy so that loading instances from a
|
|
23
|
+
middle level of the hierarchy can return instances of subclasses.
|
|
24
|
+
|
|
25
|
+
* Don't use a schema when creating a temporary table, even if
|
|
26
|
+
default_schema is set.
|
|
27
|
+
|
|
28
|
+
* Fix the migrator when a default_schema is used.
|
|
29
|
+
|
|
30
|
+
* In the ado adapter, assume a connection to SQL Server if the
|
|
31
|
+
:conn_string is given and doesn't indicate Access/Jet.
|
|
32
|
+
|
|
33
|
+
* Fix fetching rows in the tinytds adapter when the
|
|
34
|
+
identifier_output_method is nil.
|
|
35
|
+
|
|
36
|
+
* The tinytds adapter now checks for disconnect errors, but it might
|
|
37
|
+
not be reliable until the next release of tiny_tds.
|
|
38
|
+
|
|
39
|
+
* The odbc adapter now handles ODBC::Time instances correctly.
|