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
data/CHANGELOG CHANGED
@@ -1,3 +1,53 @@
1
+ === 2.11.0 (2009-03-02)
2
+
3
+ * Optimize Model.[] by using static sql when possible, for a 30-40% speed increase (jeremyevans)
4
+
5
+ * Add Dataset#with_sql, which returns a clone of the datatset with static SQL (jeremyevans)
6
+
7
+ * Refactor Dataset#literal so it doesn't need to be overridden in subadapters, for a 20-25% performance increase (jeremyevans)
8
+
9
+ * Remove SQL::IrregularFunction, no longer used internally (jeremyevans)
10
+
11
+ * Allow String#lit to take arguments and return a SQL::PlaceholderLiteralString (jeremyevans)
12
+
13
+ * Add Model#set_associated_object, used by the many_to_one setter method, for easier overriding (jeremyevans)
14
+
15
+ * Allow use of database independent types when casting (jeremyevans)
16
+
17
+ * Give association datasets knowledge of the model object that created them and the related association reflection (jeremyevans)
18
+
19
+ * Make Dataset#select, #select_more, #order, #order_more, and #get take a block that yields a SQL::VirtualRow, similar to #filter (jeremyevans)
20
+
21
+ * Fix stored procedures in MySQL adapter when multiple arguments are used (clivecrous)
22
+
23
+ * Add :conditions association option, for easier filtering of associated objects (jeremyevans)
24
+
25
+ * Add :clone association option, for making clones of existing associations (jeremyevans)
26
+
27
+ * Handle typecasting invalid date strings (and possible other types) correctly (jeremyevans)
28
+
29
+ * Add :compress=>false option to MySQL adapter to turn off compression of client-server connection (tmm1)
30
+
31
+ * Set SQL_AUTO_IS_NULL=0 on MySQL connections, disable with :auto_is_null=>false (tmm1)
32
+
33
+ * Add :timeout option to MySQL adapter, default to 30 days (tmm1)
34
+
35
+ * Set MySQL encoding using Mysql#options so it works across reconnects (tmm1)
36
+
37
+ * Fully support blobs on SQLite (jeremyevans)
38
+
39
+ * Add String#to_sequel_blob, alias String#to_blob to that (jeremyevans)
40
+
41
+ * Fix default index names when a non-String or Symbol column is used (jeremyevans)
42
+
43
+ * Fix some ruby -w warnings (jeremyevans) (#259)
44
+
45
+ * Fix issues with default column values, table names, and quoting in the rename_column and drop_column support in shared SQLite adapter (jeremyevans)
46
+
47
+ * Add rename_column support to SQLite shared adapter (jmhodges)
48
+
49
+ * Add validates_inclusion_of validation (jdunphy)
50
+
1
51
  === 2.10.0 (2009-02-03)
2
52
 
3
53
  * Don't use a default schema any longer in the shared PostgreSQL adapter (jeremyevans)
@@ -68,7 +118,7 @@
68
118
 
69
119
  * Fix add_foreign_key for MySQL (jeremyevans, aphyr)
70
120
 
71
- * Correctly literalize BigDecimal NaN and (+-)Infinity values (#256) (jeremyevans)
121
+ * Correctly literalize BigDecimal NaN and (+-)Infinity values (jeremyevans) (#256)
72
122
 
73
123
  * Make Sequel raise an Error if you attempt to subclass Sequel::Model before setting up a database connection (jeremyevans)
74
124
 
data/README.rdoc CHANGED
@@ -228,7 +228,7 @@ You can also specify a custom WHERE clause using a string:
228
228
  You can use parameters in your string, as well (ActiveRecord style):
229
229
 
230
230
  posts.filter('(stamp < ?) AND (author != ?)', Date.today - 3, author_name)
231
- posts.filter{|o| (o.stamp < Date.today + 3) & ~{:author => author_name}} # same as above
231
+ posts.filter{|o| (o.stamp < Date.today - 3) & ~{:author => author_name}} # same as above
232
232
 
233
233
  Datasets can also be used as subqueries:
234
234
 
@@ -369,7 +369,7 @@ Models in Sequel are based on the Active Record pattern described by Martin Fowl
369
369
 
370
370
  Model classes are defined as regular Ruby classes:
371
371
 
372
- DB = Sequel.connect('sqlite:/blog.db')
372
+ DB = Sequel.connect('sqlite://blog.db')
373
373
  class Post < Sequel::Model
374
374
  end
375
375
 
data/Rakefile CHANGED
@@ -28,7 +28,7 @@ spec = Gem::Specification.new do |s|
28
28
  s.version = VERS
29
29
  s.platform = Gem::Platform::RUBY
30
30
  s.has_rdoc = true
31
- s.extra_rdoc_files = ["README.rdoc", "CHANGELOG", "COPYING"] + Dir["doc/*.rdoc"]
31
+ s.extra_rdoc_files = ["README.rdoc", "CHANGELOG", "COPYING"] + Dir["doc/*.rdoc"] + Dir['doc/release_notes/*.txt']
32
32
  s.rdoc_options += RDOC_OPTS
33
33
  s.summary = "The Database Toolkit for Ruby"
34
34
  s.description = s.summary
@@ -73,7 +73,7 @@ end
73
73
  Rake::RDocTask.new do |rdoc|
74
74
  rdoc.rdoc_dir = "rdoc"
75
75
  rdoc.options += RDOC_OPTS
76
- rdoc.rdoc_files.add %w"README.rdoc CHANGELOG COPYING lib/**/*.rb doc/*.rdoc"
76
+ rdoc.rdoc_files.add %w"README.rdoc CHANGELOG COPYING lib/**/*.rb doc/*.rdoc doc/release_notes/*.txt"
77
77
  end
78
78
 
79
79
  ### Website
@@ -152,11 +152,15 @@ otherwise modified:
152
152
  end
153
153
  Author.first.authorships_dataset.filter{|o| o.number < 10}.first
154
154
 
155
- You can extend a dataset with a module easily with :extend:
155
+ You can extend a dataset with a module easily with :extend. You can reference
156
+ the model object that created the association dataset via the dataset's
157
+ model_object method, and the related association reflection via the dataset's
158
+ association_reflection method:
156
159
 
157
160
  module FindOrCreate
158
161
  def find_or_create(vals)
159
- first(vals) || @opts[:models][nil].create(vals)
162
+ first(vals) || association_reflection.associated_class. \
163
+ create(vals.merge(association_reflection[:key]=>model_object.id))
160
164
  end
161
165
  end
162
166
  class Author < Sequel::Model
@@ -164,22 +168,6 @@ You can extend a dataset with a module easily with :extend:
164
168
  end
165
169
  Author.first.authorships_dataset.find_or_create(:name=>'Blah', :number=>10)
166
170
 
167
- However, note that the dataset doesn't have any knowledge of the model object
168
- that created it via the association, so if you want to use attributes of the
169
- model object, you'll have to use a closure:
170
-
171
- class Author < Sequel::Model
172
- one_to_many :authorships, :dataset=>(proc do
173
- key = pk
174
- ds = Authorship.filter(:author_id=>key)
175
- ds.meta_def(:find_or_create_by_name) do |name|
176
- first(:name=>name) || Authorship.create(:name=>name, :author_id=>key)
177
- end
178
- ds
179
- end)
180
- end
181
- Author.first.authorships_dataset.find_or_create_by_name('Bob')
182
-
183
171
  ===has_many :through associations
184
172
 
185
173
  many_to_many handles the usual case of a has_many :through with a belongs_to in
@@ -0,0 +1,38 @@
1
+ === New code organization
2
+
3
+ Sequel is now divided into two parts: sequel_core and sequel_model.
4
+ These two parts are distributed as two separate gems. The sequel gem
5
+ bundles sequel_core and sequel_model together. If you don't use
6
+ Sequel::Model in your code, you can just install and use sequel_core.
7
+
8
+ === New model hooks implementation
9
+
10
+ The hooks implementation have been rewritten from scratch, is much
11
+ more robust and offers a few new features:
12
+
13
+ * More ways to define hooks: hooks can now be defined by supplying a
14
+ block or a method name, or by overriding the hook instance method.
15
+
16
+ * Inheritable hooks: Hooks can now be inherited, which means that you
17
+ can define general hooks in a model superclass, and use them in
18
+ subclasses. You can also define global hooks on Sequel::Model that
19
+ will be invoked for all model classes.
20
+
21
+ * Hook chains can be broken by returning false from within the hook.
22
+
23
+ * New after_initialize hook, invoked after instance initialization.
24
+
25
+ * The hook invocation order can no longer be changed. Hooks are
26
+ invoked in order of definition, from the top of the class hierarchy
27
+ (that is, from Sequel::Model) down to the specific class.
28
+
29
+ === Miscellanea
30
+
31
+ * Removed deprecated adapter stubs, and all other deprecations in both
32
+ sequel_core and sequel_model.
33
+
34
+ * Fixed String#to_time to raise error correctly for invalid time
35
+ stamps.
36
+
37
+ * Fixed error behavior when parse_tree or ruby2ruby are not available.
38
+
@@ -0,0 +1,143 @@
1
+ === DRY Sequel models
2
+
3
+ With the new Sequel release you no longer need to explicitly specify
4
+ the table
5
+ name for each model class, assuming your model name is the singular of
6
+ the
7
+ table name (just like in ActiveRecord or DataMapper):
8
+
9
+ class UglyBug < Sequel::Model
10
+ end
11
+
12
+ UglyBug.table_name #=> :ugly_bugs
13
+
14
+ === New model validations and support for virtual attributes
15
+
16
+ Sequel model now include validation functionality which largly follows
17
+ the
18
+ validations offered in ActiveRecord. Validations can be checked
19
+ anytime by
20
+ calling Model#valid?, with validation errors accessible through
21
+ Model#errors:
22
+
23
+ class Item < Sequel::Model
24
+ validates_presence_of :name
25
+ end
26
+
27
+ my_item = Item.new
28
+ my_item.valid? #=> false
29
+ my_item.errors.full_messages #=> ["name is not present"]
30
+
31
+ The Model#save method has been changed to check for validity before
32
+ saving. If
33
+ the model instance is not valid, the #save method returns false
34
+ without saving
35
+ the instance. You can also bypass the validity test by calling
36
+ Model#save!
37
+ instead.
38
+
39
+ Model classes also now support virtual attributes, letting you assign
40
+ values to
41
+ any attribute (virtual or persistent) at initialization time:
42
+
43
+ class User < Sequel::Model
44
+ attr_accessor :password
45
+ end
46
+
47
+ u = User.new(:password => 'blah', ...)
48
+ u.password #=> 'blah'
49
+
50
+ Also, virtual attributes can be validated just like persistent
51
+ attributes.
52
+
53
+ === Other changes (long list!)
54
+
55
+ * Added Model#reload as alias to Model#refresh.
56
+
57
+ * Changed Model.create to accept a block (#126).
58
+
59
+ * Fixed Model#initialize to accept nil values (#115).
60
+
61
+ * Added Model#update_with_params method with support for virtual
62
+ attributes and auto-filtering of unrelated parameters, and changed
63
+ Model.create_with_params to support virtual attributes (#128).
64
+
65
+ * Fixed Model.dataset to correctly set the dataset if using implicit
66
+ naming or inheriting the superclass dataset (thanks celldee).
67
+
68
+ * Finalized support for virtual attributes.
69
+
70
+ * Fixed Model#set to work with string keys (#143).
71
+
72
+ * Fixed Model.create to correctly initialize instances marked as new
73
+ (#135).
74
+
75
+ * Fixed Model#initialize to convert string keys into symbol keys. This
76
+ also fixes problem with validating objects initialized with string
77
+ keys (#136).
78
+
79
+ * Added Dataset#table_exists? convenience method.
80
+
81
+ * Changed Dataset#group_and_count to accept multiple columns (#134).
82
+
83
+ * Added Dataset#select_all method.
84
+
85
+ * Added Dataset#select_more, Dataset#order_more methods (#129).
86
+
87
+ * Fixed Dataset#count to work correctly for grouped datasets (#144).
88
+
89
+ * Fixed joining datasets using aliased tables (#140).
90
+
91
+ * Added support for UNSIGNED constraint, used in MySQL? (#127).
92
+
93
+ * Implemented constraint definitions inside Database#create_table.
94
+
95
+ * Enhanced Database.connect to accept options with string keys, so it
96
+ can now accept options loaded from YAML files. Database.connect also
97
+ automatically converts :username option into :user for compatibility
98
+ with existing YAML configuration files for AR and DataMapper.
99
+
100
+ * Changed ODBC::Database to support connection using driver and
101
+ database name, also added support for untitled columns in
102
+ ODBC::Dataset (thanks Leonid Borisenko).
103
+
104
+ * Changed MySQL adapter to support specifying socket option.
105
+
106
+ * Fixed MySQL adapter to correctly format foreign key definitions
107
+ (#123).
108
+
109
+ * Changed MySQL::Dataset to allow HAVING clause on ungrouped datasets,
110
+ and put HAVING clause before ORDER BY clause (#133).
111
+
112
+ * Changed mysql adapter to default to localhost if :host option is not
113
+ specified (#114).
114
+
115
+ * Added String#to_date. Updated mysql adapter to use String#to_date
116
+ for mysql date types (thanks drfreeze).
117
+
118
+ * Fixed postgres adapter to define PGconn#async_exec as alias to #exec
119
+ if not defined (for pure-ruby postgres driver).
120
+
121
+ * Changed postgres adapter to quote column references using double
122
+ quotes.
123
+
124
+ * Applied patch for oracle adapter: fix behavior of limit and offset,
125
+ transactions, #table_exists?, #tables and additional specs (thanks
126
+ Liming Lian #122).
127
+
128
+ * Added support additional field types in postgresql adapter (#146).
129
+
130
+ * Added support for date field types in postgresql adapter (#145).
131
+
132
+ * Added support for limiting and paginating datasets with fixed SQL,
133
+ e.g. using Database#fetch.
134
+
135
+ * Added new Dataset#from_self method that returns a dataset selecting
136
+ from the original dataset.
137
+
138
+ * Allow for additional filters on a grouped dataset (#119 and #120)
139
+
140
+ * Refactored Sequelizer to use Proc#to_sexp (method provided by r2r).
141
+
142
+ * Fixed bin/sequel to require sequel_model if available.
143
+
@@ -0,0 +1,101 @@
1
+ === Better model associations
2
+
3
+ The latest release of sequel_model includes a new associations
4
+ functionality written by Jeremy Evans which replaces the old relations
5
+ code in previous versions. Please note that this version is not
6
+ completely backward-compatible and you should therefore upgrade with
7
+ caution.
8
+
9
+ The new implementation supports three kinds of relations: one_to_many,
10
+ many_to_one and many_to_many, which correspond to has_many, belongs_to
11
+ and has_and_belongs_to_many relations in ActiveRecord. In fact, the
12
+ new implementation includes aliases for ActiveRecord assocation macros
13
+ and is basically compatible with ActiveRecord conventions. It also
14
+ supports DRY implicit class name references. Here's a simple example:
15
+
16
+ class Author < Sequel::Model
17
+ has_many :books # equivalent to one_to_many
18
+ end
19
+
20
+ class Book < Sequel::Model
21
+ belongs_to :author # equivalent to many_to_one
22
+ has_and_belongs_to_many :categories # equivalent to many_to_many
23
+ end
24
+
25
+ class Category < Sequel::Model
26
+ has_and_belongs_to_many :books
27
+ end
28
+
29
+ These macros will create the following methods:
30
+
31
+ * Author#books, Author#add_book, Author#remove_book
32
+ * Book#author, Book#categories, Book#add_category,
33
+ Book#remove_category
34
+ * Category#books, Category#add_book, Category#remove_book
35
+
36
+ Unlike ActiveRecord, one_to_many and many_to_many association methods
37
+ return a dataset:
38
+
39
+ a = Author[1234]
40
+ a.books.sql #=> 'SELECT * FROM books WHERE (author_id = 1234)'
41
+
42
+ You can also tell Sequel to cache the association result set and
43
+ return it as an array:
44
+
45
+ class Author < Sequel::Model
46
+ has_many :books, :cache => true
47
+ end
48
+
49
+ Author[1234].books.class #=> Array
50
+
51
+ You can of course bypass the defaults and specify class names and key
52
+ names:
53
+
54
+ class Node < Sequel::Model
55
+ belongs_to :parent, :class => Node
56
+ belongs_to :session, :key => :producer_id
57
+ end
58
+
59
+ Another useful option is :order, which sets the order for the
60
+ association dataset:
61
+
62
+ class Author < Sequel::Model
63
+ has_many :books, :order => :title
64
+ end
65
+
66
+ Author[1234].books.sql #=> 'SELECT * FROM books WHERE (author_id =
67
+ 1234) ORDER BY title'
68
+
69
+ More information about associations can be found in the Sequel
70
+ documentation.
71
+
72
+ === Other changes
73
+
74
+ * Added configuration file for running specs (#186).
75
+
76
+ * Changed Database#drop_index to accept fixed arity (#173).
77
+
78
+ * Changed column definition sql to put UNSIGNED constraint before
79
+ unique in order to satisfy MySQL (#171).
80
+
81
+ * Enhanced MySQL adapter to support load data local infile_, added
82
+ compress option for mysql connection by default (#172).
83
+
84
+ * Fixed bug when inserting hashes in array tuples mode.
85
+
86
+ * Changed SQLite adapter to catch RuntimeError raised when executing a
87
+ statement and raise Error::InvalidStatement with the offending SQL and
88
+ error message (#188).
89
+
90
+ * Fixed Dataset#reverse to not raise for unordered dataset (#189).
91
+
92
+ * Added Dataset#unordered method and changed #order to remove order if
93
+ nil is specified (#190).
94
+
95
+ * Fixed reversing order of ASC expression (#164).
96
+
97
+ * Added support for :null => true option when defining table columns
98
+ (#192).
99
+
100
+ * Fixed Symbol#method_missing to accept variable arity (#185).
101
+
@@ -0,0 +1,53 @@
1
+ Eager loading for all types of associations:
2
+
3
+ Artist.eager(:albums).all
4
+ Album.eager(:artist, :genre, :tracks).all
5
+ Album.eager(:artist).eager(:genre).eager(:tracks).all
6
+ Album.filter(:year=>2008).eager(:artist).all
7
+
8
+ Eager loading supports cascading to an unlimited depth, and doesn't have
9
+ any aliasing issues:
10
+
11
+ Artist.eager(:albums=>:tracks).all
12
+ Artist.eager(:albums=>{:tracks=>:genre}).all
13
+
14
+ Unfortunately, eager loading comes at the expense of a small amount of
15
+ backward compatibility. If you were using uncached associations (the
16
+ default in sequel_model 0.5), they no longer work the same way. Now,
17
+ all associations act as if :cache=>true (which is now set for all
18
+ associations, so if you wrote a tool that worked with both cached and
19
+ uncached associations, it should still work).
20
+
21
+ One to many associations now populate the corresponding many to one
22
+ instance variable (even when eagerly loaded):
23
+
24
+ # Assuming: Album.one_to_many :tracks
25
+ album = Album.first
26
+ # This following code is only one query,
27
+ # not a query for the album and one for each track
28
+ album.tracks.each{|t| puts t.album.name}
29
+
30
+ ActiveRecord style has_many :through associations are now supported via
31
+ many_to_many. many_to_many will no longer select the entire result set,
32
+ just the columns of the associated table (and not the join table), so it
33
+ works for both has_and_belongs_to_many (simple join table) and has_many
34
+ :through (join table model) scenarios. If you want to include all or
35
+ part of the join table attributes, see the :select option for
36
+ many_to_many associations.
37
+
38
+ We reduced the number of gems from three (sequel, sequel_core,
39
+ sequel_model) to two (sequel, sequel_core). Basically, sequel_model is
40
+ now just sequel, and the old sequel gem metapackage is no longer. There
41
+ isn't a reason to have a gem metapackage for two gems when one
42
+ (sequel_model) depends on the other (sequel_core). This required a
43
+ version bump for the model part of sequel from 0.5.0.2 to 1.4.0 (since
44
+ the previous sequel gem version was 1.3).
45
+
46
+ Sequel 1.4.0 has fixes for 11 trackers issues, including fixes to the
47
+ MySQL and PostgreSQL adapters.
48
+
49
+ We have switched the source control repository for Sequel from Google
50
+ Code (which uses subversion) to github (which uses git). If you would
51
+ like to contribute to Sequel, please fork the github repository, make
52
+ your changes, and send a pull request. As before, posting patches on
53
+ the Google Code issue tracker is fine as well.