From: Peter Rabbitson Date: Mon, 15 Jun 2009 16:10:26 +0000 (+0000) Subject: make all resolved attrs visible to sqla X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=ec7cfd3612b868bf4fb1a3b57c0bde87acdbb9e9;p=dbsrgits%2FDBIx-Class-Historic.git make all resolved attrs visible to sqla --- diff --git a/lib/DBIx/Class/SQLAHacks.pm b/lib/DBIx/Class/SQLAHacks.pm index a454cd5..d37ccde 100644 --- a/lib/DBIx/Class/SQLAHacks.pm +++ b/lib/DBIx/Class/SQLAHacks.pm @@ -158,6 +158,10 @@ sub _find_syntax { return $self->{_cached_syntax} ||= $self->SUPER::_find_syntax($syntax); } +my $for_syntax = { + update => 'FOR UPDATE', + shared => 'FOR SHARE', +}; sub select { my ($self, $table, $fields, $where, $order, @rest) = @_; @@ -177,15 +181,10 @@ sub select { my ($sql, @where_bind) = $self->SUPER::select( $table, $self->_recurse_fields($fields), $where, $order, @rest ); - $sql .= - $self->{for} ? - ( - $self->{for} eq 'update' ? ' FOR UPDATE' : - $self->{for} eq 'shared' ? ' FOR SHARE' : - '' - ) : - '' - ; + if (my $for = delete $self->{_dbic_rs_attrs}{for}) { + $sql .= " $for_syntax->{$for}" if $for_syntax->{$for}; + } + return wantarray ? ($sql, @{$self->{from_bind}}, @where_bind, @{$self->{having_bind}}, @{$self->{order_bind}} ) : $sql; } diff --git a/lib/DBIx/Class/Storage/DBI.pm b/lib/DBIx/Class/Storage/DBI.pm index a5025fc..5514d0e 100644 --- a/lib/DBIx/Class/Storage/DBI.pm +++ b/lib/DBIx/Class/Storage/DBI.pm @@ -1193,10 +1193,10 @@ sub _select { my $self = shift; # localization is neccessary as - # 1) there is no infrastructure to pass this around (easy to do, but will wait) + # 1) there is no infrastructure to pass this around before SQLA2 # 2) _select_args sets it and _prep_for_execute consumes it my $sql_maker = $self->sql_maker; - local $sql_maker->{for}; + local $sql_maker->{_dbic_rs_attrs}; return $self->_execute($self->_select_args(@_)); } @@ -1205,10 +1205,10 @@ sub _select_args_to_query { my $self = shift; # localization is neccessary as - # 1) there is no infrastructure to pass this around (easy to do, but will wait) + # 1) there is no infrastructure to pass this around before SQLA2 # 2) _select_args sets it and _prep_for_execute consumes it my $sql_maker = $self->sql_maker; - local $sql_maker->{for}; + local $sql_maker->{_dbic_rs_attrs}; # my ($op, $bind, $ident, $bind_attrs, $select, $cond, $order, $rows, $offset) # = $self->_select_args($ident, $select, $cond, $attrs); @@ -1229,7 +1229,7 @@ sub _select_args { my ($self, $ident, $select, $condition, $attrs) = @_; my $sql_maker = $self->sql_maker; - $sql_maker->{for} = delete $attrs->{for}; + $sql_maker->{_dbic_rs_attrs} = $attrs; my $order = { map { $attrs->{$_} ? ( $_ => $attrs->{$_} ) : () }