Sponsoring The Perl Toolchain Summit 2025: Help make this important event another success Learn more

use strict;
sub _set_operation {
my ( $self, $operation, $other ) = @_;
my @sql;
my @params;
my $as = $self->_resolved_attrs->{as};
my @operands = ( $self, ref $other eq 'ARRAY' ? @$other : $other );
for (@operands) {
$self->throw_exception("ResultClass of ResultSets do not match!")
unless $self->result_class eq $_->result_class;
my $attrs = $_->_resolved_attrs;
$self->throw_exception('ResultSets do not all have the same selected columns!')
unless $self->_compare_arrays($as, $attrs->{as});
my ($sql, @bind) = @{${$_->as_query}};
# $sql =~ s/^\s*\((.*)\)\s*$/$1/;
$sql = q<(> . $sql . q<)>;
push @sql, $sql;
push @params, @bind;
}
my $query = q<(> . join(" $operation ", @sql). q<)>;
my $attrs = $self->_resolved_attrs;
return $self->result_source->resultset->search(undef, {
alias => $self->current_source_alias,
from => [{
$self->current_source_alias => \[ $query, @params ],
-alias => $self->current_source_alias,
-source_handle => $self->result_source->handle,
}],
columns => $attrs->{as},
result_class => $self->result_class,
});
}
1;