/** * Converts a relational expression to a string, showing just basic * attributes. */ public static String toString(final RelNode rel) { return toString(rel, SqlExplainLevel.EXPPLAN_ATTRIBUTES); }
if (dumpPlan) { SQL2REL_LOGGER.fine( RelOptUtil.dumpPlan( "Plan after trimming unused fields", rootRel,
assert joinCond != null; Set<String> correlatedVariables = RelOptUtil.getVariablesUsed(rightRel); if (correlatedVariables.size() > 0) { final List<Correlation> correlations = Lists.newArrayList(); final List<RelDataTypeField> fields = leftRel.getRowType().getFieldList(); leftRel = RelOptUtil.createProject( leftRel, new AbstractList<Pair<RexNode, String>>() { rightRel.getRowType().getFieldList(); final int newLeftCount = leftCount + extraLeftExprs.size(); rightRel = RelOptUtil.createProject( rightRel, new AbstractList<Pair<RexNode, String>>() { 0, 0, leftCount, leftCount, leftCount + extraLeftExprs.size(), rightCount); return RelOptUtil.project(join, mapping);
/** * Returns a set of distinct variables set by <code>rel0</code> and used by * <code>rel1</code>. */ public static List<String> getVariablesSetAndUsed( RelNode rel0, RelNode rel1) { Set<String> set = getVariablesSet(rel0); if (set.size() == 0) { return ImmutableList.of(); } Set<String> used = getVariablesUsed(rel1); if (used.size() == 0) { return ImmutableList.of(); } List<String> result = new ArrayList<String>(); for (String s : set) { if (used.contains(s) && !result.contains(s)) { result.add(s); } } return result; }
protected RelDataType uniquifyFields(RelDataType rowType) { return validator.getTypeFactory().createStructType( RelOptUtil.getFieldTypeList(rowType), SqlValidatorUtil.uniquify(rowType.getFieldNames())); }
if (RelOptUtil.getVariablesUsed(rightInputRel).size() > 0) { return; RelOptUtil.splitCorrelatedFilterCondition( filterRel, tmpRightJoinKeys, } else if (mapRefRelToCorVar.containsKey(projRel)) { if (RelOptUtil.getVariablesUsed(rightInputRel).size() > 0) { return; RelOptUtil.createSingleValueAggRel(cluster, rightInputRel);
assert equivExp.getTraitSet().equals(traits) && (equivExp.getClass() == rel.getClass()); assert RelOptUtil.equal( "left", equivExp.getRowType(), "right", rel.getRowType(), nextSetId++, Util.minus( RelOptUtil.getVariablesSet(rel), rel.getVariablesStopped()), RelOptUtil.getVariablesUsed(rel)); this.allSets.add(set);
public CascadingJoinRel( RelOptCluster cluster, RelTraitSet traits, RelNode left, RelNode right, RexNode condition, JoinRelType joinType, Set<String> variablesStopped, int hash ) { super( cluster, traits, left, right, condition, joinType, variablesStopped ); this.hash = hash; RexNode remaining = RelOptUtil.splitJoinCondition( left, right, condition, leftKeys, rightKeys ); // Rule should have checked "isEqui" before firing. Something went wrong. if( !remaining.isAlwaysTrue() ) throw new AssertionError( "not equi-join condition: " + remaining ); }
protected boolean checkConvertedRowType( SqlNode query, RelDataType convertedRowType) { RelDataType validatedRowType = validator.getValidatedNodeType(query); validatedRowType = uniquifyFields(validatedRowType); return RelOptUtil.equal( "validated row type", validatedRowType, "converted row type", convertedRowType, false); }
RelOptUtil.addTrait( rel, baseTraits.getTrait(i)));
Set<String> correlatedVariables = RelOptUtil.getVariablesUsed(subq); for (String correlName : correlatedVariables) { DeferredLookup lookup = mapCorrelToDeferred.get(correlName);
if (!RelOptUtil.equal("rowtype of new rel", rel.getRowType(), "rowtype of set", getRowType(), true)) { throw new AssertionError(); Set<String> variablesSet = RelOptUtil.getVariablesSet(rel); Set<String> variablesStopped = rel.getVariablesStopped(); if (false) {
@Test public void testTypeDump() { RelDataTypeFactory typeFactory = new SqlTypeFactoryImpl(); RelDataType t1 = typeFactory.builder() .add("f0", SqlTypeName.DECIMAL, 5, 2) .add("f1", SqlTypeName.VARCHAR, 10) .build(); TestUtil.assertEqualsVerbose( TestUtil.fold( "f0 DECIMAL(5, 2) NOT NULL,", "f1 VARCHAR(10) CHARACTER SET \"ISO-8859-1\" COLLATE \"ISO-8859-1$en_US$primary\" NOT NULL"), Util.toLinux(RelOptUtil.dumpType(t1) + "\n")); RelDataType t2 = typeFactory.builder() .add("f0", t1) .add("f1", typeFactory.createMultisetType(t1, -1)) .build(); TestUtil.assertEqualsVerbose( TestUtil.fold( "f0 RECORD (", " f0 DECIMAL(5, 2) NOT NULL,", " f1 VARCHAR(10) CHARACTER SET \"ISO-8859-1\" COLLATE \"ISO-8859-1$en_US$primary\" NOT NULL) NOT NULL,", "f1 RECORD (", " f0 DECIMAL(5, 2) NOT NULL,", " f1 VARCHAR(10) CHARACTER SET \"ISO-8859-1\" COLLATE \"ISO-8859-1$en_US$primary\" NOT NULL) NOT NULL MULTISET NOT NULL"), Util.toLinux(RelOptUtil.dumpType(t2) + "\n")); }
RelOptUtil.splitJoinCondition( Collections.<RelDataTypeField>emptyList(), left, final RelNode[] inputRels = {left, right}; RelOptUtil.projectJoinInputs( inputRels, leftExprs, convert( newRight, traits ), newCondition, join.getJoinType(), join.getVariablesStopped(), 0 ); final RelNode newRel = convert( RelOptUtil.createProjectJoinRel( outputProj, newJoin ), traits );
return RelOptUtil.createSingleValueAggRel( cluster, plan);
RelNode seekRel = convertQueryOrInList(seekBb, seek); return RelOptUtil.createExistsPlan(seekRel, subqueryType, logic, needsOuterJoin);
final RelNode left = join.getLeft(); RexNode remainingCondition = RelOptUtil.splitJoinCondition( left, right, p.left)); condition = RelOptUtil.andJoinFilters( rexBuilder, condition,
RexNode joinCond, JoinRelType joinType) { Set<String> correlatedVariables = RelOptUtil.getVariablesUsed(rightRel); 0, 0, leftCount, leftCount, leftCount + extraLeftExprs.size(), rightCount); return RelOptUtil.project(join, mapping);
if (RelOptUtil.getVariablesUsed(rightInputRel).size() > 0) { return; RelOptUtil.splitCorrelatedFilterCondition( filterRel, rightJoinKeys, } else if (cm.mapRefRelToCorVar.containsKey(aggInputProjRel)) { if (RelOptUtil.getVariablesUsed(rightInputRel).size() > 0) { return;