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
