org.apache.calcite.rel.RelNode.copy()方法的使用及代码示例

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

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

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);
 }
}

相关文章