sequel 4.44.0 → 4.45.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +110 -0
- data/README.rdoc +8 -9
- data/doc/active_record.rdoc +2 -3
- data/doc/model_plugins.rdoc +1 -1
- data/doc/opening_databases.rdoc +0 -46
- data/doc/release_notes/4.45.0.txt +370 -0
- data/lib/sequel/adapters/cubrid.rb +2 -0
- data/lib/sequel/adapters/do.rb +2 -0
- data/lib/sequel/adapters/jdbc/as400.rb +2 -0
- data/lib/sequel/adapters/jdbc/cubrid.rb +2 -0
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +2 -0
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +2 -0
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +2 -0
- data/lib/sequel/adapters/jdbc/mysql.rb +1 -0
- data/lib/sequel/adapters/jdbc/postgresql.rb +5 -0
- data/lib/sequel/adapters/mysql.rb +1 -0
- data/lib/sequel/adapters/mysql2.rb +1 -0
- data/lib/sequel/adapters/odbc/oracle.rb +11 -0
- data/lib/sequel/adapters/odbc/progress.rb +2 -0
- data/lib/sequel/adapters/postgres.rb +0 -2
- data/lib/sequel/adapters/shared/cubrid.rb +2 -0
- data/lib/sequel/adapters/shared/firebird.rb +2 -0
- data/lib/sequel/adapters/shared/informix.rb +2 -0
- data/lib/sequel/adapters/shared/mssql.rb +47 -7
- data/lib/sequel/adapters/shared/mysql.rb +16 -1
- data/lib/sequel/adapters/shared/postgres.rb +9 -1
- data/lib/sequel/adapters/shared/progress.rb +2 -0
- data/lib/sequel/adapters/shared/sqlanywhere.rb +1 -1
- data/lib/sequel/adapters/swift.rb +2 -0
- data/lib/sequel/ast_transformer.rb +13 -6
- data/lib/sequel/core.rb +13 -16
- data/lib/sequel/database/connecting.rb +25 -10
- data/lib/sequel/database/dataset.rb +6 -1
- data/lib/sequel/database/dataset_defaults.rb +9 -2
- data/lib/sequel/database/misc.rb +10 -3
- data/lib/sequel/database/schema_methods.rb +4 -0
- data/lib/sequel/dataset/mutation.rb +8 -20
- data/lib/sequel/dataset/prepared_statements.rb +2 -0
- data/lib/sequel/dataset/query.rb +32 -7
- data/lib/sequel/dataset/sql.rb +13 -3
- data/lib/sequel/deprecated.rb +9 -1
- data/lib/sequel/exceptions.rb +37 -8
- data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +117 -0
- data/lib/sequel/extensions/date_arithmetic.rb +1 -0
- data/lib/sequel/extensions/identifier_mangling.rb +3 -2
- data/lib/sequel/extensions/pg_hstore.rb +1 -5
- data/lib/sequel/extensions/schema_dumper.rb +3 -1
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +2 -2
- data/lib/sequel/extensions/string_agg.rb +1 -0
- data/lib/sequel/model.rb +23 -10
- data/lib/sequel/model/associations.rb +17 -5
- data/lib/sequel/model/base.rb +115 -62
- data/lib/sequel/model/dataset_module.rb +10 -3
- data/lib/sequel/model/exceptions.rb +7 -5
- data/lib/sequel/plugins/association_pks.rb +13 -1
- data/lib/sequel/plugins/association_proxies.rb +8 -1
- data/lib/sequel/plugins/before_after_save.rb +1 -0
- data/lib/sequel/plugins/class_table_inheritance.rb +7 -3
- data/lib/sequel/plugins/columns_updated.rb +42 -0
- data/lib/sequel/plugins/composition.rb +10 -5
- data/lib/sequel/plugins/error_splitter.rb +1 -1
- data/lib/sequel/plugins/hook_class_methods.rb +39 -5
- data/lib/sequel/plugins/instance_hooks.rb +58 -5
- data/lib/sequel/plugins/lazy_attributes.rb +10 -5
- data/lib/sequel/plugins/nested_attributes.rb +10 -5
- data/lib/sequel/plugins/prepared_statements.rb +7 -0
- data/lib/sequel/plugins/prepared_statements_associations.rb +2 -0
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +2 -0
- data/lib/sequel/plugins/schema.rb +2 -0
- data/lib/sequel/plugins/scissors.rb +2 -0
- data/lib/sequel/plugins/serialization.rb +10 -5
- data/lib/sequel/plugins/split_values.rb +5 -1
- data/lib/sequel/plugins/static_cache.rb +2 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +1 -1
- data/lib/sequel/plugins/validation_contexts.rb +49 -0
- data/lib/sequel/plugins/validation_helpers.rb +1 -0
- data/lib/sequel/sql.rb +1 -1
- data/lib/sequel/version.rb +1 -1
- data/spec/adapters/mssql_spec.rb +31 -0
- data/spec/adapters/mysql_spec.rb +20 -2
- data/spec/adapters/postgres_spec.rb +43 -12
- data/spec/adapters/spec_helper.rb +5 -8
- data/spec/core/database_spec.rb +47 -12
- data/spec/core/dataset_mutation_spec.rb +22 -22
- data/spec/core/dataset_spec.rb +88 -20
- data/spec/core/deprecated_spec.rb +1 -1
- data/spec/core/expression_filters_spec.rb +1 -1
- data/spec/core/mock_adapter_spec.rb +0 -3
- data/spec/core/placeholder_literalizer_spec.rb +1 -1
- data/spec/core/schema_spec.rb +8 -1
- data/spec/core/spec_helper.rb +6 -1
- data/spec/core_extensions_spec.rb +4 -0
- data/spec/deprecation_helper.rb +17 -0
- data/spec/extensions/_deprecated_identifier_mangling_spec.rb +314 -0
- data/spec/extensions/association_pks_spec.rb +61 -13
- data/spec/extensions/association_proxies_spec.rb +3 -3
- data/spec/extensions/class_table_inheritance_spec.rb +39 -0
- data/spec/extensions/columns_updated_spec.rb +35 -0
- data/spec/extensions/composition_spec.rb +6 -1
- data/spec/extensions/hook_class_methods_spec.rb +114 -26
- data/spec/extensions/identifier_mangling_spec.rb +107 -73
- data/spec/extensions/instance_hooks_spec.rb +78 -14
- data/spec/extensions/lazy_attributes_spec.rb +8 -2
- data/spec/extensions/many_through_many_spec.rb +2 -2
- data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
- data/spec/extensions/nested_attributes_spec.rb +8 -2
- data/spec/extensions/pg_array_spec.rb +18 -4
- data/spec/extensions/prepared_statements_associations_spec.rb +48 -39
- data/spec/extensions/prepared_statements_with_pk_spec.rb +13 -11
- data/spec/extensions/query_spec.rb +1 -1
- data/spec/extensions/schema_dumper_spec.rb +34 -6
- data/spec/extensions/schema_spec.rb +13 -7
- data/spec/extensions/scissors_spec.rb +3 -1
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +4 -4
- data/spec/extensions/serialization_spec.rb +7 -1
- data/spec/extensions/set_overrides_spec.rb +2 -2
- data/spec/extensions/shared_caching_spec.rb +19 -15
- data/spec/extensions/spec_helper.rb +7 -3
- data/spec/extensions/split_values_spec.rb +45 -10
- data/spec/extensions/string_agg_spec.rb +2 -2
- data/spec/extensions/subset_conditions_spec.rb +3 -3
- data/spec/extensions/tactical_eager_loading_spec.rb +1 -1
- data/spec/extensions/validation_contexts_spec.rb +31 -0
- data/spec/guards_helper.rb +2 -0
- data/spec/integration/associations_test.rb +22 -20
- data/spec/integration/dataset_test.rb +25 -2
- data/spec/integration/model_test.rb +1 -1
- data/spec/integration/plugin_test.rb +11 -16
- data/spec/integration/prepared_statement_test.rb +40 -32
- data/spec/integration/spec_helper.rb +5 -8
- data/spec/model/association_reflection_spec.rb +4 -0
- data/spec/model/associations_spec.rb +37 -10
- data/spec/model/base_spec.rb +6 -0
- data/spec/model/hooks_spec.rb +56 -35
- data/spec/model/model_spec.rb +21 -5
- data/spec/model/record_spec.rb +14 -11
- data/spec/model/spec_helper.rb +7 -1
- data/spec/sequel_warning.rb +11 -0
- metadata +13 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 823afa5d16b89b8446d98fe80d985cadb2e58e65
|
4
|
+
data.tar.gz: 8bd6d96fc5c32b1199cf36cf955d93e4700b9308
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 79ecfbb21f5fcfb61921baa56353338b2dfbe2311851b0811c91fbb42cacb2ec7952684e4c1abd1f4bf3afb5b380465945de0c673581672bccc2e5e3dea60ae9
|
7
|
+
data.tar.gz: 3bae1fbfc25de1394f74e8f76cf435ce9353d55d0cd2a95b0246a53dc27335f1dd00bfe0f6574372ae8edf85e94d776da9d79b91f6833c0ae9bcc2d8671bcfbf
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,113 @@
|
|
1
|
+
=== 4.45.0 (2017-04-01)
|
2
|
+
|
3
|
+
* Correctly handle datasets with offsets but no limits used in compound datasets on MSSQL <2012 (jeremyevans)
|
4
|
+
|
5
|
+
* Correctly handle false values in the split_values plugin (bananarne) (#1333)
|
6
|
+
|
7
|
+
* Deprecate Dataset#dup/clone and Model.dup/clone (jeremyevans)
|
8
|
+
|
9
|
+
* Deprecate the schema and scissors plugins (jeremyevans)
|
10
|
+
|
11
|
+
* Deprecate Model.{lazy_attributes,nested_attributes,composition,serialization}_module accessors (jeremyevans)
|
12
|
+
|
13
|
+
* Deprecate Database#database_name on MySQL (jeremyevans)
|
14
|
+
|
15
|
+
* Deprecate Database#use on MySQL (jeremyevans)
|
16
|
+
|
17
|
+
* Make pg_hstore extension no longer update PG_NAMED_TYPES (jeremyevans)
|
18
|
+
|
19
|
+
* Deprecate Sequel::PG_NAMED_TYPES (jeremyevans)
|
20
|
+
|
21
|
+
* Add columns_updated plugin for making updated columns hash available in after_update and after_save hooks (jeremyevans)
|
22
|
+
|
23
|
+
* Deprecate accessing @columns_updated directly in model after_update and after_save hooks (jeremyevans)
|
24
|
+
|
25
|
+
* Deprecate Database#{add,remove}_servers when not using a sharded connection pool (jeremyevans)
|
26
|
+
|
27
|
+
* Deprecate Database#each_server (jeremyevans)
|
28
|
+
|
29
|
+
* Make Model#_valid? private method accept only an options hash (jeremyevans)
|
30
|
+
|
31
|
+
* Deprecate returning false from model before hooks to cancel the action, use Model#cancel_action (jeremyevans)
|
32
|
+
|
33
|
+
* Handle Model#cancel_action correctly in before hooks when Model#valid? is called (jeremyevans)
|
34
|
+
|
35
|
+
* Deprecate Sequel::BeforeHookFailed (jeremyevans)
|
36
|
+
|
37
|
+
* Deprecate passing multiple arguments as filter arguments when not using a conditions specifier (jeremyevans)
|
38
|
+
|
39
|
+
* Deprecate passing Procs as filter arguments, require they be passed as blocks (jeremyevans)
|
40
|
+
|
41
|
+
* Deprecate Sequel::Error::* exception class aliases (jeremyevans)
|
42
|
+
|
43
|
+
* Deprecate prepared_statements_associations and prepared_statements_with_pk plugins (jeremyevans)
|
44
|
+
|
45
|
+
* Deprecate Sequel::Unbinder, Sequel::UnbindDuplicate, and Dataset#unbind (jeremyevans)
|
46
|
+
|
47
|
+
* Deprecating calling Sequel::Qualifier with two arguments (jeremyevans)
|
48
|
+
|
49
|
+
* Add validation_contexts plugin for supporting custom contexts when validating (jeremyevans)
|
50
|
+
|
51
|
+
* Deprecate Sequel::Database.single_threaded singleton accessor (jeremyevans)
|
52
|
+
|
53
|
+
* Deprecate treating unrecognized prepared statement type as :select (jeremyevans)
|
54
|
+
|
55
|
+
* Deprecate Sequel.identifier_{in,out}put_method= and .quote_identifiers= singleton setters (jeremyevans)
|
56
|
+
|
57
|
+
* Deprecate Sequel::Database.identifier_{in,out}put_method and .quote_identifiers singleton accessors (jeremyevans)
|
58
|
+
|
59
|
+
* Deprecate loading the identifier_mangling by default, require it be loaded explicitly if needed (jeremyevans)
|
60
|
+
|
61
|
+
* Make Database#dump_{table_schema,schema_migration} in schema_dumper extension support :schema option (dadario) (#1328)
|
62
|
+
|
63
|
+
* Make Dataset#delete respect an existing limit on Microsoft SQL Server (jeremyevans)
|
64
|
+
|
65
|
+
* Add Dataset#skip_limit_check to mark a dataset as skipping the limit/offset check for updates and deletes (jeremyevans)
|
66
|
+
|
67
|
+
* Deprecate calling Dataset#{update/delete/truncate} on datasets with limits or offsets unless the database supports it (jeremyevans)
|
68
|
+
|
69
|
+
* Add deprecation message for using association_pks setter method with :delay_pks=>true association option (jeremyevans)
|
70
|
+
|
71
|
+
* Add deprecation message for using association_pks setter method without :delay_pks association option (jeremyevans)
|
72
|
+
|
73
|
+
* Deprecate having duplicate column names in subclass tables when using the class_table_inheritance plugin (jeremyevans)
|
74
|
+
|
75
|
+
* Deprecate do (DataObjects), swift, and jdbc/as400 adapters (jeremyevans)
|
76
|
+
|
77
|
+
* Deprecate support for Cubrid, Firebird, Informix, and Progress databases (jeremyevans)
|
78
|
+
|
79
|
+
* The :proxy_argument option passed to association_proxies plugin block is now an empty hash if no arguments are passed to the association method (jeremyevans)
|
80
|
+
|
81
|
+
* Deprecate passing non-hash arguments to association methods (jeremyevans)
|
82
|
+
|
83
|
+
* Deprecate passing multiple arguments to association methods (jeremyevans)
|
84
|
+
|
85
|
+
* Deprecate model transaction hook methods (jeremyevans)
|
86
|
+
|
87
|
+
* Drop support for pg <0.8.0 in the postgres adapter (jeremyevans)
|
88
|
+
|
89
|
+
* Deprecate passing a block to Database#from (jeremyevans)
|
90
|
+
|
91
|
+
* Deprecate Sequel::Model::ANONYMOUS_MODEL_CLASSES{,_MUTEX} (jeremyevans)
|
92
|
+
|
93
|
+
* Deprecate Sequel.cache_anonymous_models and Sequel.cache_anonymous_models= (jeremyevans)
|
94
|
+
|
95
|
+
* Automatically use from_self when using a dataset as part of a compound if it has an offset but no limit (jeremyevans)
|
96
|
+
|
97
|
+
* Drop order on existing datasets when using Dataset#union/intersect/except on Microsoft SQL Server unless a limit or offset is used (jeremyevans)
|
98
|
+
|
99
|
+
* Deprecate dataset mutation (jeremyevans)
|
100
|
+
|
101
|
+
* Handle dumping of autoincrementing 64-bit integer primary key columns correctly when using :same_db option in the schema dumper (jeremyevans) (#1324)
|
102
|
+
|
103
|
+
* Add Model.dataset_module_class accessor, allowing plugins to support custom behavior in dataset_module blocks (jeremyevans)
|
104
|
+
|
105
|
+
* Make ORDER BY come after UNION/INTERSECT/EXCEPT on Microsoft SQL Server and SQLAnywhere (jeremyevans)
|
106
|
+
|
107
|
+
* Make Database#indexes on MySQL handle qualified identifiers (jeremyevans) (#1316)
|
108
|
+
|
109
|
+
* Add oracle support to the odbc adapter (samuel02) (#1315)
|
110
|
+
|
1
111
|
=== 4.44.0 (2017-03-01)
|
2
112
|
|
3
113
|
* Add where_all, where_each, where_single_value model dataset methods, optimized for frozen datasets (jeremyevans)
|
data/README.rdoc
CHANGED
@@ -11,9 +11,9 @@ toolkit for Ruby.
|
|
11
11
|
statements, bound variables, stored procedures, savepoints,
|
12
12
|
two-phase commit, transaction isolation, master/slave
|
13
13
|
configurations, and database sharding.
|
14
|
-
* Sequel currently has adapters for ADO, Amalgalite,
|
15
|
-
|
16
|
-
PostgreSQL, SQLAnywhere, SQLite3,
|
14
|
+
* Sequel currently has adapters for ADO, Amalgalite,
|
15
|
+
IBM_DB, JDBC, MySQL, Mysql2, ODBC, Oracle,
|
16
|
+
PostgreSQL, SQLAnywhere, SQLite3, and TinyTDS.
|
17
17
|
|
18
18
|
== Resources
|
19
19
|
|
@@ -512,15 +512,14 @@ Sequel model classes assume that the table name is an underscored plural of the
|
|
512
512
|
|
513
513
|
You can explicitly set the table name or even the dataset used:
|
514
514
|
|
515
|
-
class Post < Sequel::Model(:my_posts)
|
516
|
-
end
|
515
|
+
class Post < Sequel::Model(:my_posts); end
|
517
516
|
# or:
|
518
|
-
Post
|
517
|
+
class Post < Sequel::Model(DB[:my_posts]); end
|
519
518
|
|
520
|
-
If you
|
519
|
+
If you pass a symbol to the <tt>Sequel::Model</tt> method, it assumes you are referring to the table with the same name. You can also call it with a dataset, which will set the defaults for all retrievals for that model:
|
521
520
|
|
522
|
-
Post
|
523
|
-
Post
|
521
|
+
class Post < Sequel::Model(DB[:my_posts].where(:category => 'ruby')); end
|
522
|
+
class Post < Sequel::Model(DB[:my_posts].select(:id, :name).order(:date)); end
|
524
523
|
|
525
524
|
=== Model instances
|
526
525
|
|
data/doc/active_record.rdoc
CHANGED
@@ -535,10 +535,9 @@ If you want to use a specific <tt>Sequel::Database</tt> object, you can use <tt>
|
|
535
535
|
BACKUP_DB = Sequel.connect('postgres://...')
|
536
536
|
Album.db = BACKUP_DB
|
537
537
|
|
538
|
-
If you want a specific dataset in that database,
|
538
|
+
If you want a specific dataset in that database for a model, setup the model with a specific dataset:
|
539
539
|
|
540
|
-
Album
|
541
|
-
Album.dataset = BACKUP_DB[:albums]
|
540
|
+
class Album < Sequel::Model(BACKUP_DB[:albums]); end
|
542
541
|
|
543
542
|
==== <tt>exists?</tt>
|
544
543
|
|
data/doc/model_plugins.rdoc
CHANGED
@@ -243,7 +243,7 @@ In many plugins, if the model class changes the dataset, you need to change the
|
|
243
243
|
end
|
244
244
|
end
|
245
245
|
|
246
|
-
With this code, any time the model's dataset changes, the state of the plugin will be updated to set the correct table name.
|
246
|
+
With this code, any time the model's dataset changes, the state of the plugin will be updated to set the correct table name. This is also called when creating a new model class with a dataset.
|
247
247
|
|
248
248
|
== Making Dataset Methods Callable as Class Methods
|
249
249
|
|
data/doc/opening_databases.rdoc
CHANGED
@@ -155,31 +155,6 @@ Without a database argument, assumes a memory database, so you can do:
|
|
155
155
|
Handles paths in the connection string similar to the SQLite adapter, so see
|
156
156
|
the sqlite section below for details.
|
157
157
|
|
158
|
-
=== cubrid
|
159
|
-
|
160
|
-
cubrid is a ruby extension for accessing a CUBRID database. Currently,
|
161
|
-
the ruby cubrid gem is in fairly rough state, with broken transaction
|
162
|
-
support and some other issues, but most things work.
|
163
|
-
|
164
|
-
=== do
|
165
|
-
|
166
|
-
Requires: data_objects
|
167
|
-
|
168
|
-
The DataObjects adapter supports PostgreSQL, MySQL, and SQLite. One possible
|
169
|
-
advantage of using DataObjects is that it does the typecasting in C, which may
|
170
|
-
be faster than the other adapters.
|
171
|
-
|
172
|
-
Similar to the JDBC adapter, the DO adapter only cares about connection strings,
|
173
|
-
which can either be the String argument given to Sequel.connect directly or contained
|
174
|
-
in a :uri or :url option. The DO adapter passes through the connection string
|
175
|
-
directly to DataObjects, it does no processing of it (other than removing the do: prefix).
|
176
|
-
|
177
|
-
Connection string examples:
|
178
|
-
|
179
|
-
do:sqlite3::memory:
|
180
|
-
do:postgres://user:password@host/database
|
181
|
-
do:mysql://user:password@host/database
|
182
|
-
|
183
158
|
=== ibmdb
|
184
159
|
|
185
160
|
requires 'ibm_db'
|
@@ -226,9 +201,6 @@ Example connection strings:
|
|
226
201
|
jdbc:jtds:sqlserver://localhost/sequel_test;user=sequel_test;password=sequel_test
|
227
202
|
jdbc:oracle:thin:user/password@localhost:1521:database
|
228
203
|
jdbc:db2://localhost:3700/database:user=user;password=password;
|
229
|
-
jdbc:firebirdsql:localhost/3050:/path/to/database.fdb
|
230
|
-
jdbc:jdbcprogress:T:hostname:port:database
|
231
|
-
jdbc:cubrid:hostname:port:database:::
|
232
204
|
jdbc:sqlanywhere://localhost?DBN=Test;UID=user;PWD=password
|
233
205
|
|
234
206
|
You can also use JNDI connection strings:
|
@@ -392,24 +364,6 @@ database is used. Attempts to force the use of more than 1 connection
|
|
392
364
|
can result in weird behavior, since the connections will be to separate
|
393
365
|
memory databases.
|
394
366
|
|
395
|
-
=== swift
|
396
|
-
|
397
|
-
swift is a ruby 1.9+ library, so you'll need to be running ruby 1.9+. It
|
398
|
-
can connect to SQLite, MySQL, and PostgreSQL, and you must specify which
|
399
|
-
database using the db_type option.
|
400
|
-
|
401
|
-
You need to install one of the swift db adapters
|
402
|
-
|
403
|
-
* swift-db-sqlite3
|
404
|
-
* swift-db-mysql
|
405
|
-
* swift-db-postgres
|
406
|
-
|
407
|
-
Examples:
|
408
|
-
|
409
|
-
swift:///?database=:memory:&db_type=sqlite
|
410
|
-
swift://root:root@localhost/test?db_type=mysql
|
411
|
-
swift://root:root@localhost/test?db_type=postgres
|
412
|
-
|
413
367
|
=== tinytds
|
414
368
|
|
415
369
|
Requires: tiny_tds
|
@@ -0,0 +1,370 @@
|
|
1
|
+
= Deprecated Features
|
2
|
+
|
3
|
+
* Dataset mutation is now deprecated. Users should switch to using
|
4
|
+
the non-mutating methods.
|
5
|
+
|
6
|
+
# Instead of:
|
7
|
+
dataset.where!(:foo)
|
8
|
+
# Switch to:
|
9
|
+
dataset = dataset.where(:foo)
|
10
|
+
|
11
|
+
* Support for the Cubrid, Firebird, Informix, and Progress databases
|
12
|
+
has been deprecated. Any users of this support should consider
|
13
|
+
creating an external adapter with the current code and maintaining
|
14
|
+
such support themselves.
|
15
|
+
|
16
|
+
* The do (DataObjects), swift, and jdbc/as400 adapters have been
|
17
|
+
deprecated. Any users of these adapters should consider creating an
|
18
|
+
external adapter with the current code and maintaining the adapter
|
19
|
+
themselves.
|
20
|
+
|
21
|
+
* Model transaction hooks (after_commit, after_rollback,
|
22
|
+
after_destroy_commit, after_destroy_rollback) are now deprecated.
|
23
|
+
Users should switch to calling the after_commit and after_rollback
|
24
|
+
database transaction hooks directly.
|
25
|
+
|
26
|
+
# Instead of:
|
27
|
+
def after_commit
|
28
|
+
super
|
29
|
+
do_something
|
30
|
+
end
|
31
|
+
# Switch to:
|
32
|
+
def after_save
|
33
|
+
super
|
34
|
+
db.after_commit{do_something}
|
35
|
+
end
|
36
|
+
|
37
|
+
* Passing a block to Database#from is now deprecated. For backwards
|
38
|
+
compatibility, this block affected the WHERE clause instead of the
|
39
|
+
FROM clause. In Sequel 5, Database#from blocks will be treated like
|
40
|
+
Dataset#from blocks, and will affect the FROM clause. This behavior
|
41
|
+
has been available for years by using the from_block extension.
|
42
|
+
|
43
|
+
# Instead of:
|
44
|
+
DB.from(:foo){a > b}
|
45
|
+
# Switch to:
|
46
|
+
DB.from(:foo).where{a > b}
|
47
|
+
|
48
|
+
* Passing non-hash arguments and multiple arguments to the
|
49
|
+
model association methods is now deprecated. Switch to using a
|
50
|
+
hash as an argument.
|
51
|
+
|
52
|
+
# Instead of:
|
53
|
+
model.association(true)
|
54
|
+
model.association(proc{|ds| ds.where(:foo)})
|
55
|
+
# Switch to:
|
56
|
+
model.association(:reload=>true)
|
57
|
+
model.association(:callback=>proc{|ds| ds.where(:foo)})
|
58
|
+
model.association{|ds| ds.where(:foo)}
|
59
|
+
|
60
|
+
* Passing procs as filter arguments is now deprecated. These should
|
61
|
+
now be passed as blocks instead of arguments.
|
62
|
+
|
63
|
+
# Instead of:
|
64
|
+
dataset.where(proc{foo > bar})
|
65
|
+
# Switch to:
|
66
|
+
dataset.where{foo > bar}
|
67
|
+
|
68
|
+
* Passing multiple arguments or an array as filter arguments when the
|
69
|
+
array/arguments does not represent a conditions specifier (array of
|
70
|
+
two element arrays, treated like a hash) is now deprecated. Switch
|
71
|
+
to calling the filter method separately with each argument or using
|
72
|
+
Sequel.& to combine the arguments:
|
73
|
+
|
74
|
+
# Instead of:
|
75
|
+
dataset.where(:foo, :bar)
|
76
|
+
dataset.where([:foo, :bar])
|
77
|
+
# Switch to:
|
78
|
+
dataset.where(:foo).where(:bar)
|
79
|
+
dataset.where(Sequel.&(:foo, :bar))
|
80
|
+
|
81
|
+
* Returning false from model before hooks to cancel an action is
|
82
|
+
now deprecated. Switch to calling cancel_action instead.
|
83
|
+
|
84
|
+
# Instead of:
|
85
|
+
def before_save
|
86
|
+
return false if something
|
87
|
+
super
|
88
|
+
end
|
89
|
+
# Switch to:
|
90
|
+
def before_save
|
91
|
+
cancel_action('something bad') if something
|
92
|
+
super
|
93
|
+
end
|
94
|
+
|
95
|
+
* Database#each_server has been deprecated. Switch to using
|
96
|
+
Database#servers and Database#with_server from server_block
|
97
|
+
extension:
|
98
|
+
|
99
|
+
# Instead of:
|
100
|
+
DB.each_server{|db| db.run("foo")}
|
101
|
+
# Switch to:
|
102
|
+
DB.extension :server_block
|
103
|
+
DB.servers.each{|s| DB.with_server(s){DB.run("foo")}}
|
104
|
+
|
105
|
+
* Calling Database#add_servers and Database#remove_servers on a
|
106
|
+
database that does not use the :servers option is now deprecated.
|
107
|
+
Currently, the calls to add_servers and remove_servers are
|
108
|
+
ignored for such databases, which can hide errors.
|
109
|
+
|
110
|
+
* Sequel::Postgres::PG_NAMED_TYPES is now deprecated. Switch to
|
111
|
+
calling Database#add_named_conversion_proc instead.
|
112
|
+
|
113
|
+
# Instead of:
|
114
|
+
require 'sequel/adapters/utils/pg_types'
|
115
|
+
Sequel::Postgres::PG_NAMED_TYPES[:foo] = lambda{|v| v}
|
116
|
+
DB = Sequel.connect('postgres://...')
|
117
|
+
# Switch to:
|
118
|
+
DB = Sequel.connect('postgres://...')
|
119
|
+
DB.add_named_conversion_proc(:foo){|v| v}
|
120
|
+
|
121
|
+
* Modifying the identifier mangling settings for a Database or
|
122
|
+
Dataset is now deprecated unless the identifier_mangling extension
|
123
|
+
is explicitly loaded into the Database instance.
|
124
|
+
|
125
|
+
* The Sequel::Database.single_threaded accessor is now deprecated.
|
126
|
+
Switch to using Sequel.single_threaded= and Sequel.single_threaded?.
|
127
|
+
|
128
|
+
* Sequel::Database.identifier_input_method,
|
129
|
+
Sequel::Database.identifier_output_method,
|
130
|
+
and Sequel::Database.quote_identifier accessors are now deprecated.
|
131
|
+
Switch to modifying the setting for each Database instance.
|
132
|
+
|
133
|
+
* Sequel.identifier_input_method=, Sequel.identifier_output_method=,
|
134
|
+
and Sequel.quote_identifer= setter methods are now deprecated.
|
135
|
+
Switch to modifying the setting for each Database instance.
|
136
|
+
|
137
|
+
* Calling Dataset#delete/update/truncate on datasets with limits
|
138
|
+
or offsets is now deprecated, unless the database will respect
|
139
|
+
the limit or offset. Currently, only MySQL and Microsoft SQL
|
140
|
+
Server have limited support for such deletes and updates. You
|
141
|
+
should either call unlimited or skip_limit_check before calling
|
142
|
+
delete/update/truncate.
|
143
|
+
|
144
|
+
* Deprecate having duplicate column names in subclass tables when
|
145
|
+
using the class_table_inheritance plugin. The documentation has
|
146
|
+
warned against this for a long time, but the code did not enforce
|
147
|
+
it.
|
148
|
+
|
149
|
+
* When using the association_pks plugin setter methods without the
|
150
|
+
:delay_pks association option set, a warning is now issued. In
|
151
|
+
Sequel 5, the default will be to assume that the :delay_pks
|
152
|
+
option is :always, and not to make modifications until the object
|
153
|
+
is saved. If you would like to keep the current behavior, set
|
154
|
+
the :delay_pks=>false association option.
|
155
|
+
|
156
|
+
The current :delay_pks=>true behavior will be removed in Sequel 5,
|
157
|
+
with it being treated like :delay_pks=>:always. If you are relying
|
158
|
+
on the current behavior of :delay_pks=>true (delay for new objects,
|
159
|
+
immediate for existing objects), you will need to update your code.
|
160
|
+
|
161
|
+
* Database#dup/clone are now deprecated. They have never been
|
162
|
+
handled correctly, since the default implementation from Kernel
|
163
|
+
has been used.
|
164
|
+
|
165
|
+
* Model.dup/clone are now deprecated. They have never been
|
166
|
+
handled correctly, as the default implemenation from Kernel/Module
|
167
|
+
has been used.
|
168
|
+
|
169
|
+
* Database#use on MySQL is now deprecated. Switch to creating a new
|
170
|
+
Database instance instead of modifying the database for an existing
|
171
|
+
instance.
|
172
|
+
|
173
|
+
* Database#database_name on MySQL is now deprecated. Switch to asking
|
174
|
+
the database server which database you are connected to:
|
175
|
+
|
176
|
+
# Instead of:
|
177
|
+
DB.database_name
|
178
|
+
# Switch to:
|
179
|
+
DB.get{DATABASE{}}
|
180
|
+
|
181
|
+
* In the lazy_attributes, nested_attributes, composition, and
|
182
|
+
serialization plugins, the *_module accessors are now deprecated.
|
183
|
+
These were implementation details that should not have been
|
184
|
+
exposed.
|
185
|
+
|
186
|
+
* The schema plugin is now deprecated. Switch to defining the schema
|
187
|
+
before creating the model class using the Database schema methods.
|
188
|
+
|
189
|
+
* The scissors plugin is deprecated. It existed for compatibility
|
190
|
+
with Sequel 3, but it is dangerous as it makes it easier to modify
|
191
|
+
all rows when the intent was to modify a single row.
|
192
|
+
|
193
|
+
* The prepared_statements_associations and prepared_statements_with_pk
|
194
|
+
plugins are now deprecated. These plugins generally make things
|
195
|
+
slower.
|
196
|
+
|
197
|
+
* Dataset#unbind, Sequel::Unbinder, and Sequel::UnbindDuplicate are
|
198
|
+
now deprecated. This mostly existed to support the
|
199
|
+
prepared_statements_associations and prepared_statements_with_pk
|
200
|
+
plugins.
|
201
|
+
|
202
|
+
* Sequel::Error::* exception class aliases are now deprecated. Switch
|
203
|
+
to using the exception classes in the Sequel namespace.
|
204
|
+
|
205
|
+
* Sequel::BeforeHookFailed is now deprecated. Switch to using
|
206
|
+
Sequel::HookFailed.
|
207
|
+
|
208
|
+
* Calling Sequel::Qualifier.new with 2 arguments is now deprecated.
|
209
|
+
Users should switch to calling it with a single argument (the
|
210
|
+
table used for qualifying unqualified identifiers).
|
211
|
+
|
212
|
+
* Treating unrecognized prepared statement types as :select is now
|
213
|
+
deprecated. Switch to using :select as the prepared statement
|
214
|
+
type.
|
215
|
+
|
216
|
+
* The @was_new instance variable available in model after_save hooks
|
217
|
+
is now deprecated. There is no deprecation warning associated
|
218
|
+
with this change.
|
219
|
+
|
220
|
+
# Instead of:
|
221
|
+
def after_save
|
222
|
+
super
|
223
|
+
if @was_new
|
224
|
+
do_something
|
225
|
+
else
|
226
|
+
do_something_else
|
227
|
+
end
|
228
|
+
end
|
229
|
+
# Switch to:
|
230
|
+
def after_create
|
231
|
+
super
|
232
|
+
do_something
|
233
|
+
end
|
234
|
+
def after_update
|
235
|
+
super
|
236
|
+
do_something_else
|
237
|
+
end
|
238
|
+
|
239
|
+
* The @columns_updated instance variable available in model
|
240
|
+
after_save and after_update hooks is deprecated. Switch to
|
241
|
+
using the new columns_updated plugin and calling the
|
242
|
+
columns_updated method.
|
243
|
+
|
244
|
+
* The Sequel.cache_anonymous_models accessor has been deprecated.
|
245
|
+
Switch to using Sequel::Model.cache_anonymous_models.
|
246
|
+
|
247
|
+
* Sequel::Model::ANONYMOUS_MODEL_CLASSES and
|
248
|
+
Sequel::Model::ANONYMOUS_MODEL_CLASSES_MUTEX have been
|
249
|
+
deprecated.
|
250
|
+
|
251
|
+
* Sequel::Database::ResetIdentifierMangling has been deprecated.
|
252
|
+
|
253
|
+
= New Features
|
254
|
+
|
255
|
+
* A validation_contexts plugin has been added, which adds support
|
256
|
+
for a :validation_context option to Model#save and Model#valid?.
|
257
|
+
The value for this option will be available via the
|
258
|
+
validation_context method inside the validation hooks and
|
259
|
+
validate method.
|
260
|
+
|
261
|
+
class Album < Sequel::Model
|
262
|
+
plugin :validation_contexts
|
263
|
+
|
264
|
+
def validate
|
265
|
+
super
|
266
|
+
if validation_context == :approve
|
267
|
+
errors.add(:status_id, 'not 42') unless status_id == 42
|
268
|
+
end
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
album = Album.first
|
273
|
+
album.status_id = 41
|
274
|
+
album.valid?(:validation_context=>:approve) # => false
|
275
|
+
album.status_id = 42
|
276
|
+
album.valid?(:validation_context=>:approve) # => true
|
277
|
+
|
278
|
+
* A columns_updated plugin has been added, allowing you to get
|
279
|
+
access to the hash used for updating a model instance via the
|
280
|
+
columns_updated method:
|
281
|
+
|
282
|
+
class Album < Sequel::Model
|
283
|
+
plugin :columns_updated
|
284
|
+
|
285
|
+
def after_update
|
286
|
+
super
|
287
|
+
if columns_updated.has_key?(:foo)
|
288
|
+
do_something(columns_updated[:foo])
|
289
|
+
end
|
290
|
+
end
|
291
|
+
end
|
292
|
+
|
293
|
+
* Dataset#delete on Microsoft SQL Server now respects limits. Note
|
294
|
+
that Microsoft SQL Server does not respect orders for deletes, only
|
295
|
+
limits, which makes this support not very useful. Currently a
|
296
|
+
deprecation warning will be issued when using a delete with an
|
297
|
+
order and a limit, and in Sequel 5 an exception will be raised.
|
298
|
+
|
299
|
+
* An odbc/oracle subadapter has been added.
|
300
|
+
|
301
|
+
* A Model.dataset_module_class accessor has been added, allowing
|
302
|
+
plugins to add support for custom behavior in dataset_module blocks.
|
303
|
+
|
304
|
+
* Support for deprecating constants on Ruby 2.3+ has been added.
|
305
|
+
Note that you will only get warnings for deprecated constant
|
306
|
+
use if you are running on Ruby 2.3+. If you are running on a
|
307
|
+
previous version of Ruby, you should scan your code manually for
|
308
|
+
deprecated constant use.
|
309
|
+
|
310
|
+
= Other Improvements
|
311
|
+
|
312
|
+
* Using Model#cancel_action inside validation hooks now works
|
313
|
+
correctly when Model#valid? is called.
|
314
|
+
|
315
|
+
* Model#[] now handles columns with false values correctly when using
|
316
|
+
the split_values plugin.
|
317
|
+
|
318
|
+
* When calling Dataset#union/intersect/except on a dataset with
|
319
|
+
an offset but no limit, the dataset is wrapped in a subquery, just
|
320
|
+
like a dataset with a limit.
|
321
|
+
|
322
|
+
* The dumping of 64-bit autoincrementing primary key columns by the
|
323
|
+
schema_dumper extension is now handled correctly when using the
|
324
|
+
:same_db option.
|
325
|
+
|
326
|
+
* The schema_dumper extension now supports the :schema option when
|
327
|
+
dumping schema.
|
328
|
+
|
329
|
+
* On Microsoft SQL Server and SQLAnywhere, ORDER BY clauses now come
|
330
|
+
after UNION/INTERSECT/EXCEPT instead of before, fixing issues when
|
331
|
+
the :from_self=>false option is used with union/intersect/except
|
332
|
+
and an order is applied afterward.
|
333
|
+
|
334
|
+
* On Microsoft SQL Server, if calling Dataset#union/intersect/except
|
335
|
+
on a dataset with an order and without a limit or offset, the order
|
336
|
+
is removed. When using UNION/INTERSECT/EXCEPT, Microsoft SQL
|
337
|
+
Server does not guarantee any ordering unless you specify an order
|
338
|
+
for the compound dataset. As a general rule, you should always
|
339
|
+
apply orders after compounds instead of before.
|
340
|
+
|
341
|
+
* On Microsoft SQL Server <2012, when using a dataset with an offset
|
342
|
+
without a limit in a UNION/INTERSECT/EXCEPT query, Sequel now uses
|
343
|
+
TOP (100) PERCENT to work around the limitation that using orders
|
344
|
+
in subqueries is not supported unless there is a limit (offsets
|
345
|
+
are emulated by a ROW_NUMBER window function with an order in this
|
346
|
+
case).
|
347
|
+
|
348
|
+
* Database#indexes on MySQL now handles qualified identifiers.
|
349
|
+
|
350
|
+
* Sequel now literalizes Sequel::SQLTime instances with 3 fractional
|
351
|
+
digits in the jdbc/postgresql adapter, fixing issues on JRuby
|
352
|
+
9.1.8.0+ (the first JRuby version to support greater than
|
353
|
+
millisecond precision).
|
354
|
+
|
355
|
+
= Backwards Compatibility
|
356
|
+
|
357
|
+
* When using the association_proxies plugin and passing a block when
|
358
|
+
loading the plugin, the :proxy_argument option in hash passed to
|
359
|
+
the block is now an empty hash instead of nil if no argument was
|
360
|
+
given to the association method.
|
361
|
+
|
362
|
+
* The private Model#_valid? method now takes a single options hash
|
363
|
+
argument, instead of 2 arguments.
|
364
|
+
|
365
|
+
* The pg_hstore extension no longer modifies PG_NAMED_TYPES. This
|
366
|
+
should not affect behavior if the pg_hstore extension is loaded
|
367
|
+
into the Database instance.
|
368
|
+
|
369
|
+
* Support for pg <0.8.0 has been dropped. pg 0.8.0 was released in
|
370
|
+
January 2008.
|