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

hui pushed a commit to branch lmh/optPPTcs
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 384332214621d0581a2e3f18ec295ebc41ec1888
Author: Minghui Liu <[email protected]>
AuthorDate: Tue May 16 17:15:28 2023 +0800

    opt
---
 .../apache/iotdb/commons/path/PathPatternTree.java | 33 ++++++++++++++--------
 .../iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java  |  2 +-
 .../iotdb/db/mpp/plan/parser/ASTVisitor.java       |  6 ++++
 .../db/mpp/plan/statement/crud/QueryStatement.java | 10 +++++++
 4 files changed, 39 insertions(+), 12 deletions(-)

diff --git 
a/node-commons/src/main/java/org/apache/iotdb/commons/path/PathPatternTree.java 
b/node-commons/src/main/java/org/apache/iotdb/commons/path/PathPatternTree.java
index 4c9179cce9..056c4a240b 100644
--- 
a/node-commons/src/main/java/org/apache/iotdb/commons/path/PathPatternTree.java
+++ 
b/node-commons/src/main/java/org/apache/iotdb/commons/path/PathPatternTree.java
@@ -43,6 +43,13 @@ public class PathPatternTree {
 
   private List<PartialPath> pathPatternList;
 
+  private boolean useWildcard = true;
+
+  public PathPatternTree(boolean useWildcard) {
+    this();
+    this.useWildcard = useWildcard;
+  }
+
   public PathPatternTree() {
     this.root = new PathPatternNode<>(IoTDBConstant.PATH_ROOT, 
VoidSerializer.getInstance());
     this.pathPatternList = new LinkedList<>();
@@ -77,18 +84,22 @@ public class PathPatternTree {
 
   /** Add a pathPattern (may contain wildcards) to pathPatternList. */
   public void appendPathPattern(PartialPath pathPattern) {
-    boolean isExist = false;
-    for (PartialPath path : pathPatternList) {
-      if (path.include(pathPattern)) {
-        // path already exists in pathPatternList
-        isExist = true;
-        break;
+    if (useWildcard) {
+      boolean isExist = false;
+      for (PartialPath path : pathPatternList) {
+        if (path.include(pathPattern)) {
+          // path already exists in pathPatternList
+          isExist = true;
+          break;
+        }
       }
-    }
-    if (!isExist) {
-      // remove duplicate path in pathPatternList
-      pathPatternList.removeIf(pathPattern::include);
-      pathPatternList.add(pathPattern);
+      if (!isExist) {
+        // remove duplicate path in pathPatternList
+        pathPatternList.removeIf(pathPattern::include);
+        pathPatternList.add(pathPattern);
+      }
+    } else {
+      appendBranchWithoutPrune(root, pathPattern.getNodes(), 0);
     }
   }
 
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
index 4b4a89ff48..bdfe19b1b2 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
@@ -233,7 +233,7 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
       queryStatement.semanticCheck();
 
       // concat path and construct path pattern tree
-      PathPatternTree patternTree = new PathPatternTree();
+      PathPatternTree patternTree = new 
PathPatternTree(queryStatement.useWildcard());
       queryStatement =
           (QueryStatement) new ConcatPathRewriter().rewrite(queryStatement, 
patternTree);
       analysis.setStatement(queryStatement);
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 82b7b494f9..763e7477da 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
@@ -254,6 +254,8 @@ public class ASTVisitor extends 
IoTDBSqlParserBaseVisitor<Statement> {
   private static final String IGNORENULL = "IgnoreNull";
   private ZoneId zoneId;
 
+  private boolean useWildcard = false;
+
   public void setZoneId(ZoneId zoneId) {
     this.zoneId = zoneId;
   }
@@ -1219,6 +1221,7 @@ public class ASTVisitor extends 
IoTDBSqlParserBaseVisitor<Statement> {
       queryStatement.setResultSetFormat(parseAlignBy(ctx.alignByClause()));
     }
 
+    queryStatement.setUseWildcard(useWildcard);
     return queryStatement;
   }
 
@@ -1794,6 +1797,9 @@ public class ASTVisitor extends 
IoTDBSqlParserBaseVisitor<Statement> {
   }
 
   private String parseNodeName(IoTDBSqlParser.NodeNameContext ctx) {
+    if (!useWildcard && ctx.wildcard().size() > 0) {
+      useWildcard = true;
+    }
     return parseNodeString(ctx.getText());
   }
 
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/QueryStatement.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/QueryStatement.java
index c2cfae97f0..408eb514cc 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/QueryStatement.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/QueryStatement.java
@@ -112,6 +112,8 @@ public class QueryStatement extends Statement {
 
   private boolean isOutputEndTime = false;
 
+  private boolean useWildcard = true;
+
   public QueryStatement() {
     this.statementType = StatementType.QUERY;
   }
@@ -448,6 +450,14 @@ public class QueryStatement extends Statement {
     return rowOffset > 0;
   }
 
+  public void setUseWildcard(boolean useWildcard) {
+    this.useWildcard = useWildcard;
+  }
+
+  public boolean useWildcard() {
+    return useWildcard;
+  }
+
   public void semanticCheck() {
     if (isAggregationQuery()) {
       if (disableAlign()) {

Reply via email to