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

jackietien 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 e3582cd86fd Fixed the bug that qualifiedName can not be used in device 
query
e3582cd86fd is described below

commit e3582cd86fd190868af3e7ffd0953848e66fb9db
Author: Caideyipi <[email protected]>
AuthorDate: Tue Aug 13 19:59:11 2024 +0800

    Fixed the bug that qualifiedName can not be used in device query
---
 .../relational/it/schema/IoTDBDeviceQueryIT.java   |  8 ++++++++
 .../relational/analyzer/StatementAnalyzer.java     |  4 +++-
 .../plan/relational/metadata/MetadataUtil.java     |  3 +--
 .../relational/sql/ast/AbstractQueryDevice.java    | 22 +++++++++++++++++++---
 .../plan/relational/sql/ast/CountDevice.java       |  4 ++--
 .../plan/relational/sql/ast/ShowDevice.java        |  4 ++--
 .../plan/relational/sql/parser/AstBuilder.java     |  4 ++--
 7 files changed, 37 insertions(+), 12 deletions(-)

diff --git 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDeviceQueryIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDeviceQueryIT.java
index 49fb045f1e0..168fbaa715a 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDeviceQueryIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDeviceQueryIT.java
@@ -96,6 +96,14 @@ public class IoTDBDeviceQueryIT {
       } catch (final Exception e) {
         // Pass
       }
+
+      // Test fully qualified name
+      statement.execute("create database test2");
+      statement.execute("use test2");
+      TestUtils.assertResultSetEqual(
+          statement.executeQuery("count devices from test.table0"),
+          "count(devices),",
+          Collections.singleton("1,"));
     }
   }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
index b54ffafd5e2..1d7e5bd5abe 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
@@ -1496,7 +1496,7 @@ public class StatementAnalyzer {
         }
       }
 
-      QualifiedObjectName name = createQualifiedObjectName(sessionContext, 
table, table.getName());
+      QualifiedObjectName name = createQualifiedObjectName(sessionContext, 
table.getName());
       analysis.setRelationName(
           table, QualifiedName.of(name.getDatabaseName(), 
name.getObjectName()));
 
@@ -2496,11 +2496,13 @@ public class StatementAnalyzer {
 
     @Override
     protected Scope visitShowDevice(final ShowDevice node, final 
Optional<Scope> context) {
+      node.parseQualifiedName(sessionContext);
       return null;
     }
 
     @Override
     protected Scope visitCountDevice(final CountDevice node, final 
Optional<Scope> context) {
+      node.parseQualifiedName(sessionContext);
       return null;
     }
   }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/MetadataUtil.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/MetadataUtil.java
index 2277400b8fb..3366a48b6b5 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/MetadataUtil.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/MetadataUtil.java
@@ -21,7 +21,6 @@ package 
org.apache.iotdb.db.queryengine.plan.relational.metadata;
 
 import org.apache.iotdb.db.exception.sql.SemanticException;
 import org.apache.iotdb.db.queryengine.common.SessionInfo;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Node;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.QualifiedName;
 
 import com.google.common.collect.ImmutableList;
@@ -67,7 +66,7 @@ public class MetadataUtil {
   }
 
   public static QualifiedObjectName createQualifiedObjectName(
-      SessionInfo session, Node node, QualifiedName name) {
+      SessionInfo session, QualifiedName name) {
     requireNonNull(session, "session is null");
     requireNonNull(name, "name is null");
     if (name.getParts().size() > 2) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AbstractQueryDevice.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AbstractQueryDevice.java
index c789361787b..eeef4e8b6e8 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AbstractQueryDevice.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AbstractQueryDevice.java
@@ -20,6 +20,9 @@
 package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
 
 import org.apache.iotdb.commons.schema.filter.SchemaFilter;
+import org.apache.iotdb.db.queryengine.common.SessionInfo;
+import org.apache.iotdb.db.queryengine.plan.relational.metadata.MetadataUtil;
+import 
org.apache.iotdb.db.queryengine.plan.relational.metadata.QualifiedObjectName;
 
 import org.apache.tsfile.file.metadata.IDeviceID;
 
@@ -32,7 +35,10 @@ public abstract class AbstractQueryDevice extends Statement {
 
   private String database;
 
-  private final String tableName;
+  private String tableName;
+
+  // Temporary
+  private QualifiedName name;
 
   // Currently unused, shall be parsed into idDeterminedPredicateList and 
idFuzzyPredicate on demand
   private Expression rawExpression;
@@ -53,9 +59,9 @@ public abstract class AbstractQueryDevice extends Statement {
   private List<IDeviceID> partitionKeyList;
 
   // For sql-input show device usage
-  protected AbstractQueryDevice(final String tableName, final Expression 
rawExpression) {
+  protected AbstractQueryDevice(final QualifiedName name, final Expression 
rawExpression) {
     super(null);
-    this.tableName = tableName;
+    this.name = name;
     this.rawExpression = rawExpression;
   }
 
@@ -74,6 +80,16 @@ public abstract class AbstractQueryDevice extends Statement {
     this.partitionKeyList = partitionKeyList;
   }
 
+  public void parseQualifiedName(final SessionInfo sessionInfo) {
+    if (Objects.isNull(name)) {
+      return;
+    }
+    final QualifiedObjectName objectName =
+        MetadataUtil.createQualifiedObjectName(sessionInfo, name);
+    database = objectName.getDatabaseName();
+    tableName = objectName.getObjectName();
+  }
+
   public String getDatabase() {
     return database;
   }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CountDevice.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CountDevice.java
index 6cf578ec1e6..d7813b131de 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CountDevice.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CountDevice.java
@@ -22,8 +22,8 @@ package 
org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
 public class CountDevice extends AbstractQueryDevice {
 
   // For sql-input show device usage
-  public CountDevice(final String tableName, final Expression rawExpression) {
-    super(tableName, rawExpression);
+  public CountDevice(final QualifiedName name, final Expression rawExpression) 
{
+    super(name, rawExpression);
   }
 
   @Override
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowDevice.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowDevice.java
index dbb8f224608..ca7cf135b86 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowDevice.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowDevice.java
@@ -28,8 +28,8 @@ import java.util.List;
 public class ShowDevice extends AbstractQueryDevice {
 
   // For sql-input show device usage
-  public ShowDevice(final String tableName, final Expression rawExpression) {
-    super(tableName, rawExpression);
+  public ShowDevice(final QualifiedName name, final Expression rawExpression) {
+    super(name, rawExpression);
   }
 
   // For device fetch serving data query
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java
index 6d24cb37a76..b2e98656fa1 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java
@@ -537,7 +537,7 @@ public class AstBuilder extends 
RelationalSqlBaseVisitor<Node> {
       throw new UnsupportedOperationException(
           "Show devices with WHERE/LIMIT/OFFSET is unsupported yet.");
     }
-    return new ShowDevice(getQualifiedName(ctx.tableName).toString(), null);
+    return new ShowDevice(getQualifiedName(ctx.tableName), null);
   }
 
   @Override
@@ -546,7 +546,7 @@ public class AstBuilder extends 
RelationalSqlBaseVisitor<Node> {
     if (ctx.WHERE() != null) {
       throw new UnsupportedOperationException("Count devices with WHERE is 
unsupported yet.");
     }
-    return new CountDevice(getQualifiedName(ctx.tableName).toString(), null);
+    return new CountDevice(getQualifiedName(ctx.tableName), null);
   }
 
   @Override

Reply via email to