<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -76,7 +76,7 @@ You get an IRB session with the database object stored in DB.
 
 Sequel is designed to take the hassle away from connecting to databases and manipulating them. Sequel deals with all the boring stuff like maintaining connections, formatting SQL correctly and fetching records so you can concentrate on your application.
 
-Sequel uses the concept of datasets to retrieve data. A Dataset object encapsulates an SQL query and supports chainability, letting you fetch data using a convenient Ruby DSL that is both concise and infinitely flexible.
+Sequel uses the concept of datasets to retrieve data. A Dataset object encapsulates an SQL query and supports chainability, letting you fetch data using a convenient Ruby DSL that is both concise and flexible.
 
 For example, the following one-liner returns the average GDP for the five biggest countries in the middle east region:
 
@@ -89,7 +89,7 @@ Which is equivalent to:
 Since datasets retrieve records only when needed, they can be stored and later reused. Records are fetched as hashes (they can also be fetched as custom model objects), and are accessed using an Enumerable interface:
 
   middle_east = DB[:countries].filter(:region =&gt; 'Middle East')
-  middle_east.order(:name).each {|r| puts r[:name]}
+  middle_east.order(:name).each{|r| puts r[:name]}
   
 Sequel also offers convenience methods for extracting data from Datasets, such as an extended map method:
 
@@ -123,8 +123,8 @@ You can specify a block to connect, which will disconnect from the database afte
 
 === Arbitrary SQL queries
 
-  DB.execute(&quot;create table t (a text, b text)&quot;)
-  DB.execute(&quot;insert into t values ('a', 'b')&quot;)
+  DB.execute_ddl(&quot;create table t (a text, b text)&quot;)
+  DB.execute_insert(&quot;insert into t values ('a', 'b')&quot;)
 
 Or more succinctly:
 
@@ -143,6 +143,12 @@ You can also fetch records with raw SQL through the dataset:
     p row
   end
 
+You can use placeholders in your SQL string as well:
+
+  DB['select * from items where name = ?', name].each do |row|
+    p row
+  end
+
 === Getting Dataset Instances
 
 Dataset is the primary means through which records are retrieved and manipulated. You can create an blank dataset by using the dataset method:
@@ -198,13 +204,13 @@ You can also specify ranges:
 
   my_posts = posts.filter(:stamp =&gt; (Date.today - 14)..(Date.today - 7))
   
-Or lists of values:
+Or arrays of values:
 
   my_posts = posts.filter(:category =&gt; ['ruby', 'postgres', 'linux'])
   
 Sequel also accepts expressions:
   
-  my_posts = posts.filter(:stamp.sql_number &gt; Date.today &lt;&lt; 1)
+  my_posts = posts.filter{|o| o.stamp &gt; Date.today &lt;&lt; 1}
   
 Some adapters (like postgresql) will also let you specify Regexps:
 
@@ -222,7 +228,7 @@ You can also specify a custom WHERE clause using a string:
 You can use parameters in your string, as well (ActiveRecord style):
 
   posts.filter('(stamp &lt; ?) AND (author != ?)', Date.today - 3, author_name)
-  posts.filter((:stamp + 3 &lt; Date.today) &amp; ~(:author =&gt; author_name)) # same as above
+  posts.filter{|o| (o.stamp &lt; Date.today + 3) &amp; ~{:author =&gt; author_name}} # same as above
 
 Datasets can also be used as subqueries:
 
@@ -251,11 +257,34 @@ Ordering datasets is simple:
 
   posts.order(:stamp) # ORDER BY stamp
   posts.order(:stamp, :name) # ORDER BY stamp, name
+
+Chaining order doesn't work the same as filter:
+
+  posts.order(:stamp).order(:name) # ORDER BY name
+
+The order_more method chains this way, though:
+
+  posts.order(:stamp).order_more(:name) # ORDER BY stamp, name
   
 You can also specify descending order
 
   posts.order(:stamp.desc) # ORDER BY stamp DESC
 
