org.apache.calcite.rex.RexBuilder.makeCorrel()方法的使用及代码示例

x33g5p2x  于2022-01-29 转载在 其他  
字(12.1k)|赞(0)|评价(0)|浏览(77)

本文整理了Java中org.apache.calcite.rex.RexBuilder.makeCorrel方法的一些代码示例,展示了RexBuilder.makeCorrel的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。RexBuilder.makeCorrel方法的具体详情如下:
包路径:org.apache.calcite.rex.RexBuilder
类名称:RexBuilder
方法名:makeCorrel

RexBuilder.makeCorrel介绍

[英]Creates an expression referencing a correlation variable.
[中]创建引用相关变量的表达式。

代码示例

代码示例来源:origin: apache/hive

/** Creates a correlation variable for the current input, and writes it into
 * a Holder. */
public HiveSubQRemoveRelBuilder variable(Holder<RexCorrelVariable> v) {
 v.set((RexCorrelVariable)
   getRexBuilder().makeCorrel(peek().getRowType(),
     cluster.createCorrel()));
 return this;
}

代码示例来源:origin: apache/drill

/** Creates a correlation variable for the current input, and writes it into
 * a Holder. */
public HiveSubQRemoveRelBuilder variable(Holder<RexCorrelVariable> v) {
 v.set((RexCorrelVariable)
     getRexBuilder().makeCorrel(peek().getRowType(),
         cluster.createCorrel()));
 return this;
}

代码示例来源:origin: apache/hive

protected RexNode convert(ExprNodeColumnDesc col) throws SemanticException {
 //if this is co-rrelated we need to make RexCorrelVariable(with id and type)
 // id and type should be retrieved from outerRR
 InputCtx ic = getInputCtx(col);
 if(ic == null) {
  // we have correlated column, build data type from outer rr
  RelDataType rowType = TypeConverter.getType(cluster, this.outerRR, null);
  if (this.outerNameToPosMap.get(col.getColumn()) == null) {
   throw new SemanticException(ErrorMsg.INVALID_COLUMN_NAME.getMsg(col.getColumn()));
  }
  int pos = this.outerNameToPosMap.get(col.getColumn());
  CorrelationId colCorr = new CorrelationId(this.correlatedId);
  RexNode corExpr = cluster.getRexBuilder().makeCorrel(rowType, colCorr);
  return cluster.getRexBuilder().makeFieldAccess(corExpr, pos);
 }
 int pos = ic.hiveNameToPosMap.get(col.getColumn());
 return cluster.getRexBuilder().makeInputRef(
   ic.calciteInpDataType.getFieldList().get(pos).getType(), pos + ic.offsetInCalciteSchema);
}

代码示例来源:origin: apache/hive

public RexNode visitInputRef(RexInputRef inputRef) {
  final RelDataType leftRowType = left.getRowType();
  final RexBuilder rexBuilder = getRexBuilder();
  final int leftCount = leftRowType.getFieldCount();
  if (inputRef.getIndex() < leftCount) {
   final RexNode v = rexBuilder.makeCorrel(leftRowType, id);
   return rexBuilder.makeFieldAccess(v, inputRef.getIndex());
  } else {
   return rexBuilder.makeInputRef(right, inputRef.getIndex() - leftCount);
  }
 }
}

代码示例来源:origin: apache/drill

public RexNode visitInputRef(RexInputRef inputRef) {
  final RelDataType leftRowType = left.getRowType();
  final RexBuilder rexBuilder = getRexBuilder();
  final int leftCount = leftRowType.getFieldCount();
  if (inputRef.getIndex() < leftCount) {
   final RexNode v = rexBuilder.makeCorrel(leftRowType, id);
   return rexBuilder.makeFieldAccess(v, inputRef.getIndex());
  } else {
   return rexBuilder.makeInputRef(right, inputRef.getIndex() - leftCount);
  }
 }
}

代码示例来源:origin: apache/drill

