TExprNode.java

/**
 * Autogenerated by Thrift Compiler (0.16.0)
 *
 * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
 *  @generated
 */
package org.apache.doris.thrift;

@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.16.0)", date = "2026-05-14")
public class TExprNode implements org.apache.thrift.TBase<TExprNode, TExprNode._Fields>, java.io.Serializable, Cloneable, Comparable<TExprNode> {
  private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TExprNode");

  private static final org.apache.thrift.protocol.TField NODE_TYPE_FIELD_DESC = new org.apache.thrift.protocol.TField("node_type", org.apache.thrift.protocol.TType.I32, (short)1);
  private static final org.apache.thrift.protocol.TField TYPE_FIELD_DESC = new org.apache.thrift.protocol.TField("type", org.apache.thrift.protocol.TType.STRUCT, (short)2);
  private static final org.apache.thrift.protocol.TField OPCODE_FIELD_DESC = new org.apache.thrift.protocol.TField("opcode", org.apache.thrift.protocol.TType.I32, (short)3);
  private static final org.apache.thrift.protocol.TField NUM_CHILDREN_FIELD_DESC = new org.apache.thrift.protocol.TField("num_children", org.apache.thrift.protocol.TType.I32, (short)4);
  private static final org.apache.thrift.protocol.TField AGG_EXPR_FIELD_DESC = new org.apache.thrift.protocol.TField("agg_expr", org.apache.thrift.protocol.TType.STRUCT, (short)5);
  private static final org.apache.thrift.protocol.TField BOOL_LITERAL_FIELD_DESC = new org.apache.thrift.protocol.TField("bool_literal", org.apache.thrift.protocol.TType.STRUCT, (short)6);
  private static final org.apache.thrift.protocol.TField CASE_EXPR_FIELD_DESC = new org.apache.thrift.protocol.TField("case_expr", org.apache.thrift.protocol.TType.STRUCT, (short)7);
  private static final org.apache.thrift.protocol.TField DATE_LITERAL_FIELD_DESC = new org.apache.thrift.protocol.TField("date_literal", org.apache.thrift.protocol.TType.STRUCT, (short)8);
  private static final org.apache.thrift.protocol.TField FLOAT_LITERAL_FIELD_DESC = new org.apache.thrift.protocol.TField("float_literal", org.apache.thrift.protocol.TType.STRUCT, (short)9);
  private static final org.apache.thrift.protocol.TField INT_LITERAL_FIELD_DESC = new org.apache.thrift.protocol.TField("int_literal", org.apache.thrift.protocol.TType.STRUCT, (short)10);
  private static final org.apache.thrift.protocol.TField IN_PREDICATE_FIELD_DESC = new org.apache.thrift.protocol.TField("in_predicate", org.apache.thrift.protocol.TType.STRUCT, (short)11);
  private static final org.apache.thrift.protocol.TField IS_NULL_PRED_FIELD_DESC = new org.apache.thrift.protocol.TField("is_null_pred", org.apache.thrift.protocol.TType.STRUCT, (short)12);
  private static final org.apache.thrift.protocol.TField LIKE_PRED_FIELD_DESC = new org.apache.thrift.protocol.TField("like_pred", org.apache.thrift.protocol.TType.STRUCT, (short)13);
  private static final org.apache.thrift.protocol.TField LITERAL_PRED_FIELD_DESC = new org.apache.thrift.protocol.TField("literal_pred", org.apache.thrift.protocol.TType.STRUCT, (short)14);
  private static final org.apache.thrift.protocol.TField SLOT_REF_FIELD_DESC = new org.apache.thrift.protocol.TField("slot_ref", org.apache.thrift.protocol.TType.STRUCT, (short)15);
  private static final org.apache.thrift.protocol.TField STRING_LITERAL_FIELD_DESC = new org.apache.thrift.protocol.TField("string_literal", org.apache.thrift.protocol.TType.STRUCT, (short)16);
  private static final org.apache.thrift.protocol.TField TUPLE_IS_NULL_PRED_FIELD_DESC = new org.apache.thrift.protocol.TField("tuple_is_null_pred", org.apache.thrift.protocol.TType.STRUCT, (short)17);
  private static final org.apache.thrift.protocol.TField INFO_FUNC_FIELD_DESC = new org.apache.thrift.protocol.TField("info_func", org.apache.thrift.protocol.TType.STRUCT, (short)18);
  private static final org.apache.thrift.protocol.TField DECIMAL_LITERAL_FIELD_DESC = new org.apache.thrift.protocol.TField("decimal_literal", org.apache.thrift.protocol.TType.STRUCT, (short)19);
  private static final org.apache.thrift.protocol.TField OUTPUT_SCALE_FIELD_DESC = new org.apache.thrift.protocol.TField("output_scale", org.apache.thrift.protocol.TType.I32, (short)20);
  private static final org.apache.thrift.protocol.TField FN_CALL_EXPR_FIELD_DESC = new org.apache.thrift.protocol.TField("fn_call_expr", org.apache.thrift.protocol.TType.STRUCT, (short)21);
  private static final org.apache.thrift.protocol.TField LARGE_INT_LITERAL_FIELD_DESC = new org.apache.thrift.protocol.TField("large_int_literal", org.apache.thrift.protocol.TType.STRUCT, (short)22);
  private static final org.apache.thrift.protocol.TField OUTPUT_COLUMN_FIELD_DESC = new org.apache.thrift.protocol.TField("output_column", org.apache.thrift.protocol.TType.I32, (short)23);
  private static final org.apache.thrift.protocol.TField OUTPUT_TYPE_FIELD_DESC = new org.apache.thrift.protocol.TField("output_type", org.apache.thrift.protocol.TType.STRUCT, (short)24);
  private static final org.apache.thrift.protocol.TField VECTOR_OPCODE_FIELD_DESC = new org.apache.thrift.protocol.TField("vector_opcode", org.apache.thrift.protocol.TType.I32, (short)25);
  private static final org.apache.thrift.protocol.TField FN_FIELD_DESC = new org.apache.thrift.protocol.TField("fn", org.apache.thrift.protocol.TType.STRUCT, (short)26);
  private static final org.apache.thrift.protocol.TField VARARG_START_IDX_FIELD_DESC = new org.apache.thrift.protocol.TField("vararg_start_idx", org.apache.thrift.protocol.TType.I32, (short)27);
  private static final org.apache.thrift.protocol.TField CHILD_TYPE_FIELD_DESC = new org.apache.thrift.protocol.TField("child_type", org.apache.thrift.protocol.TType.I32, (short)28);
  private static final org.apache.thrift.protocol.TField IS_NULLABLE_FIELD_DESC = new org.apache.thrift.protocol.TField("is_nullable", org.apache.thrift.protocol.TType.BOOL, (short)29);
  private static final org.apache.thrift.protocol.TField JSON_LITERAL_FIELD_DESC = new org.apache.thrift.protocol.TField("json_literal", org.apache.thrift.protocol.TType.STRUCT, (short)30);
  private static final org.apache.thrift.protocol.TField SCHEMA_CHANGE_EXPR_FIELD_DESC = new org.apache.thrift.protocol.TField("schema_change_expr", org.apache.thrift.protocol.TType.STRUCT, (short)31);
  private static final org.apache.thrift.protocol.TField COLUMN_REF_FIELD_DESC = new org.apache.thrift.protocol.TField("column_ref", org.apache.thrift.protocol.TType.STRUCT, (short)32);
  private static final org.apache.thrift.protocol.TField MATCH_PREDICATE_FIELD_DESC = new org.apache.thrift.protocol.TField("match_predicate", org.apache.thrift.protocol.TType.STRUCT, (short)33);
  private static final org.apache.thrift.protocol.TField IPV4_LITERAL_FIELD_DESC = new org.apache.thrift.protocol.TField("ipv4_literal", org.apache.thrift.protocol.TType.STRUCT, (short)34);
  private static final org.apache.thrift.protocol.TField IPV6_LITERAL_FIELD_DESC = new org.apache.thrift.protocol.TField("ipv6_literal", org.apache.thrift.protocol.TType.STRUCT, (short)35);
  private static final org.apache.thrift.protocol.TField LABEL_FIELD_DESC = new org.apache.thrift.protocol.TField("label", org.apache.thrift.protocol.TType.STRING, (short)36);
  private static final org.apache.thrift.protocol.TField TIMEV2_LITERAL_FIELD_DESC = new org.apache.thrift.protocol.TField("timev2_literal", org.apache.thrift.protocol.TType.STRUCT, (short)37);
  private static final org.apache.thrift.protocol.TField VARBINARY_LITERAL_FIELD_DESC = new org.apache.thrift.protocol.TField("varbinary_literal", org.apache.thrift.protocol.TType.STRUCT, (short)38);
  private static final org.apache.thrift.protocol.TField IS_CAST_NULLABLE_FIELD_DESC = new org.apache.thrift.protocol.TField("is_cast_nullable", org.apache.thrift.protocol.TType.BOOL, (short)39);
  private static final org.apache.thrift.protocol.TField SEARCH_PARAM_FIELD_DESC = new org.apache.thrift.protocol.TField("search_param", org.apache.thrift.protocol.TType.STRUCT, (short)40);
  private static final org.apache.thrift.protocol.TField SHORT_CIRCUIT_EVALUATION_FIELD_DESC = new org.apache.thrift.protocol.TField("short_circuit_evaluation", org.apache.thrift.protocol.TType.BOOL, (short)41);

  private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new TExprNodeStandardSchemeFactory();
  private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new TExprNodeTupleSchemeFactory();

  /**
   * 
   * @see TExprNodeType
   */
  public @org.apache.thrift.annotation.Nullable TExprNodeType node_type; // required
  public @org.apache.thrift.annotation.Nullable org.apache.doris.thrift.TTypeDesc type; // required
  /**
   * 
   * @see org.apache.doris.thrift.TExprOpcode
   */
  public @org.apache.thrift.annotation.Nullable org.apache.doris.thrift.TExprOpcode opcode; // optional
  public int num_children; // required
  public @org.apache.thrift.annotation.Nullable TAggregateExpr agg_expr; // optional
  public @org.apache.thrift.annotation.Nullable TBoolLiteral bool_literal; // optional
  public @org.apache.thrift.annotation.Nullable TCaseExpr case_expr; // optional
  public @org.apache.thrift.annotation.Nullable TDateLiteral date_literal; // optional
  public @org.apache.thrift.annotation.Nullable TFloatLiteral float_literal; // optional
  public @org.apache.thrift.annotation.Nullable TIntLiteral int_literal; // optional
  public @org.apache.thrift.annotation.Nullable TInPredicate in_predicate; // optional
  public @org.apache.thrift.annotation.Nullable TIsNullPredicate is_null_pred; // optional
  public @org.apache.thrift.annotation.Nullable TLikePredicate like_pred; // optional
  public @org.apache.thrift.annotation.Nullable TLiteralPredicate literal_pred; // optional
  public @org.apache.thrift.annotation.Nullable TSlotRef slot_ref; // optional
  public @org.apache.thrift.annotation.Nullable TStringLiteral string_literal; // optional
  public @org.apache.thrift.annotation.Nullable TTupleIsNullPredicate tuple_is_null_pred; // optional
  public @org.apache.thrift.annotation.Nullable TInfoFunc info_func; // optional
  public @org.apache.thrift.annotation.Nullable TDecimalLiteral decimal_literal; // optional
  public int output_scale; // required
  public @org.apache.thrift.annotation.Nullable TFunctionCallExpr fn_call_expr; // optional
  public @org.apache.thrift.annotation.Nullable TLargeIntLiteral large_int_literal; // optional
  public int output_column; // optional
  public @org.apache.thrift.annotation.Nullable org.apache.doris.thrift.TColumnType output_type; // optional
  /**
   * 
   * @see org.apache.doris.thrift.TExprOpcode
   */
  public @org.apache.thrift.annotation.Nullable org.apache.doris.thrift.TExprOpcode vector_opcode; // optional
  public @org.apache.thrift.annotation.Nullable org.apache.doris.thrift.TFunction fn; // optional
  public int vararg_start_idx; // optional
  /**
   * 
   * @see org.apache.doris.thrift.TPrimitiveType
   */
  public @org.apache.thrift.annotation.Nullable org.apache.doris.thrift.TPrimitiveType child_type; // optional
  public boolean is_nullable; // optional
  public @org.apache.thrift.annotation.Nullable TJsonLiteral json_literal; // optional
  public @org.apache.thrift.annotation.Nullable TSchemaChangeExpr schema_change_expr; // optional
  public @org.apache.thrift.annotation.Nullable TColumnRef column_ref; // optional
  public @org.apache.thrift.annotation.Nullable TMatchPredicate match_predicate; // optional
  public @org.apache.thrift.annotation.Nullable TIPv4Literal ipv4_literal; // optional
  public @org.apache.thrift.annotation.Nullable TIPv6Literal ipv6_literal; // optional
  public @org.apache.thrift.annotation.Nullable java.lang.String label; // optional
  public @org.apache.thrift.annotation.Nullable TTimeV2Literal timev2_literal; // optional
  public @org.apache.thrift.annotation.Nullable TVarBinaryLiteral varbinary_literal; // optional
  public boolean is_cast_nullable; // optional
  public @org.apache.thrift.annotation.Nullable TSearchParam search_param; // optional
  public boolean short_circuit_evaluation; // optional

  /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
  public enum _Fields implements org.apache.thrift.TFieldIdEnum {
    /**
     * 
     * @see TExprNodeType
     */
    NODE_TYPE((short)1, "node_type"),
    TYPE((short)2, "type"),
    /**
     * 
     * @see org.apache.doris.thrift.TExprOpcode
     */
    OPCODE((short)3, "opcode"),
    NUM_CHILDREN((short)4, "num_children"),
    AGG_EXPR((short)5, "agg_expr"),
    BOOL_LITERAL((short)6, "bool_literal"),
    CASE_EXPR((short)7, "case_expr"),
    DATE_LITERAL((short)8, "date_literal"),
    FLOAT_LITERAL((short)9, "float_literal"),
    INT_LITERAL((short)10, "int_literal"),
    IN_PREDICATE((short)11, "in_predicate"),
    IS_NULL_PRED((short)12, "is_null_pred"),
    LIKE_PRED((short)13, "like_pred"),
    LITERAL_PRED((short)14, "literal_pred"),
    SLOT_REF((short)15, "slot_ref"),
    STRING_LITERAL((short)16, "string_literal"),
    TUPLE_IS_NULL_PRED((short)17, "tuple_is_null_pred"),
    INFO_FUNC((short)18, "info_func"),
    DECIMAL_LITERAL((short)19, "decimal_literal"),
    OUTPUT_SCALE((short)20, "output_scale"),
    FN_CALL_EXPR((short)21, "fn_call_expr"),
    LARGE_INT_LITERAL((short)22, "large_int_literal"),
    OUTPUT_COLUMN((short)23, "output_column"),
    OUTPUT_TYPE((short)24, "output_type"),
    /**
     * 
     * @see org.apache.doris.thrift.TExprOpcode
     */
    VECTOR_OPCODE((short)25, "vector_opcode"),
    FN((short)26, "fn"),
    VARARG_START_IDX((short)27, "vararg_start_idx"),
    /**
     * 
     * @see org.apache.doris.thrift.TPrimitiveType
     */
    CHILD_TYPE((short)28, "child_type"),
    IS_NULLABLE((short)29, "is_nullable"),
    JSON_LITERAL((short)30, "json_literal"),
    SCHEMA_CHANGE_EXPR((short)31, "schema_change_expr"),
    COLUMN_REF((short)32, "column_ref"),
    MATCH_PREDICATE((short)33, "match_predicate"),
    IPV4_LITERAL((short)34, "ipv4_literal"),
    IPV6_LITERAL((short)35, "ipv6_literal"),
    LABEL((short)36, "label"),
    TIMEV2_LITERAL((short)37, "timev2_literal"),
    VARBINARY_LITERAL((short)38, "varbinary_literal"),
    IS_CAST_NULLABLE((short)39, "is_cast_nullable"),
    SEARCH_PARAM((short)40, "search_param"),
    SHORT_CIRCUIT_EVALUATION((short)41, "short_circuit_evaluation");

    private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();

    static {
      for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
        byName.put(field.getFieldName(), field);
      }
    }

    /**
     * Find the _Fields constant that matches fieldId, or null if its not found.
     */
    @org.apache.thrift.annotation.Nullable
    public static _Fields findByThriftId(int fieldId) {
      switch(fieldId) {
        case 1: // NODE_TYPE
          return NODE_TYPE;
        case 2: // TYPE
          return TYPE;
        case 3: // OPCODE
          return OPCODE;
        case 4: // NUM_CHILDREN
          return NUM_CHILDREN;
        case 5: // AGG_EXPR
          return AGG_EXPR;
        case 6: // BOOL_LITERAL
          return BOOL_LITERAL;
        case 7: // CASE_EXPR
          return CASE_EXPR;
        case 8: // DATE_LITERAL
          return DATE_LITERAL;
        case 9: // FLOAT_LITERAL
          return FLOAT_LITERAL;
        case 10: // INT_LITERAL
          return INT_LITERAL;
        case 11: // IN_PREDICATE
          return IN_PREDICATE;
        case 12: // IS_NULL_PRED
          return IS_NULL_PRED;
        case 13: // LIKE_PRED
          return LIKE_PRED;
        case 14: // LITERAL_PRED
          return LITERAL_PRED;
        case 15: // SLOT_REF
          return SLOT_REF;
        case 16: // STRING_LITERAL
          return STRING_LITERAL;
        case 17: // TUPLE_IS_NULL_PRED
          return TUPLE_IS_NULL_PRED;
        case 18: // INFO_FUNC
          return INFO_FUNC;
        case 19: // DECIMAL_LITERAL
          return DECIMAL_LITERAL;
        case 20: // OUTPUT_SCALE
          return OUTPUT_SCALE;
        case 21: // FN_CALL_EXPR
          return FN_CALL_EXPR;
        case 22: // LARGE_INT_LITERAL
          return LARGE_INT_LITERAL;
        case 23: // OUTPUT_COLUMN
          return OUTPUT_COLUMN;
        case 24: // OUTPUT_TYPE
          return OUTPUT_TYPE;
        case 25: // VECTOR_OPCODE
          return VECTOR_OPCODE;
        case 26: // FN
          return FN;
        case 27: // VARARG_START_IDX
          return VARARG_START_IDX;
        case 28: // CHILD_TYPE
          return CHILD_TYPE;
        case 29: // IS_NULLABLE
          return IS_NULLABLE;
        case 30: // JSON_LITERAL
          return JSON_LITERAL;
        case 31: // SCHEMA_CHANGE_EXPR
          return SCHEMA_CHANGE_EXPR;
        case 32: // COLUMN_REF
          return COLUMN_REF;
        case 33: // MATCH_PREDICATE
          return MATCH_PREDICATE;
        case 34: // IPV4_LITERAL
          return IPV4_LITERAL;
        case 35: // IPV6_LITERAL
          return IPV6_LITERAL;
        case 36: // LABEL
          return LABEL;
        case 37: // TIMEV2_LITERAL
          return TIMEV2_LITERAL;
        case 38: // VARBINARY_LITERAL
          return VARBINARY_LITERAL;
        case 39: // IS_CAST_NULLABLE
          return IS_CAST_NULLABLE;
        case 40: // SEARCH_PARAM
          return SEARCH_PARAM;
        case 41: // SHORT_CIRCUIT_EVALUATION
          return SHORT_CIRCUIT_EVALUATION;
        default:
          return null;
      }
    }

