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 2f1ca39f391 Fix non-root user query data returns unexpected path
2f1ca39f391 is described below

commit 2f1ca39f391a6539df98b1b0112761b701f923f4
Author: Chen YZ <[email protected]>
AuthorDate: Fri May 17 10:59:37 2024 +0800

    Fix non-root user query data returns unexpected path
---
 .../org/apache/iotdb/db/it/auth/IoTDBAuthIT.java   | 29 ++++++++++++++++++++++
 .../common/schematree/ClusterSchemaTree.java       |  5 +---
 .../plan/analyze/schema/ClusterSchemaFetcher.java  |  4 ++-
 3 files changed, 33 insertions(+), 5 deletions(-)

diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBAuthIT.java 
b/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBAuthIT.java
index 25e1b6833f9..93165a16ff6 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBAuthIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBAuthIT.java
@@ -324,6 +324,35 @@ public class IoTDBAuthIT {
     }
   }
 
+  @Test
+  public void templateQueryTest() throws SQLException {
+    try (Connection adminCon = EnvFactory.getEnv().getConnection();
+        Statement adminStmt = adminCon.createStatement()) {
+      adminStmt.execute("CREATE USER tempuser 'temppw'");
+      try (Connection userCon = EnvFactory.getEnv().getConnection("tempuser", 
"temppw");
+          Statement userStmt = userCon.createStatement()) {
+        adminStmt.execute(
+            "GRANT READ_DATA ON root.sg.aligned_template.temperature TO USER 
tempuser");
+        adminStmt.execute("CREATE DATABASE root.sg");
+        adminStmt.execute(
+            "create device template t1 aligned (temperature FLOAT 
encoding=Gorilla, status BOOLEAN encoding=PLAIN);");
+        adminStmt.execute("set device template t1 to 
root.sg.aligned_template;");
+        adminStmt.execute("create timeseries using device template on 
root.sg.aligned_template;");
+        adminStmt.execute(
+            "insert into root.sg.aligned_template(time,temperature,status) 
values(1,20,false),(2,22.1,true),(3,18,false);");
+
+        ResultSet set1 = adminStmt.executeQuery("SELECT * from 
root.sg.aligned_template");
+        assertEquals(3, set1.getMetaData().getColumnCount());
+        assertEquals("root.sg.aligned_template.temperature", 
set1.getMetaData().getColumnName(2));
+        assertEquals("root.sg.aligned_template.status", 
set1.getMetaData().getColumnName(3));
+
+        ResultSet set2 = userStmt.executeQuery("SELECT * from 
root.sg.aligned_template");
+        assertEquals(2, set2.getMetaData().getColumnCount());
+        assertEquals("root.sg.aligned_template.temperature", 
set2.getMetaData().getColumnName(2));
+      }
+    }
+  }
+
   @Test
   public void insertQueryTest() throws SQLException {
     try (Connection adminCon = EnvFactory.getEnv().getConnection();
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/schematree/ClusterSchemaTree.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/schematree/ClusterSchemaTree.java
index 995c4542c82..c461d0da83f 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/schematree/ClusterSchemaTree.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/schematree/ClusterSchemaTree.java
@@ -21,7 +21,6 @@ package org.apache.iotdb.db.queryengine.common.schematree;
 
 import org.apache.iotdb.commons.path.MeasurementPath;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.path.PathPatternTree;
 import org.apache.iotdb.commons.schema.view.LogicalViewSchema;
 import org.apache.iotdb.commons.utils.PathUtils;
 import org.apache.iotdb.commons.utils.TestOnly;
@@ -76,8 +75,6 @@ public class ClusterSchemaTree implements ISchemaTree {
 
   private Map<Integer, Template> templateMap = new HashMap<>();
 
-  private PathPatternTree authorityScope;
-
   public ClusterSchemaTree() {
     root = new SchemaInternalNode(PATH_ROOT);
   }
@@ -102,7 +99,7 @@ public class ClusterSchemaTree implements ISchemaTree {
       PartialPath pathPattern, int slimit, int soffset, boolean isPrefixMatch) 
{
     try (SchemaTreeVisitorWithLimitOffsetWrapper<MeasurementPath> visitor =
         SchemaTreeVisitorFactory.createSchemaTreeMeasurementVisitor(
-            root, pathPattern, isPrefixMatch, slimit, soffset, 
authorityScope)) {
+            root, pathPattern, isPrefixMatch, slimit, soffset)) {
       visitor.setTemplateMap(templateMap);
       return new Pair<>(visitor.getAllResult(), visitor.getNextOffset());
     }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetcher.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetcher.java
index a0ea490b990..bae7472ab8d 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetcher.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetcher.java
@@ -92,7 +92,9 @@ public class ClusterSchemaFetcher implements ISchemaFetcher {
     Set<PartialPath> explicitDevicePatternList = new HashSet<>();
     int explicitDevicePatternCount = 0;
     for (PartialPath pattern : pathPatternList) {
-      if (pattern.hasExplicitDevice() && 
templateManager.checkTemplateSetInfo(pattern) != null) {
+      if (withTemplate
+          && pattern.hasExplicitDevice()
+          && templateManager.checkTemplateSetInfo(pattern) != null) {
         explicitDevicePatternList.add(pattern.getDevicePath());
         explicitDevicePatternCount++;
       } else if (!pattern.hasWildcard()) {

Reply via email to