This is an automated email from the ASF dual-hosted git repository.

rong pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 08006e2ae0 [IOTDB-3360] Fix precision loss bug due to float converted 
to double (#6192)
08006e2ae0 is described below

commit 08006e2ae0109ff97fd0d3f6b861be6f0967dd97
Author: Liao Lanyu <[email protected]>
AuthorDate: Thu Jun 9 11:29:59 2022 +0800

    [IOTDB-3360] Fix precision loss bug due to float converted to double (#6192)
---
 .../org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java    | 14 +++++++++++++-
 .../java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java   | 14 +++++++++++++-
 2 files changed, 26 insertions(+), 2 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
index d8d05d70fe..d3f4ce8028 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
@@ -22,6 +22,7 @@ package org.apache.iotdb.db.mpp.plan.parser;
 import org.apache.iotdb.commons.conf.IoTDBConstant;
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.exception.sql.SQLParserException;
 import org.apache.iotdb.db.exception.sql.SemanticException;
@@ -138,6 +139,8 @@ import java.util.regex.Pattern;
 /** Parse AST to Statement. */
 public class ASTVisitor extends IoTDBSqlParserBaseVisitor<Statement> {
 
+  private static final IoTDBConfig CONFIG = 
IoTDBDescriptor.getInstance().getConfig();
+
   private static final String DELETE_RANGE_ERROR_MSG =
       "For delete statement, where clause can only contain atomic expressions 
like : "
           + "time > XXX, time <= XXX, or two atomic expressions connected by 
'AND'";
@@ -2058,7 +2061,7 @@ public class ASTVisitor extends 
IoTDBSqlParserBaseVisitor<Statement> {
     } else if (constantContext.INTEGER_LITERAL() != null) {
       return new ConstantOperand(TSDataType.INT64, text);
     } else if (constantContext.realLiteral() != null) {
-      return new ConstantOperand(TSDataType.DOUBLE, text);
+      return parseRealLiteral(text);
     } else if (constantContext.dateExpression() != null) {
       return new ConstantOperand(
           TSDataType.INT64, 
String.valueOf(parseDateExpression(constantContext.dateExpression())));
@@ -2067,6 +2070,15 @@ public class ASTVisitor extends 
IoTDBSqlParserBaseVisitor<Statement> {
     }
   }
 
+  private Expression parseRealLiteral(String value) {
+    // 3.33 is float by default
+    return new ConstantOperand(
+        CONFIG.getFloatingStringInferType().equals(TSDataType.DOUBLE)
+            ? TSDataType.DOUBLE
+            : TSDataType.FLOAT,
+        value);
+  }
+
   /**
    * parse time expression, which is addition and subtraction expression of 
duration time, now() or
    * DataTimeFormat time.
diff --git 
a/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java 
b/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
index d6008497e5..aaa7c2e6c0 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
@@ -21,6 +21,7 @@ package org.apache.iotdb.db.qp.sql;
 import org.apache.iotdb.commons.conf.IoTDBConstant;
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.engine.trigger.executor.TriggerEvent;
 import org.apache.iotdb.db.exception.sql.SQLParserException;
@@ -183,6 +184,8 @@ import static 
org.apache.iotdb.db.qp.constant.SQLConstant.TOK_KILL_QUERY;
 
 public class IoTDBSqlVisitor extends IoTDBSqlParserBaseVisitor<Operator> {
 
+  private static final IoTDBConfig CONFIG = 
IoTDBDescriptor.getInstance().getConfig();
+
   private static final String DELETE_RANGE_ERROR_MSG =
       "For delete statement, where clause can only contain atomic expressions 
like : "
           + "time > XXX, time <= XXX, or two atomic expressions connected by 
'AND'";
@@ -3296,7 +3299,7 @@ public class IoTDBSqlVisitor extends 
IoTDBSqlParserBaseVisitor<Operator> {
         } else if (constantContext.INTEGER_LITERAL() != null) {
           return new ConstantOperand(TSDataType.INT64, text);
         } else if (constantContext.realLiteral() != null) {
-          return new ConstantOperand(TSDataType.DOUBLE, text);
+          return parseRealLiteral(text);
         } else if (constantContext.dateExpression() != null) {
           return new ConstantOperand(
               TSDataType.INT64,
@@ -3315,6 +3318,15 @@ public class IoTDBSqlVisitor extends 
IoTDBSqlParserBaseVisitor<Operator> {
     }
   }
 
+  private Expression parseRealLiteral(String value) {
+    // 3.33 is float by default
+    return new ConstantOperand(
+        CONFIG.getFloatingStringInferType().equals(TSDataType.DOUBLE)
+            ? TSDataType.DOUBLE
+            : TSDataType.FLOAT,
+        value);
+  }
+
   private void setMap(IoTDBSqlParser.AlterClauseContext ctx, Map<String, 
String> alterMap) {
     List<IoTDBSqlParser.AttributePairContext> tagsList = ctx.attributePair();
     if (ctx.attributePair(0) != null) {

Reply via email to