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,234 +0,0 @@
|
|
|
1
|
-
= New Features
|
|
2
|
-
|
|
3
|
-
* A pg_row extension has been added that supports PostgreSQL's
|
|
4
|
-
row-valued/composite types. You can register support for
|
|
5
|
-
specific row types:
|
|
6
|
-
|
|
7
|
-
DB.register_row_type(:address)
|
|
8
|
-
|
|
9
|
-
Then you can create values of that row type:
|
|
10
|
-
|
|
11
|
-
ad = DB.row_type(:address, ['555 Foo St.', 'Bar City', '98765'])
|
|
12
|
-
# or
|
|
13
|
-
ad = DB.row_type(:address, :street=>'555 Foo St.',
|
|
14
|
-
:city=>'Bar City', :zip=>'98765')
|
|
15
|
-
|
|
16
|
-
Which you can use in your datasets:
|
|
17
|
-
|
|
18
|
-
DB[:people].insert(:name=>'Me', :address=>ad)
|
|
19
|
-
|
|
20
|
-
If you are using the native postgres adapter, when retreiving
|
|
21
|
-
row type values, they will be returned as instances of the row
|
|
22
|
-
type, which are hash-like objects:
|
|
23
|
-
|
|
24
|
-
ad = DB[:people].get(:address)
|
|
25
|
-
ad[:street] # => '555 Foo St.'
|
|
26
|
-
ad[:city] # => 'Bar City'
|
|
27
|
-
ad[:zip] # => '98765'
|
|
28
|
-
|
|
29
|
-
If you are also using the pg_array extension, then arrays of
|
|
30
|
-
composite types are supported automatically. Composite
|
|
31
|
-
types can also include arrays of other types as well as other
|
|
32
|
-
composite types, though recursive composite types are not
|
|
33
|
-
allowed by PostgreSQL.
|
|
34
|
-
|
|
35
|
-
Using arrays and composite types brings one of the benefits
|
|
36
|
-
of document databases to PostgreSQL, allowing you to store
|
|
37
|
-
nested structures inside a single row.
|
|
38
|
-
|
|
39
|
-
* A pg_row_ops extension has been added that adds DSL support
|
|
40
|
-
for accessing members of row-valued/composite types. You
|
|
41
|
-
first create a row op:
|
|
42
|
-
|
|
43
|
-
r = Sequel.pg_row_op(:row_column)
|
|
44
|
-
|
|
45
|
-
Then you can get DSL support for accessing members of that
|
|
46
|
-
row_column via the #[] method:
|
|
47
|
-
|
|
48
|
-
r[:a] # (row_column).a
|
|
49
|
-
|
|
50
|
-
This works with composite types containing composite types:
|
|
51
|
-
|
|
52
|
-
r[:a][:b] # ((row_column).a).b
|
|
53
|
-
|
|
54
|
-
When used in conjunction with the pg_array_ops extension,
|
|
55
|
-
there is support for composite types that include arrays,
|
|
56
|
-
as well as arrays of composite types:
|
|
57
|
-
|
|
58
|
-
r[1][:a] # (row_column[1]).a
|
|
59
|
-
r[:a][1] # (row_column).a[1]
|
|
60
|
-
|
|
61
|
-
The extension offers additional support for referencing
|
|
62
|
-
a table's type when it contains a column with the same
|
|
63
|
-
name, see the RDoc for details.
|
|
64
|
-
|
|
65
|
-
* A pg_row plugin has been added, that works with the pg_row
|
|
66
|
-
extension, and allows you to represent row-valued types as
|
|
67
|
-
Sequel::Model objects (instead of the hash-like objects
|
|
68
|
-
they use by default). In your model class, you load the
|
|
69
|
-
plugin:
|
|
70
|
-
|
|
71
|
-
class Address < Sequel::Model(:address)
|
|
72
|
-
plugin :pg_row
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
Then you can use Address instances in your datasets:
|
|
76
|
-
|
|
77
|
-
ad = Address.new(:street=>'555 Foo St.',
|
|
78
|
-
:city=>'Bar City', :zip=>'98765')
|
|
79
|
-
DB[:people].insert(:name=>'Me', :address=>ad)
|
|
80
|
-
|
|
81
|
-
And if you are using the native postgres adapter, the dataset
|
|
82
|
-
will return the type as a model instance:
|
|
83
|
-
|
|
84
|
-
ad = DB[:people].get(:address)
|
|
85
|
-
ad.street # => '555 Foo St.'
|
|
86
|
-
ad.city # => 'Bar City'
|
|
87
|
-
ad.zip # => '98765'
|
|
88
|
-
|
|
89
|
-
* A pg_typecast_on_load plugin has been added. This plugin is
|
|
90
|
-
designed for use with the jdbc/postgres, do/postgres, and
|
|
91
|
-
swift/postgres adapters, and it is similar to the
|
|
92
|
-
typecast_on_load plugin. However, while the typecast_on_load
|
|
93
|
-
plugin uses setter methods, the pg_typecast_on_load plugin
|
|
94
|
-
uses the same code that the native postgres adapter uses for
|
|
95
|
-
typecasting.
|
|
96
|
-
|
|
97
|
-
* The tinytds adapter now supports a :textsize option to override
|
|
98
|
-
the default TEXTSIZE setting. The FreeTDS default is fairly
|
|
99
|
-
small (~64k), so if you want to use large blob or text columns,
|
|
100
|
-
you should probably set this to a value larger than the
|
|
101
|
-
largest text/blob you want to use.
|
|
102
|
-
|
|
103
|
-
* Sequel.expr when called with a symbol now splits the symbol and
|
|
104
|
-
returns an Identifier, QualifiedIdentifier, or AliasedExpression,
|
|
105
|
-
depending on the content of the symbol. Previously, it only
|
|
106
|
-
wrapped the symbol using a Wrapper.
|
|
107
|
-
|
|
108
|
-
* Identifier#* and QualifiedIdentifier#* when called without any
|
|
109
|
-
argument now represent a selection of all columns from the
|
|
110
|
-
represented table:
|
|
111
|
-
|
|
112
|
-
Sequel.expr(:table).* # table.*
|
|
113
|
-
Sequel.expr(:schema__table).* # schema.table.*
|
|
114
|
-
|
|
115
|
-
This makes it easier to represent the selection of all columns
|
|
116
|
-
in a table without using the core extensions.
|
|
117
|
-
|
|
118
|
-
* Model#values now has a Model#to_hash alias.
|
|
119
|
-
|
|
120
|
-
* SQL::Blob values now have as, cast, and lit methods even if the
|
|
121
|
-
core extensions are not loaded.
|
|
122
|
-
|
|
123
|
-
= Other Improvements
|
|
124
|
-
|
|
125
|
-
* When loading multiple pg_* extensions into a Database instance,
|
|
126
|
-
the conversion procs are only reset once instead of once per
|
|
127
|
-
extension.
|
|
128
|
-
|
|
129
|
-
* All adapters that access PostgreSQL now store type conversion
|
|
130
|
-
procs, similar to the native postgres adapter. This has been
|
|
131
|
-
added to make it easier to write extensions that support
|
|
132
|
-
advanced PostgreSQL types.
|
|
133
|
-
|
|
134
|
-
* Database#schema output on PostgreSQL now includes the type oid
|
|
135
|
-
for each column.
|
|
136
|
-
|
|
137
|
-
* You can now register custom array types to specific Database
|
|
138
|
-
instances, using the :type_procs and :typecast_methods_module
|
|
139
|
-
options, so it is now possible to have custom array types
|
|
140
|
-
without affecting global state.
|
|
141
|
-
|
|
142
|
-
* Dropping of columns with defaults now works correctly on
|
|
143
|
-
Microsoft SQL Server. Before, it would fail as the related
|
|
144
|
-
constraint was not dropped first.
|
|
145
|
-
|
|
146
|
-
* The MySQL type "double(x,y)" is now recognized as a float type.
|
|
147
|
-
|
|
148
|
-
* The jdbc/jtds and jdbc/derby adapters now handle nil prepared
|
|
149
|
-
statement values in more cases.
|
|
150
|
-
|
|
151
|
-
* Blob prepared statement arguments are now handled correctly on
|
|
152
|
-
jdbc/db2 and jdbc/oracle.
|
|
153
|
-
|
|
154
|
-
* Sequel now works around a Time#nsec bug in JRuby 1.6 ruby 1.9 mode
|
|
155
|
-
when using Time values in prepared statements in the jdbc adapter.
|
|
156
|
-
|
|
157
|
-
* Java::JavaUtil::UUID types are now returned as ruby strings
|
|
158
|
-
when converting types in the jdbc adapter.
|
|
159
|
-
|
|
160
|
-
* Real boolean literals are now used on derby 10.7+. On derby <10.7
|
|
161
|
-
Sequel still uses (1 = 1) and (1 != 1) for true and false. This
|
|
162
|
-
allows you to use boolean columns with a true/false default on
|
|
163
|
-
derby 10.7+.
|
|
164
|
-
|
|
165
|
-
* Clobs are now treated as string types instead of blobs on derby,
|
|
166
|
-
since treating clob as blob doesn't work there.
|
|
167
|
-
|
|
168
|
-
* The swift adapter now supports an output identifier method.
|
|
169
|
-
|
|
170
|
-
* The swift adapter now returns blobs as SQL::Blob instances.
|
|
171
|
-
|
|
172
|
-
* The schema_dumper extension no longer produces code that requires
|
|
173
|
-
the core extensions.
|
|
174
|
-
|
|
175
|
-
* All of Sequel's specs now run without the core extensions loaded,
|
|
176
|
-
ensuring that none of the internals depend on the core extensions.
|
|
177
|
-
The only exception is the specs for the core extensions themselves.
|
|
178
|
-
|
|
179
|
-
= Backwards Compatibility
|
|
180
|
-
|
|
181
|
-
* The pg_* extensions no longer modify core classes if the
|
|
182
|
-
core_extensions extension is not loaded. All methods they added now
|
|
183
|
-
have equivalent methods on the main Sequel module:
|
|
184
|
-
|
|
185
|
-
Sequel.pg_array
|
|
186
|
-
Sequel.pg_array_op
|
|
187
|
-
Sequel.hstore
|
|
188
|
-
Sequel.hstore_op
|
|
189
|
-
Sequel.pg_json
|
|
190
|
-
Sequel.pg_range
|
|
191
|
-
Sequel.pg_range_op
|
|
192
|
-
|
|
193
|
-
* The Sequel::SQL::IdentifierMethods module has been removed. This
|
|
194
|
-
module was only included in Symbol if the core_extensions were
|
|
195
|
-
enabled. Since it only defined a single method, now the core
|
|
196
|
-
extensions just define that method directly on Symbol.
|
|
197
|
-
|
|
198
|
-
* The swift adapter now requires swift-db-{postgres,mysql,sqlite3}
|
|
199
|
-
gems instead of the swift gem. swift/postgres requires
|
|
200
|
-
swift-db-postgres 0.2.0+, swift/sqlite requires swift-db-sqlite
|
|
201
|
-
0.1.2+, and swift/mysql requires swift-db-mysql.
|
|
202
|
-
|
|
203
|
-
* Sequel will no longer typecast a string to a PostgreSQL array
|
|
204
|
-
or hstore column in a model column setter. This is because the
|
|
205
|
-
parsers that Sequel uses were designed to support only
|
|
206
|
-
PostgreSQL's output format. It's unlikely that a user would
|
|
207
|
-
provide that format for typecasting, and while there aren't known
|
|
208
|
-
security issues with the parsers, they were not designed to handle
|
|
209
|
-
arbtirary user input, so typecasting from string is no longer
|
|
210
|
-
allowed and will now raise an error.
|
|
211
|
-
|
|
212
|
-
The only reason such typecasting was allowed in the first place
|
|
213
|
-
was to work around issues in the jdbc/postgres, do/postgres, and
|
|
214
|
-
swift/postgres adapters, using the the typecast_on_load plugin.
|
|
215
|
-
If you were previously using the typecast_on_load plugin for
|
|
216
|
-
hstore or array columns, you need to switch to using the new
|
|
217
|
-
pg_typecast_on_load plugin.
|
|
218
|
-
|
|
219
|
-
* The private get_conversion_procs method in the postgres adapter
|
|
220
|
-
no longer accepts an argument.
|
|
221
|
-
|
|
222
|
-
* The Sequel::Postgres::PGArray::DatabaseMethods singleton
|
|
223
|
-
define_array_typecast_method method has been removed. This
|
|
224
|
-
method was designed for internal use.
|
|
225
|
-
|
|
226
|
-
* The change to make Sequel.expr split symbols can cause the
|
|
227
|
-
following type of code to break:
|
|
228
|
-
|
|
229
|
-
Sequel.expr(:column___alias).desc
|
|
230
|
-
|
|
231
|
-
This is because expr now returns an AliasedExpression, which
|
|
232
|
-
doesn't support the desc method. However, as you can't
|
|
233
|
-
apply an order to an aliased expression, nobody should be
|
|
234
|
-
relying on this.
|
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
= New Features
|
|
2
|
-
|
|
3
|
-
* A constraint_validations extension and plugin have been added,
|
|
4
|
-
which allow you to define validations when creating tables,
|
|
5
|
-
which are enforced by database constraints, and have those
|
|
6
|
-
validations be automatically discovered and used by your
|
|
7
|
-
Sequel::Model classes.
|
|
8
|
-
|
|
9
|
-
The extension is designed to be used in your migrations/schema
|
|
10
|
-
modification code:
|
|
11
|
-
|
|
12
|
-
DB.extension(:constraint_validations)
|
|
13
|
-
DB.create_constraint_validations_table
|
|
14
|
-
DB.create_table(:foos) do
|
|
15
|
-
primary_key :id
|
|
16
|
-
String :name
|
|
17
|
-
|
|
18
|
-
validate do
|
|
19
|
-
min_length 5, :name
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
This creates a database CHECK constraint that ensures that the
|
|
24
|
-
minimum length for the column is 5 characters. It also adds
|
|
25
|
-
metadata about the validation to the
|
|
26
|
-
sequel_constraint_validations table.
|
|
27
|
-
|
|
28
|
-
To have the model class automatically create validations, just
|
|
29
|
-
include the plugin in the model:
|
|
30
|
-
|
|
31
|
-
class Foo < Sequel::Model
|
|
32
|
-
plugin :constraint_validations
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
Note that MySQL does not enforce CHECK constraints (it parses
|
|
36
|
-
but ignores them), so using the extension on MySQL does not
|
|
37
|
-
actually enforce constraints at the database level, though it
|
|
38
|
-
still does support the automatic model validations if the plugin
|
|
39
|
-
is used.
|
|
40
|
-
|
|
41
|
-
* Dataset#count now takes an argument or a virtual row block,
|
|
42
|
-
allowing you to do:
|
|
43
|
-
|
|
44
|
-
DB[:table].count(:column_name)
|
|
45
|
-
DB[:table].count{function_name(column1, column2)}
|
|
46
|
-
|
|
47
|
-
When count is given an argument, instead of returning the total
|
|
48
|
-
number of rows, it returns the number of rows where the
|
|
49
|
-
argument has a non-NULL value.
|
|
50
|
-
|
|
51
|
-
* Database#copy_into has been added to the postgres adapter when
|
|
52
|
-
the pg driver is being used, and can be used for very fast
|
|
53
|
-
inserts into tables if you already have the input preformatted
|
|
54
|
-
in PostgreSQL text or CSV format.
|
|
55
|
-
|
|
56
|
-
* set_table_not_null has been added to the alter table generator,
|
|
57
|
-
for a nicer API:
|
|
58
|
-
|
|
59
|
-
alter_table(:t){set_column_not_null :col}
|
|
60
|
-
# instead of
|
|
61
|
-
alter_table(:t){set_column_allow_null :col, false}
|
|
62
|
-
|
|
63
|
-
Additionally, set_column_allow_null now defaults the second
|
|
64
|
-
argument to true for a nicer API:
|
|
65
|
-
|
|
66
|
-
alter_table(:t){set_column_allow_null :col}
|
|
67
|
-
# instead of
|
|
68
|
-
alter_table(:t){set_column_allow_null :col, true}
|
|
69
|
-
|
|
70
|
-
* Database#supports_regexp? has been added for checking if the
|
|
71
|
-
database supports Regexp in filters. Currently, only MySQL and
|
|
72
|
-
PostgreSQL support Regexps.
|
|
73
|
-
|
|
74
|
-
Attempting to use a Regexp on a database that doesn't support it
|
|
75
|
-
now raises an error when attempting to generate the SQL, instead
|
|
76
|
-
of sending invalid SQL to the database.
|
|
77
|
-
|
|
78
|
-
* Sequel.char_length has been added for a cross platform
|
|
79
|
-
char_length function (emulated when char_length is not supported
|
|
80
|
-
natively by the database).
|
|
81
|
-
|
|
82
|
-
* Sequel.trim has been added for a cross platform trim function
|
|
83
|
-
(emulated when trim is not supported natively by the database).
|
|
84
|
-
|
|
85
|
-
* ValidationFailed and HookFailed exceptions now have a model method
|
|
86
|
-
that returns the model instance related to the exception. This
|
|
87
|
-
makes it possible to use Model.create inside a begin/rescue block
|
|
88
|
-
and get access to the underlying instance if there is a validation
|
|
89
|
-
or before/around hook error.
|
|
90
|
-
|
|
91
|
-
* The subclasses plugin now accepts a block, which is called with
|
|
92
|
-
each model class created. This is useful if you want to apply
|
|
93
|
-
changes to classes created in the future instead of just existing
|
|
94
|
-
classes.
|
|
95
|
-
|
|
96
|
-
* The validates_unique validation in the validation_helpers plugin
|
|
97
|
-
now accepts a :where option for a custom uniqueness filter. Among
|
|
98
|
-
other things this makes it easy to implement a case insensitive
|
|
99
|
-
uniqueness validation on a case sensitive column.
|
|
100
|
-
|
|
101
|
-
* The threaded connection pools now support a
|
|
102
|
-
:connection_handling=>:disconnect option, which makes them disconnect
|
|
103
|
-
connections after use instead of returning them to the pool. This
|
|
104
|
-
makes it possible to completely control connection lifetime using
|
|
105
|
-
Database#synchronize.
|
|
106
|
-
|
|
107
|
-
* The pg_row_op extension now has support for PGRowOp#*, for referencing
|
|
108
|
-
the members of the composite type as separate columns.
|
|
109
|
-
|
|
110
|
-
* MySQL's set type and default value are now recognized.
|
|
111
|
-
|
|
112
|
-
* bin/sequel now accepts a -c argument for running an arbitrary
|
|
113
|
-
code string instead of using an IRB prompt.
|
|
114
|
-
|
|
115
|
-
= Other Improvements
|
|
116
|
-
|
|
117
|
-
* Sequel now parses current date/timestamp column defaults when
|
|
118
|
-
parsing the schema for a table. The values will be returned
|
|
119
|
-
as Sequel::CURRENT_DATE for date columns and
|
|
120
|
-
Sequel::CURRENT_TIMESTAMP for timestamp columns.
|
|
121
|
-
|
|
122
|
-
The schema_dumper extension will work with these defaults, so
|
|
123
|
-
if you dump the schema for a table with a column that uses
|
|
124
|
-
a current timestamp default, the dumped schema will include
|
|
125
|
-
the default.
|
|
126
|
-
|
|
127
|
-
The defaults setter plugin also works with these changes, so
|
|
128
|
-
that when new model objects are instantiated, they get the
|
|
129
|
-
current Date/Time/DateTime values set.
|
|
130
|
-
|
|
131
|
-
* On MySQL and PostgreSQL, Sequel will now by default attempt
|
|
132
|
-
to combine multiple alter_table operations into a single
|
|
133
|
-
query where it believes it can do so correctly. This can
|
|
134
|
-
potentially improve performance ~N times, where N is the number
|
|
135
|
-
of alter table operations.
|
|
136
|
-
|
|
137
|
-
This can change the SQL used for old migrations (though it
|
|
138
|
-
shouldn't change the result), and is a potentially risky
|
|
139
|
-
change. This may be disabled by default in future versions
|
|
140
|
-
if it causes problems.
|
|
141
|
-
|
|
142
|
-
* The defaults_setter plugin now correctly sets false default
|
|
143
|
-
values.
|
|
144
|
-
|
|
145
|
-
* The schema_dumper plugin now preserves fractional seconds
|
|
146
|
-
in timestamp column defaults when dumping.
|
|
147
|
-
|
|
148
|
-
* Time->DateTime and DateTime->Time typecasts now retain
|
|
149
|
-
fractional seconds on ruby 1.8.
|
|
150
|
-
|
|
151
|
-
* Array arguments passed to most PGArrayOp methods are now
|
|
152
|
-
automatically wrapped in a PGArray. If you want to use this
|
|
153
|
-
support, you need to make sure to load both the pg_array
|
|
154
|
-
and pg_array_op extensions.
|
|
155
|
-
|
|
156
|
-
* Sequel now does a better job of finding the sequence for a
|
|
157
|
-
given table on PostgreSQL, handling more corner cases. A small
|
|
158
|
-
side effect of this is sometimes sequence names will be quoted.
|
|
159
|
-
|
|
160
|
-
* Some potential thread-safety issues when using Sequel with
|
|
161
|
-
PostgreSQL on a non-GVL ruby implementation have been fixed.
|
|
162
|
-
|
|
163
|
-
* Sequel now correctly caches the server version query on MySQL.
|
|
164
|
-
|
|
165
|
-
* Sets of alter_table operations on MySQL and Microsoft SQL Server
|
|
166
|
-
that require parsing the current database schema, where later
|
|
167
|
-
alter_table operations depend on earlier ones, should now work
|
|
168
|
-
correctly.
|
|
169
|
-
|
|
170
|
-
* You can now drop check constraints on tables on SQLite, though
|
|
171
|
-
doing so drops all check constraints on the table, not only the
|
|
172
|
-
specific check constraint given.
|
|
173
|
-
|
|
174
|
-
* The identity_map plugin no longer breaks if used with a model
|
|
175
|
-
without a primary key.
|
|
176
|
-
|
|
177
|
-
* Sequel::SQL::NegativeBooleanConstant now inherits from Constant
|
|
178
|
-
instead of BooleanConstant. This means that
|
|
179
|
-
|
|
180
|
-
Sequel::NULL == Sequel::NOTNULL
|
|
181
|
-
|
|
182
|
-
is now false instead of true.
|
|
183
|
-
|
|
184
|
-
* You can now override the convert_tinyint_to_bool settings on a
|
|
185
|
-
per-Dataset basis in the mysql and mysql2 adapters, though
|
|
186
|
-
the overriding is different depending on the adapter. Check the
|
|
187
|
-
commit log for details.
|
|
188
|
-
|
|
189
|
-
* timestamp(N) types are now recognized as datetime, which should
|
|
190
|
-
fix certain cases on Oracle.
|
|
191
|
-
|
|
192
|
-
* Dataset#insert now handles a single model instance argument
|
|
193
|
-
as a single value if the model uses the pg_row plugin.
|
|
194
|
-
|
|
195
|
-
* When joining a model dataset using a model class as the table
|
|
196
|
-
argument, a subselect is used unless the model is a simple select
|
|
197
|
-
from the underlying table.
|
|
198
|
-
|
|
199
|
-
* The specs now cleanup after themselves, dropping the tables that
|
|
200
|
-
they create for testing.
|
|
201
|
-
|
|
202
|
-
= Backwards Compatibility
|
|
203
|
-
|
|
204
|
-
* The defaults_setter plugin's behavior changed due to the
|
|
205
|
-
current date/timestamp support. Previously, it would not set
|
|
206
|
-
a value for the column, since the default wasn't recognized.
|
|
207
|
-
Therefore, the database would use the default value on insert,
|
|
208
|
-
which would be the database's current timestamp.
|
|
209
|
-
|
|
210
|
-
Now, the value is set to the current Date/Time/DateTime on
|
|
211
|
-
model object instantiation, so the database wouldn't use the
|
|
212
|
-
column default. Instead of the database's current timestamp
|
|
213
|
-
on insert, the column value will be the application's
|
|
214
|
-
current timestamp on model instantiation.
|
|
215
|
-
|
|
216
|
-
Users who don't want this behavior can remove the default values
|
|
217
|
-
in the model:
|
|
218
|
-
|
|
219
|
-
Model.default_values.delete(:column_name)
|
|
220
|
-
|
|
221
|
-
* Plain (non-model) datasets no longer allow insert to accept
|
|
222
|
-
a single model instance argument. Also, they no longer call
|
|
223
|
-
values on a single argument if the object responds to it.
|
|
224
|
-
|
|
225
|
-
* Plain (non-model) datasets no longer accept model classes as
|
|
226
|
-
tables in the join/graph methods. Also, they no longer call
|
|
227
|
-
table_name on the argument if the object responds to it.
|
|
228
|
-
|
|
229
|
-
* The schema_dumper extension now requires the eval_inspect
|
|
230
|
-
extension, which changes inspect output for
|
|
231
|
-
Sequel::SQL::Expression objects.
|
|
232
|
-
|
|
233
|
-
* Custom adapters that override Database#alter_table_sql_list now
|
|
234
|
-
need to make sure it returns an already flattened array.
|
|
235
|
-
|
|
236
|
-
* The identity_map_key method in the identity_map plugin now returns
|
|
237
|
-
nil instead of a random string if the given pk is nil.
|