sequel 3.46.0 → 3.47.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 +96 -0
- data/Rakefile +7 -1
- data/bin/sequel +6 -4
- data/doc/active_record.rdoc +1 -1
- data/doc/advanced_associations.rdoc +14 -35
- data/doc/association_basics.rdoc +66 -4
- data/doc/migration.rdoc +4 -0
- data/doc/opening_databases.rdoc +6 -0
- data/doc/postgresql.rdoc +302 -0
- data/doc/release_notes/3.47.0.txt +270 -0
- data/doc/security.rdoc +6 -0
- data/lib/sequel/adapters/ibmdb.rb +9 -9
- data/lib/sequel/adapters/jdbc.rb +22 -7
- data/lib/sequel/adapters/jdbc/postgresql.rb +7 -2
- data/lib/sequel/adapters/mock.rb +2 -0
- data/lib/sequel/adapters/postgres.rb +44 -13
- data/lib/sequel/adapters/shared/mssql.rb +1 -1
- data/lib/sequel/adapters/shared/mysql.rb +2 -2
- data/lib/sequel/adapters/shared/postgres.rb +94 -55
- data/lib/sequel/adapters/shared/sqlite.rb +3 -1
- data/lib/sequel/adapters/sqlite.rb +2 -2
- data/lib/sequel/adapters/utils/pg_types.rb +1 -14
- data/lib/sequel/adapters/utils/split_alter_table.rb +3 -3
- data/lib/sequel/connection_pool/threaded.rb +1 -1
- data/lib/sequel/core.rb +1 -1
- data/lib/sequel/database/connecting.rb +2 -2
- data/lib/sequel/database/features.rb +5 -0
- data/lib/sequel/database/misc.rb +47 -5
- data/lib/sequel/database/query.rb +2 -2
- data/lib/sequel/dataset/actions.rb +4 -2
- data/lib/sequel/dataset/misc.rb +1 -1
- data/lib/sequel/dataset/prepared_statements.rb +1 -1
- data/lib/sequel/dataset/query.rb +8 -6
- data/lib/sequel/dataset/sql.rb +8 -6
- data/lib/sequel/extensions/constraint_validations.rb +5 -2
- data/lib/sequel/extensions/migration.rb +10 -8
- data/lib/sequel/extensions/pagination.rb +3 -0
- data/lib/sequel/extensions/pg_array.rb +85 -25
- data/lib/sequel/extensions/pg_hstore.rb +8 -1
- data/lib/sequel/extensions/pg_hstore_ops.rb +4 -1
- data/lib/sequel/extensions/pg_inet.rb +16 -13
- data/lib/sequel/extensions/pg_interval.rb +6 -2
- data/lib/sequel/extensions/pg_json.rb +18 -11
- data/lib/sequel/extensions/pg_range.rb +17 -2
- data/lib/sequel/extensions/pg_range_ops.rb +7 -5
- data/lib/sequel/extensions/pg_row.rb +29 -12
- data/lib/sequel/extensions/pretty_table.rb +3 -0
- data/lib/sequel/extensions/query.rb +3 -0
- data/lib/sequel/extensions/schema_caching.rb +2 -0
- data/lib/sequel/extensions/schema_dumper.rb +3 -1
- data/lib/sequel/extensions/select_remove.rb +3 -0
- data/lib/sequel/model.rb +8 -2
- data/lib/sequel/model/associations.rb +39 -27
- data/lib/sequel/model/base.rb +99 -38
- data/lib/sequel/model/plugins.rb +25 -0
- data/lib/sequel/plugins/association_autoreloading.rb +27 -22
- data/lib/sequel/plugins/association_dependencies.rb +1 -7
- data/lib/sequel/plugins/auto_validations.rb +110 -0
- data/lib/sequel/plugins/boolean_readers.rb +1 -6
- data/lib/sequel/plugins/caching.rb +6 -13
- data/lib/sequel/plugins/class_table_inheritance.rb +1 -0
- data/lib/sequel/plugins/composition.rb +14 -7
- data/lib/sequel/plugins/constraint_validations.rb +2 -13
- data/lib/sequel/plugins/defaults_setter.rb +1 -6
- data/lib/sequel/plugins/dirty.rb +8 -0
- data/lib/sequel/plugins/error_splitter.rb +54 -0
- data/lib/sequel/plugins/force_encoding.rb +1 -5
- data/lib/sequel/plugins/hook_class_methods.rb +1 -6
- data/lib/sequel/plugins/input_transformer.rb +79 -0
- data/lib/sequel/plugins/instance_filters.rb +7 -1
- data/lib/sequel/plugins/instance_hooks.rb +7 -1
- data/lib/sequel/plugins/json_serializer.rb +5 -10
- data/lib/sequel/plugins/lazy_attributes.rb +20 -7
- data/lib/sequel/plugins/list.rb +1 -6
- data/lib/sequel/plugins/many_through_many.rb +1 -2
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +23 -39
- data/lib/sequel/plugins/optimistic_locking.rb +1 -5
- data/lib/sequel/plugins/pg_row.rb +4 -2
- data/lib/sequel/plugins/pg_typecast_on_load.rb +3 -7
- data/lib/sequel/plugins/prepared_statements.rb +1 -5
- data/lib/sequel/plugins/prepared_statements_safe.rb +2 -11
- data/lib/sequel/plugins/rcte_tree.rb +2 -2
- data/lib/sequel/plugins/serialization.rb +11 -13
- data/lib/sequel/plugins/serialization_modification_detection.rb +13 -1
- data/lib/sequel/plugins/single_table_inheritance.rb +4 -4
- data/lib/sequel/plugins/static_cache.rb +67 -19
- data/lib/sequel/plugins/string_stripper.rb +7 -27
- data/lib/sequel/plugins/subclasses.rb +3 -5
- data/lib/sequel/plugins/tactical_eager_loading.rb +2 -2
- data/lib/sequel/plugins/timestamps.rb +2 -7
- data/lib/sequel/plugins/touch.rb +5 -8
- data/lib/sequel/plugins/tree.rb +1 -6
- data/lib/sequel/plugins/typecast_on_load.rb +1 -5
- data/lib/sequel/plugins/update_primary_key.rb +26 -14
- data/lib/sequel/plugins/validation_class_methods.rb +31 -16
- data/lib/sequel/plugins/validation_helpers.rb +50 -26
- data/lib/sequel/plugins/xml_serializer.rb +3 -6
- data/lib/sequel/sql.rb +1 -1
- data/lib/sequel/version.rb +1 -1
- data/spec/adapters/postgres_spec.rb +131 -15
- data/spec/adapters/sqlite_spec.rb +1 -1
- data/spec/core/connection_pool_spec.rb +16 -17
- data/spec/core/database_spec.rb +111 -40
- data/spec/core/dataset_spec.rb +65 -74
- data/spec/core/expression_filters_spec.rb +6 -5
- data/spec/core/object_graph_spec.rb +0 -1
- data/spec/core/schema_spec.rb +23 -23
- data/spec/core/spec_helper.rb +5 -1
- data/spec/extensions/association_dependencies_spec.rb +1 -1
- data/spec/extensions/association_proxies_spec.rb +1 -1
- data/spec/extensions/auto_validations_spec.rb +90 -0
- data/spec/extensions/caching_spec.rb +6 -0
- data/spec/extensions/class_table_inheritance_spec.rb +8 -1
- data/spec/extensions/composition_spec.rb +12 -5
- data/spec/extensions/constraint_validations_spec.rb +4 -4
- data/spec/extensions/core_refinements_spec.rb +29 -79
- data/spec/extensions/dirty_spec.rb +14 -0
- data/spec/extensions/error_splitter_spec.rb +18 -0
- data/spec/extensions/identity_map_spec.rb +0 -1
- data/spec/extensions/input_transformer_spec.rb +54 -0
- data/spec/extensions/instance_filters_spec.rb +6 -0
- data/spec/extensions/instance_hooks_spec.rb +12 -1
- data/spec/extensions/json_serializer_spec.rb +0 -1
- data/spec/extensions/lazy_attributes_spec.rb +64 -55
- data/spec/extensions/looser_typecasting_spec.rb +1 -1
- data/spec/extensions/many_through_many_spec.rb +3 -4
- data/spec/extensions/many_to_one_pk_lookup_spec.rb +53 -15
- data/spec/extensions/migration_spec.rb +16 -0
- data/spec/extensions/null_dataset_spec.rb +1 -1
- data/spec/extensions/pg_array_spec.rb +48 -1
- data/spec/extensions/pg_hstore_ops_spec.rb +10 -2
- data/spec/extensions/pg_hstore_spec.rb +5 -0
- data/spec/extensions/pg_inet_spec.rb +5 -0
- data/spec/extensions/pg_interval_spec.rb +7 -3
- data/spec/extensions/pg_json_spec.rb +6 -1
- data/spec/extensions/pg_range_ops_spec.rb +4 -1
- data/spec/extensions/pg_range_spec.rb +5 -0
- data/spec/extensions/pg_row_plugin_spec.rb +13 -0
- data/spec/extensions/pg_row_spec.rb +28 -19
- data/spec/extensions/pg_typecast_on_load_spec.rb +6 -1
- data/spec/extensions/prepared_statements_associations_spec.rb +1 -1
- data/spec/extensions/query_literals_spec.rb +1 -1
- data/spec/extensions/rcte_tree_spec.rb +2 -2
- data/spec/extensions/schema_spec.rb +2 -2
- data/spec/extensions/serialization_modification_detection_spec.rb +8 -0
- data/spec/extensions/serialization_spec.rb +15 -1
- data/spec/extensions/sharding_spec.rb +1 -1
- data/spec/extensions/single_table_inheritance_spec.rb +1 -1
- data/spec/extensions/static_cache_spec.rb +59 -9
- data/spec/extensions/tactical_eager_loading_spec.rb +19 -4
- data/spec/extensions/update_primary_key_spec.rb +17 -1
- data/spec/extensions/validation_class_methods_spec.rb +25 -0
- data/spec/extensions/validation_helpers_spec.rb +59 -3
- data/spec/integration/associations_test.rb +5 -5
- data/spec/integration/eager_loader_test.rb +32 -63
- data/spec/integration/model_test.rb +2 -2
- data/spec/integration/plugin_test.rb +88 -56
- data/spec/integration/prepared_statement_test.rb +1 -1
- data/spec/integration/schema_test.rb +1 -1
- data/spec/integration/timezone_test.rb +0 -1
- data/spec/integration/transaction_test.rb +0 -1
- data/spec/model/association_reflection_spec.rb +1 -1
- data/spec/model/associations_spec.rb +106 -84
- data/spec/model/base_spec.rb +4 -4
- data/spec/model/eager_loading_spec.rb +8 -8
- data/spec/model/model_spec.rb +27 -9
- data/spec/model/plugins_spec.rb +71 -0
- data/spec/model/record_spec.rb +99 -13
- metadata +12 -2
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
= New Plugins
|
|
2
|
+
|
|
3
|
+
* An auto_validations plugin has been added, which automatically
|
|
4
|
+
adds not null, type, and unique validations based on information
|
|
5
|
+
obtained from parsing the database schema. If you don't
|
|
6
|
+
require customization of the validation error message per
|
|
7
|
+
column, this can significantly DRY up validation code. Currently
|
|
8
|
+
this plugin requires the database support index parsing; that
|
|
9
|
+
restriction will be removed in Sequel 4.
|
|
10
|
+
|
|
11
|
+
* An input_transformer plugin has been added, for automatically
|
|
12
|
+
running a transformation proc on all model column setter
|
|
13
|
+
input before use. This is a generalization of the
|
|
14
|
+
string_stripper plugin, allowing arbitrary modifications
|
|
15
|
+
to the input.
|
|
16
|
+
|
|
17
|
+
* An error_splitter plugin has been added, for splitting validation
|
|
18
|
+
errors applying to multiple columns into a separate validation
|
|
19
|
+
error per column. This is useful if you want to to include such
|
|
20
|
+
errors when using Errors#on to get all errors on the column. In
|
|
21
|
+
general, only uniqueness errors apply to multiple columns, so
|
|
22
|
+
those are the only errors likely to be affected.
|
|
23
|
+
|
|
24
|
+
= Other New Features
|
|
25
|
+
|
|
26
|
+
* Database.extension has been added, allowing you to load an
|
|
27
|
+
extension into all future databases. This is similar to loading a
|
|
28
|
+
plugin into Sequel::Model itself. For example, if you want all
|
|
29
|
+
Database instances to use the query_literals extension, run the
|
|
30
|
+
following before creating your Database instances:
|
|
31
|
+
|
|
32
|
+
Sequel::Database.extension :query_literals
|
|
33
|
+
|
|
34
|
+
* Database.after_initialize has been added for running a hook
|
|
35
|
+
on all new databases created.
|
|
36
|
+
|
|
37
|
+
* Model.default_set_fields_options has been added, allowing you
|
|
38
|
+
to set the default options for the #set_fields and #update_fields
|
|
39
|
+
methods. This is useful if you want to make :missing=>:raise
|
|
40
|
+
or :missing=>:skip the default behavior.
|
|
41
|
+
|
|
42
|
+
* The :setter, :adder, :remover, and :clearer association options
|
|
43
|
+
have been added. These allow you to override the default
|
|
44
|
+
implementation used to modify the association. :setter affects
|
|
45
|
+
the *_to_one setter method, :adder the *_to_many add_* method,
|
|
46
|
+
:remover the *_to_many remove_* method, and :clearer the
|
|
47
|
+
*_to_many remove_all_* method.
|
|
48
|
+
|
|
49
|
+
Previously, you had to override a private method to get the same
|
|
50
|
+
behavior, this just offers a nicer API for that.
|
|
51
|
+
|
|
52
|
+
* A :keep_reference Database option has been added. When set to
|
|
53
|
+
false, a reference to the Database instance is not kept in
|
|
54
|
+
Sequel::DATABASES. This is designed for Database instances
|
|
55
|
+
created by libraries, so they don't accidentally get chosen as
|
|
56
|
+
the default Sequel::Model database.
|
|
57
|
+
|
|
58
|
+
* Model#modified! now accepts a column and marks that column
|
|
59
|
+
as changed. This is useful if you plan on mutating the column
|
|
60
|
+
value as opposed to reassigning it.
|
|
61
|
+
|
|
62
|
+
* Model#modified? now accepts a column and returns whether the
|
|
63
|
+
column has been changed.
|
|
64
|
+
|
|
65
|
+
* The migrators now support an :allow_missing_migration_files
|
|
66
|
+
option, which makes them silently ignore errors related to
|
|
67
|
+
missing migration files.
|
|
68
|
+
|
|
69
|
+
* validates_schema_types has been added to validation_helpers,
|
|
70
|
+
which validates that the column values are instances of the
|
|
71
|
+
expected ruby type for the given database schema type. This
|
|
72
|
+
is a more robust version of the validates_not_string
|
|
73
|
+
extension, and users of validates_not_string are encouraged
|
|
74
|
+
to switch soon, as validates_not_string is going away in
|
|
75
|
+
Sequel 4.
|
|
76
|
+
|
|
77
|
+
validates_schema_type has been added to validation_class_methods,
|
|
78
|
+
which preforms the same validation, but it requires the columns
|
|
79
|
+
be listed explicitly.
|
|
80
|
+
|
|
81
|
+
validates_type in validation_helpers has been expanded to
|
|
82
|
+
accept an array of allowable classes.
|
|
83
|
+
|
|
84
|
+
Related to this is the addition of Database#schema_type_class for
|
|
85
|
+
returning the type class(es) for the given schema type symbol.
|
|
86
|
+
|
|
87
|
+
* validates_not_null has been added to the validation_helpers
|
|
88
|
+
plugin. This is similar to the validates_presence validation,
|
|
89
|
+
but only checks for nil values, allowing empty/blank strings.
|
|
90
|
+
|
|
91
|
+
* In the caching plugin, when the :ignore_exceptions option is true,
|
|
92
|
+
exceptions raised when deleting an object from the cache are now
|
|
93
|
+
ignored correctly.
|
|
94
|
+
|
|
95
|
+
* On PostgreSQL, Sequel now supports a :search_path Database
|
|
96
|
+
option to automatically set the client connection search_path.
|
|
97
|
+
This allows you to control which schemas do no require
|
|
98
|
+
qualification, and in which order to check schemas when
|
|
99
|
+
referencing unqualified objects. If you were using the
|
|
100
|
+
default_schema setting, it is recommended that you switch
|
|
101
|
+
to using :search_path instead.
|
|
102
|
+
|
|
103
|
+
* The pg_array extension can now register array types on a
|
|
104
|
+
per-Database basis via Database#register_array_type. Previously,
|
|
105
|
+
only global registration of array types was allowed. Additionally,
|
|
106
|
+
when registering array types on a per-Database basis, the oids can
|
|
107
|
+
be looked up automatically, making it possible to register array
|
|
108
|
+
types with just a type name:
|
|
109
|
+
|
|
110
|
+
DB.register_array_type(:interval)
|
|
111
|
+
|
|
112
|
+
* The pg_array extension now automatically creates conversion
|
|
113
|
+
procs for array types of all named types used by the
|
|
114
|
+
database. This means that if you use the pg_array and
|
|
115
|
+
pg_hstore extensions, the hstore[] type is now handled
|
|
116
|
+
correctly.
|
|
117
|
+
|
|
118
|
+
* The postgres adapter now supports :use_iso_date_format and
|
|
119
|
+
:convert_infinite_timestamps Database options. Previously,
|
|
120
|
+
use_iso_date_format was only a global setting, and
|
|
121
|
+
convert_infinite_timestamps could only be set after
|
|
122
|
+
initialization.
|
|
123
|
+
|
|
124
|
+
* Database#supports_schema_parsing? has been added to check
|
|
125
|
+
if schema parsing via the Database#schema method is
|
|
126
|
+
supported.
|
|
127
|
+
|
|
128
|
+
= Other Improvements
|
|
129
|
+
|
|
130
|
+
* A race condition related to prepared_sql for newly prepared
|
|
131
|
+
statements has been fixed.
|
|
132
|
+
|
|
133
|
+
* Dataset#get now works correctly if given an array with multiple
|
|
134
|
+
columns if there were no returned rows.
|
|
135
|
+
|
|
136
|
+
* The plugins that ship with Sequel now handle frozen model instances
|
|
137
|
+
correctly.
|
|
138
|
+
|
|
139
|
+
* Freezing of model instances now works correctly for models without
|
|
140
|
+
primary keys.
|
|
141
|
+
|
|
142
|
+
* Database constraints added with the constraint_validations
|
|
143
|
+
plugin now handle NULL values correctly if the :allow_nil=>true
|
|
144
|
+
setting is used.
|
|
145
|
+
|
|
146
|
+
* The pagination, pretty_table, query, schema_caching,
|
|
147
|
+
schema_dumper, and select_remove extensions can now be
|
|
148
|
+
loaded by Database#extension. If you are loading them
|
|
149
|
+
globally via Sequel.extension, switch to using
|
|
150
|
+
Database#extension, since that will be required starting
|
|
151
|
+
in Sequel 4.
|
|
152
|
+
|
|
153
|
+
* The lazy_attributes plugin no longer uses the identity_map plugin
|
|
154
|
+
internally, and eager loading lazy attributes now works correctly
|
|
155
|
+
without an active identity map.
|
|
156
|
+
|
|
157
|
+
* The many_to_one_pk_lookup plugin now handles many more corner
|
|
158
|
+
cases, and should be safe to enable by default.
|
|
159
|
+
|
|
160
|
+
* The static_cache plugin now has optimized implementations of
|
|
161
|
+
Model.map, .to_hash, and .to_hash_groups which work without a
|
|
162
|
+
database query. Model.count without arguments has also been
|
|
163
|
+
optimized to not require a database query.
|
|
164
|
+
|
|
165
|
+
* Fetching new records has been made faster when using the
|
|
166
|
+
update_primary_key plugin, since it was changed to cache the primary
|
|
167
|
+
key values lazily.
|
|
168
|
+
|
|
169
|
+
* When using the update_primary_key plugin, if the primary key
|
|
170
|
+
changes, clear the associations cache of all non-many_to_one
|
|
171
|
+
associations (since those will likely be based on the primary
|
|
172
|
+
key).
|
|
173
|
+
|
|
174
|
+
* The pg_typecast_on_load plugin no longer errors if given a
|
|
175
|
+
column that doesn't have a matching oid conversion proc.
|
|
176
|
+
|
|
177
|
+
* Handling of domain types on PostgreSQL has been significantly
|
|
178
|
+
improved. Domain type columns now have correct model
|
|
179
|
+
typecasting, and the pg_row extension correctly sets up
|
|
180
|
+
conversion procs for domain types inside composite types.
|
|
181
|
+
|
|
182
|
+
* Postgres::HStoreOp#- now automatically casts string input to
|
|
183
|
+
text, so that PostgreSQL doesn't assume the string is an
|
|
184
|
+
hstore.
|
|
185
|
+
|
|
186
|
+
* Postgres::PGRangeOp#starts_before and #ends_after have been
|
|
187
|
+
renamed to #ends_before and #starts_after. The previous
|
|
188
|
+
names were misleading. The old names are still available
|
|
189
|
+
for backwards compatibility, but they will be removed in the
|
|
190
|
+
Sequel 4.
|
|
191
|
+
|
|
192
|
+
* The pg_row plugin now handles aliased tables correctly.
|
|
193
|
+
|
|
194
|
+
* Model#validate in the validation_class_methods plugin no
|
|
195
|
+
longer skips validate methods in superclasses or previously
|
|
196
|
+
loaded plugins.
|
|
197
|
+
|
|
198
|
+
* Loading the touch plugin into a model subclass after it has
|
|
199
|
+
been loaded into a model superclass no longer ignores
|
|
200
|
+
inherited touched associations.
|
|
201
|
+
|
|
202
|
+
* Sequel no longer resets the conversion procs for the
|
|
203
|
+
Database instance when using Databaset#extension to load a
|
|
204
|
+
pg_* extension that adds global conversion procs. Instead,
|
|
205
|
+
the global conversion procs are added to the instance-specific
|
|
206
|
+
conversion procs. The result of this is that manually added
|
|
207
|
+
conversion procs will not be lost if an extension is loaded
|
|
208
|
+
afterward.
|
|
209
|
+
|
|
210
|
+
* The jdbc adapter now references the driver class before loading
|
|
211
|
+
subadapter specific code, which can fix issues if the database
|
|
212
|
+
tries to connect on initialization (such as the jdbc/postgres
|
|
213
|
+
adapter if the pg_hstore extension is loaded previously).
|
|
214
|
+
|
|
215
|
+
* A guide describing Sequel's support for advanced PostgreSQL
|
|
216
|
+
features has been added.
|
|
217
|
+
|
|
218
|
+
= Backwards Compatibility
|
|
219
|
+
|
|
220
|
+
* If you have already used the constraint_validations plugin to
|
|
221
|
+
create validations with the :allow_nil=>true option, you should
|
|
222
|
+
drop and regenerate those constraints to ensure they handle NULL
|
|
223
|
+
values correctly.
|
|
224
|
+
|
|
225
|
+
* The change to make PostgreSQL automatically handle domain
|
|
226
|
+
types can break previous code that set up special conversions
|
|
227
|
+
and typecasts per domain type. In the schema parsing, if you
|
|
228
|
+
want to get the domain type information, it will be contained
|
|
229
|
+
in the :db_domain_type and :domain_oid schema entries.
|
|
230
|
+
|
|
231
|
+
* Sequel::Postgres.use_iso_date_format is now only defined if
|
|
232
|
+
you are using the postgres adapter. Previously, it could
|
|
233
|
+
be defined when using other adapters with a pg_* extension,
|
|
234
|
+
even though the setting had no effect in that case.
|
|
235
|
+
|
|
236
|
+
* The validation_class_methods plugin now copies validations into
|
|
237
|
+
the subclass upon inheritance, instead of recursing into the
|
|
238
|
+
superclass on validation. This makes it more similar to how
|
|
239
|
+
all the other Sequel plugins work. However, it also means that
|
|
240
|
+
if you add validations to a superclass after creating a
|
|
241
|
+
subclass, the subclass won't have those validations. Additionally
|
|
242
|
+
if you skip superclass validations in a child class after creating
|
|
243
|
+
a grandchild class, the grandchild class could still have the
|
|
244
|
+
parent class's validations.
|
|
245
|
+
|
|
246
|
+
* The validates_unique validation in validation_helpers no longer
|
|
247
|
+
attempts to do the uniqueness query if the underlying columns
|
|
248
|
+
have validation errors. The reasoning behind this is that if the
|
|
249
|
+
underlying columns are not valid, the uniqueness query can cause
|
|
250
|
+
a DatabaseError.
|
|
251
|
+
|
|
252
|
+
* If you were passing strings in hstore format to
|
|
253
|
+
Postgres::HStoreOp#-, you should manually cast them to hstore:
|
|
254
|
+
|
|
255
|
+
hstore_op - Sequel.cast('a=>b', :hstore)
|
|
256
|
+
|
|
257
|
+
* The default validation error message for validates_type has been
|
|
258
|
+
modified.
|
|
259
|
+
|
|
260
|
+
* Database#schema_column_type was made public accidently by an
|
|
261
|
+
adapter and a few extensions. That has been fixed, but if you
|
|
262
|
+
were calling it with an explicit receiver and it happened to
|
|
263
|
+
work by accident before, you'll need to update your code.
|
|
264
|
+
|
|
265
|
+
= Sequel 4 Implementation Planning
|
|
266
|
+
|
|
267
|
+
* Sequel 4 implementation work will begin shortly. All Sequel users
|
|
268
|
+
are encouraged to read about the proposed changes and provide
|
|
269
|
+
feedback on the implementation plan. For details, see
|
|
270
|
+
https://github.com/jeremyevans/sequel-4-plans.
|
data/doc/security.rdoc
CHANGED
|
@@ -19,6 +19,7 @@ could conceivably be abused to do so:
|
|
|
19
19
|
* Sequel::Schema::CreateTableGenerator.add_type_method
|
|
20
20
|
* Sequel::Dataset.def_mutation_method
|
|
21
21
|
* Sequel::Dataset.def_append_methods
|
|
22
|
+
* Sequel::Model::Plugins.def_dataset_methods
|
|
22
23
|
* Sequel.def_adapter_method (private)
|
|
23
24
|
* Sequel::Model::InstanceMethods.class_attr_overridable (private)
|
|
24
25
|
* Sequel::Model::InstanceMethods.class_attr_reader (private)
|
|
@@ -165,6 +166,11 @@ Instead, you should do:
|
|
|
165
166
|
|
|
166
167
|
DB[:table].update(:column => params[:value].to_s) # Safe
|
|
167
168
|
|
|
169
|
+
==== SQL Fragment passed to Dataset#lock_style
|
|
170
|
+
|
|
171
|
+
The Sequel::Dataset#lock_style method also treats an input string
|
|
172
|
+
as SQL code. This method should not be called with user input.
|
|
173
|
+
|
|
168
174
|
=== SQL Identifier Injections
|
|
169
175
|
|
|
170
176
|
Usually, Sequel treats ruby symbols as SQL identifiers, and ruby
|
|
@@ -264,15 +264,6 @@ module Sequel
|
|
|
264
264
|
end
|
|
265
265
|
end
|
|
266
266
|
|
|
267
|
-
# Convert smallint type to boolean if convert_smallint_to_bool is true
|
|
268
|
-
def schema_column_type(db_type)
|
|
269
|
-
if Sequel::IBMDB.convert_smallint_to_bool && db_type =~ /smallint/i
|
|
270
|
-
:boolean
|
|
271
|
-
else
|
|
272
|
-
super
|
|
273
|
-
end
|
|
274
|
-
end
|
|
275
|
-
|
|
276
267
|
# On DB2, a table might need to be REORGed if you are testing existence
|
|
277
268
|
# of it. This REORGs automatically if the database raises a specific
|
|
278
269
|
# error that indicates it should be REORGed.
|
|
@@ -364,6 +355,15 @@ module Sequel
|
|
|
364
355
|
def rollback_transaction(conn, opts={})
|
|
365
356
|
log_yield(TRANSACTION_ROLLBACK){conn.rollback}
|
|
366
357
|
end
|
|
358
|
+
|
|
359
|
+
# Convert smallint type to boolean if convert_smallint_to_bool is true
|
|
360
|
+
def schema_column_type(db_type)
|
|
361
|
+
if Sequel::IBMDB.convert_smallint_to_bool && db_type =~ /smallint/i
|
|
362
|
+
:boolean
|
|
363
|
+
else
|
|
364
|
+
super
|
|
365
|
+
end
|
|
366
|
+
end
|
|
367
367
|
end
|
|
368
368
|
|
|
369
369
|
class Dataset < Sequel::Dataset
|
data/lib/sequel/adapters/jdbc.rb
CHANGED
|
@@ -30,34 +30,39 @@ module Sequel
|
|
|
30
30
|
# Contains procs keyed on sub adapter type that extend the
|
|
31
31
|
# given database object so it supports the correct database type.
|
|
32
32
|
DATABASE_SETUP = {:postgresql=>proc do |db|
|
|
33
|
+
JDBC.load_gem(:Postgres)
|
|
34
|
+
org.postgresql.Driver
|
|
33
35
|
Sequel.ts_require 'adapters/jdbc/postgresql'
|
|
34
36
|
db.extend(Sequel::JDBC::Postgres::DatabaseMethods)
|
|
35
37
|
db.dataset_class = Sequel::JDBC::Postgres::Dataset
|
|
36
|
-
JDBC.load_gem(:Postgres)
|
|
37
38
|
org.postgresql.Driver
|
|
38
39
|
end,
|
|
39
40
|
:mysql=>proc do |db|
|
|
41
|
+
JDBC.load_gem(:MySQL)
|
|
42
|
+
com.mysql.jdbc.Driver
|
|
40
43
|
Sequel.ts_require 'adapters/jdbc/mysql'
|
|
41
44
|
db.extend(Sequel::JDBC::MySQL::DatabaseMethods)
|
|
42
45
|
db.extend_datasets Sequel::MySQL::DatasetMethods
|
|
43
|
-
JDBC.load_gem(:MySQL)
|
|
44
46
|
com.mysql.jdbc.Driver
|
|
45
47
|
end,
|
|
46
48
|
:sqlite=>proc do |db|
|
|
49
|
+
JDBC.load_gem(:SQLite3)
|
|
50
|
+
org.sqlite.JDBC
|
|
47
51
|
Sequel.ts_require 'adapters/jdbc/sqlite'
|
|
48
52
|
db.extend(Sequel::JDBC::SQLite::DatabaseMethods)
|
|
49
53
|
db.extend_datasets Sequel::SQLite::DatasetMethods
|
|
50
54
|
db.set_integer_booleans
|
|
51
|
-
JDBC.load_gem(:SQLite3)
|
|
52
55
|
org.sqlite.JDBC
|
|
53
56
|
end,
|
|
54
57
|
:oracle=>proc do |db|
|
|
58
|
+
Java::oracle.jdbc.driver.OracleDriver
|
|
55
59
|
Sequel.ts_require 'adapters/jdbc/oracle'
|
|
56
60
|
db.extend(Sequel::JDBC::Oracle::DatabaseMethods)
|
|
57
61
|
db.dataset_class = Sequel::JDBC::Oracle::Dataset
|
|
58
62
|
Java::oracle.jdbc.driver.OracleDriver
|
|
59
63
|
end,
|
|
60
64
|
:sqlserver=>proc do |db|
|
|
65
|
+
com.microsoft.sqlserver.jdbc.SQLServerDriver
|
|
61
66
|
Sequel.ts_require 'adapters/jdbc/sqlserver'
|
|
62
67
|
db.extend(Sequel::JDBC::SQLServer::DatabaseMethods)
|
|
63
68
|
db.extend_datasets Sequel::MSSQL::DatasetMethods
|
|
@@ -65,65 +70,75 @@ module Sequel
|
|
|
65
70
|
com.microsoft.sqlserver.jdbc.SQLServerDriver
|
|
66
71
|
end,
|
|
67
72
|
:jtds=>proc do |db|
|
|
73
|
+
JDBC.load_gem(:JTDS)
|
|
74
|
+
Java::net.sourceforge.jtds.jdbc.Driver
|
|
68
75
|
Sequel.ts_require 'adapters/jdbc/jtds'
|
|
69
76
|
db.extend(Sequel::JDBC::JTDS::DatabaseMethods)
|
|
70
77
|
db.dataset_class = Sequel::JDBC::JTDS::Dataset
|
|
71
78
|
db.send(:set_mssql_unicode_strings)
|
|
72
|
-
JDBC.load_gem(:JTDS)
|
|
73
79
|
Java::net.sourceforge.jtds.jdbc.Driver
|
|
74
80
|
end,
|
|
75
81
|
:h2=>proc do |db|
|
|
82
|
+
JDBC.load_gem(:H2)
|
|
83
|
+
org.h2.Driver
|
|
76
84
|
Sequel.ts_require 'adapters/jdbc/h2'
|
|
77
85
|
db.extend(Sequel::JDBC::H2::DatabaseMethods)
|
|
78
86
|
db.dataset_class = Sequel::JDBC::H2::Dataset
|
|
79
|
-
JDBC.load_gem(:H2)
|
|
80
87
|
org.h2.Driver
|
|
81
88
|
end,
|
|
82
89
|
:hsqldb=>proc do |db|
|
|
90
|
+
JDBC.load_gem(:HSQLDB)
|
|
91
|
+
org.hsqldb.jdbcDriver
|
|
83
92
|
Sequel.ts_require 'adapters/jdbc/hsqldb'
|
|
84
93
|
db.extend(Sequel::JDBC::HSQLDB::DatabaseMethods)
|
|
85
94
|
db.dataset_class = Sequel::JDBC::HSQLDB::Dataset
|
|
86
|
-
JDBC.load_gem(:HSQLDB)
|
|
87
95
|
org.hsqldb.jdbcDriver
|
|
88
96
|
end,
|
|
89
97
|
:derby=>proc do |db|
|
|
98
|
+
JDBC.load_gem(:Derby)
|
|
99
|
+
org.apache.derby.jdbc.EmbeddedDriver
|
|
90
100
|
Sequel.ts_require 'adapters/jdbc/derby'
|
|
91
101
|
db.extend(Sequel::JDBC::Derby::DatabaseMethods)
|
|
92
102
|
db.dataset_class = Sequel::JDBC::Derby::Dataset
|
|
93
|
-
JDBC.load_gem(:Derby)
|
|
94
103
|
org.apache.derby.jdbc.EmbeddedDriver
|
|
95
104
|
end,
|
|
96
105
|
:as400=>proc do |db|
|
|
106
|
+
com.ibm.as400.access.AS400JDBCDriver
|
|
97
107
|
Sequel.ts_require 'adapters/jdbc/as400'
|
|
98
108
|
db.extend(Sequel::JDBC::AS400::DatabaseMethods)
|
|
99
109
|
db.dataset_class = Sequel::JDBC::AS400::Dataset
|
|
100
110
|
com.ibm.as400.access.AS400JDBCDriver
|
|
101
111
|
end,
|
|
102
112
|
:"informix-sqli"=>proc do |db|
|
|
113
|
+
com.informix.jdbc.IfxDriver
|
|
103
114
|
Sequel.ts_require 'adapters/jdbc/informix'
|
|
104
115
|
db.extend(Sequel::JDBC::Informix::DatabaseMethods)
|
|
105
116
|
db.extend_datasets Sequel::Informix::DatasetMethods
|
|
106
117
|
com.informix.jdbc.IfxDriver
|
|
107
118
|
end,
|
|
108
119
|
:db2=>proc do |db|
|
|
120
|
+
com.ibm.db2.jcc.DB2Driver
|
|
109
121
|
Sequel.ts_require 'adapters/jdbc/db2'
|
|
110
122
|
db.extend(Sequel::JDBC::DB2::DatabaseMethods)
|
|
111
123
|
db.dataset_class = Sequel::JDBC::DB2::Dataset
|
|
112
124
|
com.ibm.db2.jcc.DB2Driver
|
|
113
125
|
end,
|
|
114
126
|
:firebirdsql=>proc do |db|
|
|
127
|
+
org.firebirdsql.jdbc.FBDriver
|
|
115
128
|
Sequel.ts_require 'adapters/jdbc/firebird'
|
|
116
129
|
db.extend(Sequel::JDBC::Firebird::DatabaseMethods)
|
|
117
130
|
db.extend_datasets Sequel::Firebird::DatasetMethods
|
|
118
131
|
org.firebirdsql.jdbc.FBDriver
|
|
119
132
|
end,
|
|
120
133
|
:jdbcprogress=>proc do |db|
|
|
134
|
+
com.progress.sql.jdbc.JdbcProgressDriver
|
|
121
135
|
Sequel.ts_require 'adapters/jdbc/progress'
|
|
122
136
|
db.extend(Sequel::JDBC::Progress::DatabaseMethods)
|
|
123
137
|
db.extend_datasets Sequel::Progress::DatasetMethods
|
|
124
138
|
com.progress.sql.jdbc.JdbcProgressDriver
|
|
125
139
|
end,
|
|
126
140
|
:cubrid=>proc do |db|
|
|
141
|
+
Java::cubrid.jdbc.driver.CUBRIDDriver
|
|
127
142
|
Sequel.ts_require 'adapters/jdbc/cubrid'
|
|
128
143
|
db.extend(Sequel::JDBC::Cubrid::DatabaseMethods)
|
|
129
144
|
db.extend_datasets Sequel::Cubrid::DatasetMethods
|
|
@@ -150,9 +150,14 @@ module Sequel
|
|
|
150
150
|
PG_OBJECT_METHOD = TYPE_TRANSLATOR_INSTANCE.method(:pg_object)
|
|
151
151
|
|
|
152
152
|
# Add the shared PostgreSQL prepared statement methods
|
|
153
|
-
def prepare(*
|
|
154
|
-
ps =
|
|
153
|
+
def prepare(type, name=nil, *values)
|
|
154
|
+
ps = to_prepared_statement(type, values)
|
|
155
|
+
ps.extend(JDBC::Dataset::PreparedStatementMethods)
|
|
155
156
|
ps.extend(::Sequel::Postgres::DatasetMethods::PreparedStatementMethods)
|
|
157
|
+
if name
|
|
158
|
+
ps.prepared_statement_name = name
|
|
159
|
+
db.set_prepared_statement(name, ps)
|
|
160
|
+
end
|
|
156
161
|
ps
|
|
157
162
|
end
|
|
158
163
|
|