X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FCursor.pm;h=60df3792a0e262ec9e19cba2c72a42bfe8456398;hb=9901aad73ff9dc45b426534fe406c102fb9fb77c;hp=c9dedf652d127640448d4dd1301fcb6ede29ed3c;hpb=dbaee7482fe6ff190e8ae53d609d0294b911339b;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/Cursor.pm b/lib/DBIx/Class/Storage/DBI/Cursor.pm index c9dedf6..60df379 100644 --- a/lib/DBIx/Class/Storage/DBI/Cursor.pm +++ b/lib/DBIx/Class/Storage/DBI/Cursor.pm @@ -49,6 +49,32 @@ sub new { return bless ($new, $class); } +=head2 as_query + +=over 4 + +=item Arguments: none + +=item Return Value: \[ $sql, @bind ] + +=back + +Returns the SQL statement and bind vars associated with the invocant. + +=cut + +sub as_query { + my $self = shift; + + my $storage = $self->{storage}; + my $sql_maker = $storage->sql_maker; + local $sql_maker->{for}; + + my @args = $storage->_select_args(@{$self->{args}}); + my ($sql, $bind) = $storage->_prep_for_execute(@args[0 .. 2], [@args[4 .. $#args]]); + return \[ "($sql)", @$bind ]; +} + =head2 next =over 4 @@ -59,7 +85,8 @@ sub new { =back -Advances the cursor to the next row and returns an arrayref of column values. +Advances the cursor to the next row and returns an array of column +values (the result of L method). =cut @@ -123,7 +150,10 @@ sub _dbh_all { sub all { my ($self) = @_; - return $self->SUPER::all if $self->{attrs}{rows}; + if ($self->{attrs}{software_limit} + && ($self->{attrs}{offset} || $self->{attrs}{rows})) { + return $self->SUPER::all; + } $self->{storage}->dbh_do($self->can('_dbh_all'), $self); } @@ -163,6 +193,7 @@ sub DESTROY { my ($self) = @_; # None of the reasons this would die matter if we're in DESTROY anyways + local $@; eval { $self->{sth}->finish if $self->{sth} && $self->{sth}->{Active} }; }