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
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
= New Features
|
|
2
|
-
|
|
3
|
-
* Dataset#avg, #interval, #min, #max, #range, and #sum now
|
|
4
|
-
accept virtual row blocks, allowing you to more easily get
|
|
5
|
-
aggregate values of expressions based on the table:
|
|
6
|
-
|
|
7
|
-
DB[:table].sum{some_function(column1, column2)} # => 134
|
|
8
|
-
# SELECT sum(some_function(column1, column2)) FROM table
|
|
9
|
-
|
|
10
|
-
* Database#do has been added on PostgreSQL for using the DO
|
|
11
|
-
anonymous code block execution statement.
|
|
12
|
-
|
|
13
|
-
* Model.dataset_module now uses a Module subclass, which allows
|
|
14
|
-
you to call subset inside a dataset_module block, making
|
|
15
|
-
it easier to consolidate dataset method code:
|
|
16
|
-
|
|
17
|
-
class Album < Sequel::Model
|
|
18
|
-
dataset_module do
|
|
19
|
-
subset(:gold){copies_sold > 500000}
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
* Database#copy_table and #copy_into are now supported on
|
|
24
|
-
jdbc/postgres.
|
|
25
|
-
|
|
26
|
-
* Sequel now supports deferred constraints on constraint types other
|
|
27
|
-
than foreign keys. The only databases that appear to implement
|
|
28
|
-
this are Oracle and PostgreSQL.
|
|
29
|
-
|
|
30
|
-
* Sequel now supports INITIALLY IMMEDIATE deferred constraints via
|
|
31
|
-
the :deferrable=>:immediate constraint/column option.
|
|
32
|
-
|
|
33
|
-
* Sequel now supports setting the default size of string columns,
|
|
34
|
-
via the default_string_column_size option or accessor. In some
|
|
35
|
-
cases, Sequel's default string column size of 255 is too large
|
|
36
|
-
(e.g. MySQL with utf8mb4 character set), and this allows you to
|
|
37
|
-
change it.
|
|
38
|
-
|
|
39
|
-
= Other Improvements
|
|
40
|
-
|
|
41
|
-
* Dataset#count and other methods now use a subselect in the case
|
|
42
|
-
where the dataset has an offset but no limit.
|
|
43
|
-
|
|
44
|
-
* If an error occurs while attempting to commit a transaction, Sequel
|
|
45
|
-
now attempts to rollback the transaction. Some databases do this
|
|
46
|
-
automatically, but not all. Among other things, this fixes issues
|
|
47
|
-
with deferred foreign key constraint violations on SQLite.
|
|
48
|
-
|
|
49
|
-
* When extending a model's dataset, the model's instance_dataset is
|
|
50
|
-
reset, insuring that it will also be extended with the module.
|
|
51
|
-
|
|
52
|
-
* When passing an invalid argument to Dataset#filter, the exception
|
|
53
|
-
message now includes the argument.
|
|
54
|
-
|
|
55
|
-
* The force_encoding plugin now works with frozen string values.
|
|
56
|
-
|
|
57
|
-
* Public methods added to a model dataset_module now have model
|
|
58
|
-
class methods created for them even if the method was added outside
|
|
59
|
-
of a dataset_module block.
|
|
60
|
-
|
|
61
|
-
* On PostgreSQL, Database#indexes now includes a :deferrable entry
|
|
62
|
-
for each index hash, which will be true for unique indexes where
|
|
63
|
-
the underlying constraint is deferrable.
|
|
64
|
-
|
|
65
|
-
* On Microsoft SQL Server 2000, Dataset#update no longer includes a
|
|
66
|
-
limit (TOP), allowing it to work correctly.
|
|
67
|
-
|
|
68
|
-
= Backwards Compatibility
|
|
69
|
-
|
|
70
|
-
* Model.dataset_methods has been removed. This was used to store
|
|
71
|
-
blocks for methods created via def_dataset_method and subset.
|
|
72
|
-
The internals have been changed so that a dataset_module is
|
|
73
|
-
always used in these cases, therefore there was no longer a reason
|
|
74
|
-
for this method.
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
= New Features
|
|
2
|
-
|
|
3
|
-
* A core_refinements extension has been added, which offers
|
|
4
|
-
refinement versions of Sequel's core extensions. This requires
|
|
5
|
-
the new experimental refinement support added in ruby 2.0, and
|
|
6
|
-
allows you to use the Sequel DSL methods in a file without
|
|
7
|
-
actually modifying the Symbol, String, Array, and Hash classes.
|
|
8
|
-
|
|
9
|
-
* A date_arithmetic extension has been added for performing
|
|
10
|
-
database-independent date calculations (adding/subtracting an
|
|
11
|
-
interval to/from a date):
|
|
12
|
-
|
|
13
|
-
Sequel.extension :date_arithmetic
|
|
14
|
-
e = Sequel.date_add(:date_column, :years=>1, :months=>2, :days=>3)
|
|
15
|
-
DB[:table].where(e > Sequel::CURRENT_DATE)
|
|
16
|
-
|
|
17
|
-
In addition to providing the interval as a hash, you can also
|
|
18
|
-
provide it as an ActiveSupport::Duration object. This extension
|
|
19
|
-
is supported on 11 database types.
|
|
20
|
-
|
|
21
|
-
* Dataset#get can now take an array of multiple expressions to get
|
|
22
|
-
an array of values, similar to map/select_map:
|
|
23
|
-
|
|
24
|
-
value1, value2 = DB[:table].get([:column1, :column2])
|
|
25
|
-
|
|
26
|
-
* Sequel can now handle [host.]database.schema.table qualified
|
|
27
|
-
tables on Microsoft SQL Server. To implement this support,
|
|
28
|
-
the split_qualifiers method has been added to Database and
|
|
29
|
-
Dataset for taking a possibly qualified identifier and splitting
|
|
30
|
-
it into an array of identifier strings.
|
|
31
|
-
|
|
32
|
-
* The string_stripper plugin now offers the ability to manually
|
|
33
|
-
specify which columns to skip stripping for via
|
|
34
|
-
Model.skip_string_stripping.
|
|
35
|
-
|
|
36
|
-
= Other Improvements
|
|
37
|
-
|
|
38
|
-
* The jdbc adapter now works with the new jdbc-* gems, which require
|
|
39
|
-
a manual load_driver step that the older jdbc-* gems did not
|
|
40
|
-
require.
|
|
41
|
-
|
|
42
|
-
* The string_stripper plugin no longer strips blob columns or values.
|
|
43
|
-
|
|
44
|
-
* Database#copy_into in both the postgres and jdbc/postgres adapters
|
|
45
|
-
has been fixed to better handle exceptions.
|
|
46
|
-
|
|
47
|
-
* Dataset#hash and Model#hash are now significantly faster.
|
|
48
|
-
|
|
49
|
-
* Lambda procs with 0 arity can now be used as virtual row blocks
|
|
50
|
-
on ruby 1.9. Previously, attempting to use a lambda proc with
|
|
51
|
-
0 arity as a virtual row block on ruby 1.9 would raise an exception.
|
|
52
|
-
|
|
53
|
-
* Schema-qualified composite types are now handled correctly in
|
|
54
|
-
the pg_row extension.
|
|
55
|
-
|
|
56
|
-
* Database#reset_primary_key_sequence on PostgreSQL now works
|
|
57
|
-
correctly when a default_schema is set.
|
|
58
|
-
|
|
59
|
-
* tinyint(1) unsigned columns on MySQL are now parsed as booleans
|
|
60
|
-
instead of integers on MySQL if converting tinyint to boolean.
|
|
61
|
-
|
|
62
|
-
* The jdbc adapter now supports the jdbc-hsqldb gem, so you can
|
|
63
|
-
now install that instead of having to require the .jar manually.
|
|
64
|
-
|
|
65
|
-
* Blobs are now casted correctly on DB2 when the use_clob_as_blob
|
|
66
|
-
setting is false.
|
|
67
|
-
|
|
68
|
-
* Oracle timestamptz types are now handled correctly in the
|
|
69
|
-
jdbc/oracle adapter.
|
|
70
|
-
|
|
71
|
-
* Sequel now defaults to :prefetch_rows = 100 in the oracle
|
|
72
|
-
adapter, which can significantly improve performance.
|
|
73
|
-
|
|
74
|
-
* Sequel now defines respond_to_missing? where method_missing? is
|
|
75
|
-
defined and the object also responds to respond_to?.
|
|
76
|
-
|
|
77
|
-
* Sequel::BasicObject now responds to instance_exec on ruby 1.8.
|
|
78
|
-
|
|
79
|
-
= Backwards Compatibility
|
|
80
|
-
|
|
81
|
-
* The meta_def method that was defined on Database, Dataset, and
|
|
82
|
-
Model classes and instances has been moved to an extension named
|
|
83
|
-
meta_def, and is no longer loaded by default. This method was
|
|
84
|
-
previously used internally, and it wasn't designed for external
|
|
85
|
-
use. If you have code that uses meta_def, you should now load the
|
|
86
|
-
extension manually:
|
|
87
|
-
|
|
88
|
-
Sequel.extension :meta_def
|
|
89
|
-
|
|
90
|
-
* The private _*_dataset_helper model association methods are no
|
|
91
|
-
longer defined. The AssociationReflection#dataset_helper_method
|
|
92
|
-
public method is also no longer defined.
|
|
93
|
-
|
|
94
|
-
* Dataset#schema_and_table now always returns strings (or nil).
|
|
95
|
-
Before, in some cases it would return symbols.
|
|
96
|
-
|
|
97
|
-
* Using a conditions specifier array with Dataset#get no longer
|
|
98
|
-
works due to the new multiple values support in Database#get.
|
|
99
|
-
So code such as:
|
|
100
|
-
|
|
101
|
-
DB[:table].get([[:a, 1], [:b, 2]])
|
|
102
|
-
|
|
103
|
-
should be changed to:
|
|
104
|
-
|
|
105
|
-
DB[:table].get(Sequel.expr([[:a, 1], [:b, 2]]))
|
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
= New Features
|
|
2
|
-
|
|
3
|
-
* Dataset#paged_each has been added, for processing entire datasets
|
|
4
|
-
without keeping all rows in memory, even if the underlying driver
|
|
5
|
-
keeps all query results in memory. This is implemented using
|
|
6
|
-
limits and offsets, and requires an order (model datasets use a
|
|
7
|
-
default order by primary key). It defaults to fetching 1000
|
|
8
|
-
rows at a time, but that can be changed via the :rows_per_fetch
|
|
9
|
-
option.
|
|
10
|
-
|
|
11
|
-
This method is drop-in compatible for each. Previously, the
|
|
12
|
-
pagination extension's each_page method could be used for a
|
|
13
|
-
similar purpose, but users of each_page are now encouraged to
|
|
14
|
-
switch to paged_each.
|
|
15
|
-
|
|
16
|
-
* Sequel now recognizes constraint violation exceptions on most
|
|
17
|
-
databases, and will raise specific exceptions for different
|
|
18
|
-
types of constraint violations, instead of the generic
|
|
19
|
-
Sequel::DatabaseError:
|
|
20
|
-
|
|
21
|
-
* Sequel::ConstraintViolation (generic superclass)
|
|
22
|
-
* Sequel::CheckConstraintViolation
|
|
23
|
-
* Sequel::NotNullConstraintViolation
|
|
24
|
-
* Sequel::ForeignKeyConstraintViolation
|
|
25
|
-
* Sequel::UniqueConstraintViolation
|
|
26
|
-
* Sequel::Postgres::ExclusionConstraintViolation
|
|
27
|
-
|
|
28
|
-
* The :dataset association option can now take accept an optional
|
|
29
|
-
association reflection option. Instead of doing:
|
|
30
|
-
|
|
31
|
-
Album.one_to_many :artists,
|
|
32
|
-
:dataset=>{Artist...}
|
|
33
|
-
|
|
34
|
-
you can now do:
|
|
35
|
-
|
|
36
|
-
Album.one_to_many :artists,
|
|
37
|
-
:dataset=>{|r| r.associated_dataset...}
|
|
38
|
-
|
|
39
|
-
This second form will preform better.
|
|
40
|
-
|
|
41
|
-
* Temporary views are now supported on PostgreSQL and SQLite using
|
|
42
|
-
the :temp option to create_view.
|
|
43
|
-
|
|
44
|
-
= Other Improvements
|
|
45
|
-
|
|
46
|
-
* Row fetching speed in the tinytds adapter has been increased by
|
|
47
|
-
up to 60%.
|
|
48
|
-
|
|
49
|
-
* Row fetching speed in the mysql2 adapter when using an identifier
|
|
50
|
-
output method has been increased by up to 50%.
|
|
51
|
-
|
|
52
|
-
* On databases where offsets are emulated via the ROW_NUMBER window
|
|
53
|
-
function (Oracle, DB2, Microsoft SQL Server), using an offset in
|
|
54
|
-
a subselect is now supported. For example, the following code
|
|
55
|
-
previously didn't work correctly with emulated offsets:
|
|
56
|
-
|
|
57
|
-
# Second 5 rows ordered by column2 of the second 10 rows ordered
|
|
58
|
-
# by column 1.
|
|
59
|
-
DB[:table].order(:column1).limit(10, 10).
|
|
60
|
-
from_self.order(:column2).limit(5, 5)
|
|
61
|
-
|
|
62
|
-
Row processing speed has been increased slightly for all adapters
|
|
63
|
-
that supported databases where offsets are emulated.
|
|
64
|
-
|
|
65
|
-
* Association method performance has improved by caching an
|
|
66
|
-
intermediate dataset. This can close to triple the performance
|
|
67
|
-
of the association_dataset method, and increase the performance
|
|
68
|
-
of the association method by close to 30%.
|
|
69
|
-
|
|
70
|
-
* Virtual Row performance has increased about 30% in the typical
|
|
71
|
-
case by using a shared VirtualRow instance.
|
|
72
|
-
|
|
73
|
-
* Database#create_or_replace_view is now emulated on databases that
|
|
74
|
-
don't support it directly by dropping the view before attempting
|
|
75
|
-
to create it.
|
|
76
|
-
|
|
77
|
-
* The columns_introspection extension can now introspect for simple
|
|
78
|
-
select * queries from subselects, and it can now use the cached
|
|
79
|
-
schema information in the database for simple select * queries
|
|
80
|
-
from tables.
|
|
81
|
-
|
|
82
|
-
* The identity_map plugin now works correctly with many-to-many
|
|
83
|
-
right-side composite keys.
|
|
84
|
-
|
|
85
|
-
* Dataset#last for Model datasets now works even if you don't specify
|
|
86
|
-
an order explicitly, giving the last entry by primary key. Note
|
|
87
|
-
that Dataset#first for model datasets still does not order by
|
|
88
|
-
default.
|
|
89
|
-
|
|
90
|
-
* The eager_each plugin no longer uses Object#extend at runtime.
|
|
91
|
-
|
|
92
|
-
* Database#remove_cached_schema is now thread-safe on non-GVL ruby
|
|
93
|
-
implementations.
|
|
94
|
-
|
|
95
|
-
* Connection errors in the jdbc adapter now provide slightly more
|
|
96
|
-
helpful messages.
|
|
97
|
-
|
|
98
|
-
* Sequel now uses the standard offset emulation code in the
|
|
99
|
-
jdbc/as400 adapter, instead of custom offset emulation code
|
|
100
|
-
specific to that adapter.
|
|
101
|
-
|
|
102
|
-
* Database#create_view with a dataset now works correctly when using
|
|
103
|
-
the pg_auto_parameterize extension.
|
|
104
|
-
|
|
105
|
-
* Database#columns no longer calls the row_proc.
|
|
106
|
-
|
|
107
|
-
* Dataset#schema_and_table no longer turns a literal string into a
|
|
108
|
-
non-literal string.
|
|
109
|
-
|
|
110
|
-
* The oracle adapter now works with a :prefetch_rows=>nil option,
|
|
111
|
-
which explicitly disables prefetching.
|
|
112
|
-
|
|
113
|
-
* The mock mssql adapter now sets a server_version so that more
|
|
114
|
-
parts of it work.
|
|
115
|
-
|
|
116
|
-
= Backwards Compatibility
|
|
117
|
-
|
|
118
|
-
* Offset emulation via ROW_NUMBER works by moving the query to a
|
|
119
|
-
subselect that also selects from the ROW_NUMBER window function,
|
|
120
|
-
and filtering on the ROW_NUMBER in the main query. Previously, the
|
|
121
|
-
ROW_NUMBER was also present in the output columns, and some
|
|
122
|
-
adapter code was needed to hide that fact. Now, the outer select
|
|
123
|
-
selects all of the inner columns in the subselect except for the
|
|
124
|
-
ROW_NUMBER, reducing the adapter code needed. This has the side
|
|
125
|
-
effect of potentially requiring a query (or multiple queries for
|
|
126
|
-
multiple subselects) to determine the columns to use. The
|
|
127
|
-
columns_introspection extension may reduce the number of queries
|
|
128
|
-
needed.
|
|
129
|
-
|
|
130
|
-
* The correlated_subquery eager limit strategy is no longer supported
|
|
131
|
-
on Microsoft SQL Server for many_*_many associations. As the
|
|
132
|
-
window_function eager limit strategy is supported there, there is
|
|
133
|
-
no reason to use the correlated_subquery strategy.
|
|
134
|
-
|
|
135
|
-
* The public AssociationReflection#_dataset_method method has been
|
|
136
|
-
removed.
|
|
137
|
-
|
|
138
|
-
* The private _*_dataset methods for associations (e.g.
|
|
139
|
-
_albums_dataset) have been removed.
|
|
140
|
-
|
|
141
|
-
* The private Dataset#offset_returns_row_number_column? method has
|
|
142
|
-
been removed.
|
|
143
|
-
|
|
144
|
-
* :conditions options for associations are now added to the
|
|
145
|
-
association dataset before the foreign key filters, instead of
|
|
146
|
-
after. This should have no effect unless you were introspecting
|
|
147
|
-
the dataset's opts or sql and acting on it.
|
|
148
|
-
|
|
149
|
-
* The added abilities in the columns_introspection plugin to use
|
|
150
|
-
cached schema for introspection can now cause it to return
|
|
151
|
-
incorrect results if the table's schema has changed since it was
|
|
152
|
-
cached by Sequel.
|
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
= New Features
|
|
2
|
-
|
|
3
|
-
* Database#transaction now recognizes a :retry_on option, which
|
|
4
|
-
should contain an exception class or array of exception classes.
|
|
5
|
-
If the transaction raises one of the given exceptions, Sequel
|
|
6
|
-
will automatically retry the transaction block. It's a bad idea to
|
|
7
|
-
use this option if the transaction block is not idempotent.
|
|
8
|
-
|
|
9
|
-
By default, Sequel only retries the block 5 times by default,
|
|
10
|
-
to protect against infinite looping. You can change the number
|
|
11
|
-
of retries with the :num_retries option.
|
|
12
|
-
|
|
13
|
-
Users of the :disconnect=>:retry option are encouraged to switch
|
|
14
|
-
to :retry_on=>Sequel::DatabaseDisconnectError.
|
|
15
|
-
|
|
16
|
-
* Dataset#escape_like has been added for escaping LIKE
|
|
17
|
-
metacharacters. This is designed for the case where part of
|
|
18
|
-
the LIKE pattern is based on user input that should not treat the
|
|
19
|
-
metacharacters specially.
|
|
20
|
-
|
|
21
|
-
* Serialization failures/deadlocks are now raised as
|
|
22
|
-
Sequel::SerializationFailure exception instances. This exception
|
|
23
|
-
class is a good candidate for the transaction :retry_on option.
|
|
24
|
-
|
|
25
|
-
* On PostgreSQL, you can now provide the :force_standard_strings
|
|
26
|
-
and :client_min_messages Database options to override the defaults
|
|
27
|
-
on a per-instance basis.
|
|
28
|
-
|
|
29
|
-
* On PostgreSQL, Database#tables and #views now recognizes a
|
|
30
|
-
:qualify option, which if true will return qualified identifiers
|
|
31
|
-
instead of plain symbols.
|
|
32
|
-
|
|
33
|
-
* Transaction isolation levels are now supported on Oracle, DB2,
|
|
34
|
-
and all jdbc subadapters using the JDBC transaction support.
|
|
35
|
-
|
|
36
|
-
* Dataset.def_mutation_method now accepts a :module option for
|
|
37
|
-
the module in which to define the methods (defaulting to self).
|
|
38
|
-
|
|
39
|
-
* An unlimited_update plugin has been added. It's sole purpose is to
|
|
40
|
-
eliminate a MySQL warning in replicated environments, since by
|
|
41
|
-
default Sequel::Model uses a LIMIT clause when updating on MySQL.
|
|
42
|
-
|
|
43
|
-
* The named_timezones extension now adds a
|
|
44
|
-
Sequel.tzinfo_disambiguator accessor to automatically handle
|
|
45
|
-
TZInfo::AmbiguousTime exceptions. This should be a callable object
|
|
46
|
-
that accepts two arguments, a DateTime instance and an array of
|
|
47
|
-
timezone periods, and returns the timezone period to use.
|
|
48
|
-
|
|
49
|
-
= Other Improvements
|
|
50
|
-
|
|
51
|
-
* Sequel now handles JSON securely, specifying the
|
|
52
|
-
:create_additions=>false option when using JSON.parse. If you
|
|
53
|
-
really want to get the old vulnerable behavior back, override
|
|
54
|
-
Sequel.parse_json.
|
|
55
|
-
|
|
56
|
-
* The json_serializer and xml_serializer plugins are now secure
|
|
57
|
-
by default. Before, the default behavior of these plugins
|
|
58
|
-
allowed for round tripping, such that:
|
|
59
|
-
|
|
60
|
-
Album.from_xml(album.to_xml) == album
|
|
61
|
-
|
|
62
|
-
Unfortunately, that requires that the deserialization allow
|
|
63
|
-
the setting of any column. Since the plugins also handle
|
|
64
|
-
associations, you could also set any column in any associated
|
|
65
|
-
object, even cascading to associated objects of those objects.
|
|
66
|
-
|
|
67
|
-
The new default behavior only allows deserialization to set
|
|
68
|
-
the same columns that mass-assignment would set, and not to
|
|
69
|
-
handle associated objects at all by default. The following
|
|
70
|
-
additional options are supported:
|
|
71
|
-
|
|
72
|
-
:fields :: The specific fields to set (this was already supported
|
|
73
|
-
by the json_serializer plugin).
|
|
74
|
-
:associations :: The specific associations to handle.
|
|
75
|
-
:all_columns :: The previous behavior of setting all columns.
|
|
76
|
-
:all_associations :: The previous behavior of setting all
|
|
77
|
-
associations.
|
|
78
|
-
|
|
79
|
-
Since JSON parsing no longer deserializes into arbitrary ruby
|
|
80
|
-
instances, from_json and array_from_json class methods have been
|
|
81
|
-
added to the json_serializer plugin, for deserializing into model
|
|
82
|
-
instances. These mirror the from_xml and array_from_xml class
|
|
83
|
-
methods in the xml_serializer plugin.
|
|
84
|
-
|
|
85
|
-
Note that the :all_columns and :all_associations methods were
|
|
86
|
-
only added to make backwards compatibility easier. It is
|
|
87
|
-
likely they will be removed in Sequel 4, along with the
|
|
88
|
-
json_create class method.
|
|
89
|
-
|
|
90
|
-
* Sequel now attempts to use database specific error codes or
|
|
91
|
-
SQLState codes instead of regexp parsing to determine if a more
|
|
92
|
-
specific DatabaseError subclass should be used. This should make
|
|
93
|
-
error handling faster and more robust.
|
|
94
|
-
|
|
95
|
-
* Sequel now uses ESCAPE '\' when using LIKE, for similar behavior
|
|
96
|
-
across databases. Previously, no ESCAPE clause was used, so
|
|
97
|
-
behavior differed across databases, with most not using escaping,
|
|
98
|
-
and PostgreSQL, MySQL, and H2 defaulting to backslash as the escape
|
|
99
|
-
character.
|
|
100
|
-
|
|
101
|
-
* The query extension has been reimplemented and now uses a proxy
|
|
102
|
-
object instead of Object#extend.
|
|
103
|
-
|
|
104
|
-
* The :pool_timeout Database option now supports fractional seconds.
|
|
105
|
-
|
|
106
|
-
* Database#quote_identifier is now a public method.
|
|
107
|
-
|
|
108
|
-
* Metadata parsing (schema, indexes, foreign_key_list) on PostgreSQL
|
|
109
|
-
now correctly handles the case where an unqualified table name is
|
|
110
|
-
used and tables with that name exist in multiple schemas. It now
|
|
111
|
-
picks the first matching table in the schema_search_path, instead of
|
|
112
|
-
failing or returning results from all tables.
|
|
113
|
-
|
|
114
|
-
* Sequel::Model instances no longer attempt to typecast the money
|
|
115
|
-
type on PostgreSQL, since the previous typecast didn't work
|
|
116
|
-
correctly, and correct typecasting is locale-dependent.
|
|
117
|
-
|
|
118
|
-
* Sequel no longer picks up foreign keys for tables in other
|
|
119
|
-
databases when using Database#foreign_key_list on MySQL.
|
|
120
|
-
|
|
121
|
-
* A warning when using the mysql2 3.12 beta has been eliminated.
|
|
122
|
-
|
|
123
|
-
* A warning has been eliminated when using the jdbc/oracle adapter
|
|
124
|
-
on JRuby 1.7.
|
|
125
|
-
|
|
126
|
-
* Sequel's ilike emulation should now work by default on databases
|
|
127
|
-
without specific syntax support.
|
|
128
|
-
|
|
129
|
-
* Dataset#from_self! no longer creates a self referential dataset.
|
|
130
|
-
|
|
131
|
-
* Coverage testing now uses simplecov instead of rcov on ruby 1.9+.
|
|
132
|
-
|
|
133
|
-
= Backwards Compatibility
|
|
134
|
-
|
|
135
|
-
* The switch to using JSON.parse :create_additions=>false means
|
|
136
|
-
that if your app expected JSON to deserialize into arbitrary
|
|
137
|
-
ruby objects, it is probably broken. You should update your
|
|
138
|
-
application code to manually convert the deserialized hashes
|
|
139
|
-
into the ruby objects you want.
|
|
140
|
-
|
|
141
|
-
Note that it's not just this new version of Sequel that will
|
|
142
|
-
cause that, older versions of Sequel will break in the same
|
|
143
|
-
way if you update your JSON library to a version that is not
|
|
144
|
-
vulnerable by default.
|
|
145
|
-
|
|
146
|
-
This potentially affects the pg_json extension and serialization
|
|
147
|
-
plugin if you were expecting the JSON stored in the database
|
|
148
|
-
to be deserialized into arbitrary ruby objects.
|
|
149
|
-
|
|
150
|
-
See the json_serializer/xml_serializer changes mentioned in
|
|
151
|
-
the Other Improvements section.
|
|
152
|
-
|
|
153
|
-
* The reimplemented query extension is not completely backwards
|
|
154
|
-
compatible. For example, inside a query block, self refers to the
|
|
155
|
-
proxy object instead of a dataset, and calling methods that return
|
|
156
|
-
rows no longer raises an exception.
|
|
157
|
-
|
|
158
|
-
* The metadata parsing methods on PostgreSQL no longer work with
|
|
159
|
-
unqualified tables where the table is not in the schema search
|
|
160
|
-
path. This makes metadata parsing consistent with how datasets
|
|
161
|
-
operate. For tables outside the schema search path, you must
|
|
162
|
-
qualify it before use now.
|
|
163
|
-
|
|
164
|
-
Additionally, using a nonexistent table name will raise an
|
|
165
|
-
exception instead of returning empty results in some cases.
|
|
166
|
-
|
|
167
|
-
* The Dataset#def_mutation_method instance method has been removed.
|
|
168
|
-
This method added mutation methods directly on the dataset instance,
|
|
169
|
-
which is generally not desired. Using the def_mutation_method class
|
|
170
|
-
method with the :module option is now the recommended approach.
|
|
171
|
-
|
|
172
|
-
* The switch to using ESCAPE for LIKE characters is backwards
|
|
173
|
-
incompatible on databases that don't use escaping by default,
|
|
174
|
-
when backslash is used in a LIKE pattern as a regular character.
|
|
175
|
-
Now you have to double the backslash in the pattern.
|
|
176
|
-
|
|
177
|
-
* Database#database_error_regexps private method now can return any
|
|
178
|
-
enumerable yielding regexp/exception class pairs, it is no longer
|
|
179
|
-
specified to return a hash.
|