substrait-io / substrait

A cross platform way to express data transformation, relational algebra, standardized record expression and plans.
https://substrait.io
Apache License 2.0
1.14k stars 148 forks source link

Refactor JoinType for physical operators #563

Open danepitkin opened 10 months ago

danepitkin commented 10 months ago

HashJoin, MergeJoin, and NestedLoopJoin all duplicate the JoinType:

  enum JoinType {
    JOIN_TYPE_UNSPECIFIED = 0;
    JOIN_TYPE_INNER = 1;
    JOIN_TYPE_OUTER = 2;
    JOIN_TYPE_LEFT = 3;
    JOIN_TYPE_RIGHT = 4;
    JOIN_TYPE_LEFT_SEMI = 5;
    JOIN_TYPE_RIGHT_SEMI = 6;
    JOIN_TYPE_LEFT_ANTI = 7;
    JOIN_TYPE_RIGHT_ANTI = 8;
  }

Let's create a shared JoinType for physical operators.

Let's also change left/right anti-joins to specify NULL handling e.g. JOIN_TYPE_RIGHT_ANTI_WITH_NULL and JOIN_TYPE_RIGHT_ANTI_WITHOUT_NULL. See this discussion for more detail.