sequel 5.6.0 → 5.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +30 -5099
  3. data/Rakefile +1 -1
  4. data/doc/opening_databases.rdoc +0 -2
  5. data/doc/postgresql.rdoc +31 -0
  6. data/doc/querying.rdoc +2 -2
  7. data/doc/release_notes/5.7.0.txt +108 -0
  8. data/doc/testing.rdoc +1 -0
  9. data/lib/sequel/adapters/jdbc/derby.rb +1 -1
  10. data/lib/sequel/adapters/jdbc/oracle.rb +11 -0
  11. data/lib/sequel/adapters/postgres.rb +1 -0
  12. data/lib/sequel/adapters/shared/postgres.rb +117 -13
  13. data/lib/sequel/connection_pool/sharded_threaded.rb +7 -6
  14. data/lib/sequel/connection_pool/threaded.rb +6 -6
  15. data/lib/sequel/core.rb +20 -0
  16. data/lib/sequel/database/logging.rb +3 -2
  17. data/lib/sequel/database/schema_generator.rb +1 -2
  18. data/lib/sequel/dataset/actions.rb +15 -5
  19. data/lib/sequel/extensions/connection_expiration.rb +3 -3
  20. data/lib/sequel/extensions/connection_validator.rb +3 -3
  21. data/lib/sequel/extensions/integer64.rb +30 -0
  22. data/lib/sequel/extensions/migration.rb +2 -3
  23. data/lib/sequel/plugins/pg_array_associations.rb +5 -3
  24. data/lib/sequel/plugins/validate_associated.rb +18 -0
  25. data/lib/sequel/version.rb +1 -1
  26. data/spec/adapters/mssql_spec.rb +6 -6
  27. data/spec/adapters/mysql_spec.rb +1 -1
  28. data/spec/adapters/oracle_spec.rb +15 -1
  29. data/spec/adapters/postgres_spec.rb +78 -1
  30. data/spec/adapters/spec_helper.rb +3 -1
  31. data/spec/bin_spec.rb +1 -0
  32. data/spec/core/dataset_spec.rb +10 -0
  33. data/spec/extensions/integer64_spec.rb +22 -0
  34. data/spec/extensions/pg_array_associations_spec.rb +14 -2
  35. data/spec/extensions/spec_helper.rb +1 -0
  36. data/spec/integration/associations_test.rb +4 -4
  37. data/spec/integration/dataset_test.rb +2 -0
  38. data/spec/integration/spec_helper.rb +5 -11
  39. data/spec/model/spec_helper.rb +1 -0
  40. metadata +35 -165
  41. data/doc/release_notes/1.0.txt +0 -38
  42. data/doc/release_notes/1.1.txt +0 -143
  43. data/doc/release_notes/1.3.txt +0 -101
  44. data/doc/release_notes/1.4.0.txt +0 -53
  45. data/doc/release_notes/1.5.0.txt +0 -155
  46. data/doc/release_notes/2.0.0.txt +0 -298
  47. data/doc/release_notes/2.1.0.txt +0 -271
  48. data/doc/release_notes/2.10.0.txt +0 -328
  49. data/doc/release_notes/2.11.0.txt +0 -215
  50. data/doc/release_notes/2.12.0.txt +0 -534
  51. data/doc/release_notes/2.2.0.txt +0 -253
  52. data/doc/release_notes/2.3.0.txt +0 -88
  53. data/doc/release_notes/2.4.0.txt +0 -106
  54. data/doc/release_notes/2.5.0.txt +0 -137
  55. data/doc/release_notes/2.6.0.txt +0 -157
  56. data/doc/release_notes/2.7.0.txt +0 -166
  57. data/doc/release_notes/2.8.0.txt +0 -171
  58. data/doc/release_notes/2.9.0.txt +0 -97
  59. data/doc/release_notes/3.0.0.txt +0 -221
  60. data/doc/release_notes/3.1.0.txt +0 -406
  61. data/doc/release_notes/3.10.0.txt +0 -286
  62. data/doc/release_notes/3.11.0.txt +0 -254
  63. data/doc/release_notes/3.12.0.txt +0 -304
  64. data/doc/release_notes/3.13.0.txt +0 -210
  65. data/doc/release_notes/3.14.0.txt +0 -118
  66. data/doc/release_notes/3.15.0.txt +0 -78
  67. data/doc/release_notes/3.16.0.txt +0 -45
  68. data/doc/release_notes/3.17.0.txt +0 -58
  69. data/doc/release_notes/3.18.0.txt +0 -120
  70. data/doc/release_notes/3.19.0.txt +0 -67
  71. data/doc/release_notes/3.2.0.txt +0 -268
  72. data/doc/release_notes/3.20.0.txt +0 -41
  73. data/doc/release_notes/3.21.0.txt +0 -87
  74. data/doc/release_notes/3.22.0.txt +0 -39
  75. data/doc/release_notes/3.23.0.txt +0 -172
  76. data/doc/release_notes/3.24.0.txt +0 -420
  77. data/doc/release_notes/3.25.0.txt +0 -88
  78. data/doc/release_notes/3.26.0.txt +0 -88
  79. data/doc/release_notes/3.27.0.txt +0 -82
  80. data/doc/release_notes/3.28.0.txt +0 -304
  81. data/doc/release_notes/3.29.0.txt +0 -459
  82. data/doc/release_notes/3.3.0.txt +0 -192
  83. data/doc/release_notes/3.30.0.txt +0 -135
  84. data/doc/release_notes/3.31.0.txt +0 -146
  85. data/doc/release_notes/3.32.0.txt +0 -202
  86. data/doc/release_notes/3.33.0.txt +0 -157
  87. data/doc/release_notes/3.34.0.txt +0 -671
  88. data/doc/release_notes/3.35.0.txt +0 -144
  89. data/doc/release_notes/3.36.0.txt +0 -245
  90. data/doc/release_notes/3.37.0.txt +0 -338
  91. data/doc/release_notes/3.38.0.txt +0 -234
  92. data/doc/release_notes/3.39.0.txt +0 -237
  93. data/doc/release_notes/3.4.0.txt +0 -325
  94. data/doc/release_notes/3.40.0.txt +0 -73
  95. data/doc/release_notes/3.41.0.txt +0 -155
  96. data/doc/release_notes/3.42.0.txt +0 -74
  97. data/doc/release_notes/3.43.0.txt +0 -105
  98. data/doc/release_notes/3.44.0.txt +0 -152
  99. data/doc/release_notes/3.45.0.txt +0 -179
  100. data/doc/release_notes/3.46.0.txt +0 -122
  101. data/doc/release_notes/3.47.0.txt +0 -270
  102. data/doc/release_notes/3.48.0.txt +0 -477
  103. data/doc/release_notes/3.5.0.txt +0 -510
  104. data/doc/release_notes/3.6.0.txt +0 -366
  105. data/doc/release_notes/3.7.0.txt +0 -179
  106. data/doc/release_notes/3.8.0.txt +0 -151
  107. data/doc/release_notes/3.9.0.txt +0 -233
