Re-added software-based LIMIT support for non-LIMIT-supporting databases
Andy Grundman [Fri, 12 Aug 2005 21:05:02 +0000 (21:05 +0000)]
lib/DBIx/Class/Storage/DBI.pm
lib/DBIx/Class/Storage/DBI/Cursor.pm

index 50561d1..ad901c0 100644 (file)
@@ -126,7 +126,13 @@ sub select {
   if (ref $condition eq 'SCALAR') {
     $order = $1 if $$condition =~ s/ORDER BY (.*)$//i;
   }
-  my ($rv, $sth, @bind) = $self->_execute('select', $attrs->{bind}, $ident, $select, $condition, $order, $attrs->{rows}, $attrs->{offset});
+  my @args = ('select', $attrs->{bind}, $ident, $select, $condition, $order);
+  if ($self->sql_maker->_default_limit_syntax eq "GenericSubQ") {
+    $attrs->{software_limit} = 1;
+  } else {
+    push @args, $attrs->{rows}, $attrs->{offset};
+  }
+  my ($rv, $sth, @bind) = $self->_execute(@args);
   return $self->cursor->new($sth, \@bind, $attrs);
 }
 
@@ -136,7 +142,13 @@ sub select_single {
   if (ref $condition eq 'SCALAR') {
     $order = $1 if $$condition =~ s/ORDER BY (.*)$//i;
   }
-  my ($rv, $sth, @bind) = $self->_execute('select', $attrs->{bind}, $ident, $select, $condition, $order, 1, $attrs->{offset});
+  my @args = ('select', $attrs->{bind}, $ident, $select, $condition, $order);
+  if ($self->sql_maker->_default_limit_syntax eq "GenericSubQ") {
+    $attrs->{software_limit} = 1;
+  } else {
+    push @args, 1, $attrs->{offset};
+  }  
+  my ($rv, $sth, @bind) = $self->_execute(@args);
   return $sth->fetchrow_array;
 }
 
index 143425b..67476c7 100644 (file)
@@ -24,6 +24,11 @@ sub next {
   my $sth = $self->{sth};
   unless ($self->{live_sth}) {
     $sth->execute(@{$self->{args} || []});
+    if ($self->{attrs}{software_limit}) {
+      if (my $offset = $self->{attrs}{offset}) {
+        $sth->fetch for 1 .. $offset;
+      }
+    }
     $self->{live_sth} = 1;
   }
   my @row = $sth->fetchrow_array;