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,328 +0,0 @@
1
- New Supported Adapters and Databases
2
- ------------------------------------
3
-
4
- * A DataObjects adapter was added that supports PostgreSQL,
5
- MySQL, and SQLite. DataObjects is the underlying database
6
- library used by DataMapper, and has potential performance
7
- advantages by doing all typecasting in C.
8
-
9
- * A Firebird Adapter was added, it requires the modified Ruby
10
- Fb adapter found at http://github.com/wishdev/fb.
11
-
12
- * An H2 JDBC subadapter was added, based on the code used in JotBot.
13
- H2 is an embeddable Java database, and may be preferable to using
14
- SQLite on JDBC because SQLite requires native code.
15
-
16
- New Core Features
17
- -----------------
18
-
19
- * Sequel now has database independent migrations. Before, column
20
- types in migrations were not translated per database, so it was
21
- difficult to set up a migration that worked on multiple databases.
22
- Sequel now accepts ruby classes as database types, in addition to
23
- symbols and strings. If a ruby class is used, it is translated
24
- to the most appropriate database type. Here is an example using
25
- all supported classes (with Sequel's default database type):
26
-
27
- DB.create_table(:cats) do
28
- primary_key :id, :type=>Integer # integer
29
- String :a # varchar(255)
30
- column :b, File # blob
31
- Fixnum :c # integer
32
- foreign_key :d, :other_table, :type=>Bignum # bigint
33
- Float :e # double precision
34
- BigDecimal :f # numeric
35
- Date :g # date
36
- DateTime :h # timestamp
37
- Time :i # timestamp
38
- Numeric :j # numeric
39
- TrueClass :k # boolean
40
- FalseClass :l # boolean
41
- end
42
-
43
- Type translations were tested on the PostgreSQL, MySQL, SQLite,
44
- and H2 databases. The default translations should work OK for
45
- most databases, but there will probably be a type or two that
46
- doesn't work. Please send in a patch if Sequel uses a column type
47
- that doesn't work on your database.
48
-
49
- Note that existing migrations still work fine, in most cases. If
50
- you were using strings or symbols for types before, they should
51
- still work. See the Backwards Compatibility section below for
52
- details.
53
-
54
- Also note that this doesn't relate solely to migrations, as any
55
- database schema modification method that accepts types will
56
- accept one of the above classes.
57
-
58
- * A ton of internal work was done to better support databases that
59
- fold unqouted identifiers to uppercase (which is the SQL standard).
60
- Sequel now allows you to set a method to call on identifiers going
61
- both into and out of the database. The default is to downcase
62
- identifiers coming out, and upcase identifiers going in, though
63
- this is overridden by the PostgreSQL, MySQL, and SQLite adapters
64
- to not do anything (since they fold to lowercase by default).
65
-
66
- The settings are called identifier_input_method and
67
- identifier_output_method, and like most Sequel settings, they can
68
- be set globally, per database, or per dataset:
69
-
70
- # Global (use uppercase in ruby and lowercase in the database)
71
- Sequel.identifier_input_method = :downcase
72
- Sequel.identifier_output_method = :upcase
73
- # Per Database (use camelized names in the database, and
74
- # underscored names in ruby)
75
- DB.identifier_input_method = :camelize
76
- DB.identifier_output_method = :underscore
77
- # Per Dataset (obfuscate your database columns!)
78
- class String; def rot_13; tr('A-Za-z', 'N-ZA-Mn-za-m') end end
79
- ds = DB[:table]
80
- ds.identifier_input_method = :rot_13
81
- ds.identifier_output_method = :rot_13
82
-
83
- * Schema parsing support was added to the JDBC adapter, using the
84
- JDBC metadata methods. This means that models that use the
85
- JDBC adapter will typecast data in their column setters and
86
- automatically select the correct primary key column(s). This is
87
- currently the only adapter that supports schema parsing when using
88
- an MSSQL or Oracle database.
89
-
90
- * Database#create_table now takes options, which you can use to
91
- specify a MySQL engine, charset, and/or collation. You can also
92
- set a default engine, charset, and collation for MySQL to use:
93
-
94
- Sequel::MySQL.default_engine = 'InnoDB'
95
- Sequel::MySQL.default_charset = 'utf8'
96
- Sequel::MySQL.default_collate = 'utf8'
97
-
98
- The defaults will be used if the options are not provided. If a
99
- default engine is set, you can specify :engine=>nil to not use it
100
- (same goes for charset and collate).
101
-
102
- * The Sequel::DatabaseConnectionError exception class was added. It
103
- is raised by the connection pool if there is an error attempting
104
- to instantiate a database connection. Also, if the adapter returns
105
- nil instead of raising an error for faulty connection parameters,
106
- DatabaseConnectionError will be raised immediately, instead of the
107
- connection pool busy waiting until if gives up with a
108
- PoolTimeoutError.
109
-
110
- * Database#tables is now supported on the JDBC adapter, returning
111
- an Array of table name symbols.
112
-
113
- * Sequel now converts the following Java types returned by the JDBC
114
- adapter into ruby types: Java::JavaSQL::Timestamp,
115
- Java::JavaSQL::Time, Java::JavaSQL::Date,
116
- Java::JavaMath::BigDecimal, and Java::JavaIo::BufferedReader.
117
-
118
- * When using the PostgreSQL adapter with the postgres-pr driver,
119
- Sequel will use a custom string escaping routine unless
120
- force_standard_strings = false. This means that using Sequel's
121
- defaults, postgres-pr will correctly escape strings now.
122
-
123
- * The SQLite adapter now returns float, real, and double precision
124
- columns as Floats.
125
-
126
- * The SQLite adapter logs beginning, committing, and rolling back
127
- transactions.
128
-
129
- * Sequel now has an internal version (before, the only way to tell
130
- the version was to look at the gem being used). It is accessible
131
- at Sequel.version.
132
-
133
- New Model Features
134
- ------------------
135
-
136
- * A new validates_not_string validation was added for Sequel Models.
137
- It is intended to be used with the raise_on_typecast_failure =
138
- false setting. In this case, for a non-string database column,
139
- if there is a string value when the record is going to be
140
- saved, it is due to the fact that Sequel was not able to typecast
141
- the given data correctly (so it is almost certainly not valid).
142
- This should make Sequel easier to use with web applications.
143
-
144
- * An :allow_missing validation option was added to all standard
145
- validations. This option skips the validation if the attribute
146
- is not in the object's values. It is different from :allow_nil,
147
- which will skip the value if it is present but nil in the values.
148
- The intended use case for this option is when the database provides
149
- a good default. If the attribute is not present in values, the
150
- database will use its default. If the attribute is present in
151
- the values but equals nil, Sequel will attempt to insert it into
152
- the database as a NULL value, instead of using the database's
153
- default. If you don't want Sequel to insert a NULL value in the
154
- database, but you want the database to provide the default, this
155
- is the option to use.
156
-
157
- * validates_each now accepts :allow_nil and :allow_blank options,
158
- so it is easier to create custom validations with the same options
159
- as the standard validations.
160
-
161
- * Before_* hooks now run in the reverse order that they were added.
162
- The purpose of hooks is to wrap existing functionality, and making
163
- later before_* hooks run before previous before_* hooks is the
164
- correct behavior.
165
-
166
- * You can now add you own hook types, via Model.add_hook_type. This
167
- is intended for plugin use. All of the standard hooks are now
168
- implemented using this method.
169
-
170
- * The value of new? in a after_save hook now reflects the
171
- previous state of the model (so true for a create and false for an
172
- update), instead of always being false. This makes it easier
173
- to have a complex after_save hook that still needs to
174
- differentiate between a newly created record and an updated record,
175
- without having to add separate after_create and after_update
176
- hooks.
177
-
178
- * The value of changed_columns in an after_update hook now reflects
179
- the value before the update occurred, instead of usually being
180
- empty. Previously, to have this functionality, you generally had
181
- to save the value to an instance variable in a before_update hook
182
- so you could reference it in the after_update hook.
183
-
184
- Other Improvements
185
- ------------------
186
-
187
- * Sequel now longer overwrites the following Symbol instance methods
188
- when running on ruby 1.9: [], <, <=, >, and >=. One of Sequel's
189
- principals is that it does not override methods defined by ruby,
190
- and now that ruby 1.9 defines the above methods on Symbol, Sequel
191
- shouldn't be overwriting them.
192
-
193
- Sequel already provides a way to work around this issue when
194
- another library adds the same methods to Symbol that Sequel does.
195
- For example, you need to change the following:
196
-
197
- dataset.filter(:number > 1)
198
- dataset.filter(:number >= 2)
199
- dataset.filter(:name < 'M')
200
- dataset.filter(:name <= 'I')
201
- dataset.filter(:is_bool[:x])
202
-
203
- To:
204
-
205
- dataset.filter{|o| o.number > 1}
206
- dataset.filter{|o| o.number >= 2}
207
- dataset.filter{|o| o.name < 'M'}
208
- dataset.filter{|o| o.name <= 'I'}
209
- dataset.filter{|o| o.is_bool(:x)}
210
-
211
- The argument provided to the block is a Sequel::SQL::VirtualRow.
212
- This class uses method_missing so that any methods called on it
213
- return Sequel::SQL::Identifiers (if no arguments are provided)
214
- or Sequel::SQL::Function (if arguments are provided).
215
-
216
- If you were using one of the above symbol methods outside of a
217
- filter, you can to call sql_string, sql_number, or sql_function
218
- on the symbol. So the following would also work:
219
-
220
- dataset.filter(:number.sql_number > 1)
221
- dataset.filter(:number.sql_number >= 2)
222
- dataset.filter(:name.sql_string < 'M')
223
- dataset.filter(:name.sql_number <= 'I')
224
- dataset.filter(:is_bool.sql_function(:x))
225
-
226
- Using the block argument makes for a nicer API, though, so I
227
- recommend using it when possible.
228
-
229
- Note that if you are running ruby 1.8 or jruby without the --1.9
230
- flag, you don't need to worry. If you are running ruby 1.9 or
231
- jruby --1.9, or you plan to at some point in the future, you
232
- should inspect your code for existing uses of these methods.
233
- Here are a couple command lines that should find most uses:
234
-
235
- # Find :symbol[]
236
- egrep -nr ':['\''"]?[a-zA-Z_0-9]*['\''"]?\[' *
237
- # Find :symbol (<|>|<=|>=)
238
- egrep -nr '[^:]:['\''"]?[a-zA-Z_0-9]*['\''"]? *[<>]=?' *
239
-
240
- * Database#quote_identifiers now affects future schema modifications
241
- when using the database. Previous, it only affected future
242
- schema modifications if a schema modification method had not yet
243
- been called.
244
-
245
- * Literalization of Times and DateTimes is now correct when using the
246
- MySQL JDBC subadapter.
247
-
248
- * Literalization of Blobs is now correct when using the PostgreSQL
249
- JDBC subadapter.
250
-
251
- * Index and table names are quoted when creating indices in the
252
- PostgreSQL adapter.
253
-
254
- * Dataset#delete was changed in the SQLite adapter to add a
255
- where clause that is always true, instead of doing an explicit
256
- count first and the deleting. This is simpler, though it
257
- could potentially have performance implications.
258
-
259
- * The sequel command line tool now supports symbol keys and unnested
260
- hashes in YAML files, so it should work with Merb's database.yml.
261
- It also includes the error class in the case of an error.
262
-
263
- * The integration type tests were greatly expanded. Generally,
264
- running the integration tests is a good way to determine how well
265
- your database is supported.
266
-
267
- * Dataset#quote_identifier now returns LiteralStrings as-is, instead
268
- of treating them as regular strings.
269
-
270
- * Sequel no longer modifies the MySQL::Result class when using the
271
- MySQL adapter.
272
-
273
- Backwards Compatibilty
274
- ----------------------
275
-
276
- * If you were previously using a database that returned uppercase
277
- identifiers, it will probably return lowercase identifiers by
278
- default now. To get back the old behavior:
279
-
280
- DB.identifier_output_method = nil
281
-
282
- * The module hierarchy under Sequel::SQL has changed. Now,
283
- modules do not include other modules, and the following modules
284
- were removed since they would have been empty after removing
285
- the modules they included: Sequel::SQL::SpecificExpressionMethods
286
- and Sequel::SQL::GenericExpressionMethods.
287
-
288
- * Sequel no longer assumes the public schema by default when
289
- connecting to PostgreSQL. You can still set the default
290
- schema to use (even to public).
291
-
292
- * The ability to load schema information for all tables at once
293
- was removed from the PostgreSQL adapter. While it worked, it had
294
- some issues, and it was difficult to keep it working when some
295
- new features were used. This ability wasn't exposed to the user,
296
- and was purely an optimization. If you have any code like:
297
-
298
- DB.schema
299
-
300
- by itself after the Database object was instantiated, you should
301
- remove it.
302
-
303
- * The Database#primary_key API changed in the PostgreSQL shared
304
- adapter, it now accepts an options hash with :server and :conn keys
305
- instead of a server symbol. Also, quite a few private Database
306
- instance methods changed, as well as some constants in the
307
- AdapterMethods.
308
-
309
- * It is possible that some migrations will break, though it is
310
- unlikely. If you were using any of the classes mentioned above
311
- as a method inside a migration, it might be broken. However,
312
- since String, Float, and Integer wouldn't have worked as methods
313
- before, it is unlikely that anyone used this.
314
-
315
- * The meaning of #String, #Integer, and #Float inside
316
- Sequel::SQL::Generator (i.e. inside a Database#create_table
317
- block) has changed. Before, these used to call private Kernel
318
- methods, now, they set up columns with the appropriate database
319
- type.
320
-
321
- * The Database#lowercase method in the DBI adapter was removed,
322
- as its use case is now met by the identifier_output_method support.
323
-
324
- * Database#uri is now aliased explicitly via a real method, to
325
- allow for easier subclassing.
326
-
327
- * You can no longer pass nil as the second argument to
328
- Database#create_table.
@@ -1,215 +0,0 @@
1
- Optimizations
2
- -------------
3
-
4
- * Model.[] was optimized to use static SQL in cases where doing so
5
- should result in the same output. This should result in a 30-40%
6
- performance increase. Since this can be the most significant or
7
- only method call in a web application action, this has potential
8
- to significantly enhance the performance of web application code.
9
-
10
- In order for this optimization to have an effect, you need to
11
- make sure that you are calling set_dataset with a Symbol and
12
- not a Dataset object:
13
-
14
- # Optimized:
15
- class Foo < Sequel::Model; end
16
- class Foo < Sequel::Model(:foos); end
17
- class Foo < Sequel::Model
18
- set_dataset :foos
19
- end
20
-
21
- # Not Optimized, but otherwise equivalent:
22
- class Foo < Sequel::Model(Model.db[:foos]); end
23
- class Foo < Sequel::Model
24
- set_dataset db[:foos]
25
- end
26
-
27
- * Dataset#literal was refactored for performance reasons to make
28
- overriding it in subclasses unnecessary. The changes made result
29
- in a 20-25% performance increase. Sequel can spend about 10% of
30
- it's time in Dataset#literal, so this may be only a 2% overall
31
- performance improvement.
32
-
33
- New Features
34
- ------------
35
-
36
- * Association datasets now know about the model objects that created
37
- them, as well as the related association reflection. This makes
38
- association extensions much more powerful. For example, you can
39
- now create generic association extensions such as:
40
-
41
- module FindOrCreate
42
- def find_or_create(vals)
43
- first(vals) || association_reflection.associated_class. \
44
- create(vals.merge(association_reflection[:key]=> \
45
- model_object.id))
46
- end
47
- end
48
-
49
- The above will work for any standard one_to_many association:
50
-
51
- Artist.one_to_many :albums, :extend=>FindOrCreate
52
- # Create an album named Foo related to this artist,
53
- # unless such an album already exists
54
- Artist.first.albums_dataset.find_or_create(:name=>'Foo')
55
-
56
- Before, the only way to do the above was to use a closure inside
57
- the :dataset option proc, which couldn't be done generically
58
- for multiple associations.
59
-
60
- * A :conditions association option was added, which allows simple
61
- filters to be set up without defining :graph_conditions and
62
- an association block:
63
-
64
- # 2.10.0
65
- one_to_many(:japanese_verses, :class=>:Verse, \
66
- :graph_conditions=>{:languageid=>3})do |ds|
67
- ds.filter(:languageid=>3)
68
- end
69
- # 2.11.0
70
- one_to_many(:japanese_verses, :class=>:Verse, \
71
- :conditions=>{:languageid=>3})
72
-
73
- * A :clone association option was added, which allows you to clone
74
- an existing association. This is most useful when you are dealing
75
- with a legacy schema and had to define the same options redundantly
76
- for each type of association. You can now do:
77
-
78
- many_to_many :deputies, :class=>:Employee, \
79
- :join_table=>:employeecurrentaudits, :left_key=>:currentauditid, \
80
- :right_key=>:employeeid, :order=>[:firstname, :lastname] do |ds|
81
- ds.filter(:active).filter(:capacity=>1)
82
- end
83
- many_to_many :project_managers, :clone=>:deputies do |ds|
84
- ds.filter(:active).filter(:capacity=>2)
85
- end
86
- many_to_many :team_leaders, :clone=>:deputies do |ds|
87
- ds.filter(:active).filter(:capacity=>3)
88
- end
89
-
90
- All of the above would use the same :class, :join_table, :left_key,
91
- :right_key, and :order options. If you don't provide an
92
- association block, but you are cloning an association that has one,
93
- the cloned association's block is used. You can use the
94
- :block=>nil option to not use a block even if the cloned
95
- association has a block.
96
-
97
- * Dataset#select, #select_more, #order, #order_more, and #get all
98
- take a block that yields a Sequel::SQL::VirtualRow instance,
99
- similar to the behavior of filter. This allows for the easier
100
- use of SQL functions on Ruby 1.9:
101
-
102
- # 2.10.0
103
- dataset.select(:prettify.sql_function(:name))
104
- # 2.11.0
105
- dataset.select{|o| o.prettify(:name)}
106
-
107
- * String#lit can now accept arguments and return an SQL literal
108
- string. This allows you to do things that were previously hard
109
- or at least unnecessarily verbose. For example, you can now
110
- easily use the SQL standard SUBSTRING function:
111
-
112
- column = :user
113
- pattern = params[:pattern]
114
- dataset.select{|o| o.substring('? from ?'.lit(column, pattern))}
115
-
116
- * A validates_inclusion_of validation method was added to Model. You
117
- can provide a Range or an Array in the :in option to specify the
118
- allowed values:
119
-
120
- validates_inclusion_of :value, :in=>1..5
121
- validates_inclusion_of :weekday, :in=>%w'Monday Tuesday ...'
122
-
123
- * Dataset#with_sql was added, which returns a copy of the dataset
124
- with static SQL. This is useful if you want to keep the same
125
- row_proc/graph/transform/etc., but want to use your own custom
126
- SQL.
127
-
128
- Other Improvements
129
- ------------------
130
-
131
- * You can now use Sequel's database independent types when casting:
132
-
133
- dataset.select(:number.cast(String))
134
-
135
- Among other things, the default cast types for cast_string and
136
- cast_numeric now work in the MySQL adapter.
137
-
138
- * Model#set_associated_object was added. The many_to_one association
139
- setter method calls it. This allows you to easily override the
140
- association setters for all many_to_one associations of a class
141
- by modifying a single method.
142
-
143
- * Typecasting invalid date strings now raises a
144
- Sequel::Error::InvalidValue instead of an argument error, which
145
- means that you can use raise_on_typecast_failure = false and not
146
- have an error raised when an invalid date format is used.
147
-
148
- * String#to_sequel_blob was added and should now be used instead
149
- of String#to_blob. sqlite3-ruby defines String#to_blob
150
- differently, which could cause problems.
151
-
152
- * Blob columns are now fully supported in the SQLite adapter, with
153
- the hex escape syntax being used for input, and returning columns
154
- of type Sequel::SQL::Blob on output.
155
-
156
- * The SQLite adapter drop_column support is now significantly more
157
- robust.
158
-
159
- * The SQLite adapter now supports rename_column.
160
-
161
- * The MySQL adapter now supports stored procedures with multiple
162
- arguments.
163
-
164
- * The MySQL adapter can now not use a compressed connection to the
165
- server via the :compress=>false option.
166
-
167
- * The MySQL adapter now sets a default timeout of 30 days to the
168
- database connection, you can change it via the :timeout option,
169
- which accepts a number of seconds.
170
-
171
- * The MySQL adapter now sets SQL_AUTO_IS_NULL to false by default,
172
- you can use the :auto_is_null=>true option to not do this.
173
-
174
- * The MySQL adapter now sets the encoding option on the database
175
- connection itself, so it works across reconnects.
176
-
177
- * Sequel itself no longer uses String#lit or Symbol#* internally, so
178
- it shouldn't break if another library defines them.
179
-
180
- * The default index name is now generated correctly if a non-String
181
- or Symbol column is used.
182
-
183
- * Some ruby -w warnings have been fixed.
184
-
185
- * INSERTs are now sent to the master database instead of the slave
186
- database(s) if using a master/slave database configuration and
187
- PostgreSQL 8.2+ or Firebird.
188
-
189
- * DateTime literalization has been fixed in the Firebird adapter.
190
-
191
- * Date literalization has been fixed in the H2 JDBC subadapter.
192
-
193
- * Release notes for versions from 1.0 to the present are now included
194
- in the Sequel repository and the RDoc documentation, see
195
- http://sequel.rubyforge.org/rdoc/files/doc/release_notes/
196
-
197
- Backwards Compatibilty
198
- ----------------------
199
-
200
- * The optimization of Model.[] may break if you modify the model's
201
- dataset behind its back. Always use Model.set_dataset if you
202
- want to change a Model's dataset.
203
-
204
- * Sequel::Dataset::UnsupportedExceptIntersect and
205
- Sequel::Dataset::UnsupportedExceptIntersectAll will now only be
206
- defined if you are using an adapter that requires them.
207
-
208
- * The private Model#cache_delete_unless_new method has been removed.
209
-
210
- * Sequel::SQL::IrregularFunction was removed, as it was a bad hack
211
- that is not used by Sequel anymore. Unless you were instantiating
212
- it directly or using a plugin/extension that did, this shouldn't
213
- affect you. Using a Sequel::SQL::Function with a
214
- Sequel::SQL::PlaceholderLiteralString is recommended instead, see
215
- the substring example above.