From: Peter Rabbitson Date: Mon, 1 Apr 2013 06:16:09 +0000 (+0200) Subject: Simplify _select_args_to_query - contortions not needed since 0e773352 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=b928a9d581500f03057ead793395bba573709797;p=dbsrgits%2FDBIx-Class-Historic.git Simplify _select_args_to_query - contortions not needed since 0e773352 --- diff --git a/lib/DBIx/Class/ResultSet.pm b/lib/DBIx/Class/ResultSet.pm index b64140d..6cd34bd 100644 --- a/lib/DBIx/Class/ResultSet.pm +++ b/lib/DBIx/Class/ResultSet.pm @@ -2540,16 +2540,9 @@ sub as_query { my $attrs = { %{ $self->_resolved_attrs } }; - # For future use: - # - # in list ctx: - # my ($sql, \@bind, \%dbi_bind_attrs) = _select_args_to_query (...) - # $sql also has no wrapping parenthesis in list ctx - # - my $sqlbind = $self->result_source->storage - ->_select_args_to_query ($attrs->{from}, $attrs->{select}, $attrs->{where}, $attrs); - - return $sqlbind; + $self->result_source->storage->_select_args_to_query ( + $attrs->{from}, $attrs->{select}, $attrs->{where}, $attrs + ); } =head2 find_or_new diff --git a/lib/DBIx/Class/Storage/DBI.pm b/lib/DBIx/Class/Storage/DBI.pm index 1018638..265ae51 100644 --- a/lib/DBIx/Class/Storage/DBI.pm +++ b/lib/DBIx/Class/Storage/DBI.pm @@ -2279,13 +2279,11 @@ sub _select_args_to_query { $self->_select_args(@_); # my ($sql, $prepared_bind) = $self->_gen_sql_bind($op, $ident, [ $select, $cond, $rs_attrs, $rows, $offset ]); - my ($sql, $prepared_bind) = $self->_gen_sql_bind($op, $ident, \@args); - $prepared_bind ||= []; + my ($sql, $bind) = $self->_gen_sql_bind($op, $ident, \@args); - return wantarray - ? ($sql, $prepared_bind) - : \[ "($sql)", @$prepared_bind ] - ; + # reuse the bind arrayref + unshift @{$bind}, "($sql)"; + \$bind; } sub _select_args { diff --git a/lib/DBIx/Class/Storage/DBI/MSSQL.pm b/lib/DBIx/Class/Storage/DBI/MSSQL.pm index 679fe7c..fc505fa 100644 --- a/lib/DBIx/Class/Storage/DBI/MSSQL.pm +++ b/lib/DBIx/Class/Storage/DBI/MSSQL.pm @@ -106,28 +106,26 @@ sub last_insert_id { shift->_identity } # http://sqladvice.com/forums/permalink/18496/22931/ShowThread.aspx#22931 # sub _select_args_to_query { + #my ($self, $ident, $select, $cond, $attrs) = @_; my $self = shift; + my $attrs = $_[3]; - my ($sql, $prep_bind, @rest) = $self->next::method (@_); + my $sql_bind = $self->next::method (@_); # see if this is an ordered subquery - my $attrs = $_[3]; if ( - $sql !~ /^ \s* SELECT \s+ TOP \s+ \d+ \s+ /xi - && + $$sql_bind->[0] !~ /^ \s* \( \s* SELECT \s+ TOP \s+ \d+ \s+ /xi + and scalar $self->_extract_order_criteria ($attrs->{order_by}) ) { $self->throw_exception( 'An ordered subselect encountered - this is not safe! Please see "Ordered Subselects" in DBIx::Class::Storage::DBI::MSSQL' ) unless $attrs->{unsafe_subselect_ok}; - my $max = $self->sql_maker->__max_int; - $sql =~ s/^ \s* SELECT \s/SELECT TOP $max /xi; + + $$sql_bind->[0] =~ s/^ \s* \( \s* SELECT (?=\s) / '(SELECT TOP ' . $self->sql_maker->__max_int /exi; } - return wantarray - ? ($sql, $prep_bind, @rest) - : \[ "($sql)", @$prep_bind ] - ; + $sql_bind; }