sequel 2.10.0 → 2.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. data/CHANGELOG +51 -1
  2. data/README.rdoc +2 -2
  3. data/Rakefile +2 -2
  4. data/doc/advanced_associations.rdoc +6 -18
  5. data/doc/release_notes/1.0.txt +38 -0
  6. data/doc/release_notes/1.1.txt +143 -0
  7. data/doc/release_notes/1.3.txt +101 -0
  8. data/doc/release_notes/1.4.0.txt +53 -0
  9. data/doc/release_notes/1.5.0.txt +155 -0
  10. data/doc/release_notes/2.0.0.txt +298 -0
  11. data/doc/release_notes/2.1.0.txt +271 -0
  12. data/doc/release_notes/2.10.0.txt +328 -0
  13. data/doc/release_notes/2.11.0.txt +215 -0
  14. data/doc/release_notes/2.2.0.txt +253 -0
  15. data/doc/release_notes/2.3.0.txt +88 -0
  16. data/doc/release_notes/2.4.0.txt +106 -0
  17. data/doc/release_notes/2.5.0.txt +137 -0
  18. data/doc/release_notes/2.6.0.txt +157 -0
  19. data/doc/release_notes/2.7.0.txt +166 -0
  20. data/doc/release_notes/2.8.0.txt +171 -0
  21. data/doc/release_notes/2.9.0.txt +97 -0
  22. data/lib/sequel_core/adapters/ado.rb +3 -0
  23. data/lib/sequel_core/adapters/db2.rb +0 -11
  24. data/lib/sequel_core/adapters/dbi.rb +0 -11
  25. data/lib/sequel_core/adapters/do.rb +0 -12
  26. data/lib/sequel_core/adapters/firebird.rb +21 -16
  27. data/lib/sequel_core/adapters/informix.rb +1 -11
  28. data/lib/sequel_core/adapters/jdbc.rb +1 -13
  29. data/lib/sequel_core/adapters/jdbc/h2.rb +3 -11
  30. data/lib/sequel_core/adapters/jdbc/mysql.rb +0 -17
  31. data/lib/sequel_core/adapters/jdbc/postgresql.rb +3 -15
  32. data/lib/sequel_core/adapters/mysql.rb +31 -27
  33. data/lib/sequel_core/adapters/odbc.rb +34 -28
  34. data/lib/sequel_core/adapters/openbase.rb +0 -11
  35. data/lib/sequel_core/adapters/oracle.rb +11 -9
  36. data/lib/sequel_core/adapters/postgres.rb +14 -17
  37. data/lib/sequel_core/adapters/shared/mssql.rb +6 -15
  38. data/lib/sequel_core/adapters/shared/mysql.rb +29 -14
  39. data/lib/sequel_core/adapters/shared/oracle.rb +4 -0
  40. data/lib/sequel_core/adapters/shared/postgres.rb +30 -35
  41. data/lib/sequel_core/adapters/shared/progress.rb +4 -0
  42. data/lib/sequel_core/adapters/shared/sqlite.rb +73 -13
  43. data/lib/sequel_core/adapters/sqlite.rb +8 -18
  44. data/lib/sequel_core/adapters/utils/date_format.rb +21 -0
  45. data/lib/sequel_core/{dataset → adapters/utils}/stored_procedures.rb +0 -0
  46. data/lib/sequel_core/{dataset → adapters/utils}/unsupported.rb +0 -0
  47. data/lib/sequel_core/core_ext.rb +1 -1
  48. data/lib/sequel_core/core_sql.rb +9 -4
  49. data/lib/sequel_core/database.rb +63 -62
  50. data/lib/sequel_core/dataset.rb +9 -4
  51. data/lib/sequel_core/dataset/convenience.rb +10 -9
  52. data/lib/sequel_core/dataset/prepared_statements.rb +1 -1
  53. data/lib/sequel_core/dataset/sql.rb +130 -36
  54. data/lib/sequel_core/schema/sql.rb +2 -2
  55. data/lib/sequel_core/sql.rb +44 -51
  56. data/lib/sequel_core/version.rb +1 -1
  57. data/lib/sequel_model/associations.rb +25 -17
  58. data/lib/sequel_model/base.rb +35 -7
  59. data/lib/sequel_model/caching.rb +1 -6
  60. data/lib/sequel_model/record.rb +23 -5
  61. data/lib/sequel_model/validations.rb +20 -5
  62. data/spec/adapters/firebird_spec.rb +6 -1
  63. data/spec/adapters/mysql_spec.rb +12 -0
  64. data/spec/adapters/postgres_spec.rb +2 -2
  65. data/spec/adapters/sqlite_spec.rb +81 -2
  66. data/spec/integration/dataset_test.rb +2 -2
  67. data/spec/integration/type_test.rb +12 -2
  68. data/spec/sequel_core/core_sql_spec.rb +46 -12
  69. data/spec/sequel_core/database_spec.rb +24 -12
  70. data/spec/sequel_core/dataset_spec.rb +82 -32
  71. data/spec/sequel_core/schema_spec.rb +16 -0
  72. data/spec/sequel_model/associations_spec.rb +89 -0
  73. data/spec/sequel_model/base_spec.rb +66 -0
  74. data/spec/sequel_model/eager_loading_spec.rb +32 -0
  75. data/spec/sequel_model/record_spec.rb +9 -9
  76. data/spec/sequel_model/spec_helper.rb +3 -0
  77. data/spec/sequel_model/validations_spec.rb +63 -3
  78. metadata +41 -4
