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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]