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
=
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;