@@ -0,0 +1,88 @@
1
+ JRuby and Ruby 1.9 Officially Supported
2
+ ---------------------------------------
3
+
4
+ Sequel now officially supports JRuby 1.1.3 and Ruby 1.9 (svn revision
5
+ 18194 at least). Using JRuby with the JDBC adapter, PostgreSQL,
6
+ MySQL, and SQLite now enjoy almost full support, though not
7
+ everything works the same as using the native adapter. Depending on
8
+ what you are doing, it may make sense to use postgres-pr on JRuby
9
+ instead of PostgreSQL-JDBC.
10
+
11
+ To use the new JDBC support, the database connection string you give
12
+ Sequel is now passed directly to JDBC, here are a few examples:
13
+
14
+ Sequel.connect('jdbc:postgresql://host/database?user=*&password=*')
15
+ Sequel.connect('jdbc:mysql://host/database?user=*&password=*')
16
+ Sequel.connect('jdbc:sqlite::memory:')
17
+ Sequel.connect('jdbc:sqlite:relative/path.db')
18
+ Sequel.connect('jdbc:sqlite:/absolute/path.db')
19
+
20
+ Single Gem
21
+ ----------
22
+
23
+ Sequel is now distributed as a single gem named sequel, by combining
24
+ the previous sequel_core and sequel gems. You can still just
25
+ "require 'sequel_core'" if you don't want the model functionality.
26
+
27
+ Database Adapter Improvements
28
+ -----------------------------
29
+
30
+ * Dataset#empty? now works using the MySQL adapter.
31
+
32
+ * The Oracle adapter now works with a nonstandard database port.
33
+
34
+ * The JDBC adapter should load JDBC drivers automatically for
35
+ PostgreSQL, MySQL, SQLite, Oracle, and MSSQL. For PostgreSQL,
36
+ MySQL, and SQLite, the jdbc-* gem can be used, for the others, you
37
+ must have the correct .jar in your CLASSPATH.
38
+
39
+ * The PostgreSQL adapter no longer raises an error when inserting
40
+ records into a table without a primary key.
41
+
42
+ * Database#disconnect now works for the ADO adapter.
43
+
44
+ * The ADO adapter no longer raises an error if the dataset contains
45
+ no records.
46
+
47
+ * The ODBC adapter no longer errors when converting ::ODBC::Time
48
+ values.
49
+
50
+ Backwards Incompatible Changes
51
+ ------------------------------
52
+
53
+ * Sequel::Worker has been removed. There are no known users, and the
54
+ specs caused problems on JRuby.
55
+
56
+ * Assigning an empty string to a non-string, non-blob model attribute
57
+ converts it to nil by default. You can use
58
+ "Model.typecast_empty_string_to_nil = false" to get the old
59
+ behavior. This should make web development with Sequel
60
+ significantly easier, hopefully at no expense to other uses.
61
+
62
+ * Database.uri_to_options is now a private class method.
63
+
64
+ * Model.create_table! now acts the same as Database.create_table!,
65
+ dropping the table unconditionally and then creating it. This was
66
+ done for consistency. If you are using Model.create_table! in
67
+ production code, you should change it to
68
+ "Model.create_table unless Model.table_exists?", otherwise you risk
69
+ wiping out your production data. I recommended you use the
70
+ migration feature instead of Model.set_schema, as that handles
71
+ altering existing tables.
72
+
73
+ Other Notable Changes
74
+ ---------------------
75
+
76
+ * Using validates_length_of more than once on the same attribute with
77
+ different options without a tag no longer causes the first use to
78
+ be ignored. This was a side effect of the validation tags added
79
+ in 2.2.0.
80
+
81
+ * Other than the adapters, Sequel now has 100% code coverage (line
82
+ coverage).
83
+
84
+ * Model#set* methods now return self.
85
+
86
+ * An integration test suite was added, testing Sequel against a live
87
+ database with nothing mocked, which helped greatly when testing the
88
+ new support for JDBC adapters.
@@ -0,0 +1,106 @@
1
+ Prepared Statements/Bound Variables
2
+ ===================================
3
+
4
+ Sequel now supports prepared statements and bound variables. No
5
+ matter which database you are using, Sequel uses exactly the same API.
6
+ To specify placeholders, you use the :$placeholder syntax:
7
+
8
+ ds = DB[:items].filter(:name=>:$n)
9
+
10
+ To use a bound variable:
11
+
12
+ ds.call(:select, :n=>'Jim')
13
+
14
+ This will do the equivalent of selecting records that have the name
15
+ 'Jim'. In addition to :select, you can use :first or :delete. There
16
+ is also support for bound variables when inserting or updating
17
+ records:
18
+
19
+ ds.call(:update, {:n=>'Jim', :new_n=>'Bob'}, :name=>:$new_n)
20
+
21
+ Which will update all records that have the name 'Jim' to have the
22
+ name 'Bob'.
23
+
24
+ Prepared statement support is very similar to bound variable support,
25
+ except that the statement is first prepared with a name:
26
+
27
+ ps = ds.prepare(:select, :select_by_name)
28
+
29
+ It is then called later with the bound arguments to use:
30
+
31
+ ps.call(:n=>'Jim')
32
+ DB.call(:select_by_name, :n=>'Jim') # same as above
33
+
34
+ For inserting or updating, the hash to use when inserting or updating
35
+ is given to prepare:
36
+
37
+ ps2 = ds.prepare(:update, :update_name, :name=>:$new_n)
38
+ ps2.call(:n=>'Jim', :new_n=>'Bob')
39
+
40
+ There is some level of native support for these features in the
41
+ PostgreSQL, MySQL, SQLite, and JDBC adapters. For other adapters,
42
+ support is emulated, but it shouldn't be too difficult to add native
43
+ support for them.
44
+
45
+ For more details see:
46
+ http://sequel.rubyforge.org/rdoc/files/doc/prepared_statements_rdoc.html
47
+
48
+ Read-Only Slave/Writable Master and Database Sharding
49
+ =====================================================
50
+
51
+ Sequel now has built in support for master/slave database
52
+ configurations, just by setting an option in Sequel.connect:
53
+
54
+ DB=Sequel.connect('postgres://master_server/database', \
55
+ :servers=>{:read_only=>{:host=>'slave_server'}})
56
+
57
+ That will use slave_server for SELECT queries and master_server for
58
+ other queries. It's fairly easy to use multiple slaves or even
59
+ multiple masters, examples are included in the link below.
60
+
61
+ Sharding support requires some code other than the database
62
+ configuration, but is still fairly simple. For example, to set up
63
+ a 16 shard configuration based on a hex character:
64
+
65
+ servers = {}
66
+ (('0'..'9').to_a + ('a'..'f').to_a).each do |hex|
67
+ servers[hex.to_sym] = {:host=>"hash_host_#{hex}"}
68
+ end
69
+ DB=Sequel.connect('postgres://hash_host/hashes', :servers=>servers)
70
+
71
+ To set which shard to use for a query, use the Dataset#server method:
72
+
73
+ DB[:hashes].server(:a).filter(:hash=>/31337/)
74
+
75
+ For more details see:
76
+ http://sequel.rubyforge.org/rdoc/files/doc/sharding_rdoc.html
77
+
78
+ Other Changes
79
+ =============
80
+
81
+ * The sequel.rubyforge.org website has a new design thanks to boof.
82
+ The online RDoc is now located at http://sequel.rubyforge.org/rdoc.
83
+
84
+ * Support was added for anonymous column names in the ADO adapter.
85
+
86
+ * Better MSSQL support in the ADO, ODBC, and JDBC adapters. The
87
+ odbc_mssql adapter has been removed. If you use MSSQL with ODBC,
88
+ please use the odbc adapter with a :db_type=>'mssql' option.
89
+
90
+ * The following Sequel::Error exception subclasses were removed:
91
+ InvalidExpression, InvalidFilter, InvalidJoinType, and WorkerStop.
92
+
93
+ * Documentation was added for the PostgreSQL, MySQL, SQLite, and
94
+ JDBC adapters.
95
+
96
+ * Various internal interfaces were refactored. For example, if you
97
+ use an adapter not included with Sequel, it probably won't work
98
+ until you update it to the new internal API.
99
+
100
+ * Many low level methods (such as Database#transaction), now take
101
+ an optional server argument to indicate which server to use.
102
+
103
+ * Model plugins that have a DatasetMethods module with non-public
104
+ methods no longer have Model methods created that call those
105
+ methods.
106
+
@@ -0,0 +1,137 @@
1
+ New Features
2
+ ------------
3
+
4
+ * The values that are used to insert/update records can now be
5
+ scoped similar to how filter expressions can be scoped.
6
+ set_defaults is used to set defaults which can be overridden,
7
+ and set_overrides is used to set defaults which cannot be
8
+ overridden:
9
+
10
+ DB[:t].set_defaults(:x=>1).insert_sql
11
+ # => INSERT INTO t (x) VALUES (1)
12
+ DB[:t].set_defaults(:x=>1).insert_sql(:x=>2)
13
+ # => INSERT INTO t (x) VALUES (2)
14
+ DB[:t].set_defaults(:x=>1).insert_sql(:y=>2)
15
+ # => INSERT INTO t (x, y) VALUES (1, 2)
16
+ DB[:t].set_overrides(:x=>1).insert_sql(:x=>2)
17
+ # => INSERT INTO t (x) VALUES (1)
18
+
19
+ The difference between set_defaults and set_overrides is that
20
+ with set_defaults, the last value takes precedence, while with
21
+ set_overrides, the first value takes precedence.
22
+
23
+ * The schema generators now support creating and altering tables
24
+ with composite primary and/or foreign keys:
25
+
26
+ DB.create_table(:items) do
27
+ integer :id
28
+ text :name
29
+ primary_key [:id, :name]
30
+ foreign_key [:id, :name], :other_table, \
31
+ :key=>[:item_id, :item_name]
32
+ end
33
+
34
+ DB.alter_table(:items) do
35
+ add_primary_key [:id, :name]
36
+ add_foreign_key [:id, :name], :other_table, \
37
+ :key=>[:item_id, :item_name]
38
+ end
39
+
40
+ * The AlterTableGenerator now supports unique constraints:
41
+
42
+ DB.alter_table(:items) do
43
+ add_unique_constraint [:aaa, :bbb, :ccc], :name => :con3
44
+ end
45
+
46
+ * The schema generators now support ON UPDATE (previously, they only
47
+ supported ON DELETE):
48
+
49
+ DB.create_table(:items) do
50
+ foreign_key :project_id, :projects, :on_update => :cascade
51
+ end
52
+
53
+ * When connecting to a PostgreSQL server version 8.2 and higher,
54
+ Sequel now uses the INSERT ... RETURNING ... syntax, which should
55
+ speed up row inserts on PostgreSQL. In addition, Sequel Models
56
+ use RETURNING * to speed up model object creation.
57
+
58
+ * You can now validate multiple attributes at once. This is useful
59
+ if the combination of two or more attribute values is important,
60
+ such as checking the uniqueness of multiple columns.
61
+ validates_uniqueness_of now supports this directly:
62
+
63
+ validates_uniqueness_of [:column1, :column2]
64
+
65
+ This protects against the database having multiple rows with the
66
+ same values for both :column1 and :column2. This is different
67
+ from:
68
+
69
+ validates_uniqueness_of :column1, :column2
70
+
71
+ Which checks that the value of column1 is unique in the table, and
72
+ that the value of column2 is unique in the table (which is much
73
+ more restrictive).
74
+
75
+ Other Improvements
76
+ ------------------
77
+
78
+ * Dataset methods insert_sql, delete_sql, and update_sql respect the
79
+ :sql option, allowing you to do things such as:
80
+
81
+ ds = DB['INSERT INTO t (time) VALUES (CURRENT_TIMESTAMP)']
82
+ ds.insert
83
+ ds.insert
84
+
85
+ * The database adapters (at least MySQL, PostgreSQL, SQLite, and
86
+ JDBC) generally raise Sequel::DatabaseError for database problems,
87
+ making it easier to tell what is a true database error versus an
88
+ error raised by Sequel itself.
89
+
90
+ * Sequel uses the async features of ruby-pg so that the entire
91
+ interpreter is not blocked while waiting for the results of
92
+ queries.
93
+
94
+ * Sequel now supports the 2008.08.17 version of ruby-pg.
95
+
96
+ * MSSQL support has been improved when using the ODBC and ADO
97
+ adapters.
98
+
99
+ * Index names are quoted and creating or dropping indexes.
100
+
101
+ * Automatically generated column accessor methods no longer override
102
+ instance methods specified by plugins.
103
+
104
+ * Inserting a row with an already specified primary key inside a
105
+ transaction now works correctly when using PostgreSQL.
106
+
107
+ * before_save and before_update hooks now work as expected when using
108
+ save_changes.
109
+
110
+ * count and paginate now work correctly on graphed datasets.
111
+
112
+ Backwards Compatibility
113
+ -----------------------
114
+
115
+ * The SQLite adapter now raises Sequel::DatabaseError instead of
116
+ Sequel::Error::InvalidStatement whenever an SQLite3::Exception is
117
+ raised by the SQLite3 driver.
118
+
119
+ * Date and DateTime conversions now convert 2 digit years. To revert
120
+ to the previous behavior:
121
+
122
+ Sequel.convert_two_digit_years = false
123
+
124
+ Note that Ruby 1.8 and 1.9 handle Date parsing differently, so
125
+ there is no backwards compatibility change for Ruby 1.9. However,
126
+ this also means that the MM/DD/YY date syntax commonly used in the
127
+ United States is not always parsed correctly on Ruby 1.9, greatly
128
+ limiting the use of 2 digit year conversion.
129
+
130
+ * You can no longer abuse the SQL function syntax for specifying
131
+ database types. For example, you must change:
132
+
133
+ :type=>:varchar[255]
134
+
135
+ to:
136
+
137
+ :type=>:varchar, :size=>255
@@ -0,0 +1,157 @@
1
+ New Features
2
+ ------------
3
+
4
+ * Schema parsing was refactored, resulting in a huge speedup when
5
+ using MySQL. MySQL now uses the DESCRIBE statement instead of the
6
+ INFORMATION_SCHEMA. PostgreSQL now uses the pg_* system catalogs
7
+ instead of the INFORMATION schema.
8
+
9
+ * The schema information now includes the :primary_key field. Models
10
+ now use this field to automatically determine the primary key for
11
+ a table, so it no longer needs to be specified explicitly. Models
12
+ even handle the composite primary key case.
13
+
14
+ * The raise_on_typecast_failure switch was added, with it being true
15
+ by default (so no change in behavior). This allows the user to
16
+ silently ignore errors when typecasting fails, at the global, class,
17
+ and instance levels.
18
+
19
+ Sequel::Model.raise_on_typecast_failure = false # Global
20
+ Artist.raise_on_typecast_failure = true # Class
21
+ artist = Artist.new
22
+ artist.raise_on_typecast_failure = false # Instance
23
+
24
+ Album.raise_on_typecast_failure = true
25
+ Album.new(:numtracks=>'a') # => raises Sequel::Error::InvalidValue
26
+ Album.raise_on_typecast_failure = false
27
+ Album.new(:numtracks=>'a') # => #<Album @values={:numtracks=>"a"}>
28
+
29
+ * Associations' orders are now respected when eager loading via
30
+ eager_graph. Sequel will qualify the columns in the order with
31
+ the alias being used, so you can have overlapping columns when
32
+ eager loading multiple associations.
33
+
34
+ Artist.one_to_many :albums, :order=>:name
35
+ Album.one_to_many :tracks, :order=>:number
36
+ Artist.order(:artists__name).eager_graph(:albums=>:tracks).sql
37
+ # => ... ORDER BY artists.name, albums.name, tracks.number
38
+
39
+ * The support for CASE expressions has been enhanced by allowing the
40
+ use of an optional expression:
41
+
42
+ {1=>2}.case(0, :x)
43
+ # => CASE x WHEN 1 THEN 2 ELSE 0 END
44
+ [[:a, 1], [:b, 2], [:c, 3]].case(4, :y)
45
+ # => CASE y WHEN a THEN 1 WHEN b THEN 2 WHEN c THEN 3 ELSE 4 END
46
+
47
+ Previously, to get something equivalent to this, you had to do:
48
+
49
+ {{:x=>1}=>2}.case(0)
50
+ # => CASE WHEN (x = 1) THEN 2 ELSE 0 END
51
+ [[{:y=>:a}, 1], [{:y=>:b}, 2], [{:y=>:c}, 3]].case(4)
52
+ # => CASE WHEN (y = a) THEN 1 WHEN (y = b) THEN 2 WHEN (y = c)
53
+ THEN 3 ELSE 4 END
54
+
55
+ * You can now change the NULL/NOT NULL value of an existing column
56
+ using the set_column_allow_null method.
57
+
58
+ # Set NOT NULL
59
+ DB.alter_table(:artists){set_column_allow_null :name, false}
60
+ # Set NULL
61
+ DB.alter_table(:artists){set_column_allow_null :name, true}
62
+
63
+ * You can now get the schema information for a table in a non-public
64
+ schema in PostgreSQL using the implicit :schema__table syntax.
65
+ Before, the :schema option had to be given explicitly to
66
+ Database#schema. This allows models to get schema information for
67
+ tables outside the public schema.
68
+
69
+ * Transactions are now supported on MSSQL.
70
+
71
+ * Dataset#tables now returns all tables in the database for MySQL
72
+ databases accessed via JDBC.
73
+
74
+ * Database#drop_view can now drop multiple views at once.
75
+
76
+ Other Improvements
77
+ ------------------
78
+
79
+ * The SQLite adapter now respects the Sequel.datetime_class option
80
+ for timestamp and datetime columns.
81
+
82
+ * Adding a unique constraint no longer explicity creates a unique
83
+ index. If you want a unique index, use index :unique=>true.
84
+
85
+ * If no language is specified when creating a full text index on
86
+ PostgreSQL, the simple language is assumed.
87
+
88
+ * Errors when typecasting fails are now Sequel::Error::InvalidValue
89
+ instead of the more generic Sequel::Error.
90
+
91
+ * Specifying constraints now works correctly for all types of
92
+ arguments. Previously, it did not work unless a block or
93
+ interpolated string were used.
94
+
95
+ * Loading an association with the same name as a table in the FROM
96
+ clause no longer causes an error.
97
+
98
+ * When eagerly loading many_to_one associations where no objects have
99
+ an associated object, the negative lookup is now cached.
100
+
101
+ * String keys can now be used with Dataset#multi_insert, just like
102
+ they can be used for Dataset#insert.
103
+
104
+ * Dataset#join_table now generates the correct SQL when doing the
105
+ first join to a dataset where the first source is a dataset, when
106
+ an unqualified column is used in the conditions.
107
+
108
+ * Cascading associations after *_to_many associations can now be
109
+ eagerly loaded via eager_graph.
110
+
111
+ * Eagerly loading *_to_many associations that are cascaded behind a
112
+ many_to_one association now have their duplicates removed if a
113
+ cartesian product join is done.
114
+
115
+ * The SQLite adapter now uses string literals in all of the AS
116
+ clauses. While the SQL standard specifies that identifiers should
117
+ be used, SQLite documentation explicitly states that string
118
+ literals are expected (though it generally works with identifiers
119
+ by converting them implicitly).
120
+
121
+ * Database methods that modify the schema now remove the cached
122
+ schema entry.
123
+
124
+ * The hash keys that Database#schema returns when no table is
125
+ requested are now always supposed to be symbols.
126
+
127
+ * The generation of SQL for composite foreign keys on MySQL has been
128
+ fixed.
129
+
130
+ * A schema.rdoc file was added to the documentation explaining the
131
+ various parts of Sequel related to schema generation and
132
+ modification and how they interact
133
+ (http://sequel.rubyforge.org/rdoc/files/doc/schema_rdoc.html).
134
+
135
+ * The RDoc template for the website was changed from the default
136
+ template to the hanna template.
137
+
138
+ Backwards Compatibility
139
+ -----------------------
140
+
141
+ * The :numeric_precision and :max_chars schema entries have been
142
+ removed. Use the :db_type entry to determine this information,
143
+ if available.
144
+
145
+ * The SQLite adapter used to always return Time instances for
146
+ timestamp types, even if Sequel.datetime_class was DateTime. For
147
+ datetime types it always returned a DateTime instance. It
148
+ now returns an instance of Sequel.datetime_class in both cases.
149
+
150
+ * It's possible that the including of associations' orders when eager
151
+ loading via eager_graph could cause problems. You can use the
152
+ :order_eager_graph=>false option to not use the :order option when
153
+ eager loading via :eager_graph.
154
+
155
+ * There were small changes in SQL creation where the AS keyword is
156
+ now used explicitly. These should have no effect, but could break
157
+ tests for explicit SQL.