sequel 5.6.0 → 5.7.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.
- 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/3.2.0.txt
DELETED
|
@@ -1,268 +0,0 @@
|
|
|
1
|
-
New Features
|
|
2
|
-
------------
|
|
3
|
-
|
|
4
|
-
* Common table expressions (CTEs) are now supported. CTEs use the
|
|
5
|
-
SQL WITH clause, and specify inline views that queries can use.
|
|
6
|
-
They also support a recursive mode, where the CTE can recursively
|
|
7
|
-
query its own output, allowing you do do things like load all
|
|
8
|
-
branches for a given node in a plain tree structure.
|
|
9
|
-
|
|
10
|
-
The standard with takes an alias and a dataset:
|
|
11
|
-
|
|
12
|
-
DB[:vw].with(:vw, DB[:table].filter{col < 1})
|
|
13
|
-
# WITH vw AS (SELECT * FROM table WHERE col < 1)
|
|
14
|
-
# SELECT * FROM vw
|
|
15
|
-
|
|
16
|
-
The recursive with takes an alias, a nonrecursive dataset, and a
|
|
17
|
-
recursive dataset:
|
|
18
|
-
|
|
19
|
-
DB[:vw].with_recursive(:vw,
|
|
20
|
-
DB[:tree].filter(:id=>1),
|
|
21
|
-
DB[:tree].join(:vw, :id=>:parent_id).
|
|
22
|
-
select(:vw__id, :vw__parent_id))
|
|
23
|
-
# WITH RECURSIVE vw AS (SELECT * FROM tree
|
|
24
|
-
# WHERE (id = 1)
|
|
25
|
-
# UNION ALL
|
|
26
|
-
# SELECT vw.id, vw.parent_id
|
|
27
|
-
# FROM tree
|
|
28
|
-
# INNER JOIN vw ON (vw.id = tree.parent_id))
|
|
29
|
-
# SELECT * FROM vw
|
|
30
|
-
|
|
31
|
-
CTEs are supported by Microsoft SQL Server 2005+, DB2 7+,
|
|
32
|
-
Firebird 2.1+, Oracle 9+, and PostgreSQL 8.4+.
|
|
33
|
-
|
|
34
|
-
* SQL window functions are now supported, and a DSL has been added to
|
|
35
|
-
ease their creation. Window functions act similarly to aggregate
|
|
36
|
-
functions but operate on sliding ranges of rows.
|
|
37
|
-
|
|
38
|
-
In virtual row blocks (blocks passed to filter, select, order, etc.)
|
|
39
|
-
you can now provide a block to method calls to change the default
|
|
40
|
-
behavior to create functions that weren't possible previously. The
|
|
41
|
-
blocks aren't called, but their presence serves as a flag.
|
|
42
|
-
|
|
43
|
-
What function is created depends on the arguments to the method:
|
|
44
|
-
|
|
45
|
-
* If there are no arguments, an SQL::Function is created with the
|
|
46
|
-
name of method used, and no arguments. Previously, it was not
|
|
47
|
-
possible to create functions without arguments using the virtual
|
|
48
|
-
row block DSL. Example:
|
|
49
|
-
|
|
50
|
-
DB.dataset.select{version{}} # SELECT version()
|
|
51
|
-
|
|
52
|
-
* If the first argument is :*, an SQL::Function is created with a
|
|
53
|
-
single wildcard argument (*). This is mostly useful for count:
|
|
54
|
-
|
|
55
|
-
DB[:t].select{count(:*){}} # SELECT count(*) FROM t
|
|
56
|
-
|
|
57
|
-
* If the first argument is :distinct, an SQL::Function is created
|
|
58
|
-
with the keyword DISTINCT prefacing all remaining arguments. This
|
|
59
|
-
is useful for aggregate functions such as count:
|
|
60
|
-
|
|
61
|
-
DB[:t].select{count(:distinct, col1){}}
|
|
62
|
-
# SELECT count(DISTINCT col1) FROM t
|
|
63
|
-
|
|
64
|
-
* If the first argument is :over, the second argument, if provided,
|
|
65
|
-
should be a hash of options to pass to SQL::Window. The options
|
|
66
|
-
hash can also contain :*=>true to use a wildcard argument as the
|
|
67
|
-
function argument, or :args=>... to specify an array of arguments
|
|
68
|
-
to use as the function arguments.
|
|
69
|
-
|
|
70
|
-
DB[:t].select{rank(:over){}} # SELECT rank() OVER ()
|
|
71
|
-
DB[:t].select{count(:over, :*=>true){}} # SELECT count(*) OVER ()
|
|
72
|
-
DB[:t].select{sum(:over, :args=>col1,
|
|
73
|
-
:partition=>col2, :order=>col3){}}
|
|
74
|
-
# SELECT sum(col1) OVER (PARTITION BY col2 ORDER BY col3)
|
|
75
|
-
|
|
76
|
-
PostgreSQL also supports named windows. Named windows can be
|
|
77
|
-
specified by Dataset#window, and window functions can reference
|
|
78
|
-
them using the :window option.
|
|
79
|
-
|
|
80
|
-
* Schema information for columns now includes a :ruby_default entry
|
|
81
|
-
which contains a ruby object that represents the default given by
|
|
82
|
-
the database (which is stored in :default). Not all :default
|
|
83
|
-
entries can be parsed into a :ruby_default, but if the
|
|
84
|
-
schema_dumper extension previously supported it, it should work.
|
|
85
|
-
|
|
86
|
-
* Methods to create compound datasets (union, intersect, except), now
|
|
87
|
-
take an options hash instead of a true/false flag. The previous
|
|
88
|
-
API is still supported, but switching to specifying the ALL setting
|
|
89
|
-
using :all=>true is recommended.
|
|
90
|
-
|
|
91
|
-
Additionally, you can now set :from_self=>false to not wrap the
|
|
92
|
-
returned dataset in a "SELECT * FROM (...)".
|
|
93
|
-
|
|
94
|
-
* Dataset#ungraphed was added that removes the graphing information
|
|
95
|
-
from the dataset. This allows you to use Dataset#graph for the
|
|
96
|
-
automatic aliasing, or #eager_graph for the automatic aliasing and
|
|
97
|
-
joining, and then remove the graphing information so that the
|
|
98
|
-
resulting objects will not be split into subhashes or associations.
|
|
99
|
-
|
|
100
|
-
* There were some introspection methods added to Dataset to describe
|
|
101
|
-
which capabilities that dataset does or does not support:
|
|
102
|
-
|
|
103
|
-
supports_cte?
|
|
104
|
-
supports_distinct_on?
|
|
105
|
-
supports_intersect_except?
|
|
106
|
-
supports_intersect_except_all?
|
|
107
|
-
supports_window_functions?
|
|
108
|
-
|
|
109
|
-
In addition to being available for the user to use, these are also
|
|
110
|
-
used internally, so attempting to use a CTE on a dataset that
|
|
111
|
-
doesn't support it will raise an Error.
|
|
112
|
-
|
|
113
|
-
* Dataset#qualify was added, which is like qualify_to with a default
|
|
114
|
-
of first_source.
|
|
115
|
-
|
|
116
|
-
Additionally, qualify now affects PlaceholderLiteralStrings. It
|
|
117
|
-
doesn't scan the string (as Sequel never attempts to parse SQL),
|
|
118
|
-
but if you provide the column as a symbol placeholder argument, it
|
|
119
|
-
will qualify it.
|
|
120
|
-
|
|
121
|
-
* You can now specify the table and column Sequel::Migrator will use
|
|
122
|
-
to record the current schema version. The new Migrator.run method
|
|
123
|
-
must be used to use these new options.
|
|
124
|
-
|
|
125
|
-
* The JDBC adapter now accepts :user and :password options, instead
|
|
126
|
-
of requiring them to be specified in the connection string and
|
|
127
|
-
handled by the JDBC driver. This should allow connections to
|
|
128
|
-
Oracle using the Thin JDBC driver.
|
|
129
|
-
|
|
130
|
-
* You can now specify the max_connections, pool_timeout, and
|
|
131
|
-
single_threaded settings directly in the connection string:
|
|
132
|
-
|
|
133
|
-
postgres:///database?single_threaded=t
|
|
134
|
-
postgres:///database?max_connections=10&pool_timeout=20
|
|
135
|
-
|
|
136
|
-
* Dataset#on_duplicate_key_update now affects Dataset#insert when
|
|
137
|
-
using MySQL.
|
|
138
|
-
|
|
139
|
-
* You can now specify the :opclass option when creating PostgreSQL
|
|
140
|
-
indexes. Currently, this only supports a single operator class
|
|
141
|
-
for all columns. If you need different operator classes per
|
|
142
|
-
column, please post on sequel-talk.
|
|
143
|
-
|
|
144
|
-
* Model#autoincrementing_primary_key was added and can be used if
|
|
145
|
-
the autoincrementing key isn't the same as the primary key. The
|
|
146
|
-
only likely use for this is on MySQL MyISAM tables with composite
|
|
147
|
-
primary keys where only one of the composite parts is
|
|
148
|
-
autoincrementing.
|
|
149
|
-
|
|
150
|
-
* You can now use database column values as search patterns and
|
|
151
|
-
specify the text to search as a String or Regexp:
|
|
152
|
-
|
|
153
|
-
String.send(:include, Sequel::SQL::StringMethods)
|
|
154
|
-
Regexp.send(:include, Sequel::SQL::StringMethods)
|
|
155
|
-
|
|
156
|
-
'a'.like(:x) # ('a' LIKE x)
|
|
157
|
-
/a/.like(:x) # ('a' ~ x)
|
|
158
|
-
/a/i.like(:x) # ('a' ~* x)
|
|
159
|
-
/a/.like(:x, 'b') # (('a' ~ x) OR ('a' ~ 'b'))
|
|
160
|
-
|
|
161
|
-
* The Dataset#dataset_alias private method was added. It can be
|
|
162
|
-
overridden if you have tables named t0, t1, etc and want to make
|
|
163
|
-
sure the default dataset aliases that Sequel uses do not clash
|
|
164
|
-
with existing table names.
|
|
165
|
-
|
|
166
|
-
* Sequel now raises an Error if you call Sequel.connect with
|
|
167
|
-
something that is not a Hash or String.
|
|
168
|
-
|
|
169
|
-
* bin/sequel now accepts a -N option to not test the database
|
|
170
|
-
connection.
|
|
171
|
-
|
|
172
|
-
* An opening_databases.rdoc file was added to the documentation
|
|
173
|
-
directory, which should be a good introduction for new users about
|
|
174
|
-
how to set up your Database connection.
|
|
175
|
-
|
|
176
|
-
Other Improvements
|
|
177
|
-
------------------
|
|
178
|
-
|
|
179
|
-
* MySQL native adapter SELECT is much faster than before, up to 75%
|
|
180
|
-
faster.
|
|
181
|
-
|
|
182
|
-
* JDBC SELECT is about 10% faster than before. It's still much
|
|
183
|
-
slower than the native adapters, due to conversion issues.
|
|
184
|
-
|
|
185
|
-
* bin/sequel now works with a YAML file on ruby 1.9.
|
|
186
|
-
|
|
187
|
-
* MySQL foreign key table constraints have been fixed.
|
|
188
|
-
|
|
189
|
-
* Database#indexes now works on PostgreSQL if the schema used is a
|
|
190
|
-
Symbol. It also works on PostgreSQL versions all the way back to
|
|
191
|
-
7.4.
|
|
192
|
-
|
|
193
|
-
* Graphing of datasets with dataset sources has been fixed.
|
|
194
|
-
|
|
195
|
-
* Changing a columns name, type, or NULL status on MySQL now
|
|
196
|
-
supports a much wider selection of column defaults.
|
|
197
|
-
|
|
198
|
-
* The stored procedure code is now thread-safe. Sequel is
|
|
199
|
-
thread-safe in general, but due to a bug the previous stored
|
|
200
|
-
procedure code was not thread-safe.
|
|
201
|
-
|
|
202
|
-
* The ODBC adapter now drops statements automatically instead of
|
|
203
|
-
requiring the user to do so manually, making it more similar
|
|
204
|
-
to other adapters.
|
|
205
|
-
|
|
206
|
-
* The single_table_inheritance plugin no longer overwrites the STI
|
|
207
|
-
field if the field already has a value. This allows you to use
|
|
208
|
-
create in the generic class to insert a value that will be
|
|
209
|
-
returned as a subclass:
|
|
210
|
-
|
|
211
|
-
Person.create(:kind => "Manager")
|
|
212
|
-
|
|
213
|
-
* When altering colums on MySQL, :unsigned, :elements, :size and other
|
|
214
|
-
options given are no longer ignored.
|
|
215
|
-
|
|
216
|
-
* The PostgreSQL shared adapter's explain and analyze methods have
|
|
217
|
-
been fixed, they had been broken in 3.0.
|
|
218
|
-
|
|
219
|
-
* Parsing of the server's version is more robust on PostgreSQL.
|
|
220
|
-
It should now work correctly for 8.4 and 8.4rc1 type versions.
|
|
221
|
-
|
|
222
|
-
Backwards Compatibility
|
|
223
|
-
-----------------------
|
|
224
|
-
|
|
225
|
-
* Dataset#table_exists? has been removed, since it never worked
|
|
226
|
-
perfectly. Use Database#table_exists? instead.
|
|
227
|
-
|
|
228
|
-
* Model.grep now calls Dataset#grep instead of Enumerable#grep.
|
|
229
|
-
If you are using Model.grep, you need to modify your application.
|
|
230
|
-
|
|
231
|
-
* The MSSQL shared adapter previously used the :with option for
|
|
232
|
-
storing the NOLOCK setting of the query. That option has been
|
|
233
|
-
renamed to :table_options, since :with is now used for CTEs.
|
|
234
|
-
This should not have an effect unless you where using the option
|
|
235
|
-
manually.
|
|
236
|
-
|
|
237
|
-
* Previously, providing a block to a method calls in virtual row
|
|
238
|
-
blocks did not change behavior, where now it causes a different
|
|
239
|
-
code path to be used. In both cases, the block is not evaluated,
|
|
240
|
-
but that may change in a future version.
|
|
241
|
-
|
|
242
|
-
* Dataset#to_table_reference protected method was removed, as it was
|
|
243
|
-
no longer used.
|
|
244
|
-
|
|
245
|
-
* The pool_timeout setting is now converted to an Integer, so if you
|
|
246
|
-
used to pass in a Float, it no longer works the same way.
|
|
247
|
-
|
|
248
|
-
* Most files in adapters/utils have been removed, in favor of
|
|
249
|
-
integrating the code directly into Database and Dataset. If you
|
|
250
|
-
were previously checking for the UnsupportedIntersectExcept or
|
|
251
|
-
related modules, use the Dataset introspection methods instead
|
|
252
|
-
(e.g. supports_intersect_except?).
|
|
253
|
-
|
|
254
|
-
* If you were using the ODBC adapter and manually dropping returned
|
|
255
|
-
statements, you should note that now statements are dropped
|
|
256
|
-
automatically, and the execute method doesn't return a statement
|
|
257
|
-
object.
|
|
258
|
-
|
|
259
|
-
* The MySQL adapter on_duplicate_key_update_sql is now a private
|
|
260
|
-
method.
|
|
261
|
-
|
|
262
|
-
* If you were modifying the :from dataset option directly, note that
|
|
263
|
-
Sequel now expects this option to be preprocessed. See the new
|
|
264
|
-
implementation of Dataset#from for an idea of the changes
|
|
265
|
-
required.
|
|
266
|
-
|
|
267
|
-
* Dataset#simple_select_all? now returns false instead of true for a
|
|
268
|
-
dataset that selects from another dataset.
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
= New Features
|
|
2
|
-
|
|
3
|
-
* The swift adapter now supports an SQLite subadapter. Use the
|
|
4
|
-
:db_type => 'sqlite' option when connecting. You can use an
|
|
5
|
-
in memory database with the following connection string:
|
|
6
|
-
|
|
7
|
-
swift:///?database=:memory:&db_type=sqlite
|
|
8
|
-
|
|
9
|
-
* Arbitrary JDBC properties can now be set in the JDBC adapter
|
|
10
|
-
using the :jdbc_properties option when connecting. The value
|
|
11
|
-
of this option should be a hash where keys and values are JDBC
|
|
12
|
-
property keys and values.
|
|
13
|
-
|
|
14
|
-
* Basic Microsoft Access support was added to the ado adapter.
|
|
15
|
-
The creation of autoincrementing primary key integers now works,
|
|
16
|
-
and identifiers are now quoted with [].
|
|
17
|
-
|
|
18
|
-
* The Database#indexes method now supports a :partial option when
|
|
19
|
-
connecting to MySQL, which makes it include partial indexes (which
|
|
20
|
-
are usually excluded).
|
|
21
|
-
|
|
22
|
-
= Other Improvements
|
|
23
|
-
|
|
24
|
-
* The class_table_inheritance plugin now handles subclass
|
|
25
|
-
associations better. Previously, the implicit eager loading code
|
|
26
|
-
had issues when you called an association method that only existed
|
|
27
|
-
in the subclass.
|
|
28
|
-
|
|
29
|
-
* The error message used when a validates_max_length validation is
|
|
30
|
-
applied to a nil column value has been improved. You can override
|
|
31
|
-
the message yourself using the :nil_message option.
|
|
32
|
-
|
|
33
|
-
* The read_timeout and connect_timeout options now work correctly in
|
|
34
|
-
the mysql adapter.
|
|
35
|
-
|
|
36
|
-
* Another MySQL disconnect error message is now recognized.
|
|
37
|
-
|
|
38
|
-
= Backwards Compatibility
|
|
39
|
-
|
|
40
|
-
* The swift adapter was upgraded to support swift 0.8.1. Older
|
|
41
|
-
versions of swift are no longer supported.
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
= New Features
|
|
2
|
-
|
|
3
|
-
* A tinytds adapter was added, enabling Sequel users on a C-based
|
|
4
|
-
ruby running on *nix easy access to Microsoft SQL Server.
|
|
5
|
-
Previously, the best way to connect to Microsoft SQL Server from
|
|
6
|
-
a C-based ruby on *nix was to use the ODBC adapter with unixodbc
|
|
7
|
-
and freetds. However, setting that up is nontrivial, while
|
|
8
|
-
setting up tinytds is very easy.
|
|
9
|
-
|
|
10
|
-
Note that the tinytds adapter currently requires the git master
|
|
11
|
-
branch of tiny_tds, but tiny_tds 0.4.0 should include the related
|
|
12
|
-
changes.
|
|
13
|
-
|
|
14
|
-
* An association_autoreloading plugin has been added to Sequel,
|
|
15
|
-
which removes stale many_to_one associations from the cache when
|
|
16
|
-
the associated foreign key setter is used to change the value of
|
|
17
|
-
the foreign key.
|
|
18
|
-
|
|
19
|
-
* bin/sequel now operates more like a standard *nix utility.
|
|
20
|
-
If given a file on the command line after the connection
|
|
21
|
-
string, it will assume that file has ruby code and load it.
|
|
22
|
-
If stdin is not a tty, it will read from stdin and execute it
|
|
23
|
-
as ruby code.
|
|
24
|
-
|
|
25
|
-
For recent Linux users, this means you can have a shebang line
|
|
26
|
-
such as:
|
|
27
|
-
|
|
28
|
-
#!/usr/bin/sequel postgres://user:pass@host/db
|
|
29
|
-
|
|
30
|
-
to create a self contained script.
|
|
31
|
-
|
|
32
|
-
* bin/sequel now supports -r and -I options similar to ruby's
|
|
33
|
-
-r and -I options.
|
|
34
|
-
|
|
35
|
-
* MySQL datasets now have a calc_found_rows method that uses
|
|
36
|
-
SQL_CALC_FOUND_ROWS, which provides a fast way to limit the
|
|
37
|
-
number of results returned by a dataset while having an easy
|
|
38
|
-
way to determine how many rows would have been returned if no
|
|
39
|
-
limit was applied.
|
|
40
|
-
|
|
41
|
-
= Other Improvements
|
|
42
|
-
|
|
43
|
-
* The Sequel::Model.plugin method can now be overridden just like
|
|
44
|
-
any other method. Previously, it was the only method that
|
|
45
|
-
was defined directly on the class. This allows the creation
|
|
46
|
-
of plugins that can modify the plugin system itself.
|
|
47
|
-
|
|
48
|
-
* Symbol splitting (:table__column___alias) now works correctly
|
|
49
|
-
for identifiers that include characters that aren't in [\w ].
|
|
50
|
-
Among other things, this means that identifiers with accented
|
|
51
|
-
characters or even kanji characters can be used with symbol
|
|
52
|
-
splitting.
|
|
53
|
-
|
|
54
|
-
* If cover? is defined, it is now used in preference to include?
|
|
55
|
-
for the validates_includes/validates_inclusion_of validations.
|
|
56
|
-
ruby 1.9 defines include? differently for some ranges and can
|
|
57
|
-
be very slow, while cover? is similar to the 1.8 behavior of
|
|
58
|
-
just checking the beginning and end of the range.
|
|
59
|
-
|
|
60
|
-
* The bin/sequel -L option now takes effect even if the -m,
|
|
61
|
-
-C, -d, or -D options are used.
|
|
62
|
-
|
|
63
|
-
* The schema_dumper extension now recognizes the "bigint unsigned"
|
|
64
|
-
type.
|
|
65
|
-
|
|
66
|
-
* On Microsoft SQL Server, if joining to a subselect that uses a
|
|
67
|
-
common table expression, that common table expression is
|
|
68
|
-
promoted to the main dataset. This allows most queries to work
|
|
69
|
-
correctly, but is vulnerable to issues if both the current
|
|
70
|
-
dataset and the joined dataset use common table expressions with
|
|
71
|
-
the same name. Unfortunately, unlike PostgreSQL, Microsoft SQL
|
|
72
|
-
Server does not allow common table expressions to occur in
|
|
73
|
-
subselects.
|
|
74
|
-
|
|
75
|
-
* The NULL/NOT NULL, DEFAULT, and UNIQUE column options now
|
|
76
|
-
use the proper order on H2 and Oracle, so they can now be
|
|
77
|
-
used in conjunction with each other.
|
|
78
|
-
|
|
79
|
-
* Row locks are now enabled on Oracle.
|
|
80
|
-
|
|
81
|
-
* The join_table method on MySQL no longer ignores the block it was
|
|
82
|
-
given.
|
|
83
|
-
|
|
84
|
-
* The informix adapter now supports ruby-informix version >= 0.7.3,
|
|
85
|
-
while still being backwards compatible with older versions.
|
|
86
|
-
|
|
87
|
-
* The specs now run under both RSpec 2 and RSpec 1.
|
|
@@ -1,39 +0,0 @@
|
|
|
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.
|
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
= New Features
|
|
2
|
-
|
|
3
|
-
* Sequel now allows dynamic customization for eager loading.
|
|
4
|
-
Previously, the parameters for eager loading were fixed at
|
|
5
|
-
association creation time. Now, they can be modified at query
|
|
6
|
-
time. To dynamically modify an eager load, you use a hash with
|
|
7
|
-
the proc as the value. For example, if you have this code:
|
|
8
|
-
|
|
9
|
-
Artist.eager(:albums)
|
|
10
|
-
|
|
11
|
-
And you only want to eagerly load albums where the id is greater
|
|
12
|
-
than or equal to some number provided by the user, you do:
|
|
13
|
-
|
|
14
|
-
min = params[:min].to_i
|
|
15
|
-
Artist.eager(:albums=>proc{|ds| ds.where{id > min}})
|
|
16
|
-
|
|
17
|
-
This also works when eager loading via eager_graph:
|
|
18
|
-
|
|
19
|
-
Artist.eager_graph(:albums=>proc{|ds| ds.where{id > min}})
|
|
20
|
-
|
|
21
|
-
For eager_graph, the dataset is the dataset to graph into the
|
|
22
|
-
current dataset, and filtering it will result in an SQL query
|
|
23
|
-
that joins to a subquery.
|
|
24
|
-
|
|
25
|
-
You can also use dynamic customization while cascading to also
|
|
26
|
-
eagerly load dependent associations, by making the hash value
|
|
27
|
-
a single entry hash with a proc key and the value being the
|
|
28
|
-
dependent associations to eagerly load. For example, if you want
|
|
29
|
-
to eagerly load tracks for those albums:
|
|
30
|
-
|
|
31
|
-
Artist.eager(:albums=>{proc{|ds| ds.where{id > min}}=>:tracks})
|
|
32
|
-
|
|
33
|
-
* Sequel also now allows dynamic customization for regular
|
|
34
|
-
association loading. Previously, this was possible by using the
|
|
35
|
-
association's dataset:
|
|
36
|
-
|
|
37
|
-
albums = artist.albums_dataset.filter{id > min}
|
|
38
|
-
|
|
39
|
-
However, then there was no handling of caching, callbacks, or
|
|
40
|
-
reciprocals. For example:
|
|
41
|
-
|
|
42
|
-
albums.each{|album| album.artist}
|
|
43
|
-
|
|
44
|
-
Would issue one query per album to get the artist, because the
|
|
45
|
-
reciprocal association was not set. Now you can provide a
|
|
46
|
-
block to the association method:
|
|
47
|
-
|
|
48
|
-
albums = artist.albums{|ds| ds.filter{id > min}}
|
|
49
|
-
|
|
50
|
-
This block is called with the dataset used to retrieve the
|
|
51
|
-
associated objects, and should return a modified version of that
|
|
52
|
-
dataset.
|
|
53
|
-
|
|
54
|
-
Note that ruby 1.8.6 doesn't allow blocks to take block arguments,
|
|
55
|
-
so you have to pass the block as a separate proc argument to the
|
|
56
|
-
association method if you are still using 1.8.6.
|
|
57
|
-
|
|
58
|
-
* Sequel now supports filtering by associations. This wasn't
|
|
59
|
-
previously supported as filtering is a dataset level feature and
|
|
60
|
-
associations are a model level feature, and datasets do not depend
|
|
61
|
-
on models. Now, model datasets have the ability to filter by
|
|
62
|
-
associations. For example, to get all albums for a given artist,
|
|
63
|
-
you could do:
|
|
64
|
-
|
|
65
|
-
artist = Artist[1]
|
|
66
|
-
Album.filter(:artist=>artist)
|
|
67
|
-
|
|
68
|
-
Since the above can also be accomplished with:
|
|
69
|
-
|
|
70
|
-
artist.albums
|
|
71
|
-
|
|
72
|
-
this may not seem like a big improvement, but it allows you to
|
|
73
|
-
filter on multiple associations simultaneously:
|
|
74
|
-
|
|
75
|
-
Album.filter(:artist=>artist, :publisher=>publisher)
|
|
76
|
-
|
|
77
|
-
For simple many_to_one associations, the above is just a simpler
|
|
78
|
-
way to do:
|
|
79
|
-
|
|
80
|
-
Album.filter(:artist_id=>artist.id, :publisher_id=>publisher.id)
|
|
81
|
-
|
|
82
|
-
Sequel supports this for all association types, including
|
|
83
|
-
many_to_many and many_through_many, where a subquery is used, and
|
|
84
|
-
it also works when composite key associations are used:
|
|
85
|
-
|
|
86
|
-
Album.filter(:artist=>artist, :tags=>tag)
|
|
87
|
-
|
|
88
|
-
This will give you the albums for that artist that are also tagged
|
|
89
|
-
with that tag. To provide multiple values for the same
|
|
90
|
-
association, mostly useful for many_to_many associations, you can
|
|
91
|
-
either use separate filter calls or specify the conditions as an
|
|
92
|
-
array:
|
|
93
|
-
|
|
94
|
-
Album.filter(:tags=>tag1).filter(:tags=>tag2)
|
|
95
|
-
Album.filter([[:tags, tag1], [:tags, tag2]])
|
|
96
|
-
|
|
97
|
-
* A columns_introspection extension has been added that makes
|
|
98
|
-
datasets attempt to guess their columns in some cases instead of
|
|
99
|
-
issuing a database query. This can improve performance in cases
|
|
100
|
-
where the columns are needed implicitly, such as graphing. After
|
|
101
|
-
loading the extension, you can enable the support for specific
|
|
102
|
-
datasets by extending them with Sequel::ColumnIntrospection. To
|
|
103
|
-
enable introspection for all datasets, use:
|
|
104
|
-
|
|
105
|
-
Sequel::Dataset.introspect_all_columns
|
|
106
|
-
|
|
107
|
-
* A serialization_modification_detection plugin has been added.
|
|
108
|
-
Previously, Sequel could not detect modifications made to
|
|
109
|
-
serialized objects. It could detect modification if you assigned
|
|
110
|
-
a new value:
|
|
111
|
-
|
|
112
|
-
model.hash_column = model.hash_column.merge(:foo=>:bar)
|
|
113
|
-
|
|
114
|
-
but not if you just modified the object directly:
|
|
115
|
-
|
|
116
|
-
model.hash_columns[:foo] = :bar
|
|
117
|
-
|
|
118
|
-
With this plugin, such modifications can be detected, at a
|
|
119
|
-
potentially significant performance cost.
|
|
120
|
-
|
|
121
|
-
= Other Improvements
|
|
122
|
-
|
|
123
|
-
* When using a migration directory containing both older integer
|
|
124
|
-
migrations and newer timestamp migrations, where some integer
|
|
125
|
-
migrations have not been applied, make sure to apply the remaining
|
|
126
|
-
integer migrations before the timestamp migrations. Previously,
|
|
127
|
-
they could be applied out of order due to a lexicographic sort
|
|
128
|
-
being used instead of a numeric sort.
|
|
129
|
-
|
|
130
|
-
* If a model does not select all columns from its table, the
|
|
131
|
-
insert_select optimization is no longer used. Previously,
|
|
132
|
-
creating a new model object for such a model could result in the
|
|
133
|
-
object containing columns that the model does not select.
|
|
134
|
-
|
|
135
|
-
* You can now use :select=>[] as an option for many_to_many
|
|
136
|
-
associations to select all columns from both the associated
|
|
137
|
-
table and the join table. Previously, this raised an error and
|
|
138
|
-
required you do :select=>'*'.lit as a workaround. The default
|
|
139
|
-
remains to select all columns in the associated table and none
|
|
140
|
-
from the join table.
|
|
141
|
-
|
|
142
|
-
* The xml_serializer plugin now handles namespaced models by
|
|
143
|
-
using __ instead of / as the namespace separator. Previously, /
|
|
144
|
-
was used and caused problems as it is not valid XML.
|
|
145
|
-
|
|
146
|
-
* The :eager_grapher association option can now accept a proc that
|
|
147
|
-
takes a single hash of options instead of a fixed 3 arguments.
|
|
148
|
-
This is the recommended way going forward of writing custom
|
|
149
|
-
:eager_graphers, and all of the internal ones have been converted.
|
|
150
|
-
The previous way of using 3 arguments is still supported.
|
|
151
|
-
|
|
152
|
-
* A bug in the identity_map plugin for many_to_one associations
|
|
153
|
-
without full association reflection information has been fixed.
|
|
154
|
-
|
|
155
|
-
* Sequel is now using GitHub Issues for issue tracking. Old issues
|
|
156
|
-
have been migrated from Google Code.
|
|
157
|
-
|
|
158
|
-
= Backwards Compatibility
|
|
159
|
-
|
|
160
|
-
* The filter by associations support breaks backward compatibilty for
|
|
161
|
-
users who previously added an sql_literal instance method to
|
|
162
|
-
Sequel::Model. Usually, that was done to for reasons similar to
|
|
163
|
-
but inferior than the filter by association support. The following
|
|
164
|
-
code can be used as a temporary workaround until you can modify
|
|
165
|
-
your program to use the new filter by associations support:
|
|
166
|
-
|
|
167
|
-
Sequel::Model::Associations::DatasetMethods.
|
|
168
|
-
send(:remove_method, :complex_expression_sql)
|
|
169
|
-
|
|
170
|
-
* The private Sequel::Model#_load_associated_objects method now takes
|
|
171
|
-
an additional, optional options hash. Plugins that override that
|
|
172
|
-
method need to be modified.
|