sequel 2.10.0 → 2.11.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +51 -1
- data/README.rdoc +2 -2
- data/Rakefile +2 -2
- data/doc/advanced_associations.rdoc +6 -18
- data/doc/release_notes/1.0.txt +38 -0
- data/doc/release_notes/1.1.txt +143 -0
- data/doc/release_notes/1.3.txt +101 -0
- data/doc/release_notes/1.4.0.txt +53 -0
- data/doc/release_notes/1.5.0.txt +155 -0
- data/doc/release_notes/2.0.0.txt +298 -0
- data/doc/release_notes/2.1.0.txt +271 -0
- data/doc/release_notes/2.10.0.txt +328 -0
- data/doc/release_notes/2.11.0.txt +215 -0
- data/doc/release_notes/2.2.0.txt +253 -0
- data/doc/release_notes/2.3.0.txt +88 -0
- data/doc/release_notes/2.4.0.txt +106 -0
- data/doc/release_notes/2.5.0.txt +137 -0
- data/doc/release_notes/2.6.0.txt +157 -0
- data/doc/release_notes/2.7.0.txt +166 -0
- data/doc/release_notes/2.8.0.txt +171 -0
- data/doc/release_notes/2.9.0.txt +97 -0
- data/lib/sequel_core/adapters/ado.rb +3 -0
- data/lib/sequel_core/adapters/db2.rb +0 -11
- data/lib/sequel_core/adapters/dbi.rb +0 -11
- data/lib/sequel_core/adapters/do.rb +0 -12
- data/lib/sequel_core/adapters/firebird.rb +21 -16
- data/lib/sequel_core/adapters/informix.rb +1 -11
- data/lib/sequel_core/adapters/jdbc.rb +1 -13
- data/lib/sequel_core/adapters/jdbc/h2.rb +3 -11
- data/lib/sequel_core/adapters/jdbc/mysql.rb +0 -17
- data/lib/sequel_core/adapters/jdbc/postgresql.rb +3 -15
- data/lib/sequel_core/adapters/mysql.rb +31 -27
- data/lib/sequel_core/adapters/odbc.rb +34 -28
- data/lib/sequel_core/adapters/openbase.rb +0 -11
- data/lib/sequel_core/adapters/oracle.rb +11 -9
- data/lib/sequel_core/adapters/postgres.rb +14 -17
- data/lib/sequel_core/adapters/shared/mssql.rb +6 -15
- data/lib/sequel_core/adapters/shared/mysql.rb +29 -14
- data/lib/sequel_core/adapters/shared/oracle.rb +4 -0
- data/lib/sequel_core/adapters/shared/postgres.rb +30 -35
- data/lib/sequel_core/adapters/shared/progress.rb +4 -0
- data/lib/sequel_core/adapters/shared/sqlite.rb +73 -13
- data/lib/sequel_core/adapters/sqlite.rb +8 -18
- data/lib/sequel_core/adapters/utils/date_format.rb +21 -0
- data/lib/sequel_core/{dataset → adapters/utils}/stored_procedures.rb +0 -0
- data/lib/sequel_core/{dataset → adapters/utils}/unsupported.rb +0 -0
- data/lib/sequel_core/core_ext.rb +1 -1
- data/lib/sequel_core/core_sql.rb +9 -4
- data/lib/sequel_core/database.rb +63 -62
- data/lib/sequel_core/dataset.rb +9 -4
- data/lib/sequel_core/dataset/convenience.rb +10 -9
- data/lib/sequel_core/dataset/prepared_statements.rb +1 -1
- data/lib/sequel_core/dataset/sql.rb +130 -36
- data/lib/sequel_core/schema/sql.rb +2 -2
- data/lib/sequel_core/sql.rb +44 -51
- data/lib/sequel_core/version.rb +1 -1
- data/lib/sequel_model/associations.rb +25 -17
- data/lib/sequel_model/base.rb +35 -7
- data/lib/sequel_model/caching.rb +1 -6
- data/lib/sequel_model/record.rb +23 -5
- data/lib/sequel_model/validations.rb +20 -5
- data/spec/adapters/firebird_spec.rb +6 -1
- data/spec/adapters/mysql_spec.rb +12 -0
- data/spec/adapters/postgres_spec.rb +2 -2
- data/spec/adapters/sqlite_spec.rb +81 -2
- data/spec/integration/dataset_test.rb +2 -2
- data/spec/integration/type_test.rb +12 -2
- data/spec/sequel_core/core_sql_spec.rb +46 -12
- data/spec/sequel_core/database_spec.rb +24 -12
- data/spec/sequel_core/dataset_spec.rb +82 -32
- data/spec/sequel_core/schema_spec.rb +16 -0
- data/spec/sequel_model/associations_spec.rb +89 -0
- data/spec/sequel_model/base_spec.rb +66 -0
- data/spec/sequel_model/eager_loading_spec.rb +32 -0
- data/spec/sequel_model/record_spec.rb +9 -9
- data/spec/sequel_model/spec_helper.rb +3 -0
- data/spec/sequel_model/validations_spec.rb +63 -3
- metadata +41 -4
@@ -0,0 +1,166 @@
|
|
1
|
+
Performance Optimizations
|
2
|
+
-------------------------
|
3
|
+
|
4
|
+
* Fetching a large number of records with the PostgreSQL adapter is
|
5
|
+
significantly faster (up to 3-4 times faster than before).
|
6
|
+
|
7
|
+
* Instantiating model objects has been made much faster, as many
|
8
|
+
options (such as raise_on_save_failure) are now lazily loaded, and
|
9
|
+
hook methods are now much faster if no hooks have been defined for
|
10
|
+
that type of hook.
|
11
|
+
|
12
|
+
New Association Options
|
13
|
+
-----------------------
|
14
|
+
|
15
|
+
* The :eager_grapher option has been added allowing you to supply
|
16
|
+
your own block to implement eager loading via eager_graph.
|
17
|
+
|
18
|
+
* many_to_one and one_to_many associations now have a :primary_key
|
19
|
+
option, specifying the name of the column that the :key option
|
20
|
+
references.
|
21
|
+
|
22
|
+
* many_to_many associations now have :left_primary_key and
|
23
|
+
:right_primary_key options, specifying the columns that :left_key
|
24
|
+
and :right_key reference, respectively.
|
25
|
+
|
26
|
+
* many_to_many associations now have a :uniq option, that adds an
|
27
|
+
:after_load callback that makes the returned array of objects
|
28
|
+
unique.
|
29
|
+
|
30
|
+
Other New Features
|
31
|
+
------------------
|
32
|
+
|
33
|
+
* Dataset#set_graph_aliases now allows you to supply a third argument
|
34
|
+
for each column you want graph into the dataset, allowing you to use
|
35
|
+
arbitrary SQL expressions that are graphed into the correct table:
|
36
|
+
|
37
|
+
ds.set_graph_aliases!(:a=>[:b, :c], :d=>[:e, :f, 42])
|
38
|
+
# SELECT b.c AS a, 42 AS d FROM ...
|
39
|
+
ds.first # => {:b=>{:c=>?}, :e=>{:f=>42}}
|
40
|
+
|
41
|
+
* Dataset#add_graph_aliases was added, that adds additional graph
|
42
|
+
aliases instead of replacing the existing ones (as
|
43
|
+
#set_graph_aliases does). It's basically the equivalent of
|
44
|
+
select_more for graphs.
|
45
|
+
|
46
|
+
* Dataset#join_table changed it's final argument from a symbol
|
47
|
+
specifying a table name to an option hash (with backwards
|
48
|
+
compatibility kept), and adds support for a :implicit_qualifier
|
49
|
+
option, which it uses instead of the last joined table to
|
50
|
+
qualify columns.
|
51
|
+
|
52
|
+
* Association's :after_load callbacks are now called when eager
|
53
|
+
loading via eager (but not when eager loading via eager_graph).
|
54
|
+
|
55
|
+
* Any expression can now be used as the argument to Symbol#like,
|
56
|
+
which means that you can pattern match columns to other columns.
|
57
|
+
Before, it always transformed the argument to a string.
|
58
|
+
|
59
|
+
:a.like(:b)
|
60
|
+
# 2.6.0: a LIKE 'b'
|
61
|
+
# 2.7.0: a LIKE b
|
62
|
+
|
63
|
+
* Array#sql_array was added, allowing you to specify that an array
|
64
|
+
in ruby be treated like an array in SQL. This is true anyway,
|
65
|
+
except for arrays of all two pairs, which are treated like hashes,
|
66
|
+
for specifying multiple conditions with the same key:
|
67
|
+
|
68
|
+
DB[:foo].filter([:a,:b] => [[1,2],[3,4]].sql_array)
|
69
|
+
# => SELECT * FROM foo WHERE ((a, b) IN ((1, 2), (3, 4)))
|
70
|
+
|
71
|
+
* ComplexExpression#== and #sql? were added, allowing for easier
|
72
|
+
testing.
|
73
|
+
|
74
|
+
* Full text searching on PostgreSQL now joins multiple columns with
|
75
|
+
a space, to prevent joining border words, and it works when there
|
76
|
+
is a match in one column but the other column is NULL.
|
77
|
+
|
78
|
+
Other Improvements
|
79
|
+
------------------
|
80
|
+
|
81
|
+
* Instance methods added by creating associations are added to an
|
82
|
+
anonymous module included by the class, so they can be overridden
|
83
|
+
in the class while still allowing the use of super to get the
|
84
|
+
default behavior (this is similar to column accessor methods).
|
85
|
+
|
86
|
+
* Many improvements were added to support using multiple schemas in
|
87
|
+
PostgreSQL.
|
88
|
+
|
89
|
+
* Model::Validation::Errors objects are now more compatible with
|
90
|
+
Rails, by adding a #count method and making #on return nil if there
|
91
|
+
are no error messages for that attribute.
|
92
|
+
|
93
|
+
* Serialized columns in models are no longer typecast.
|
94
|
+
|
95
|
+
* Associations are now inherited when a model class is subclassed.
|
96
|
+
|
97
|
+
* Many improvements were made that should make adding custom
|
98
|
+
association types easier.
|
99
|
+
|
100
|
+
* A corner case in eager_graph where the wrong table name would be
|
101
|
+
used to qualify a column name has been fixed.
|
102
|
+
|
103
|
+
* Dataset's cached column information is no longer modified if #each
|
104
|
+
is called with an option that modifies the columns.
|
105
|
+
|
106
|
+
* You should now be able to connect to Oracle via the JDBC adapter,
|
107
|
+
and with the same support it has when using the oracle adapter.
|
108
|
+
|
109
|
+
* Model.association_reflections is now a public methods, so you can
|
110
|
+
grab a hash of all association reflections at once (keyed by
|
111
|
+
association name symbol).
|
112
|
+
|
113
|
+
* The :encoding/:charset option now works in the PostgreSQL adapter
|
114
|
+
if the postgres-pr driver is used.
|
115
|
+
|
116
|
+
* The numeric(x,y) type is now interpreted as decimal.
|
117
|
+
|
118
|
+
Backwards Compatibilty
|
119
|
+
----------------------
|
120
|
+
|
121
|
+
* The first argument to Model#initialize must be a hash, you can no
|
122
|
+
longer use nil. For example, the following code will break if
|
123
|
+
:album is not in params:
|
124
|
+
|
125
|
+
Album.new(params[:album])
|
126
|
+
|
127
|
+
Additionally, Model#initialize does not call the block if the
|
128
|
+
second argument is true.
|
129
|
+
|
130
|
+
* The Sequel::Model.lazy_load_schema setting was removed. It should
|
131
|
+
no longer be necessary now that schema loading is relatively speedy,
|
132
|
+
and schemas can be loaded at startup and cached.
|
133
|
+
|
134
|
+
* The PostgreSQL adapter will default to using a unix socket in /tmp
|
135
|
+
if no host is specified. Before, a TCP/IP socket to localhost was
|
136
|
+
used if no host was specified. This change makes Sequel operate
|
137
|
+
similarly to the PostgreSQL command line tools.
|
138
|
+
|
139
|
+
* The ASSOCIATION_TYPES constant has changed from an array to a hash
|
140
|
+
and it has been moved. The RECIPROCAL_ASSOCIATIONS constant has
|
141
|
+
been removed. This is unlikely to matter unless you were using
|
142
|
+
custom association types.
|
143
|
+
|
144
|
+
* The PostgreSQL adapter now sets the PostgreSQL DateStyle, in order
|
145
|
+
to implement an optimization. To turn this off, set
|
146
|
+
Sequel::Postgres.use_iso_date_format = false.
|
147
|
+
|
148
|
+
* When using the PostgreSQL adapter, in many places the schema is
|
149
|
+
specified explicitly. If you do not specify a schema, a default
|
150
|
+
one is used (public by default). If you use a schema other than
|
151
|
+
public for your work, use Database#default_schema= to set it. For
|
152
|
+
any table outside of the default schema, you should specify the
|
153
|
+
schema explicitly, even if it is in the PostgreSQL search_path.
|
154
|
+
|
155
|
+
* Model::Validation::Errors#on now returns nil instead of [] if there
|
156
|
+
are no errors for an attribute.
|
157
|
+
|
158
|
+
* Hooks added to a superclass after a subclass has been created no
|
159
|
+
longer have an effect on the subclass.
|
160
|
+
|
161
|
+
* The Postgres.string_to_bool method has been removed.
|
162
|
+
|
163
|
+
* PostgreSQL full text searching now always defaults to using the
|
164
|
+
simple dictionary. If you want to use another dictionary, it must
|
165
|
+
be specified explicitly, both when searching and when creating a
|
166
|
+
full text index.
|
@@ -0,0 +1,171 @@
|
|
1
|
+
New Features
|
2
|
+
------------
|
3
|
+
|
4
|
+
* Sequel now supports database stored procedures similar to its
|
5
|
+
support for prepared statements. The API is as follows:
|
6
|
+
|
7
|
+
DB[:table].call_sproc(:select, :mysp, 'param1', 'param2')
|
8
|
+
# or
|
9
|
+
sp = DB[:table].prepare_sproc(:select, :mysp)
|
10
|
+
sp.call('param1', 'param2')
|
11
|
+
sp.call('param3', 'param4')
|
12
|
+
|
13
|
+
This works with Model datasets as well, allowing them to return
|
14
|
+
model objects:
|
15
|
+
|
16
|
+
Album.call_sproc(:select, :new_albums)
|
17
|
+
#=> [#<Album ...>, #<Album ...>]
|
18
|
+
|
19
|
+
You can call a stored procedure directly on the Database object
|
20
|
+
if you want to, but the results and API are adapter dependent,
|
21
|
+
and you definitely shouldn't do it if the stored procedure returns
|
22
|
+
rows:
|
23
|
+
|
24
|
+
DB.call_sproc(:mysp, :args=>['param1', 'param2'])
|
25
|
+
|
26
|
+
Currently, the MySQL and JDBC adapters support stored procedures.
|
27
|
+
Other adapters may support them in a future version.
|
28
|
+
|
29
|
+
* The connection pool code can now remove connections if the
|
30
|
+
adapter raises a Sequel::DatabaseDisconnectError indicating that
|
31
|
+
the connection has been lost. When a query is attempted and
|
32
|
+
the adapter raises this error, the connection pool removes the
|
33
|
+
connection from the pool, and reraises the error. The Oracle and
|
34
|
+
PostgreSQL adapters currently support this, and other adapters may
|
35
|
+
support it in a future version.
|
36
|
+
|
37
|
+
* Whether to upcase or quote identifiers can now be set separately.
|
38
|
+
Previously, upcasing was done when quoting except when using SQLite,
|
39
|
+
PostgreSQL, or MySQL. Now, you can turn upcasing off while still
|
40
|
+
quoting. This may be necessary if you are using a MSSQL database
|
41
|
+
that has lower case table names that conflict with reserved words.
|
42
|
+
It also allows you to uppercase identifiers when using SQLite,
|
43
|
+
PostgreSQL, or MySQL, which may be beneficial in certain cases.
|
44
|
+
|
45
|
+
To turn upcasing on or off:
|
46
|
+
|
47
|
+
# Global
|
48
|
+
Sequel.upcase_identifiers = true
|
49
|
+
# Database
|
50
|
+
DB = Sequel.connect("postgres://...", :upcase_identifiers=>true)
|
51
|
+
DB.upcase_identifiers = false
|
52
|
+
# Dataset
|
53
|
+
ds = DB[:items]
|
54
|
+
ds.upcase_identifiers = true
|
55
|
+
|
56
|
+
* Options are now supported when altering a columns type:
|
57
|
+
|
58
|
+
DB.alter_table(:items) do
|
59
|
+
set_column_type :score, :integer, :unsigned=>true
|
60
|
+
set_column_type :score, :varchar, :size=>30
|
61
|
+
set_column_type :score, :enum, :elements=>['a', 'b']
|
62
|
+
end
|
63
|
+
|
64
|
+
* Standard conforming strings are now turned on by default in the
|
65
|
+
PostgreSQL adapter. This makes PostgreSQL not interpret backslash
|
66
|
+
escapes. This is the PostgreSQL recommended setting, which will be
|
67
|
+
the default setting in a future version of PostgreSQL. If you
|
68
|
+
don't want for force the use of standard strings, use:
|
69
|
+
|
70
|
+
Sequel::Postgres.force_standard_strings = false
|
71
|
+
|
72
|
+
You need to do that after you call Sequel.connect but before you
|
73
|
+
use the database for anything, since that setting is set on
|
74
|
+
initial connection.
|
75
|
+
|
76
|
+
* Sequel now raises an error if you attempt to use EXCEPT [ALL] or
|
77
|
+
INTERSECT [ALL] on a database that doesn't support it.
|
78
|
+
|
79
|
+
* Sequel now raises an error if you attempt to use DISTINCT ON with
|
80
|
+
MySQL or Oracle, which don't support it.
|
81
|
+
|
82
|
+
* A subadapter for the Progress RDBMS was added to the ODBC adapter.
|
83
|
+
To connect to a Progress database, use the :db_type=>'progress'
|
84
|
+
option. This adapter targets Progress 9.
|
85
|
+
|
86
|
+
* The ODBC adapter now supports transactions.
|
87
|
+
|
88
|
+
* The MSSQL shared adapter now supports multi_insert (for inserting
|
89
|
+
multiple rows at once), and unicode string literals.
|
90
|
+
|
91
|
+
Other Improvements
|
92
|
+
------------------
|
93
|
+
|
94
|
+
* There were many improvements related to using schemas in databases.
|
95
|
+
Using schema-qualified tables should work in most if not all cases
|
96
|
+
now. Model associations, getting the schema, joins, and many other
|
97
|
+
parts of Sequel were modified to allow the use of schema-qualifed
|
98
|
+
tables.
|
99
|
+
|
100
|
+
* You can now use literal strings with placeholders as well as
|
101
|
+
subselects when using prepared statements. For example, the
|
102
|
+
following all work now:
|
103
|
+
|
104
|
+
DB[:items].filter("id = ?", :$i).call(:select, :i=>1)
|
105
|
+
DB[:items].filter(:id=>DB[:items].select(:id)\
|
106
|
+
.filter(:id=>:$i)).call(:select, :i=>1)
|
107
|
+
DB["SELECT * FROM items WHERE id = ?", :$i].call(:select, :i=>1)
|
108
|
+
|
109
|
+
* Model#initialize received a few more micro-optimizations.
|
110
|
+
|
111
|
+
* Model#refresh now clears the changed columns as well as the
|
112
|
+
associations.
|
113
|
+
|
114
|
+
* You can now drop columns inside a transaction when using SQLite.
|
115
|
+
|
116
|
+
* You can now submit multiple SQL queries at once in the MySQL
|
117
|
+
adapter:
|
118
|
+
|
119
|
+
DB['SELECT 1; SELECT 2'].all
|
120
|
+
#=> [{:"1"=>1, :"2"=>2}]
|
121
|
+
|
122
|
+
This may fix issues if you've seen a MySQL "commands out of sync"
|
123
|
+
message. Note that this doesn't work if you are connecting to
|
124
|
+
MySQL via JDBC.
|
125
|
+
|
126
|
+
* You can now use AliasedExpressions directly in table names given
|
127
|
+
to join_table:
|
128
|
+
|
129
|
+
DB.from(:i.as(:j)).join(:k.as(:l), :a=>:b)
|
130
|
+
#=> ... FROM i AS j INNER JOIN k AS l ON (l.a = j.b)
|
131
|
+
|
132
|
+
* Database#rename_table once again works on PostgreSQL. It was
|
133
|
+
broken in 2.7.0.
|
134
|
+
|
135
|
+
* The interval type is now treated as it's own type. It was
|
136
|
+
previously treated as an integer type.
|
137
|
+
|
138
|
+
* Subselects are now aliased correctly when using Oracle.
|
139
|
+
|
140
|
+
* UNION, INTERSECT, and EXCEPT statements now appear before ORDER
|
141
|
+
and LIMIT on most databases. If you use these constructs, please
|
142
|
+
test and make sure that they work correctly with your database.
|
143
|
+
|
144
|
+
* SQL EXCEPT clause now works on Oracle, which uses MINUS instead.
|
145
|
+
|
146
|
+
* Dataset#exists now returns a LiteralString, to make it easier to
|
147
|
+
use.
|
148
|
+
|
149
|
+
* The Sequel.odbc_mssql method was removed, as the odbc_mssql adapter
|
150
|
+
was removed in a previous version. Instead, use:
|
151
|
+
|
152
|
+
Sequel.odbc(..., :db_type=>'mssql')
|
153
|
+
|
154
|
+
Backwards Compatibilty
|
155
|
+
----------------------
|
156
|
+
|
157
|
+
* The hash returned by Database#schema when no table name is provided
|
158
|
+
uses quoted strings instead of symbols as keys. The hash has a
|
159
|
+
default proc, so using the symbol will return the same value as
|
160
|
+
before, but if you use each to iterate through the hash, the keys
|
161
|
+
will be different. This was necessary to handle schema-qualified
|
162
|
+
tables.
|
163
|
+
|
164
|
+
* Database#table_exists? no longer checks the output of
|
165
|
+
Database#tables. If the table exists in the schema, it returns
|
166
|
+
true, otherwise, it does a query. This was necessary because
|
167
|
+
table_exists? accepts multiple formats for table names and
|
168
|
+
Database#tables is an array of symbols.
|
169
|
+
|
170
|
+
* When getting the schema on PostgreSQL, the default schema is now
|
171
|
+
used even if the :schema=>nil option is used.
|
@@ -0,0 +1,97 @@
|
|
1
|
+
New Features
|
2
|
+
------------
|
3
|
+
|
4
|
+
* Compound SQL statement (i.e. UNION, EXCEPT, and INTERSECT) support
|
5
|
+
is much improved. Chaining compound statement calls now longer
|
6
|
+
wipes out previous compound statements calls of the same type.
|
7
|
+
Also, the ordering of the compound statements is no longer fixed
|
8
|
+
per adapter, it now reflects the order they were called on the
|
9
|
+
object. For example, the following now work as expected:
|
10
|
+
|
11
|
+
ds1.union(ds2).union(ds3)
|
12
|
+
ds1.except(ds2).except(ds3)
|
13
|
+
ds1.intersect(ds2).intersect(ds3)
|
14
|
+
ds1.union(ds2).except(ds3)
|
15
|
+
ds1.except(ds2).intersect(ds3)
|
16
|
+
ds1.intersect(ds2).union(ds3)
|
17
|
+
|
18
|
+
* Exception classes ValidationFailure and BeforeHookFailure were
|
19
|
+
added so it is eaiser to catch a failed validation. These are
|
20
|
+
both subclasses of Sequel::Error, so there shouldn't be any
|
21
|
+
backwards compatibility issues. Error messages are also improved,
|
22
|
+
as the ValidationFailure message is a string containing all
|
23
|
+
validation failures and the BeforeHookFailure message contains
|
24
|
+
which hook type caused the failure (i.e. before_save,
|
25
|
+
before_create, or before_validate).
|
26
|
+
|
27
|
+
* The sequel command line tool now has a -L option to load
|
28
|
+
all files in the given directory. This is mainly useful for
|
29
|
+
loading a directory of model files. The files are loaded
|
30
|
+
after the database connection is set up.
|
31
|
+
|
32
|
+
* Methods to create and drop database functions, triggers, and
|
33
|
+
procedural languages were added to the PostgreSQL adapter.
|
34
|
+
|
35
|
+
Other Improvements
|
36
|
+
------------------
|
37
|
+
|
38
|
+
* Database#schema now raises an error if you pass a table that
|
39
|
+
doesn't exist. Before, some adapters would return an empty schema.
|
40
|
+
The bigger problem with this is that it made table_exists? return
|
41
|
+
the wrong value, since it looks at the Database's schema.
|
42
|
+
Generally, this bug would show up in the following code:
|
43
|
+
|
44
|
+
class Blah < Sequel::Model
|
45
|
+
end
|
46
|
+
Blah.table_exists? # True even if blahs is not a table
|
47
|
+
|
48
|
+
* AlterTableGenerator#add_foreign_key now works for MySQL.
|
49
|
+
|
50
|
+
* Error messages in model association methods that add/remove an
|
51
|
+
associated object are now more descriptive.
|
52
|
+
|
53
|
+
* Dataset#destroy for model datasets now works with databases that
|
54
|
+
can't handle nested queries. However, it now loads all model
|
55
|
+
objects being destroyed before attempting to destroy any of them.
|
56
|
+
|
57
|
+
* Dataset#count now works correctly for compound SQL statements
|
58
|
+
(i.e. UNION, EXCEPT, and INTERSECT).
|
59
|
+
|
60
|
+
* BigDecimal NaN and (+/-)Infinity values are now literalized
|
61
|
+
correctly. Database support for this is hit or miss. Sqlite will
|
62
|
+
work correctly, PostgreSQL raises an error if you try to store an
|
63
|
+
infinite value in a numeric column (though it works for float
|
64
|
+
columns), and MySQL converts all three to 0.
|
65
|
+
|
66
|
+
* The SQLite adapter no longer loses primary key information when
|
67
|
+
dropping columns.
|
68
|
+
|
69
|
+
* The SQLite adapter now supports dropping indicies.
|
70
|
+
|
71
|
+
* A bug in the MSSQL adapter's literalization of LiteralStrings has
|
72
|
+
been fixed.
|
73
|
+
|
74
|
+
* The literalization of blobs on PostgreSQL (bytea columns) has been
|
75
|
+
fixed.
|
76
|
+
|
77
|
+
* Sequel now raises an error if you attempt to subclass Sequel::Model
|
78
|
+
before setting up a database connection.
|
79
|
+
|
80
|
+
* The native postgresql adapter has been changed to only log client
|
81
|
+
messages of level WARNING by default. You can modify this via:
|
82
|
+
|
83
|
+
Sequel::Postgres.client_min_messages = nil # Use Server Default
|
84
|
+
Sequel::Postgres.client_min_messages = :notice # Use NOTICE level
|
85
|
+
|
86
|
+
* Model#inspect now calls Model#inspect_values for easier
|
87
|
+
overloading.
|
88
|
+
|
89
|
+
Backwards Compatibilty
|
90
|
+
----------------------
|
91
|
+
|
92
|
+
* The API to Model#save_failure (a private method) was changed to
|
93
|
+
remove the second argument.
|
94
|
+
|
95
|
+
* SQLite columns with type numeric, decimal, or money are now
|
96
|
+
returned as BigDecimal values. Before, they were probably returned
|
97
|
+
as strings.
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'sequel_core/adapters/utils/date_format'
|
1
2
|
require 'win32ole'
|
2
3
|
|
3
4
|
module Sequel
|
@@ -54,6 +55,8 @@ module Sequel
|
|
54
55
|
end
|
55
56
|
|
56
57
|
class Dataset < Sequel::Dataset
|
58
|
+
include Dataset::SQLStandardDateFormat
|
59
|
+
|
57
60
|
def fetch_rows(sql)
|
58
61
|
execute(sql) do |s|
|
59
62
|
@columns = s.Fields.extend(Enumerable).map do |column|
|