You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ji...@apache.org on 2024/08/15 02:46:51 UTC
(iotdb) 01/02: Fix insertion case sensitivity of table model
This is an automated email from the ASF dual-hosted git repository.
jiangtian pushed a commit to branch fix_insert_case_sensitivity
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit fac246fe4fa75e581a9ce8d3d823a6445fdef481
Author: Tian Jiang <jt...@163.com>
AuthorDate: Thu Aug 15 10:16:49 2024 +0800
Fix insertion case sensitivity of table model
---
.../relational/it/db/it/IoTDBInsertTableIT.java | 35 ++++++++++++++++++++++
.../plan/analyze/schema/SchemaValidator.java | 1 +
.../relational/sql/ast/WrappedInsertStatement.java | 4 +++
.../plan/relational/sql/parser/AstBuilder.java | 3 --
.../plan/statement/crud/InsertBaseStatement.java | 13 ++++++++
.../crud/InsertMultiTabletsStatement.java | 7 +++++
.../crud/InsertRowsOfOneDeviceStatement.java | 7 +++++
.../plan/statement/crud/InsertRowsStatement.java | 7 +++++
8 files changed, 74 insertions(+), 3 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 76be6647d4c..733dbfa4d53 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
@@ -557,6 +557,7 @@ public class IoTDBInsertTableIT {
st1.execute("flush");
st1.execute("insert into sg17(id1, time, s1) values('d1', 604799990,1), ('d1', 604800001,1)");
st1.execute("flush");
+
ResultSet rs1 = st1.executeQuery("select time, s1 from sg17");
assertTrue(rs1.next());
assertEquals(604799990, rs1.getLong("time"));
@@ -577,6 +578,40 @@ public class IoTDBInsertTableIT {
"create table if not exists sg18 (id1 string id, s1 string attribute, s2 int32 measurement)");
st1.execute("insert into sg18(id1, s1, s2) values('d1','1', 1)");
st1.execute("insert into sg18(id1, s1, s2) values('d2', 2, 2)");
+
+ ResultSet rs1 = st1.executeQuery("select time, s1, s2 from sg18");
+ assertTrue(rs1.next());
+ assertEquals("1", rs1.getString("s1"));
+ assertTrue(rs1.next());
+ assertEquals("2", rs1.getString("s1"));
+ assertFalse(rs1.next());
+ }
+ }
+
+ @Test
+ public void testInsertCaseSensitivity() throws SQLException {
+ try (Connection connection = EnvFactory.getEnv().getConnection(BaseEnv.TABLE_SQL_DIALECT);
+ Statement st1 = connection.createStatement()) {
+ st1.execute("use \"test\"");
+ st1.execute(
+ "create table if not exists sg19 (id1 string id, ss1 string attribute, ss2 int32 measurement)");
+ // lower case
+ st1.execute("insert into sg19(time, id1, ss1, ss2) values(1, 'd1','1', 1)");
+ st1.execute("insert into sg19(time, id1, ss1, ss2) values(2, 'd2', 2, 2)");
+ // upper case
+ st1.execute("insert into sg19(TIME, ID1, SS1, SS2) values(3, 'd3','3', 3)");
+ st1.execute("insert into sg19(TIME, ID1, SS1, SS2) values(4, 'd4', 4, 4)");
+ // mixed
+ st1.execute("insert into sg19(TIme, Id1, Ss1, Ss2) values(5, 'd5','5', 5)");
+ st1.execute("insert into sg19(TIme, Id1, sS1, sS2) values(6, 'd6', 6, 6)");
+
+ ResultSet rs1 = st1.executeQuery("select time, ss1, ss2 from sg19");
+ for (int i = 0; i < 6; i++) {
+ assertTrue(rs1.next());
+ assertEquals(i, rs1.getLong("time"));
+ assertEquals(String.valueOf(i), rs1.getString("ss1"));
+ assertEquals(i, rs1.getInt("ss2"));
+ }
}
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/SchemaValidator.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/SchemaValidator.java
index bc4d275c285..2458ff36338 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/SchemaValidator.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/SchemaValidator.java
@@ -64,6 +64,7 @@ public class SchemaValidator {
public static void validate(
Metadata metadata, WrappedInsertStatement insertStatement, MPPQueryContext context) {
try {
+ insertStatement.columnsToLowerCase();
insertStatement.validateTableSchema(metadata, context);
insertStatement.updateAfterSchemaValidation(context);
insertStatement.validateDeviceSchema(metadata, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedInsertStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedInsertStatement.java
index e8481557784..f86ed3ab9f8 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedInsertStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedInsertStatement.java
@@ -218,4 +218,8 @@ public abstract class WrappedInsertStatement extends WrappedStatement
}
return databaseName;
}
+
+ public void columnsToLowerCase() {
+ getInnerTreeStatement().measurementsToLowerCase();
+ }
}
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 b2e98656fa1..3160c2c43f1 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
@@ -417,9 +417,6 @@ public class AstBuilder extends RelationalSqlBaseVisitor<Node> {
InsertRowsStatement insertRowsStatement = new InsertRowsStatement();
insertRowsStatement.setInsertRowStatementList(rowStatements);
insertRowsStatement.setWriteToTable(true);
- insertRowsStatement.setDevicePath(new PartialPath(new String[] {tableName}));
- databaseName.ifPresent(insertRowsStatement::setDatabaseName);
- insertRowsStatement.setMeasurements(columnNameArray);
return new InsertRows(insertRowsStatement, null);
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertBaseStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertBaseStatement.java
index 8bccc30f493..5dd11f2c967 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertBaseStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertBaseStatement.java
@@ -551,5 +551,18 @@ public abstract class InsertBaseStatement extends Statement {
public Optional<String> getDatabaseName() {
return Optional.ofNullable(databaseName);
}
+
// endregion
+
+ @TableModel
+ public void measurementsToLowerCase() {
+ if (measurements == null) {
+ return;
+ }
+ for (int i = 0; i < measurements.length; i++) {
+ if (measurements[i] != null) {
+ measurements[i] = measurements[i].toLowerCase();
+ }
+ }
+ }
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertMultiTabletsStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertMultiTabletsStatement.java
index bfc4e6406c6..01b76524f1c 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertMultiTabletsStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertMultiTabletsStatement.java
@@ -24,6 +24,7 @@ import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
import org.apache.iotdb.db.queryengine.plan.analyze.schema.ISchemaValidation;
import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
+import org.apache.iotdb.db.utils.annotations.TableModel;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.exception.NotImplementedException;
@@ -144,4 +145,10 @@ public class InsertMultiTabletsStatement extends InsertBaseStatement {
splitResult.setInsertTabletStatementList(mergedList);
return splitResult;
}
+
+ @TableModel
+ @Override
+ public void measurementsToLowerCase() {
+ insertTabletStatementList.forEach(InsertTabletStatement::measurementsToLowerCase);
+ }
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertRowsOfOneDeviceStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertRowsOfOneDeviceStatement.java
index 66bdcd35feb..6097a4118f3 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertRowsOfOneDeviceStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertRowsOfOneDeviceStatement.java
@@ -27,6 +27,7 @@ import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
import org.apache.iotdb.db.queryengine.plan.analyze.schema.ISchemaValidation;
import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
+import org.apache.iotdb.db.utils.annotations.TableModel;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.exception.NotImplementedException;
@@ -167,4 +168,10 @@ public class InsertRowsOfOneDeviceStatement extends InsertBaseStatement {
}
return this;
}
+
+ @TableModel
+ @Override
+ public void measurementsToLowerCase() {
+ insertRowStatementList.forEach(InsertRowStatement::measurementsToLowerCase);
+ }
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertRowsStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertRowsStatement.java
index 68a0264a508..175031f9196 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertRowsStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertRowsStatement.java
@@ -25,6 +25,7 @@ import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
import org.apache.iotdb.db.queryengine.plan.analyze.schema.ISchemaValidation;
import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
+import org.apache.iotdb.db.utils.annotations.TableModel;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.exception.NotImplementedException;
@@ -173,4 +174,10 @@ public class InsertRowsStatement extends InsertBaseStatement {
})
.collect(Collectors.toList());
}
+
+ @TableModel
+ @Override
+ public void measurementsToLowerCase() {
+ insertRowStatementList.forEach(InsertRowStatement::measurementsToLowerCase);
+ }
}