X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FSybase%2FASE.pm;h=3915eb2e2b13520743299ed1cf78609a44c6102c;hb=47d7b769c034e04989840b1efc2f5991518cff23;hp=346dcd979b58b94806a96e155cbb8f09283c68b6;hpb=4b8a53eabdb1629bacdb95f04ca8fc3718ca7c58;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/Sybase/ASE.pm b/lib/DBIx/Class/Storage/DBI/Sybase/ASE.pm index 346dcd9..3915eb2 100644 --- a/lib/DBIx/Class/Storage/DBI/Sybase/ASE.pm +++ b/lib/DBIx/Class/Storage/DBI/Sybase/ASE.pm @@ -18,7 +18,7 @@ use Try::Tiny; use Context::Preserve 'preserve_context'; use namespace::clean; -__PACKAGE__->sql_limit_dialect ('RowCountOrGenericSubQ'); +__PACKAGE__->sql_limit_dialect ('GenericSubQ'); __PACKAGE__->sql_quote_char ([qw/[ ]/]); __PACKAGE__->datetime_parser_type( 'DBIx::Class::Storage::DBI::Sybase::ASE::DateTime::Format' @@ -254,8 +254,7 @@ sub _is_lob_column { } sub _prep_for_execute { - my $self = shift; - my $ident = $_[1]; + my ($self, $op, $ident, $args) = @_; # ### This is commented out because all tests pass. However I am leaving it @@ -274,7 +273,20 @@ sub _prep_for_execute { # = $self->_parent_storage->_perform_autoinc_retrieval #if ($op eq 'insert' or $op eq 'update') and $self->_parent_storage; - my ($sql, $bind) = $self->next::method (@_); + my $limit; # extract and use shortcut on limit without offset + if ($op eq 'select' and ! $args->[4] and $limit = $args->[3]) { + $args = [ @$args ]; + $args->[3] = undef; + } + + my ($sql, $bind) = $self->next::method($op, $ident, $args); + + # $limit is already sanitized by now + $sql = join( "\n", + "SET ROWCOUNT $limit", + $sql, + "SET ROWCOUNT 0", + ) if $limit; if (my $identity_col = $self->_perform_autoinc_retrieval) { $sql .= "\n" . $self->_fetch_identity_sql($ident, $identity_col) @@ -1021,9 +1033,9 @@ For example, this will not work: $schema->txn_do(sub { my $rs = $schema->resultset('Book'); - while (my $row = $rs->next) { + while (my $result = $rs->next) { $schema->resultset('MetaData')->create({ - book_id => $row->id, + book_id => $result->id, ... }); }