protected RexNode convert(ExprNodeColumnDesc col) throws SemanticException {
 //if this is co-rrelated we need to make RexCorrelVariable(with id and type)
 // id and type should be retrieved from outerRR
 InputCtx ic = getInputCtx(col);
 if(ic == null) {
  // we have correlated column, build data type from outer rr
  RelDataType rowType = TypeConverter.getType(cluster, this.outerRR, null);
  if (this.outerNameToPosMap.get(col.getColumn()) == null) {
   throw new SemanticException(ErrorMsg.INVALID_COLUMN_NAME.getMsg(col.getColumn()));
  }
  int pos = this.outerNameToPosMap.get(col.getColumn());
  CorrelationId colCorr = new CorrelationId(this.correlatedId);
  RexNode corExpr = cluster.getRexBuilder().makeCorrel(rowType, colCorr);
  return cluster.getRexBuilder().makeFieldAccess(corExpr, pos);
 }
 int pos = ic.hiveNameToPosMap.get(col.getColumn());
 return cluster.getRexBuilder().makeInputRef(
   ic.calciteInpDataType.getFieldList().get(pos).getType(), pos + ic.offsetInCalciteSchema);
}

代码示例来源:origin: Qihoo360/Quicksql

@Override public RexNode visitCorrelVariable(RexCorrelVariable variable) {
 if (!alternateIds.contains(variable.id)) {
  return variable;
 }
 return builder.makeCorrel(variable.getType(), canonicalId);
}

代码示例来源:origin: org.apache.calcite/calcite-core

@Override public RexNode visitCorrelVariable(RexCorrelVariable variable) {
 if (!alternateIds.contains(variable.id)) {
  return variable;
 }
 return builder.makeCorrel(variable.getType(), canonicalId);
}

代码示例来源:origin: Qihoo360/Quicksql

/** Creates a correlation variable for the current input, and writes it into
 * a Holder. */
public RelBuilder variable(Holder<RexCorrelVariable> v) {
 v.set((RexCorrelVariable)
   getRexBuilder().makeCorrel(peek().getRowType(),
     cluster.createCorrel()));
 return this;
}

代码示例来源:origin: org.apache.calcite/calcite-core

/** Creates a correlation variable for the current input, and writes it into
 * a Holder. */
public RelBuilder variable(Holder<RexCorrelVariable> v) {
 v.set((RexCorrelVariable)
   getRexBuilder().makeCorrel(peek().getRowType(),
     cluster.createCorrel()));
 return this;
}

代码示例来源:origin: Qihoo360/Quicksql

public RexNode visitInputRef(RexInputRef inputRef) {
  final RelDataType leftRowType = left.getRowType();
  final RexBuilder rexBuilder = getRexBuilder();
  final int leftCount = leftRowType.getFieldCount();
  if (inputRef.getIndex() < leftCount) {
   final RexNode v = rexBuilder.makeCorrel(leftRowType, id);
   return rexBuilder.makeFieldAccess(v, inputRef.getIndex());
  } else {
   return rexBuilder.makeInputRef(right, inputRef.getIndex() - leftCount);
  }
 }
}

代码示例来源:origin: org.apache.calcite/calcite-core

public RexNode visitInputRef(RexInputRef inputRef) {
  final RelDataType leftRowType = left.getRowType();
  final RexBuilder rexBuilder = getRexBuilder();
  final int leftCount = leftRowType.getFieldCount();
  if (inputRef.getIndex() < leftCount) {
   final RexNode v = rexBuilder.makeCorrel(leftRowType, id);
   return rexBuilder.makeFieldAccess(v, inputRef.getIndex());
  } else {
   return rexBuilder.makeInputRef(right, inputRef.getIndex() - leftCount);
  }
 }
}

代码示例来源:origin: org.apache.drill.exec/drill-java-exec

