<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,5 +1,7 @@
 === HEAD
 
+* Make Dataset#from_self take an options hash and respect an :alias option, giving the alias to use (Phrogz)
+
 * Make the JDBC adapter accept a :convert_types option to turn off Java type conversion and double performance (jeremyevans)
 
 * Slight increase in ConnectionPool performance (jeremyevans)
@@ -12,7 +14,7 @@
 
 * Significant improvements to the ODBC and ADO adapters in general (jeremyevans)
 
-* The ADO adapter no longer attempts to use database transations, since they never worked (jeremyevans)
+* The ADO adapter no longer attempts to use database transactions, since they never worked (jeremyevans)
 
 * Much better support for Microsoft SQL Server using the ADO, ODBC, and JDBC adapters (jeremyevans)
 </diff>
      <filename>CHANGELOG</filename>
    </modified>
    <modified>
      <diff>@@ -272,14 +272,16 @@ module Sequel
     end
 
     # Returns a dataset selecting from the current dataset.
+    # Supplying the :alias option controls the name of the result.
     #
-    #   ds = DB[:items].order(:name)
-    #   ds.sql #=&gt; &quot;SELECT * FROM items ORDER BY name&quot;
-    #   ds.from_self.sql #=&gt; &quot;SELECT * FROM (SELECT * FROM items ORDER BY name)&quot;
-    def from_self
+    #   ds = DB[:items].order(:name).select(:id, :name)
+    #   ds.sql                         #=&gt; &quot;SELECT id,name FROM items ORDER BY name&quot;
+    #   ds.from_self.sql               #=&gt; &quot;SELECT * FROM (SELECT id, name FROM items ORDER BY name) AS 't1'&quot;
+    #   ds.from_self(:alias=&gt;:foo).sql #=&gt; &quot;SELECT * FROM (SELECT id, name FROM items ORDER BY name) AS 'foo'&quot;
+    def from_self(opts={})
       fs = {}
       @opts.keys.each{|k| fs[k] = nil} 
-      clone(fs).from(self)
+      clone(fs).from(opts[:alias] ? as(opts[:alias]) : self)
     end
 
     # SQL fragment specifying an SQL function call</diff>
      <filename>lib/sequel/dataset/sql.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1399,6 +1399,25 @@ context &quot;Dataset#empty?&quot; do
   end
 end
 
+context &quot;Dataset#from_self&quot; do
+  before do
+    @ds = Sequel::Dataset.new(nil).from(:test).select(:name).limit(1)
+  end
+  specify &quot;should set up a default alias&quot; do
+    @ds.from_self.sql.should == 'SELECT * FROM (SELECT name FROM test LIMIT 1) AS t1'
+  end
+  specify &quot;should modify only the new dataset&quot; do
+    @ds.from_self.select(:bogus).sql.should == 'SELECT bogus FROM (SELECT name FROM test LIMIT 1) AS t1'
+  end
+  specify &quot;should use the user-specified alias&quot; do
+    @ds.from_self(:alias=&gt;:some_name).sql.should == 'SELECT * FROM (SELECT name FROM test LIMIT 1) AS some_name'
+  end
+  specify &quot;should use the user-specified alias for joins&quot; do
+    @ds.from_self(:alias=&gt;:some_name).inner_join(:posts, :alias=&gt;:name).sql.should == \
+      'SELECT * FROM (SELECT name FROM test LIMIT 1) AS some_name INNER JOIN posts ON (posts.alias = some_name.name)'
+  end
+end
+
 context &quot;Dataset#join_table&quot; do
   before do
     @d = MockDataset.new(nil).from(:items)</diff>
      <filename>spec/core/dataset_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>af2ba1b780afd7013dfd1321dfd708f9816eeb50</id>
    </parent>
  </parents>
  <author>
    <name>Jeremy Evans</name>
    <email>code@jeremyevans.net</email>
  </author>
  <url>http://github.com/jeremyevans/sequel/commit/3c9b0912e3d9a995828f23271b7de59b64455ffe</url>
  <id>3c9b0912e3d9a995828f23271b7de59b64455ffe</id>
  <committed-date>2009-07-08T11:38:56-07:00</committed-date>
  <authored-date>2009-07-08T11:38:56-07:00</authored-date>
  <message>Make Dataset#from_self take an options hash and respect an :alias option, giving the alias to use</message>
  <tree>775778e99c3480fc46c3650deaad8d974e440731</tree>
  <committer>
    <name>Jeremy Evans</name>
    <email>code@jeremyevans.net</email>
  </committer>
</commit>
