本文整理了Java中org.apache.calcite.rel.RelNode.copy
方法的一些代码示例,展示了RelNode.copy
的具体用法。这些代码示例主要来源于Github
/Stackoverflow
/Maven
等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。RelNode.copy
方法的具体详情如下:
包路径:org.apache.calcite.rel.RelNode
类名称:RelNode
方法名:copy
[英]Creates a copy of this relational expression, perhaps changing traits and inputs.
Sub-classes with other important attributes are encouraged to create variants of this method with more parameters.
[中]创建此关系表达式的副本,可能会更改特征和输入。
鼓励具有其他重要属性的子类创建具有更多参数的该方法变体。
代码示例来源:origin: apache/hive
public RelNode align(RelNode rel, List<RelFieldCollation> collations) {
ImmutableList.Builder<RelNode> newInputs = new ImmutableList.Builder<>();
for (RelNode input : rel.getInputs()) {
newInputs.add(dispatchAlign(input, ImmutableList.<RelFieldCollation>of()));
}
return rel.copy(rel.getTraitSet(), newInputs.build());
}
代码示例来源:origin: apache/hive
/**
* Visits a particular child of a parent.
*/
protected RelNode visitChild(RelNode parent, int i, RelNode child) {
Stacks.push(stack, parent);
try {
RelNode child2 = child.accept(this);
if (child2 != child) {
final List<RelNode> newInputs =
new ArrayList<RelNode>(parent.getInputs());
newInputs.set(i, child2);
return parent.copy(parent.getTraitSet(), newInputs);
}
return parent;
} finally {
Stacks.pop(stack, parent);
}
}
代码示例来源:origin: apache/drill
/**
* Visits a particular child of a parent.
*/
protected RelNode visitChild(RelNode parent, int i, RelNode child) {
Stacks.push(stack, parent);
try {
RelNode child2 = child.accept(this);
if (child2 != child) {
final List<RelNode> newInputs =
new ArrayList<RelNode>(parent.getInputs());
newInputs.set(i, child2);
return parent.copy(parent.getTraitSet(), newInputs);
}
return parent;
} finally {
Stacks.pop(stack, parent);
}
}
代码示例来源:origin: apache/hive
/** Fallback if none of the other {@code decorrelateRel} methods match. */
public Frame decorrelateRel(RelNode rel) {
RelNode newRel = rel.copy(rel.getTraitSet(), rel.getInputs());
if (rel.getInputs().size() > 0) {
List<RelNode> oldInputs = rel.getInputs();
List<RelNode> newInputs = Lists.newArrayList();
for (int i = 0; i < oldInputs.size(); ++i) {
final Frame frame = getInvoke(oldInputs.get(i), rel);
if (frame == null || !frame.corDefOutputs.isEmpty()) {
// if input is not rewritten, or if it produces correlated
// variables, terminate rewrite
return null;
}
newInputs.add(frame.r);
newRel.replaceInput(i, frame.r);
}
if (!Util.equalShallow(oldInputs, newInputs)) {
newRel = rel.copy(rel.getTraitSet(), newInputs);
}
}
// the output position should not change since there are no corVars
// coming from below.
return register(rel, newRel, identityMap(rel.getRowType().getFieldCount()),
ImmutableSortedMap.<CorDef, Integer>of());
}
代码示例来源:origin: apache/drill
/** Fallback if none of the other {@code decorrelateRel} methods match. */
public Frame decorrelateRel(RelNode rel) {
RelNode newRel = rel.copy(rel.getTraitSet(), rel.getInputs());
if (rel.getInputs().size() > 0) {
List<RelNode> oldInputs = rel.getInputs();
List<RelNode> newInputs = Lists.newArrayList();
for (int i = 0; i < oldInputs.size(); ++i) {
final Frame frame = getInvoke(oldInputs.get(i), rel);
if (frame == null || !frame.corDefOutputs.isEmpty()) {
// if input is not rewritten, or if it produces correlated
// variables, terminate rewrite
return null;
}
newInputs.add(frame.r);
newRel.replaceInput(i, frame.r);
}
if (!Util.equalShallow(oldInputs, newInputs)) {
newRel = rel.copy(rel.getTraitSet(), newInputs);
}
}
// the output position should not change since there are no corVars
// coming from below.
return register(rel, newRel, identityMap(rel.getRowType().getFieldCount()),
ImmutableSortedMap.<CorDef, Integer>of());
}
代码示例来源:origin: apache/drill
public RelNode align(RelNode rel, List<RelFieldCollation> collations) {
ImmutableList.Builder<RelNode> newInputs = new ImmutableList.Builder<>();
for (RelNode input : rel.getInputs()) {
newInputs.add(dispatchAlign(input, ImmutableList.<RelFieldCollation>of()));
}
return rel.copy(rel.getTraitSet(), newInputs.build());
}
代码示例来源:origin: apache/hive
call.transformTo(parent.copy(parent.getTraitSet(), inputs));
代码示例来源:origin: apache/drill
call.transformTo(parent.copy(parent.getTraitSet(), inputs));
代码示例来源:origin: apache/hive
call.transformTo(topOperator.copy(topOperator.getTraitSet(), ImmutableList.of(left)));
return;
semi = call.builder().push(left).push(aggregate.getInput()).semiJoin(newCondition).build();
call.transformTo(topOperator.copy(topOperator.getTraitSet(), ImmutableList.of(semi)));
代码示例来源:origin: Qihoo360/Quicksql
/**
* Returns a shallow copy of a relational expression with a particular
* input replaced.
*/
public static RelNode replaceInput(
RelNode parent, int ordinal, RelNode newInput) {
final List<RelNode> inputs = new ArrayList<>(parent.getInputs());
if (inputs.get(ordinal) == newInput) {
return parent;
}
inputs.set(ordinal, newInput);
return parent.copy(parent.getTraitSet(), inputs);
}
代码示例来源:origin: org.apache.calcite/calcite-core
/**
* Returns a shallow copy of a relational expression with a particular
* input replaced.
*/
public static RelNode replaceInput(
RelNode parent, int ordinal, RelNode newInput) {
final List<RelNode> inputs = new ArrayList<>(parent.getInputs());
if (inputs.get(ordinal) == newInput) {
return parent;
}
inputs.set(ordinal, newInput);
return parent.copy(parent.getTraitSet(), inputs);
}
代码示例来源:origin: dremio/dremio-oss
@Override
protected RelNode visitChild(RelNode parent, int i, RelNode child) {
RelNode child2 = child.accept(this);
if (child2 != child) {
final List<RelNode> newInputs = new ArrayList<>(parent.getInputs());
newInputs.set(i, child2);
return parent.copy(parent.getTraitSet(), newInputs);
}
return parent;
}
代码示例来源:origin: Qihoo360/Quicksql
/** Helper for {@link #replace}. */
private static RelNode replaceRecurse(
RelNode query, RelNode find, RelNode replace) {
if (query == find) {
return replace;
}
final List<RelNode> inputs = query.getInputs();
if (!inputs.isEmpty()) {
final List<RelNode> newInputs = new ArrayList<>();
for (RelNode input : inputs) {
newInputs.add(replaceRecurse(input, find, replace));
}
if (!newInputs.equals(inputs)) {
return query.copy(query.getTraitSet(), newInputs);
}
}
return query;
}
代码示例来源:origin: dremio/dremio-oss
@Override
public RelNode visit(RelNode other) {
if(!data.add(other)) {
other = other.copy(other.getTraitSet(), other.getInputs());
}
return super.visit(other);
}
}
代码示例来源:origin: Qihoo360/Quicksql
public static <T extends RelNode> T addTrait(
T rel, RelTrait trait) {
//noinspection unchecked
return (T) rel.copy(
rel.getTraitSet().replace(trait),
(List) rel.getInputs());
}
代码示例来源:origin: org.apache.calcite/calcite-core
public static <T extends RelNode> T addTrait(
T rel, RelTrait trait) {
//noinspection unchecked
return (T) rel.copy(
rel.getTraitSet().replace(trait),
rel.getInputs());
}
代码示例来源:origin: Qihoo360/Quicksql
public void rewriteGeneric(RelNode rel) {
RelNode newRel = rel.copy(rel.getTraitSet(), rel.getInputs());
List<RelNode> oldInputs = rel.getInputs();
for (int i = 0; i < oldInputs.size(); ++i) {
newRel.replaceInput(
i,
getNewForOldRel(oldInputs.get(i)));
}
setNewForOldRel(rel, newRel);
}
代码示例来源:origin: org.apache.calcite/calcite-core
public void rewriteGeneric(RelNode rel) {
RelNode newRel = rel.copy(rel.getTraitSet(), rel.getInputs());
List<RelNode> oldInputs = rel.getInputs();
for (int i = 0; i < oldInputs.size(); ++i) {
newRel.replaceInput(
i,
getNewForOldRel(oldInputs.get(i)));
}
setNewForOldRel(rel, newRel);
}
代码示例来源:origin: Qihoo360/Quicksql
@Override public void onMatch(RelOptRuleCall call) {
List<RelNode> newInputs = ImmutableList.of(call.rel(2));
IntermediateNode oldInter = call.rel(1);
RelNode physRel = call.rel(0).copy(call.rel(0).getTraitSet(), newInputs);
RelNode converted = new IntermediateNode(physRel.getCluster(), physRel,
oldInter.nodesBelowCount + 1);
call.transformTo(converted);
}
}
代码示例来源:origin: org.apache.calcite/calcite-core
@Override public void onMatch(RelOptRuleCall call) {
List<RelNode> newInputs = ImmutableList.of(call.rel(2));
IntermediateNode oldInter = call.rel(1);
RelNode physRel = call.rel(0).copy(call.rel(0).getTraitSet(), newInputs);
RelNode converted = new IntermediateNode(physRel.getCluster(), physRel,
oldInter.nodesBelowCount + 1);
call.transformTo(converted);
}
}
内容来源于网络,如有侵权,请联系作者删除!