@Override
public Prel visitLateral(LateralJoinPrel prel, Boolean isRightOfLateral) throws RuntimeException {
 List<RelNode> children = Lists.newArrayList();
 children.add(((Prel) prel.getInput(0)).accept(this, isRightOfLateral));
 children.add(((Prel) prel.getInput(1)).accept(this, true));
 if (!isRightOfLateral) {
  return (Prel) prel.copy(prel.getTraitSet(), children);
 } else {
  //Adjust the column numbering due to an additional column "$drill_implicit_field$" is added to the inputs.
  Map<Integer, Integer> requiredColsMap = new HashMap<>();
  for (Integer corrColIndex : prel.getRequiredColumns()) {
   requiredColsMap.put(corrColIndex, corrColIndex + 1);
  }
  ImmutableBitSet requiredColumns = prel.getRequiredColumns().shift(1);
  CorrelationId corrId = prel.getCluster().createCorrel();
  RexCorrelVariable updatedCorrel =
      (RexCorrelVariable) prel.getCluster().getRexBuilder().makeCorrel(
          children.get(0).getRowType(),
          corrId);
  RelNode rightChild = children.get(1).accept(
      new CorrelateVarReplacer(
          new ProjectCorrelateTransposeRule.RexFieldAccessReplacer(prel.getCorrelationId(),
              updatedCorrel, prel.getCluster().getRexBuilder(), requiredColsMap)));
  return (Prel) prel.copy(prel.getTraitSet(), children.get(0), rightChild,
      corrId, requiredColumns, prel.getJoinType());
 }
}

代码示例来源:origin: org.apache.drill.exec/drill-java-exec

@Override
 public Prel visitUnnest(UnnestPrel prel, Void value) throws RuntimeException {
  Preconditions.checkArgument(registeredPrel != null && registeredPrel instanceof LateralJoinPrel);
  Preconditions.checkArgument(prel.getRowType().getFieldCount() == 1);
  RexBuilder builder = prel.getCluster().getRexBuilder();

  LateralJoinPrel lateralJoinPrel = (LateralJoinPrel) getRegisteredPrel();
  int correlationIndex = lateralJoinPrel.getRequiredColumns().nextSetBit(0);
  String correlationColumnName = lateralJoinPrel.getLeft().getRowType().getFieldNames().get(correlationIndex);
  RexNode corrRef = builder.makeCorrel(lateralJoinPrel.getLeft().getRowType(), lateralJoinPrel.getCorrelationId());
  RexNode fieldAccess = builder.makeFieldAccess(corrRef, correlationColumnName, false);

  List<String> fieldNames = new ArrayList<>();
  List<RelDataType> fieldTypes = new ArrayList<>();
  for (RelDataTypeField field : prel.getRowType().getFieldList()) {
   fieldNames.add(correlationColumnName);
   fieldTypes.add(field.getType());
  }

  UnnestPrel unnestPrel = new UnnestPrel(prel.getCluster(), prel.getTraitSet(),
      prel.getCluster().getTypeFactory().createStructType(fieldTypes, fieldNames), fieldAccess);
  return unnestPrel;
 }
}

代码示例来源:origin: Qihoo360/Quicksql

protected RexNode handle(RexFieldAccess fieldAccess) {
  final RexCorrelVariable v =
    (RexCorrelVariable) fieldAccess.getReferenceExpr();
  if (v.id.equals(correlation)
    && v.getType().getFieldCount() == mapping.getSourceCount()) {
   final int old = fieldAccess.getField().getIndex();
   final int new_ = mapping.getTarget(old);
   final RelDataTypeFactory.Builder typeBuilder =
     relBuilder.getTypeFactory().builder();
   for (int target : Util.range(mapping.getTargetCount())) {
    typeBuilder.add(
      v.getType().getFieldList().get(mapping.getSource(target)));
   }
   final RexNode newV =
     rexBuilder.makeCorrel(typeBuilder.build(), v.id);
   if (old != new_) {
    return rexBuilder.makeFieldAccess(newV, new_);
   }
  }
  return fieldAccess;
 }
});

代码示例来源:origin: org.apache.calcite/calcite-core

protected RexNode handle(RexFieldAccess fieldAccess) {
  final RexCorrelVariable v =
    (RexCorrelVariable) fieldAccess.getReferenceExpr();
  if (v.id.equals(correlation)
    && v.getType().getFieldCount() == mapping.getSourceCount()) {
   final int old = fieldAccess.getField().getIndex();
   final int new_ = mapping.getTarget(old);
   final RelDataTypeFactory.Builder typeBuilder =
     relBuilder.getTypeFactory().builder();
   for (int target : Util.range(mapping.getTargetCount())) {
    typeBuilder.add(
      v.getType().getFieldList().get(mapping.getSource(target)));
   }
   final RexNode newV =
     rexBuilder.makeCorrel(typeBuilder.build(), v.id);
   if (old != new_) {
    return rexBuilder.makeFieldAccess(newV, new_);
   }
  }
  return fieldAccess;
 }
});

