private static IDPredicate parseIsNull(
      IsNullPredicate isNullPredicate, IDPredicate oldPredicate, TsTable table) {
    Expression leftHandExp = isNullPredicate.getValue();
    if (!(leftHandExp instanceof Identifier)) {
      throw new SemanticException("Left hand expression is not an identifier: " + leftHandExp);
    }
    String columnName = ((Identifier) leftHandExp).getValue();
    int idColumnOrdinal = table.getTagColumnOrdinal(columnName);
    if (idColumnOrdinal == -1) {
      throw new SemanticException(
          "The column '" + columnName + "' does not exist or is not a tag column");
    }

    // the first segment is the table name, so + 1
    IDPredicate newPredicate = new SegmentExactMatch(null, idColumnOrdinal + 1);
    return combinePredicates(oldPredicate, newPredicate);
  }
Convert to a disjunctive normal forms.

<p>For example: ( A | B ) & ( C | D ) => ( A & C ) | ( A & D ) | ( B & C ) | ( B & D)

<p>Returns the original expression if the expression is null or if the distribution will expand
the expression by too much.
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeUtils.java