sequel 5.6.0 → 5.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +30 -5099
- data/Rakefile +1 -1
- data/doc/opening_databases.rdoc +0 -2
- data/doc/postgresql.rdoc +31 -0
- data/doc/querying.rdoc +2 -2
- data/doc/release_notes/5.7.0.txt +108 -0
- data/doc/testing.rdoc +1 -0
- data/lib/sequel/adapters/jdbc/derby.rb +1 -1
- data/lib/sequel/adapters/jdbc/oracle.rb +11 -0
- data/lib/sequel/adapters/postgres.rb +1 -0
- data/lib/sequel/adapters/shared/postgres.rb +117 -13
- data/lib/sequel/connection_pool/sharded_threaded.rb +7 -6
- data/lib/sequel/connection_pool/threaded.rb +6 -6
- data/lib/sequel/core.rb +20 -0
- data/lib/sequel/database/logging.rb +3 -2
- data/lib/sequel/database/schema_generator.rb +1 -2
- data/lib/sequel/dataset/actions.rb +15 -5
- data/lib/sequel/extensions/connection_expiration.rb +3 -3
- data/lib/sequel/extensions/connection_validator.rb +3 -3
- data/lib/sequel/extensions/integer64.rb +30 -0
- data/lib/sequel/extensions/migration.rb +2 -3
- data/lib/sequel/plugins/pg_array_associations.rb +5 -3
- data/lib/sequel/plugins/validate_associated.rb +18 -0
- data/lib/sequel/version.rb +1 -1
- data/spec/adapters/mssql_spec.rb +6 -6
- data/spec/adapters/mysql_spec.rb +1 -1
- data/spec/adapters/oracle_spec.rb +15 -1
- data/spec/adapters/postgres_spec.rb +78 -1
- data/spec/adapters/spec_helper.rb +3 -1
- data/spec/bin_spec.rb +1 -0
- data/spec/core/dataset_spec.rb +10 -0
- data/spec/extensions/integer64_spec.rb +22 -0
- data/spec/extensions/pg_array_associations_spec.rb +14 -2
- data/spec/extensions/spec_helper.rb +1 -0
- data/spec/integration/associations_test.rb +4 -4
- data/spec/integration/dataset_test.rb +2 -0
- data/spec/integration/spec_helper.rb +5 -11
- data/spec/model/spec_helper.rb +1 -0
- metadata +35 -165
- data/doc/release_notes/1.0.txt +0 -38
- data/doc/release_notes/1.1.txt +0 -143
- data/doc/release_notes/1.3.txt +0 -101
- data/doc/release_notes/1.4.0.txt +0 -53
- data/doc/release_notes/1.5.0.txt +0 -155
- data/doc/release_notes/2.0.0.txt +0 -298
- data/doc/release_notes/2.1.0.txt +0 -271
- data/doc/release_notes/2.10.0.txt +0 -328
- data/doc/release_notes/2.11.0.txt +0 -215
- data/doc/release_notes/2.12.0.txt +0 -534
- data/doc/release_notes/2.2.0.txt +0 -253
- data/doc/release_notes/2.3.0.txt +0 -88
- data/doc/release_notes/2.4.0.txt +0 -106
- data/doc/release_notes/2.5.0.txt +0 -137
- data/doc/release_notes/2.6.0.txt +0 -157
- data/doc/release_notes/2.7.0.txt +0 -166
- data/doc/release_notes/2.8.0.txt +0 -171
- data/doc/release_notes/2.9.0.txt +0 -97
- data/doc/release_notes/3.0.0.txt +0 -221
- data/doc/release_notes/3.1.0.txt +0 -406
- data/doc/release_notes/3.10.0.txt +0 -286
- data/doc/release_notes/3.11.0.txt +0 -254
- data/doc/release_notes/3.12.0.txt +0 -304
- data/doc/release_notes/3.13.0.txt +0 -210
- data/doc/release_notes/3.14.0.txt +0 -118
- data/doc/release_notes/3.15.0.txt +0 -78
- data/doc/release_notes/3.16.0.txt +0 -45
- data/doc/release_notes/3.17.0.txt +0 -58
- data/doc/release_notes/3.18.0.txt +0 -120
- data/doc/release_notes/3.19.0.txt +0 -67
- data/doc/release_notes/3.2.0.txt +0 -268
- data/doc/release_notes/3.20.0.txt +0 -41
- data/doc/release_notes/3.21.0.txt +0 -87
- data/doc/release_notes/3.22.0.txt +0 -39
- data/doc/release_notes/3.23.0.txt +0 -172
- data/doc/release_notes/3.24.0.txt +0 -420
- data/doc/release_notes/3.25.0.txt +0 -88
- data/doc/release_notes/3.26.0.txt +0 -88
- data/doc/release_notes/3.27.0.txt +0 -82
- data/doc/release_notes/3.28.0.txt +0 -304
- data/doc/release_notes/3.29.0.txt +0 -459
- data/doc/release_notes/3.3.0.txt +0 -192
- data/doc/release_notes/3.30.0.txt +0 -135
- data/doc/release_notes/3.31.0.txt +0 -146
- data/doc/release_notes/3.32.0.txt +0 -202
- data/doc/release_notes/3.33.0.txt +0 -157
- data/doc/release_notes/3.34.0.txt +0 -671
- data/doc/release_notes/3.35.0.txt +0 -144
- data/doc/release_notes/3.36.0.txt +0 -245
- data/doc/release_notes/3.37.0.txt +0 -338
- data/doc/release_notes/3.38.0.txt +0 -234
- data/doc/release_notes/3.39.0.txt +0 -237
- data/doc/release_notes/3.4.0.txt +0 -325
- data/doc/release_notes/3.40.0.txt +0 -73
- data/doc/release_notes/3.41.0.txt +0 -155
- data/doc/release_notes/3.42.0.txt +0 -74
- data/doc/release_notes/3.43.0.txt +0 -105
- data/doc/release_notes/3.44.0.txt +0 -152
- data/doc/release_notes/3.45.0.txt +0 -179
- data/doc/release_notes/3.46.0.txt +0 -122
- data/doc/release_notes/3.47.0.txt +0 -270
- data/doc/release_notes/3.48.0.txt +0 -477
- data/doc/release_notes/3.5.0.txt +0 -510
- data/doc/release_notes/3.6.0.txt +0 -366
- data/doc/release_notes/3.7.0.txt +0 -179
- data/doc/release_notes/3.8.0.txt +0 -151
- data/doc/release_notes/3.9.0.txt +0 -233
data/doc/release_notes/2.6.0.txt
DELETED
@@ -1,157 +0,0 @@
|
|
1
|
-
New Features
|
2
|
-
------------
|
3
|
-
|
4
|
-
* Schema parsing was refactored, resulting in a huge speedup when
|
5
|
-
using MySQL. MySQL now uses the DESCRIBE statement instead of the
|
6
|
-
INFORMATION_SCHEMA. PostgreSQL now uses the pg_* system catalogs
|
7
|
-
instead of the INFORMATION schema.
|
8
|
-
|
9
|
-
* The schema information now includes the :primary_key field. Models
|
10
|
-
now use this field to automatically determine the primary key for
|
11
|
-
a table, so it no longer needs to be specified explicitly. Models
|
12
|
-
even handle the composite primary key case.
|
13
|
-
|
14
|
-
* The raise_on_typecast_failure switch was added, with it being true
|
15
|
-
by default (so no change in behavior). This allows the user to
|
16
|
-
silently ignore errors when typecasting fails, at the global, class,
|
17
|
-
and instance levels.
|
18
|
-
|
19
|
-
Sequel::Model.raise_on_typecast_failure = false # Global
|
20
|
-
Artist.raise_on_typecast_failure = true # Class
|
21
|
-
artist = Artist.new
|
22
|
-
artist.raise_on_typecast_failure = false # Instance
|
23
|
-
|
24
|
-
Album.raise_on_typecast_failure = true
|
25
|
-
Album.new(:numtracks=>'a') # => raises Sequel::Error::InvalidValue
|
26
|
-
Album.raise_on_typecast_failure = false
|
27
|
-
Album.new(:numtracks=>'a') # => #<Album @values={:numtracks=>"a"}>
|
28
|
-
|
29
|
-
* Associations' orders are now respected when eager loading via
|
30
|
-
eager_graph. Sequel will qualify the columns in the order with
|
31
|
-
the alias being used, so you can have overlapping columns when
|
32
|
-
eager loading multiple associations.
|
33
|
-
|
34
|
-
Artist.one_to_many :albums, :order=>:name
|
35
|
-
Album.one_to_many :tracks, :order=>:number
|
36
|
-
Artist.order(:artists__name).eager_graph(:albums=>:tracks).sql
|
37
|
-
# => ... ORDER BY artists.name, albums.name, tracks.number
|
38
|
-
|
39
|
-
* The support for CASE expressions has been enhanced by allowing the
|
40
|
-
use of an optional expression:
|
41
|
-
|
42
|
-
{1=>2}.case(0, :x)
|
43
|
-
# => CASE x WHEN 1 THEN 2 ELSE 0 END
|
44
|
-
[[:a, 1], [:b, 2], [:c, 3]].case(4, :y)
|
45
|
-
# => CASE y WHEN a THEN 1 WHEN b THEN 2 WHEN c THEN 3 ELSE 4 END
|
46
|
-
|
47
|
-
Previously, to get something equivalent to this, you had to do:
|
48
|
-
|
49
|
-
{{:x=>1}=>2}.case(0)
|
50
|
-
# => CASE WHEN (x = 1) THEN 2 ELSE 0 END
|
51
|
-
[[{:y=>:a}, 1], [{:y=>:b}, 2], [{:y=>:c}, 3]].case(4)
|
52
|
-
# => CASE WHEN (y = a) THEN 1 WHEN (y = b) THEN 2 WHEN (y = c)
|
53
|
-
THEN 3 ELSE 4 END
|
54
|
-
|
55
|
-
* You can now change the NULL/NOT NULL value of an existing column
|
56
|
-
using the set_column_allow_null method.
|
57
|
-
|
58
|
-
# Set NOT NULL
|
59
|
-
DB.alter_table(:artists){set_column_allow_null :name, false}
|
60
|
-
# Set NULL
|
61
|
-
DB.alter_table(:artists){set_column_allow_null :name, true}
|
62
|
-
|
63
|
-
* You can now get the schema information for a table in a non-public
|
64
|
-
schema in PostgreSQL using the implicit :schema__table syntax.
|
65
|
-
Before, the :schema option had to be given explicitly to
|
66
|
-
Database#schema. This allows models to get schema information for
|
67
|
-
tables outside the public schema.
|
68
|
-
|
69
|
-
* Transactions are now supported on MSSQL.
|
70
|
-
|
71
|
-
* Dataset#tables now returns all tables in the database for MySQL
|
72
|
-
databases accessed via JDBC.
|
73
|
-
|
74
|
-
* Database#drop_view can now drop multiple views at once.
|
75
|
-
|
76
|
-
Other Improvements
|
77
|
-
------------------
|
78
|
-
|
79
|
-
* The SQLite adapter now respects the Sequel.datetime_class option
|
80
|
-
for timestamp and datetime columns.
|
81
|
-
|
82
|
-
* Adding a unique constraint no longer explicity creates a unique
|
83
|
-
index. If you want a unique index, use index :unique=>true.
|
84
|
-
|
85
|
-
* If no language is specified when creating a full text index on
|
86
|
-
PostgreSQL, the simple language is assumed.
|
87
|
-
|
88
|
-
* Errors when typecasting fails are now Sequel::Error::InvalidValue
|
89
|
-
instead of the more generic Sequel::Error.
|
90
|
-
|
91
|
-
* Specifying constraints now works correctly for all types of
|
92
|
-
arguments. Previously, it did not work unless a block or
|
93
|
-
interpolated string were used.
|
94
|
-
|
95
|
-
* Loading an association with the same name as a table in the FROM
|
96
|
-
clause no longer causes an error.
|
97
|
-
|
98
|
-
* When eagerly loading many_to_one associations where no objects have
|
99
|
-
an associated object, the negative lookup is now cached.
|
100
|
-
|
101
|
-
* String keys can now be used with Dataset#multi_insert, just like
|
102
|
-
they can be used for Dataset#insert.
|
103
|
-
|
104
|
-
* Dataset#join_table now generates the correct SQL when doing the
|
105
|
-
first join to a dataset where the first source is a dataset, when
|
106
|
-
an unqualified column is used in the conditions.
|
107
|
-
|
108
|
-
* Cascading associations after *_to_many associations can now be
|
109
|
-
eagerly loaded via eager_graph.
|
110
|
-
|
111
|
-
* Eagerly loading *_to_many associations that are cascaded behind a
|
112
|
-
many_to_one association now have their duplicates removed if a
|
113
|
-
cartesian product join is done.
|
114
|
-
|
115
|
-
* The SQLite adapter now uses string literals in all of the AS
|
116
|
-
clauses. While the SQL standard specifies that identifiers should
|
117
|
-
be used, SQLite documentation explicitly states that string
|
118
|
-
literals are expected (though it generally works with identifiers
|
119
|
-
by converting them implicitly).
|
120
|
-
|
121
|
-
* Database methods that modify the schema now remove the cached
|
122
|
-
schema entry.
|
123
|
-
|
124
|
-
* The hash keys that Database#schema returns when no table is
|
125
|
-
requested are now always supposed to be symbols.
|
126
|
-
|
127
|
-
* The generation of SQL for composite foreign keys on MySQL has been
|
128
|
-
fixed.
|
129
|
-
|
130
|
-
* A schema.rdoc file was added to the documentation explaining the
|
131
|
-
various parts of Sequel related to schema generation and
|
132
|
-
modification and how they interact
|
133
|
-
(http://sequel.rubyforge.org/rdoc/files/doc/schema_rdoc.html).
|
134
|
-
|
135
|
-
* The RDoc template for the website was changed from the default
|
136
|
-
template to the hanna template.
|
137
|
-
|
138
|
-
Backwards Compatibility
|
139
|
-
-----------------------
|
140
|
-
|
141
|
-
* The :numeric_precision and :max_chars schema entries have been
|
142
|
-
removed. Use the :db_type entry to determine this information,
|
143
|
-
if available.
|
144
|
-
|
145
|
-
* The SQLite adapter used to always return Time instances for
|
146
|
-
timestamp types, even if Sequel.datetime_class was DateTime. For
|
147
|
-
datetime types it always returned a DateTime instance. It
|
148
|
-
now returns an instance of Sequel.datetime_class in both cases.
|
149
|
-
|
150
|
-
* It's possible that the including of associations' orders when eager
|
151
|
-
loading via eager_graph could cause problems. You can use the
|
152
|
-
:order_eager_graph=>false option to not use the :order option when
|
153
|
-
eager loading via :eager_graph.
|
154
|
-
|
155
|
-
* There were small changes in SQL creation where the AS keyword is
|
156
|
-
now used explicitly. These should have no effect, but could break
|
157
|
-
tests for explicit SQL.
|
data/doc/release_notes/2.7.0.txt
DELETED
@@ -1,166 +0,0 @@
|
|
1
|
-
Performance Optimizations
|
2
|
-
-------------------------
|
3
|
-
|
4
|
-
* Fetching a large number of records with the PostgreSQL adapter is
|
5
|
-
significantly faster (up to 3-4 times faster than before).
|
6
|
-
|
7
|
-
* Instantiating model objects has been made much faster, as many
|
8
|
-
options (such as raise_on_save_failure) are now lazily loaded, and
|
9
|
-
hook methods are now much faster if no hooks have been defined for
|
10
|
-
that type of hook.
|
11
|
-
|
12
|
-
New Association Options
|
13
|
-
-----------------------
|
14
|
-
|
15
|
-
* The :eager_grapher option has been added allowing you to supply
|
16
|
-
your own block to implement eager loading via eager_graph.
|
17
|
-
|
18
|
-
* many_to_one and one_to_many associations now have a :primary_key
|
19
|
-
option, specifying the name of the column that the :key option
|
20
|
-
references.
|
21
|
-
|
22
|
-
* many_to_many associations now have :left_primary_key and
|
23
|
-
:right_primary_key options, specifying the columns that :left_key
|
24
|
-
and :right_key reference, respectively.
|
25
|
-
|
26
|
-
* many_to_many associations now have a :uniq option, that adds an
|
27
|
-
:after_load callback that makes the returned array of objects
|
28
|
-
unique.
|
29
|
-
|
30
|
-
Other New Features
|
31
|
-
------------------
|
32
|
-
|
33
|
-
* Dataset#set_graph_aliases now allows you to supply a third argument
|
34
|
-
for each column you want graph into the dataset, allowing you to use
|
35
|
-
arbitrary SQL expressions that are graphed into the correct table:
|
36
|
-
|
37
|
-
ds.set_graph_aliases!(:a=>[:b, :c], :d=>[:e, :f, 42])
|
38
|
-
# SELECT b.c AS a, 42 AS d FROM ...
|
39
|
-
ds.first # => {:b=>{:c=>?}, :e=>{:f=>42}}
|
40
|
-
|
41
|
-
* Dataset#add_graph_aliases was added, that adds additional graph
|
42
|
-
aliases instead of replacing the existing ones (as
|
43
|
-
#set_graph_aliases does). It's basically the equivalent of
|
44
|
-
select_more for graphs.
|
45
|
-
|
46
|
-
* Dataset#join_table changed it's final argument from a symbol
|
47
|
-
specifying a table name to an option hash (with backwards
|
48
|
-
compatibility kept), and adds support for a :implicit_qualifier
|
49
|
-
option, which it uses instead of the last joined table to
|
50
|
-
qualify columns.
|
51
|
-
|
52
|
-
* Association's :after_load callbacks are now called when eager
|
53
|
-
loading via eager (but not when eager loading via eager_graph).
|
54
|
-
|
55
|
-
* Any expression can now be used as the argument to Symbol#like,
|
56
|
-
which means that you can pattern match columns to other columns.
|
57
|
-
Before, it always transformed the argument to a string.
|
58
|
-
|
59
|
-
:a.like(:b)
|
60
|
-
# 2.6.0: a LIKE 'b'
|
61
|
-
# 2.7.0: a LIKE b
|
62
|
-
|
63
|
-
* Array#sql_array was added, allowing you to specify that an array
|
64
|
-
in ruby be treated like an array in SQL. This is true anyway,
|
65
|
-
except for arrays of all two pairs, which are treated like hashes,
|
66
|
-
for specifying multiple conditions with the same key:
|
67
|
-
|
68
|
-
DB[:foo].filter([:a,:b] => [[1,2],[3,4]].sql_array)
|
69
|
-
# => SELECT * FROM foo WHERE ((a, b) IN ((1, 2), (3, 4)))
|
70
|
-
|
71
|
-
* ComplexExpression#== and #sql? were added, allowing for easier
|
72
|
-
testing.
|
73
|
-
|
74
|
-
* Full text searching on PostgreSQL now joins multiple columns with
|
75
|
-
a space, to prevent joining border words, and it works when there
|
76
|
-
is a match in one column but the other column is NULL.
|
77
|
-
|
78
|
-
Other Improvements
|
79
|
-
------------------
|
80
|
-
|
81
|
-
* Instance methods added by creating associations are added to an
|
82
|
-
anonymous module included by the class, so they can be overridden
|
83
|
-
in the class while still allowing the use of super to get the
|
84
|
-
default behavior (this is similar to column accessor methods).
|
85
|
-
|
86
|
-
* Many improvements were added to support using multiple schemas in
|
87
|
-
PostgreSQL.
|
88
|
-
|
89
|
-
* Model::Validation::Errors objects are now more compatible with
|
90
|
-
Rails, by adding a #count method and making #on return nil if there
|
91
|
-
are no error messages for that attribute.
|
92
|
-
|
93
|
-
* Serialized columns in models are no longer typecast.
|
94
|
-
|
95
|
-
* Associations are now inherited when a model class is subclassed.
|
96
|
-
|
97
|
-
* Many improvements were made that should make adding custom
|
98
|
-
association types easier.
|
99
|
-
|
100
|
-
* A corner case in eager_graph where the wrong table name would be
|
101
|
-
used to qualify a column name has been fixed.
|
102
|
-
|
103
|
-
* Dataset's cached column information is no longer modified if #each
|
104
|
-
is called with an option that modifies the columns.
|
105
|
-
|
106
|
-
* You should now be able to connect to Oracle via the JDBC adapter,
|
107
|
-
and with the same support it has when using the oracle adapter.
|
108
|
-
|
109
|
-
* Model.association_reflections is now a public methods, so you can
|
110
|
-
grab a hash of all association reflections at once (keyed by
|
111
|
-
association name symbol).
|
112
|
-
|
113
|
-
* The :encoding/:charset option now works in the PostgreSQL adapter
|
114
|
-
if the postgres-pr driver is used.
|
115
|
-
|
116
|
-
* The numeric(x,y) type is now interpreted as decimal.
|
117
|
-
|
118
|
-
Backwards Compatibilty
|
119
|
-
----------------------
|
120
|
-
|
121
|
-
* The first argument to Model#initialize must be a hash, you can no
|
122
|
-
longer use nil. For example, the following code will break if
|
123
|
-
:album is not in params:
|
124
|
-
|
125
|
-
Album.new(params[:album])
|
126
|
-
|
127
|
-
Additionally, Model#initialize does not call the block if the
|
128
|
-
second argument is true.
|
129
|
-
|
130
|
-
* The Sequel::Model.lazy_load_schema setting was removed. It should
|
131
|
-
no longer be necessary now that schema loading is relatively speedy,
|
132
|
-
and schemas can be loaded at startup and cached.
|
133
|
-
|
134
|
-
* The PostgreSQL adapter will default to using a unix socket in /tmp
|
135
|
-
if no host is specified. Before, a TCP/IP socket to localhost was
|
136
|
-
used if no host was specified. This change makes Sequel operate
|
137
|
-
similarly to the PostgreSQL command line tools.
|
138
|
-
|
139
|
-
* The ASSOCIATION_TYPES constant has changed from an array to a hash
|
140
|
-
and it has been moved. The RECIPROCAL_ASSOCIATIONS constant has
|
141
|
-
been removed. This is unlikely to matter unless you were using
|
142
|
-
custom association types.
|
143
|
-
|
144
|
-
* The PostgreSQL adapter now sets the PostgreSQL DateStyle, in order
|
145
|
-
to implement an optimization. To turn this off, set
|
146
|
-
Sequel::Postgres.use_iso_date_format = false.
|
147
|
-
|
148
|
-
* When using the PostgreSQL adapter, in many places the schema is
|
149
|
-
specified explicitly. If you do not specify a schema, a default
|
150
|
-
one is used (public by default). If you use a schema other than
|
151
|
-
public for your work, use Database#default_schema= to set it. For
|
152
|
-
any table outside of the default schema, you should specify the
|
153
|
-
schema explicitly, even if it is in the PostgreSQL search_path.
|
154
|
-
|
155
|
-
* Model::Validation::Errors#on now returns nil instead of [] if there
|
156
|
-
are no errors for an attribute.
|
157
|
-
|
158
|
-
* Hooks added to a superclass after a subclass has been created no
|
159
|
-
longer have an effect on the subclass.
|
160
|
-
|
161
|
-
* The Postgres.string_to_bool method has been removed.
|
162
|
-
|
163
|
-
* PostgreSQL full text searching now always defaults to using the
|
164
|
-
simple dictionary. If you want to use another dictionary, it must
|
165
|
-
be specified explicitly, both when searching and when creating a
|
166
|
-
full text index.
|
data/doc/release_notes/2.8.0.txt
DELETED
@@ -1,171 +0,0 @@
|
|
1
|
-
New Features
|
2
|
-
------------
|
3
|
-
|
4
|
-
* Sequel now supports database stored procedures similar to its
|
5
|
-
support for prepared statements. The API is as follows:
|
6
|
-
|
7
|
-
DB[:table].call_sproc(:select, :mysp, 'param1', 'param2')
|
8
|
-
# or
|
9
|
-
sp = DB[:table].prepare_sproc(:select, :mysp)
|
10
|
-
sp.call('param1', 'param2')
|
11
|
-
sp.call('param3', 'param4')
|
12
|
-
|
13
|
-
This works with Model datasets as well, allowing them to return
|
14
|
-
model objects:
|
15
|
-
|
16
|
-
Album.call_sproc(:select, :new_albums)
|
17
|
-
#=> [#<Album ...>, #<Album ...>]
|
18
|
-
|
19
|
-
You can call a stored procedure directly on the Database object
|
20
|
-
if you want to, but the results and API are adapter dependent,
|
21
|
-
and you definitely shouldn't do it if the stored procedure returns
|
22
|
-
rows:
|
23
|
-
|
24
|
-
DB.call_sproc(:mysp, :args=>['param1', 'param2'])
|
25
|
-
|
26
|
-
Currently, the MySQL and JDBC adapters support stored procedures.
|
27
|
-
Other adapters may support them in a future version.
|
28
|
-
|
29
|
-
* The connection pool code can now remove connections if the
|
30
|
-
adapter raises a Sequel::DatabaseDisconnectError indicating that
|
31
|
-
the connection has been lost. When a query is attempted and
|
32
|
-
the adapter raises this error, the connection pool removes the
|
33
|
-
connection from the pool, and reraises the error. The Oracle and
|
34
|
-
PostgreSQL adapters currently support this, and other adapters may
|
35
|
-
support it in a future version.
|
36
|
-
|
37
|
-
* Whether to upcase or quote identifiers can now be set separately.
|
38
|
-
Previously, upcasing was done when quoting except when using SQLite,
|
39
|
-
PostgreSQL, or MySQL. Now, you can turn upcasing off while still
|
40
|
-
quoting. This may be necessary if you are using a MSSQL database
|
41
|
-
that has lower case table names that conflict with reserved words.
|
42
|
-
It also allows you to uppercase identifiers when using SQLite,
|
43
|
-
PostgreSQL, or MySQL, which may be beneficial in certain cases.
|
44
|
-
|
45
|
-
To turn upcasing on or off:
|
46
|
-
|
47
|
-
# Global
|
48
|
-
Sequel.upcase_identifiers = true
|
49
|
-
# Database
|
50
|
-
DB = Sequel.connect("postgres://...", :upcase_identifiers=>true)
|
51
|
-
DB.upcase_identifiers = false
|
52
|
-
# Dataset
|
53
|
-
ds = DB[:items]
|
54
|
-
ds.upcase_identifiers = true
|
55
|
-
|
56
|
-
* Options are now supported when altering a columns type:
|
57
|
-
|
58
|
-
DB.alter_table(:items) do
|
59
|
-
set_column_type :score, :integer, :unsigned=>true
|
60
|
-
set_column_type :score, :varchar, :size=>30
|
61
|
-
set_column_type :score, :enum, :elements=>['a', 'b']
|
62
|
-
end
|
63
|
-
|
64
|
-
* Standard conforming strings are now turned on by default in the
|
65
|
-
PostgreSQL adapter. This makes PostgreSQL not interpret backslash
|
66
|
-
escapes. This is the PostgreSQL recommended setting, which will be
|
67
|
-
the default setting in a future version of PostgreSQL. If you
|
68
|
-
don't want for force the use of standard strings, use:
|
69
|
-
|
70
|
-
Sequel::Postgres.force_standard_strings = false
|
71
|
-
|
72
|
-
You need to do that after you call Sequel.connect but before you
|
73
|
-
use the database for anything, since that setting is set on
|
74
|
-
initial connection.
|
75
|
-
|
76
|
-
* Sequel now raises an error if you attempt to use EXCEPT [ALL] or
|
77
|
-
INTERSECT [ALL] on a database that doesn't support it.
|
78
|
-
|
79
|
-
* Sequel now raises an error if you attempt to use DISTINCT ON with
|
80
|
-
MySQL or Oracle, which don't support it.
|
81
|
-
|
82
|
-
* A subadapter for the Progress RDBMS was added to the ODBC adapter.
|
83
|
-
To connect to a Progress database, use the :db_type=>'progress'
|
84
|
-
option. This adapter targets Progress 9.
|
85
|
-
|
86
|
-
* The ODBC adapter now supports transactions.
|
87
|
-
|
88
|
-
* The MSSQL shared adapter now supports multi_insert (for inserting
|
89
|
-
multiple rows at once), and unicode string literals.
|
90
|
-
|
91
|
-
Other Improvements
|
92
|
-
------------------
|
93
|
-
|
94
|
-
* There were many improvements related to using schemas in databases.
|
95
|
-
Using schema-qualified tables should work in most if not all cases
|
96
|
-
now. Model associations, getting the schema, joins, and many other
|
97
|
-
parts of Sequel were modified to allow the use of schema-qualifed
|
98
|
-
tables.
|
99
|
-
|
100
|
-
* You can now use literal strings with placeholders as well as
|
101
|
-
subselects when using prepared statements. For example, the
|
102
|
-
following all work now:
|
103
|
-
|
104
|
-
DB[:items].filter("id = ?", :$i).call(:select, :i=>1)
|
105
|
-
DB[:items].filter(:id=>DB[:items].select(:id)\
|
106
|
-
.filter(:id=>:$i)).call(:select, :i=>1)
|
107
|
-
DB["SELECT * FROM items WHERE id = ?", :$i].call(:select, :i=>1)
|
108
|
-
|
109
|
-
* Model#initialize received a few more micro-optimizations.
|
110
|
-
|
111
|
-
* Model#refresh now clears the changed columns as well as the
|
112
|
-
associations.
|
113
|
-
|
114
|
-
* You can now drop columns inside a transaction when using SQLite.
|
115
|
-
|
116
|
-
* You can now submit multiple SQL queries at once in the MySQL
|
117
|
-
adapter:
|
118
|
-
|
119
|
-
DB['SELECT 1; SELECT 2'].all
|
120
|
-
#=> [{:"1"=>1, :"2"=>2}]
|
121
|
-
|
122
|
-
This may fix issues if you've seen a MySQL "commands out of sync"
|
123
|
-
message. Note that this doesn't work if you are connecting to
|
124
|
-
MySQL via JDBC.
|
125
|
-
|
126
|
-
* You can now use AliasedExpressions directly in table names given
|
127
|
-
to join_table:
|
128
|
-
|
129
|
-
DB.from(:i.as(:j)).join(:k.as(:l), :a=>:b)
|
130
|
-
#=> ... FROM i AS j INNER JOIN k AS l ON (l.a = j.b)
|
131
|
-
|
132
|
-
* Database#rename_table once again works on PostgreSQL. It was
|
133
|
-
broken in 2.7.0.
|
134
|
-
|
135
|
-
* The interval type is now treated as it's own type. It was
|
136
|
-
previously treated as an integer type.
|
137
|
-
|
138
|
-
* Subselects are now aliased correctly when using Oracle.
|
139
|
-
|
140
|
-
* UNION, INTERSECT, and EXCEPT statements now appear before ORDER
|
141
|
-
and LIMIT on most databases. If you use these constructs, please
|
142
|
-
test and make sure that they work correctly with your database.
|
143
|
-
|
144
|
-
* SQL EXCEPT clause now works on Oracle, which uses MINUS instead.
|
145
|
-
|
146
|
-
* Dataset#exists now returns a LiteralString, to make it easier to
|
147
|
-
use.
|
148
|
-
|
149
|
-
* The Sequel.odbc_mssql method was removed, as the odbc_mssql adapter
|
150
|
-
was removed in a previous version. Instead, use:
|
151
|
-
|
152
|
-
Sequel.odbc(..., :db_type=>'mssql')
|
153
|
-
|
154
|
-
Backwards Compatibilty
|
155
|
-
----------------------
|
156
|
-
|
157
|
-
* The hash returned by Database#schema when no table name is provided
|
158
|
-
uses quoted strings instead of symbols as keys. The hash has a
|
159
|
-
default proc, so using the symbol will return the same value as
|
160
|
-
before, but if you use each to iterate through the hash, the keys
|
161
|
-
will be different. This was necessary to handle schema-qualified
|
162
|
-
tables.
|
163
|
-
|
164
|
-
* Database#table_exists? no longer checks the output of
|
165
|
-
Database#tables. If the table exists in the schema, it returns
|
166
|
-
true, otherwise, it does a query. This was necessary because
|
167
|
-
table_exists? accepts multiple formats for table names and
|
168
|
-
Database#tables is an array of symbols.
|
169
|
-
|
170
|
-
* When getting the schema on PostgreSQL, the default schema is now
|
171
|
-
used even if the :schema=>nil option is used.
|