代码示例来源:origin: org.apache.calcite/calcite-core

@Test public void testProjectCorrelateTransposeRuleAntiCorrelate() {
 RelBuilder relBuilder = RelBuilder.create(RelBuilderTest.config().build());
 RelNode left = relBuilder
   .values(new String[]{"f", "f2"}, "1", "2").build();
 CorrelationId correlationId = new CorrelationId(0);
 RexNode rexCorrel =
   relBuilder.getRexBuilder().makeCorrel(
     left.getRowType(),
     correlationId);
 RelNode right = relBuilder
   .values(new String[]{"f3", "f4"}, "1", "2")
   .project(relBuilder.field(0),
     relBuilder.getRexBuilder().makeFieldAccess(rexCorrel, 0)).build();
 LogicalCorrelate correlate = new LogicalCorrelate(left.getCluster(),
   left.getTraitSet(), left, right, correlationId,
   ImmutableBitSet.of(0), SemiJoinType.ANTI);
 relBuilder.push(correlate);
 RelNode relNode = relBuilder.project(relBuilder.field(0))
   .build();
 HepProgram program = new HepProgramBuilder()
   .addRuleInstance(ProjectCorrelateTransposeRule.INSTANCE)
   .build();
 HepPlanner hepPlanner = new HepPlanner(program);
 hepPlanner.setRoot(relNode);
 RelNode output = hepPlanner.findBestExp();
 final String planAfter = NL + RelOptUtil.toString(output);
 final DiffRepository diffRepos = getDiffRepos();
 diffRepos.assertEquals("planAfter", "${planAfter}", planAfter);
 SqlToRelTestBase.assertValid(output);
}

代码示例来源:origin: Qihoo360/Quicksql

@Test public void testProjectCorrelateTransposeRuleAntiCorrelate() {
 RelBuilder relBuilder = RelBuilder.create(RelBuilderTest.config().build());
 RelNode left = relBuilder
   .values(new String[]{"f", "f2"}, "1", "2").build();
 CorrelationId correlationId = new CorrelationId(0);
 RexNode rexCorrel =
   relBuilder.getRexBuilder().makeCorrel(
     left.getRowType(),
     correlationId);
 RelNode right = relBuilder
   .values(new String[]{"f3", "f4"}, "1", "2")
   .project(relBuilder.field(0),
     relBuilder.getRexBuilder().makeFieldAccess(rexCorrel, 0)).build();
 LogicalCorrelate correlate = new LogicalCorrelate(left.getCluster(),
   left.getTraitSet(), left, right, correlationId,
   ImmutableBitSet.of(0), SemiJoinType.ANTI);
 relBuilder.push(correlate);
 RelNode relNode = relBuilder.project(relBuilder.field(0))
   .build();
 HepProgram program = new HepProgramBuilder()
   .addRuleInstance(ProjectCorrelateTransposeRule.INSTANCE)
   .build();
 HepPlanner hepPlanner = new HepPlanner(program);
 hepPlanner.setRoot(relNode);
 RelNode output = hepPlanner.findBestExp();
 final String planAfter = NL + RelOptUtil.toString(output);
 final DiffRepository diffRepos = getDiffRepos();
 diffRepos.assertEquals("planAfter", "${planAfter}", planAfter);
 SqlToRelTestBase.assertValid(output);
}

代码示例来源:origin: Qihoo360/Quicksql

relBuilder.getRexBuilder().makeCorrel(
  left.getRowType(),
  correlationId);

代码示例来源:origin: org.apache.calcite/calcite-core

relBuilder.getRexBuilder().makeCorrel(
  left.getRowType(),
  correlationId);

相关文章

微信公众号

最新文章

更多