Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -68,4 +68,12 @@ public String toString() {
return " FOR TIME AS OF '" + value + "'";
}
}

public String toDigest() {
if (this.type == VersionType.VERSION) {
return " FOR VERSION AS OF " + '?';
} else {
return " FOR TIME AS OF '" + '?' + "'";
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,16 @@ public String toString() {
return stringBuilder.toString();
}

@Override
public String toDigest() {
StringBuilder sb = new StringBuilder();
sb.append(child().toDigest());
if (alias.isPresent()) {
sb.append(" AS " + alias.get());
}
return sb.toString();
}

@Override
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitUnboundAlias(this, context);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,20 @@ public String toString() {
return "'" + getName() + "(" + (isDistinct ? "distinct " : "") + params + ")";
}

@Override
public String toDigest() {
StringBuilder sb = new StringBuilder();
sb.append(getName().toUpperCase());
sb.append("(");
sb.append(isDistinct ? "distinct " : "");
sb.append(
children.stream().map(Expression::toDigest)
.collect(Collectors.joining(", "))
);
sb.append(")");
return sb.toString();
}

@Override
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitUnboundFunction(this, context);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,4 +84,10 @@ public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> groupExpr
public List<Slot> computeOutput() {
throw new UnboundException("output");
}

@Override
public String toDigest() {
// TODO handle exprList?
return "VALUES ?";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@

import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

/**
* A relation that contains only one row consist of some constant expressions.
Expand Down Expand Up @@ -108,4 +109,15 @@ public String toString() {
"projects", projects
);
}

@Override
public String toDigest() {
StringBuilder sb = new StringBuilder();
sb.append("SELECT ");
sb.append(
projects.stream().map(Expression::toDigest)
.collect(Collectors.joining(", "))
);
return sb.toString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;

/**
* Represent a relation plan node that has not been bound.
Expand Down Expand Up @@ -181,6 +182,27 @@ public String toString() {
}

@Override
public String toDigest() {
StringBuilder sb = new StringBuilder();
if (nameParts.size() > 0) {
sb.append(nameParts.stream().collect(Collectors.joining(".")));
sb.append(" ");
}
if (indexName.isPresent()) {
sb.append("INDEX ").append(indexName.get()).append(" ");
}
if (tabletIds.size() > 0) {
sb.append("TABLET(?)").append(" ");
}
if (scanParams != null) {
sb.append("@").append(scanParams.getParamType()).append(" ");
}
if (tableSnapshot.isPresent()) {
sb.append(tableSnapshot.get().toDigest()).append(" ");
}
return sb.substring(0, sb.length() - 1);
}

public <R, C> R accept(PlanVisitor<R, C> visitor, C context) {
return visitor.visitUnboundRelation(this, context);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,11 @@ public String toString() {
return Utils.toSqlString("UnboundResultSink[" + id.asInt() + "]");
}

@Override
public String toDigest() {
return child().toDigest();
}

@Override
public StmtType stmtType() {
return StmtType.SELECT;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,11 @@ public String getName() {
}).reduce((left, right) -> left + "." + right).orElse("");
}

@Override
public String toDigest() {
return computeToSql();
}

@Override
public List<String> getQualifier() {
return nameParts.subList(0, nameParts.size() - 1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,17 @@ public String toString() {
return toSql();
}

@Override
public String toDigest() {
StringBuilder sb = new StringBuilder();
if (qualifier.isEmpty()) {
sb.append("*");
} else {
sb.append(qualifier.get(0) + ".*");
}
return sb.toString();
}

@Override
public boolean equals(Object o) {
if (this == o) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,4 +107,11 @@ public String toString() {
"arguments", properties
);
}

@Override
public String toDigest() {
StringBuilder sb = new StringBuilder(functionName);
sb.append("(?)");
return sb.toString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -196,4 +196,15 @@ public String toString() {
"colNames", colNames,
"hints", hints);
}

@Override
public String toDigest() {
StringBuilder sb = new StringBuilder();
sb.append("INSERT INTO ").append(StringUtils.join(nameParts, "."));
if (colNames != null && colNames.size() > 0) {
sb.append(" (").append(StringUtils.join(colNames, ", ")).append(")");
}
sb.append(" ").append(child().toDigest());
return sb.toString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,11 @@ public String toString() throws UnboundException {
}
}

@Override
public String toDigest() {
return toString();
}

/**
* variable type
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3005,6 +3005,13 @@ protected LogicalPlan withSelectQuerySpecification(
List<OrderKey> orderKeys = Lists.newArrayList();
LogicalPlan aggregate = withAggregate(filter, selectColumnCtx, aggClause, orderKeys);
boolean isDistinct = (selectClause.DISTINCT() != null);
if (!isDistinct) {
if (aggregate instanceof LogicalRepeat) {
aggregate = ((LogicalRepeat) aggregate).withInProjection(false);
} else if (aggregate instanceof LogicalAggregate) {
aggregate = ((LogicalAggregate) aggregate).withInProjection(false);
}
}
LogicalPlan selectPlan;
if (!(aggregate instanceof Aggregate) && havingClause.isPresent()) {
// create a project node for pattern match of ProjectToGlobalAggregate rule
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
package org.apache.doris.nereids.properties;

import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.literal.Literal;

import java.util.Objects;

Expand Down Expand Up @@ -78,6 +79,23 @@ public String toString() {
return expr.toString() + (isAsc ? " asc" : " desc") + (nullFirst ? " null first" : "");
}

/**
* generate digest for order by key
*
* @return String
*/
public String toDigest() {
StringBuilder sb = new StringBuilder();
if (expr instanceof Literal) {
sb.append(expr.toString());
} else {
sb.append(expr.toDigest());
}
sb.append(isAsc ? " ASC" : " DESC");
sb.append(nullFirst ? " NULLS FIRST" : "");
return sb.toString();
}

@Override
public int hashCode() {
return Objects.hash(expr, isAsc, nullFirst);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -357,4 +357,8 @@ default boolean deepEquals(TreeNode<?> that) {
// If the "that" tree hasn't been fully traversed, return false.
return thatDeque.isEmpty();
}

default String toDigest() {
return "";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
package org.apache.doris.nereids.trees.expressions;

import org.apache.doris.nereids.exceptions.UnboundException;
import org.apache.doris.nereids.trees.expressions.literal.Literal;
import org.apache.doris.nereids.trees.expressions.shape.UnaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.DataType;
Expand Down Expand Up @@ -148,6 +149,17 @@ public String toString() {
return child().toString() + " AS `" + name.get() + "`#" + exprId;
}

@Override
public String toDigest() {
StringBuilder sb = new StringBuilder();
if (child() instanceof Literal) {
sb.append("?");
} else {
sb.append(child().toDigest()).append(" AS ").append(getName());
}
return sb.toString();
}

@Override
public Alias withChildren(List<Expression> children) {
Preconditions.checkArgument(children.size() == 1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,14 @@ public String toString() {
}

@Override
public String toDigest() {
StringBuilder sb = new StringBuilder();
sb.append(left().toDigest());
sb.append(" ").append(symbol).append(" ");
sb.append(right().toDigest());
return sb.toString();
}

public String shapeInfo() {
return "(" + left().shapeInfo() + " " + symbol + " " + right().shapeInfo() + ")";
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,20 @@ public String toString() {
return output.toString();
}

@Override
public String toDigest() {
StringBuilder sb = new StringBuilder("CASE");
for (Expression child : children()) {
if (child instanceof WhenClause) {
sb.append(child.toDigest());
} else {
sb.append(" ELSE ").append(child.toDigest());
}
}
sb.append(" END");
return sb.toString();
}

@Override
public String computeToSql() throws UnboundException {
StringBuilder output = new StringBuilder("CASE");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,17 @@ public String toString() {
return "cast(" + child() + " as " + targetType + ")";
}

@Override
public String toDigest() {
StringBuilder sb = new StringBuilder();
sb.append("cast(")
.append(child().toDigest())
.append(" as ")
.append(targetType)
.append(")");
return sb.toString();
}

@Override
public boolean equals(Object o) {
if (!super.equals(o)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,15 @@ public String toString() {
}

@Override
public String toDigest() {
StringBuilder sb = new StringBuilder();
sb.append("(");
sb.append(children().stream().map(c -> c.toDigest())
.collect(Collectors.joining(" " + symbol + " ")));
sb.append(")");
return sb.toString();
}

public String shapeInfo() {
StringBuilder sb = new StringBuilder();
children().forEach(c -> sb.append(c.shapeInfo()).append(","));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,11 @@ public String toString() {
return "DEFAULT_VALUE";
}

@Override
public String toDigest() {
return "?";
}

public Slot withIndexInSql(Pair<Integer, Integer> index) {
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,16 @@ public String toString() {
return "EXISTS (SUBQUERY) " + super.toString();
}

@Override
public String toDigest() {
StringBuilder sb = new StringBuilder();
sb.append(isNot ? "NOT " : "")
.append("EXISTS (")
.append(queryPlan.toDigest())
.append(")");
return sb.toString();
}

public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitExistsSubquery(this, context);
}
Expand Down
Loading
Loading