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

Reply via email to