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()) {