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 a7d5b511346 Support_NewTemplateFilteringSyntax_IsNull_IsNotNull
a7d5b511346 is described below
commit a7d5b5113462810195044c8d330c0cb84fa6b2e7
Author: linxt20 <[email protected]>
AuthorDate: Mon Jan 1 21:58:23 2024 +0800
Support_NewTemplateFilteringSyntax_IsNull_IsNotNull
---
.../org/apache/iotdb/db/it/IoTDBRestServiceIT.java | 4 +--
.../iotdb/db/it/schema/IoTDBMetadataFetchIT.java | 4 +--
.../org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 | 3 +-
.../operator/schema/source/DeviceSchemaSource.java | 35 ++++++++++++++--------
.../db/queryengine/plan/parser/ASTVisitor.java | 16 ++++++----
.../read/resp/info/impl/ShowDevicesResult.java | 13 ++++----
.../utils/filter/DeviceFilterVisitor.java | 29 ++++++++----------
.../schema/SchemaQueryScanOperatorTest.java | 3 +-
.../apache/iotdb/commons/conf/IoTDBConstant.java | 1 -
9 files changed, 59 insertions(+), 49 deletions(-)
diff --git
a/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBRestServiceIT.java
b/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBRestServiceIT.java
index 39bf04adcd5..6eab7d51f68 100644
---
a/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBRestServiceIT.java
+++
b/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBRestServiceIT.java
@@ -1366,7 +1366,7 @@ public class IoTDBRestServiceIT {
List<Object> values4 =
new ArrayList<Object>() {
{
- add("null");
+ add(null);
}
};
Assert.assertEquals(columnNames, columnNamesResult);
@@ -2017,7 +2017,7 @@ public class IoTDBRestServiceIT {
List<Object> values4 =
new ArrayList<Object>() {
{
- add("null");
+ add(null);
}
};
Assert.assertEquals(columnNames, columnNamesResult);
diff --git
a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBMetadataFetchIT.java
b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBMetadataFetchIT.java
index eb513a2bdb1..f4f4f8bf4dc 100644
---
a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBMetadataFetchIT.java
+++
b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBMetadataFetchIT.java
@@ -281,8 +281,8 @@ public class IoTDBMetadataFetchIT extends AbstractSchemaIT {
String[] sqls =
new String[] {
- "show devices root.** where template != null",
- "show devices root.sg2.** with database where template = t2",
+ "show devices root.** where template is not null",
+ "show devices root.sg2.** with database where template = 't2'",
};
Set<String>[] standards =
new Set[] {
diff --git
a/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
b/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
index 126b2dbe893..28cde6c6770 100644
---
a/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
+++
b/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
@@ -214,7 +214,8 @@ devicesWhereClause
;
templateEqualExpression
- : TEMPLATE (OPERATOR_SEQ | OPERATOR_NEQ) templateName=identifier
+ : TEMPLATE (OPERATOR_SEQ | OPERATOR_NEQ) templateName=STRING_LITERAL
+ | TEMPLATE operator_is operator_not? null_literal
;
deviceContainsExpression
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/schema/source/DeviceSchemaSource.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/schema/source/DeviceSchemaSource.java
index 75706cc3003..925a52c7824 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/schema/source/DeviceSchemaSource.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/schema/source/DeviceSchemaSource.java
@@ -38,7 +38,6 @@ import org.apache.iotdb.tsfile.utils.Binary;
import java.util.List;
-import static org.apache.iotdb.commons.conf.IoTDBConstant.STRING_NULL;
import static org.apache.iotdb.commons.schema.SchemaConstant.ALL_MATCH_PATTERN;
public class DeviceSchemaSource implements ISchemaSource<IDeviceSchemaInfo> {
@@ -98,28 +97,38 @@ public class DeviceSchemaSource implements
ISchemaSource<IDeviceSchemaInfo> {
builder
.getColumnBuilder(0)
.writeBinary(new Binary(device.getFullPath(),
TSFileConfig.STRING_CHARSET));
-
- String templateName = STRING_NULL;
int templateId = device.getTemplateId();
- if (templateId != -1) {
- templateName =
ClusterTemplateManager.getInstance().getTemplate(templateId).getName();
- }
-
if (hasSgCol) {
builder.getColumnBuilder(1).writeBinary(new Binary(database,
TSFileConfig.STRING_CHARSET));
builder
.getColumnBuilder(2)
.writeBinary(new Binary(String.valueOf(device.isAligned()),
TSFileConfig.STRING_CHARSET));
- builder
- .getColumnBuilder(3)
- .writeBinary(new Binary(String.valueOf(templateName),
TSFileConfig.STRING_CHARSET));
+ if (templateId != -1) {
+ builder
+ .getColumnBuilder(3)
+ .writeBinary(
+ new Binary(
+ String.valueOf(
+
ClusterTemplateManager.getInstance().getTemplate(templateId).getName()),
+ TSFileConfig.STRING_CHARSET));
+ } else {
+ builder.getColumnBuilder(3).appendNull();
+ }
} else {
builder
.getColumnBuilder(1)
.writeBinary(new Binary(String.valueOf(device.isAligned()),
TSFileConfig.STRING_CHARSET));
- builder
- .getColumnBuilder(2)
- .writeBinary(new Binary(String.valueOf(templateName),
TSFileConfig.STRING_CHARSET));
+ if (templateId != -1) {
+ builder
+ .getColumnBuilder(2)
+ .writeBinary(
+ new Binary(
+ String.valueOf(
+
ClusterTemplateManager.getInstance().getTemplate(templateId).getName()),
+ TSFileConfig.STRING_CHARSET));
+ } else {
+ builder.getColumnBuilder(2).appendNull();
+ }
}
builder.declarePosition();
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java
index 929a1347868..3f12fe84b30 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java
@@ -713,13 +713,19 @@ public class ASTVisitor extends
IoTDBSqlParserBaseVisitor<Statement> {
return SchemaFilterFactory.createPathContainsFilter(
parseStringLiteral(ctx.deviceContainsExpression().value.getText()));
} else {
- if (ctx.templateEqualExpression().OPERATOR_SEQ() != null) {
- return SchemaFilterFactory.createTemplateNameFilter(
-
parseIdentifier(ctx.templateEqualExpression().templateName.getText()), true);
+ String templateName = null;
+ boolean isEqual = true;
+ if (ctx.templateEqualExpression().operator_is() != null) {
+ if (ctx.templateEqualExpression().operator_not() != null) {
+ isEqual = false;
+ }
} else {
- return SchemaFilterFactory.createTemplateNameFilter(
-
parseIdentifier(ctx.templateEqualExpression().templateName.getText()), false);
+ templateName =
parseStringLiteral(ctx.templateEqualExpression().templateName.getText());
+ if (ctx.templateEqualExpression().OPERATOR_NEQ() != null) {
+ isEqual = false;
+ }
}
+ return SchemaFilterFactory.createTemplateNameFilter(templateName,
isEqual);
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/resp/info/impl/ShowDevicesResult.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/resp/info/impl/ShowDevicesResult.java
index 47c5abb8293..19aa1971008 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/resp/info/impl/ShowDevicesResult.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/resp/info/impl/ShowDevicesResult.java
@@ -26,11 +26,6 @@ public class ShowDevicesResult extends ShowSchemaResult
implements IDeviceSchema
private Boolean isAligned;
private int templateId;
- public ShowDevicesResult(String name, Boolean isAligned) {
- super(name);
- this.isAligned = isAligned;
- }
-
public ShowDevicesResult(String name, Boolean isAligned, int templateId) {
super(name);
this.isAligned = isAligned;
@@ -54,6 +49,8 @@ public class ShowDevicesResult extends ShowSchemaResult
implements IDeviceSchema
+ ", isAligned = "
+ isAligned
+ '\''
+ + ", templateId = "
+ + templateId
+ "}";
}
@@ -66,11 +63,13 @@ public class ShowDevicesResult extends ShowSchemaResult
implements IDeviceSchema
return false;
}
ShowDevicesResult result = (ShowDevicesResult) o;
- return Objects.equals(path, result.path) && isAligned == result.isAligned;
+ return Objects.equals(path, result.path)
+ && isAligned == result.isAligned
+ && templateId == result.templateId;
}
@Override
public int hashCode() {
- return Objects.hash(path, isAligned);
+ return Objects.hash(path, isAligned, templateId);
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/filter/DeviceFilterVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/filter/DeviceFilterVisitor.java
index d643e8d74ac..e1723193abf 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/filter/DeviceFilterVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/filter/DeviceFilterVisitor.java
@@ -26,8 +26,6 @@ import
org.apache.iotdb.commons.schema.filter.impl.TemplateFilter;
import
org.apache.iotdb.db.schemaengine.schemaregion.read.resp.info.IDeviceSchemaInfo;
import org.apache.iotdb.db.schemaengine.template.ClusterTemplateManager;
-import static org.apache.iotdb.commons.conf.IoTDBConstant.STRING_NULL;
-
public class DeviceFilterVisitor extends
SchemaFilterVisitor<IDeviceSchemaInfo> {
@Override
public boolean visitNode(SchemaFilter filter, IDeviceSchemaInfo info) {
@@ -45,23 +43,20 @@ public class DeviceFilterVisitor extends
SchemaFilterVisitor<IDeviceSchemaInfo>
@Override
public boolean visitTemplateFilter(TemplateFilter templateFilter,
IDeviceSchemaInfo info) {
- if (templateFilter.getTemplateName() == null) {
- return true;
- }
- String templateName = STRING_NULL;
boolean equalAns;
- int TemplateId = info.getTemplateId();
- if (TemplateId != -1) {
- templateName =
ClusterTemplateManager.getInstance().getTemplate(TemplateId).getName();
- equalAns = templateName.equals(templateFilter.getTemplateName());
- } else {
- equalAns =
templateName.equalsIgnoreCase(templateFilter.getTemplateName());
- }
-
- if (templateFilter.isEqual()) {
- return equalAns;
+ int templateId = info.getTemplateId();
+ String filterTemplateName = templateFilter.getTemplateName();
+ if (templateId != -1) {
+ equalAns =
+ ClusterTemplateManager.getInstance()
+ .getTemplate(templateId)
+ .getName()
+ .equals(filterTemplateName);
+ return templateFilter.isEqual() == equalAns;
+ } else if (filterTemplateName == null) {
+ return templateFilter.isEqual();
} else {
- return !equalAns;
+ return false;
}
}
}
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/schema/SchemaQueryScanOperatorTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/schema/SchemaQueryScanOperatorTest.java
index 615dae412ed..8f042b6e293 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/schema/SchemaQueryScanOperatorTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/schema/SchemaQueryScanOperatorTest.java
@@ -58,6 +58,7 @@ import java.util.concurrent.ExecutorService;
import static
org.apache.iotdb.db.queryengine.execution.fragment.FragmentInstanceContext.createFragmentInstanceContext;
import static
org.apache.iotdb.db.queryengine.execution.operator.schema.SchemaOperatorTestUtil.EXCEPTION_MESSAGE;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -128,7 +129,7 @@ public class SchemaQueryScanOperatorTest {
assertEquals("false",
tsBlock.getColumn(j).getBinary(i).toString());
break;
case 3:
- assertEquals("null",
tsBlock.getColumn(j).getBinary(i).toString());
+ assertNull(tsBlock.getColumn(j).getBinary(i));
break;
default:
break;
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/IoTDBConstant.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/IoTDBConstant.java
index df1aec9eaa4..9b7c37782b3 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/IoTDBConstant.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/IoTDBConstant.java
@@ -336,5 +336,4 @@ public class IoTDBConstant {
public static final String TIER_SEPARATOR = ";";
public static final String OBJECT_STORAGE_DIR = "object_storage";
- public static final String STRING_NULL = "null";
}