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";
 }

Reply via email to