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