You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by zy...@apache.org on 2023/04/24 00:59:22 UTC
[iotdb] branch master updated: Fix NPE when using template and executing select into (#9679)
This is an automated email from the ASF dual-hosted git repository.
zyk 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 3412975a4a Fix NPE when using template and executing select into (#9679)
3412975a4a is described below
commit 3412975a4af46fbb0b3dd7f3d76a4b7428278d8f
Author: Marcos_Zyk <38...@users.noreply.github.com>
AuthorDate: Mon Apr 24 08:59:14 2023 +0800
Fix NPE when using template and executing select into (#9679)
---
.../iotdb/db/it/schema/IoTDBExtendTemplateIT.java | 45 ++++++++++++++++++++++
.../cache/DataNodeTemplateSchemaCache.java | 17 ++++----
2 files changed, 55 insertions(+), 7 deletions(-)
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBExtendTemplateIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBExtendTemplateIT.java
index faefd2995f..011a7082de 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBExtendTemplateIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBExtendTemplateIT.java
@@ -174,4 +174,49 @@ public class IoTDBExtendTemplateIT extends AbstractSchemaIT {
}
}
}
+
+ @Test
+ public void testSelectInto() throws SQLException {
+ try (Connection connection = EnvFactory.getEnv().getConnection();
+ Statement statement = connection.createStatement()) {
+ // create database
+ statement.execute("CREATE DATABASE root.db");
+
+ // create schema template
+ statement.execute(
+ "CREATE SCHEMA TEMPLATE t1 (s1 INT64 ENCODING=PLAIN, s2 DOUBLE ENCODING=RLE)");
+
+ statement.execute("SET SCHEMA TEMPLATE t1 to root.db");
+
+ statement.execute("INSERT INTO root.db.d1(time, s1, s2) values(1, 1, 1)");
+
+ statement.execute("SELECT s1, s2 into root.::(t1, t2) from root.db.d1");
+
+ String[] sqls =
+ new String[] {
+ "show timeseries",
+ };
+ Set<String>[] standards =
+ new Set[] {
+ new HashSet<>(
+ Arrays.asList("root.db.d1.s1", "root.db.d1.s2", "root.db.d1.t1", "root.db.d1.t2"))
+ };
+ for (int n = 0; n < sqls.length; n++) {
+ String sql = sqls[n];
+ Set<String> standard = standards[n];
+ try (ResultSet resultSet = statement.executeQuery(sql)) {
+ ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+ while (resultSet.next()) {
+ String string = resultSet.getString(1);
+ Assert.assertTrue(standard.contains(string));
+ standard.remove(string);
+ }
+ assertEquals(0, standard.size());
+ } catch (SQLException e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+ }
+ }
}
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/cache/DataNodeTemplateSchemaCache.java b/server/src/main/java/org/apache/iotdb/db/metadata/cache/DataNodeTemplateSchemaCache.java
index 39837a504c..52730b7dfa 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/cache/DataNodeTemplateSchemaCache.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/cache/DataNodeTemplateSchemaCache.java
@@ -96,13 +96,16 @@ public class DataNodeTemplateSchemaCache {
ClusterSchemaTree schemaTree = new ClusterSchemaTree();
if (deviceCacheEntry != null) {
Template template = templateManager.getTemplate(deviceCacheEntry.getTemplateId());
- schemaTree.appendSingleMeasurement(
- fullPath,
- (MeasurementSchema) template.getSchema(fullPath.getMeasurement()),
- null,
- null,
- template.isDirectAligned());
- schemaTree.setDatabases(Collections.singleton(deviceCacheEntry.getDatabase()));
+ IMeasurementSchema measurementSchema = template.getSchema(fullPath.getMeasurement());
+ if (measurementSchema != null) {
+ schemaTree.appendSingleMeasurement(
+ fullPath,
+ (MeasurementSchema) measurementSchema,
+ null,
+ null,
+ template.isDirectAligned());
+ schemaTree.setDatabases(Collections.singleton(deviceCacheEntry.getDatabase()));
+ }
}
return schemaTree;
}