@@ -1,304 +0,0 @@
1
- = Migration Changes
2
-
3
- * A TimestampMigrator has been added to Sequel, and is
4
- automatically used if any migration has a version greater than
5
- 20000100. This migrator operates similarly to the default
6
- ActiveRecord migrator, in that it allows missing migrations.
7
- It differs from the ActiveRecord migrator in that it supports
8
- migrations with the same timestamp/version as well as a wide
9
- variety of timestamp formats (though the ActiveRecord default
10
- of YYYYMMDDHHMMSS is recommended and should be used in
11
- portable code).
12
-
13
- Sequel still defaults to the old migrator, but you can use the
14
- new one without making changes to your old migrations. Just
15
- make sure your new migration starts with a version greater than
16
- 20000100, and Sequel will automatically convert the previous
17
- schema table to the new format.
18
-
19
- * A new migration DSL was added:
20
-
21
- Sequel.migration do
22
- up do
23
- end
24
-
25
- down do
26
- end
27
- end
28
-
29
- The old style of using a Sequel::Migration subclass is still
30
- supported, but it is recommended that new code use the new DSL.
31
-
32
- * The default migrator also had significant issues fixed. First,
33
- it now saves the migration version after each migration, instead
34
- of after all migrations, which means Sequel won't attempt to
35
- apply already applied migrations if there was previously an error
36
- when applying multiple migrations at once on a database that
37
- didn't support transactional schema modification.
38
-
39
- Second, duplicate migration versions in the default migrator now
40
- raise an exception, as do missing migration versions. Neither
41
- should happen when using the default migrator, which requires
42
- consecutive integer versions, similar to the old ActiveRecord
43
- migrator.
44
-
45
- * Execution times for migrations are now logged to the database's
46
- loggers.
47
-
48
- = New Plugins
49
-
50
- * A sharding plugin has been added that allows model objects to
51
- work well with sharded databases. When using it, model objects
52
- know which shard they were retrieved from, so when you save
53
- the object, it is saved back to that shard. The sharding plugin
54
- also works with associations, so associated records are retrieved
55
- from the same shard the main object was retreived from. The
56
- sharding plugin also works with both methods of eager loading, and
57
- provides methods that you can use to create objects on specific
58
- shards.
59
-
60
- * An update_primary_key plugin has been added that allows Sequel
61
- to work correctly if you modify the primary key of a model object.
62
- This should not be necessary if you are using surrogate keys, but
63
- if your database uses natural primary keys which can change, this
64
- should be helpful.
65
-
66
- * An association_pks plugin has been added that adds association_pks
67
- and association_pks= methods to model objects for both one_to_many
68
- and many_to_many associations. The association_pks method returns
69
- an array of primary key values for the associated objects, and
70
- the association_pks= method modifies the database to ensure that
71
- the object is only associated to the objects specified by the
72
- array of primary keys provided to it.
73
-
74
- * A string_stripper plugin has been added that strips all strings
75
- that are assigned to attribute values. This is useful for web
76
- applications where you want to easily remove leading and trailing
77
- whitespace in form entries before storing them in the database.
78
-
79
- * A skip_create_refresh plugin has been added that skips the refresh
80
- of after you save a new model object. On most databases, Sequel
81
- refreshes the model object after inserting it in order to get
82
- values for all of the columns. For performance reasons, you can
83
- use this plugin to skip the refresh if it isn't necessary for you.
84
-
85
- = Other New Features
86
-
87
- * Sequel::Model#set_fields and update_fields were added. These
88
- methods have a similar API to set_only and update_only, but they
89
- operate differently. While set_only and update_only operate over
90
- the hash, these methods operate over the array of fields,
91
- so they don't raise errors if the hash contains fields not
92
- in the array:
93
-
94
- params = {:a=>1, :b=>2, :c=>3}
95
- album = Album[1]
96
-
97
- # raises Error because :a is not in the fields
98
- album.set_only(params, [:b, :c])
99
-
100
- # Just sets the value of album.b and album.c
101
- album.set_fields(params, [:b, :c])
102
-
103
- Other than handling entries in the hash that aren't in the array,
104
- set_fields and update_fields also handle entries not in the hash
105
- differently:
106
-
107
- # Doesn't modify the object, since the hash is empty
108
- album.set_only({}, [:b, :c])
109
-
110
- # Sets album.b and album.c to nil, since they aren't in the hash
111
- album.set_fields({}, [:b, :c])
112
-
113
- * The :eager_loader association option has a new API, though the
114
- previous API still works. Instead of accepting three arguments,
115
- it can now accept a single hash argument, which will use the
116
- :key_hash, :rows, and :association keys for the previous three
117
- arguments. The hash will also contain a :self key whose value
118
- is the dataset doing the eager load, which was not possible to
119
- determine using the old API.
120
-
121
- * Sequel::SQL::Expression#hash has been added so that the objects
122
- are now safe to use as hash keys.
123
-
124
- * A Dataset#order_prepend method has been added allowing you to
125
- prepend to an existing order. This is useful if want to modify
126
- a dataset's order such that it first orders by the columns you
127
- provide, but for any rows where the columns you provide are
128
- equal, uses the existing order to further order the dataset:
129
-
130
- ds.order(:albums__name).order_prepend(:artists__name)
131
- # ORDER BY artists.name, albums.name
132
-
133
- * When creating foreign key columns, you can now use a :deferrable
134
- option to set up a foreign key constraint that is not checked
135
- until the end of the transaction:
136
-
137
- DB.create_table(:albums) do
138
- primary_key :id
139
- String :name
140
- foreign_key :artist_id, :artists, :deferrable=>true
141
- end
142
-
143
- * many_to_many associations now support a :join_table_block option
144
- that is used by the add/remove/remove_all methods. It can modify
145
- the dataset to ensure that certain columns are included when
146
- inserting or to add a filter so that only certain records are
147
- deleted. It's useful if you have a many_to_many association that
148
- is filtered to only a subset of the matching rows in the join
149
- table.
150
-
151
- * The single_table_inheritance plugin now supports :model_map and
152
- :key_map options to set up a custom mapping of column values to
153
- model classes. For simple situations such as when you are mapping
154
- integer values to certain classes, a :model_map hash is sufficient:
155
-
156
- Employee.plugin :single_table_inheritance, :type_id,
157
- :model_map=>{1=>:Staff, 2=>:Manager}
158
-
159
- Here the :model_map keys are type_id column values, and the
160
- :model_map values are symbols or strings specifying class names.
161
-
162
- For more complex conditions, you can use a pair of procs:
163
-
164
- Employee.plugin :single_table_inheritance, :type_name,
165
- :model_map=>proc{|v| v.reverse},
166
- :key_map=>proc{|klass| klass.name.reverse}
167
-
168
- Here the type_name column is a string column holding the reverse
169
- of the class's name.
170
-
171
- * The single_table_inheritance plugin now correctly sets up subclass
172
- filters for middle tables in a class hierarchy with more than 2
173
- levels. For example, with this code:
174
-
175
- class Employee < Sequel::Model; end
176
- Employee.plugin :single_table_inheritance, :kind
177
- class Manager < Employee; end
178
- class Executive < Manager; end
179
-
180
- Sequel previously would not return Executives if you used
181
- Manager.all. It now correctly recognizes subclasses so that it
182
- will return both Managers and Executives.
183
-
184
- * Sequel::Model.qualified_primary_key_hash has been added, giving
185
- you a hash that can be used for filtering. It is similar to
186
- primary_key_hash, but it qualifies the keys with the model's
187
- table. It's useful if you have joined the table to another table
188
- that has columns with the same name, but you want to only look
189
- for a single model object in that dataset.
190
-
191
- * For consistency, you can now use Dataset#order_append as an alias
192
- for order_more.
193
-
194
- = Other Improvements
195
-
196
- * Sequel now correctly removes schema entries when altering tables.
197
- Previously, some adapters that had to query the existing schema
198
- when altering tables resulted in the previous schema being cached.
199
-
200
- * Sequel::Model::Errors#on now always returns nil if there are no
201
- errors on the attribute. Previously, it would return an empty
202
- array in certain cases. Additionally, Sequel::Model::Errors#empty?
203
- now returns true if there are no errors, where it certain cases
204
- it would return false even if there were no errors.
205
-
206
- * The schema_dumper extension now works with tables specified as
207
- Sequel::SQL::Identifiers.
208
-
209
- * Sequel now recognizes the timestamp(N) with(out) time zone column
210
- type.
211
-
212
- * The lazy_attributes plugin no longer requires the core extensions
213
- to work correctly.
214
-
215
- * DatabaseDisconnectError support has been added to the ODBC adapter,
216
- allowing Sequel to detect disconnects and remove the connection
217
- from the connection pool.
218
-
219
- * A leak of JDBC statement objects when using transactions was
220
- fixed in the jdbc adapter.
221
-
222
- * The jdbc adapter now gives a nicer error message if you use a
223
- connection string that it doesn't recognize and there is an error
224
- when connecting.
225
-
226
- * Temporary table creation was fixed on Microsoft SQL Server, but
227
- it is not recommended as it changes the name of the table. If
228
- you use Microsoft SQL Server, you should prefix your temporary
229
- table names with # and use the regular create table method.
230
-
231
- * A large number of guides were added to Sequel to make it easier
232
- for new and existing users to learn more about Sequel. The
233
- following guides were added:
234
-
235
- * Querying in Sequel
236
- * Migration and Schema Modification
237
- * Model Hooks
238
- * Model Validations
239
- * Sequel for SQL Users
240
- * Sequel for ActiveRecord Users
241
-
242
- * RDoc section support was added to Sequel::Database, making the
243
- method documentation easier to read.
244
-
245
- = Backwards Compatibility
246
-
247
- * Sequel::Database now defines the indexes and tables methods, even
248
- if the adapter does not implement them, similar to how connect
249
- and execute are defined. Previously, you could use respond_to? to
250
- check if the adapter supported them, now they raise
251
- Sequel::NotImplemented if the database adapter does not implement
252
- them.
253
-
254
- * Sequel used to raise NotImplementedError in certain default
255
- definitions of methods inside Sequel::Database and Sequel::Dataset,
256
- when the methods were supposed to be overridden in subclasses.
257
- Sequel now uses a Sequel::NotImplemented exception class for these
258
- exceptions, which is a subclass of Sequel::Error.
259
-
260
- * Sequel no longer applies all association options to the dataset
261
- used to remove all many_to_many associated objects. You should
262
- use the new :join_table_block option to get similar behavior if
263
- you were filtering the many_to_many association based on columns
264
- in the join table and you wanted remove_all to only remove the
265
- related columns.
266
-
267
- * Sequel now calls certain before and after hook actions in plugins
268
- in a different order than before. This should not have an effect
269
- unless you were relying on them being called in the previous order.
270
- Now, when overriding before hooks in plugins, Sequel always does
271
- actions before calling super, and when overriding after hooks in
272
- plugins, Sequel always does actions after calling super.
273
-
274
- * The hook_class_methods plugin no longer skips later after hooks if
275
- a previous after hook returns false. That behavior now only occurs
276
- for before hooks.
277
-
278
- * Sequel now only removes primary key values when updating objects if
279
- you are saving the entire object and you have not modified the
280
- values of the primary keys. Previously, Sequel would remove
281
- primary key values when updating even if you specified the primary
282
- key column specifically or the primary key column was modified and
283
- you used save_changes/update.
284
-
285
- * Sequel now uses explicit methods instead of aliases for certain
286
- methods. This should only affect you if for example you overrode
287
- Dataset#group to do one thing and wanted Dataset#group_by to do
288
- the default action. Now, Dataset#group_by, and methods like it, are
289
- explicit methods that just call the methods they previously
290
- aliased. This also means that if you were overriding Dataset#group
291
- and explicitly aliasing group_by to it, you no longer need the
292
- alias.
293
-
294
- * The single_table_inheritance plugin now uses IN instead of = for
295
- subclass filters. This could lead to poor performance if the
296
- database has a very bad query planner.
297
-
298
- * The private transaction_statement_object method was removed from
299
- the JDBC adapter, and Sequel will no longer check for the presence
300
- of the method in the transaction code.
301
-
302
- * The Sequel::Migrator object is now a class instead of a module, and
303
- has been pretty much rewritten. If you were using any methods of
304
- it besides apply and run, they no longer work.
@@ -1,210 +0,0 @@
1
- = New Plugins
2
-
3
- * A json_serializer plugin was added that allows you to serialize
4
- model instances or datasets to JSON using to_json. It requires
5
- the json library. The API was modeled on ActiveRecord's JSON
6
- serialization support. You can use :only and :except options
7
- to specify the columns included, :include to specify associations
8
- to include, as well pass options to nested associations using a
9
- hash. In addition to serializing to JSON, it also adds support
10
- for parsing JSON to model objects via JSON.parse or #from_json.
11
-
12
- * An xml_serializer plugin was added that allows you to serialize
13
- model instances or datasets to XML. It requries the nokogiri
14
- library. It has a similar API to the json_serializer plugin, using
15
- to_xml instead of to_json, and the from_xml class method instead
16
- of JSON.parse.
17
-
18
- * A tree plugin was added that allows you to treat Sequel::Model
19
- objects as being part of a tree. It provides similar features to
20
- rcte_tree, but works on databases that don't support recursive
21
- common table expressions. In addition to the standard parent
22
- and children associations, it provides instance methods to get
23
- the ancestors, descendants, and siblings of the given tree node,
24
- and class methods to get the roots of the tree.
25
-
26
- * A list plugin was added that allows you to treat Sequel::Model
27
- objects as being part of a list. This adds instance methods to
28
- get the next and prev items in the list, or to move the item
29
- to a specific place in the list. You can specify that all rows
30
- in the table belong to the same list, or specify arbitrary scopes
31
- so that the same table can contain many separate lists.
32
-
33
- = Other New Features
34
-
35
- * Sequel is now compatible with Ruby 1.9.2pre3.
36
-
37
- * Sequel now supports prepared transactions/two-phase commit on
38
- PostgreSQL, MySQL, and H2. You can specify that you want to
39
- use prepared transactions using the :prepare option which
40
- should be some transaction id string:
41
-
42
- DB.transaction(:prepare=>'some string') do ... end
43
-
44
- Assuming that no exceptions are raised in the transaction block,
45
- Sequel will prepare the transaction. You can then commit the
46
- transaction later:
47
-
48
- DB.commit_prepared_transaction('some string')
49
-
50
- If you need to rollback the prepared transaction, you can do
51
- so as well:
52
-
53
- DB.rollback_prepared_transaction('some string')
54
-
55
- * Sequel now supports customizable transaction isolation levels on
56
- PostgreSQL, MySQL, and Microsoft SQL Server. You can specify the
57
- transaction isolation level to use for any transaction using the
58
- :isolation option with an :uncommitted, :committed, :repeatable,
59
- or :serializable value:
60
-
61
- DB.transaction(:isolation=>:serializable) do ... end
62
-
63
- You can also set the default isolation level for transactions via
64
- the transaction_isolation_level Database attribute:
65
-
66
- DB.transaction_isolation_level = :committed
67
-
68
- If you are connecting to Microsoft SQL Server, it is recommended
69
- that you set a default transaction isolation level if you plan
70
- on using this feature.
71
-
72
- * You can specify a NULLS FIRST/LAST ordering by using the
73
- :nulls=>:first/:last option to asc and desc:
74
-
75
- Album.filter(:release_date.desc(:nulls=>:first),
76
- :name.asc(:nulls=>:last))
77
- # ORDER BY release_date DESC NULLS FIRST,
78
- # name ASC NULLS LAST
79
-
80
- This syntax is supported by PostgreSQL 8.3+, Firebird 1.5+,
81
- Oracle, and probably some other databases as well, and makes it
82
- possible for the user to specify whether NULL values should sort
83
- before or after other values.
84
-
85
- * Sequel::Model.find_or_create now accepts a block that is a yielded
86
- a new model object to be created if an existing model object is
87
- not found.
88
-
89
- Node.find_or_create(:name=>'A'){|i| i.parent_id = 4}
90
-
91
- * The :frame option for windows and window functions can now be a
92
- string that is used literally in the SQL. This is necessary if you
93
- want to specify a custom frame, such as one that uses a specific
94
- number of rows preceding or following.
95
-
96
- * Savepoints are now supported on H2.
97
-
98
- * A :methods_module association option was added, allowing you to
99
- specify the module into which association instance methods are
100
- placed. By default, it uses the module containing the column
101
- accessor methods.
102
-
103
- = Other Improvements
104
-
105
- * The :encoding option for the native MySQL adapter should now work
106
- correctly in all cases. This fix was included in 3.12.1.
107
-
108
- * Sequel now handles arrays of two element arrays automatically when
109
- using them as the value of a filter hash:
110
-
111
- DB[a].filter([:a, :b]=>[[1, 2], [3, 4]])
112
-
113
- Previously, you had to call .sql_array on the array in order to
114
- tell Sequel that it was a value list and not a conditions
115
- specifier.
116
-
117
- * Sequel no longer attempts to use class polymorphism in the
118
- class_table_inheritance plugin if you don't specify a cti_key.
119
-
120
- * When using the native SQLite adapter, prepared statements are now
121
- cached per connection for increased performance. Previously,
122
- Sequel prepared a new statement for every query.
123
-
124
- * tinyint(1) columns are now handled as booleans when connecting to
125
- MySQL via JDBC.
126
-
127
- * On PostgreSQL, if no :schema option is provided for
128
- Database#tables, #table_exists?, or #schema, and no default_schema
129
- is used, assume all schemas except the default non-public ones.
130
- Previously, it assumed the public schema for tables and
131
- table_exists?, but did not assume any schema for #schema.
132
-
133
- This fixes issues if you use table names that overlap with table
134
- names in the information_schema, such as domains. It's still
135
- recommended that you specify a default_schema if you are using a
136
- schema other than public.
137
-
138
- * Unsigned integers are now handled correctly in the schema dumper.
139
-
140
- * Sequel::SQL::PlaceholderLiteralString is now a GenericExpression
141
- subclass, allowing you to treat it like most other Sequel
142
- expression objects:
143
-
144
- '(a || ?)'.lit(:b).like('Test%')
145
- # ((a || b) LIKE 'Test%')
146
-
147
- * Sequel now supports the bitwise shift operators (<< and >>) on
148
- Microsoft SQL Server by emulating them.
149
-
150
- * Sequel now supports most bitwise operators (&, |, ^, <<, >>) on H2
151
- by emulating them. The bitwise complement operator is not yet
152
- supported.
153
-
154
- * Sequel now logs the SQL queries that are sent when connecting to
155
- MySQL.
156
-
157
- * If a plugin cannot be loaded, Sequel now gives a more detailed
158
- error message.
159
-
160
- = Backwards Compatibility
161
-
162
- * Array#sql_array and the Sequel::SQL::SQLArray class are now
163
- considered deprecated. Use the Array#sql_value_list and the
164
- Sequel::SQL::ValueList class instead. SQLArray is now just
165
- an alias for ValueList, but it now is an Array subclass instead
166
- of a Sequel::SQL::Expression subclass.
167
-
168
- * Using the ruby bitwise xor operator (^) on PostgreSQL now uses
169
- PostgreSQL's bitwise xor operator (#) instead of PostgreSQL's
170
- exponentiation operator (^). If you want exponentiation, use
171
- the power function.
172
-
173
- * Using the ruby bitwise complement operator (~) on MySQL now returns
174
- a signed integer instead of an unsigned integer, for better
175
- compatibility with other databases.
176
-
177
- * Using nil as a case expression value (the 2nd argument to Hash#case
178
- and Array#case) will now use NULL as the case expression value,
179
- instead of omitting the case expression value:
180
-
181
- # 3.12.0
182
- {1=>2}.case(0, nil)
183
- # CASE WHEN 1 THEN 2 ELSE 0 END
184
-
185
- # 3.13.0
186
- {1=>2}.case(0, nil)
187
- # CASE NULL WHEN 1 THEN 2 ELSE 0 END
188
-
189
- In general, you would never use nil explicitly, but the new
190
- behavior makes more sense if you have a variable that might be nil:
191
-
192
- parent_id = Node[1].parent_id
193
- {1=>2}.case(0, parent_id)
194
-
195
- If parent_id IS NULL/nil, then previously Sequel would have
196
- generated unexpected SQL. If you don't want a case expression
197
- value to be used, do not pass a second argument to #case.
198
-
199
- * Some internal transaction methods now take an optional options
200
- hash, so if you have a custom adapter, you will need to make
201
- changes.
202
-
203
- * Some internal association methods now take an optional options
204
- hash.
205
-
206
- * Some Rakefile task names were modified in the name of consistency:
207
-
208
- spec_coverage -> spec_cov
209
- integration -> spec_integration
210
- integration_cov -> spec_integration_cov