本文整理汇总了Java中org.apache.calcite.rel.core.Aggregate.copy方法的典型用法代码示例。如果您正苦于以下问题:Java Aggregate.copy方法的具体用法?Java Aggregate.copy怎么用?Java Aggregate.copy使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类org.apache.calcite.rel.core.Aggregate
的用法示例。
在下文中一共展示了Aggregate.copy方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: onMatch
import org.apache.calcite.rel.core.Aggregate; //导入方法依赖的package包/类
public void onMatch(RelOptRuleCall call) {
final Aggregate aggregate = call.rel(0);
final DruidQuery query = call.rel(1);
if (!DruidQuery.isValidSignature(query.signature() + 'a')) {
return;
}
if (aggregate.indicator
|| aggregate.getGroupSets().size() != 1
|| BAD_AGG.apply(ImmutableTriple.of(aggregate, (RelNode) aggregate, query))
|| !validAggregate(aggregate, query)) {
return;
}
final RelNode newAggregate = aggregate.copy(aggregate.getTraitSet(),
ImmutableList.of(Util.last(query.rels)));
call.transformTo(DruidQuery.extendQuery(query, newAggregate));
}
示例2: mergeAggregate
import org.apache.calcite.rel.core.Aggregate; //导入方法依赖的package包/类
private Aggregate mergeAggregate(Aggregate aggregate1, Aggregate aggregate2) {
//Support only simple groups
if (aggregate1.getGroupType() != Aggregate.Group.SIMPLE
|| aggregate2.getGroupType() != Aggregate.Group.SIMPLE) {
return null;
}
final int callLen1 = aggregate1.getAggCallList().size();
final int callLen2 = aggregate2.getAggCallList().size();
final List<AggregateCall> newAggCalls = Lists.newArrayList();
if (callLen1 <= callLen2) {
//Create new Call list
for (AggregateCall call : aggregate1.getAggCallList()) {
AggregateCall newAggCall = getMergedAggCall(aggregate2, call);
if (newAggCall == null) {
return null;
} else {
newAggCalls.add(newAggCall);
}
}
//Create new groupSets
ImmutableBitSet.Builder groupSetsBuilder = ImmutableBitSet.builder();
for (int key : aggregate1.getGroupSet()) {
try {
groupSetsBuilder.set(aggregate2.getGroupSet().nth(key));
} catch (IndexOutOfBoundsException e) {
return null;
}
}
final ImmutableBitSet newGroupSets = groupSetsBuilder.build();
return aggregate1.copy(aggregate1.getTraitSet(), aggregate2.getInput(),
aggregate1.indicator, newGroupSets, ImmutableList.of(newGroupSets), newAggCalls);
} else {
return null;
}
}
示例3: filterAggregateTranspose
import org.apache.calcite.rel.core.Aggregate; //导入方法依赖的package包/类
/**
* Pushes a {@link org.apache.calcite.rel.core.Filter}
* past a {@link org.apache.calcite.rel.core.Aggregate}.
*/
RelNode filterAggregateTranspose(RelOptRuleCall call,
Filter filterRel,
Aggregate aggRel) {
final List<RexNode> conditions =
RelOptUtil.conjunctions(filterRel.getCondition());
final RexBuilder rexBuilder = filterRel.getCluster().getRexBuilder();
final List<RelDataTypeField> origFields =
aggRel.getRowType().getFieldList();
final int[] adjustments = new int[origFields.size()];
int i = 0;
for (int key : aggRel.getGroupSet()) {
adjustments[i] = key - i;
i++;
}
final List<RexNode> pushedConditions = Lists.newArrayList();
for (RexNode condition : conditions) {
ImmutableBitSet rCols = RelOptUtil.InputFinder.bits(condition);
if (canPush(aggRel, rCols)) {
pushedConditions.add(
condition.accept(
new RelOptUtil.RexInputConverter(rexBuilder, origFields,
aggRel.getInput(0).getRowType().getFieldList(),
adjustments)));
} else {
return null;
}
}
final RelBuilder builder = call.builder();
RelNode rel =
builder.push(aggRel.getInput()).filter(pushedConditions).build();
if (rel == aggRel.getInput(0)) {
return null;
}
rel = aggRel.copy(aggRel.getTraitSet(), ImmutableList.of(rel));
return rel;
}
示例4: rewriteQuery
import org.apache.calcite.rel.core.Aggregate; //导入方法依赖的package包/类
@Override protected RelNode rewriteQuery(
RelBuilder relBuilder,
RexBuilder rexBuilder,
RexSimplify simplify,
RelMetadataQuery mq,
RexNode compensationColumnsEquiPred,
RexNode otherCompensationPred,
Project topProject,
RelNode node,
BiMap<RelTableRef, RelTableRef> queryToViewTableMapping,
EquivalenceClasses viewEC, EquivalenceClasses queryEC) {
Aggregate aggregate = (Aggregate) node;
// All columns required by compensating predicates must be contained
// in the query.
RelNode aggregateInput = aggregate.getInput(0);
List<RexNode> queryExprs = extractReferences(rexBuilder, aggregateInput);
if (!compensationColumnsEquiPred.isAlwaysTrue()) {
compensationColumnsEquiPred = rewriteExpression(rexBuilder, mq,
aggregateInput, queryExprs, queryToViewTableMapping, queryEC, false,
compensationColumnsEquiPred);
if (compensationColumnsEquiPred == null) {
// Skip it
return null;
}
}
// For the rest, we use the query equivalence classes
if (!otherCompensationPred.isAlwaysTrue()) {
otherCompensationPred = rewriteExpression(rexBuilder, mq,
aggregateInput, queryExprs, queryToViewTableMapping, viewEC, true,
otherCompensationPred);
if (otherCompensationPred == null) {
// Skip it
return null;
}
}
final RexNode queryCompensationPred = RexUtil.not(
RexUtil.composeConjunction(
rexBuilder,
ImmutableList.of(
compensationColumnsEquiPred,
otherCompensationPred),
false));
// Generate query rewriting.
relBuilder.push(aggregateInput);
relBuilder.filter(simplify.simplify(queryCompensationPred));
return aggregate.copy(
aggregate.getTraitSet(), ImmutableList.of(relBuilder.build()));
}