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/3.3.0.txt
DELETED
@@ -1,192 +0,0 @@
|
|
1
|
-
New Features
|
2
|
-
------------
|
3
|
-
|
4
|
-
* An association_proxies plugin has been added. This is not a
|
5
|
-
full-blown proxy implementation, but it allows you to write code
|
6
|
-
such as:
|
7
|
-
|
8
|
-
artist.albums.filter{num_tracks > 10}
|
9
|
-
|
10
|
-
Without the plugin, you have to call filter specifically on the
|
11
|
-
association's dataset:
|
12
|
-
|
13
|
-
artist.albums_dataset.filter{num_tracks > 10}
|
14
|
-
|
15
|
-
The plugin works by proxying array methods to the array of
|
16
|
-
associated objects, and all other methods to the association's
|
17
|
-
dataset. This results in the following behavior:
|
18
|
-
|
19
|
-
# Will load the associated objects (unless they are already
|
20
|
-
# cached), and return the length of the array
|
21
|
-
artist.albums.length
|
22
|
-
|
23
|
-
# Will issue an SQL query with COUNT (even if the association
|
24
|
-
# is already cached), and return the result
|
25
|
-
artist.albums.count
|
26
|
-
|
27
|
-
* The add_*/remove_*/remove_all_* association methods now take
|
28
|
-
additional arguments that are passed down to the
|
29
|
-
_add_*/_remove_*/_remove_all_* methods. One of the things this
|
30
|
-
allows you to do is update additional columns in join tables for
|
31
|
-
many_to_many associations:
|
32
|
-
|
33
|
-
class Album
|
34
|
-
many_to_many :artists
|
35
|
-
def _add_artist(artist, values={})
|
36
|
-
DB[:albums_artists].
|
37
|
-
insert(values.merge(:album_id=>id,
|
38
|
-
:artist_id=>artist.id))
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
album = Album[1]
|
43
|
-
artist1 = Artist[2]
|
44
|
-
artist2 = Artist[3]
|
45
|
-
album.add_artist(artist1, :relationship=>'composer')
|
46
|
-
album.add_artist(artist2, :relationship=>'arranger')
|
47
|
-
|
48
|
-
* The JDBC adapter now accepts a :convert_types option to turn off
|
49
|
-
Java type conversion. The option is true by default for
|
50
|
-
backwards compatibility and correctness, but can be set to false
|
51
|
-
to double performance. The option can be set at the database
|
52
|
-
and dataset levels:
|
53
|
-
|
54
|
-
DB = Sequel.jdbc('jdbc:postgresql://host/database',
|
55
|
-
:convert_types=>false)
|
56
|
-
DB.convert_types = true
|
57
|
-
ds = DB[:table]
|
58
|
-
ds.convert_types = false
|
59
|
-
|
60
|
-
* Dataset#from_self now takes an option hash and respects an
|
61
|
-
:alias option, giving the table alias to use.
|
62
|
-
|
63
|
-
* Dataset#unlimited was added, similar to unfiltered and unordered.
|
64
|
-
|
65
|
-
* SQL::WindowFunction is now a subclass of SQL::GenericExpression,
|
66
|
-
so you can alias it and treat it like any other SQL::Function.
|
67
|
-
|
68
|
-
Other Improvements
|
69
|
-
------------------
|
70
|
-
|
71
|
-
* Microsoft SQL Server support is much, much better in Sequel 3.3.0
|
72
|
-
than in previous versions. Support is pretty good with the ODBC,
|
73
|
-
ADO, and JDBC adapters, close to the level of support for
|
74
|
-
PostreSQL, MySQL, SQLite, and H2. Improvements are too numerous
|
75
|
-
to list, but here are some highlights:
|
76
|
-
|
77
|
-
* Dataset#insert now returns the primary key (identity field), so
|
78
|
-
it can be used easier with models.
|
79
|
-
|
80
|
-
* Transactions can now use savepoints (except on ADO).
|
81
|
-
|
82
|
-
* Offsets are supported when using SQL Server 2005 or 2008, using
|
83
|
-
a ROW_NUMBER window function. However, you must specify an
|
84
|
-
order for your dataset (which you probably are already doing if
|
85
|
-
you are using offsets).
|
86
|
-
|
87
|
-
* Schema parsing has been implemented, though it doesn't support
|
88
|
-
primary key parsing (except on JDBC, since the JDBC support is
|
89
|
-
used there).
|
90
|
-
|
91
|
-
* The SQL syntax Sequel uses is now much more compatible, and
|
92
|
-
most schema modification methods and database types now work
|
93
|
-
correctly.
|
94
|
-
|
95
|
-
* The ADO and ODBC adapters both work much better now. The ADO
|
96
|
-
adapter no longer attempts to use transactions, since I've found
|
97
|
-
that ADO does not give a stable native connection (and hence
|
98
|
-
transactions weren't possible). I strongly recommend against
|
99
|
-
using the ADO adapter in production.
|
100
|
-
|
101
|
-
* The H2 JDBC subadapter now supports rename_column, set_column_null,
|
102
|
-
set_column_type, and add_foreign_key.
|
103
|
-
|
104
|
-
* Altering a columns type, null status, or default is now supported
|
105
|
-
on SQLite. You can also add primary keys and unique columns.
|
106
|
-
|
107
|
-
* Both the ADO and ODBC adapters now catch the native exception
|
108
|
-
classes and raise Sequel::DatabaseErrors.
|
109
|
-
|
110
|
-
* Model classes now default to associating to other classes in the
|
111
|
-
same scope. This makes it easier to use namespaced models.
|
112
|
-
|
113
|
-
* The schema parser and schema dumper now support the following
|
114
|
-
types: nchar, nvarchar, ntext, smalldatetime, smallmoney, binary,
|
115
|
-
and varbinary.
|
116
|
-
|
117
|
-
* You can now specify the null status for a column using :allow_null
|
118
|
-
in addition to :null. This is to make it easier to use the
|
119
|
-
table creation methods with the results of the schema parser.
|
120
|
-
|
121
|
-
* Renaming a NOT NULL column without a default now works on MySQL.
|
122
|
-
|
123
|
-
* Model class initialization now raises an exception if there is a
|
124
|
-
problem connecting to the database.
|
125
|
-
|
126
|
-
* Connection pool performance has been increased slightly.
|
127
|
-
|
128
|
-
* The literal_time method in the ODBC adapter has been fixed.
|
129
|
-
|
130
|
-
* An unlikely but potential bug in the MySQL adapter has been fixed.
|
131
|
-
|
132
|
-
Backwards Compatibility
|
133
|
-
-----------------------
|
134
|
-
|
135
|
-
* The convert_tinyint_to_bool setting moved from the main Sequel
|
136
|
-
module to the Sequel::MySQL module. The native MySQL adapter is
|
137
|
-
the only adapter that converted tinyint columns to booleans when
|
138
|
-
the rows are returned, so you can only use the setting with the
|
139
|
-
native MySQL adapter.
|
140
|
-
|
141
|
-
Additionally, the setting's behavior has changed. When parsing
|
142
|
-
the schema, now only tinyint(1) columns are now considered as
|
143
|
-
boolean, instead of all tinyint columns. This allows you to use
|
144
|
-
tinyint(4) columns for storing small integers and tinyint(1)
|
145
|
-
columns as booleans, and not have the schema parsing support
|
146
|
-
consider the tinyint(4) columns as booleans. Unfortunately,
|
147
|
-
due to limitations in the native MySQL driver, all tinyint
|
148
|
-
column values are converted to booleans upon retrieval, not just
|
149
|
-
tinyint(1) column values.
|
150
|
-
|
151
|
-
Unfortunately, the previous Sequel behavior was to use the
|
152
|
-
default tinyint size (tinyint(4)) when creating boolean columns
|
153
|
-
(using the TrueClass or FalseClass generic types). If you were
|
154
|
-
using the generic type support to create the columns, you should
|
155
|
-
modify your database to change the column type from tinyint(4) to
|
156
|
-
tinyint(1).
|
157
|
-
|
158
|
-
If you use MySQL with tinyint columns, these changes have the
|
159
|
-
potential to break applications. Care should be taken when
|
160
|
-
upgrading if these changes apply to you.
|
161
|
-
|
162
|
-
* Model classes now default to associating to other classes in the
|
163
|
-
same scope. It's highly unlikely anyone was relying on the
|
164
|
-
previous behavior, but if you have a model inside a module that
|
165
|
-
you are associating to a model outside of a module, you now need
|
166
|
-
to specify the associated class using the :class option.
|
167
|
-
|
168
|
-
* Model#save no longer includes the primary key fields in the SET
|
169
|
-
clause of the UPDATE query, only in the WHERE clause. I'm not
|
170
|
-
sure if this affects backwards compatibility of production code,
|
171
|
-
but it can break tests that expect specific SQL.
|
172
|
-
|
173
|
-
* Behavior to handle empty identifiers has now been standardized.
|
174
|
-
If any database adapter returns an empty identifier, Sequel will
|
175
|
-
use 'untitled' as the identifier. This can break backwards
|
176
|
-
compatibility if the adapter previously used another default and
|
177
|
-
you were relying on that default. This was necessary to fix any
|
178
|
-
possible "interning empty string" exceptions.
|
179
|
-
|
180
|
-
* On MSSQL, Sequel now uses the datetime type instead of the
|
181
|
-
timestamp type for generic DateTimes. It now uses bit for the
|
182
|
-
TrueClass and FalseClass generic types, and image for the File
|
183
|
-
generic type.
|
184
|
-
|
185
|
-
* Sequel now unescapes URL parts:
|
186
|
-
|
187
|
-
Sequel.connect(ado:///db?host=server%5cinstance)
|
188
|
-
|
189
|
-
However, this can break backward compatibility if you previously
|
190
|
-
expected it not to be unescaped.
|
191
|
-
|
192
|
-
* The columns_for private SQLite Database method has been removed.
|
@@ -1,135 +0,0 @@
|
|
1
|
-
= Dataset Literalization Refactoring
|
2
|
-
|
3
|
-
* As warned about in the 3.29.0 release notes, dataset literalization
|
4
|
-
has been completely refactored. It now uses an append-only design
|
5
|
-
which is faster in all cases, about twice as fast for large objects
|
6
|
-
and deeply nested structures, and over two orders of magnitude
|
7
|
-
faster in some pathological cases.
|
8
|
-
|
9
|
-
This change should not affect applications, but may affect custom
|
10
|
-
extensions or adapters that dealt with literalization of objects.
|
11
|
-
Most literalization methods now have a method with an _append
|
12
|
-
suffix that does the actual literalization, which takes the sql
|
13
|
-
string to append to as the first argument. If you were overriding
|
14
|
-
a literalization method, you now probably need to override the
|
15
|
-
_append version instead. If you have this literalization method:
|
16
|
-
|
17
|
-
def foo_sql(bar)
|
18
|
-
"BAR #{literal(bar.baz)}"
|
19
|
-
end
|
20
|
-
|
21
|
-
You need to change the code to:
|
22
|
-
|
23
|
-
def foo_sql_append(sql, bar)
|
24
|
-
sql << "BAR "
|
25
|
-
literal_append(sql, bar.baz)
|
26
|
-
end
|
27
|
-
|
28
|
-
def foo_sql(bar)
|
29
|
-
sql = ""
|
30
|
-
foo_sql_append(sql, bar)
|
31
|
-
sql
|
32
|
-
end
|
33
|
-
|
34
|
-
If you have questions about modifying your custom adapter or
|
35
|
-
extension, please ask on the Google Group or the IRC channel.
|
36
|
-
|
37
|
-
= New Features
|
38
|
-
|
39
|
-
* Model#set_server has been added to the base support (it was
|
40
|
-
previously only in the sharding plugin), which allows you to
|
41
|
-
set the shard on which to save/delete the model instance:
|
42
|
-
|
43
|
-
foo1.set_server(:server_a).save
|
44
|
-
foo2.set_server(:server_a).destroy
|
45
|
-
|
46
|
-
* Model#save now accepts a :server option that uses set_server
|
47
|
-
to set the shard to use. Unlike most other #save options, this
|
48
|
-
option persists past the end of the save. Previously, the
|
49
|
-
:server option only affected the transaction code, it now
|
50
|
-
affects the INSERT/UPDATE statement as well.
|
51
|
-
|
52
|
-
* When initiating a new dataset graph, any existing selected
|
53
|
-
columns is assumed to be the columns to select for the graph from
|
54
|
-
the current/master table. Before, there was not a way to specify
|
55
|
-
the columns to select from the current/master table.
|
56
|
-
|
57
|
-
* A :graph_alias_base association option has been added, which is
|
58
|
-
used to set the base alias name to use when eager graphing. This
|
59
|
-
is mostly useful when cascading eager graphs to dependent
|
60
|
-
associations, where multiple associations with the same name in
|
61
|
-
different models are being graphed simultaneously.
|
62
|
-
|
63
|
-
* You can now specify nanoseconds and a timezone offset
|
64
|
-
when converting a hash or array to a timestamp. The nanoseconds
|
65
|
-
and offset are the 7th and 8th entries in the array, and the :nanos
|
66
|
-
and :offset entry in the hash.
|
67
|
-
|
68
|
-
* The postgres adapter now respects a :connect_timeout option if you
|
69
|
-
are using the pg driver.
|
70
|
-
|
71
|
-
= Other Improvements
|
72
|
-
|
73
|
-
* Type conversion of Java to Ruby types in the JDBC adapter has been
|
74
|
-
made much faster, as conversion method lookup is now
|
75
|
-
O(number of columns) instead of
|
76
|
-
O(number of columns*number of rows).
|
77
|
-
|
78
|
-
* Sequel::SQL::Blob literalization is now much faster on adapters that
|
79
|
-
use hex encoding, by switching to String#unpack('H*').
|
80
|
-
|
81
|
-
* Database#after_commit and after_rollback now respect the :server
|
82
|
-
option to set the server/shard to use.
|
83
|
-
|
84
|
-
* Symbol splitting (e.g. for table__column) is now slightly faster.
|
85
|
-
|
86
|
-
* All adapters now pass the dataset :limit/:offset value through
|
87
|
-
Dataset#literal instead of using it verbatim. Note that
|
88
|
-
Dataset#limit already called to_i on input strings, so this isn't
|
89
|
-
a security issue. However, the previous code broke if you
|
90
|
-
provided a Sequel-specific object (e.g. Sequel::SQL::Function) as
|
91
|
-
the :limit/:offset value.
|
92
|
-
|
93
|
-
* Calling graph and eager_graph on an already graphed dataset no
|
94
|
-
longer modifies the receiver.
|
95
|
-
|
96
|
-
* Model#set_server now correctly handles the case where @this is
|
97
|
-
already loaded.
|
98
|
-
|
99
|
-
* Dataset#destroy for model datasets now uses the dataset's shard
|
100
|
-
for transactions.
|
101
|
-
|
102
|
-
* When emulating offset support using ROW_NUMBER (on Microsoft SQL
|
103
|
-
Server, DB2, and Oracle), explicitly order by the ROW_NUMBER
|
104
|
-
result, as otherwise the results are not guaranteed to be ordered.
|
105
|
-
|
106
|
-
* Explicitly force a case insensitive collation when emulating ILIKE
|
107
|
-
on Microsoft SQL Server. Previously, ILIKE could be case sensitive
|
108
|
-
on Microsoft SQL Server if case sensitive collation was the
|
109
|
-
database default.
|
110
|
-
|
111
|
-
* Using on_duplicate_key_update with prepared statements on MySQL now
|
112
|
-
works correctly.
|
113
|
-
|
114
|
-
* The tinytds adapter now works correctly if the
|
115
|
-
identifier_output_method is nil.
|
116
|
-
|
117
|
-
* The plugin/extension specs were cleaned up using the mock adapter.
|
118
|
-
|
119
|
-
= Backwards Compatibility
|
120
|
-
|
121
|
-
* In addition to the previously mentioned dataset literalization
|
122
|
-
changes, any custom adapters that overrode *_clause_methods
|
123
|
-
methods need to be modified to add a method that adds the
|
124
|
-
SELECT/UPDATE/INSERT/DELETE. Previously, this was done by default,
|
125
|
-
but due to common table expressions and the dataset literalization
|
126
|
-
changes, a separate method is now needed.
|
127
|
-
|
128
|
-
* Dataset#on_duplicate_key_update_sql has been removed from the shared
|
129
|
-
mysql adapter.
|
130
|
-
|
131
|
-
* The :columns dataset option used when inserting is no longer
|
132
|
-
literalized in advance.
|
133
|
-
|
134
|
-
* Dataset#as_sql no longer takes an expression, it just takes the
|
135
|
-
alias, and only adds the alias part.
|
@@ -1,146 +0,0 @@
|
|
1
|
-
= New Features
|
2
|
-
|
3
|
-
* The serialization plugin can now support custom serialization
|
4
|
-
formats, by supplying a serializer/deserializer pair of
|
5
|
-
callable objects. You can also register custom deserializers
|
6
|
-
via Sequel::Plugins::Serialization.register_format, so that
|
7
|
-
they can be referenced by name. Example:
|
8
|
-
|
9
|
-
Sequel::Plugins::Serialization.register_format(:reverse,
|
10
|
-
lambda{|v| v.reverse},
|
11
|
-
lambda{|v| v.reverse})
|
12
|
-
class User < Sequel::Model
|
13
|
-
serialize_attributes :reverse, :password
|
14
|
-
end
|
15
|
-
|
16
|
-
* Dataset#import and #multi_insert now support a
|
17
|
-
:return=>:primary_key option. When this option is used, the
|
18
|
-
methods return an array of primary key values, one for each
|
19
|
-
inserted row. Usage of this option on MySQL requires that a
|
20
|
-
separate query be issued per row (instead of the single
|
21
|
-
query for all rows that MySQL would usually use).
|
22
|
-
|
23
|
-
* PostgreSQL can now use Dataset#returning in conjunction with
|
24
|
-
import/multi_insert to set a custom column to return.
|
25
|
-
|
26
|
-
* Microsoft SQL Server can now use Dataset#output in conjection with
|
27
|
-
import/multi_insert to set a custom column to return.
|
28
|
-
|
29
|
-
* Dataset#import and #multi_insert now respect a :server option to
|
30
|
-
set the server/shard on which to execute the queries.
|
31
|
-
Additionally, options given to this method are also passed to
|
32
|
-
Dataset#transaction.
|
33
|
-
|
34
|
-
* Dataset#insert_multiple now returns an array of inserted primary
|
35
|
-
keys.
|
36
|
-
|
37
|
-
* Model.def_column_alias has been added to make it easy to create
|
38
|
-
alias methods for columns. This is useful if you have a legacy
|
39
|
-
database and want to create friendly method names for the
|
40
|
-
underlying columns. Note that this alias only affects the setter
|
41
|
-
and getter methods. This does not affect the dataset level, so you
|
42
|
-
still need to use the actual column names in dataset filters.
|
43
|
-
|
44
|
-
* many_to_one associations can now have the same name as the related
|
45
|
-
foreign key column, using the :key_column option. Use of this
|
46
|
-
feature is not recommended, as it is much better to either rename
|
47
|
-
the column or rename the association. Here's an example of usage:
|
48
|
-
|
49
|
-
# Example schema:
|
50
|
-
# albums artists
|
51
|
-
# :id /--> :id
|
52
|
-
# :artist --/ :name
|
53
|
-
# :name
|
54
|
-
class Album < Sequel::Model
|
55
|
-
def_column_alias(:artist_id, :artist)
|
56
|
-
many_to_one :artist, :key_column=>:artist
|
57
|
-
end
|
58
|
-
|
59
|
-
* The mock adapter can now mock out database types, by providing a
|
60
|
-
shared adapter name as the host (e.g. mock://postgres). This
|
61
|
-
emulation is not perfect, but in most cases it allows you to see
|
62
|
-
what SQL Sequel would generate on a given database without needing
|
63
|
-
to install the required database driver.
|
64
|
-
|
65
|
-
* Sequel now supports creating full text indexes on Microsoft SQL
|
66
|
-
Server. Before using it, you must have previously setup a default
|
67
|
-
full text search catalog, and you need to provide a :key_index
|
68
|
-
option with an index name symbol.
|
69
|
-
|
70
|
-
* Dataset#group_rollup and #group_cube methods have been added for
|
71
|
-
GROUP BY ROLLUP and GROUP BY CUBE support. These features are in
|
72
|
-
a recent SQL standard, and they are supported to various degrees on
|
73
|
-
Microsoft SQL Server, DB2, Oracle, MySQL, and Derby.
|
74
|
-
|
75
|
-
* Dataset#full_text_search on Microsoft SQL Server now supports
|
76
|
-
multiple search terms.
|
77
|
-
|
78
|
-
* The jdbc adapter now supports a :login_timeout option, giving the
|
79
|
-
timeout in seconds.
|
80
|
-
|
81
|
-
= Other Improvements
|
82
|
-
|
83
|
-
* Dataset#exists can now be used with prepared statement
|
84
|
-
placeholders.
|
85
|
-
|
86
|
-
* Dataset#full_text_search can now be used with prepared statement
|
87
|
-
placeholders on PostgreSQL, MySQL, and Microsoft SQL Server.
|
88
|
-
|
89
|
-
* If tables from two separate schema are detected when parsing the
|
90
|
-
schema for a table on PostgreSQL, an error is now raised.
|
91
|
-
Previously, no error was raised, which led to weird errors later,
|
92
|
-
such as duplicate columns in a model's primary_key.
|
93
|
-
|
94
|
-
* RETURNING is now supported with UPDATE/DELETE on PostgreSQL 8.2+.
|
95
|
-
Previously, Sequel only supported it on 9.1+, but PostgreSQL
|
96
|
-
introduced support for it in 8.2.
|
97
|
-
|
98
|
-
* The shared postgres adapter now correctly handles the return value
|
99
|
-
for Dataset#insert if you provide a separate column array and value
|
100
|
-
array on PostgreSQL < 8.2.
|
101
|
-
|
102
|
-
* Handle case in the PostgreSQL adapter where the server version
|
103
|
-
cannot be determined via a query.
|
104
|
-
|
105
|
-
* H2 clob types are now treated as string instead of as blob.
|
106
|
-
Treating clob as blob breaks on H2, as it doesn't automatically
|
107
|
-
hex-unescape the input for clobs as it does for blobs.
|
108
|
-
|
109
|
-
* Dataset#empty? now works correctly when the dataset has an offset
|
110
|
-
and offset support is being emulated.
|
111
|
-
|
112
|
-
* The mock adapter no longer defaults to downcasing identifiers on
|
113
|
-
output.
|
114
|
-
|
115
|
-
= Backwards Compatibility
|
116
|
-
|
117
|
-
* Dataset#exists now returns a PlaceholderLiteralString instead of a
|
118
|
-
LiteralString, which could potentially break some code. If you
|
119
|
-
would like a String returned, you can pass the returned object to
|
120
|
-
Dataset#literal:
|
121
|
-
|
122
|
-
dataset.literal(dataset.exists)
|
123
|
-
|
124
|
-
* Dataset#from no longer handles :a__b__c___d as "a.b.c AS d". This
|
125
|
-
was not the intended behavior, and nowhere else in Sequel is a
|
126
|
-
symbol treated that way. Now, Dataset#from is consistent with the
|
127
|
-
rest of Sequel, using "a.b__c AS d". This should only affect
|
128
|
-
people in very rare cases, as most databases don't use three level
|
129
|
-
qualified tables. One exception is Microsoft SQL Server, which can
|
130
|
-
use three level qualified tables for cross-database access.
|
131
|
-
|
132
|
-
* Previously, Dataset#insert_multiple returned an array of hashes, now
|
133
|
-
it returns an array of primary key values.
|
134
|
-
|
135
|
-
* Dataset#EXRACT_CLOSE in the shared sqlite adapter has been renamed to
|
136
|
-
Dataset#EXTRACT_CLOSE.
|
137
|
-
|
138
|
-
* Dataset::StoredProcedureMethods::SQL_QUERY_TYPE and
|
139
|
-
Dataset::ArgumentMapper::SQL_QUERY_TYPE constants have been removed,
|
140
|
-
as have related sql_query_type private methods.
|
141
|
-
|
142
|
-
* The serialization plugin was significantly refactored.
|
143
|
-
Model.serialization_map now contains a callable object instead of a
|
144
|
-
Symbol, and Model.serialization_format has been removed.
|
145
|
-
Model.define_serialized_attribute_accessors private method now takes
|
146
|
-
two callable objects before the columns, instead of a single symbol.
|