+=== Selecting Columns
+
+Selecting specific columns to be returned is also simple:
+
+  posts.select(:stamp) # SELECT stamp FROM posts
+  posts.select(:stamp, :name) # SELECT stamp, name FROM posts
+
+Chaining select works like order, not filter:
+
+  posts.select(:stamp).select(:name) # SELECT name FROM posts
+
+As you might expect, there is an order_more equivalent for select:
+
+  posts.select(:stamp).select_more(:name) # SELECT stamp, name FROM posts
+  
 === Deleting Records
 
 Deleting records from the table is done with delete:
@@ -300,7 +329,7 @@ Which is equivalent to the SQL:
   
 === Graphing Datasets
 
-When retrieving records from joined datasets, you get the results in a single hash, which is subject to clobbering:
+When retrieving records from joined datasets, you get the results in a single hash, which is subject to clobbering if you have columns with the same name in multiple tables:
 
   DB[:items].join(:order_items, :item_id =&gt; :id).first
   =&gt; {:id=&gt;(could be items.id or order_items.id), :item_id=&gt;order_items.order_id}
@@ -310,6 +339,30 @@ Using graph, you can split the result hashes into subhashes, one per join:
   DB[:items].graph(:order_items, :item_id =&gt; :id).first
   =&gt; {:items=&gt;{:id=&gt;items.id}, :order_items=&gt;{:id=&gt;order_items.id, :item_id=&gt;order_items.item_id}}
 
