Search in sources :

Example 1 with ThetaJoinOp

use of herddb.model.planner.ThetaJoinOp in project herddb by diennea.

the class CalcitePlanner method planEnumerableThetaJoin.

private PlannerOp planEnumerableThetaJoin(EnumerableThetaJoin op, RelDataType rowType) {
    PlannerOp left = convertRelNode(op.getLeft(), null, false);
    PlannerOp right = convertRelNode(op.getRight(), null, false);
    CompiledSQLExpression condition = SQLExpressionCompiler.compileExpression(op.getCondition());
    boolean generateNullsOnLeft = op.getJoinType().generatesNullsOnLeft();
    boolean generateNullsOnRight = op.getJoinType().generatesNullsOnRight();
    final RelDataType _rowType = rowType == null ? op.getRowType() : rowType;
    List<RelDataTypeField> fieldList = _rowType.getFieldList();
    Column[] columns = new Column[fieldList.size()];
    String[] fieldNames = new String[columns.length];
    int i = 0;
    for (RelDataTypeField field : fieldList) {
        Column col = Column.column(field.getName().toLowerCase(), convertToHerdType(field.getType()));
        fieldNames[i] = col.name;
        columns[i++] = col;
    }
    return new ThetaJoinOp(fieldNames, columns, left, right, condition, generateNullsOnLeft, generateNullsOnRight, false);
}
Also used : ThetaJoinOp(herddb.model.planner.ThetaJoinOp) RelDataTypeField(org.apache.calcite.rel.type.RelDataTypeField) PlannerOp(herddb.model.planner.PlannerOp) Column(herddb.model.Column) CompiledSQLExpression(herddb.sql.expressions.CompiledSQLExpression) RelDataType(org.apache.calcite.rel.type.RelDataType)

Aggregations

Column (herddb.model.Column)1 PlannerOp (herddb.model.planner.PlannerOp)1 ThetaJoinOp (herddb.model.planner.ThetaJoinOp)1 CompiledSQLExpression (herddb.sql.expressions.CompiledSQLExpression)1 RelDataType (org.apache.calcite.rel.type.RelDataType)1 RelDataTypeField (org.apache.calcite.rel.type.RelDataTypeField)1