本文整理了Java中org.apache.calcite.rex.RexBuilder.makeCorrel
方法的一些代码示例,展示了RexBuilder.makeCorrel
的具体用法。这些代码示例主要来源于Github
/Stackoverflow
/Maven
等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。RexBuilder.makeCorrel
方法的具体详情如下:
包路径:org.apache.calcite.rex.RexBuilder
类名称: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);
内容来源于网络,如有侵权,请联系作者删除!