This is an automated email from the ASF dual-hosted git repository.
jt2594838 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 335048c752a Banned the tree model database in table model SQLs &&
Pipe: Upgraded bouncy castle && Added logs for pipe tsFile parser (#17504)
335048c752a is described below
commit 335048c752a89ae6072601e372e26f7dab248133
Author: Caideyipi <[email protected]>
AuthorDate: Mon Apr 20 15:39:51 2026 +0800
Banned the tree model database in table model SQLs && Pipe: Upgraded bouncy
castle && Added logs for pipe tsFile parser (#17504)
* databases
* cv3
* fix
* fix
* log
* sg23
* sg24
---
.../iotdb/relational/it/db/it/IoTDBInsertTableIT.java | 17 +++++++++++++++++
.../relational/it/rest/it/IoTDBRestServiceIT.java | 18 ++++++++++++++++++
.../tsfile/parser/TsFileInsertionEventParser.java | 17 ++++++++++++++++-
.../parser/query/TsFileInsertionEventQueryParser.java | 4 +++-
.../parser/scan/TsFileInsertionEventScanParser.java | 4 +++-
.../parser/table/TsFileInsertionEventTableParser.java | 4 +++-
.../iotdb/db/protocol/session/IClientSession.java | 11 +++++++++++
.../plan/relational/sql/parser/AstBuilder.java | 7 ++++++-
pom.xml | 2 +-
9 files changed, 78 insertions(+), 6 deletions(-)
diff --git
a/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBInsertTableIT.java
b/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBInsertTableIT.java
index c223761cd2a..3de74f71bf9 100644
---
a/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBInsertTableIT.java
+++
b/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBInsertTableIT.java
@@ -1275,6 +1275,23 @@ public class IoTDBInsertTableIT {
}
}
+ @Test
+ public void testInsertWithTree() {
+ try (Connection connection =
EnvFactory.getEnv().getConnection(BaseEnv.TABLE_SQL_DIALECT);
+ Statement statement = connection.createStatement()) {
+ statement.execute("use \"test\"");
+ statement.execute("create table sg24 (tag1 string tag, s1 int64 field)");
+ statement.execute(
+ String.format(
+ "insert into root.test.sg24(tag1,time,s1) values('d1',%s,2)",
+ System.currentTimeMillis()));
+ fail();
+ } catch (Exception e) {
+ Assert.assertEquals(
+ "701: The tree model database shall not be specified in table
model.", e.getMessage());
+ }
+ }
+
private List<Integer> checkHeader(
ResultSetMetaData resultSetMetaData, String expectedHeaderStrings, int[]
expectedTypes)
throws SQLException {
diff --git
a/integration-test/src/test/java/org/apache/iotdb/relational/it/rest/it/IoTDBRestServiceIT.java
b/integration-test/src/test/java/org/apache/iotdb/relational/it/rest/it/IoTDBRestServiceIT.java
index 8ffe434db73..05567b886fc 100644
---
a/integration-test/src/test/java/org/apache/iotdb/relational/it/rest/it/IoTDBRestServiceIT.java
+++
b/integration-test/src/test/java/org/apache/iotdb/relational/it/rest/it/IoTDBRestServiceIT.java
@@ -143,6 +143,7 @@ public class IoTDBRestServiceIT {
testInsertMultiPartition();
testInsertTablet();
testInsertTabletNoDatabase();
+ testInsertTabletWithTreeDB();
testInsertTablet1();
testInsertTablet2();
testQuery();
@@ -296,6 +297,18 @@ public class IoTDBRestServiceIT {
assertEquals(305, Integer.parseInt(result.get("code").toString()));
}
+ public void testInsertTabletWithTreeDB() {
+ List<String> sqls =
+ Collections.singletonList(
+ "create table sg211 (tag1 string tag,t1 STRING ATTRIBUTE, s1 FLOAT
field)");
+ for (String sql : sqls) {
+ RestUtils.nonQuery(httpClient, port, sqlHandler("test", sql));
+ }
+ String json =
+
"{\"database\":\"root.test\",\"column_categories\":[\"TAG\",\"ATTRIBUTE\",\"FIELD\"],\"timestamps\":[1635232143960,1635232153960,1635232163960,1635232173960,1635232183960],\"column_names\":[\"tag1\",\"t1\",\"s1\"],\"data_types\":[\"STRING\",\"STRING\",\"FLOAT\"],\"values\":[[\"a11\",\"true\",11],[\"a11\",\"false\",22],[\"a13\",\"false1\",23],[\"a14\",\"false2\",24],[\"a15\",\"false3\",25]],\"table\":\"sg211\"}";
+ wrongInsertTablet(json);
+ }
+
public void testInsertTablet1() {
List<String> sqls =
Collections.singletonList(
@@ -340,6 +353,11 @@ public class IoTDBRestServiceIT {
assertEquals(11f, jsonArray1.get(2).getAsFloat(), 0f);
}
+ public void wrongInsertTablet(String json) {
+ JsonObject result = RestUtils.insertTablet(httpClient, port, json);
+ assertEquals(701, Integer.parseInt(result.get("code").toString()));
+ }
+
public void prepareTableData() {
for (int i = 0; i < sqls.length; i++) {
JsonObject jsonObject = new JsonObject();
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/TsFileInsertionEventParser.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/TsFileInsertionEventParser.java
index 678e7a4a62a..a723adce0df 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/TsFileInsertionEventParser.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/TsFileInsertionEventParser.java
@@ -26,6 +26,7 @@ import
org.apache.iotdb.commons.pipe.datastructure.pattern.TablePattern;
import org.apache.iotdb.commons.pipe.datastructure.pattern.TreePattern;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.pipe.event.common.PipeInsertionEvent;
+import
org.apache.iotdb.db.pipe.event.common.tsfile.parser.table.TsFileInsertionEventTableParser;
import org.apache.iotdb.db.pipe.metric.overview.PipeTsFileToTabletsMetrics;
import org.apache.iotdb.db.pipe.resource.PipeDataNodeResourceManager;
import org.apache.iotdb.db.pipe.resource.memory.PipeMemoryBlock;
@@ -41,6 +42,7 @@ import org.apache.tsfile.write.record.Tablet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.File;
import java.io.IOException;
public abstract class TsFileInsertionEventParser implements AutoCloseable {
@@ -76,6 +78,7 @@ public abstract class TsFileInsertionEventParser implements
AutoCloseable {
protected Iterable<TabletInsertionEvent> tabletInsertionIterable;
protected TsFileInsertionEventParser(
+ final File tsFile,
final String pipeName,
final long creationTime,
final TreePattern treePattern,
@@ -85,7 +88,8 @@ public abstract class TsFileInsertionEventParser implements
AutoCloseable {
final PipeTaskMeta pipeTaskMeta,
final IAuditEntity entity,
final boolean skipIfNoPrivileges,
- final PipeInsertionEvent sourceEvent) {
+ final PipeInsertionEvent sourceEvent,
+ final boolean isWithMod) {
this.pipeName = pipeName;
this.creationTime = creationTime;
this.entity = entity;
@@ -107,6 +111,17 @@ public abstract class TsFileInsertionEventParser
implements AutoCloseable {
PipeDataNodeResourceManager.memory()
.forceAllocateForTabletWithRetry(
IoTDBDescriptor.getInstance().getConfig().getPipeDataStructureTabletSizeInBytes());
+
+ LOGGER.info(
+ "TsFile {} has initialized {}, pipeName: {}, creation time: {},
pattern: {}, startTime: {}, endTime: {}, withMod: {}",
+ tsFile,
+ getClass().getSimpleName(),
+ pipeName,
+ creationTime,
+ this instanceof TsFileInsertionEventTableParser ? tablePattern :
treePattern,
+ startTime,
+ endTime,
+ isWithMod);
}
/**
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/query/TsFileInsertionEventQueryParser.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/query/TsFileInsertionEventQueryParser.java
index cc497635aab..7e7226a6165 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/query/TsFileInsertionEventQueryParser.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/query/TsFileInsertionEventQueryParser.java
@@ -131,6 +131,7 @@ public class TsFileInsertionEventQueryParser extends
TsFileInsertionEventParser
final boolean isWithMod)
throws IOException, IllegalPathException {
super(
+ tsFile,
pipeName,
creationTime,
pattern,
@@ -140,7 +141,8 @@ public class TsFileInsertionEventQueryParser extends
TsFileInsertionEventParser
pipeTaskMeta,
entity,
skipIfNoPrivileges,
- sourceEvent);
+ sourceEvent,
+ isWithMod);
try {
currentModifications =
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/scan/TsFileInsertionEventScanParser.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/scan/TsFileInsertionEventScanParser.java
index da9d7d00477..aeb7aaadf28 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/scan/TsFileInsertionEventScanParser.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/scan/TsFileInsertionEventScanParser.java
@@ -118,6 +118,7 @@ public class TsFileInsertionEventScanParser extends
TsFileInsertionEventParser {
final boolean isWithMod)
throws IOException, IllegalPathException {
super(
+ tsFile,
pipeName,
creationTime,
pattern,
@@ -127,7 +128,8 @@ public class TsFileInsertionEventScanParser extends
TsFileInsertionEventParser {
pipeTaskMeta,
entity,
skipIfNoPrivileges,
- sourceEvent);
+ sourceEvent,
+ isWithMod);
this.startTime = startTime;
this.endTime = endTime;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/table/TsFileInsertionEventTableParser.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/table/TsFileInsertionEventTableParser.java
index af2fd214e4a..87cf374aeb2 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/table/TsFileInsertionEventTableParser.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/table/TsFileInsertionEventTableParser.java
@@ -71,6 +71,7 @@ public class TsFileInsertionEventTableParser extends
TsFileInsertionEventParser
final boolean isWithMod)
throws IOException {
super(
+ tsFile,
pipeName,
creationTime,
null,
@@ -80,7 +81,8 @@ public class TsFileInsertionEventTableParser extends
TsFileInsertionEventParser
pipeTaskMeta,
entity,
true,
- sourceEvent);
+ sourceEvent,
+ isWithMod);
this.isWithMod = isWithMod;
try {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/session/IClientSession.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/session/IClientSession.java
index 44db6402375..9054636904e 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/session/IClientSession.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/session/IClientSession.java
@@ -21,7 +21,10 @@ package org.apache.iotdb.db.protocol.session;
import org.apache.iotdb.commons.conf.IoTDBConstant.ClientVersion;
import org.apache.iotdb.commons.utils.CommonDateTimeUtils;
+import org.apache.iotdb.commons.utils.PathUtils;
+import org.apache.iotdb.db.exception.sql.SemanticException;
import org.apache.iotdb.db.queryengine.common.ConnectionInfo;
+import org.apache.iotdb.rpc.subscription.annotation.TableModel;
import org.apache.iotdb.service.rpc.thrift.TSConnectionInfo;
import org.apache.iotdb.service.rpc.thrift.TSConnectionType;
@@ -33,6 +36,7 @@ import java.io.DataOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.time.ZoneId;
+import java.util.Objects;
import java.util.Set;
import java.util.TimeZone;
@@ -188,8 +192,15 @@ public abstract class IClientSession {
return databaseName;
}
+ @TableModel
public void setDatabaseName(@Nullable String databaseName) {
this.databaseName = databaseName;
+ if (Objects.nonNull(databaseName) &&
!PathUtils.isTableModelDatabase(databaseName)) {
+ throw new SemanticException(
+ "The database name "
+ + databaseName
+ + " is a tree model database, which is not allowed to set in the
client session.");
+ }
}
/**
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 8770f6416c5..9bd99771f53 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
@@ -32,6 +32,7 @@ import
org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
import org.apache.iotdb.commons.schema.table.column.TsTableColumnSchema;
import
org.apache.iotdb.commons.udf.builtin.relational.TableBuiltinScalarFunction;
import org.apache.iotdb.commons.utils.CommonDateTimeUtils;
+import org.apache.iotdb.commons.utils.PathUtils;
import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.exception.sql.SemanticException;
import org.apache.iotdb.db.protocol.session.IClientSession;
@@ -4136,7 +4137,11 @@ public class AstBuilder extends
RelationalSqlBaseVisitor<Node> {
}
private QualifiedName
getQualifiedName(RelationalSqlParser.QualifiedNameContext context) {
- return QualifiedName.of(visit(context.identifier(), Identifier.class));
+ final QualifiedName result = QualifiedName.of(visit(context.identifier(),
Identifier.class));
+ if (!result.getPrefix().map(s ->
PathUtils.isTableModelDatabase(s.toString())).orElse(true)) {
+ throw new SemanticException("The tree model database shall not be
specified in table model.");
+ }
+ return result;
}
private static boolean isDistinct(RelationalSqlParser.SetQuantifierContext
setQuantifier) {
diff --git a/pom.xml b/pom.xml
index 4d837399bf7..1763a519f9e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -61,7 +61,7 @@
<argLine/>
<awaitility.version>4.2.0</awaitility.version>
<boost.include.dir/>
- <bouncycastle.version>1.81</bouncycastle.version>
+ <bouncycastle.version>1.84</bouncycastle.version>
<!-- This was the last version to support Java 8 -->
<caffeine.version>2.9.3</caffeine.version>
<cglib.version>3.3.0</cglib.version>