internal override TOutput Accept <TInput, TOutput>(
            CellTreeNode.CellTreeVisitor <TInput, TOutput> visitor,
            TInput param)
        {
            switch (this.OpType)
            {
            case CellTreeOpType.Union:
                return(visitor.VisitUnion(this, param));

            case CellTreeOpType.FOJ:
                return(visitor.VisitFullOuterJoin(this, param));

            case CellTreeOpType.LOJ:
                return(visitor.VisitLeftOuterJoin(this, param));

            case CellTreeOpType.IJ:
                return(visitor.VisitInnerJoin(this, param));

            case CellTreeOpType.LASJ:
                return(visitor.VisitLeftAntiSemiJoin(this, param));

            default:
                return(visitor.VisitInnerJoin(this, param));
            }
        }
 internal override TOutput Accept <TInput, TOutput>(
     CellTreeNode.CellTreeVisitor <TInput, TOutput> visitor,
     TInput param)
 {
     return(visitor.VisitLeaf(this, param));
 }
 internal abstract TOutput Accept <TInput, TOutput>(
     CellTreeNode.CellTreeVisitor <TInput, TOutput> visitor,
     TInput param);