=cut
-sub as_query { return shift->cursor->as_query }
+sub as_query { return shift->cursor->as_query(@_) }
+
+=head2 as_subselect
+
+=over 4
+
+=item Arguments: none
+
+=item Return Value: \[ $sql, @bind ]
+
+=back
+
+Returns the SQL query and bind vars associated with the invocant.
+
+The SQL will be wrapped in parentheses, ready for use as a subselect.
+
+=cut
+
+sub as_subselect {
+ my $self = shift;
+ my $arr = ${$self->as_query(@_)};
+ $arr->[0] = '( ' . $arr->[0] . ' )';
+ return \$arr;
+}
+
+=head2 as_query
+
+=over 4
+
+=item Arguments: none
+
+=item Return Value: $sql
+
+=back
+
+Returns the SQL query associated with the invocant. All bind vars
+will have been bound using C<< DBI->quote() >>.
+
+=cut
+
+sub as_sql {
+ my $self = shift;
+ my $arr = ${$self->as_query(@_)};
+ my $sql = shift @$arr;
+ my $dbh = $self->result_source->schema->storage->dbh;
+ $sql =~ s/\?/$dbh->quote((shift @$arr)->[1])/eg;
+ return $sql
+}
=head2 find_or_new
sub as_query { return shift->_resultset->as_query }
+=head2 as_subselect
+
+=over 4
+
+=item Arguments: none
+
+=item Return Value: \[ $sql, @bind ]
+
+=back
+
+Returns the SQL query and bind vars associated with the invocant.
+
+The SQL will be wrapped in parentheses, ready for use as a subselect.
+
+=cut
+
+sub as_subselect {
+ my $self = shift;
+ my $arr = ${$self->as_query(@_)};
+ $arr->[0] = '( ' . $arr->[0] . ' )';
+ return \$arr;
+}
+
+=head2 as_query
+
+=over 4
+
+=item Arguments: none
+
+=item Return Value: $sql
+
+=back
+
+Returns the SQL query associated with the invocant. All bind vars
+will have been bound using C<< DBI->quote() >>.
+
+=cut
+
+sub as_sql {
+ my $self = shift;
+ my $arr = ${$self->as_query(@_)};
+ my $sql = shift @$arr;
+ my $dbh = $self->_resultset->result_source->schema->storage->dbh;
+ $sql =~ s/\?/$dbh->quote((shift @$arr)->[1])/eg;
+ return $sql
+}
+
=head2 next
=over 4
);
}
+{my $sql = $art_rs->as_sql; warn "$sql\n";}
+
my $rscol = $art_rs->get_column( 'charfield' );
{
- my $arr = $rscol->as_query;
+ my $arr = $rscol->as_subselect;
my ($query, @bind) = @{$$arr};
is_same_sql_bind(
$query, \@bind,
- "SELECT me.charfield FROM artist me WHERE ( ( ( rank = ? ) AND ( name = ? ) ) )",
+ "( SELECT me.charfield FROM artist me WHERE ( ( ( rank = ? ) AND ( name = ? ) ) ) )",
[ [ rank => 2 ], [ name => 'Billy Joel' ] ],
);
}
+{my $sql = $rscol->as_sql; warn "$sql\n";}
my $cdrs2 = $cdrs->search({
- artist_id => {
- -in => $art_rs->get_column( 'id' )->as_query,
- },
+ artist_id => $art_rs->get_column( 'id' )->as_query,
});
warn Dumper $cdrs2->as_query;
__END__