    /**
     * Find the _Fields constant that matches fieldId, throwing an exception
     * if it is not found.
     */
    public static _Fields findByThriftIdOrThrow(int fieldId) {
      _Fields fields = findByThriftId(fieldId);
      if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
      return fields;
    }

    /**
     * Find the _Fields constant that matches name, or null if its not found.
     */
    @org.apache.thrift.annotation.Nullable
    public static _Fields findByName(java.lang.String name) {
      return byName.get(name);
    }

    private final short _thriftId;
    private final java.lang.String _fieldName;

    _Fields(short thriftId, java.lang.String fieldName) {
      _thriftId = thriftId;
      _fieldName = fieldName;
    }

    public short getThriftFieldId() {
      return _thriftId;
    }

    public java.lang.String getFieldName() {
      return _fieldName;
    }
  }

  // isset id assignments
  private static final int __NUM_CHILDREN_ISSET_ID = 0;
  private static final int __OUTPUT_SCALE_ISSET_ID = 1;
  private static final int __OUTPUT_COLUMN_ISSET_ID = 2;
  private static final int __VARARG_START_IDX_ISSET_ID = 3;
  private static final int __IS_NULLABLE_ISSET_ID = 4;
  private static final int __IS_CAST_NULLABLE_ISSET_ID = 5;
  private static final int __SHORT_CIRCUIT_EVALUATION_ISSET_ID = 6;
  private byte __isset_bitfield = 0;
  private static final _Fields optionals[] = {_Fields.OPCODE,_Fields.AGG_EXPR,_Fields.BOOL_LITERAL,_Fields.CASE_EXPR,_Fields.DATE_LITERAL,_Fields.FLOAT_LITERAL,_Fields.INT_LITERAL,_Fields.IN_PREDICATE,_Fields.IS_NULL_PRED,_Fields.LIKE_PRED,_Fields.LITERAL_PRED,_Fields.SLOT_REF,_Fields.STRING_LITERAL,_Fields.TUPLE_IS_NULL_PRED,_Fields.INFO_FUNC,_Fields.DECIMAL_LITERAL,_Fields.FN_CALL_EXPR,_Fields.LARGE_INT_LITERAL,_Fields.OUTPUT_COLUMN,_Fields.OUTPUT_TYPE,_Fields.VECTOR_OPCODE,_Fields.FN,_Fields.VARARG_START_IDX,_Fields.CHILD_TYPE,_Fields.IS_NULLABLE,_Fields.JSON_LITERAL,_Fields.SCHEMA_CHANGE_EXPR,_Fields.COLUMN_REF,_Fields.MATCH_PREDICATE,_Fields.IPV4_LITERAL,_Fields.IPV6_LITERAL,_Fields.LABEL,_Fields.TIMEV2_LITERAL,_Fields.VARBINARY_LITERAL,_Fields.IS_CAST_NULLABLE,_Fields.SEARCH_PARAM,_Fields.SHORT_CIRCUIT_EVALUATION};
  public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
  static {
    java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
    tmpMap.put(_Fields.NODE_TYPE, new org.apache.thrift.meta_data.FieldMetaData("node_type", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.EnumMetaData(org.apache.thrift.protocol.TType.ENUM, TExprNodeType.class)));
    tmpMap.put(_Fields.TYPE, new org.apache.thrift.meta_data.FieldMetaData("type", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.doris.thrift.TTypeDesc.class)));
    tmpMap.put(_Fields.OPCODE, new org.apache.thrift.meta_data.FieldMetaData("opcode", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.EnumMetaData(org.apache.thrift.protocol.TType.ENUM, org.apache.doris.thrift.TExprOpcode.class)));
    tmpMap.put(_Fields.NUM_CHILDREN, new org.apache.thrift.meta_data.FieldMetaData("num_children", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.AGG_EXPR, new org.apache.thrift.meta_data.FieldMetaData("agg_expr", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TAggregateExpr.class)));
    tmpMap.put(_Fields.BOOL_LITERAL, new org.apache.thrift.meta_data.FieldMetaData("bool_literal", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TBoolLiteral.class)));
    tmpMap.put(_Fields.CASE_EXPR, new org.apache.thrift.meta_data.FieldMetaData("case_expr", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TCaseExpr.class)));
    tmpMap.put(_Fields.DATE_LITERAL, new org.apache.thrift.meta_data.FieldMetaData("date_literal", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TDateLiteral.class)));
    tmpMap.put(_Fields.FLOAT_LITERAL, new org.apache.thrift.meta_data.FieldMetaData("float_literal", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TFloatLiteral.class)));
    tmpMap.put(_Fields.INT_LITERAL, new org.apache.thrift.meta_data.FieldMetaData("int_literal", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TIntLiteral.class)));
    tmpMap.put(_Fields.IN_PREDICATE, new org.apache.thrift.meta_data.FieldMetaData("in_predicate", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TInPredicate.class)));
    tmpMap.put(_Fields.IS_NULL_PRED, new org.apache.thrift.meta_data.FieldMetaData("is_null_pred", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TIsNullPredicate.class)));
    tmpMap.put(_Fields.LIKE_PRED, new org.apache.thrift.meta_data.FieldMetaData("like_pred", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TLikePredicate.class)));
    tmpMap.put(_Fields.LITERAL_PRED, new org.apache.thrift.meta_data.FieldMetaData("literal_pred", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TLiteralPredicate.class)));
    tmpMap.put(_Fields.SLOT_REF, new org.apache.thrift.meta_data.FieldMetaData("slot_ref", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TSlotRef.class)));
    tmpMap.put(_Fields.STRING_LITERAL, new org.apache.thrift.meta_data.FieldMetaData("string_literal", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TStringLiteral.class)));
    tmpMap.put(_Fields.TUPLE_IS_NULL_PRED, new org.apache.thrift.meta_data.FieldMetaData("tuple_is_null_pred", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TTupleIsNullPredicate.class)));
    tmpMap.put(_Fields.INFO_FUNC, new org.apache.thrift.meta_data.FieldMetaData("info_func", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TInfoFunc.class)));
    tmpMap.put(_Fields.DECIMAL_LITERAL, new org.apache.thrift.meta_data.FieldMetaData("decimal_literal", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TDecimalLiteral.class)));
    tmpMap.put(_Fields.OUTPUT_SCALE, new org.apache.thrift.meta_data.FieldMetaData("output_scale", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.FN_CALL_EXPR, new org.apache.thrift.meta_data.FieldMetaData("fn_call_expr", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TFunctionCallExpr.class)));
    tmpMap.put(_Fields.LARGE_INT_LITERAL, new org.apache.thrift.meta_data.FieldMetaData("large_int_literal", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TLargeIntLiteral.class)));
    tmpMap.put(_Fields.OUTPUT_COLUMN, new org.apache.thrift.meta_data.FieldMetaData("output_column", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.OUTPUT_TYPE, new org.apache.thrift.meta_data.FieldMetaData("output_type", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.doris.thrift.TColumnType.class)));
    tmpMap.put(_Fields.VECTOR_OPCODE, new org.apache.thrift.meta_data.FieldMetaData("vector_opcode", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.EnumMetaData(org.apache.thrift.protocol.TType.ENUM, org.apache.doris.thrift.TExprOpcode.class)));
    tmpMap.put(_Fields.FN, new org.apache.thrift.meta_data.FieldMetaData("fn", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.doris.thrift.TFunction.class)));
    tmpMap.put(_Fields.VARARG_START_IDX, new org.apache.thrift.meta_data.FieldMetaData("vararg_start_idx", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.CHILD_TYPE, new org.apache.thrift.meta_data.FieldMetaData("child_type", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.EnumMetaData(org.apache.thrift.protocol.TType.ENUM, org.apache.doris.thrift.TPrimitiveType.class)));
    tmpMap.put(_Fields.IS_NULLABLE, new org.apache.thrift.meta_data.FieldMetaData("is_nullable", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
    tmpMap.put(_Fields.JSON_LITERAL, new org.apache.thrift.meta_data.FieldMetaData("json_literal", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TJsonLiteral.class)));
    tmpMap.put(_Fields.SCHEMA_CHANGE_EXPR, new org.apache.thrift.meta_data.FieldMetaData("schema_change_expr", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TSchemaChangeExpr.class)));
    tmpMap.put(_Fields.COLUMN_REF, new org.apache.thrift.meta_data.FieldMetaData("column_ref", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TColumnRef.class)));
    tmpMap.put(_Fields.MATCH_PREDICATE, new org.apache.thrift.meta_data.FieldMetaData("match_predicate", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TMatchPredicate.class)));
    tmpMap.put(_Fields.IPV4_LITERAL, new org.apache.thrift.meta_data.FieldMetaData("ipv4_literal", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TIPv4Literal.class)));
    tmpMap.put(_Fields.IPV6_LITERAL, new org.apache.thrift.meta_data.FieldMetaData("ipv6_literal", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TIPv6Literal.class)));
    tmpMap.put(_Fields.LABEL, new org.apache.thrift.meta_data.FieldMetaData("label", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
    tmpMap.put(_Fields.TIMEV2_LITERAL, new org.apache.thrift.meta_data.FieldMetaData("timev2_literal", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TTimeV2Literal.class)));
    tmpMap.put(_Fields.VARBINARY_LITERAL, new org.apache.thrift.meta_data.FieldMetaData("varbinary_literal", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TVarBinaryLiteral.class)));
    tmpMap.put(_Fields.IS_CAST_NULLABLE, new org.apache.thrift.meta_data.FieldMetaData("is_cast_nullable", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
    tmpMap.put(_Fields.SEARCH_PARAM, new org.apache.thrift.meta_data.FieldMetaData("search_param", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TSearchParam.class)));
    tmpMap.put(_Fields.SHORT_CIRCUIT_EVALUATION, new org.apache.thrift.meta_data.FieldMetaData("short_circuit_evaluation", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
    metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
    org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(TExprNode.class, metaDataMap);
  }

  public TExprNode() {
  }

  public TExprNode(
    TExprNodeType node_type,
    org.apache.doris.thrift.TTypeDesc type,
    int num_children,
    int output_scale)
  {
    this();
    this.node_type = node_type;
    this.type = type;
    this.num_children = num_children;
    setNumChildrenIsSet(true);
    this.output_scale = output_scale;
    setOutputScaleIsSet(true);
  }

  /**
   * Performs a deep copy on <i>other</i>.
   */
  public TExprNode(TExprNode other) {
    __isset_bitfield = other.__isset_bitfield;
    if (other.isSetNodeType()) {
      this.node_type = other.node_type;
    }
    if (other.isSetType()) {
      this.type = new org.apache.doris.thrift.TTypeDesc(other.type);
    }
    if (other.isSetOpcode()) {
      this.opcode = other.opcode;
    }
    this.num_children = other.num_children;
    if (other.isSetAggExpr()) {
      this.agg_expr = new TAggregateExpr(other.agg_expr);
    }
    if (other.isSetBoolLiteral()) {
      this.bool_literal = new TBoolLiteral(other.bool_literal);
    }
    if (other.isSetCaseExpr()) {
      this.case_expr = new TCaseExpr(other.case_expr);
    }
    if (other.isSetDateLiteral()) {
      this.date_literal = new TDateLiteral(other.date_literal);
    }
    if (other.isSetFloatLiteral()) {
      this.float_literal = new TFloatLiteral(other.float_literal);
    }
    if (other.isSetIntLiteral()) {
      this.int_literal = new TIntLiteral(other.int_literal);
    }
    if (other.isSetInPredicate()) {
      this.in_predicate = new TInPredicate(other.in_predicate);
    }
    if (other.isSetIsNullPred()) {
      this.is_null_pred = new TIsNullPredicate(other.is_null_pred);
    }
    if (other.isSetLikePred()) {
      this.like_pred = new TLikePredicate(other.like_pred);
    }
    if (other.isSetLiteralPred()) {
      this.literal_pred = new TLiteralPredicate(other.literal_pred);
    }
    if (other.isSetSlotRef()) {
      this.slot_ref = new TSlotRef(other.slot_ref);
    }
    if (other.isSetStringLiteral()) {
      this.string_literal = new TStringLiteral(other.string_literal);
    }
    if (other.isSetTupleIsNullPred()) {
      this.tuple_is_null_pred = new TTupleIsNullPredicate(other.tuple_is_null_pred);
    }
    if (other.isSetInfoFunc()) {
      this.info_func = new TInfoFunc(other.info_func);
    }
    if (other.isSetDecimalLiteral()) {
      this.decimal_literal = new TDecimalLiteral(other.decimal_literal);
    }
    this.output_scale = other.output_scale;
    if (other.isSetFnCallExpr()) {
      this.fn_call_expr = new TFunctionCallExpr(other.fn_call_expr);
    }
    if (other.isSetLargeIntLiteral()) {
      this.large_int_literal = new TLargeIntLiteral(other.large_int_literal);
    }
    this.output_column = other.output_column;
    if (other.isSetOutputType()) {
      this.output_type = new org.apache.doris.thrift.TColumnType(other.output_type);
    }
    if (other.isSetVectorOpcode()) {
      this.vector_opcode = other.vector_opcode;
    }
    if (other.isSetFn()) {
      this.fn = new org.apache.doris.thrift.TFunction(other.fn);
    }
    this.vararg_start_idx = other.vararg_start_idx;
    if (other.isSetChildType()) {
      this.child_type = other.child_type;
    }
    this.is_nullable = other.is_nullable;
    if (other.isSetJsonLiteral()) {
      this.json_literal = new TJsonLiteral(other.json_literal);
    }
    if (other.isSetSchemaChangeExpr()) {
      this.schema_change_expr = new TSchemaChangeExpr(other.schema_change_expr);
    }
    if (other.isSetColumnRef()) {
      this.column_ref = new TColumnRef(other.column_ref);
    }
    if (other.isSetMatchPredicate()) {
      this.match_predicate = new TMatchPredicate(other.match_predicate);
    }
    if (other.isSetIpv4Literal()) {
      this.ipv4_literal = new TIPv4Literal(other.ipv4_literal);
    }
    if (other.isSetIpv6Literal()) {
      this.ipv6_literal = new TIPv6Literal(other.ipv6_literal);
    }
    if (other.isSetLabel()) {
      this.label = other.label;
    }
    if (other.isSetTimev2Literal()) {
      this.timev2_literal = new TTimeV2Literal(other.timev2_literal);
    }
    if (other.isSetVarbinaryLiteral()) {
      this.varbinary_literal = new TVarBinaryLiteral(other.varbinary_literal);
    }
    this.is_cast_nullable = other.is_cast_nullable;
    if (other.isSetSearchParam()) {
      this.search_param = new TSearchParam(other.search_param);
    }
    this.short_circuit_evaluation = other.short_circuit_evaluation;
  }

  public TExprNode deepCopy() {
    return new TExprNode(this);
  }

  @Override
  public void clear() {
    this.node_type = null;
    this.type = null;
    this.opcode = null;
    setNumChildrenIsSet(false);
    this.num_children = 0;
    this.agg_expr = null;
    this.bool_literal = null;
    this.case_expr = null;
    this.date_literal = null;
    this.float_literal = null;
    this.int_literal = null;
    this.in_predicate = null;
    this.is_null_pred = null;
    this.like_pred = null;
    this.literal_pred = null;
    this.slot_ref = null;
    this.string_literal = null;
    this.tuple_is_null_pred = null;
    this.info_func = null;
    this.decimal_literal = null;
    setOutputScaleIsSet(false);
    this.output_scale = 0;
    this.fn_call_expr = null;
    this.large_int_literal = null;
    setOutputColumnIsSet(false);
    this.output_column = 0;
    this.output_type = null;
    this.vector_opcode = null;
    this.fn = null;
    setVarargStartIdxIsSet(false);
    this.vararg_start_idx = 0;
    this.child_type = null;
    setIsNullableIsSet(false);
    this.is_nullable = false;
    this.json_literal = null;
    this.schema_change_expr = null;
    this.column_ref = null;
    this.match_predicate = null;
    this.ipv4_literal = null;
    this.ipv6_literal = null;
    this.label = null;
    this.timev2_literal = null;
    this.varbinary_literal = null;
    setIsCastNullableIsSet(false);
    this.is_cast_nullable = false;
    this.search_param = null;
    setShortCircuitEvaluationIsSet(false);
    this.short_circuit_evaluation = false;
  }

  /**
   * 
   * @see TExprNodeType
   */
  @org.apache.thrift.annotation.Nullable
  public TExprNodeType getNodeType() {
    return this.node_type;
  }

  /**
   * 
   * @see TExprNodeType
   */
  public TExprNode setNodeType(@org.apache.thrift.annotation.Nullable TExprNodeType node_type) {
    this.node_type = node_type;
    return this;
  }

  public void unsetNodeType() {
    this.node_type = null;
  }

  /** Returns true if field node_type is set (has been assigned a value) and false otherwise */
  public boolean isSetNodeType() {
    return this.node_type != null;
  }

  public void setNodeTypeIsSet(boolean value) {
    if (!value) {
      this.node_type = null;
    }
  }

  @org.apache.thrift.annotation.Nullable
  public org.apache.doris.thrift.TTypeDesc getType() {
    return this.type;
  }

  public TExprNode setType(@org.apache.thrift.annotation.Nullable org.apache.doris.thrift.TTypeDesc type) {
    this.type = type;
    return this;
  }

  public void unsetType() {
    this.type = null;
  }

  /** Returns true if field type is set (has been assigned a value) and false otherwise */
  public boolean isSetType() {
    return this.type != null;
  }

  public void setTypeIsSet(boolean value) {
    if (!value) {
      this.type = null;
    }
  }

  /**
   * 
   * @see org.apache.doris.thrift.TExprOpcode
   */
  @org.apache.thrift.annotation.Nullable
  public org.apache.doris.thrift.TExprOpcode getOpcode() {
    return this.opcode;
  }

  /**
   * 
   * @see org.apache.doris.thrift.TExprOpcode
   */
  public TExprNode setOpcode(@org.apache.thrift.annotation.Nullable org.apache.doris.thrift.TExprOpcode opcode) {
    this.opcode = opcode;
    return this;
  }

  public void unsetOpcode() {
    this.opcode = null;
  }

  /** Returns true if field opcode is set (has been assigned a value) and false otherwise */
  public boolean isSetOpcode() {
    return this.opcode != null;
  }

  public void setOpcodeIsSet(boolean value) {
    if (!value) {
      this.opcode = null;
    }
  }

  public int getNumChildren() {
    return this.num_children;
  }

  public TExprNode setNumChildren(int num_children) {
    this.num_children = num_children;
    setNumChildrenIsSet(true);
    return this;
  }

  public void unsetNumChildren() {
    __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __NUM_CHILDREN_ISSET_ID);
  }

  /** Returns true if field num_children is set (has been assigned a value) and false otherwise */
  public boolean isSetNumChildren() {
    return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __NUM_CHILDREN_ISSET_ID);
  }

  public void setNumChildrenIsSet(boolean value) {
    __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __NUM_CHILDREN_ISSET_ID, value);
  }

  @org.apache.thrift.annotation.Nullable
  public TAggregateExpr getAggExpr() {
    return this.agg_expr;
  }

  public TExprNode setAggExpr(@org.apache.thrift.annotation.Nullable TAggregateExpr agg_expr) {
    this.agg_expr = agg_expr;
    return this;
  }

  public void unsetAggExpr() {
    this.agg_expr = null;
  }

  /** Returns true if field agg_expr is set (has been assigned a value) and false otherwise */
  public boolean isSetAggExpr() {
    return this.agg_expr != null;
  }

  public void setAggExprIsSet(boolean value) {
    if (!value) {
      this.agg_expr = null;
    }
  }

  @org.apache.thrift.annotation.Nullable
  public TBoolLiteral getBoolLiteral() {
    return this.bool_literal;
  }

  public TExprNode setBoolLiteral(@org.apache.thrift.annotation.Nullable TBoolLiteral bool_literal) {
    this.bool_literal = bool_literal;
    return this;
  }

  public void unsetBoolLiteral() {
    this.bool_literal = null;
  }

  /** Returns true if field bool_literal is set (has been assigned a value) and false otherwise */
  public boolean isSetBoolLiteral() {
    return this.bool_literal != null;
  }

  public void setBoolLiteralIsSet(boolean value) {
    if (!value) {
      this.bool_literal = null;
    }
  }

  @org.apache.thrift.annotation.Nullable
  public TCaseExpr getCaseExpr() {
    return this.case_expr;
  }

  public TExprNode setCaseExpr(@org.apache.thrift.annotation.Nullable TCaseExpr case_expr) {
    this.case_expr = case_expr;
    return this;
  }

  public void unsetCaseExpr() {
    this.case_expr = null;
  }

  /** Returns true if field case_expr is set (has been assigned a value) and false otherwise */
  public boolean isSetCaseExpr() {
    return this.case_expr != null;
  }

  public void setCaseExprIsSet(boolean value) {
    if (!value) {
      this.case_expr = null;
    }
  }

  @org.apache.thrift.annotation.Nullable
  public TDateLiteral getDateLiteral() {
    return this.date_literal;
  }

  public TExprNode setDateLiteral(@org.apache.thrift.annotation.Nullable TDateLiteral date_literal) {
    this.date_literal = date_literal;
    return this;
  }

  public void unsetDateLiteral() {
    this.date_literal = null;
  }

  /** Returns true if field date_literal is set (has been assigned a value) and false otherwise */
  public boolean isSetDateLiteral() {
    return this.date_literal != null;
  }

  public void setDateLiteralIsSet(boolean value) {
    if (!value) {
      this.date_literal = null;
    }
  }

  @org.apache.thrift.annotation.Nullable
  public TFloatLiteral getFloatLiteral() {
    return this.float_literal;
  }

  public TExprNode setFloatLiteral(@org.apache.thrift.annotation.Nullable TFloatLiteral float_literal) {
    this.float_literal = float_literal;
    return this;
  }

  public void unsetFloatLiteral() {
    this.float_literal = null;
  }

  /** Returns true if field float_literal is set (has been assigned a value) and false otherwise */
  public boolean isSetFloatLiteral() {
    return this.float_literal != null;
  }

  public void setFloatLiteralIsSet(boolean value) {
    if (!value) {
      this.float_literal = null;
    }
  }

  @org.apache.thrift.annotation.Nullable
  public TIntLiteral getIntLiteral() {
    return this.int_literal;
  }

  public TExprNode setIntLiteral(@org.apache.thrift.annotation.Nullable TIntLiteral int_literal) {
    this.int_literal = int_literal;
    return this;
  }

  public void unsetIntLiteral() {
    this.int_literal = null;
  }

  /** Returns true if field int_literal is set (has been assigned a value) and false otherwise */
  public boolean isSetIntLiteral() {
    return this.int_literal != null;
  }

  public void setIntLiteralIsSet(boolean value) {
    if (!value) {
      this.int_literal = null;
    }
  }

  @org.apache.thrift.annotation.Nullable
  public TInPredicate getInPredicate() {
    return this.in_predicate;
  }

  public TExprNode setInPredicate(@org.apache.thrift.annotation.Nullable TInPredicate in_predicate) {
    this.in_predicate = in_predicate;
    return this;
  }

  public void unsetInPredicate() {
    this.in_predicate = null;
  }

  /** Returns true if field in_predicate is set (has been assigned a value) and false otherwise */
  public boolean isSetInPredicate() {
    return this.in_predicate != null;
  }

  public void setInPredicateIsSet(boolean value) {
    if (!value) {
      this.in_predicate = null;
    }
  }

  @org.apache.thrift.annotation.Nullable
  public TIsNullPredicate getIsNullPred() {
    return this.is_null_pred;
  }

  public TExprNode setIsNullPred(@org.apache.thrift.annotation.Nullable TIsNullPredicate is_null_pred) {
    this.is_null_pred = is_null_pred;
    return this;
  }

  public void unsetIsNullPred() {
    this.is_null_pred = null;
  }

  /** Returns true if field is_null_pred is set (has been assigned a value) and false otherwise */
  public boolean isSetIsNullPred() {
    return this.is_null_pred != null;
  }

  public void setIsNullPredIsSet(boolean value) {
    if (!value) {
      this.is_null_pred = null;
    }
  }

  @org.apache.thrift.annotation.Nullable
  public TLikePredicate getLikePred() {
    return this.like_pred;
  }

  public TExprNode setLikePred(@org.apache.thrift.annotation.Nullable TLikePredicate like_pred) {
    this.like_pred = like_pred;
    return this;
  }

  public void unsetLikePred() {
    this.like_pred = null;
  }

  /** Returns true if field like_pred is set (has been assigned a value) and false otherwise */
  public boolean isSetLikePred() {
    return this.like_pred != null;
  }

  public void setLikePredIsSet(boolean value) {
    if (!value) {
      this.like_pred = null;
    }
  }

  @org.apache.thrift.annotation.Nullable
  public TLiteralPredicate getLiteralPred() {
    return this.literal_pred;
  }

  public TExprNode setLiteralPred(@org.apache.thrift.annotation.Nullable TLiteralPredicate literal_pred) {
    this.literal_pred = literal_pred;
    return this;
  }

  public void unsetLiteralPred() {
    this.literal_pred = null;
  }

  /** Returns true if field literal_pred is set (has been assigned a value) and false otherwise */
  public boolean isSetLiteralPred() {
    return this.literal_pred != null;
  }

  public void setLiteralPredIsSet(boolean value) {
    if (!value) {
      this.literal_pred = null;
    }
  }

  @org.apache.thrift.annotation.Nullable
  public TSlotRef getSlotRef() {
    return this.slot_ref;
  }

  public TExprNode setSlotRef(@org.apache.thrift.annotation.Nullable TSlotRef slot_ref) {
    this.slot_ref = slot_ref;
    return this;
  }

  public void unsetSlotRef() {
    this.slot_ref = null;
  }

  /** Returns true if field slot_ref is set (has been assigned a value) and false otherwise */
  public boolean isSetSlotRef() {
    return this.slot_ref != null;
  }

  public void setSlotRefIsSet(boolean value) {
    if (!value) {
      this.slot_ref = null;
    }
  }

  @org.apache.thrift.annotation.Nullable
  public TStringLiteral getStringLiteral() {
    return this.string_literal;
  }

  public TExprNode setStringLiteral(@org.apache.thrift.annotation.Nullable TStringLiteral string_literal) {
    this.string_literal = string_literal;
    return this;
  }

  public void unsetStringLiteral() {
    this.string_literal = null;
  }

  /** Returns true if field string_literal is set (has been assigned a value) and false otherwise */
  public boolean isSetStringLiteral() {
    return this.string_literal != null;
  }

  public void setStringLiteralIsSet(boolean value) {
    if (!value) {
      this.string_literal = null;
    }
  }

  @org.apache.thrift.annotation.Nullable
  public TTupleIsNullPredicate getTupleIsNullPred() {
    return this.tuple_is_null_pred;
  }

  public TExprNode setTupleIsNullPred(@org.apache.thrift.annotation.Nullable TTupleIsNullPredicate tuple_is_null_pred) {
    this.tuple_is_null_pred = tuple_is_null_pred;
    return this;
  }

  public void unsetTupleIsNullPred() {
    this.tuple_is_null_pred = null;
  }

  /** Returns true if field tuple_is_null_pred is set (has been assigned a value) and false otherwise */
  public boolean isSetTupleIsNullPred() {
    return this.tuple_is_null_pred != null;
  }

  public void setTupleIsNullPredIsSet(boolean value) {
    if (!value) {
      this.tuple_is_null_pred = null;
    }
  }

  @org.apache.thrift.annotation.Nullable
  public TInfoFunc getInfoFunc() {
    return this.info_func;
  }

  public TExprNode setInfoFunc(@org.apache.thrift.annotation.Nullable TInfoFunc info_func) {
    this.info_func = info_func;
    return this;
  }

  public void unsetInfoFunc() {
    this.info_func = null;
  }

  /** Returns true if field info_func is set (has been assigned a value) and false otherwise */
  public boolean isSetInfoFunc() {
    return this.info_func != null;
  }

  public void setInfoFuncIsSet(boolean value) {
    if (!value) {
      this.info_func = null;
    }
  }

  @org.apache.thrift.annotation.Nullable
  public TDecimalLiteral getDecimalLiteral() {
    return this.decimal_literal;
  }

  public TExprNode setDecimalLiteral(@org.apache.thrift.annotation.Nullable TDecimalLiteral decimal_literal) {
    this.decimal_literal = decimal_literal;
    return this;
  }

  public void unsetDecimalLiteral() {
    this.decimal_literal = null;
  }

  /** Returns true if field decimal_literal is set (has been assigned a value) and false otherwise */
  public boolean isSetDecimalLiteral() {
    return this.decimal_literal != null;
  }

  public void setDecimalLiteralIsSet(boolean value) {
    if (!value) {
      this.decimal_literal = null;
    }
  }

  public int getOutputScale() {
    return this.output_scale;
  }

  public TExprNode setOutputScale(int output_scale) {
    this.output_scale = output_scale;
    setOutputScaleIsSet(true);
    return this;
  }

  public void unsetOutputScale() {
    __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __OUTPUT_SCALE_ISSET_ID);
  }

  /** Returns true if field output_scale is set (has been assigned a value) and false otherwise */
  public boolean isSetOutputScale() {
    return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __OUTPUT_SCALE_ISSET_ID);
  }

  public void setOutputScaleIsSet(boolean value) {
    __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __OUTPUT_SCALE_ISSET_ID, value);
  }

  @org.apache.thrift.annotation.Nullable
  public TFunctionCallExpr getFnCallExpr() {
    return this.fn_call_expr;
  }

  public TExprNode setFnCallExpr(@org.apache.thrift.annotation.Nullable TFunctionCallExpr fn_call_expr) {
    this.fn_call_expr = fn_call_expr;
    return this;
  }

  public void unsetFnCallExpr() {
    this.fn_call_expr = null;
  }

  /** Returns true if field fn_call_expr is set (has been assigned a value) and false otherwise */
  public boolean isSetFnCallExpr() {
    return this.fn_call_expr != null;
  }

  public void setFnCallExprIsSet(boolean value) {
    if (!value) {
      this.fn_call_expr = null;
    }
  }

  @org.apache.thrift.annotation.Nullable
  public TLargeIntLiteral getLargeIntLiteral() {
    return this.large_int_literal;
  }

  public TExprNode setLargeIntLiteral(@org.apache.thrift.annotation.Nullable TLargeIntLiteral large_int_literal) {
    this.large_int_literal = large_int_literal;
    return this;
  }

  public void unsetLargeIntLiteral() {
    this.large_int_literal = null;
  }

  /** Returns true if field large_int_literal is set (has been assigned a value) and false otherwise */
  public boolean isSetLargeIntLiteral() {
    return this.large_int_literal != null;
  }

  public void setLargeIntLiteralIsSet(boolean value) {
    if (!value) {
      this.large_int_literal = null;
    }
  }

  public int getOutputColumn() {
    return this.output_column;
  }

  public TExprNode setOutputColumn(int output_column) {
    this.output_column = output_column;
    setOutputColumnIsSet(true);
    return this;
  }

  public void unsetOutputColumn() {
    __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __OUTPUT_COLUMN_ISSET_ID);
  }

  /** Returns true if field output_column is set (has been assigned a value) and false otherwise */
  public boolean isSetOutputColumn() {
    return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __OUTPUT_COLUMN_ISSET_ID);
  }

  public void setOutputColumnIsSet(boolean value) {
    __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __OUTPUT_COLUMN_ISSET_ID, value);
  }

  @org.apache.thrift.annotation.Nullable
  public org.apache.doris.thrift.TColumnType getOutputType() {
    return this.output_type;
  }

  public TExprNode setOutputType(@org.apache.thrift.annotation.Nullable org.apache.doris.thrift.TColumnType output_type) {
    this.output_type = output_type;
    return this;
  }

  public void unsetOutputType() {
    this.output_type = null;
  }

  /** Returns true if field output_type is set (has been assigned a value) and false otherwise */
  public boolean isSetOutputType() {
    return this.output_type != null;
  }

  public void setOutputTypeIsSet(boolean value) {
    if (!value) {
      this.output_type = null;
    }
  }

  /**
   * 
   * @see org.apache.doris.thrift.TExprOpcode
   */
  @org.apache.thrift.annotation.Nullable
  public org.apache.doris.thrift.TExprOpcode getVectorOpcode() {
    return this.vector_opcode;
  }

  /**
   * 
   * @see org.apache.doris.thrift.TExprOpcode
   */
  public TExprNode setVectorOpcode(@org.apache.thrift.annotation.Nullable org.apache.doris.thrift.TExprOpcode vector_opcode) {
    this.vector_opcode = vector_opcode;
    return this;
  }

  public void unsetVectorOpcode() {
    this.vector_opcode = null;
  }

  /** Returns true if field vector_opcode is set (has been assigned a value) and false otherwise */
  public boolean isSetVectorOpcode() {
    return this.vector_opcode != null;
  }

  public void setVectorOpcodeIsSet(boolean value) {
    if (!value) {
      this.vector_opcode = null;
    }
  }

  @org.apache.thrift.annotation.Nullable
  public org.apache.doris.thrift.TFunction getFn() {
    return this.fn;
  }

  public TExprNode setFn(@org.apache.thrift.annotation.Nullable org.apache.doris.thrift.TFunction fn) {
    this.fn = fn;
    return this;
  }

  public void unsetFn() {
    this.fn = null;
  }

  /** Returns true if field fn is set (has been assigned a value) and false otherwise */
  public boolean isSetFn() {
    return this.fn != null;
  }

  public void setFnIsSet(boolean value) {
    if (!value) {
      this.fn = null;
    }
  }

  public int getVarargStartIdx() {
    return this.vararg_start_idx;
  }

  public TExprNode setVarargStartIdx(int vararg_start_idx) {
    this.vararg_start_idx = vararg_start_idx;
    setVarargStartIdxIsSet(true);
    return this;
  }

  public void unsetVarargStartIdx() {
    __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __VARARG_START_IDX_ISSET_ID);
  }

  /** Returns true if field vararg_start_idx is set (has been assigned a value) and false otherwise */
  public boolean isSetVarargStartIdx() {
    return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __VARARG_START_IDX_ISSET_ID);
  }

  public void setVarargStartIdxIsSet(boolean value) {
    __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __VARARG_START_IDX_ISSET_ID, value);
  }

  /**
   * 
   * @see org.apache.doris.thrift.TPrimitiveType
   */
  @org.apache.thrift.annotation.Nullable
  public org.apache.doris.thrift.TPrimitiveType getChildType() {
    return this.child_type;
  }

  /**
   * 
   * @see org.apache.doris.thrift.TPrimitiveType
   */
  public TExprNode setChildType(@org.apache.thrift.annotation.Nullable org.apache.doris.thrift.TPrimitiveType child_type) {
    this.child_type = child_type;
    return this;
  }

  public void unsetChildType() {
    this.child_type = null;
  }

  /** Returns true if field child_type is set (has been assigned a value) and false otherwise */
  public boolean isSetChildType() {
    return this.child_type != null;
  }

  public void setChildTypeIsSet(boolean value) {
    if (!value) {
      this.child_type = null;
    }
  }

  public boolean isIsNullable() {
    return this.is_nullable;
  }

  public TExprNode setIsNullable(boolean is_nullable) {
    this.is_nullable = is_nullable;
    setIsNullableIsSet(true);
    return this;
  }

  public void unsetIsNullable() {
    __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __IS_NULLABLE_ISSET_ID);
  }

  /** Returns true if field is_nullable is set (has been assigned a value) and false otherwise */
  public boolean isSetIsNullable() {
    return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __IS_NULLABLE_ISSET_ID);
  }

  public void setIsNullableIsSet(boolean value) {
    __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __IS_NULLABLE_ISSET_ID, value);
  }

  @org.apache.thrift.annotation.Nullable
  public TJsonLiteral getJsonLiteral() {
    return this.json_literal;
  }

  public TExprNode setJsonLiteral(@org.apache.thrift.annotation.Nullable TJsonLiteral json_literal) {
    this.json_literal = json_literal;
    return this;
  }

  public void unsetJsonLiteral() {
    this.json_literal = null;
  }

  /** Returns true if field json_literal is set (has been assigned a value) and false otherwise */
  public boolean isSetJsonLiteral() {
    return this.json_literal != null;
  }

  public void setJsonLiteralIsSet(boolean value) {
    if (!value) {
      this.json_literal = null;
    }
  }

  @org.apache.thrift.annotation.Nullable
  public TSchemaChangeExpr getSchemaChangeExpr() {
    return this.schema_change_expr;
  }

  public TExprNode setSchemaChangeExpr(@org.apache.thrift.annotation.Nullable TSchemaChangeExpr schema_change_expr) {
    this.schema_change_expr = schema_change_expr;
    return this;
  }

  public void unsetSchemaChangeExpr() {
    this.schema_change_expr = null;
  }

  /** Returns true if field schema_change_expr is set (has been assigned a value) and false otherwise */
  public boolean isSetSchemaChangeExpr() {
    return this.schema_change_expr != null;
  }

  public void setSchemaChangeExprIsSet(boolean value) {
    if (!value) {
      this.schema_change_expr = null;
    }
  }

  @org.apache.thrift.annotation.Nullable
  public TColumnRef getColumnRef() {
    return this.column_ref;
  }

  public TExprNode setColumnRef(@org.apache.thrift.annotation.Nullable TColumnRef column_ref) {
    this.column_ref = column_ref;
    return this;
  }

  public void unsetColumnRef() {
    this.column_ref = null;
  }

  /** Returns true if field column_ref is set (has been assigned a value) and false otherwise */
  public boolean isSetColumnRef() {
    return this.column_ref != null;
  }

  public void setColumnRefIsSet(boolean value) {
    if (!value) {
      this.column_ref = null;
    }
  }

  @org.apache.thrift.annotation.Nullable
  public TMatchPredicate getMatchPredicate() {
    return this.match_predicate;
  }

  public TExprNode setMatchPredicate(@org.apache.thrift.annotation.Nullable TMatchPredicate match_predicate) {
    this.match_predicate = match_predicate;
    return this;
  }

  public void unsetMatchPredicate() {
    this.match_predicate = null;
  }

  /** Returns true if field match_predicate is set (has been assigned a value) and false otherwise */
  public boolean isSetMatchPredicate() {
    return this.match_predicate != null;
  }

  public void setMatchPredicateIsSet(boolean value) {
    if (!value) {
      this.match_predicate = null;
    }
  }

  @org.apache.thrift.annotation.Nullable
  public TIPv4Literal getIpv4Literal() {
    return this.ipv4_literal;
  }

  public TExprNode setIpv4Literal(@org.apache.thrift.annotation.Nullable TIPv4Literal ipv4_literal) {
    this.ipv4_literal = ipv4_literal;
    return this;
  }

  public void unsetIpv4Literal() {
    this.ipv4_literal = null;
  }

  /** Returns true if field ipv4_literal is set (has been assigned a value) and false otherwise */
  public boolean isSetIpv4Literal() {
    return this.ipv4_literal != null;
  }

  public void setIpv4LiteralIsSet(boolean value) {
    if (!value) {
      this.ipv4_literal = null;
    }
  }

  @org.apache.thrift.annotation.Nullable
  public TIPv6Literal getIpv6Literal() {
    return this.ipv6_literal;
  }

  public TExprNode setIpv6Literal(@org.apache.thrift.annotation.Nullable TIPv6Literal ipv6_literal) {
    this.ipv6_literal = ipv6_literal;
    return this;
  }

  public void unsetIpv6Literal() {
    this.ipv6_literal = null;
  }

  /** Returns true if field ipv6_literal is set (has been assigned a value) and false otherwise */
  public boolean isSetIpv6Literal() {
    return this.ipv6_literal != null;
  }

  public void setIpv6LiteralIsSet(boolean value) {
    if (!value) {
      this.ipv6_literal = null;
    }
  }

  @org.apache.thrift.annotation.Nullable
  public java.lang.String getLabel() {
    return this.label;
  }

  public TExprNode setLabel(@org.apache.thrift.annotation.Nullable java.lang.String label) {
    this.label = label;
    return this;
  }

  public void unsetLabel() {
    this.label = null;
  }

  /** Returns true if field label is set (has been assigned a value) and false otherwise */
  public boolean isSetLabel() {
    return this.label != null;
  }

  public void setLabelIsSet(boolean value) {
    if (!value) {
      this.label = null;
    }
  }

  @org.apache.thrift.annotation.Nullable
  public TTimeV2Literal getTimev2Literal() {
    return this.timev2_literal;
  }

  public TExprNode setTimev2Literal(@org.apache.thrift.annotation.Nullable TTimeV2Literal timev2_literal) {
    this.timev2_literal = timev2_literal;
    return this;
  }

  public void unsetTimev2Literal() {
    this.timev2_literal = null;
  }

  /** Returns true if field timev2_literal is set (has been assigned a value) and false otherwise */
  public boolean isSetTimev2Literal() {
    return this.timev2_literal != null;
  }

  public void setTimev2LiteralIsSet(boolean value) {
    if (!value) {
      this.timev2_literal = null;
    }
  }

  @org.apache.thrift.annotation.Nullable
  public TVarBinaryLiteral getVarbinaryLiteral() {
    return this.varbinary_literal;
  }

  public TExprNode setVarbinaryLiteral(@org.apache.thrift.annotation.Nullable TVarBinaryLiteral varbinary_literal) {
    this.varbinary_literal = varbinary_literal;
    return this;
  }

  public void unsetVarbinaryLiteral() {
    this.varbinary_literal = null;
  }

  /** Returns true if field varbinary_literal is set (has been assigned a value) and false otherwise */
  public boolean isSetVarbinaryLiteral() {
    return this.varbinary_literal != null;
  }

  public void setVarbinaryLiteralIsSet(boolean value) {
    if (!value) {
      this.varbinary_literal = null;
    }
  }

  public boolean isIsCastNullable() {
    return this.is_cast_nullable;
  }

  public TExprNode setIsCastNullable(boolean is_cast_nullable) {
    this.is_cast_nullable = is_cast_nullable;
    setIsCastNullableIsSet(true);
    return this;
  }

  public void unsetIsCastNullable() {
    __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __IS_CAST_NULLABLE_ISSET_ID);
  }

  /** Returns true if field is_cast_nullable is set (has been assigned a value) and false otherwise */
  public boolean isSetIsCastNullable() {
    return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __IS_CAST_NULLABLE_ISSET_ID);
  }

  public void setIsCastNullableIsSet(boolean value) {
    __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __IS_CAST_NULLABLE_ISSET_ID, value);
  }

  @org.apache.thrift.annotation.Nullable
  public TSearchParam getSearchParam() {
    return this.search_param;
  }

  public TExprNode setSearchParam(@org.apache.thrift.annotation.Nullable TSearchParam search_param) {
    this.search_param = search_param;
    return this;
  }

  public void unsetSearchParam() {
    this.search_param = null;
  }

  /** Returns true if field search_param is set (has been assigned a value) and false otherwise */
  public boolean isSetSearchParam() {
    return this.search_param != null;
  }

  public void setSearchParamIsSet(boolean value) {
    if (!value) {
      this.search_param = null;
    }
  }

  public boolean isShortCircuitEvaluation() {
    return this.short_circuit_evaluation;
  }

  public TExprNode setShortCircuitEvaluation(boolean short_circuit_evaluation) {
    this.short_circuit_evaluation = short_circuit_evaluation;
    setShortCircuitEvaluationIsSet(true);
    return this;
  }

  public void unsetShortCircuitEvaluation() {
    __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __SHORT_CIRCUIT_EVALUATION_ISSET_ID);
  }

  /** Returns true if field short_circuit_evaluation is set (has been assigned a value) and false otherwise */
  public boolean isSetShortCircuitEvaluation() {
    return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __SHORT_CIRCUIT_EVALUATION_ISSET_ID);
  }

  public void setShortCircuitEvaluationIsSet(boolean value) {
    __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __SHORT_CIRCUIT_EVALUATION_ISSET_ID, value);
  }

  public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
    switch (field) {
    case NODE_TYPE:
      if (value == null) {
        unsetNodeType();
      } else {
        setNodeType((TExprNodeType)value);
      }
      break;

    case TYPE:
      if (value == null) {
        unsetType();
      } else {
        setType((org.apache.doris.thrift.TTypeDesc)value);
      }
      break;

    case OPCODE:
      if (value == null) {
        unsetOpcode();
      } else {
        setOpcode((org.apache.doris.thrift.TExprOpcode)value);
      }
      break;

    case NUM_CHILDREN:
      if (value == null) {
        unsetNumChildren();
      } else {
        setNumChildren((java.lang.Integer)value);
      }
      break;

    case AGG_EXPR:
      if (value == null) {
        unsetAggExpr();
      } else {
        setAggExpr((TAggregateExpr)value);
      }
      break;

    case BOOL_LITERAL:
      if (value == null) {
        unsetBoolLiteral();
      } else {
        setBoolLiteral((TBoolLiteral)value);
      }
      break;

    case CASE_EXPR:
      if (value == null) {
        unsetCaseExpr();
      } else {
        setCaseExpr((TCaseExpr)value);
      }
      break;

    case DATE_LITERAL:
      if (value == null) {
        unsetDateLiteral();
      } else {
        setDateLiteral((TDateLiteral)value);
      }
      break;

    case FLOAT_LITERAL:
      if (value == null) {
        unsetFloatLiteral();
      } else {
        setFloatLiteral((TFloatLiteral)value);
      }
      break;

    case INT_LITERAL:
      if (value == null) {
        unsetIntLiteral();
      } else {
        setIntLiteral((TIntLiteral)value);
      }
      break;

    case IN_PREDICATE:
      if (value == null) {
        unsetInPredicate();
      } else {
        setInPredicate((TInPredicate)value);
      }
      break;

    case IS_NULL_PRED:
      if (value == null) {
        unsetIsNullPred();
      } else {
        setIsNullPred((TIsNullPredicate)value);
      }
      break;

    case LIKE_PRED:
      if (value == null) {
        unsetLikePred();
      } else {
        setLikePred((TLikePredicate)value);
      }
      break;

    case LITERAL_PRED:
      if (value == null) {
        unsetLiteralPred();
      } else {
        setLiteralPred((TLiteralPredicate)value);
      }
      break;

    case SLOT_REF:
      if (value == null) {
        unsetSlotRef();
      } else {
        setSlotRef((TSlotRef)value);
      }
      break;

    case STRING_LITERAL:
      if (value == null) {
        unsetStringLiteral();
      } else {
        setStringLiteral((TStringLiteral)value);
      }
      break;

    case TUPLE_IS_NULL_PRED:
      if (value == null) {
        unsetTupleIsNullPred();
      } else {
        setTupleIsNullPred((TTupleIsNullPredicate)value);
      }
      break;

    case INFO_FUNC:
      if (value == null) {
        unsetInfoFunc();
      } else {
        setInfoFunc((TInfoFunc)value);
      }
      break;

    case DECIMAL_LITERAL:
      if (value == null) {
        unsetDecimalLiteral();
      } else {
        setDecimalLiteral((TDecimalLiteral)value);
      }
      break;

    case OUTPUT_SCALE:
      if (value == null) {
        unsetOutputScale();
      } else {
        setOutputScale((java.lang.Integer)value);
      }
      break;

    case FN_CALL_EXPR:
      if (value == null) {
        unsetFnCallExpr();
      } else {
        setFnCallExpr((TFunctionCallExpr)value);
      }
      break;

    case LARGE_INT_LITERAL:
      if (value == null) {
        unsetLargeIntLiteral();
      } else {
        setLargeIntLiteral((TLargeIntLiteral)value);
      }
      break;

    case OUTPUT_COLUMN:
      if (value == null) {
        unsetOutputColumn();
      } else {
        setOutputColumn((java.lang.Integer)value);
      }
      break;

    case OUTPUT_TYPE:
      if (value == null) {
        unsetOutputType();
      } else {
        setOutputType((org.apache.doris.thrift.TColumnType)value);
      }
      break;

    case VECTOR_OPCODE:
      if (value == null) {
        unsetVectorOpcode();
      } else {
        setVectorOpcode((org.apache.doris.thrift.TExprOpcode)value);
      }
      break;

    case FN:
      if (value == null) {
        unsetFn();
      } else {
        setFn((org.apache.doris.thrift.TFunction)value);
      }
      break;

    case VARARG_START_IDX:
      if (value == null) {
        unsetVarargStartIdx();
      } else {
        setVarargStartIdx((java.lang.Integer)value);
      }
      break;

    case CHILD_TYPE:
      if (value == null) {
        unsetChildType();
      } else {
        setChildType((org.apache.doris.thrift.TPrimitiveType)value);
      }
      break;

    case IS_NULLABLE:
      if (value == null) {
        unsetIsNullable();
      } else {
        setIsNullable((java.lang.Boolean)value);
      }
      break;

    case JSON_LITERAL:
      if (value == null) {
        unsetJsonLiteral();
      } else {
        setJsonLiteral((TJsonLiteral)value);
      }
      break;

    case SCHEMA_CHANGE_EXPR:
      if (value == null) {
        unsetSchemaChangeExpr();
      } else {
        setSchemaChangeExpr((TSchemaChangeExpr)value);
      }
      break;

    case COLUMN_REF:
      if (value == null) {
        unsetColumnRef();
      } else {
        setColumnRef((TColumnRef)value);
      }
      break;

    case MATCH_PREDICATE:
      if (value == null) {
        unsetMatchPredicate();
      } else {
        setMatchPredicate((TMatchPredicate)value);
      }
      break;

    case IPV4_LITERAL:
      if (value == null) {
        unsetIpv4Literal();
      } else {
        setIpv4Literal((TIPv4Literal)value);
      }
      break;

    case IPV6_LITERAL:
      if (value == null) {
        unsetIpv6Literal();
      } else {
        setIpv6Literal((TIPv6Literal)value);
      }
      break;

    case LABEL:
      if (value == null) {
        unsetLabel();
      } else {
        setLabel((java.lang.String)value);
      }
      break;

    case TIMEV2_LITERAL:
      if (value == null) {
        unsetTimev2Literal();
      } else {
        setTimev2Literal((TTimeV2Literal)value);
      }
      break;

    case VARBINARY_LITERAL:
      if (value == null) {
        unsetVarbinaryLiteral();
      } else {
        setVarbinaryLiteral((TVarBinaryLiteral)value);
      }
      break;

    case IS_CAST_NULLABLE:
      if (value == null) {
        unsetIsCastNullable();
      } else {
        setIsCastNullable((java.lang.Boolean)value);
      }
      break;

    case SEARCH_PARAM:
      if (value == null) {
        unsetSearchParam();
      } else {
        setSearchParam((TSearchParam)value);
      }
      break;

    case SHORT_CIRCUIT_EVALUATION:
      if (value == null) {
        unsetShortCircuitEvaluation();
      } else {
        setShortCircuitEvaluation((java.lang.Boolean)value);
      }
      break;

    }
  }

  @org.apache.thrift.annotation.Nullable
  public java.lang.Object getFieldValue(_Fields field) {
    switch (field) {
    case NODE_TYPE:
      return getNodeType();

    case TYPE:
      return getType();

    case OPCODE:
      return getOpcode();

    case NUM_CHILDREN:
      return getNumChildren();

    case AGG_EXPR:
      return getAggExpr();

    case BOOL_LITERAL:
      return getBoolLiteral();

    case CASE_EXPR:
      return getCaseExpr();

    case DATE_LITERAL:
      return getDateLiteral();

    case FLOAT_LITERAL:
      return getFloatLiteral();

    case INT_LITERAL:
      return getIntLiteral();

    case IN_PREDICATE:
      return getInPredicate();

    case IS_NULL_PRED:
      return getIsNullPred();

    case LIKE_PRED:
      return getLikePred();

    case LITERAL_PRED:
      return getLiteralPred();

    case SLOT_REF:
      return getSlotRef();

    case STRING_LITERAL:
      return getStringLiteral();

    case TUPLE_IS_NULL_PRED:
      return getTupleIsNullPred();

    case INFO_FUNC:
      return getInfoFunc();

    case DECIMAL_LITERAL:
      return getDecimalLiteral();

    case OUTPUT_SCALE:
      return getOutputScale();

    case FN_CALL_EXPR:
      return getFnCallExpr();

    case LARGE_INT_LITERAL:
      return getLargeIntLiteral();

    case OUTPUT_COLUMN:
      return getOutputColumn();

    case OUTPUT_TYPE:
      return getOutputType();

    case VECTOR_OPCODE:
      return getVectorOpcode();

    case FN:
      return getFn();

    case VARARG_START_IDX:
      return getVarargStartIdx();

    case CHILD_TYPE:
      return getChildType();

    case IS_NULLABLE:
      return isIsNullable();

    case JSON_LITERAL:
      return getJsonLiteral();

    case SCHEMA_CHANGE_EXPR:
      return getSchemaChangeExpr();

    case COLUMN_REF:
      return getColumnRef();

    case MATCH_PREDICATE:
      return getMatchPredicate();

    case IPV4_LITERAL:
      return getIpv4Literal();

    case IPV6_LITERAL:
      return getIpv6Literal();

    case LABEL:
      return getLabel();

    case TIMEV2_LITERAL:
      return getTimev2Literal();

    case VARBINARY_LITERAL:
      return getVarbinaryLiteral();

    case IS_CAST_NULLABLE:
      return isIsCastNullable();

    case SEARCH_PARAM:
      return getSearchParam();

    case SHORT_CIRCUIT_EVALUATION:
      return isShortCircuitEvaluation();

    }
    throw new java.lang.IllegalStateException();
  }

  /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
  public boolean isSet(_Fields field) {
    if (field == null) {
      throw new java.lang.IllegalArgumentException();
    }

    switch (field) {
    case NODE_TYPE:
      return isSetNodeType();
    case TYPE:
      return isSetType();
    case OPCODE:
      return isSetOpcode();
    case NUM_CHILDREN:
      return isSetNumChildren();
    case AGG_EXPR:
      return isSetAggExpr();
    case BOOL_LITERAL:
      return isSetBoolLiteral();
    case CASE_EXPR:
      return isSetCaseExpr();
    case DATE_LITERAL:
      return isSetDateLiteral();
    case FLOAT_LITERAL:
      return isSetFloatLiteral();
    case INT_LITERAL:
      return isSetIntLiteral();
    case IN_PREDICATE:
      return isSetInPredicate();
    case IS_NULL_PRED:
      return isSetIsNullPred();
    case LIKE_PRED:
      return isSetLikePred();
    case LITERAL_PRED:
      return isSetLiteralPred();
    case SLOT_REF:
      return isSetSlotRef();
    case STRING_LITERAL:
      return isSetStringLiteral();
    case TUPLE_IS_NULL_PRED:
      return isSetTupleIsNullPred();
    case INFO_FUNC:
      return isSetInfoFunc();
    case DECIMAL_LITERAL:
      return isSetDecimalLiteral();
    case OUTPUT_SCALE:
      return isSetOutputScale();
    case FN_CALL_EXPR:
      return isSetFnCallExpr();
    case LARGE_INT_LITERAL:
      return isSetLargeIntLiteral();
    case OUTPUT_COLUMN:
      return isSetOutputColumn();
    case OUTPUT_TYPE:
      return isSetOutputType();
    case VECTOR_OPCODE:
      return isSetVectorOpcode();
    case FN:
      return isSetFn();
    case VARARG_START_IDX:
      return isSetVarargStartIdx();
    case CHILD_TYPE:
      return isSetChildType();
    case IS_NULLABLE:
      return isSetIsNullable();
    case JSON_LITERAL:
      return isSetJsonLiteral();
    case SCHEMA_CHANGE_EXPR:
      return isSetSchemaChangeExpr();
    case COLUMN_REF:
      return isSetColumnRef();
    case MATCH_PREDICATE:
      return isSetMatchPredicate();
    case IPV4_LITERAL:
      return isSetIpv4Literal();
    case IPV6_LITERAL:
      return isSetIpv6Literal();
    case LABEL:
      return isSetLabel();
    case TIMEV2_LITERAL:
      return isSetTimev2Literal();
    case VARBINARY_LITERAL:
      return isSetVarbinaryLiteral();
    case IS_CAST_NULLABLE:
      return isSetIsCastNullable();
    case SEARCH_PARAM:
      return isSetSearchParam();
    case SHORT_CIRCUIT_EVALUATION:
      return isSetShortCircuitEvaluation();
    }
    throw new java.lang.IllegalStateException();
  }

  @Override
  public boolean equals(java.lang.Object that) {
    if (that instanceof TExprNode)
      return this.equals((TExprNode)that);
    return false;
  }

  public boolean equals(TExprNode that) {
    if (that == null)
      return false;
    if (this == that)
      return true;

    boolean this_present_node_type = true && this.isSetNodeType();
    boolean that_present_node_type = true && that.isSetNodeType();
    if (this_present_node_type || that_present_node_type) {
      if (!(this_present_node_type && that_present_node_type))
        return false;
      if (!this.node_type.equals(that.node_type))
        return false;
    }

    boolean this_present_type = true && this.isSetType();
    boolean that_present_type = true && that.isSetType();
    if (this_present_type || that_present_type) {
      if (!(this_present_type && that_present_type))
        return false;
      if (!this.type.equals(that.type))
        return false;
    }

    boolean this_present_opcode = true && this.isSetOpcode();
    boolean that_present_opcode = true && that.isSetOpcode();
    if (this_present_opcode || that_present_opcode) {
      if (!(this_present_opcode && that_present_opcode))
        return false;
      if (!this.opcode.equals(that.opcode))
        return false;
    }

    boolean this_present_num_children = true;
    boolean that_present_num_children = true;
    if (this_present_num_children || that_present_num_children) {
      if (!(this_present_num_children && that_present_num_children))
        return false;
      if (this.num_children != that.num_children)
        return false;
    }

    boolean this_present_agg_expr = true && this.isSetAggExpr();
    boolean that_present_agg_expr = true && that.isSetAggExpr();
    if (this_present_agg_expr || that_present_agg_expr) {
      if (!(this_present_agg_expr && that_present_agg_expr))
        return false;
      if (!this.agg_expr.equals(that.agg_expr))
        return false;
    }

    boolean this_present_bool_literal = true && this.isSetBoolLiteral();
    boolean that_present_bool_literal = true && that.isSetBoolLiteral();
    if (this_present_bool_literal || that_present_bool_literal) {
      if (!(this_present_bool_literal && that_present_bool_literal))
        return false;
      if (!this.bool_literal.equals(that.bool_literal))
        return false;
    }

    boolean this_present_case_expr = true && this.isSetCaseExpr();
    boolean that_present_case_expr = true && that.isSetCaseExpr();
    if (this_present_case_expr || that_present_case_expr) {
      if (!(this_present_case_expr && that_present_case_expr))
        return false;
      if (!this.case_expr.equals(that.case_expr))
        return false;
    }

    boolean this_present_date_literal = true && this.isSetDateLiteral();
    boolean that_present_date_literal = true && that.isSetDateLiteral();
    if (this_present_date_literal || that_present_date_literal) {
      if (!(this_present_date_literal && that_present_date_literal))
        return false;
      if (!this.date_literal.equals(that.date_literal))
        return false;
    }

    boolean this_present_float_literal = true && this.isSetFloatLiteral();
    boolean that_present_float_literal = true && that.isSetFloatLiteral();
    if (this_present_float_literal || that_present_float_literal) {
      if (!(this_present_float_literal && that_present_float_literal))
        return false;
      if (!this.float_literal.equals(that.float_literal))
        return false;
    }

    boolean this_present_int_literal = true && this.isSetIntLiteral();
    boolean that_present_int_literal = true && that.isSetIntLiteral();
    if (this_present_int_literal || that_present_int_literal) {
      if (!(this_present_int_literal && that_present_int_literal))
        return false;
      if (!this.int_literal.equals(that.int_literal))
        return false;
    }

    boolean this_present_in_predicate = true && this.isSetInPredicate();
    boolean that_present_in_predicate = true && that.isSetInPredicate();
    if (this_present_in_predicate || that_present_in_predicate) {
      if (!(this_present_in_predicate && that_present_in_predicate))
        return false;
      if (!this.in_predicate.equals(that.in_predicate))
        return false;
    }

    boolean this_present_is_null_pred = true && this.isSetIsNullPred();
    boolean that_present_is_null_pred = true && that.isSetIsNullPred();
    if (this_present_is_null_pred || that_present_is_null_pred) {
      if (!(this_present_is_null_pred && that_present_is_null_pred))
        return false;
      if (!this.is_null_pred.equals(that.is_null_pred))
        return false;
    }

    boolean this_present_like_pred = true && this.isSetLikePred();
    boolean that_present_like_pred = true && that.isSetLikePred();
    if (this_present_like_pred || that_present_like_pred) {
      if (!(this_present_like_pred && that_present_like_pred))
        return false;
      if (!this.like_pred.equals(that.like_pred))
        return false;
    }

    boolean this_present_literal_pred = true && this.isSetLiteralPred();
    boolean that_present_literal_pred = true && that.isSetLiteralPred();
    if (this_present_literal_pred || that_present_literal_pred) {
      if (!(this_present_literal_pred && that_present_literal_pred))
        return false;
      if (!this.literal_pred.equals(that.literal_pred))
        return false;
    }

    boolean this_present_slot_ref = true && this.isSetSlotRef();
    boolean that_present_slot_ref = true && that.isSetSlotRef();
    if (this_present_slot_ref || that_present_slot_ref) {
      if (!(this_present_slot_ref && that_present_slot_ref))
        return false;
      if (!this.slot_ref.equals(that.slot_ref))
        return false;
    }

    boolean this_present_string_literal = true && this.isSetStringLiteral();
    boolean that_present_string_literal = true && that.isSetStringLiteral();
    if (this_present_string_literal || that_present_string_literal) {
      if (!(this_present_string_literal && that_present_string_literal))
        return false;
      if (!this.string_literal.equals(that.string_literal))
        return false;
    }

    boolean this_present_tuple_is_null_pred = true && this.isSetTupleIsNullPred();
    boolean that_present_tuple_is_null_pred = true && that.isSetTupleIsNullPred();
    if (this_present_tuple_is_null_pred || that_present_tuple_is_null_pred) {
      if (!(this_present_tuple_is_null_pred && that_present_tuple_is_null_pred))
        return false;
      if (!this.tuple_is_null_pred.equals(that.tuple_is_null_pred))
        return false;
    }

    boolean this_present_info_func = true && this.isSetInfoFunc();
    boolean that_present_info_func = true && that.isSetInfoFunc();
    if (this_present_info_func || that_present_info_func) {
      if (!(this_present_info_func && that_present_info_func))
        return false;
      if (!this.info_func.equals(that.info_func))
        return false;
    }

    boolean this_present_decimal_literal = true && this.isSetDecimalLiteral();
    boolean that_present_decimal_literal = true && that.isSetDecimalLiteral();
    if (this_present_decimal_literal || that_present_decimal_literal) {
      if (!(this_present_decimal_literal && that_present_decimal_literal))
        return false;
      if (!this.decimal_literal.equals(that.decimal_literal))
        return false;
    }

    boolean this_present_output_scale = true;
    boolean that_present_output_scale = true;
    if (this_present_output_scale || that_present_output_scale) {
      if (!(this_present_output_scale && that_present_output_scale))
        return false;
      if (this.output_scale != that.output_scale)
        return false;
    }

    boolean this_present_fn_call_expr = true && this.isSetFnCallExpr();
    boolean that_present_fn_call_expr = true && that.isSetFnCallExpr();
    if (this_present_fn_call_expr || that_present_fn_call_expr) {
      if (!(this_present_fn_call_expr && that_present_fn_call_expr))
        return false;
      if (!this.fn_call_expr.equals(that.fn_call_expr))
        return false;
    }

    boolean this_present_large_int_literal = true && this.isSetLargeIntLiteral();
    boolean that_present_large_int_literal = true && that.isSetLargeIntLiteral();
    if (this_present_large_int_literal || that_present_large_int_literal) {
      if (!(this_present_large_int_literal && that_present_large_int_literal))
        return false;
      if (!this.large_int_literal.equals(that.large_int_literal))
        return false;
    }

    boolean this_present_output_column = true && this.isSetOutputColumn();
    boolean that_present_output_column = true && that.isSetOutputColumn();
    if (this_present_output_column || that_present_output_column) {
      if (!(this_present_output_column && that_present_output_column))
        return false;
      if (this.output_column != that.output_column)
        return false;
    }

    boolean this_present_output_type = true && this.isSetOutputType();
    boolean that_present_output_type = true && that.isSetOutputType();
    if (this_present_output_type || that_present_output_type) {
      if (!(this_present_output_type && that_present_output_type))
        return false;
      if (!this.output_type.equals(that.output_type))
        return false;
    }

    boolean this_present_vector_opcode = true && this.isSetVectorOpcode();
    boolean that_present_vector_opcode = true && that.isSetVectorOpcode();
    if (this_present_vector_opcode || that_present_vector_opcode) {
      if (!(this_present_vector_opcode && that_present_vector_opcode))
        return false;
      if (!this.vector_opcode.equals(that.vector_opcode))
        return false;
    }

    boolean this_present_fn = true && this.isSetFn();
    boolean that_present_fn = true && that.isSetFn();
    if (this_present_fn || that_present_fn) {
      if (!(this_present_fn && that_present_fn))
        return false;
      if (!this.fn.equals(that.fn))
        return false;
    }

    boolean this_present_vararg_start_idx = true && this.isSetVarargStartIdx();
    boolean that_present_vararg_start_idx = true && that.isSetVarargStartIdx();
    if (this_present_vararg_start_idx || that_present_vararg_start_idx) {
      if (!(this_present_vararg_start_idx && that_present_vararg_start_idx))
        return false;
      if (this.vararg_start_idx != that.vararg_start_idx)
        return false;
    }

    boolean this_present_child_type = true && this.isSetChildType();
    boolean that_present_child_type = true && that.isSetChildType();
    if (this_present_child_type || that_present_child_type) {
      if (!(this_present_child_type && that_present_child_type))
        return false;
      if (!this.child_type.equals(that.child_type))
        return false;
    }

    boolean this_present_is_nullable = true && this.isSetIsNullable();
    boolean that_present_is_nullable = true && that.isSetIsNullable();
    if (this_present_is_nullable || that_present_is_nullable) {
      if (!(this_present_is_nullable && that_present_is_nullable))
        return false;
      if (this.is_nullable != that.is_nullable)
        return false;
    }

    boolean this_present_json_literal = true && this.isSetJsonLiteral();
    boolean that_present_json_literal = true && that.isSetJsonLiteral();
    if (this_present_json_literal || that_present_json_literal) {
      if (!(this_present_json_literal && that_present_json_literal))
        return false;
      if (!this.json_literal.equals(that.json_literal))
        return false;
    }

    boolean this_present_schema_change_expr = true && this.isSetSchemaChangeExpr();
    boolean that_present_schema_change_expr = true && that.isSetSchemaChangeExpr();
    if (this_present_schema_change_expr || that_present_schema_change_expr) {
      if (!(this_present_schema_change_expr && that_present_schema_change_expr))
        return false;
      if (!this.schema_change_expr.equals(that.schema_change_expr))
        return false;
    }

    boolean this_present_column_ref = true && this.isSetColumnRef();
    boolean that_present_column_ref = true && that.isSetColumnRef();
    if (this_present_column_ref || that_present_column_ref) {
      if (!(this_present_column_ref && that_present_column_ref))
        return false;
      if (!this.column_ref.equals(that.column_ref))
        return false;
    }

    boolean this_present_match_predicate = true && this.isSetMatchPredicate();
    boolean that_present_match_predicate = true && that.isSetMatchPredicate();
    if (this_present_match_predicate || that_present_match_predicate) {
      if (!(this_present_match_predicate && that_present_match_predicate))
        return false;
      if (!this.match_predicate.equals(that.match_predicate))
        return false;
    }

    boolean this_present_ipv4_literal = true && this.isSetIpv4Literal();
    boolean that_present_ipv4_literal = true && that.isSetIpv4Literal();
    if (this_present_ipv4_literal || that_present_ipv4_literal) {
      if (!(this_present_ipv4_literal && that_present_ipv4_literal))
        return false;
      if (!this.ipv4_literal.equals(that.ipv4_literal))
        return false;
    }

    boolean this_present_ipv6_literal = true && this.isSetIpv6Literal();
    boolean that_present_ipv6_literal = true && that.isSetIpv6Literal();
    if (this_present_ipv6_literal || that_present_ipv6_literal) {
      if (!(this_present_ipv6_literal && that_present_ipv6_literal))
        return false;
      if (!this.ipv6_literal.equals(that.ipv6_literal))
        return false;
    }

    boolean this_present_label = true && this.isSetLabel();
    boolean that_present_label = true && that.isSetLabel();
    if (this_present_label || that_present_label) {
      if (!(this_present_label && that_present_label))
        return false;
      if (!this.label.equals(that.label))
        return false;
    }

    boolean this_present_timev2_literal = true && this.isSetTimev2Literal();
    boolean that_present_timev2_literal = true && that.isSetTimev2Literal();
    if (this_present_timev2_literal || that_present_timev2_literal) {
      if (!(this_present_timev2_literal && that_present_timev2_literal))
        return false;
      if (!this.timev2_literal.equals(that.timev2_literal))
        return false;
    }

    boolean this_present_varbinary_literal = true && this.isSetVarbinaryLiteral();
    boolean that_present_varbinary_literal = true && that.isSetVarbinaryLiteral();
    if (this_present_varbinary_literal || that_present_varbinary_literal) {
      if (!(this_present_varbinary_literal && that_present_varbinary_literal))
        return false;
      if (!this.varbinary_literal.equals(that.varbinary_literal))
        return false;
    }

    boolean this_present_is_cast_nullable = true && this.isSetIsCastNullable();
    boolean that_present_is_cast_nullable = true && that.isSetIsCastNullable();
    if (this_present_is_cast_nullable || that_present_is_cast_nullable) {
      if (!(this_present_is_cast_nullable && that_present_is_cast_nullable))
        return false;
      if (this.is_cast_nullable != that.is_cast_nullable)
        return false;
    }

    boolean this_present_search_param = true && this.isSetSearchParam();
    boolean that_present_search_param = true && that.isSetSearchParam();
    if (this_present_search_param || that_present_search_param) {
      if (!(this_present_search_param && that_present_search_param))
        return false;
      if (!this.search_param.equals(that.search_param))
        return false;
    }

    boolean this_present_short_circuit_evaluation = true && this.isSetShortCircuitEvaluation();
    boolean that_present_short_circuit_evaluation = true && that.isSetShortCircuitEvaluation();
    if (this_present_short_circuit_evaluation || that_present_short_circuit_evaluation) {
      if (!(this_present_short_circuit_evaluation && that_present_short_circuit_evaluation))
        return false;
      if (this.short_circuit_evaluation != that.short_circuit_evaluation)
        return false;
    }

    return true;
  }

  @Override
  public int hashCode() {
    int hashCode = 1;

    hashCode = hashCode * 8191 + ((isSetNodeType()) ? 131071 : 524287);
    if (isSetNodeType())
      hashCode = hashCode * 8191 + node_type.getValue();

    hashCode = hashCode * 8191 + ((isSetType()) ? 131071 : 524287);
    if (isSetType())
      hashCode = hashCode * 8191 + type.hashCode();

    hashCode = hashCode * 8191 + ((isSetOpcode()) ? 131071 : 524287);
    if (isSetOpcode())
      hashCode = hashCode * 8191 + opcode.getValue();

    hashCode = hashCode * 8191 + num_children;

    hashCode = hashCode * 8191 + ((isSetAggExpr()) ? 131071 : 524287);
    if (isSetAggExpr())
      hashCode = hashCode * 8191 + agg_expr.hashCode();

    hashCode = hashCode * 8191 + ((isSetBoolLiteral()) ? 131071 : 524287);
    if (isSetBoolLiteral())
      hashCode = hashCode * 8191 + bool_literal.hashCode();

    hashCode = hashCode * 8191 + ((isSetCaseExpr()) ? 131071 : 524287);
    if (isSetCaseExpr())
      hashCode = hashCode * 8191 + case_expr.hashCode();

    hashCode = hashCode * 8191 + ((isSetDateLiteral()) ? 131071 : 524287);
    if (isSetDateLiteral())
      hashCode = hashCode * 8191 + date_literal.hashCode();

    hashCode = hashCode * 8191 + ((isSetFloatLiteral()) ? 131071 : 524287);
    if (isSetFloatLiteral())
      hashCode = hashCode * 8191 + float_literal.hashCode();

    hashCode = hashCode * 8191 + ((isSetIntLiteral()) ? 131071 : 524287);
    if (isSetIntLiteral())
      hashCode = hashCode * 8191 + int_literal.hashCode();

    hashCode = hashCode * 8191 + ((isSetInPredicate()) ? 131071 : 524287);
    if (isSetInPredicate())
      hashCode = hashCode * 8191 + in_predicate.hashCode();

    hashCode = hashCode * 8191 + ((isSetIsNullPred()) ? 131071 : 524287);
    if (isSetIsNullPred())
      hashCode = hashCode * 8191 + is_null_pred.hashCode();

    hashCode = hashCode * 8191 + ((isSetLikePred()) ? 131071 : 524287);
    if (isSetLikePred())
      hashCode = hashCode * 8191 + like_pred.hashCode();

    hashCode = hashCode * 8191 + ((isSetLiteralPred()) ? 131071 : 524287);
    if (isSetLiteralPred())
      hashCode = hashCode * 8191 + literal_pred.hashCode();

    hashCode = hashCode * 8191 + ((isSetSlotRef()) ? 131071 : 524287);
    if (isSetSlotRef())
      hashCode = hashCode * 8191 + slot_ref.hashCode();

    hashCode = hashCode * 8191 + ((isSetStringLiteral()) ? 131071 : 524287);
    if (isSetStringLiteral())
      hashCode = hashCode * 8191 + string_literal.hashCode();

    hashCode = hashCode * 8191 + ((isSetTupleIsNullPred()) ? 131071 : 524287);
    if (isSetTupleIsNullPred())
      hashCode = hashCode * 8191 + tuple_is_null_pred.hashCode();

    hashCode = hashCode * 8191 + ((isSetInfoFunc()) ? 131071 : 524287);
    if (isSetInfoFunc())
      hashCode = hashCode * 8191 + info_func.hashCode();

    hashCode = hashCode * 8191 + ((isSetDecimalLiteral()) ? 131071 : 524287);
    if (isSetDecimalLiteral())
      hashCode = hashCode * 8191 + decimal_literal.hashCode();

    hashCode = hashCode * 8191 + output_scale;

    hashCode = hashCode * 8191 + ((isSetFnCallExpr()) ? 131071 : 524287);
    if (isSetFnCallExpr())
      hashCode = hashCode * 8191 + fn_call_expr.hashCode();

    hashCode = hashCode * 8191 + ((isSetLargeIntLiteral()) ? 131071 : 524287);
    if (isSetLargeIntLiteral())
      hashCode = hashCode * 8191 + large_int_literal.hashCode();

    hashCode = hashCode * 8191 + ((isSetOutputColumn()) ? 131071 : 524287);
    if (isSetOutputColumn())
      hashCode = hashCode * 8191 + output_column;

    hashCode = hashCode * 8191 + ((isSetOutputType()) ? 131071 : 524287);
    if (isSetOutputType())
      hashCode = hashCode * 8191 + output_type.hashCode();

    hashCode = hashCode * 8191 + ((isSetVectorOpcode()) ? 131071 : 524287);
    if (isSetVectorOpcode())
      hashCode = hashCode * 8191 + vector_opcode.getValue();

    hashCode = hashCode * 8191 + ((isSetFn()) ? 131071 : 524287);
    if (isSetFn())
      hashCode = hashCode * 8191 + fn.hashCode();

    hashCode = hashCode * 8191 + ((isSetVarargStartIdx()) ? 131071 : 524287);
    if (isSetVarargStartIdx())
      hashCode = hashCode * 8191 + vararg_start_idx;

    hashCode = hashCode * 8191 + ((isSetChildType()) ? 131071 : 524287);
    if (isSetChildType())
      hashCode = hashCode * 8191 + child_type.getValue();

    hashCode = hashCode * 8191 + ((isSetIsNullable()) ? 131071 : 524287);
    if (isSetIsNullable())
      hashCode = hashCode * 8191 + ((is_nullable) ? 131071 : 524287);

    hashCode = hashCode * 8191 + ((isSetJsonLiteral()) ? 131071 : 524287);
    if (isSetJsonLiteral())
      hashCode = hashCode * 8191 + json_literal.hashCode();

    hashCode = hashCode * 8191 + ((isSetSchemaChangeExpr()) ? 131071 : 524287);
    if (isSetSchemaChangeExpr())
      hashCode = hashCode * 8191 + schema_change_expr.hashCode();

    hashCode = hashCode * 8191 + ((isSetColumnRef()) ? 131071 : 524287);
    if (isSetColumnRef())
      hashCode = hashCode * 8191 + column_ref.hashCode();

    hashCode = hashCode * 8191 + ((isSetMatchPredicate()) ? 131071 : 524287);
    if (isSetMatchPredicate())
      hashCode = hashCode * 8191 + match_predicate.hashCode();

    hashCode = hashCode * 8191 + ((isSetIpv4Literal()) ? 131071 : 524287);
    if (isSetIpv4Literal())
      hashCode = hashCode * 8191 + ipv4_literal.hashCode();

    hashCode = hashCode * 8191 + ((isSetIpv6Literal()) ? 131071 : 524287);
    if (isSetIpv6Literal())
      hashCode = hashCode * 8191 + ipv6_literal.hashCode();

    hashCode = hashCode * 8191 + ((isSetLabel()) ? 131071 : 524287);
    if (isSetLabel())
      hashCode = hashCode * 8191 + label.hashCode();

    hashCode = hashCode * 8191 + ((isSetTimev2Literal()) ? 131071 : 524287);
    if (isSetTimev2Literal())
      hashCode = hashCode * 8191 + timev2_literal.hashCode();

    hashCode = hashCode * 8191 + ((isSetVarbinaryLiteral()) ? 131071 : 524287);
    if (isSetVarbinaryLiteral())
      hashCode = hashCode * 8191 + varbinary_literal.hashCode();

    hashCode = hashCode * 8191 + ((isSetIsCastNullable()) ? 131071 : 524287);
    if (isSetIsCastNullable())
      hashCode = hashCode * 8191 + ((is_cast_nullable) ? 131071 : 524287);

    hashCode = hashCode * 8191 + ((isSetSearchParam()) ? 131071 : 524287);
    if (isSetSearchParam())
      hashCode = hashCode * 8191 + search_param.hashCode();

    hashCode = hashCode * 8191 + ((isSetShortCircuitEvaluation()) ? 131071 : 524287);
    if (isSetShortCircuitEvaluation())
      hashCode = hashCode * 8191 + ((short_circuit_evaluation) ? 131071 : 524287);

    return hashCode;
  }

  @Override
  public int compareTo(TExprNode other) {
    if (!getClass().equals(other.getClass())) {
      return getClass().getName().compareTo(other.getClass().getName());
    }

    int lastComparison = 0;

    lastComparison = java.lang.Boolean.compare(isSetNodeType(), other.isSetNodeType());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetNodeType()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.node_type, other.node_type);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetType(), other.isSetType());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetType()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.type, other.type);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetOpcode(), other.isSetOpcode());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetOpcode()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.opcode, other.opcode);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetNumChildren(), other.isSetNumChildren());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetNumChildren()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.num_children, other.num_children);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetAggExpr(), other.isSetAggExpr());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetAggExpr()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.agg_expr, other.agg_expr);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetBoolLiteral(), other.isSetBoolLiteral());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetBoolLiteral()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.bool_literal, other.bool_literal);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetCaseExpr(), other.isSetCaseExpr());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetCaseExpr()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.case_expr, other.case_expr);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetDateLiteral(), other.isSetDateLiteral());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetDateLiteral()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.date_literal, other.date_literal);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetFloatLiteral(), other.isSetFloatLiteral());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetFloatLiteral()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.float_literal, other.float_literal);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetIntLiteral(), other.isSetIntLiteral());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetIntLiteral()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.int_literal, other.int_literal);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetInPredicate(), other.isSetInPredicate());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetInPredicate()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.in_predicate, other.in_predicate);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetIsNullPred(), other.isSetIsNullPred());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetIsNullPred()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.is_null_pred, other.is_null_pred);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetLikePred(), other.isSetLikePred());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetLikePred()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.like_pred, other.like_pred);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetLiteralPred(), other.isSetLiteralPred());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetLiteralPred()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.literal_pred, other.literal_pred);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetSlotRef(), other.isSetSlotRef());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetSlotRef()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.slot_ref, other.slot_ref);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetStringLiteral(), other.isSetStringLiteral());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetStringLiteral()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.string_literal, other.string_literal);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetTupleIsNullPred(), other.isSetTupleIsNullPred());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetTupleIsNullPred()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.tuple_is_null_pred, other.tuple_is_null_pred);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetInfoFunc(), other.isSetInfoFunc());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetInfoFunc()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.info_func, other.info_func);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetDecimalLiteral(), other.isSetDecimalLiteral());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetDecimalLiteral()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.decimal_literal, other.decimal_literal);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetOutputScale(), other.isSetOutputScale());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetOutputScale()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.output_scale, other.output_scale);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetFnCallExpr(), other.isSetFnCallExpr());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetFnCallExpr()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.fn_call_expr, other.fn_call_expr);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetLargeIntLiteral(), other.isSetLargeIntLiteral());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetLargeIntLiteral()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.large_int_literal, other.large_int_literal);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetOutputColumn(), other.isSetOutputColumn());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetOutputColumn()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.output_column, other.output_column);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetOutputType(), other.isSetOutputType());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetOutputType()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.output_type, other.output_type);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetVectorOpcode(), other.isSetVectorOpcode());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetVectorOpcode()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.vector_opcode, other.vector_opcode);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetFn(), other.isSetFn());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetFn()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.fn, other.fn);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetVarargStartIdx(), other.isSetVarargStartIdx());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetVarargStartIdx()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.vararg_start_idx, other.vararg_start_idx);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetChildType(), other.isSetChildType());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetChildType()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.child_type, other.child_type);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetIsNullable(), other.isSetIsNullable());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetIsNullable()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.is_nullable, other.is_nullable);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetJsonLiteral(), other.isSetJsonLiteral());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetJsonLiteral()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.json_literal, other.json_literal);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetSchemaChangeExpr(), other.isSetSchemaChangeExpr());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetSchemaChangeExpr()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.schema_change_expr, other.schema_change_expr);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetColumnRef(), other.isSetColumnRef());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetColumnRef()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.column_ref, other.column_ref);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetMatchPredicate(), other.isSetMatchPredicate());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetMatchPredicate()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.match_predicate, other.match_predicate);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetIpv4Literal(), other.isSetIpv4Literal());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetIpv4Literal()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ipv4_literal, other.ipv4_literal);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetIpv6Literal(), other.isSetIpv6Literal());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetIpv6Literal()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ipv6_literal, other.ipv6_literal);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetLabel(), other.isSetLabel());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetLabel()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.label, other.label);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetTimev2Literal(), other.isSetTimev2Literal());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetTimev2Literal()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.timev2_literal, other.timev2_literal);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetVarbinaryLiteral(), other.isSetVarbinaryLiteral());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetVarbinaryLiteral()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.varbinary_literal, other.varbinary_literal);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetIsCastNullable(), other.isSetIsCastNullable());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetIsCastNullable()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.is_cast_nullable, other.is_cast_nullable);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetSearchParam(), other.isSetSearchParam());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetSearchParam()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.search_param, other.search_param);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = java.lang.Boolean.compare(isSetShortCircuitEvaluation(), other.isSetShortCircuitEvaluation());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetShortCircuitEvaluation()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.short_circuit_evaluation, other.short_circuit_evaluation);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    return 0;
  }

  @org.apache.thrift.annotation.Nullable
  public _Fields fieldForId(int fieldId) {
    return _Fields.findByThriftId(fieldId);
  }

  public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
    scheme(iprot).read(iprot, this);
  }

  public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
    scheme(oprot).write(oprot, this);
  }

  @Override
  public java.lang.String toString() {
    java.lang.StringBuilder sb = new java.lang.StringBuilder("TExprNode(");
    boolean first = true;

    sb.append("node_type:");
    if (this.node_type == null) {
      sb.append("null");
    } else {
      sb.append(this.node_type);
    }
    first = false;
    if (!first) sb.append(", ");
    sb.append("type:");
    if (this.type == null) {
      sb.append("null");
    } else {
      sb.append(this.type);
    }
    first = false;
    if (isSetOpcode()) {
      if (!first) sb.append(", ");
      sb.append("opcode:");
      if (this.opcode == null) {
        sb.append("null");
      } else {
        sb.append(this.opcode);
      }
      first = false;
    }
    if (!first) sb.append(", ");
    sb.append("num_children:");
    sb.append(this.num_children);
    first = false;
    if (isSetAggExpr()) {
      if (!first) sb.append(", ");
      sb.append("agg_expr:");
      if (this.agg_expr == null) {
        sb.append("null");
      } else {
        sb.append(this.agg_expr);
      }
      first = false;
    }
    if (isSetBoolLiteral()) {
      if (!first) sb.append(", ");
      sb.append("bool_literal:");
      if (this.bool_literal == null) {
        sb.append("null");
      } else {
        sb.append(this.bool_literal);
      }
      first = false;
    }
    if (isSetCaseExpr()) {
      if (!first) sb.append(", ");
      sb.append("case_expr:");
      if (this.case_expr == null) {
        sb.append("null");
      } else {
        sb.append(this.case_expr);
      }
      first = false;
    }
    if (isSetDateLiteral()) {
      if (!first) sb.append(", ");
      sb.append("date_literal:");
      if (this.date_literal == null) {
        sb.append("null");
      } else {
        sb.append(this.date_literal);
      }
      first = false;
    }
    if (isSetFloatLiteral()) {
      if (!first) sb.append(", ");
      sb.append("float_literal:");
      if (this.float_literal == null) {
        sb.append("null");
      } else {
        sb.append(this.float_literal);
      }
      first = false;
    }
    if (isSetIntLiteral()) {
      if (!first) sb.append(", ");
      sb.append("int_literal:");
      if (this.int_literal == null) {
        sb.append("null");
      } else {
        sb.append(this.int_literal);
      }
      first = false;
    }
    if (isSetInPredicate()) {
      if (!first) sb.append(", ");
      sb.append("in_predicate:");
      if (this.in_predicate == null) {
        sb.append("null");
      } else {
        sb.append(this.in_predicate);
      }
      first = false;
    }
    if (isSetIsNullPred()) {
      if (!first) sb.append(", ");
      sb.append("is_null_pred:");
      if (this.is_null_pred == null) {
        sb.append("null");
      } else {
        sb.append(this.is_null_pred);
      }
      first = false;
    }
    if (isSetLikePred()) {
      if (!first) sb.append(", ");
      sb.append("like_pred:");
      if (this.like_pred == null) {
        sb.append("null");
      } else {
        sb.append(this.like_pred);
      }
      first = false;
    }
    if (isSetLiteralPred()) {
      if (!first) sb.append(", ");
      sb.append("literal_pred:");
      if (this.literal_pred == null) {
        sb.append("null");
      } else {
        sb.append(this.literal_pred);
      }
      first = false;
    }
    if (isSetSlotRef()) {
      if (!first) sb.append(", ");
      sb.append("slot_ref:");
      if (this.slot_ref == null) {
        sb.append("null");
      } else {
        sb.append(this.slot_ref);
      }
      first = false;
    }
    if (isSetStringLiteral()) {
      if (!first) sb.append(", ");
      sb.append("string_literal:");
      if (this.string_literal == null) {
        sb.append("null");
      } else {
        sb.append(this.string_literal);
      }
      first = false;
    }
    if (isSetTupleIsNullPred()) {
      if (!first) sb.append(", ");
      sb.append("tuple_is_null_pred:");
      if (this.tuple_is_null_pred == null) {
        sb.append("null");
      } else {
        sb.append(this.tuple_is_null_pred);
      }
      first = false;
    }
    if (isSetInfoFunc()) {
      if (!first) sb.append(", ");
      sb.append("info_func:");
      if (this.info_func == null) {
        sb.append("null");
      } else {
        sb.append(this.info_func);
      }
      first = false;
    }
    if (isSetDecimalLiteral()) {
      if (!first) sb.append(", ");
      sb.append("decimal_literal:");
      if (this.decimal_literal == null) {
        sb.append("null");
      } else {
        sb.append(this.decimal_literal);
      }
      first = false;
    }
    if (!first) sb.append(", ");
    sb.append("output_scale:");
    sb.append(this.output_scale);
    first = false;
    if (isSetFnCallExpr()) {
      if (!first) sb.append(", ");
      sb.append("fn_call_expr:");
      if (this.fn_call_expr == null) {
        sb.append("null");
      } else {
        sb.append(this.fn_call_expr);
      }
      first = false;
    }
    if (isSetLargeIntLiteral()) {
      if (!first) sb.append(", ");
      sb.append("large_int_literal:");
      if (this.large_int_literal == null) {
        sb.append("null");
      } else {
        sb.append(this.large_int_literal);
      }
      first = false;
    }
    if (isSetOutputColumn()) {
      if (!first) sb.append(", ");
      sb.append("output_column:");
      sb.append(this.output_column);
      first = false;
    }
    if (isSetOutputType()) {
      if (!first) sb.append(", ");
      sb.append("output_type:");
      if (this.output_type == null) {
        sb.append("null");
      } else {
        sb.append(this.output_type);
      }
      first = false;
    }
    if (isSetVectorOpcode()) {
      if (!first) sb.append(", ");
      sb.append("vector_opcode:");
      if (this.vector_opcode == null) {
        sb.append("null");
      } else {
        sb.append(this.vector_opcode);
      }
      first = false;
    }
    if (isSetFn()) {
      if (!first) sb.append(", ");
      sb.append("fn:");
      if (this.fn == null) {
        sb.append("null");
      } else {
        sb.append(this.fn);
      }
      first = false;
    }
    if (isSetVarargStartIdx()) {
      if (!first) sb.append(", ");
      sb.append("vararg_start_idx:");
      sb.append(this.vararg_start_idx);
      first = false;
    }
    if (isSetChildType()) {
      if (!first) sb.append(", ");
      sb.append("child_type:");
      if (this.child_type == null) {
        sb.append("null");
      } else {
        sb.append(this.child_type);
      }
      first = false;
    }
    if (isSetIsNullable()) {
      if (!first) sb.append(", ");
      sb.append("is_nullable:");
      sb.append(this.is_nullable);
      first = false;
    }
    if (isSetJsonLiteral()) {
      if (!first) sb.append(", ");
      sb.append("json_literal:");
      if (this.json_literal == null) {
        sb.append("null");
      } else {
        sb.append(this.json_literal);
      }
      first = false;
    }
    if (isSetSchemaChangeExpr()) {
      if (!first) sb.append(", ");
      sb.append("schema_change_expr:");
      if (this.schema_change_expr == null) {
        sb.append("null");
      } else {
        sb.append(this.schema_change_expr);
      }
      first = false;
    }
    if (isSetColumnRef()) {
      if (!first) sb.append(", ");
      sb.append("column_ref:");
      if (this.column_ref == null) {
        sb.append("null");
      } else {
        sb.append(this.column_ref);
      }
      first = false;
    }
    if (isSetMatchPredicate()) {
      if (!first) sb.append(", ");
      sb.append("match_predicate:");
      if (this.match_predicate == null) {
        sb.append("null");
      } else {
        sb.append(this.match_predicate);
      }
      first = false;
    }
    if (isSetIpv4Literal()) {
      if (!first) sb.append(", ");
      sb.append("ipv4_literal:");
      if (this.ipv4_literal == null) {
        sb.append("null");
      } else {
        sb.append(this.ipv4_literal);
      }
      first = false;
    }
    if (isSetIpv6Literal()) {
      if (!first) sb.append(", ");
      sb.append("ipv6_literal:");
      if (this.ipv6_literal == null) {
        sb.append("null");
      } else {
        sb.append(this.ipv6_literal);
      }
      first = false;
    }
    if (isSetLabel()) {
      if (!first) sb.append(", ");
      sb.append("label:");
      if (this.label == null) {
        sb.append("null");
      } else {
        sb.append(this.label);
      }
      first = false;
    }
    if (isSetTimev2Literal()) {
      if (!first) sb.append(", ");
      sb.append("timev2_literal:");
      if (this.timev2_literal == null) {
        sb.append("null");
      } else {
        sb.append(this.timev2_literal);
      }
      first = false;
    }
    if (isSetVarbinaryLiteral()) {
      if (!first) sb.append(", ");
      sb.append("varbinary_literal:");
      if (this.varbinary_literal == null) {
        sb.append("null");
      } else {
        sb.append(this.varbinary_literal);
      }
      first = false;
    }
    if (isSetIsCastNullable()) {
      if (!first) sb.append(", ");
      sb.append("is_cast_nullable:");
      sb.append(this.is_cast_nullable);
      first = false;
    }
    if (isSetSearchParam()) {
      if (!first) sb.append(", ");
      sb.append("search_param:");
      if (this.search_param == null) {
        sb.append("null");
      } else {
        sb.append(this.search_param);
      }
      first = false;
    }
    if (isSetShortCircuitEvaluation()) {
      if (!first) sb.append(", ");
      sb.append("short_circuit_evaluation:");
      sb.append(this.short_circuit_evaluation);
      first = false;
    }
    sb.append(")");
    return sb.toString();
  }

  public void validate() throws org.apache.thrift.TException {
    // check for required fields
    if (node_type == null) {
      throw new org.apache.thrift.protocol.TProtocolException("Required field 'node_type' was not present! Struct: " + toString());
    }
    if (type == null) {
      throw new org.apache.thrift.protocol.TProtocolException("Required field 'type' was not present! Struct: " + toString());
    }
    // alas, we cannot check 'num_children' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'output_scale' because it's a primitive and you chose the non-beans generator.
    // check for sub-struct validity
    if (type != null) {
      type.validate();
    }
    if (agg_expr != null) {
      agg_expr.validate();
    }
    if (bool_literal != null) {
      bool_literal.validate();
    }
    if (case_expr != null) {
      case_expr.validate();
    }
    if (date_literal != null) {
      date_literal.validate();
    }
    if (float_literal != null) {
      float_literal.validate();
    }
    if (int_literal != null) {
      int_literal.validate();
    }
    if (in_predicate != null) {
      in_predicate.validate();
    }
    if (is_null_pred != null) {
      is_null_pred.validate();
    }
    if (like_pred != null) {
      like_pred.validate();
    }
    if (literal_pred != null) {
      literal_pred.validate();
    }
    if (slot_ref != null) {
      slot_ref.validate();
    }
    if (string_literal != null) {
      string_literal.validate();
    }
    if (tuple_is_null_pred != null) {
      tuple_is_null_pred.validate();
    }
    if (info_func != null) {
      info_func.validate();
    }
    if (decimal_literal != null) {
      decimal_literal.validate();
    }
    if (fn_call_expr != null) {
      fn_call_expr.validate();
    }
    if (large_int_literal != null) {
      large_int_literal.validate();
    }
    if (output_type != null) {
      output_type.validate();
    }
    if (fn != null) {
      fn.validate();
    }
    if (json_literal != null) {
      json_literal.validate();
    }
    if (schema_change_expr != null) {
      schema_change_expr.validate();
    }
    if (column_ref != null) {
      column_ref.validate();
    }
    if (match_predicate != null) {
      match_predicate.validate();
    }
    if (ipv4_literal != null) {
      ipv4_literal.validate();
    }
    if (ipv6_literal != null) {
      ipv6_literal.validate();
    }
    if (timev2_literal != null) {
      timev2_literal.validate();
    }
    if (varbinary_literal != null) {
      varbinary_literal.validate();
    }
    if (search_param != null) {
      search_param.validate();
    }
  }

  private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
    try {
      write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
    } catch (org.apache.thrift.TException te) {
      throw new java.io.IOException(te);
    }
  }

  private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
    try {
      // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
      __isset_bitfield = 0;
      read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
    } catch (org.apache.thrift.TException te) {
      throw new java.io.IOException(te);
    }
  }

  private static class TExprNodeStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
    public TExprNodeStandardScheme getScheme() {
      return new TExprNodeStandardScheme();
    }
  }

  private static class TExprNodeStandardScheme extends org.apache.thrift.scheme.StandardScheme<TExprNode> {

    public void read(org.apache.thrift.protocol.TProtocol iprot, TExprNode struct) throws org.apache.thrift.TException {
      org.apache.thrift.protocol.TField schemeField;
      iprot.readStructBegin();
      while (true)
      {
        schemeField = iprot.readFieldBegin();
        if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
          break;
        }
        switch (schemeField.id) {
          case 1: // NODE_TYPE
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.node_type = org.apache.doris.thrift.TExprNodeType.findByValue(iprot.readI32());
              struct.setNodeTypeIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 2: // TYPE
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.type = new org.apache.doris.thrift.TTypeDesc();
              struct.type.read(iprot);
              struct.setTypeIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 3: // OPCODE
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.opcode = org.apache.doris.thrift.TExprOpcode.findByValue(iprot.readI32());
              struct.setOpcodeIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 4: // NUM_CHILDREN
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.num_children = iprot.readI32();
              struct.setNumChildrenIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 5: // AGG_EXPR
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.agg_expr = new TAggregateExpr();
              struct.agg_expr.read(iprot);
              struct.setAggExprIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 6: // BOOL_LITERAL
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.bool_literal = new TBoolLiteral();
              struct.bool_literal.read(iprot);
              struct.setBoolLiteralIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 7: // CASE_EXPR
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.case_expr = new TCaseExpr();
              struct.case_expr.read(iprot);
              struct.setCaseExprIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 8: // DATE_LITERAL
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.date_literal = new TDateLiteral();
              struct.date_literal.read(iprot);
              struct.setDateLiteralIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 9: // FLOAT_LITERAL
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.float_literal = new TFloatLiteral();
              struct.float_literal.read(iprot);
              struct.setFloatLiteralIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 10: // INT_LITERAL
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.int_literal = new TIntLiteral();
              struct.int_literal.read(iprot);
              struct.setIntLiteralIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 11: // IN_PREDICATE
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.in_predicate = new TInPredicate();
              struct.in_predicate.read(iprot);
              struct.setInPredicateIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 12: // IS_NULL_PRED
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.is_null_pred = new TIsNullPredicate();
              struct.is_null_pred.read(iprot);
              struct.setIsNullPredIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 13: // LIKE_PRED
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.like_pred = new TLikePredicate();
              struct.like_pred.read(iprot);
              struct.setLikePredIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 14: // LITERAL_PRED
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.literal_pred = new TLiteralPredicate();
              struct.literal_pred.read(iprot);
              struct.setLiteralPredIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 15: // SLOT_REF
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.slot_ref = new TSlotRef();
              struct.slot_ref.read(iprot);
              struct.setSlotRefIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 16: // STRING_LITERAL
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.string_literal = new TStringLiteral();
              struct.string_literal.read(iprot);
              struct.setStringLiteralIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 17: // TUPLE_IS_NULL_PRED
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.tuple_is_null_pred = new TTupleIsNullPredicate();
              struct.tuple_is_null_pred.read(iprot);
              struct.setTupleIsNullPredIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 18: // INFO_FUNC
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.info_func = new TInfoFunc();
              struct.info_func.read(iprot);
              struct.setInfoFuncIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 19: // DECIMAL_LITERAL
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.decimal_literal = new TDecimalLiteral();
              struct.decimal_literal.read(iprot);
              struct.setDecimalLiteralIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 20: // OUTPUT_SCALE
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.output_scale = iprot.readI32();
              struct.setOutputScaleIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 21: // FN_CALL_EXPR
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.fn_call_expr = new TFunctionCallExpr();
              struct.fn_call_expr.read(iprot);
              struct.setFnCallExprIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 22: // LARGE_INT_LITERAL
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.large_int_literal = new TLargeIntLiteral();
              struct.large_int_literal.read(iprot);
              struct.setLargeIntLiteralIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 23: // OUTPUT_COLUMN
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.output_column = iprot.readI32();
              struct.setOutputColumnIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 24: // OUTPUT_TYPE
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.output_type = new org.apache.doris.thrift.TColumnType();
              struct.output_type.read(iprot);
              struct.setOutputTypeIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 25: // VECTOR_OPCODE
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.vector_opcode = org.apache.doris.thrift.TExprOpcode.findByValue(iprot.readI32());
              struct.setVectorOpcodeIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 26: // FN
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.fn = new org.apache.doris.thrift.TFunction();
              struct.fn.read(iprot);
              struct.setFnIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 27: // VARARG_START_IDX
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.vararg_start_idx = iprot.readI32();
              struct.setVarargStartIdxIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 28: // CHILD_TYPE
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.child_type = org.apache.doris.thrift.TPrimitiveType.findByValue(iprot.readI32());
              struct.setChildTypeIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 29: // IS_NULLABLE
            if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
              struct.is_nullable = iprot.readBool();
              struct.setIsNullableIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 30: // JSON_LITERAL
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.json_literal = new TJsonLiteral();
              struct.json_literal.read(iprot);
              struct.setJsonLiteralIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 31: // SCHEMA_CHANGE_EXPR
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.schema_change_expr = new TSchemaChangeExpr();
              struct.schema_change_expr.read(iprot);
              struct.setSchemaChangeExprIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 32: // COLUMN_REF
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.column_ref = new TColumnRef();
              struct.column_ref.read(iprot);
              struct.setColumnRefIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 33: // MATCH_PREDICATE
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.match_predicate = new TMatchPredicate();
              struct.match_predicate.read(iprot);
              struct.setMatchPredicateIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 34: // IPV4_LITERAL
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.ipv4_literal = new TIPv4Literal();
              struct.ipv4_literal.read(iprot);
              struct.setIpv4LiteralIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 35: // IPV6_LITERAL
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.ipv6_literal = new TIPv6Literal();
              struct.ipv6_literal.read(iprot);
              struct.setIpv6LiteralIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 36: // LABEL
            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
              struct.label = iprot.readString();
              struct.setLabelIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 37: // TIMEV2_LITERAL
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.timev2_literal = new TTimeV2Literal();
              struct.timev2_literal.read(iprot);
              struct.setTimev2LiteralIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 38: // VARBINARY_LITERAL
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.varbinary_literal = new TVarBinaryLiteral();
              struct.varbinary_literal.read(iprot);
              struct.setVarbinaryLiteralIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 39: // IS_CAST_NULLABLE
            if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
              struct.is_cast_nullable = iprot.readBool();
              struct.setIsCastNullableIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 40: // SEARCH_PARAM
            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
              struct.search_param = new TSearchParam();
              struct.search_param.read(iprot);
              struct.setSearchParamIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 41: // SHORT_CIRCUIT_EVALUATION
            if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
              struct.short_circuit_evaluation = iprot.readBool();
              struct.setShortCircuitEvaluationIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          default:
            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
        }
        iprot.readFieldEnd();
      }
      iprot.readStructEnd();

      // check for required fields of primitive type, which can't be checked in the validate method
      if (!struct.isSetNumChildren()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'num_children' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetOutputScale()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'output_scale' was not found in serialized data! Struct: " + toString());
      }
      struct.validate();
    }

    public void write(org.apache.thrift.protocol.TProtocol oprot, TExprNode struct) throws org.apache.thrift.TException {
      struct.validate();

      oprot.writeStructBegin(STRUCT_DESC);
      if (struct.node_type != null) {
        oprot.writeFieldBegin(NODE_TYPE_FIELD_DESC);
        oprot.writeI32(struct.node_type.getValue());
        oprot.writeFieldEnd();
      }
      if (struct.type != null) {
        oprot.writeFieldBegin(TYPE_FIELD_DESC);
        struct.type.write(oprot);
        oprot.writeFieldEnd();
      }
      if (struct.opcode != null) {
        if (struct.isSetOpcode()) {
          oprot.writeFieldBegin(OPCODE_FIELD_DESC);
          oprot.writeI32(struct.opcode.getValue());
          oprot.writeFieldEnd();
        }
      }
      oprot.writeFieldBegin(NUM_CHILDREN_FIELD_DESC);
      oprot.writeI32(struct.num_children);
      oprot.writeFieldEnd();
      if (struct.agg_expr != null) {
        if (struct.isSetAggExpr()) {
          oprot.writeFieldBegin(AGG_EXPR_FIELD_DESC);
          struct.agg_expr.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.bool_literal != null) {
        if (struct.isSetBoolLiteral()) {
          oprot.writeFieldBegin(BOOL_LITERAL_FIELD_DESC);
          struct.bool_literal.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.case_expr != null) {
        if (struct.isSetCaseExpr()) {
          oprot.writeFieldBegin(CASE_EXPR_FIELD_DESC);
          struct.case_expr.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.date_literal != null) {
        if (struct.isSetDateLiteral()) {
          oprot.writeFieldBegin(DATE_LITERAL_FIELD_DESC);
          struct.date_literal.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.float_literal != null) {
        if (struct.isSetFloatLiteral()) {
          oprot.writeFieldBegin(FLOAT_LITERAL_FIELD_DESC);
          struct.float_literal.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.int_literal != null) {
        if (struct.isSetIntLiteral()) {
          oprot.writeFieldBegin(INT_LITERAL_FIELD_DESC);
          struct.int_literal.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.in_predicate != null) {
        if (struct.isSetInPredicate()) {
          oprot.writeFieldBegin(IN_PREDICATE_FIELD_DESC);
          struct.in_predicate.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.is_null_pred != null) {
        if (struct.isSetIsNullPred()) {
          oprot.writeFieldBegin(IS_NULL_PRED_FIELD_DESC);
          struct.is_null_pred.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.like_pred != null) {
        if (struct.isSetLikePred()) {
          oprot.writeFieldBegin(LIKE_PRED_FIELD_DESC);
          struct.like_pred.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.literal_pred != null) {
        if (struct.isSetLiteralPred()) {
          oprot.writeFieldBegin(LITERAL_PRED_FIELD_DESC);
          struct.literal_pred.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.slot_ref != null) {
        if (struct.isSetSlotRef()) {
          oprot.writeFieldBegin(SLOT_REF_FIELD_DESC);
          struct.slot_ref.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.string_literal != null) {
        if (struct.isSetStringLiteral()) {
          oprot.writeFieldBegin(STRING_LITERAL_FIELD_DESC);
          struct.string_literal.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.tuple_is_null_pred != null) {
        if (struct.isSetTupleIsNullPred()) {
          oprot.writeFieldBegin(TUPLE_IS_NULL_PRED_FIELD_DESC);
          struct.tuple_is_null_pred.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.info_func != null) {
        if (struct.isSetInfoFunc()) {
          oprot.writeFieldBegin(INFO_FUNC_FIELD_DESC);
          struct.info_func.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.decimal_literal != null) {
        if (struct.isSetDecimalLiteral()) {
          oprot.writeFieldBegin(DECIMAL_LITERAL_FIELD_DESC);
          struct.decimal_literal.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      oprot.writeFieldBegin(OUTPUT_SCALE_FIELD_DESC);
      oprot.writeI32(struct.output_scale);
      oprot.writeFieldEnd();
      if (struct.fn_call_expr != null) {
        if (struct.isSetFnCallExpr()) {
          oprot.writeFieldBegin(FN_CALL_EXPR_FIELD_DESC);
          struct.fn_call_expr.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.large_int_literal != null) {
        if (struct.isSetLargeIntLiteral()) {
          oprot.writeFieldBegin(LARGE_INT_LITERAL_FIELD_DESC);
          struct.large_int_literal.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.isSetOutputColumn()) {
        oprot.writeFieldBegin(OUTPUT_COLUMN_FIELD_DESC);
        oprot.writeI32(struct.output_column);
        oprot.writeFieldEnd();
      }
      if (struct.output_type != null) {
        if (struct.isSetOutputType()) {
          oprot.writeFieldBegin(OUTPUT_TYPE_FIELD_DESC);
          struct.output_type.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.vector_opcode != null) {
        if (struct.isSetVectorOpcode()) {
          oprot.writeFieldBegin(VECTOR_OPCODE_FIELD_DESC);
          oprot.writeI32(struct.vector_opcode.getValue());
          oprot.writeFieldEnd();
        }
      }
      if (struct.fn != null) {
        if (struct.isSetFn()) {
          oprot.writeFieldBegin(FN_FIELD_DESC);
          struct.fn.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.isSetVarargStartIdx()) {
        oprot.writeFieldBegin(VARARG_START_IDX_FIELD_DESC);
        oprot.writeI32(struct.vararg_start_idx);
        oprot.writeFieldEnd();
      }
      if (struct.child_type != null) {
        if (struct.isSetChildType()) {
          oprot.writeFieldBegin(CHILD_TYPE_FIELD_DESC);
          oprot.writeI32(struct.child_type.getValue());
          oprot.writeFieldEnd();
        }
      }
      if (struct.isSetIsNullable()) {
        oprot.writeFieldBegin(IS_NULLABLE_FIELD_DESC);
        oprot.writeBool(struct.is_nullable);
        oprot.writeFieldEnd();
      }
      if (struct.json_literal != null) {
        if (struct.isSetJsonLiteral()) {
          oprot.writeFieldBegin(JSON_LITERAL_FIELD_DESC);
          struct.json_literal.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.schema_change_expr != null) {
        if (struct.isSetSchemaChangeExpr()) {
          oprot.writeFieldBegin(SCHEMA_CHANGE_EXPR_FIELD_DESC);
          struct.schema_change_expr.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.column_ref != null) {
        if (struct.isSetColumnRef()) {
          oprot.writeFieldBegin(COLUMN_REF_FIELD_DESC);
          struct.column_ref.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.match_predicate != null) {
        if (struct.isSetMatchPredicate()) {
          oprot.writeFieldBegin(MATCH_PREDICATE_FIELD_DESC);
          struct.match_predicate.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.ipv4_literal != null) {
        if (struct.isSetIpv4Literal()) {
          oprot.writeFieldBegin(IPV4_LITERAL_FIELD_DESC);
          struct.ipv4_literal.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.ipv6_literal != null) {
        if (struct.isSetIpv6Literal()) {
          oprot.writeFieldBegin(IPV6_LITERAL_FIELD_DESC);
          struct.ipv6_literal.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.label != null) {
        if (struct.isSetLabel()) {
          oprot.writeFieldBegin(LABEL_FIELD_DESC);
          oprot.writeString(struct.label);
          oprot.writeFieldEnd();
        }
      }
      if (struct.timev2_literal != null) {
        if (struct.isSetTimev2Literal()) {
          oprot.writeFieldBegin(TIMEV2_LITERAL_FIELD_DESC);
          struct.timev2_literal.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.varbinary_literal != null) {
        if (struct.isSetVarbinaryLiteral()) {
          oprot.writeFieldBegin(VARBINARY_LITERAL_FIELD_DESC);
          struct.varbinary_literal.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.isSetIsCastNullable()) {
        oprot.writeFieldBegin(IS_CAST_NULLABLE_FIELD_DESC);
        oprot.writeBool(struct.is_cast_nullable);
        oprot.writeFieldEnd();
      }
      if (struct.search_param != null) {
        if (struct.isSetSearchParam()) {
          oprot.writeFieldBegin(SEARCH_PARAM_FIELD_DESC);
          struct.search_param.write(oprot);
          oprot.writeFieldEnd();
        }
      }
      if (struct.isSetShortCircuitEvaluation()) {
        oprot.writeFieldBegin(SHORT_CIRCUIT_EVALUATION_FIELD_DESC);
        oprot.writeBool(struct.short_circuit_evaluation);
        oprot.writeFieldEnd();
      }
      oprot.writeFieldStop();
      oprot.writeStructEnd();
    }

  }

  private static class TExprNodeTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
    public TExprNodeTupleScheme getScheme() {
      return new TExprNodeTupleScheme();
    }
  }

  private static class TExprNodeTupleScheme extends org.apache.thrift.scheme.TupleScheme<TExprNode> {

    @Override
    public void write(org.apache.thrift.protocol.TProtocol prot, TExprNode struct) throws org.apache.thrift.TException {
      org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
      oprot.writeI32(struct.node_type.getValue());
      struct.type.write(oprot);
      oprot.writeI32(struct.num_children);
      oprot.writeI32(struct.output_scale);
      java.util.BitSet optionals = new java.util.BitSet();
      if (struct.isSetOpcode()) {
        optionals.set(0);
      }
      if (struct.isSetAggExpr()) {
        optionals.set(1);
      }
      if (struct.isSetBoolLiteral()) {
        optionals.set(2);
      }
      if (struct.isSetCaseExpr()) {
        optionals.set(3);
      }
      if (struct.isSetDateLiteral()) {
        optionals.set(4);
      }
      if (struct.isSetFloatLiteral()) {
        optionals.set(5);
      }
      if (struct.isSetIntLiteral()) {
        optionals.set(6);
      }
      if (struct.isSetInPredicate()) {
        optionals.set(7);
      }
      if (struct.isSetIsNullPred()) {
        optionals.set(8);
      }
      if (struct.isSetLikePred()) {
        optionals.set(9);
      }
      if (struct.isSetLiteralPred()) {
        optionals.set(10);
      }
      if (struct.isSetSlotRef()) {
        optionals.set(11);
      }
      if (struct.isSetStringLiteral()) {
        optionals.set(12);
      }
      if (struct.isSetTupleIsNullPred()) {
        optionals.set(13);
      }
      if (struct.isSetInfoFunc()) {
        optionals.set(14);
      }
      if (struct.isSetDecimalLiteral()) {
        optionals.set(15);
      }
      if (struct.isSetFnCallExpr()) {
        optionals.set(16);
      }
      if (struct.isSetLargeIntLiteral()) {
        optionals.set(17);
      }
      if (struct.isSetOutputColumn()) {
        optionals.set(18);
      }
      if (struct.isSetOutputType()) {
        optionals.set(19);
      }
      if (struct.isSetVectorOpcode()) {
        optionals.set(20);
      }
      if (struct.isSetFn()) {
        optionals.set(21);
      }
      if (struct.isSetVarargStartIdx()) {
        optionals.set(22);
      }
      if (struct.isSetChildType()) {
        optionals.set(23);
      }
      if (struct.isSetIsNullable()) {
        optionals.set(24);
      }
      if (struct.isSetJsonLiteral()) {
        optionals.set(25);
      }
      if (struct.isSetSchemaChangeExpr()) {
        optionals.set(26);
      }
      if (struct.isSetColumnRef()) {
        optionals.set(27);
      }
      if (struct.isSetMatchPredicate()) {
        optionals.set(28);
      }
      if (struct.isSetIpv4Literal()) {
        optionals.set(29);
      }
      if (struct.isSetIpv6Literal()) {
        optionals.set(30);
      }
      if (struct.isSetLabel()) {
        optionals.set(31);
      }
      if (struct.isSetTimev2Literal()) {
        optionals.set(32);
      }
      if (struct.isSetVarbinaryLiteral()) {
        optionals.set(33);
      }
      if (struct.isSetIsCastNullable()) {
        optionals.set(34);
      }
      if (struct.isSetSearchParam()) {
        optionals.set(35);
      }
      if (struct.isSetShortCircuitEvaluation()) {
        optionals.set(36);
      }
      oprot.writeBitSet(optionals, 37);
      if (struct.isSetOpcode()) {
        oprot.writeI32(struct.opcode.getValue());
      }
      if (struct.isSetAggExpr()) {
        struct.agg_expr.write(oprot);
      }
      if (struct.isSetBoolLiteral()) {
        struct.bool_literal.write(oprot);
      }
      if (struct.isSetCaseExpr()) {
        struct.case_expr.write(oprot);
      }
      if (struct.isSetDateLiteral()) {
        struct.date_literal.write(oprot);
      }
      if (struct.isSetFloatLiteral()) {
        struct.float_literal.write(oprot);
      }
      if (struct.isSetIntLiteral()) {
        struct.int_literal.write(oprot);
      }
      if (struct.isSetInPredicate()) {
        struct.in_predicate.write(oprot);
      }
      if (struct.isSetIsNullPred()) {
        struct.is_null_pred.write(oprot);
      }
      if (struct.isSetLikePred()) {
        struct.like_pred.write(oprot);
      }
      if (struct.isSetLiteralPred()) {
        struct.literal_pred.write(oprot);
      }
      if (struct.isSetSlotRef()) {
        struct.slot_ref.write(oprot);
      }
      if (struct.isSetStringLiteral()) {
        struct.string_literal.write(oprot);
      }
      if (struct.isSetTupleIsNullPred()) {
        struct.tuple_is_null_pred.write(oprot);
      }
      if (struct.isSetInfoFunc()) {
        struct.info_func.write(oprot);
      }
      if (struct.isSetDecimalLiteral()) {
        struct.decimal_literal.write(oprot);
      }
      if (struct.isSetFnCallExpr()) {
        struct.fn_call_expr.write(oprot);
      }
      if (struct.isSetLargeIntLiteral()) {
        struct.large_int_literal.write(oprot);
      }
      if (struct.isSetOutputColumn()) {
        oprot.writeI32(struct.output_column);
      }
      if (struct.isSetOutputType()) {
        struct.output_type.write(oprot);
      }
      if (struct.isSetVectorOpcode()) {
        oprot.writeI32(struct.vector_opcode.getValue());
      }
      if (struct.isSetFn()) {
        struct.fn.write(oprot);
      }
      if (struct.isSetVarargStartIdx()) {
        oprot.writeI32(struct.vararg_start_idx);
      }
      if (struct.isSetChildType()) {
        oprot.writeI32(struct.child_type.getValue());
      }
      if (struct.isSetIsNullable()) {
        oprot.writeBool(struct.is_nullable);
      }
      if (struct.isSetJsonLiteral()) {
        struct.json_literal.write(oprot);
      }
      if (struct.isSetSchemaChangeExpr()) {
        struct.schema_change_expr.write(oprot);
      }
      if (struct.isSetColumnRef()) {
        struct.column_ref.write(oprot);
      }
      if (struct.isSetMatchPredicate()) {
        struct.match_predicate.write(oprot);
      }
      if (struct.isSetIpv4Literal()) {
        struct.ipv4_literal.write(oprot);
      }
      if (struct.isSetIpv6Literal()) {
        struct.ipv6_literal.write(oprot);
      }
      if (struct.isSetLabel()) {
        oprot.writeString(struct.label);
      }
      if (struct.isSetTimev2Literal()) {
        struct.timev2_literal.write(oprot);
      }
      if (struct.isSetVarbinaryLiteral()) {
        struct.varbinary_literal.write(oprot);
      }
      if (struct.isSetIsCastNullable()) {
        oprot.writeBool(struct.is_cast_nullable);
      }
      if (struct.isSetSearchParam()) {
        struct.search_param.write(oprot);
      }
      if (struct.isSetShortCircuitEvaluation()) {
        oprot.writeBool(struct.short_circuit_evaluation);
      }
    }

    @Override
    public void read(org.apache.thrift.protocol.TProtocol prot, TExprNode struct) throws org.apache.thrift.TException {
      org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
      struct.node_type = org.apache.doris.thrift.TExprNodeType.findByValue(iprot.readI32());
      struct.setNodeTypeIsSet(true);
      struct.type = new org.apache.doris.thrift.TTypeDesc();
      struct.type.read(iprot);
      struct.setTypeIsSet(true);
      struct.num_children = iprot.readI32();
      struct.setNumChildrenIsSet(true);
      struct.output_scale = iprot.readI32();
      struct.setOutputScaleIsSet(true);
      java.util.BitSet incoming = iprot.readBitSet(37);
      if (incoming.get(0)) {
        struct.opcode = org.apache.doris.thrift.TExprOpcode.findByValue(iprot.readI32());
        struct.setOpcodeIsSet(true);
      }
      if (incoming.get(1)) {
        struct.agg_expr = new TAggregateExpr();
        struct.agg_expr.read(iprot);
        struct.setAggExprIsSet(true);
      }
      if (incoming.get(2)) {
        struct.bool_literal = new TBoolLiteral();
        struct.bool_literal.read(iprot);
        struct.setBoolLiteralIsSet(true);
      }
      if (incoming.get(3)) {
        struct.case_expr = new TCaseExpr();
        struct.case_expr.read(iprot);
        struct.setCaseExprIsSet(true);
      }
      if (incoming.get(4)) {
        struct.date_literal = new TDateLiteral();
        struct.date_literal.read(iprot);
        struct.setDateLiteralIsSet(true);
      }
      if (incoming.get(5)) {
        struct.float_literal = new TFloatLiteral();
        struct.float_literal.read(iprot);
        struct.setFloatLiteralIsSet(true);
      }
      if (incoming.get(6)) {
        struct.int_literal = new TIntLiteral();
        struct.int_literal.read(iprot);
        struct.setIntLiteralIsSet(true);
      }
      if (incoming.get(7)) {
        struct.in_predicate = new TInPredicate();
        struct.in_predicate.read(iprot);
        struct.setInPredicateIsSet(true);
      }
      if (incoming.get(8)) {
        struct.is_null_pred = new TIsNullPredicate();
        struct.is_null_pred.read(iprot);
        struct.setIsNullPredIsSet(true);
      }
      if (incoming.get(9)) {
        struct.like_pred = new TLikePredicate();
        struct.like_pred.read(iprot);
        struct.setLikePredIsSet(true);
      }
      if (incoming.get(10)) {
        struct.literal_pred = new TLiteralPredicate();
        struct.literal_pred.read(iprot);
        struct.setLiteralPredIsSet(true);
      }
      if (incoming.get(11)) {
        struct.slot_ref = new TSlotRef();
        struct.slot_ref.read(iprot);
        struct.setSlotRefIsSet(true);
      }
      if (incoming.get(12)) {
        struct.string_literal = new TStringLiteral();
        struct.string_literal.read(iprot);
        struct.setStringLiteralIsSet(true);
      }
      if (incoming.get(13)) {
        struct.tuple_is_null_pred = new TTupleIsNullPredicate();
        struct.tuple_is_null_pred.read(iprot);
        struct.setTupleIsNullPredIsSet(true);
      }
      if (incoming.get(14)) {
        struct.info_func = new TInfoFunc();
        struct.info_func.read(iprot);
        struct.setInfoFuncIsSet(true);
      }
      if (incoming.get(15)) {
        struct.decimal_literal = new TDecimalLiteral();
        struct.decimal_literal.read(iprot);
        struct.setDecimalLiteralIsSet(true);
      }
      if (incoming.get(16)) {
        struct.fn_call_expr = new TFunctionCallExpr();
        struct.fn_call_expr.read(iprot);
        struct.setFnCallExprIsSet(true);
      }
      if (incoming.get(17)) {
        struct.large_int_literal = new TLargeIntLiteral();
        struct.large_int_literal.read(iprot);
        struct.setLargeIntLiteralIsSet(true);
      }
      if (incoming.get(18)) {
        struct.output_column = iprot.readI32();
        struct.setOutputColumnIsSet(true);
      }
      if (incoming.get(19)) {
        struct.output_type = new org.apache.doris.thrift.TColumnType();
        struct.output_type.read(iprot);
        struct.setOutputTypeIsSet(true);
      }
      if (incoming.get(20)) {
        struct.vector_opcode = org.apache.doris.thrift.TExprOpcode.findByValue(iprot.readI32());
        struct.setVectorOpcodeIsSet(true);
      }
      if (incoming.get(21)) {
        struct.fn = new org.apache.doris.thrift.TFunction();
        struct.fn.read(iprot);
        struct.setFnIsSet(true);
      }
      if (incoming.get(22)) {
        struct.vararg_start_idx = iprot.readI32();
        struct.setVarargStartIdxIsSet(true);
      }
      if (incoming.get(23)) {
        struct.child_type = org.apache.doris.thrift.TPrimitiveType.findByValue(iprot.readI32());
        struct.setChildTypeIsSet(true);
      }
      if (incoming.get(24)) {
        struct.is_nullable = iprot.readBool();
        struct.setIsNullableIsSet(true);
      }
      if (incoming.get(25)) {
        struct.json_literal = new TJsonLiteral();
        struct.json_literal.read(iprot);
        struct.setJsonLiteralIsSet(true);
      }
      if (incoming.get(26)) {
        struct.schema_change_expr = new TSchemaChangeExpr();
        struct.schema_change_expr.read(iprot);
        struct.setSchemaChangeExprIsSet(true);
      }
      if (incoming.get(27)) {
        struct.column_ref = new TColumnRef();
        struct.column_ref.read(iprot);
        struct.setColumnRefIsSet(true);
      }
      if (incoming.get(28)) {
        struct.match_predicate = new TMatchPredicate();
        struct.match_predicate.read(iprot);
        struct.setMatchPredicateIsSet(true);
      }
      if (incoming.get(29)) {
        struct.ipv4_literal = new TIPv4Literal();
        struct.ipv4_literal.read(iprot);
        struct.setIpv4LiteralIsSet(true);
      }
      if (incoming.get(30)) {
        struct.ipv6_literal = new TIPv6Literal();
        struct.ipv6_literal.read(iprot);
        struct.setIpv6LiteralIsSet(true);
      }
      if (incoming.get(31)) {
        struct.label = iprot.readString();
        struct.setLabelIsSet(true);
      }
      if (incoming.get(32)) {
        struct.timev2_literal = new TTimeV2Literal();
        struct.timev2_literal.read(iprot);
        struct.setTimev2LiteralIsSet(true);
      }
      if (incoming.get(33)) {
        struct.varbinary_literal = new TVarBinaryLiteral();
        struct.varbinary_literal.read(iprot);
        struct.setVarbinaryLiteralIsSet(true);
      }
      if (incoming.get(34)) {
        struct.is_cast_nullable = iprot.readBool();
        struct.setIsCastNullableIsSet(true);
      }
      if (incoming.get(35)) {
        struct.search_param = new TSearchParam();
        struct.search_param.read(iprot);
        struct.setSearchParamIsSet(true);
      }
      if (incoming.get(36)) {
        struct.short_circuit_evaluation = iprot.readBool();
        struct.setShortCircuitEvaluationIsSet(true);
      }
    }
  }

  private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
    return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
  }
}