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.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.
|