protected static PlanNode deserialize(final ByteBuffer buffer, final boolean isScan) {
    final String database = ReadWriteIOUtils.readString(buffer);
    final String tableName = ReadWriteIOUtils.readString(buffer);

    int size = ReadWriteIOUtils.readInt(buffer);
    final List<List<SchemaFilter>> tagDeterminedFilterList = new ArrayList<>(size);
    for (int i = 0; i < size; i++) {
      final int singleSize = ReadWriteIOUtils.readInt(buffer);
      tagDeterminedFilterList.add(new ArrayList<>(singleSize));
      for (int k = 0; k < singleSize; k++) {
        tagDeterminedFilterList.get(i).add(SchemaFilter.deserialize(buffer));
      }
    }

    Expression tagFuzzyFilter = null;
    if (buffer.get() == 1) {
      tagFuzzyFilter = Expression.deserialize(buffer);
    }

    size = ReadWriteIOUtils.readInt(buffer);
    final List<ColumnHeader> columnHeaderList = new ArrayList<>(size);
    for (int i = 0; i < size; i++) {
      columnHeaderList.add(ColumnHeader.deserialize(buffer));
    }

    TDataNodeLocation senderLocation = null;
    if (ReadWriteIOUtils.readBool(buffer)) {
      senderLocation =
          DeviceAttributeCacheUpdater.deserializeNodeLocationForAttributeUpdate(buffer);
    }

    final long limit = isScan ? ReadWriteIOUtils.readLong(buffer) : 0;
    final boolean needAligned = isScan ? ReadWriteIOUtils.readBool(buffer) : false;

    final PlanNodeId planNodeId = PlanNodeId.deserialize(buffer);
    return isScan
        ? new TableDeviceQueryScanNode(
            planNodeId,
            database,
            tableName,
            tagDeterminedFilterList,
            tagFuzzyFilter,
            columnHeaderList,
            senderLocation,
            limit,
            needAligned)
        : new TableDeviceQueryCountNode(
            planNodeId,
            database,
            tableName,
            tagDeterminedFilterList,
            tagFuzzyFilter,
            columnHeaderList);
  }
filters/conditions involving non-tag columns and concat by OR to tag column filters
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/schema/AbstractTableDeviceQueryNode.java