+== An aside: column references in Sequel
+
+Sequel expects column names to be specified using symbols. In addition, returned hashes always use symbols as their keys. This allows you to freely mix literal values and column references. For example, the two following lines produce equivalent SQL:
+
+  items.filter(:x =&gt; 1) #=&gt; &quot;SELECT * FROM items WHERE (x = 1)&quot; 
+  items.filter(1 =&gt; :x) #=&gt; &quot;SELECT * FROM items WHERE (1 = x)&quot; 
+
+=== Qualifying column names
+
+Column references can be qualified by using the double underscore special notation :table__column:
+
+  items.literal(:items__price) #=&gt; &quot;items.price&quot;
+
+=== Column aliases
+
+You can also alias columns by using the triple undersecore special notation :column___alias or :table__column___alias:
+
+  items.literal(:price___p) #=&gt; &quot;price AS p&quot;
+  items.literal(:items__price___p) #=&gt; &quot;items.price AS p&quot;
+
+Another way to alias columns is to use the #AS method:
+
+  items.literal(:price.as(:p)) #=&gt; &quot;price AS p&quot;
+
 == Sequel Models
 
 Models in Sequel are based on the Active Record pattern described by Martin Fowler (http://www.martinfowler.com/eaaCatalog/activeRecord.html). A model class corresponds to a table or a dataset, and an instance of that class wraps a single record in the model's underlying dataset.
@@ -357,17 +410,17 @@ You can also define a model class that does not have a primary key, but then you
 A model instance can also be fetched by specifying a condition:
 
   post = Post[:title =&gt; 'hello world']
-  post = Post.find(:num_comments.sql_number &lt; 10)
+  post = Post.find{|o| o.num_comments &lt; 10}
 
 === Iterating over records
 
-A model class lets you iterate over specific records by acting as a proxy to the underlying dataset. This means that you can use the entire Dataset API to create customized queries that return model instances, e.g.:
+A model class lets you iterate over subsets of records by proxying many methods to the underlying dataset. This means that you can use most of the Dataset API to create customized queries that return model instances, e.g.:
 
   Post.filter(:category =&gt; 'ruby').each{|post| p post}
 
 You can also manipulate the records in the dataset:
 
-  Post.filter(:num_comments.sql_number &lt; 7).delete
+  Post.filter{|o| o.num_comments &lt; 7}.delete
   Post.filter(:title.like(/ruby/)).update(:category =&gt; 'ruby')
 
 === Accessing record values
@@ -386,9 +439,9 @@ You can also change record values:
   post.title = 'hey there'
   post.save
 
-Another way to change values by using the #update_with_params method:
+Another way to change values by using the #update method:
 
-  post.update_with_params(:title =&gt; 'hey there')
+  post.update(:title =&gt; 'hey there')
 
 === Creating new records
 
@@ -404,7 +457,7 @@ Another way is to construct a new instance and save it:
 
 You can also supply a block to Model.new and Model.create:
 
-  post = Post.create {|p| p.title = 'hello world'}
+  post = Post.create{|p| p.title = 'hello world'}
 
   post = Post.new do |p|
     p.title = 'hello world'
@@ -453,14 +506,6 @@ Associations are used in order to specify relationships between model classes th
     many_to_many :tags
   end
 
-You can also use the ActiveRecord names for these associations:
-
-  class Post &lt; Sequel::Model
-    belongs_to :author
-    has_many :comments
-    has_and_belongs_to_many :tags
-  end
-
 many_to_one creates a getter and setter for each model object:
 
   class Post &lt; Sequel::Model
@@ -518,7 +563,7 @@ Associations can be eagerly loaded via .eager and the :eager association option.
   Post.eager(:person).all
 
   # eager is a dataset method, so it works with filters/orders/limits/etc.
-  Post.filter(:topic.sql_string &gt; 'M').order(:date).limit(5).eager(:person).all
+  Post.filter{|o| o.topic &gt; 'M'}.order(:date).limit(5).eager(:person).all
   
   person = Person.first
   # Eager loading via :eager (will eagerly load the tags for this person's posts)
@@ -562,7 +607,7 @@ The obvious way to add table-wide logic is to define class methods to the model
 
   class Post &lt; Sequel::Model
     def self.posts_with_few_comments
-      filter(:num_comments.sql_number &lt; 30)
+      filter{|o| o.num_comments &lt; 30}
     end
 
     def self.clean_posts_with_few_comments
@@ -574,7 +619,7 @@ You can also implement table-wide logic by defining methods on the dataset:
 
   class Post &lt; Sequel::Model
     def_dataset_method(:posts_with_few_comments) do
-      filter(:num_comments.sql_number &lt; 30)
+      filter{|o| o.num_comments &lt; 30}
     end
 
     def_dataset_method(:clean_posts_with_few_comments) do
@@ -584,48 +629,29 @@ You can also implement table-wide logic by defining methods on the dataset:
 
 This is the recommended way of implementing table-wide operations, and allows you to have access to your model API from filtered datasets as well:
 
-  Post.filter(:category =&gt; 'ruby').clean_old_posts
+  Post.filter(:category =&gt; 'ruby').clean_posts_with_few_comments
 
 Sequel models also provide a short hand notation for filters:
 
   class Post &lt; Sequel::Model
-    subset(:posts_with_few_comments, :num_comments.sql_number &lt; 30)
-    subset :invisible, :visible =&gt; false
-  end
-
-=== Defining the underlying schema
-
-Model classes can also be used as a place to define your table schema and control it. The schema DSL is exactly the same provided by Sequel::Schema::Generator:
-
-  class Post &lt; Sequel::Model
-    set_schema do
-      primary_key :id
-      text :title
-      text :category
-      foreign_key :author_id, :table =&gt; :authors
-    end
+    subset(:posts_with_few_comments){|o| o.num_comments &lt; 30}
+    subset :invisible, ~:visible
   end
 
-You can then create the underlying table, drop it, or recreate it:
-
-  Post.table_exists?
-  Post.create_table
-  Post.drop_table
-  Post.create_table! # drops the table if it exists and then recreates it
-
 === Basic Model Validations
 
 To assign default validations to a sequel model:
 
   class MyModel &lt; Sequel::Model
     validates do
-      format_of...
-      presence_of...
       acceptance_of...
       confirmation_of...
+      format_of...
+      format_of...
+      presence_of...
       length_of...
+      not_string ...
       numericality_of...
-      format_of...
       each...
     end
   end</diff>
      <filename>README.rdoc</filename>
    </modified>
    <modified>
      <diff>@@ -16,7 +16,7 @@ a different block when eager loading via Dataset#eager. Association blocks are
 useful for things like:
 
   Artist.one_to_many :gold_albums, :class=&gt;:Album do |ds|
-    ds.filter(:copies_sold.sql_number &gt; 500000)
+    ds.filter{|o| o.copies_sold &gt; 500000}
   end
 
 There are a whole bunch of options for changing how the association is eagerly
@@ -124,7 +124,7 @@ a swiss army chainsaw.
 Sequel supports the same callbacks that ActiveRecord does: :before_add,
 :before_remove, :after_add, and :after_remove. It also supports a
 callback that ActiveRecord does not, :after_load, which is called
-after the association has been loaded (when lazy loading).
+after the association has been loaded.
 
 Each of these options can be a Symbol specifying an instance method
 that takes one argument (the associated object), or a Proc that takes
@@ -150,7 +150,7 @@ otherwise modified:
   class Author &lt; Sequel::Model
     one_to_many :authorships
   end
-  Author.first.authorships_dataset.filter(:number.sql_number &lt; 10).first
+  Author.first.authorships_dataset.filter{|o| o.number &lt; 10}.first
  
 You can extend a dataset with a module easily with :extend:
 
@@ -180,18 +180,6 @@ model object, you'll have to use a closure:
   end
   Author.first.authorships_dataset.find_or_create_by_name('Bob')
 
-You can cheat if you want to:
-
-  module FindOrCreate
-    def find_or_create(vals)
-      # Exploits the fact that Sequel filters are ruby objects that
-      # can be introspected.
-      author_id = @opts[:where].args[1]
-      first(vals) || \
-        @opts[:models][nil].create(vals.merge(:author_id=&gt;author_id))
-    end 
-  end
-
 ===has_many :through associations
 
 many_to_many handles the usual case of a has_many :through with a belongs_to in
@@ -310,7 +298,7 @@ Sequel::Model:
   Firm.find(:first).invoices
 
 It is significantly more code in Sequel Model, but quite a bit of it is setting
-the intermediate associate record (the client) and the reciprocal association
+the intermediate associated record (the client) and the reciprocal association
 in the associations cache for each object, which ActiveRecord won't do for you.
 The reason you would want to do this is that then firm.invoices.first.firm or
 firm.invoices.first.client doesn't do another query to get the firm/client.
@@ -551,7 +539,7 @@ node.children.  You can even eager load the relationship up to a certain depth:
   # Eager load three generations of generations of children for a given node 
   Node.filter(:id=&gt;1).eager(:children=&gt;{:children=&gt;:children}).all.first
   # Load parents and grandparents for a group of nodes
-  Node.filter(:id.sql_number &lt; 10).eager(:parent=&gt;:parent).all
+  Node.filter{|o| o.id &lt; 10}.eager(:parent=&gt;:parent).all
 
 What if you want to get all ancestors up to the root node, or all descendents,
 without knowing the depth of the tree?</diff>
      <filename>doc/advanced_associations.rdoc</filename>
    </modified>
    <modified>
      <diff>@@ -29,7 +29,7 @@ Without a filename argument, the sqlite adapter will setup a new sqlite database
   DB.fetch(&quot;SELECT name FROM users&quot;) do |row|
     p r[:name]
   end
-  dataset = DB[&quot;SELECT age FROM users&quot;]
+  dataset = DB[&quot;SELECT age FROM users WHERE name = ?&quot;, name]
   dataset.print
   dataset.map(:age)
 
@@ -70,17 +70,17 @@ Without a filename argument, the sqlite adapter will setup a new sqlite database
   dataset.map {|r| r[:name]}
   dataset.map(:name) # same effect as above
 
-  dataset.inject {|sum, r| sum + r[:value]}
+  dataset.inject(0){|sum, r| sum + r[:value]}
 
 == Filtering (see also doc/dataset_filtering.rdoc)
 
   dataset.filter(:name =&gt; 'abc')
   dataset.filter('name = ?', 'abc')
-  dataset.filter(:value.sql_number &gt; 100)
-  dataset.exclude(:value.sql_number &lt;= 100)
+  dataset.filter{|o| o.value &gt; 100}
+  dataset.exclude{|o| o.value &lt;= 100}
 
   dataset.filter(:value =&gt; 50..100)
-  dataset.where((:value.sql_number &gt;= 50) &amp; (:value.sql_number &lt;= 100))
+  dataset.where{|o| (o.value &gt;= 50) &amp; (o.value &lt;= 100)}
 
   dataset.where('value IN ?', [50,75,100])
 
@@ -91,11 +91,9 @@ Without a filename argument, the sqlite adapter will setup a new sqlite database
   # Filter using a subquery
   dataset.filter('price &gt; ?', dataset.select('AVG(price) + 100'))
 
-=== Advanced filtering using ruby expressions without blocks
+=== Advanced filtering using ruby expressions
 
-Available as of Sequel 2.0:
-
-  DB[:items].filter(:price.sql_number &lt; 100).sql 
+  DB[:items].filter{|o| o.price &lt; 100}.sql 
   #=&gt; &quot;SELECT * FROM items WHERE (price &lt; 100)&quot; 
 
   DB[:items].filter(:name.like('AL%')).sql 
@@ -103,7 +101,7 @@ Available as of Sequel 2.0:
 
 There's support for nested expressions with AND, OR and NOT:
 
-  DB[:items].filter((:x.sql_number &gt; 5) &amp; (:y.sql_number &gt; 10)).sql 
+  DB[:items].filter{|o| (o.x &gt; 5) &amp; (o.y &gt; 10)}.sql 
   #=&gt; &quot;SELECT * FROM items WHERE ((x &gt; 5) AND (y &gt; 10))&quot; 
 
   DB[:items].filter({:x =&gt; 1, :y =&gt; 2}.sql_or &amp; ~{:z =&gt; 3}).sql 
@@ -114,7 +112,7 @@ You can use arithmetic operators and specify SQL functions:
   DB[:items].filter((:x + :y) &gt; :z).sql 
   #=&gt; &quot;SELECT * FROM items WHERE ((x + y) &gt; z)&quot; 
 
-  DB[:items].filter(:price - 100 &lt; :AVG.sql_function(:price)).sql 
+  DB[:items].filter{|o| :price - 100 &lt; o.AVG(:price)}.sql 
   #=&gt; &quot;SELECT * FROM items WHERE ((price - 100) &lt; AVG(price))&quot; 
 
 == Ordering
@@ -165,9 +163,10 @@ You can use arithmetic operators and specify SQL functions:
 
   DB.create_table :items do
     primary_key :id
-    text :name, :unique =&gt; true, :null =&gt; false
+    String :name, :unique =&gt; true, :null =&gt; false
     boolean :active, :default =&gt; true
     foreign_key :category_id, :categories
+    Time :created_at
     
     index :grade
   end
@@ -175,14 +174,13 @@ You can use arithmetic operators and specify SQL functions:
   DB.drop_table :items
 
   DB.create_table :test do
-    varchar :zipcode, :size =&gt; 10
+    String :zipcode, :size =&gt; 10
     enum :system, :elements =&gt; ['mac', 'linux', 'windows']
   end
 
 == Aliasing
 
   DB[:items].select(:name.as(:item_name))
-  DB[:items].select(:name =&gt; :item_name)
   DB[:items].select(:name___item_name)
   DB[:items___items_table].select(:items_table__name___item_name)
   # =&gt; &quot;SELECT items_table.name AS item_name FROM items AS items_table&quot;
@@ -221,5 +219,5 @@ Miscellaneous:
   dataset.where(:name =&gt; 'sequel').exists #=&gt; &quot;EXISTS ( SELECT 1 FROM items WHERE name = 'sequel' )&quot;
   dataset.print #=&gt; pretty table print to $stdout
   dataset.columns #=&gt; array of columns in the result set, does a SELECT
-  DB.schema_for_table(:items) =&gt; [[:id, {:type=&gt;:integer, ...}], [:name, {:type=&gt;:string, ...}], ...]
-                                 # Works on PostgreSQL, MySQL, SQLite, and possibly elsewhere
+  DB.schema(:items) =&gt; [[:id, {:type=&gt;:integer, ...}], [:name, {:type=&gt;:string, ...}], ...]
+                       # Works on PostgreSQL, MySQL, SQLite, and JDBC</diff>
      <filename>doc/cheat_sheet.rdoc</filename>
    </modified>
    <modified>
      <diff>@@ -14,33 +14,9 @@ In order to prevent SQL injection, you can replace literal values with question
   items.filter('category = ?', 'ruby').sql
   #=&gt; &quot;SELECT * FROM items WHERE category = 'ruby'&quot;
 
-== An aside: column references in Sequel
-
-Sequel expects column names to be specified using symbols. In addition, tuples always use symbols as their keys. This allows you to freely mix literal values and column references. For example, the two following lines produce equivalent SQL:
-
-  items.filter(:x =&gt; 1) #=&gt; &quot;SELECT * FROM items WHERE (x = 1)&quot;
-  items.filter(1 =&gt; :x) #=&gt; &quot;SELECT * FROM items WHERE (1 = x)&quot;
-
-=== Qualifying column names
-
-Column references can be qualified by using the double underscore special notation :table__column:
-
-  items.literal(:items__price) #=&gt; &quot;items.price&quot;
-
-=== Column aliases
-
-You can also alias columns by using the triple undersecore special notation :column___alias or :table__column___alias:
-
-  items.literal(:price___p) #=&gt; &quot;price AS p&quot;
-  items.literal(:items__price___p) #=&gt; &quot;items.price AS p&quot;
-
-Another way to alias columns is to use the #AS method:
-
-  items.literal(:price.as(:p)) #=&gt; &quot;price AS p&quot;
-
 === Specifying SQL functions
 
-Sequel also allows you to specify functions by using the Symbol#[] method:
+Sequel also allows you to specify functions by using the Symbol#sql_function method (and the Symbol#[] method on ruby 1.8):
 
   items.literal(:avg.sql_function(:price)) #=&gt; &quot;avg(price)&quot;
 
@@ -76,10 +52,10 @@ Ranges (both inclusive and exclusive) can also be used:
 
 == Filtering using expressions
 
-New in Sequel 2.0 is the ability to use ruby expressions directly in the call to filter, without using a block:
+Sequel allows you to use ruby expressions directly in the call to filter, without using a block:
 
-  items.filter(:price.sql_number &lt; 100).sql
-  #=&gt; &quot;SELECT * FROM items WHERE (price &lt; 100) 
+  items.filter(:price * 2 &lt; 50).sql
+  #=&gt; &quot;SELECT * FROM items WHERE ((price * 2) &lt; 50) 
 
 This works for the standard inequality and arithmetic operators:
 
@@ -133,12 +109,12 @@ You can use the negation operator (~) in most cases:
 
 You can also compare against other columns:
 
-  items.filter(:credit.sql_number &gt; :debit).sql
+  items.filter{|o| o.credit &gt; :debit}.sql
   #=&gt; &quot;SELECT * FROM items WHERE (credit &gt; debit)
 
 Or against SQL functions:
 
-  items.filter(:price - 100 &lt; :max.sql_function(:price)).sql
+  items.filter{|o| :price - 100 &lt; o.max(:price)}.sql
   #=&gt; &quot;SELECT * FROM items WHERE ((price - 100) &lt; max(price))&quot;
 
 == String search functions</diff>
      <filename>doc/dataset_filtering.rdoc</filename>
    </modified>
    <modified>
      <diff>@@ -7,3 +7,23 @@ The recommended way to set up schema modifications in Sequel is through migratio
 The format of the individual migration files themselves is explained in the Sequel::Migration documentation.  Each migration file contains a single migration class.  The migration class acts a proxy for the related database (given on the command line if the sequel command line tool is used, or by the db argument to Sequel::Migration#apply if the API is used). The methods that can be used inside Sequel::Migration#up or Sequel::Migration#down are just Sequel::Database instance methods, such as create_table, drop_table, and alter_table.  Most database methods that alter the schema take regular arguments, but create_table and alter_table take a block.  The methods you can use inside the create_table block are documented in Sequel::Schema::Generator, and the methods you can use inside the alter_table block are documented in Sequel::Schema::AlterTableGenerator.
 
 Migrations are not required, you can just call the schema modification methods directly on the database object.  This is often done in test code and examples.  However, it is recommended that you use the migration framework unless the database schema will not be changing in the future, as it provides a way to easily handle modifications to existing database schema.
+
+Also, new in Sequel 2.10 is the ability to have database independent migrations using ruby classes as types.  When you use a ruby class as a type, Sequel translates it to the most comparable type in the database you are using.  Here's an example using all supported types:
+
+    DB.create_table(:cats) do
+      primary_key :id, :type=&gt;Integer # integer
+      String :a                       # varchar(255)
+      column :b, File                 # blob
+      Fixnum :c                       # integer
+      foreign_key :d, :other_table, :type=&gt;Bignum # bigint
+      Float :e                        # double precision
+      BigDecimal :f                   # numeric
+      Date :g                         # date
+      DateTime :h                     # timestamp
+      Time :i                         # timestamp
+      Numeric :j                      # numeric
+      TrueClass :k                    # boolean
+      FalseClass :l                   # boolean
+    end
+
+Basically, if you use one of the ruby classes above, it will translate into a database specific type.  If you use a lowercase method, symbol, or string to specify the type, Sequel won't attempt to translate it.</diff>
      <filename>doc/schema.rdoc</filename>
    </modified>
    <modified>
      <diff>@@ -40,11 +40,11 @@ module Sequel
     #   ds.first(:id=&gt;2) =&gt; {:id=&gt;2}
     #   ds.first(&quot;id = 3&quot;) =&gt; {:id=&gt;3}
     #   ds.first(&quot;id = ?&quot;, 4) =&gt; {:id=&gt;4}
-    #   ds.first{:id.sql_number &gt; 2} =&gt; {:id=&gt;5}
-    #   ds.order(:id).first{:id.sql_number &gt; 2} =&gt; {:id=&gt;3}
-    #   ds.first{:id.sql_number &gt; 2} =&gt; {:id=&gt;5}
-    #   ds.first(&quot;id &gt; ?&quot;, 4){:id.sql_number &lt; 6) =&gt; {:id=&gt;5}
-    #   ds.order(:id).first(2){:id.sql_number &lt; 2} =&gt; [{:id=&gt;1}]
+    #   ds.first{|o| o.id &gt; 2} =&gt; {:id=&gt;5}
+    #   ds.order(:id).first{|o| o.id &gt; 2} =&gt; {:id=&gt;3}
+    #   ds.first{|o| o.id &gt; 2} =&gt; {:id=&gt;5}
+    #   ds.first(&quot;id &gt; ?&quot;, 4){|o| o.id &lt; 6} =&gt; {:id=&gt;5}
+    #   ds.order(:id).first(2){|o| o.id &lt; 2} =&gt; [{:id=&gt;1}]
     def first(*args, &amp;block)
       ds = block ? filter(&amp;block) : self
 </diff>
      <filename>lib/sequel_core/dataset/convenience.rb</filename>
    </modified>
    <modified>
      <diff>@@ -5,13 +5,13 @@ module Sequel
     #
     #   dataset = DB[:items].query do
     #     select :x, :y, :z
-    #     filter((:x.sql_number &gt; 1) &amp; (:y.sql_number &gt; 2))
+    #     filter{|o| (o.x &gt; 1) &amp; (o.y &gt; 2)}
     #     order :z.desc
     #   end
     #
     # Which is the same as:
     #
-    #  dataset = DB[:items].select(:x, :y, :z).filter((:x.sql_number &gt; 1) &amp; (:y.sql_number &gt; 2)).order(:z.desc)
+    #  dataset = DB[:items].select(:x, :y, :z).filter{|o| (o.x &gt; 1) &amp; (o.y &gt; 2)}.order(:z.desc)
     #
     # Note that inside a call to query, you cannot call each, insert, update,
     # or delete (or any method that calls those), or Sequel will raise an</diff>
      <filename>lib/sequel_core/dataset/query.rb</filename>
    </modified>
    <modified>
      <diff>@@ -76,7 +76,7 @@ module Sequel
 
     # Formats a DELETE statement using the given options and dataset options.
     # 
-    #   dataset.filter(:price.sql_number &gt;= 100).delete_sql #=&gt;
+    #   dataset.filter{|o| o.price &gt;= 100}.delete_sql #=&gt;
     #     &quot;DELETE FROM items WHERE (price &gt;= 100)&quot;
     def delete_sql(opts = nil)
       opts = opts ? @opts.merge(opts) : @opts
@@ -163,13 +163,13 @@ module Sequel
     #     &quot;SELECT * FROM items WHERE price &lt; 100&quot;
     #   dataset.filter(:active).sql #=&gt;
     #     &quot;SELECT * FROM items WHERE :active
-    #   dataset.filter(:price.sql_number &lt; 100).sql #=&gt;
+    #   dataset.filter{|o| o.price &lt; 100}.sql #=&gt;
     #     &quot;SELECT * FROM items WHERE (price &lt; 100)&quot;
     # 
     # Multiple filter calls can be chained for scoping:
     #
     #   software = dataset.filter(:category =&gt; 'software')
-    #   software.filter(price &lt; 100).sql #=&gt;
+    #   software.filter{|o| o.price &lt; 100}.sql #=&gt;
     #     &quot;SELECT * FROM items WHERE ((category = 'software') AND (price &lt; 100))&quot;
     #
     # See doc/dataset_filters.rdoc for more examples and details.</diff>
      <filename>lib/sequel_core/dataset/sql.rb</filename>
    </modified>
    <modified>
      <diff>@@ -6,9 +6,9 @@ module Sequel
   #     def up
   #       create_table :sessions do
   #         primary_key :id
-  #         varchar   :session_id, :size =&gt; 32, :unique =&gt; true
-  #         timestamp :created_at
-  #         text      :data
+  #         String :session_id, :size =&gt; 32, :unique =&gt; true
+  #         DateTime :created_at
+  #         text :data
   #       end
   #     end
   # 
@@ -21,7 +21,7 @@ module Sequel
   #   class AlterItems &lt; Sequel::Migration
   #     def up
   #       alter_table :items do
-  #         add_column :category, :text, :default =&gt; 'ruby'
+  #         add_column :category, String, :default =&gt; 'ruby'
   #       end
   #     end
   # </diff>
      <filename>lib/sequel_core/migration.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>392963a028180cd21c5bfc9d5c0b40d668c0e30f</id>
    </parent>
  </parents>
  <author>
    <name>Jeremy Evans</name>
    <email>code@jeremyevans.net</email>
  </author>
  <url>http://github.com/jeremyevans/sequel/commit/ce1c70fa0db143d2eaf37487e2b3745a38645bde</url>
  <id>ce1c70fa0db143d2eaf37487e2b3745a38645bde</id>
  <committed-date>2009-01-30T18:58:28-08:00</committed-date>
  <authored-date>2009-01-30T18:58:28-08:00</authored-date>
  <message>Documentation cleanup

Most of this is using the block argument provided by filter instead
of sql_string or sql_number.

This also moves the column references via symbols documentation from
the dataset filtering rdoc to the README.

Add info on the new database independent migrations to the schema
rdoc.</message>
  <tree>26fc6d825b5ca59b3fef6d0b11daef84ae043698</tree>
  <committer>
    <name>Jeremy Evans</name>
    <email>code@jeremyevans.net</email>
  </committer>
</commit>
