This is an automated email from the ASF dual-hosted git repository. morrysnow pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new f0c9867af3 [fix](nereids) map literal to double in FilterSelectivityCalculator (#13776) f0c9867af3 is described below commit f0c9867af3b1a30979a9db5241cc32e33472db87 Author: minghong <engle...@gmail.com> AuthorDate: Tue Nov 1 20:20:44 2022 +0800 [fix](nereids) map literal to double in FilterSelectivityCalculator (#13776) fix literal to double bug: all literal type implements getDouble() function --- .../apache/doris/nereids/stats/FilterSelectivityCalculator.java | 5 +++-- .../doris/nereids/trees/expressions/literal/BooleanLiteral.java | 9 +++++++++ .../doris/nereids/trees/expressions/literal/DecimalLiteral.java | 5 +++++ .../doris/nereids/trees/expressions/literal/LargeIntLiteral.java | 5 +++++ .../apache/doris/nereids/trees/expressions/literal/Literal.java | 6 +++++- .../doris/nereids/trees/expressions/literal/NullLiteral.java | 5 +++++ fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java | 1 + 7 files changed, 33 insertions(+), 3 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/FilterSelectivityCalculator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/FilterSelectivityCalculator.java index f2b728181d..bb4de18a55 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/FilterSelectivityCalculator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/FilterSelectivityCalculator.java @@ -99,8 +99,9 @@ public class FilterSelectivityCalculator extends ExpressionVisitor<Double, Void> if (columnStats == null) { throw new RuntimeException("FilterSelectivityCalculator - col stats not found: " + left); } - ColumnStat newStats = new ColumnStat(1, columnStats.getAvgSizeByte(), columnStats.getMaxSizeByte(), 0, - Double.parseDouble(literal.getValue().toString()), Double.parseDouble(literal.getValue().toString())); + ColumnStat newStats = new ColumnStat(1, columnStats.getAvgSizeByte(), + columnStats.getMaxSizeByte(), 0, + literal.getDouble(), literal.getDouble()); newStats.setSelectivity(1.0 / columnStats.getNdv()); slotRefToStats.put(left, newStats); double ndv = columnStats.getNdv(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/BooleanLiteral.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/BooleanLiteral.java index 18480a5124..d3dc5ef9af 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/BooleanLiteral.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/BooleanLiteral.java @@ -68,4 +68,13 @@ public class BooleanLiteral extends Literal { public LiteralExpr toLegacyLiteral() { return new BoolLiteral(value); } + + @Override + public double getDouble() { + if (value) { + return 1.0; + } else { + return 0; + } + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DecimalLiteral.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DecimalLiteral.java index 174d1fdcb8..78fd043ad1 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DecimalLiteral.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DecimalLiteral.java @@ -50,4 +50,9 @@ public class DecimalLiteral extends Literal { public LiteralExpr toLegacyLiteral() { return new org.apache.doris.analysis.DecimalLiteral(value); } + + @Override + public double getDouble() { + return value.doubleValue(); + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/LargeIntLiteral.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/LargeIntLiteral.java index c839962040..ecadc0b0ab 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/LargeIntLiteral.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/LargeIntLiteral.java @@ -56,4 +56,9 @@ public class LargeIntLiteral extends Literal { "Can not convert to legacy literal: " + value, e); } } + + @Override + public double getDouble() { + return value.doubleValue(); + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/Literal.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/Literal.java index e64fd29fd5..7475d93ea6 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/Literal.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/Literal.java @@ -95,7 +95,11 @@ public abstract class Literal extends Expression implements LeafExpression { * @return double representation of literal. */ public double getDouble() { - return Double.parseDouble(getValue().toString()); + try { + return Double.parseDouble(getValue().toString()); + } catch (Exception e) { + return 0.0; + } } public String getStringValue() { diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/NullLiteral.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/NullLiteral.java index 8d980cb779..561669098a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/NullLiteral.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/NullLiteral.java @@ -51,4 +51,9 @@ public class NullLiteral extends Literal { public LiteralExpr toLegacyLiteral() { return new org.apache.doris.analysis.NullLiteral(); } + + @Override + public double getDouble() { + return 0; + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java index d6c5648b53..9e639f462a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java @@ -716,6 +716,7 @@ public class StmtExecutor implements ProfileWriter { } catch (UserException e) { throw e; } catch (Exception e) { + e.printStackTrace(); if (parsedStmt instanceof LogicalPlanAdapter) { throw new NereidsException(new AnalysisException("Unexpected exception: " + e.getMessage())); } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org