Red.git | lib/Red/AST/ | Intersect.rakumod
use Red::AST;
use Red::AST::MultiSelect;
#| Represents a intersect between 2 (or more) selects
unit class Red::AST::Intersect does Red::AST::MultiSelect;
has Red::AST @.selects;
method new(*@selects) {
nextwith :selects(Array[Red::AST].new: |@selects)
}
method returns { Red::Model }
method args { flat @!selects>>.args }
method tables(::?CLASS:D:) {
(flat @!selects».?tables).grep(-> \v { v !=:= Nil }).unique
}
method find-column-name {}
method intersect($sel) {
if $sel ~~ ::?CLASS {
self.intersect: $_ for $sel.selects
} else {
self.selects.push: $sel
}
self
}