What do you mean by “multi join”? Join is a binary operation. You can group 
more than one join together (e.g. a join b join c all on the same join key) but 
it’s just an optimization; it does the same as pair-wise joins.

We have multi-join internally — it allows us to determine join order for a 
large number of joins with reasonable efficiency — but the multi-join is 
expanded to pair-wise joins for later phases in the planing process. MultiJoin 
has complex semantics so it is difficult to make it interact with other 
relational operators.

Julian


> On May 28, 2017, at 5:16 AM, Muhammad Gelbana <[email protected]> wrote:
> 
> My ultimate goal is to pushdown joins from Drill to a JDBC datasource.
> 
> To do that, I wrote a converter rule to convert LogicalJoins
> <https://calcite.apache.org/apidocs/org/apache/calcite/rel/logical/LogicalJoin.html>
> to
> a custom descendant of the JdbcJoin
> <https://calcite.apache.org/apidocs/org/apache/calcite/adapter/jdbc/JdbcRules.JdbcJoin.html>
> class
> which worked fine so far.
> 
> Now I need to do the same for multi joins too but I believe 3 classes are
> missing.
> 
>   1. A JdbcRel
>   
> <https://calcite.apache.org/apidocs/org/apache/calcite/adapter/jdbc/JdbcRel.html>
> descendant
>   (Not JdbcJoin
>   
> <https://calcite.apache.org/apidocs/org/apache/calcite/adapter/jdbc/JdbcRules.JdbcJoin.html>,
>   because it extends BiRel
>   <https://calcite.apache.org/apidocs/org/apache/calcite/rel/BiRel.html> which
>   wouldn't be valid because we are considering a node with more than two
>   operands) for multijoins (Example: *JdbcMultiJoin*)
>   2. A SqlCall
>   <https://calcite.apache.org/apidocs/org/apache/calcite/sql/SqlCall.html>\
>   SqlJoin
>   <https://calcite.apache.org/apidocs/org/apache/calcite/sql/SqlJoin.html>
> descendant
>   for multijoins (Example: *SqlMultiJoin*) to be created while implementing
>   
> <https://calcite.apache.org/apidocs/org/apache/calcite/adapter/jdbc/JdbcRel.html#implement-org.apache.calcite.adapter.jdbc.JdbcImplementor->
>    the *JdbcMultiJoin* class.
>   3. A JDBC rule for converting MultiJoins
>   
> <https://calcite.apache.org/apidocs/org/apache/calcite/rel/rules/MultiJoin.html>
> to
>   the newly created *JdbcMultiJoin*
> 
> Am I correct or is this already implemented somewhere ?
> 
> *---------------------*
> *Muhammad Gelbana*
> http://www.linkedin.com/in/mgelbana

Reply via email to