From: Peter Rabbitson <ribasushi@cpan.org>
Date: Thu, 29 Mar 2012 02:53:28 +0000 (+0200)
Subject: Simplify 3-query skimming limits to omit the last redundant limit
X-Git-Tag: v0.08197~37^2~10
X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=1b07861d3456bd1695dd7e0c43a07c7efe06cdb2;p=dbsrgits%2FDBIx-Class.git

Simplify 3-query skimming limits to omit the last redundant limit
---

diff --git a/lib/DBIx/Class/SQLMaker/LimitDialects.pm b/lib/DBIx/Class/SQLMaker/LimitDialects.pm
index dd6bc6d..dde627b 100644
--- a/lib/DBIx/Class/SQLMaker/LimitDialects.pm
+++ b/lib/DBIx/Class/SQLMaker/LimitDialects.pm
@@ -445,8 +445,7 @@ sub _Top {
     $lim->{order_by_middle},
   ) if $offset;
 
-  $sql = sprintf ('SELECT TOP %u %s FROM ( %s ) %s %s',
-    $rows,
+  $sql = sprintf ('SELECT %s FROM ( %s ) %s %s',
     $lim->{selection_outer},
     $sql,
     $lim->{quoted_rs_alias},
@@ -502,12 +501,11 @@ sub _FetchFirst {
   ) if $offset;
 
 
-  $sql = sprintf ('SELECT %s FROM ( %s ) %s %s FETCH FIRST %u ROWS ONLY',
+  $sql = sprintf ('SELECT %s FROM ( %s ) %s %s',
     $lim->{selection_outer},
     $sql,
     $lim->{quoted_rs_alias},
     $lim->{order_by_requested},
-    $rows,
   ) if $offset and (
     $lim->{order_by_requested} or $lim->{selection_middle} ne $lim->{selection_outer}
   );
diff --git a/t/sqlmaker/limit_dialects/fetch_first.t b/t/sqlmaker/limit_dialects/fetch_first.t
index 3616d6c..fcb08d5 100644
--- a/t/sqlmaker/limit_dialects/fetch_first.t
+++ b/t/sqlmaker/limit_dialects/fetch_first.t
@@ -141,7 +141,6 @@ for my $ord_set (
           FETCH FIRST 2 ROWS ONLY
         ) me
       ORDER BY $ord_set->{order_req}
-      FETCH FIRST 2 ROWS ONLY
     )",
     [ [ { sqlt_datatype => 'varchar', sqlt_size => 100, dbic_colname => 'source' }
         => 'Library' ] ],
@@ -169,7 +168,6 @@ is_same_sql_bind (
             FETCH FIRST 2 ROWS ONLY
           ) me
         ORDER BY ORDER__BY__1
-        FETCH FIRST 2 ROWS ONLY
       ) me
       JOIN owners owner ON owner.id = me.owner
     WHERE ( source = ? )
diff --git a/t/sqlmaker/limit_dialects/toplimit.t b/t/sqlmaker/limit_dialects/toplimit.t
index 31a8b09..8ac32fc 100644
--- a/t/sqlmaker/limit_dialects/toplimit.t
+++ b/t/sqlmaker/limit_dialects/toplimit.t
@@ -166,8 +166,7 @@ for my $ord_set (
 
   is_same_sql_bind(
     $books_45_and_owners->search ({}, {order_by => $ord_set->{order_by}})->as_query,
-    "(SELECT TOP 2
-          id, source, owner, price, owner__id, owner__name
+    "(SELECT id, source, owner, price, owner__id, owner__name
         FROM (
           SELECT TOP 2
               id, source, owner, price, owner__id, owner__name$o_sel
@@ -193,7 +192,7 @@ is_same_sql_bind (
   $books_45_and_owners->search ({}, { group_by => 'title', order_by => 'title' })->as_query,
   '(SELECT me.id, me.source, me.owner, me.price, owner.id, owner.name
       FROM (
-        SELECT TOP 2 id, source, owner, price, ORDER__BY__1 AS title
+        SELECT id, source, owner, price, ORDER__BY__1 AS title
           FROM (
             SELECT TOP 2
                 id, source, owner, price, ORDER__BY__1