If it passes all the tests, that's fine. But, the cursor knows more than the resultset because the resultset isn't a query - it's a set of potential conditions that could become an UPDATE, DELETE, or SELECT.
Rob On Mon, Jun 8, 2009 at 05:39, Peter Rabbitson <rabbit+d...@rabbit.us> wrote: > Rob Kinyon wrote: >> On Sun, Jun 7, 2009 at 20:36, Peter Rabbitson <rabbit+d...@rabbit.us> wrote: >>> The fix should be quite simple, i.e. move as_query out of the Cursor >>> class. But first I'd like someone to comment on why it ended up there >>> in the first place. >> >> The only thing that has a query is the cursor. Everything else has the >> building blocks of a query, but hasn't been materialized as such. A >> ResultSet (which is where I originally thought to put it) can >> materialize as all sorts of queries, so it can't live there. >> > > But this makes no sense whatsoever. A cursor is just a cursor, it knows > nothing more than what the resultset object already does. Consider: > > === lib/DBIx/Class/ResultSet.pm > ================================================================== > --- lib/DBIx/Class/ResultSet.pm (revision 6543) > +++ lib/DBIx/Class/ResultSet.pm (local) > @@ -1925,7 +1925,10 @@ > > =cut > > -sub as_query { return shift->cursor->as_query(@_) } > +sub as_query { > + my $self = shift; > + return $self->result_source->storage->as_query($self); > +} > > =head2 find_or_new > > === lib/DBIx/Class/Storage/DBI/Cursor.pm > ================================================================== > --- lib/DBIx/Class/Storage/DBI/Cursor.pm (revision 6543) > +++ lib/DBIx/Class/Storage/DBI/Cursor.pm (local) > @@ -49,32 +49,6 @@ > 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 > === lib/DBIx/Class/Storage/DBI.pm > ================================================================== > --- lib/DBIx/Class/Storage/DBI.pm (revision 6543) > +++ lib/DBIx/Class/Storage/DBI.pm (local) > @@ -910,6 +910,40 @@ > return ($sql, \...@bind); > } > > +=head2 as_query > + > +=over 4 > + > +=item Arguments: none > + > +=item Return Value: \[ $sql, @bind ] > + > +=back > + > +Returns the SQL statement and bind vars that would result from the given > +ResultSet (does not actually run a query) > + > +=cut > + > +sub as_query { > + my ($self, $rs) = @_; > + > + my $sql_maker = $self->sql_maker; > + local $sql_maker->{for}; > + > + my $attr = $rs->_resolved_attrs; > + > + # my ($op, $bind, $ident, $bind_attrs, $select, $cond, $order, $rows, > $offset) = $self->_select_args(...); > + my @args = $self->_select_args($attr->{from}, $attr->{select}, > $attr->{where}, $attr); > + > + # my ($sql, $bind) = $self->_prep_for_execute($op, $bind, $ident, [ > $select, $cond, $order, $rows, $offset ]); > + my ($sql, $bind) = $self->_prep_for_execute( > + �...@args[0 .. 2], > + [ @args[4 .. $#args] ], > + ); > + return \[ "($sql)", @{ $bind || [] }]; > +} > + > sub _fix_bind_params { > my ($self, @bind) = @_; > > > I am not committing this until I get more input, but it seems rather > straightforward to me. > > > _______________________________________________ > List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class > IRC: irc.perl.org#dbix-class > SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/ > Searchable Archive: http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk > -- Thanks, Rob Kinyon _______________________________________________ List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class IRC: irc.perl.org#dbix-class SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/ Searchable Archive: http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk