It seems that it is set to true when the operator has the two properties: 1. A mapping from no more than one input tuple to one or more output tuples can be established. 2. Is not blocking operator.
As per this, we can clearly see that: - IndexInsertDeleteUpsertOperator should have isMap() set as true - TokenizeOperator should have isMap() set as true Did I get anything wrong here? > On Sep 3, 2017, at 11:35 AM, Taewoo Kim <wangs...@gmail.com> wrote: > > My understanding is that isMap() is set to true when the cardinality of the > input may not be equal to the the cardinality of the output. To settle this > issue, I come up with one explicit property in my Limit Push down branch. > The attribute is called canDecreaseCardinality. > > On Sun, Sep 3, 2017 at 19:46 abdullah alamoudi <bamou...@gmail.com> wrote: > >> Dear devs, >> I was going over implementations of ILogicalOperator.isMap in our code >> base and here is the breakdown: >> >> isMap() >> >> true: >> -Assign >> -AbstractReplicateOperator >> -AbstractUnnestOperator >> -ExchangeOperator >> -InsertDeleteUpsertOperator >> -LimitOperator >> -ProjectOperator >> -SelectOperator >> >> >> >> false: >> -Order >> -Aggregate >> -RunningAggregate >> -AbstractBinaryJoin >> -AbstractOperatorWithNestedPlans >> -DataSourceScanOperator >> -DistinctOperator >> -DistributeResultOperator >> -EmptyTupleSourceOperator >> -IndexInsertDeleteUpsertOperator >> -IntersectOperator >> -MaterializeOperator >> -NestedTupleSourceOperator >> -ScriptOperator >> -SinkOperator >> -TokenizeOperator >> -UnionAllOperator >> -WriteOperator >> -WriteResultOperator >> >> As I understood at some point is that isMap means (does this operator map >> input tuples to output tuples without blocking?). I am not sure how >> accurate this description is but it clearly introduces a problem as: >> >> * InsertDeleteUpsertOperator.isMap() -> true >> * IndexInsertDeleteUpsertOperator.isMap() -> false >> >> Moreover, >> TokenizeOperator.isMap() -> false >> AbstractUnnestOperator.isMap() -> true >> >> while clearly, as per the definition above, these two operators should >> have the same output: true >> >> Can someone solve the mystery? >> Once this is solved, I will add a wiki entry to explain this flag. >> >> Cheers, >> Abdullah.