// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: substrait/algebra.proto

#ifndef GOOGLE_PROTOBUF_INCLUDED_substrait_2falgebra_2eproto
#define GOOGLE_PROTOBUF_INCLUDED_substrait_2falgebra_2eproto

#include <limits>
#include <string>

#include <google/protobuf/port_def.inc>
#if PROTOBUF_VERSION < 3019000
#error This file was generated by a newer version of protoc which is
#error incompatible with your Protocol Buffer headers. Please update
#error your headers.
#endif
#if 3019003 < PROTOBUF_MIN_PROTOC_VERSION
#error This file was generated by an older version of protoc which is
#error incompatible with your Protocol Buffer headers. Please
#error regenerate this file with a newer version of protoc.
#endif

#include <google/protobuf/port_undef.inc>
#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/arena.h>
#include <google/protobuf/arenastring.h>
#include <google/protobuf/generated_message_bases.h>
#include <google/protobuf/generated_message_table_driven.h>
#include <google/protobuf/generated_message_util.h>
#include <google/protobuf/metadata_lite.h>
#include <google/protobuf/generated_message_reflection.h>
#include <google/protobuf/message.h>
#include <google/protobuf/repeated_field.h>  // IWYU pragma: export
#include <google/protobuf/extension_set.h>  // IWYU pragma: export
#include <google/protobuf/generated_enum_reflection.h>
#include <google/protobuf/unknown_field_set.h>
#include "substrait/type.pb.h"
#include "substrait/extensions/extensions.pb.h"
#include <google/protobuf/any.pb.h>
// @@protoc_insertion_point(includes)
#include <google/protobuf/port_def.inc>
#define PROTOBUF_INTERNAL_EXPORT_substrait_2falgebra_2eproto
PROTOBUF_NAMESPACE_OPEN
namespace internal {
class AnyMetadata;
}  // namespace internal
PROTOBUF_NAMESPACE_CLOSE

// Internal implementation detail -- do not use these members.
struct TableStruct_substrait_2falgebra_2eproto {
  static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTableField entries[]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::AuxiliaryParseTableField aux[]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[82]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::FieldMetadata field_metadata[];
  static const ::PROTOBUF_NAMESPACE_ID::internal::SerializationTable serialization_table[];
  static const uint32_t offsets[];
};
extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_substrait_2falgebra_2eproto;
namespace substrait {
class AggregateFunction;
struct AggregateFunctionDefaultTypeInternal;
extern AggregateFunctionDefaultTypeInternal _AggregateFunction_default_instance_;
class AggregateRel;
struct AggregateRelDefaultTypeInternal;
extern AggregateRelDefaultTypeInternal _AggregateRel_default_instance_;
class AggregateRel_Grouping;
struct AggregateRel_GroupingDefaultTypeInternal;
extern AggregateRel_GroupingDefaultTypeInternal _AggregateRel_Grouping_default_instance_;
class AggregateRel_Measure;
struct AggregateRel_MeasureDefaultTypeInternal;
extern AggregateRel_MeasureDefaultTypeInternal _AggregateRel_Measure_default_instance_;
class CrossRel;
struct CrossRelDefaultTypeInternal;
extern CrossRelDefaultTypeInternal _CrossRel_default_instance_;
class Expression;
struct ExpressionDefaultTypeInternal;
extern ExpressionDefaultTypeInternal _Expression_default_instance_;
class Expression_Cast;
struct Expression_CastDefaultTypeInternal;
extern Expression_CastDefaultTypeInternal _Expression_Cast_default_instance_;
class Expression_EmbeddedFunction;
struct Expression_EmbeddedFunctionDefaultTypeInternal;
extern Expression_EmbeddedFunctionDefaultTypeInternal _Expression_EmbeddedFunction_default_instance_;
class Expression_EmbeddedFunction_PythonPickleFunction;
struct Expression_EmbeddedFunction_PythonPickleFunctionDefaultTypeInternal;
extern Expression_EmbeddedFunction_PythonPickleFunctionDefaultTypeInternal _Expression_EmbeddedFunction_PythonPickleFunction_default_instance_;
class Expression_EmbeddedFunction_WebAssemblyFunction;
struct Expression_EmbeddedFunction_WebAssemblyFunctionDefaultTypeInternal;
extern Expression_EmbeddedFunction_WebAssemblyFunctionDefaultTypeInternal _Expression_EmbeddedFunction_WebAssemblyFunction_default_instance_;
class Expression_Enum;
struct Expression_EnumDefaultTypeInternal;
extern Expression_EnumDefaultTypeInternal _Expression_Enum_default_instance_;
class Expression_Enum_Empty;
struct Expression_Enum_EmptyDefaultTypeInternal;
extern Expression_Enum_EmptyDefaultTypeInternal _Expression_Enum_Empty_default_instance_;
class Expression_FieldReference;
struct Expression_FieldReferenceDefaultTypeInternal;
extern Expression_FieldReferenceDefaultTypeInternal _Expression_FieldReference_default_instance_;
class Expression_FieldReference_OuterReference;
struct Expression_FieldReference_OuterReferenceDefaultTypeInternal;
extern Expression_FieldReference_OuterReferenceDefaultTypeInternal _Expression_FieldReference_OuterReference_default_instance_;
class Expression_FieldReference_RootReference;
struct Expression_FieldReference_RootReferenceDefaultTypeInternal;
extern Expression_FieldReference_RootReferenceDefaultTypeInternal _Expression_FieldReference_RootReference_default_instance_;
class Expression_IfThen;
struct Expression_IfThenDefaultTypeInternal;
extern Expression_IfThenDefaultTypeInternal _Expression_IfThen_default_instance_;
class Expression_IfThen_IfClause;
struct Expression_IfThen_IfClauseDefaultTypeInternal;
extern Expression_IfThen_IfClauseDefaultTypeInternal _Expression_IfThen_IfClause_default_instance_;
class Expression_Literal;
struct Expression_LiteralDefaultTypeInternal;
extern Expression_LiteralDefaultTypeInternal _Expression_Literal_default_instance_;
class Expression_Literal_Decimal;
struct Expression_Literal_DecimalDefaultTypeInternal;
extern Expression_Literal_DecimalDefaultTypeInternal _Expression_Literal_Decimal_default_instance_;
class Expression_Literal_IntervalDayToSecond;
struct Expression_Literal_IntervalDayToSecondDefaultTypeInternal;
extern Expression_Literal_IntervalDayToSecondDefaultTypeInternal _Expression_Literal_IntervalDayToSecond_default_instance_;
class Expression_Literal_IntervalYearToMonth;
struct Expression_Literal_IntervalYearToMonthDefaultTypeInternal;
extern Expression_Literal_IntervalYearToMonthDefaultTypeInternal _Expression_Literal_IntervalYearToMonth_default_instance_;
class Expression_Literal_List;
struct Expression_Literal_ListDefaultTypeInternal;
extern Expression_Literal_ListDefaultTypeInternal _Expression_Literal_List_default_instance_;
class Expression_Literal_Map;
struct Expression_Literal_MapDefaultTypeInternal;
extern Expression_Literal_MapDefaultTypeInternal _Expression_Literal_Map_default_instance_;
class Expression_Literal_Map_KeyValue;
struct Expression_Literal_Map_KeyValueDefaultTypeInternal;
extern Expression_Literal_Map_KeyValueDefaultTypeInternal _Expression_Literal_Map_KeyValue_default_instance_;
class Expression_Literal_Struct;
struct Expression_Literal_StructDefaultTypeInternal;
extern Expression_Literal_StructDefaultTypeInternal _Expression_Literal_Struct_default_instance_;
class Expression_Literal_VarChar;
struct Expression_Literal_VarCharDefaultTypeInternal;
extern Expression_Literal_VarCharDefaultTypeInternal _Expression_Literal_VarChar_default_instance_;
class Expression_MaskExpression;
struct Expression_MaskExpressionDefaultTypeInternal;
extern Expression_MaskExpressionDefaultTypeInternal _Expression_MaskExpression_default_instance_;
class Expression_MaskExpression_ListSelect;
struct Expression_MaskExpression_ListSelectDefaultTypeInternal;
extern Expression_MaskExpression_ListSelectDefaultTypeInternal _Expression_MaskExpression_ListSelect_default_instance_;
class Expression_MaskExpression_ListSelect_ListSelectItem;
struct Expression_MaskExpression_ListSelect_ListSelectItemDefaultTypeInternal;
extern Expression_MaskExpression_ListSelect_ListSelectItemDefaultTypeInternal _Expression_MaskExpression_ListSelect_ListSelectItem_default_instance_;
class Expression_MaskExpression_ListSelect_ListSelectItem_ListElement;
struct Expression_MaskExpression_ListSelect_ListSelectItem_ListElementDefaultTypeInternal;
extern Expression_MaskExpression_ListSelect_ListSelectItem_ListElementDefaultTypeInternal _Expression_MaskExpression_ListSelect_ListSelectItem_ListElement_default_instance_;
class Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice;
struct Expression_MaskExpression_ListSelect_ListSelectItem_ListSliceDefaultTypeInternal;
extern Expression_MaskExpression_ListSelect_ListSelectItem_ListSliceDefaultTypeInternal _Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice_default_instance_;
class Expression_MaskExpression_MapSelect;
struct Expression_MaskExpression_MapSelectDefaultTypeInternal;
extern Expression_MaskExpression_MapSelectDefaultTypeInternal _Expression_MaskExpression_MapSelect_default_instance_;
class Expression_MaskExpression_MapSelect_MapKey;
struct Expression_MaskExpression_MapSelect_MapKeyDefaultTypeInternal;
extern Expression_MaskExpression_MapSelect_MapKeyDefaultTypeInternal _Expression_MaskExpression_MapSelect_MapKey_default_instance_;
class Expression_MaskExpression_MapSelect_MapKeyExpression;
struct Expression_MaskExpression_MapSelect_MapKeyExpressionDefaultTypeInternal;
extern Expression_MaskExpression_MapSelect_MapKeyExpressionDefaultTypeInternal _Expression_MaskExpression_MapSelect_MapKeyExpression_default_instance_;
class Expression_MaskExpression_Select;
struct Expression_MaskExpression_SelectDefaultTypeInternal;
extern Expression_MaskExpression_SelectDefaultTypeInternal _Expression_MaskExpression_Select_default_instance_;
class Expression_MaskExpression_StructItem;
struct Expression_MaskExpression_StructItemDefaultTypeInternal;
extern Expression_MaskExpression_StructItemDefaultTypeInternal _Expression_MaskExpression_StructItem_default_instance_;
class Expression_MaskExpression_StructSelect;
struct Expression_MaskExpression_StructSelectDefaultTypeInternal;
extern Expression_MaskExpression_StructSelectDefaultTypeInternal _Expression_MaskExpression_StructSelect_default_instance_;
class Expression_MultiOrList;
struct Expression_MultiOrListDefaultTypeInternal;
extern Expression_MultiOrListDefaultTypeInternal _Expression_MultiOrList_default_instance_;
class Expression_MultiOrList_Record;
struct Expression_MultiOrList_RecordDefaultTypeInternal;
extern Expression_MultiOrList_RecordDefaultTypeInternal _Expression_MultiOrList_Record_default_instance_;
class Expression_ReferenceSegment;
struct Expression_ReferenceSegmentDefaultTypeInternal;
extern Expression_ReferenceSegmentDefaultTypeInternal _Expression_ReferenceSegment_default_instance_;
class Expression_ReferenceSegment_ListElement;
struct Expression_ReferenceSegment_ListElementDefaultTypeInternal;
extern Expression_ReferenceSegment_ListElementDefaultTypeInternal _Expression_ReferenceSegment_ListElement_default_instance_;
class Expression_ReferenceSegment_MapKey;
struct Expression_ReferenceSegment_MapKeyDefaultTypeInternal;
extern Expression_ReferenceSegment_MapKeyDefaultTypeInternal _Expression_ReferenceSegment_MapKey_default_instance_;
class Expression_ReferenceSegment_StructField;
struct Expression_ReferenceSegment_StructFieldDefaultTypeInternal;
extern Expression_ReferenceSegment_StructFieldDefaultTypeInternal _Expression_ReferenceSegment_StructField_default_instance_;
class Expression_ScalarFunction;
struct Expression_ScalarFunctionDefaultTypeInternal;
extern Expression_ScalarFunctionDefaultTypeInternal _Expression_ScalarFunction_default_instance_;
class Expression_SingularOrList;
struct Expression_SingularOrListDefaultTypeInternal;
extern Expression_SingularOrListDefaultTypeInternal _Expression_SingularOrList_default_instance_;
class Expression_Subquery;
struct Expression_SubqueryDefaultTypeInternal;
extern Expression_SubqueryDefaultTypeInternal _Expression_Subquery_default_instance_;
class Expression_Subquery_InPredicate;
struct Expression_Subquery_InPredicateDefaultTypeInternal;
extern Expression_Subquery_InPredicateDefaultTypeInternal _Expression_Subquery_InPredicate_default_instance_;
class Expression_Subquery_Scalar;
struct Expression_Subquery_ScalarDefaultTypeInternal;
extern Expression_Subquery_ScalarDefaultTypeInternal _Expression_Subquery_Scalar_default_instance_;
class Expression_Subquery_SetComparison;
struct Expression_Subquery_SetComparisonDefaultTypeInternal;
extern Expression_Subquery_SetComparisonDefaultTypeInternal _Expression_Subquery_SetComparison_default_instance_;
class Expression_Subquery_SetPredicate;
struct Expression_Subquery_SetPredicateDefaultTypeInternal;
extern Expression_Subquery_SetPredicateDefaultTypeInternal _Expression_Subquery_SetPredicate_default_instance_;
class Expression_SwitchExpression;
struct Expression_SwitchExpressionDefaultTypeInternal;
extern Expression_SwitchExpressionDefaultTypeInternal _Expression_SwitchExpression_default_instance_;
class Expression_SwitchExpression_IfValue;
struct Expression_SwitchExpression_IfValueDefaultTypeInternal;
extern Expression_SwitchExpression_IfValueDefaultTypeInternal _Expression_SwitchExpression_IfValue_default_instance_;
class Expression_WindowFunction;
struct Expression_WindowFunctionDefaultTypeInternal;
extern Expression_WindowFunctionDefaultTypeInternal _Expression_WindowFunction_default_instance_;
class Expression_WindowFunction_Bound;
struct Expression_WindowFunction_BoundDefaultTypeInternal;
extern Expression_WindowFunction_BoundDefaultTypeInternal _Expression_WindowFunction_Bound_default_instance_;
class Expression_WindowFunction_Bound_CurrentRow;
struct Expression_WindowFunction_Bound_CurrentRowDefaultTypeInternal;
extern Expression_WindowFunction_Bound_CurrentRowDefaultTypeInternal _Expression_WindowFunction_Bound_CurrentRow_default_instance_;
class Expression_WindowFunction_Bound_Following;
struct Expression_WindowFunction_Bound_FollowingDefaultTypeInternal;
extern Expression_WindowFunction_Bound_FollowingDefaultTypeInternal _Expression_WindowFunction_Bound_Following_default_instance_;
class Expression_WindowFunction_Bound_Preceding;
struct Expression_WindowFunction_Bound_PrecedingDefaultTypeInternal;
extern Expression_WindowFunction_Bound_PrecedingDefaultTypeInternal _Expression_WindowFunction_Bound_Preceding_default_instance_;
class Expression_WindowFunction_Bound_Unbounded;
struct Expression_WindowFunction_Bound_UnboundedDefaultTypeInternal;
extern Expression_WindowFunction_Bound_UnboundedDefaultTypeInternal _Expression_WindowFunction_Bound_Unbounded_default_instance_;
class ExtensionLeafRel;
struct ExtensionLeafRelDefaultTypeInternal;
extern ExtensionLeafRelDefaultTypeInternal _ExtensionLeafRel_default_instance_;
class ExtensionMultiRel;
struct ExtensionMultiRelDefaultTypeInternal;
extern ExtensionMultiRelDefaultTypeInternal _ExtensionMultiRel_default_instance_;
class ExtensionSingleRel;
struct ExtensionSingleRelDefaultTypeInternal;
extern ExtensionSingleRelDefaultTypeInternal _ExtensionSingleRel_default_instance_;
class FetchRel;
struct FetchRelDefaultTypeInternal;
extern FetchRelDefaultTypeInternal _FetchRel_default_instance_;
class FilterRel;
struct FilterRelDefaultTypeInternal;
extern FilterRelDefaultTypeInternal _FilterRel_default_instance_;
class JoinRel;
struct JoinRelDefaultTypeInternal;
extern JoinRelDefaultTypeInternal _JoinRel_default_instance_;
class ProjectRel;
struct ProjectRelDefaultTypeInternal;
extern ProjectRelDefaultTypeInternal _ProjectRel_default_instance_;
class ReadRel;
struct ReadRelDefaultTypeInternal;
extern ReadRelDefaultTypeInternal _ReadRel_default_instance_;
class ReadRel_ExtensionTable;
struct ReadRel_ExtensionTableDefaultTypeInternal;
extern ReadRel_ExtensionTableDefaultTypeInternal _ReadRel_ExtensionTable_default_instance_;
class ReadRel_LocalFiles;
struct ReadRel_LocalFilesDefaultTypeInternal;
extern ReadRel_LocalFilesDefaultTypeInternal _ReadRel_LocalFiles_default_instance_;
class ReadRel_LocalFiles_FileOrFiles;
struct ReadRel_LocalFiles_FileOrFilesDefaultTypeInternal;
extern ReadRel_LocalFiles_FileOrFilesDefaultTypeInternal _ReadRel_LocalFiles_FileOrFiles_default_instance_;
class ReadRel_NamedTable;
struct ReadRel_NamedTableDefaultTypeInternal;
extern ReadRel_NamedTableDefaultTypeInternal _ReadRel_NamedTable_default_instance_;
class ReadRel_VirtualTable;
struct ReadRel_VirtualTableDefaultTypeInternal;
extern ReadRel_VirtualTableDefaultTypeInternal _ReadRel_VirtualTable_default_instance_;
class Rel;
struct RelDefaultTypeInternal;
extern RelDefaultTypeInternal _Rel_default_instance_;
class RelCommon;
struct RelCommonDefaultTypeInternal;
extern RelCommonDefaultTypeInternal _RelCommon_default_instance_;
class RelCommon_Direct;
struct RelCommon_DirectDefaultTypeInternal;
extern RelCommon_DirectDefaultTypeInternal _RelCommon_Direct_default_instance_;
class RelCommon_Emit;
struct RelCommon_EmitDefaultTypeInternal;
extern RelCommon_EmitDefaultTypeInternal _RelCommon_Emit_default_instance_;
class RelCommon_Hint;
struct RelCommon_HintDefaultTypeInternal;
extern RelCommon_HintDefaultTypeInternal _RelCommon_Hint_default_instance_;
class RelCommon_Hint_RuntimeConstraint;
struct RelCommon_Hint_RuntimeConstraintDefaultTypeInternal;
extern RelCommon_Hint_RuntimeConstraintDefaultTypeInternal _RelCommon_Hint_RuntimeConstraint_default_instance_;
class RelCommon_Hint_Stats;
struct RelCommon_Hint_StatsDefaultTypeInternal;
extern RelCommon_Hint_StatsDefaultTypeInternal _RelCommon_Hint_Stats_default_instance_;
class RelRoot;
struct RelRootDefaultTypeInternal;
extern RelRootDefaultTypeInternal _RelRoot_default_instance_;
class SetRel;
struct SetRelDefaultTypeInternal;
extern SetRelDefaultTypeInternal _SetRel_default_instance_;
class SortField;
struct SortFieldDefaultTypeInternal;
extern SortFieldDefaultTypeInternal _SortField_default_instance_;
class SortRel;
struct SortRelDefaultTypeInternal;
extern SortRelDefaultTypeInternal _SortRel_default_instance_;
}  // namespace substrait
PROTOBUF_NAMESPACE_OPEN
template<> ::substrait::AggregateFunction* Arena::CreateMaybeMessage<::substrait::AggregateFunction>(Arena*);
template<> ::substrait::AggregateRel* Arena::CreateMaybeMessage<::substrait::AggregateRel>(Arena*);
template<> ::substrait::AggregateRel_Grouping* Arena::CreateMaybeMessage<::substrait::AggregateRel_Grouping>(Arena*);
template<> ::substrait::AggregateRel_Measure* Arena::CreateMaybeMessage<::substrait::AggregateRel_Measure>(Arena*);
template<> ::substrait::CrossRel* Arena::CreateMaybeMessage<::substrait::CrossRel>(Arena*);
template<> ::substrait::Expression* Arena::CreateMaybeMessage<::substrait::Expression>(Arena*);
template<> ::substrait::Expression_Cast* Arena::CreateMaybeMessage<::substrait::Expression_Cast>(Arena*);
template<> ::substrait::Expression_EmbeddedFunction* Arena::CreateMaybeMessage<::substrait::Expression_EmbeddedFunction>(Arena*);
template<> ::substrait::Expression_EmbeddedFunction_PythonPickleFunction* Arena::CreateMaybeMessage<::substrait::Expression_EmbeddedFunction_PythonPickleFunction>(Arena*);
template<> ::substrait::Expression_EmbeddedFunction_WebAssemblyFunction* Arena::CreateMaybeMessage<::substrait::Expression_EmbeddedFunction_WebAssemblyFunction>(Arena*);
template<> ::substrait::Expression_Enum* Arena::CreateMaybeMessage<::substrait::Expression_Enum>(Arena*);
template<> ::substrait::Expression_Enum_Empty* Arena::CreateMaybeMessage<::substrait::Expression_Enum_Empty>(Arena*);
template<> ::substrait::Expression_FieldReference* Arena::CreateMaybeMessage<::substrait::Expression_FieldReference>(Arena*);
template<> ::substrait::Expression_FieldReference_OuterReference* Arena::CreateMaybeMessage<::substrait::Expression_FieldReference_OuterReference>(Arena*);
template<> ::substrait::Expression_FieldReference_RootReference* Arena::CreateMaybeMessage<::substrait::Expression_FieldReference_RootReference>(Arena*);
template<> ::substrait::Expression_IfThen* Arena::CreateMaybeMessage<::substrait::Expression_IfThen>(Arena*);
template<> ::substrait::Expression_IfThen_IfClause* Arena::CreateMaybeMessage<::substrait::Expression_IfThen_IfClause>(Arena*);
template<> ::substrait::Expression_Literal* Arena::CreateMaybeMessage<::substrait::Expression_Literal>(Arena*);
template<> ::substrait::Expression_Literal_Decimal* Arena::CreateMaybeMessage<::substrait::Expression_Literal_Decimal>(Arena*);
template<> ::substrait::Expression_Literal_IntervalDayToSecond* Arena::CreateMaybeMessage<::substrait::Expression_Literal_IntervalDayToSecond>(Arena*);
template<> ::substrait::Expression_Literal_IntervalYearToMonth* Arena::CreateMaybeMessage<::substrait::Expression_Literal_IntervalYearToMonth>(Arena*);
template<> ::substrait::Expression_Literal_List* Arena::CreateMaybeMessage<::substrait::Expression_Literal_List>(Arena*);
template<> ::substrait::Expression_Literal_Map* Arena::CreateMaybeMessage<::substrait::Expression_Literal_Map>(Arena*);
template<> ::substrait::Expression_Literal_Map_KeyValue* Arena::CreateMaybeMessage<::substrait::Expression_Literal_Map_KeyValue>(Arena*);
template<> ::substrait::Expression_Literal_Struct* Arena::CreateMaybeMessage<::substrait::Expression_Literal_Struct>(Arena*);
template<> ::substrait::Expression_Literal_VarChar* Arena::CreateMaybeMessage<::substrait::Expression_Literal_VarChar>(Arena*);
template<> ::substrait::Expression_MaskExpression* Arena::CreateMaybeMessage<::substrait::Expression_MaskExpression>(Arena*);
template<> ::substrait::Expression_MaskExpression_ListSelect* Arena::CreateMaybeMessage<::substrait::Expression_MaskExpression_ListSelect>(Arena*);
template<> ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem* Arena::CreateMaybeMessage<::substrait::Expression_MaskExpression_ListSelect_ListSelectItem>(Arena*);
template<> ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListElement* Arena::CreateMaybeMessage<::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListElement>(Arena*);
template<> ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice* Arena::CreateMaybeMessage<::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice>(Arena*);
template<> ::substrait::Expression_MaskExpression_MapSelect* Arena::CreateMaybeMessage<::substrait::Expression_MaskExpression_MapSelect>(Arena*);
template<> ::substrait::Expression_MaskExpression_MapSelect_MapKey* Arena::CreateMaybeMessage<::substrait::Expression_MaskExpression_MapSelect_MapKey>(Arena*);
template<> ::substrait::Expression_MaskExpression_MapSelect_MapKeyExpression* Arena::CreateMaybeMessage<::substrait::Expression_MaskExpression_MapSelect_MapKeyExpression>(Arena*);
template<> ::substrait::Expression_MaskExpression_Select* Arena::CreateMaybeMessage<::substrait::Expression_MaskExpression_Select>(Arena*);
template<> ::substrait::Expression_MaskExpression_StructItem* Arena::CreateMaybeMessage<::substrait::Expression_MaskExpression_StructItem>(Arena*);
template<> ::substrait::Expression_MaskExpression_StructSelect* Arena::CreateMaybeMessage<::substrait::Expression_MaskExpression_StructSelect>(Arena*);
template<> ::substrait::Expression_MultiOrList* Arena::CreateMaybeMessage<::substrait::Expression_MultiOrList>(Arena*);
template<> ::substrait::Expression_MultiOrList_Record* Arena::CreateMaybeMessage<::substrait::Expression_MultiOrList_Record>(Arena*);
template<> ::substrait::Expression_ReferenceSegment* Arena::CreateMaybeMessage<::substrait::Expression_ReferenceSegment>(Arena*);
template<> ::substrait::Expression_ReferenceSegment_ListElement* Arena::CreateMaybeMessage<::substrait::Expression_ReferenceSegment_ListElement>(Arena*);
template<> ::substrait::Expression_ReferenceSegment_MapKey* Arena::CreateMaybeMessage<::substrait::Expression_ReferenceSegment_MapKey>(Arena*);
template<> ::substrait::Expression_ReferenceSegment_StructField* Arena::CreateMaybeMessage<::substrait::Expression_ReferenceSegment_StructField>(Arena*);
template<> ::substrait::Expression_ScalarFunction* Arena::CreateMaybeMessage<::substrait::Expression_ScalarFunction>(Arena*);
template<> ::substrait::Expression_SingularOrList* Arena::CreateMaybeMessage<::substrait::Expression_SingularOrList>(Arena*);
template<> ::substrait::Expression_Subquery* Arena::CreateMaybeMessage<::substrait::Expression_Subquery>(Arena*);
template<> ::substrait::Expression_Subquery_InPredicate* Arena::CreateMaybeMessage<::substrait::Expression_Subquery_InPredicate>(Arena*);
template<> ::substrait::Expression_Subquery_Scalar* Arena::CreateMaybeMessage<::substrait::Expression_Subquery_Scalar>(Arena*);
template<> ::substrait::Expression_Subquery_SetComparison* Arena::CreateMaybeMessage<::substrait::Expression_Subquery_SetComparison>(Arena*);
template<> ::substrait::Expression_Subquery_SetPredicate* Arena::CreateMaybeMessage<::substrait::Expression_Subquery_SetPredicate>(Arena*);
template<> ::substrait::Expression_SwitchExpression* Arena::CreateMaybeMessage<::substrait::Expression_SwitchExpression>(Arena*);
template<> ::substrait::Expression_SwitchExpression_IfValue* Arena::CreateMaybeMessage<::substrait::Expression_SwitchExpression_IfValue>(Arena*);
template<> ::substrait::Expression_WindowFunction* Arena::CreateMaybeMessage<::substrait::Expression_WindowFunction>(Arena*);
template<> ::substrait::Expression_WindowFunction_Bound* Arena::CreateMaybeMessage<::substrait::Expression_WindowFunction_Bound>(Arena*);
template<> ::substrait::Expression_WindowFunction_Bound_CurrentRow* Arena::CreateMaybeMessage<::substrait::Expression_WindowFunction_Bound_CurrentRow>(Arena*);
template<> ::substrait::Expression_WindowFunction_Bound_Following* Arena::CreateMaybeMessage<::substrait::Expression_WindowFunction_Bound_Following>(Arena*);
template<> ::substrait::Expression_WindowFunction_Bound_Preceding* Arena::CreateMaybeMessage<::substrait::Expression_WindowFunction_Bound_Preceding>(Arena*);
template<> ::substrait::Expression_WindowFunction_Bound_Unbounded* Arena::CreateMaybeMessage<::substrait::Expression_WindowFunction_Bound_Unbounded>(Arena*);
template<> ::substrait::ExtensionLeafRel* Arena::CreateMaybeMessage<::substrait::ExtensionLeafRel>(Arena*);
template<> ::substrait::ExtensionMultiRel* Arena::CreateMaybeMessage<::substrait::ExtensionMultiRel>(Arena*);
template<> ::substrait::ExtensionSingleRel* Arena::CreateMaybeMessage<::substrait::ExtensionSingleRel>(Arena*);
template<> ::substrait::FetchRel* Arena::CreateMaybeMessage<::substrait::FetchRel>(Arena*);
template<> ::substrait::FilterRel* Arena::CreateMaybeMessage<::substrait::FilterRel>(Arena*);
template<> ::substrait::JoinRel* Arena::CreateMaybeMessage<::substrait::JoinRel>(Arena*);
template<> ::substrait::ProjectRel* Arena::CreateMaybeMessage<::substrait::ProjectRel>(Arena*);
template<> ::substrait::ReadRel* Arena::CreateMaybeMessage<::substrait::ReadRel>(Arena*);
template<> ::substrait::ReadRel_ExtensionTable* Arena::CreateMaybeMessage<::substrait::ReadRel_ExtensionTable>(Arena*);
template<> ::substrait::ReadRel_LocalFiles* Arena::CreateMaybeMessage<::substrait::ReadRel_LocalFiles>(Arena*);
template<> ::substrait::ReadRel_LocalFiles_FileOrFiles* Arena::CreateMaybeMessage<::substrait::ReadRel_LocalFiles_FileOrFiles>(Arena*);
template<> ::substrait::ReadRel_NamedTable* Arena::CreateMaybeMessage<::substrait::ReadRel_NamedTable>(Arena*);
template<> ::substrait::ReadRel_VirtualTable* Arena::CreateMaybeMessage<::substrait::ReadRel_VirtualTable>(Arena*);
template<> ::substrait::Rel* Arena::CreateMaybeMessage<::substrait::Rel>(Arena*);
template<> ::substrait::RelCommon* Arena::CreateMaybeMessage<::substrait::RelCommon>(Arena*);
template<> ::substrait::RelCommon_Direct* Arena::CreateMaybeMessage<::substrait::RelCommon_Direct>(Arena*);
template<> ::substrait::RelCommon_Emit* Arena::CreateMaybeMessage<::substrait::RelCommon_Emit>(Arena*);
template<> ::substrait::RelCommon_Hint* Arena::CreateMaybeMessage<::substrait::RelCommon_Hint>(Arena*);
template<> ::substrait::RelCommon_Hint_RuntimeConstraint* Arena::CreateMaybeMessage<::substrait::RelCommon_Hint_RuntimeConstraint>(Arena*);
template<> ::substrait::RelCommon_Hint_Stats* Arena::CreateMaybeMessage<::substrait::RelCommon_Hint_Stats>(Arena*);
template<> ::substrait::RelRoot* Arena::CreateMaybeMessage<::substrait::RelRoot>(Arena*);
template<> ::substrait::SetRel* Arena::CreateMaybeMessage<::substrait::SetRel>(Arena*);
template<> ::substrait::SortField* Arena::CreateMaybeMessage<::substrait::SortField>(Arena*);
template<> ::substrait::SortRel* Arena::CreateMaybeMessage<::substrait::SortRel>(Arena*);
PROTOBUF_NAMESPACE_CLOSE
namespace substrait {

enum ReadRel_LocalFiles_FileOrFiles_FileFormat : int {
  ReadRel_LocalFiles_FileOrFiles_FileFormat_FILE_FORMAT_UNSPECIFIED = 0,
  ReadRel_LocalFiles_FileOrFiles_FileFormat_FILE_FORMAT_PARQUET = 1,
  ReadRel_LocalFiles_FileOrFiles_FileFormat_ReadRel_LocalFiles_FileOrFiles_FileFormat_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::min(),
  ReadRel_LocalFiles_FileOrFiles_FileFormat_ReadRel_LocalFiles_FileOrFiles_FileFormat_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::max()
};
bool ReadRel_LocalFiles_FileOrFiles_FileFormat_IsValid(int value);
constexpr ReadRel_LocalFiles_FileOrFiles_FileFormat ReadRel_LocalFiles_FileOrFiles_FileFormat_FileFormat_MIN = ReadRel_LocalFiles_FileOrFiles_FileFormat_FILE_FORMAT_UNSPECIFIED;
constexpr ReadRel_LocalFiles_FileOrFiles_FileFormat ReadRel_LocalFiles_FileOrFiles_FileFormat_FileFormat_MAX = ReadRel_LocalFiles_FileOrFiles_FileFormat_FILE_FORMAT_PARQUET;
constexpr int ReadRel_LocalFiles_FileOrFiles_FileFormat_FileFormat_ARRAYSIZE = ReadRel_LocalFiles_FileOrFiles_FileFormat_FileFormat_MAX + 1;

const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* ReadRel_LocalFiles_FileOrFiles_FileFormat_descriptor();
template<typename T>
inline const std::string& ReadRel_LocalFiles_FileOrFiles_FileFormat_Name(T enum_t_value) {
  static_assert(::std::is_same<T, ReadRel_LocalFiles_FileOrFiles_FileFormat>::value ||
    ::std::is_integral<T>::value,
    "Incorrect type passed to function ReadRel_LocalFiles_FileOrFiles_FileFormat_Name.");
  return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum(
    ReadRel_LocalFiles_FileOrFiles_FileFormat_descriptor(), enum_t_value);
}
inline bool ReadRel_LocalFiles_FileOrFiles_FileFormat_Parse(
    ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, ReadRel_LocalFiles_FileOrFiles_FileFormat* value) {
  return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<ReadRel_LocalFiles_FileOrFiles_FileFormat>(
    ReadRel_LocalFiles_FileOrFiles_FileFormat_descriptor(), name, value);
}
enum JoinRel_JoinType : int {
  JoinRel_JoinType_JOIN_TYPE_UNSPECIFIED = 0,
  JoinRel_JoinType_JOIN_TYPE_INNER = 1,
  JoinRel_JoinType_JOIN_TYPE_OUTER = 2,
  JoinRel_JoinType_JOIN_TYPE_LEFT = 3,
  JoinRel_JoinType_JOIN_TYPE_RIGHT = 4,
  JoinRel_JoinType_JOIN_TYPE_SEMI = 5,
  JoinRel_JoinType_JOIN_TYPE_ANTI = 6,
  JoinRel_JoinType_JOIN_TYPE_SINGLE = 7,
  JoinRel_JoinType_JoinRel_JoinType_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::min(),
  JoinRel_JoinType_JoinRel_JoinType_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::max()
};
bool JoinRel_JoinType_IsValid(int value);
constexpr JoinRel_JoinType JoinRel_JoinType_JoinType_MIN = JoinRel_JoinType_JOIN_TYPE_UNSPECIFIED;
constexpr JoinRel_JoinType JoinRel_JoinType_JoinType_MAX = JoinRel_JoinType_JOIN_TYPE_SINGLE;
constexpr int JoinRel_JoinType_JoinType_ARRAYSIZE = JoinRel_JoinType_JoinType_MAX + 1;

const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* JoinRel_JoinType_descriptor();
template<typename T>
inline const std::string& JoinRel_JoinType_Name(T enum_t_value) {
  static_assert(::std::is_same<T, JoinRel_JoinType>::value ||
    ::std::is_integral<T>::value,
    "Incorrect type passed to function JoinRel_JoinType_Name.");
  return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum(
    JoinRel_JoinType_descriptor(), enum_t_value);
}
inline bool JoinRel_JoinType_Parse(
    ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, JoinRel_JoinType* value) {
  return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<JoinRel_JoinType>(
    JoinRel_JoinType_descriptor(), name, value);
}
enum SetRel_SetOp : int {
  SetRel_SetOp_SET_OP_UNSPECIFIED = 0,
  SetRel_SetOp_SET_OP_MINUS_PRIMARY = 1,
  SetRel_SetOp_SET_OP_MINUS_MULTISET = 2,
  SetRel_SetOp_SET_OP_INTERSECTION_PRIMARY = 3,
  SetRel_SetOp_SET_OP_INTERSECTION_MULTISET = 4,
  SetRel_SetOp_SET_OP_UNION_DISTINCT = 5,
  SetRel_SetOp_SET_OP_UNION_ALL = 6,
  SetRel_SetOp_SetRel_SetOp_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::min(),
  SetRel_SetOp_SetRel_SetOp_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::max()
};
bool SetRel_SetOp_IsValid(int value);
constexpr SetRel_SetOp SetRel_SetOp_SetOp_MIN = SetRel_SetOp_SET_OP_UNSPECIFIED;
constexpr SetRel_SetOp SetRel_SetOp_SetOp_MAX = SetRel_SetOp_SET_OP_UNION_ALL;
constexpr int SetRel_SetOp_SetOp_ARRAYSIZE = SetRel_SetOp_SetOp_MAX + 1;

const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* SetRel_SetOp_descriptor();
template<typename T>
inline const std::string& SetRel_SetOp_Name(T enum_t_value) {
  static_assert(::std::is_same<T, SetRel_SetOp>::value ||
    ::std::is_integral<T>::value,
    "Incorrect type passed to function SetRel_SetOp_Name.");
  return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum(
    SetRel_SetOp_descriptor(), enum_t_value);
}
inline bool SetRel_SetOp_Parse(
    ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, SetRel_SetOp* value) {
  return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<SetRel_SetOp>(
    SetRel_SetOp_descriptor(), name, value);
}
enum Expression_Subquery_SetPredicate_PredicateOp : int {
  Expression_Subquery_SetPredicate_PredicateOp_PREDICATE_OP_UNSPECIFIED = 0,
  Expression_Subquery_SetPredicate_PredicateOp_PREDICATE_OP_EXISTS = 1,
  Expression_Subquery_SetPredicate_PredicateOp_PREDICATE_OP_UNIQUE = 2,
  Expression_Subquery_SetPredicate_PredicateOp_Expression_Subquery_SetPredicate_PredicateOp_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::min(),
  Expression_Subquery_SetPredicate_PredicateOp_Expression_Subquery_SetPredicate_PredicateOp_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::max()
};
bool Expression_Subquery_SetPredicate_PredicateOp_IsValid(int value);
constexpr Expression_Subquery_SetPredicate_PredicateOp Expression_Subquery_SetPredicate_PredicateOp_PredicateOp_MIN = Expression_Subquery_SetPredicate_PredicateOp_PREDICATE_OP_UNSPECIFIED;
constexpr Expression_Subquery_SetPredicate_PredicateOp Expression_Subquery_SetPredicate_PredicateOp_PredicateOp_MAX = Expression_Subquery_SetPredicate_PredicateOp_PREDICATE_OP_UNIQUE;
constexpr int Expression_Subquery_SetPredicate_PredicateOp_PredicateOp_ARRAYSIZE = Expression_Subquery_SetPredicate_PredicateOp_PredicateOp_MAX + 1;

const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* Expression_Subquery_SetPredicate_PredicateOp_descriptor();
template<typename T>
inline const std::string& Expression_Subquery_SetPredicate_PredicateOp_Name(T enum_t_value) {
  static_assert(::std::is_same<T, Expression_Subquery_SetPredicate_PredicateOp>::value ||
    ::std::is_integral<T>::value,
    "Incorrect type passed to function Expression_Subquery_SetPredicate_PredicateOp_Name.");
  return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum(
    Expression_Subquery_SetPredicate_PredicateOp_descriptor(), enum_t_value);
}
inline bool Expression_Subquery_SetPredicate_PredicateOp_Parse(
    ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, Expression_Subquery_SetPredicate_PredicateOp* value) {
  return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<Expression_Subquery_SetPredicate_PredicateOp>(
    Expression_Subquery_SetPredicate_PredicateOp_descriptor(), name, value);
}
enum Expression_Subquery_SetComparison_ComparisonOp : int {
  Expression_Subquery_SetComparison_ComparisonOp_COMPARISON_OP_UNSPECIFIED = 0,
  Expression_Subquery_SetComparison_ComparisonOp_COMPARISON_OP_EQ = 1,
  Expression_Subquery_SetComparison_ComparisonOp_COMPARISON_OP_NE = 2,
  Expression_Subquery_SetComparison_ComparisonOp_COMPARISON_OP_LT = 3,
  Expression_Subquery_SetComparison_ComparisonOp_COMPARISON_OP_GT = 4,
  Expression_Subquery_SetComparison_ComparisonOp_COMPARISON_OP_LE = 5,
  Expression_Subquery_SetComparison_ComparisonOp_COMPARISON_OP_GE = 6,
  Expression_Subquery_SetComparison_ComparisonOp_Expression_Subquery_SetComparison_ComparisonOp_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::min(),
  Expression_Subquery_SetComparison_ComparisonOp_Expression_Subquery_SetComparison_ComparisonOp_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::max()
};
bool Expression_Subquery_SetComparison_ComparisonOp_IsValid(int value);
constexpr Expression_Subquery_SetComparison_ComparisonOp Expression_Subquery_SetComparison_ComparisonOp_ComparisonOp_MIN = Expression_Subquery_SetComparison_ComparisonOp_COMPARISON_OP_UNSPECIFIED;
constexpr Expression_Subquery_SetComparison_ComparisonOp Expression_Subquery_SetComparison_ComparisonOp_ComparisonOp_MAX = Expression_Subquery_SetComparison_ComparisonOp_COMPARISON_OP_GE;
constexpr int Expression_Subquery_SetComparison_ComparisonOp_ComparisonOp_ARRAYSIZE = Expression_Subquery_SetComparison_ComparisonOp_ComparisonOp_MAX + 1;

const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* Expression_Subquery_SetComparison_ComparisonOp_descriptor();
template<typename T>
inline const std::string& Expression_Subquery_SetComparison_ComparisonOp_Name(T enum_t_value) {
  static_assert(::std::is_same<T, Expression_Subquery_SetComparison_ComparisonOp>::value ||
    ::std::is_integral<T>::value,
    "Incorrect type passed to function Expression_Subquery_SetComparison_ComparisonOp_Name.");
  return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum(
    Expression_Subquery_SetComparison_ComparisonOp_descriptor(), enum_t_value);
}
inline bool Expression_Subquery_SetComparison_ComparisonOp_Parse(
    ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, Expression_Subquery_SetComparison_ComparisonOp* value) {
  return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<Expression_Subquery_SetComparison_ComparisonOp>(
    Expression_Subquery_SetComparison_ComparisonOp_descriptor(), name, value);
}
enum Expression_Subquery_SetComparison_ReductionOp : int {
  Expression_Subquery_SetComparison_ReductionOp_REDUCTION_OP_UNSPECIFIED = 0,
  Expression_Subquery_SetComparison_ReductionOp_REDUCTION_OP_ANY = 1,
  Expression_Subquery_SetComparison_ReductionOp_REDUCTION_OP_ALL = 2,
  Expression_Subquery_SetComparison_ReductionOp_Expression_Subquery_SetComparison_ReductionOp_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::min(),
  Expression_Subquery_SetComparison_ReductionOp_Expression_Subquery_SetComparison_ReductionOp_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::max()
};
bool Expression_Subquery_SetComparison_ReductionOp_IsValid(int value);
constexpr Expression_Subquery_SetComparison_ReductionOp Expression_Subquery_SetComparison_ReductionOp_ReductionOp_MIN = Expression_Subquery_SetComparison_ReductionOp_REDUCTION_OP_UNSPECIFIED;
constexpr Expression_Subquery_SetComparison_ReductionOp Expression_Subquery_SetComparison_ReductionOp_ReductionOp_MAX = Expression_Subquery_SetComparison_ReductionOp_REDUCTION_OP_ALL;
constexpr int Expression_Subquery_SetComparison_ReductionOp_ReductionOp_ARRAYSIZE = Expression_Subquery_SetComparison_ReductionOp_ReductionOp_MAX + 1;

const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* Expression_Subquery_SetComparison_ReductionOp_descriptor();
template<typename T>
inline const std::string& Expression_Subquery_SetComparison_ReductionOp_Name(T enum_t_value) {
  static_assert(::std::is_same<T, Expression_Subquery_SetComparison_ReductionOp>::value ||
    ::std::is_integral<T>::value,
    "Incorrect type passed to function Expression_Subquery_SetComparison_ReductionOp_Name.");
  return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum(
    Expression_Subquery_SetComparison_ReductionOp_descriptor(), enum_t_value);
}
inline bool Expression_Subquery_SetComparison_ReductionOp_Parse(
    ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, Expression_Subquery_SetComparison_ReductionOp* value) {
  return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<Expression_Subquery_SetComparison_ReductionOp>(
    Expression_Subquery_SetComparison_ReductionOp_descriptor(), name, value);
}
enum SortField_SortDirection : int {
  SortField_SortDirection_SORT_DIRECTION_UNSPECIFIED = 0,
  SortField_SortDirection_SORT_DIRECTION_ASC_NULLS_FIRST = 1,
  SortField_SortDirection_SORT_DIRECTION_ASC_NULLS_LAST = 2,
  SortField_SortDirection_SORT_DIRECTION_DESC_NULLS_FIRST = 3,
  SortField_SortDirection_SORT_DIRECTION_DESC_NULLS_LAST = 4,
  SortField_SortDirection_SORT_DIRECTION_CLUSTERED = 5,
  SortField_SortDirection_SortField_SortDirection_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::min(),
  SortField_SortDirection_SortField_SortDirection_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::max()
};
bool SortField_SortDirection_IsValid(int value);
constexpr SortField_SortDirection SortField_SortDirection_SortDirection_MIN = SortField_SortDirection_SORT_DIRECTION_UNSPECIFIED;
constexpr SortField_SortDirection SortField_SortDirection_SortDirection_MAX = SortField_SortDirection_SORT_DIRECTION_CLUSTERED;
constexpr int SortField_SortDirection_SortDirection_ARRAYSIZE = SortField_SortDirection_SortDirection_MAX + 1;

const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* SortField_SortDirection_descriptor();
template<typename T>
inline const std::string& SortField_SortDirection_Name(T enum_t_value) {
  static_assert(::std::is_same<T, SortField_SortDirection>::value ||
    ::std::is_integral<T>::value,
    "Incorrect type passed to function SortField_SortDirection_Name.");
  return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum(
    SortField_SortDirection_descriptor(), enum_t_value);
}
inline bool SortField_SortDirection_Parse(
    ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, SortField_SortDirection* value) {
  return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<SortField_SortDirection>(
    SortField_SortDirection_descriptor(), name, value);
}
enum AggregationPhase : int {
  AGGREGATION_PHASE_UNSPECIFIED = 0,
  AGGREGATION_PHASE_INITIAL_TO_INTERMEDIATE = 1,
  AGGREGATION_PHASE_INTERMEDIATE_TO_INTERMEDIATE = 2,
  AGGREGATION_PHASE_INITIAL_TO_RESULT = 3,
  AGGREGATION_PHASE_INTERMEDIATE_TO_RESULT = 4,
  AggregationPhase_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::min(),
  AggregationPhase_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::max()
};
bool AggregationPhase_IsValid(int value);
constexpr AggregationPhase AggregationPhase_MIN = AGGREGATION_PHASE_UNSPECIFIED;
constexpr AggregationPhase AggregationPhase_MAX = AGGREGATION_PHASE_INTERMEDIATE_TO_RESULT;
constexpr int AggregationPhase_ARRAYSIZE = AggregationPhase_MAX + 1;

const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* AggregationPhase_descriptor();
template<typename T>
inline const std::string& AggregationPhase_Name(T enum_t_value) {
  static_assert(::std::is_same<T, AggregationPhase>::value ||
    ::std::is_integral<T>::value,
    "Incorrect type passed to function AggregationPhase_Name.");
  return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum(
    AggregationPhase_descriptor(), enum_t_value);
}
inline bool AggregationPhase_Parse(
    ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, AggregationPhase* value) {
  return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<AggregationPhase>(
    AggregationPhase_descriptor(), name, value);
}
// ===================================================================

class RelCommon_Direct final :
    public ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase /* @@protoc_insertion_point(class_definition:substrait.RelCommon.Direct) */ {
 public:
  inline RelCommon_Direct() : RelCommon_Direct(nullptr) {}
  explicit constexpr RelCommon_Direct(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  RelCommon_Direct(const RelCommon_Direct& from);
  RelCommon_Direct(RelCommon_Direct&& from) noexcept
    : RelCommon_Direct() {
    *this = ::std::move(from);
  }

  inline RelCommon_Direct& operator=(const RelCommon_Direct& from) {
    CopyFrom(from);
    return *this;
  }
  inline RelCommon_Direct& operator=(RelCommon_Direct&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const RelCommon_Direct& default_instance() {
    return *internal_default_instance();
  }
  static inline const RelCommon_Direct* internal_default_instance() {
    return reinterpret_cast<const RelCommon_Direct*>(
               &_RelCommon_Direct_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    0;

  friend void swap(RelCommon_Direct& a, RelCommon_Direct& b) {
    a.Swap(&b);
  }
  inline void Swap(RelCommon_Direct* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(RelCommon_Direct* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  RelCommon_Direct* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<RelCommon_Direct>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::CopyFrom;
  inline void CopyFrom(const RelCommon_Direct& from) {
    ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::CopyImpl(this, from);
  }
  using ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::MergeFrom;
  void MergeFrom(const RelCommon_Direct& from) {
    ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::MergeImpl(this, from);
  }
  public:

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.RelCommon.Direct";
  }
  protected:
  explicit RelCommon_Direct(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // @@protoc_insertion_point(class_scope:substrait.RelCommon.Direct)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class RelCommon_Emit final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.RelCommon.Emit) */ {
 public:
  inline RelCommon_Emit() : RelCommon_Emit(nullptr) {}
  ~RelCommon_Emit() override;
  explicit constexpr RelCommon_Emit(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  RelCommon_Emit(const RelCommon_Emit& from);
  RelCommon_Emit(RelCommon_Emit&& from) noexcept
    : RelCommon_Emit() {
    *this = ::std::move(from);
  }

  inline RelCommon_Emit& operator=(const RelCommon_Emit& from) {
    CopyFrom(from);
    return *this;
  }
  inline RelCommon_Emit& operator=(RelCommon_Emit&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const RelCommon_Emit& default_instance() {
    return *internal_default_instance();
  }
  static inline const RelCommon_Emit* internal_default_instance() {
    return reinterpret_cast<const RelCommon_Emit*>(
               &_RelCommon_Emit_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    1;

  friend void swap(RelCommon_Emit& a, RelCommon_Emit& b) {
    a.Swap(&b);
  }
  inline void Swap(RelCommon_Emit* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(RelCommon_Emit* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  RelCommon_Emit* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<RelCommon_Emit>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const RelCommon_Emit& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const RelCommon_Emit& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(RelCommon_Emit* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.RelCommon.Emit";
  }
  protected:
  explicit RelCommon_Emit(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kOutputMappingFieldNumber = 1,
  };
  // repeated int32 output_mapping = 1 [json_name = "outputMapping"];
  int output_mapping_size() const;
  private:
  int _internal_output_mapping_size() const;
  public:
  void clear_output_mapping();
  private:
  int32_t _internal_output_mapping(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >&
      _internal_output_mapping() const;
  void _internal_add_output_mapping(int32_t value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >*
      _internal_mutable_output_mapping();
  public:
  int32_t output_mapping(int index) const;
  void set_output_mapping(int index, int32_t value);
  void add_output_mapping(int32_t value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >&
      output_mapping() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >*
      mutable_output_mapping();

  // @@protoc_insertion_point(class_scope:substrait.RelCommon.Emit)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t > output_mapping_;
  mutable std::atomic<int> _output_mapping_cached_byte_size_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class RelCommon_Hint_Stats final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.RelCommon.Hint.Stats) */ {
 public:
  inline RelCommon_Hint_Stats() : RelCommon_Hint_Stats(nullptr) {}
  ~RelCommon_Hint_Stats() override;
  explicit constexpr RelCommon_Hint_Stats(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  RelCommon_Hint_Stats(const RelCommon_Hint_Stats& from);
  RelCommon_Hint_Stats(RelCommon_Hint_Stats&& from) noexcept
    : RelCommon_Hint_Stats() {
    *this = ::std::move(from);
  }

  inline RelCommon_Hint_Stats& operator=(const RelCommon_Hint_Stats& from) {
    CopyFrom(from);
    return *this;
  }
  inline RelCommon_Hint_Stats& operator=(RelCommon_Hint_Stats&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const RelCommon_Hint_Stats& default_instance() {
    return *internal_default_instance();
  }
  static inline const RelCommon_Hint_Stats* internal_default_instance() {
    return reinterpret_cast<const RelCommon_Hint_Stats*>(
               &_RelCommon_Hint_Stats_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    2;

  friend void swap(RelCommon_Hint_Stats& a, RelCommon_Hint_Stats& b) {
    a.Swap(&b);
  }
  inline void Swap(RelCommon_Hint_Stats* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(RelCommon_Hint_Stats* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  RelCommon_Hint_Stats* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<RelCommon_Hint_Stats>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const RelCommon_Hint_Stats& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const RelCommon_Hint_Stats& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(RelCommon_Hint_Stats* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.RelCommon.Hint.Stats";
  }
  protected:
  explicit RelCommon_Hint_Stats(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kAdvancedExtensionFieldNumber = 10,
    kRowCountFieldNumber = 1,
    kRecordSizeFieldNumber = 2,
  };
  // .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
  bool has_advanced_extension() const;
  private:
  bool _internal_has_advanced_extension() const;
  public:
  void clear_advanced_extension();
  const ::substrait::extensions::AdvancedExtension& advanced_extension() const;
  PROTOBUF_NODISCARD ::substrait::extensions::AdvancedExtension* release_advanced_extension();
  ::substrait::extensions::AdvancedExtension* mutable_advanced_extension();
  void set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension);
  private:
  const ::substrait::extensions::AdvancedExtension& _internal_advanced_extension() const;
  ::substrait::extensions::AdvancedExtension* _internal_mutable_advanced_extension();
  public:
  void unsafe_arena_set_allocated_advanced_extension(
      ::substrait::extensions::AdvancedExtension* advanced_extension);
  ::substrait::extensions::AdvancedExtension* unsafe_arena_release_advanced_extension();

  // double row_count = 1 [json_name = "rowCount"];
  void clear_row_count();
  double row_count() const;
  void set_row_count(double value);
  private:
  double _internal_row_count() const;
  void _internal_set_row_count(double value);
  public:

  // double record_size = 2 [json_name = "recordSize"];
  void clear_record_size();
  double record_size() const;
  void set_record_size(double value);
  private:
  double _internal_record_size() const;
  void _internal_set_record_size(double value);
  public:

  // @@protoc_insertion_point(class_scope:substrait.RelCommon.Hint.Stats)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::substrait::extensions::AdvancedExtension* advanced_extension_;
  double row_count_;
  double record_size_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class RelCommon_Hint_RuntimeConstraint final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.RelCommon.Hint.RuntimeConstraint) */ {
 public:
  inline RelCommon_Hint_RuntimeConstraint() : RelCommon_Hint_RuntimeConstraint(nullptr) {}
  ~RelCommon_Hint_RuntimeConstraint() override;
  explicit constexpr RelCommon_Hint_RuntimeConstraint(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  RelCommon_Hint_RuntimeConstraint(const RelCommon_Hint_RuntimeConstraint& from);
  RelCommon_Hint_RuntimeConstraint(RelCommon_Hint_RuntimeConstraint&& from) noexcept
    : RelCommon_Hint_RuntimeConstraint() {
    *this = ::std::move(from);
  }

  inline RelCommon_Hint_RuntimeConstraint& operator=(const RelCommon_Hint_RuntimeConstraint& from) {
    CopyFrom(from);
    return *this;
  }
  inline RelCommon_Hint_RuntimeConstraint& operator=(RelCommon_Hint_RuntimeConstraint&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const RelCommon_Hint_RuntimeConstraint& default_instance() {
    return *internal_default_instance();
  }
  static inline const RelCommon_Hint_RuntimeConstraint* internal_default_instance() {
    return reinterpret_cast<const RelCommon_Hint_RuntimeConstraint*>(
               &_RelCommon_Hint_RuntimeConstraint_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    3;

  friend void swap(RelCommon_Hint_RuntimeConstraint& a, RelCommon_Hint_RuntimeConstraint& b) {
    a.Swap(&b);
  }
  inline void Swap(RelCommon_Hint_RuntimeConstraint* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(RelCommon_Hint_RuntimeConstraint* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  RelCommon_Hint_RuntimeConstraint* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<RelCommon_Hint_RuntimeConstraint>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const RelCommon_Hint_RuntimeConstraint& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const RelCommon_Hint_RuntimeConstraint& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(RelCommon_Hint_RuntimeConstraint* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.RelCommon.Hint.RuntimeConstraint";
  }
  protected:
  explicit RelCommon_Hint_RuntimeConstraint(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kAdvancedExtensionFieldNumber = 10,
  };
  // .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
  bool has_advanced_extension() const;
  private:
  bool _internal_has_advanced_extension() const;
  public:
  void clear_advanced_extension();
  const ::substrait::extensions::AdvancedExtension& advanced_extension() const;
  PROTOBUF_NODISCARD ::substrait::extensions::AdvancedExtension* release_advanced_extension();
  ::substrait::extensions::AdvancedExtension* mutable_advanced_extension();
  void set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension);
  private:
  const ::substrait::extensions::AdvancedExtension& _internal_advanced_extension() const;
  ::substrait::extensions::AdvancedExtension* _internal_mutable_advanced_extension();
  public:
  void unsafe_arena_set_allocated_advanced_extension(
      ::substrait::extensions::AdvancedExtension* advanced_extension);
  ::substrait::extensions::AdvancedExtension* unsafe_arena_release_advanced_extension();

  // @@protoc_insertion_point(class_scope:substrait.RelCommon.Hint.RuntimeConstraint)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::substrait::extensions::AdvancedExtension* advanced_extension_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class RelCommon_Hint final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.RelCommon.Hint) */ {
 public:
  inline RelCommon_Hint() : RelCommon_Hint(nullptr) {}
  ~RelCommon_Hint() override;
  explicit constexpr RelCommon_Hint(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  RelCommon_Hint(const RelCommon_Hint& from);
  RelCommon_Hint(RelCommon_Hint&& from) noexcept
    : RelCommon_Hint() {
    *this = ::std::move(from);
  }

  inline RelCommon_Hint& operator=(const RelCommon_Hint& from) {
    CopyFrom(from);
    return *this;
  }
  inline RelCommon_Hint& operator=(RelCommon_Hint&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const RelCommon_Hint& default_instance() {
    return *internal_default_instance();
  }
  static inline const RelCommon_Hint* internal_default_instance() {
    return reinterpret_cast<const RelCommon_Hint*>(
               &_RelCommon_Hint_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    4;

  friend void swap(RelCommon_Hint& a, RelCommon_Hint& b) {
    a.Swap(&b);
  }
  inline void Swap(RelCommon_Hint* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(RelCommon_Hint* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  RelCommon_Hint* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<RelCommon_Hint>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const RelCommon_Hint& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const RelCommon_Hint& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(RelCommon_Hint* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.RelCommon.Hint";
  }
  protected:
  explicit RelCommon_Hint(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef RelCommon_Hint_Stats Stats;
  typedef RelCommon_Hint_RuntimeConstraint RuntimeConstraint;

  // accessors -------------------------------------------------------

  enum : int {
    kStatsFieldNumber = 1,
    kConstraintFieldNumber = 2,
    kAdvancedExtensionFieldNumber = 10,
  };
  // .substrait.RelCommon.Hint.Stats stats = 1 [json_name = "stats"];
  bool has_stats() const;
  private:
  bool _internal_has_stats() const;
  public:
  void clear_stats();
  const ::substrait::RelCommon_Hint_Stats& stats() const;
  PROTOBUF_NODISCARD ::substrait::RelCommon_Hint_Stats* release_stats();
  ::substrait::RelCommon_Hint_Stats* mutable_stats();
  void set_allocated_stats(::substrait::RelCommon_Hint_Stats* stats);
  private:
  const ::substrait::RelCommon_Hint_Stats& _internal_stats() const;
  ::substrait::RelCommon_Hint_Stats* _internal_mutable_stats();
  public:
  void unsafe_arena_set_allocated_stats(
      ::substrait::RelCommon_Hint_Stats* stats);
  ::substrait::RelCommon_Hint_Stats* unsafe_arena_release_stats();

  // .substrait.RelCommon.Hint.RuntimeConstraint constraint = 2 [json_name = "constraint"];
  bool has_constraint() const;
  private:
  bool _internal_has_constraint() const;
  public:
  void clear_constraint();
  const ::substrait::RelCommon_Hint_RuntimeConstraint& constraint() const;
  PROTOBUF_NODISCARD ::substrait::RelCommon_Hint_RuntimeConstraint* release_constraint();
  ::substrait::RelCommon_Hint_RuntimeConstraint* mutable_constraint();
  void set_allocated_constraint(::substrait::RelCommon_Hint_RuntimeConstraint* constraint);
  private:
  const ::substrait::RelCommon_Hint_RuntimeConstraint& _internal_constraint() const;
  ::substrait::RelCommon_Hint_RuntimeConstraint* _internal_mutable_constraint();
  public:
  void unsafe_arena_set_allocated_constraint(
      ::substrait::RelCommon_Hint_RuntimeConstraint* constraint);
  ::substrait::RelCommon_Hint_RuntimeConstraint* unsafe_arena_release_constraint();

  // .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
  bool has_advanced_extension() const;
  private:
  bool _internal_has_advanced_extension() const;
  public:
  void clear_advanced_extension();
  const ::substrait::extensions::AdvancedExtension& advanced_extension() const;
  PROTOBUF_NODISCARD ::substrait::extensions::AdvancedExtension* release_advanced_extension();
  ::substrait::extensions::AdvancedExtension* mutable_advanced_extension();
  void set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension);
  private:
  const ::substrait::extensions::AdvancedExtension& _internal_advanced_extension() const;
  ::substrait::extensions::AdvancedExtension* _internal_mutable_advanced_extension();
  public:
  void unsafe_arena_set_allocated_advanced_extension(
      ::substrait::extensions::AdvancedExtension* advanced_extension);
  ::substrait::extensions::AdvancedExtension* unsafe_arena_release_advanced_extension();

  // @@protoc_insertion_point(class_scope:substrait.RelCommon.Hint)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::substrait::RelCommon_Hint_Stats* stats_;
  ::substrait::RelCommon_Hint_RuntimeConstraint* constraint_;
  ::substrait::extensions::AdvancedExtension* advanced_extension_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class RelCommon final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.RelCommon) */ {
 public:
  inline RelCommon() : RelCommon(nullptr) {}
  ~RelCommon() override;
  explicit constexpr RelCommon(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  RelCommon(const RelCommon& from);
  RelCommon(RelCommon&& from) noexcept
    : RelCommon() {
    *this = ::std::move(from);
  }

  inline RelCommon& operator=(const RelCommon& from) {
    CopyFrom(from);
    return *this;
  }
  inline RelCommon& operator=(RelCommon&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const RelCommon& default_instance() {
    return *internal_default_instance();
  }
  enum EmitKindCase {
    kDirect = 1,
    kEmit = 2,
    EMIT_KIND_NOT_SET = 0,
  };

  static inline const RelCommon* internal_default_instance() {
    return reinterpret_cast<const RelCommon*>(
               &_RelCommon_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    5;

  friend void swap(RelCommon& a, RelCommon& b) {
    a.Swap(&b);
  }
  inline void Swap(RelCommon* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(RelCommon* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  RelCommon* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<RelCommon>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const RelCommon& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const RelCommon& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(RelCommon* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.RelCommon";
  }
  protected:
  explicit RelCommon(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef RelCommon_Direct Direct;
  typedef RelCommon_Emit Emit;
  typedef RelCommon_Hint Hint;

  // accessors -------------------------------------------------------

  enum : int {
    kHintFieldNumber = 3,
    kAdvancedExtensionFieldNumber = 4,
    kDirectFieldNumber = 1,
    kEmitFieldNumber = 2,
  };
  // .substrait.RelCommon.Hint hint = 3 [json_name = "hint"];
  bool has_hint() const;
  private:
  bool _internal_has_hint() const;
  public:
  void clear_hint();
  const ::substrait::RelCommon_Hint& hint() const;
  PROTOBUF_NODISCARD ::substrait::RelCommon_Hint* release_hint();
  ::substrait::RelCommon_Hint* mutable_hint();
  void set_allocated_hint(::substrait::RelCommon_Hint* hint);
  private:
  const ::substrait::RelCommon_Hint& _internal_hint() const;
  ::substrait::RelCommon_Hint* _internal_mutable_hint();
  public:
  void unsafe_arena_set_allocated_hint(
      ::substrait::RelCommon_Hint* hint);
  ::substrait::RelCommon_Hint* unsafe_arena_release_hint();

  // .substrait.extensions.AdvancedExtension advanced_extension = 4 [json_name = "advancedExtension"];
  bool has_advanced_extension() const;
  private:
  bool _internal_has_advanced_extension() const;
  public:
  void clear_advanced_extension();
  const ::substrait::extensions::AdvancedExtension& advanced_extension() const;
  PROTOBUF_NODISCARD ::substrait::extensions::AdvancedExtension* release_advanced_extension();
  ::substrait::extensions::AdvancedExtension* mutable_advanced_extension();
  void set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension);
  private:
  const ::substrait::extensions::AdvancedExtension& _internal_advanced_extension() const;
  ::substrait::extensions::AdvancedExtension* _internal_mutable_advanced_extension();
  public:
  void unsafe_arena_set_allocated_advanced_extension(
      ::substrait::extensions::AdvancedExtension* advanced_extension);
  ::substrait::extensions::AdvancedExtension* unsafe_arena_release_advanced_extension();

  // .substrait.RelCommon.Direct direct = 1 [json_name = "direct"];
  bool has_direct() const;
  private:
  bool _internal_has_direct() const;
  public:
  void clear_direct();
  const ::substrait::RelCommon_Direct& direct() const;
  PROTOBUF_NODISCARD ::substrait::RelCommon_Direct* release_direct();
  ::substrait::RelCommon_Direct* mutable_direct();
  void set_allocated_direct(::substrait::RelCommon_Direct* direct);
  private:
  const ::substrait::RelCommon_Direct& _internal_direct() const;
  ::substrait::RelCommon_Direct* _internal_mutable_direct();
  public:
  void unsafe_arena_set_allocated_direct(
      ::substrait::RelCommon_Direct* direct);
  ::substrait::RelCommon_Direct* unsafe_arena_release_direct();

  // .substrait.RelCommon.Emit emit = 2 [json_name = "emit"];
  bool has_emit() const;
  private:
  bool _internal_has_emit() const;
  public:
  void clear_emit();
  const ::substrait::RelCommon_Emit& emit() const;
  PROTOBUF_NODISCARD ::substrait::RelCommon_Emit* release_emit();
  ::substrait::RelCommon_Emit* mutable_emit();
  void set_allocated_emit(::substrait::RelCommon_Emit* emit);
  private:
  const ::substrait::RelCommon_Emit& _internal_emit() const;
  ::substrait::RelCommon_Emit* _internal_mutable_emit();
  public:
  void unsafe_arena_set_allocated_emit(
      ::substrait::RelCommon_Emit* emit);
  ::substrait::RelCommon_Emit* unsafe_arena_release_emit();

  void clear_emit_kind();
  EmitKindCase emit_kind_case() const;
  // @@protoc_insertion_point(class_scope:substrait.RelCommon)
 private:
  class _Internal;
  void set_has_direct();
  void set_has_emit();

  inline bool has_emit_kind() const;
  inline void clear_has_emit_kind();

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::substrait::RelCommon_Hint* hint_;
  ::substrait::extensions::AdvancedExtension* advanced_extension_;
  union EmitKindUnion {
    constexpr EmitKindUnion() : _constinit_{} {}
      ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized _constinit_;
    ::substrait::RelCommon_Direct* direct_;
    ::substrait::RelCommon_Emit* emit_;
  } emit_kind_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  uint32_t _oneof_case_[1];

  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class ReadRel_NamedTable final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.ReadRel.NamedTable) */ {
 public:
  inline ReadRel_NamedTable() : ReadRel_NamedTable(nullptr) {}
  ~ReadRel_NamedTable() override;
  explicit constexpr ReadRel_NamedTable(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  ReadRel_NamedTable(const ReadRel_NamedTable& from);
  ReadRel_NamedTable(ReadRel_NamedTable&& from) noexcept
    : ReadRel_NamedTable() {
    *this = ::std::move(from);
  }

  inline ReadRel_NamedTable& operator=(const ReadRel_NamedTable& from) {
    CopyFrom(from);
    return *this;
  }
  inline ReadRel_NamedTable& operator=(ReadRel_NamedTable&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const ReadRel_NamedTable& default_instance() {
    return *internal_default_instance();
  }
  static inline const ReadRel_NamedTable* internal_default_instance() {
    return reinterpret_cast<const ReadRel_NamedTable*>(
               &_ReadRel_NamedTable_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    6;

  friend void swap(ReadRel_NamedTable& a, ReadRel_NamedTable& b) {
    a.Swap(&b);
  }
  inline void Swap(ReadRel_NamedTable* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ReadRel_NamedTable* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  ReadRel_NamedTable* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<ReadRel_NamedTable>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const ReadRel_NamedTable& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const ReadRel_NamedTable& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(ReadRel_NamedTable* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.ReadRel.NamedTable";
  }
  protected:
  explicit ReadRel_NamedTable(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kNamesFieldNumber = 1,
    kAdvancedExtensionFieldNumber = 10,
  };
  // repeated string names = 1 [json_name = "names"];
  int names_size() const;
  private:
  int _internal_names_size() const;
  public:
  void clear_names();
  const std::string& names(int index) const;
  std::string* mutable_names(int index);
  void set_names(int index, const std::string& value);
  void set_names(int index, std::string&& value);
  void set_names(int index, const char* value);
  void set_names(int index, const char* value, size_t size);
  std::string* add_names();
  void add_names(const std::string& value);
  void add_names(std::string&& value);
  void add_names(const char* value);
  void add_names(const char* value, size_t size);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& names() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_names();
  private:
  const std::string& _internal_names(int index) const;
  std::string* _internal_add_names();
  public:

  // .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
  bool has_advanced_extension() const;
  private:
  bool _internal_has_advanced_extension() const;
  public:
  void clear_advanced_extension();
  const ::substrait::extensions::AdvancedExtension& advanced_extension() const;
  PROTOBUF_NODISCARD ::substrait::extensions::AdvancedExtension* release_advanced_extension();
  ::substrait::extensions::AdvancedExtension* mutable_advanced_extension();
  void set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension);
  private:
  const ::substrait::extensions::AdvancedExtension& _internal_advanced_extension() const;
  ::substrait::extensions::AdvancedExtension* _internal_mutable_advanced_extension();
  public:
  void unsafe_arena_set_allocated_advanced_extension(
      ::substrait::extensions::AdvancedExtension* advanced_extension);
  ::substrait::extensions::AdvancedExtension* unsafe_arena_release_advanced_extension();

  // @@protoc_insertion_point(class_scope:substrait.ReadRel.NamedTable)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> names_;
  ::substrait::extensions::AdvancedExtension* advanced_extension_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class ReadRel_VirtualTable final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.ReadRel.VirtualTable) */ {
 public:
  inline ReadRel_VirtualTable() : ReadRel_VirtualTable(nullptr) {}
  ~ReadRel_VirtualTable() override;
  explicit constexpr ReadRel_VirtualTable(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  ReadRel_VirtualTable(const ReadRel_VirtualTable& from);
  ReadRel_VirtualTable(ReadRel_VirtualTable&& from) noexcept
    : ReadRel_VirtualTable() {
    *this = ::std::move(from);
  }

  inline ReadRel_VirtualTable& operator=(const ReadRel_VirtualTable& from) {
    CopyFrom(from);
    return *this;
  }
  inline ReadRel_VirtualTable& operator=(ReadRel_VirtualTable&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const ReadRel_VirtualTable& default_instance() {
    return *internal_default_instance();
  }
  static inline const ReadRel_VirtualTable* internal_default_instance() {
    return reinterpret_cast<const ReadRel_VirtualTable*>(
               &_ReadRel_VirtualTable_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    7;

  friend void swap(ReadRel_VirtualTable& a, ReadRel_VirtualTable& b) {
    a.Swap(&b);
  }
  inline void Swap(ReadRel_VirtualTable* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ReadRel_VirtualTable* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  ReadRel_VirtualTable* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<ReadRel_VirtualTable>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const ReadRel_VirtualTable& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const ReadRel_VirtualTable& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(ReadRel_VirtualTable* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.ReadRel.VirtualTable";
  }
  protected:
  explicit ReadRel_VirtualTable(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kValuesFieldNumber = 1,
  };
  // repeated .substrait.Expression.Literal.Struct values = 1 [json_name = "values"];
  int values_size() const;
  private:
  int _internal_values_size() const;
  public:
  void clear_values();
  ::substrait::Expression_Literal_Struct* mutable_values(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_Literal_Struct >*
      mutable_values();
  private:
  const ::substrait::Expression_Literal_Struct& _internal_values(int index) const;
  ::substrait::Expression_Literal_Struct* _internal_add_values();
  public:
  const ::substrait::Expression_Literal_Struct& values(int index) const;
  ::substrait::Expression_Literal_Struct* add_values();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_Literal_Struct >&
      values() const;

  // @@protoc_insertion_point(class_scope:substrait.ReadRel.VirtualTable)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_Literal_Struct > values_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class ReadRel_ExtensionTable final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.ReadRel.ExtensionTable) */ {
 public:
  inline ReadRel_ExtensionTable() : ReadRel_ExtensionTable(nullptr) {}
  ~ReadRel_ExtensionTable() override;
  explicit constexpr ReadRel_ExtensionTable(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  ReadRel_ExtensionTable(const ReadRel_ExtensionTable& from);
  ReadRel_ExtensionTable(ReadRel_ExtensionTable&& from) noexcept
    : ReadRel_ExtensionTable() {
    *this = ::std::move(from);
  }

  inline ReadRel_ExtensionTable& operator=(const ReadRel_ExtensionTable& from) {
    CopyFrom(from);
    return *this;
  }
  inline ReadRel_ExtensionTable& operator=(ReadRel_ExtensionTable&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const ReadRel_ExtensionTable& default_instance() {
    return *internal_default_instance();
  }
  static inline const ReadRel_ExtensionTable* internal_default_instance() {
    return reinterpret_cast<const ReadRel_ExtensionTable*>(
               &_ReadRel_ExtensionTable_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    8;

  friend void swap(ReadRel_ExtensionTable& a, ReadRel_ExtensionTable& b) {
    a.Swap(&b);
  }
  inline void Swap(ReadRel_ExtensionTable* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ReadRel_ExtensionTable* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  ReadRel_ExtensionTable* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<ReadRel_ExtensionTable>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const ReadRel_ExtensionTable& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const ReadRel_ExtensionTable& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(ReadRel_ExtensionTable* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.ReadRel.ExtensionTable";
  }
  protected:
  explicit ReadRel_ExtensionTable(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kDetailFieldNumber = 1,
  };
  // .google.protobuf.Any detail = 1 [json_name = "detail"];
  bool has_detail() const;
  private:
  bool _internal_has_detail() const;
  public:
  void clear_detail();
  const ::PROTOBUF_NAMESPACE_ID::Any& detail() const;
  PROTOBUF_NODISCARD ::PROTOBUF_NAMESPACE_ID::Any* release_detail();
  ::PROTOBUF_NAMESPACE_ID::Any* mutable_detail();
  void set_allocated_detail(::PROTOBUF_NAMESPACE_ID::Any* detail);
  private:
  const ::PROTOBUF_NAMESPACE_ID::Any& _internal_detail() const;
  ::PROTOBUF_NAMESPACE_ID::Any* _internal_mutable_detail();
  public:
  void unsafe_arena_set_allocated_detail(
      ::PROTOBUF_NAMESPACE_ID::Any* detail);
  ::PROTOBUF_NAMESPACE_ID::Any* unsafe_arena_release_detail();

  // @@protoc_insertion_point(class_scope:substrait.ReadRel.ExtensionTable)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::Any* detail_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class ReadRel_LocalFiles_FileOrFiles final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.ReadRel.LocalFiles.FileOrFiles) */ {
 public:
  inline ReadRel_LocalFiles_FileOrFiles() : ReadRel_LocalFiles_FileOrFiles(nullptr) {}
  ~ReadRel_LocalFiles_FileOrFiles() override;
  explicit constexpr ReadRel_LocalFiles_FileOrFiles(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  ReadRel_LocalFiles_FileOrFiles(const ReadRel_LocalFiles_FileOrFiles& from);
  ReadRel_LocalFiles_FileOrFiles(ReadRel_LocalFiles_FileOrFiles&& from) noexcept
    : ReadRel_LocalFiles_FileOrFiles() {
    *this = ::std::move(from);
  }

  inline ReadRel_LocalFiles_FileOrFiles& operator=(const ReadRel_LocalFiles_FileOrFiles& from) {
    CopyFrom(from);
    return *this;
  }
  inline ReadRel_LocalFiles_FileOrFiles& operator=(ReadRel_LocalFiles_FileOrFiles&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const ReadRel_LocalFiles_FileOrFiles& default_instance() {
    return *internal_default_instance();
  }
  enum PathTypeCase {
    kUriPath = 1,
    kUriPathGlob = 2,
    kUriFile = 3,
    kUriFolder = 4,
    PATH_TYPE_NOT_SET = 0,
  };

  static inline const ReadRel_LocalFiles_FileOrFiles* internal_default_instance() {
    return reinterpret_cast<const ReadRel_LocalFiles_FileOrFiles*>(
               &_ReadRel_LocalFiles_FileOrFiles_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    9;

  friend void swap(ReadRel_LocalFiles_FileOrFiles& a, ReadRel_LocalFiles_FileOrFiles& b) {
    a.Swap(&b);
  }
  inline void Swap(ReadRel_LocalFiles_FileOrFiles* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ReadRel_LocalFiles_FileOrFiles* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  ReadRel_LocalFiles_FileOrFiles* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<ReadRel_LocalFiles_FileOrFiles>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const ReadRel_LocalFiles_FileOrFiles& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const ReadRel_LocalFiles_FileOrFiles& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(ReadRel_LocalFiles_FileOrFiles* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.ReadRel.LocalFiles.FileOrFiles";
  }
  protected:
  explicit ReadRel_LocalFiles_FileOrFiles(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef ReadRel_LocalFiles_FileOrFiles_FileFormat FileFormat;
  static constexpr FileFormat FILE_FORMAT_UNSPECIFIED =
    ReadRel_LocalFiles_FileOrFiles_FileFormat_FILE_FORMAT_UNSPECIFIED;
  static constexpr FileFormat FILE_FORMAT_PARQUET =
    ReadRel_LocalFiles_FileOrFiles_FileFormat_FILE_FORMAT_PARQUET;
  static inline bool FileFormat_IsValid(int value) {
    return ReadRel_LocalFiles_FileOrFiles_FileFormat_IsValid(value);
  }
  static constexpr FileFormat FileFormat_MIN =
    ReadRel_LocalFiles_FileOrFiles_FileFormat_FileFormat_MIN;
  static constexpr FileFormat FileFormat_MAX =
    ReadRel_LocalFiles_FileOrFiles_FileFormat_FileFormat_MAX;
  static constexpr int FileFormat_ARRAYSIZE =
    ReadRel_LocalFiles_FileOrFiles_FileFormat_FileFormat_ARRAYSIZE;
  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
  FileFormat_descriptor() {
    return ReadRel_LocalFiles_FileOrFiles_FileFormat_descriptor();
  }
  template<typename T>
  static inline const std::string& FileFormat_Name(T enum_t_value) {
    static_assert(::std::is_same<T, FileFormat>::value ||
      ::std::is_integral<T>::value,
      "Incorrect type passed to function FileFormat_Name.");
    return ReadRel_LocalFiles_FileOrFiles_FileFormat_Name(enum_t_value);
  }
  static inline bool FileFormat_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
      FileFormat* value) {
    return ReadRel_LocalFiles_FileOrFiles_FileFormat_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  enum : int {
    kFormatFieldNumber = 5,
    kPartitionIndexFieldNumber = 6,
    kStartFieldNumber = 7,
    kLengthFieldNumber = 8,
    kUriPathFieldNumber = 1,
    kUriPathGlobFieldNumber = 2,
    kUriFileFieldNumber = 3,
    kUriFolderFieldNumber = 4,
  };
  // .substrait.ReadRel.LocalFiles.FileOrFiles.FileFormat format = 5 [json_name = "format"];
  void clear_format();
  ::substrait::ReadRel_LocalFiles_FileOrFiles_FileFormat format() const;
  void set_format(::substrait::ReadRel_LocalFiles_FileOrFiles_FileFormat value);
  private:
  ::substrait::ReadRel_LocalFiles_FileOrFiles_FileFormat _internal_format() const;
  void _internal_set_format(::substrait::ReadRel_LocalFiles_FileOrFiles_FileFormat value);
  public:

  // uint64 partition_index = 6 [json_name = "partitionIndex"];
  void clear_partition_index();
  uint64_t partition_index() const;
  void set_partition_index(uint64_t value);
  private:
  uint64_t _internal_partition_index() const;
  void _internal_set_partition_index(uint64_t value);
  public:

  // uint64 start = 7 [json_name = "start"];
  void clear_start();
  uint64_t start() const;
  void set_start(uint64_t value);
  private:
  uint64_t _internal_start() const;
  void _internal_set_start(uint64_t value);
  public:

  // uint64 length = 8 [json_name = "length"];
  void clear_length();
  uint64_t length() const;
  void set_length(uint64_t value);
  private:
  uint64_t _internal_length() const;
  void _internal_set_length(uint64_t value);
  public:

  // string uri_path = 1 [json_name = "uriPath"];
  bool has_uri_path() const;
  private:
  bool _internal_has_uri_path() const;
  public:
  void clear_uri_path();
  const std::string& uri_path() const;
  template <typename ArgT0 = const std::string&, typename... ArgT>
  void set_uri_path(ArgT0&& arg0, ArgT... args);
  std::string* mutable_uri_path();
  PROTOBUF_NODISCARD std::string* release_uri_path();
  void set_allocated_uri_path(std::string* uri_path);
  private:
  const std::string& _internal_uri_path() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_uri_path(const std::string& value);
  std::string* _internal_mutable_uri_path();
  public:

  // string uri_path_glob = 2 [json_name = "uriPathGlob"];
  bool has_uri_path_glob() const;
  private:
  bool _internal_has_uri_path_glob() const;
  public:
  void clear_uri_path_glob();
  const std::string& uri_path_glob() const;
  template <typename ArgT0 = const std::string&, typename... ArgT>
  void set_uri_path_glob(ArgT0&& arg0, ArgT... args);
  std::string* mutable_uri_path_glob();
  PROTOBUF_NODISCARD std::string* release_uri_path_glob();
  void set_allocated_uri_path_glob(std::string* uri_path_glob);
  private:
  const std::string& _internal_uri_path_glob() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_uri_path_glob(const std::string& value);
  std::string* _internal_mutable_uri_path_glob();
  public:

  // string uri_file = 3 [json_name = "uriFile"];
  bool has_uri_file() const;
  private:
  bool _internal_has_uri_file() const;
  public:
  void clear_uri_file();
  const std::string& uri_file() const;
  template <typename ArgT0 = const std::string&, typename... ArgT>
  void set_uri_file(ArgT0&& arg0, ArgT... args);
  std::string* mutable_uri_file();
  PROTOBUF_NODISCARD std::string* release_uri_file();
  void set_allocated_uri_file(std::string* uri_file);
  private:
  const std::string& _internal_uri_file() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_uri_file(const std::string& value);
  std::string* _internal_mutable_uri_file();
  public:

  // string uri_folder = 4 [json_name = "uriFolder"];
  bool has_uri_folder() const;
  private:
  bool _internal_has_uri_folder() const;
  public:
  void clear_uri_folder();
  const std::string& uri_folder() const;
  template <typename ArgT0 = const std::string&, typename... ArgT>
  void set_uri_folder(ArgT0&& arg0, ArgT... args);
  std::string* mutable_uri_folder();
  PROTOBUF_NODISCARD std::string* release_uri_folder();
  void set_allocated_uri_folder(std::string* uri_folder);
  private:
  const std::string& _internal_uri_folder() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_uri_folder(const std::string& value);
  std::string* _internal_mutable_uri_folder();
  public:

  void clear_path_type();
  PathTypeCase path_type_case() const;
  // @@protoc_insertion_point(class_scope:substrait.ReadRel.LocalFiles.FileOrFiles)
 private:
  class _Internal;
  void set_has_uri_path();
  void set_has_uri_path_glob();
  void set_has_uri_file();
  void set_has_uri_folder();

  inline bool has_path_type() const;
  inline void clear_has_path_type();

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  int format_;
  uint64_t partition_index_;
  uint64_t start_;
  uint64_t length_;
  union PathTypeUnion {
    constexpr PathTypeUnion() : _constinit_{} {}
      ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized _constinit_;
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr uri_path_;
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr uri_path_glob_;
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr uri_file_;
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr uri_folder_;
  } path_type_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  uint32_t _oneof_case_[1];

  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class ReadRel_LocalFiles final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.ReadRel.LocalFiles) */ {
 public:
  inline ReadRel_LocalFiles() : ReadRel_LocalFiles(nullptr) {}
  ~ReadRel_LocalFiles() override;
  explicit constexpr ReadRel_LocalFiles(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  ReadRel_LocalFiles(const ReadRel_LocalFiles& from);
  ReadRel_LocalFiles(ReadRel_LocalFiles&& from) noexcept
    : ReadRel_LocalFiles() {
    *this = ::std::move(from);
  }

  inline ReadRel_LocalFiles& operator=(const ReadRel_LocalFiles& from) {
    CopyFrom(from);
    return *this;
  }
  inline ReadRel_LocalFiles& operator=(ReadRel_LocalFiles&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const ReadRel_LocalFiles& default_instance() {
    return *internal_default_instance();
  }
  static inline const ReadRel_LocalFiles* internal_default_instance() {
    return reinterpret_cast<const ReadRel_LocalFiles*>(
               &_ReadRel_LocalFiles_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    10;

  friend void swap(ReadRel_LocalFiles& a, ReadRel_LocalFiles& b) {
    a.Swap(&b);
  }
  inline void Swap(ReadRel_LocalFiles* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ReadRel_LocalFiles* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  ReadRel_LocalFiles* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<ReadRel_LocalFiles>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const ReadRel_LocalFiles& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const ReadRel_LocalFiles& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(ReadRel_LocalFiles* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.ReadRel.LocalFiles";
  }
  protected:
  explicit ReadRel_LocalFiles(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef ReadRel_LocalFiles_FileOrFiles FileOrFiles;

  // accessors -------------------------------------------------------

  enum : int {
    kItemsFieldNumber = 1,
    kAdvancedExtensionFieldNumber = 10,
  };
  // repeated .substrait.ReadRel.LocalFiles.FileOrFiles items = 1 [json_name = "items"];
  int items_size() const;
  private:
  int _internal_items_size() const;
  public:
  void clear_items();
  ::substrait::ReadRel_LocalFiles_FileOrFiles* mutable_items(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::ReadRel_LocalFiles_FileOrFiles >*
      mutable_items();
  private:
  const ::substrait::ReadRel_LocalFiles_FileOrFiles& _internal_items(int index) const;
  ::substrait::ReadRel_LocalFiles_FileOrFiles* _internal_add_items();
  public:
  const ::substrait::ReadRel_LocalFiles_FileOrFiles& items(int index) const;
  ::substrait::ReadRel_LocalFiles_FileOrFiles* add_items();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::ReadRel_LocalFiles_FileOrFiles >&
      items() const;

  // .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
  bool has_advanced_extension() const;
  private:
  bool _internal_has_advanced_extension() const;
  public:
  void clear_advanced_extension();
  const ::substrait::extensions::AdvancedExtension& advanced_extension() const;
  PROTOBUF_NODISCARD ::substrait::extensions::AdvancedExtension* release_advanced_extension();
  ::substrait::extensions::AdvancedExtension* mutable_advanced_extension();
  void set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension);
  private:
  const ::substrait::extensions::AdvancedExtension& _internal_advanced_extension() const;
  ::substrait::extensions::AdvancedExtension* _internal_mutable_advanced_extension();
  public:
  void unsafe_arena_set_allocated_advanced_extension(
      ::substrait::extensions::AdvancedExtension* advanced_extension);
  ::substrait::extensions::AdvancedExtension* unsafe_arena_release_advanced_extension();

  // @@protoc_insertion_point(class_scope:substrait.ReadRel.LocalFiles)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::ReadRel_LocalFiles_FileOrFiles > items_;
  ::substrait::extensions::AdvancedExtension* advanced_extension_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class ReadRel final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.ReadRel) */ {
 public:
  inline ReadRel() : ReadRel(nullptr) {}
  ~ReadRel() override;
  explicit constexpr ReadRel(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  ReadRel(const ReadRel& from);
  ReadRel(ReadRel&& from) noexcept
    : ReadRel() {
    *this = ::std::move(from);
  }

  inline ReadRel& operator=(const ReadRel& from) {
    CopyFrom(from);
    return *this;
  }
  inline ReadRel& operator=(ReadRel&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const ReadRel& default_instance() {
    return *internal_default_instance();
  }
  enum ReadTypeCase {
    kVirtualTable = 5,
    kLocalFiles = 6,
    kNamedTable = 7,
    kExtensionTable = 8,
    READ_TYPE_NOT_SET = 0,
  };

  static inline const ReadRel* internal_default_instance() {
    return reinterpret_cast<const ReadRel*>(
               &_ReadRel_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    11;

  friend void swap(ReadRel& a, ReadRel& b) {
    a.Swap(&b);
  }
  inline void Swap(ReadRel* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ReadRel* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  ReadRel* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<ReadRel>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const ReadRel& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const ReadRel& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(ReadRel* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.ReadRel";
  }
  protected:
  explicit ReadRel(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef ReadRel_NamedTable NamedTable;
  typedef ReadRel_VirtualTable VirtualTable;
  typedef ReadRel_ExtensionTable ExtensionTable;
  typedef ReadRel_LocalFiles LocalFiles;

  // accessors -------------------------------------------------------

  enum : int {
    kCommonFieldNumber = 1,
    kBaseSchemaFieldNumber = 2,
    kFilterFieldNumber = 3,
    kProjectionFieldNumber = 4,
    kAdvancedExtensionFieldNumber = 10,
    kVirtualTableFieldNumber = 5,
    kLocalFilesFieldNumber = 6,
    kNamedTableFieldNumber = 7,
    kExtensionTableFieldNumber = 8,
  };
  // .substrait.RelCommon common = 1 [json_name = "common"];
  bool has_common() const;
  private:
  bool _internal_has_common() const;
  public:
  void clear_common();
  const ::substrait::RelCommon& common() const;
  PROTOBUF_NODISCARD ::substrait::RelCommon* release_common();
  ::substrait::RelCommon* mutable_common();
  void set_allocated_common(::substrait::RelCommon* common);
  private:
  const ::substrait::RelCommon& _internal_common() const;
  ::substrait::RelCommon* _internal_mutable_common();
  public:
  void unsafe_arena_set_allocated_common(
      ::substrait::RelCommon* common);
  ::substrait::RelCommon* unsafe_arena_release_common();

  // .substrait.NamedStruct base_schema = 2 [json_name = "baseSchema"];
  bool has_base_schema() const;
  private:
  bool _internal_has_base_schema() const;
  public:
  void clear_base_schema();
  const ::substrait::NamedStruct& base_schema() const;
  PROTOBUF_NODISCARD ::substrait::NamedStruct* release_base_schema();
  ::substrait::NamedStruct* mutable_base_schema();
  void set_allocated_base_schema(::substrait::NamedStruct* base_schema);
  private:
  const ::substrait::NamedStruct& _internal_base_schema() const;
  ::substrait::NamedStruct* _internal_mutable_base_schema();
  public:
  void unsafe_arena_set_allocated_base_schema(
      ::substrait::NamedStruct* base_schema);
  ::substrait::NamedStruct* unsafe_arena_release_base_schema();

  // .substrait.Expression filter = 3 [json_name = "filter"];
  bool has_filter() const;
  private:
  bool _internal_has_filter() const;
  public:
  void clear_filter();
  const ::substrait::Expression& filter() const;
  PROTOBUF_NODISCARD ::substrait::Expression* release_filter();
  ::substrait::Expression* mutable_filter();
  void set_allocated_filter(::substrait::Expression* filter);
  private:
  const ::substrait::Expression& _internal_filter() const;
  ::substrait::Expression* _internal_mutable_filter();
  public:
  void unsafe_arena_set_allocated_filter(
      ::substrait::Expression* filter);
  ::substrait::Expression* unsafe_arena_release_filter();

  // .substrait.Expression.MaskExpression projection = 4 [json_name = "projection"];
  bool has_projection() const;
  private:
  bool _internal_has_projection() const;
  public:
  void clear_projection();
  const ::substrait::Expression_MaskExpression& projection() const;
  PROTOBUF_NODISCARD ::substrait::Expression_MaskExpression* release_projection();
  ::substrait::Expression_MaskExpression* mutable_projection();
  void set_allocated_projection(::substrait::Expression_MaskExpression* projection);
  private:
  const ::substrait::Expression_MaskExpression& _internal_projection() const;
  ::substrait::Expression_MaskExpression* _internal_mutable_projection();
  public:
  void unsafe_arena_set_allocated_projection(
      ::substrait::Expression_MaskExpression* projection);
  ::substrait::Expression_MaskExpression* unsafe_arena_release_projection();

  // .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
  bool has_advanced_extension() const;
  private:
  bool _internal_has_advanced_extension() const;
  public:
  void clear_advanced_extension();
  const ::substrait::extensions::AdvancedExtension& advanced_extension() const;
  PROTOBUF_NODISCARD ::substrait::extensions::AdvancedExtension* release_advanced_extension();
  ::substrait::extensions::AdvancedExtension* mutable_advanced_extension();
  void set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension);
  private:
  const ::substrait::extensions::AdvancedExtension& _internal_advanced_extension() const;
  ::substrait::extensions::AdvancedExtension* _internal_mutable_advanced_extension();
  public:
  void unsafe_arena_set_allocated_advanced_extension(
      ::substrait::extensions::AdvancedExtension* advanced_extension);
  ::substrait::extensions::AdvancedExtension* unsafe_arena_release_advanced_extension();

  // .substrait.ReadRel.VirtualTable virtual_table = 5 [json_name = "virtualTable"];
  bool has_virtual_table() const;
  private:
  bool _internal_has_virtual_table() const;
  public:
  void clear_virtual_table();
  const ::substrait::ReadRel_VirtualTable& virtual_table() const;
  PROTOBUF_NODISCARD ::substrait::ReadRel_VirtualTable* release_virtual_table();
  ::substrait::ReadRel_VirtualTable* mutable_virtual_table();
  void set_allocated_virtual_table(::substrait::ReadRel_VirtualTable* virtual_table);
  private:
  const ::substrait::ReadRel_VirtualTable& _internal_virtual_table() const;
  ::substrait::ReadRel_VirtualTable* _internal_mutable_virtual_table();
  public:
  void unsafe_arena_set_allocated_virtual_table(
      ::substrait::ReadRel_VirtualTable* virtual_table);
  ::substrait::ReadRel_VirtualTable* unsafe_arena_release_virtual_table();

  // .substrait.ReadRel.LocalFiles local_files = 6 [json_name = "localFiles"];
  bool has_local_files() const;
  private:
  bool _internal_has_local_files() const;
  public:
  void clear_local_files();
  const ::substrait::ReadRel_LocalFiles& local_files() const;
  PROTOBUF_NODISCARD ::substrait::ReadRel_LocalFiles* release_local_files();
  ::substrait::ReadRel_LocalFiles* mutable_local_files();
  void set_allocated_local_files(::substrait::ReadRel_LocalFiles* local_files);
  private:
  const ::substrait::ReadRel_LocalFiles& _internal_local_files() const;
  ::substrait::ReadRel_LocalFiles* _internal_mutable_local_files();
  public:
  void unsafe_arena_set_allocated_local_files(
      ::substrait::ReadRel_LocalFiles* local_files);
  ::substrait::ReadRel_LocalFiles* unsafe_arena_release_local_files();

  // .substrait.ReadRel.NamedTable named_table = 7 [json_name = "namedTable"];
  bool has_named_table() const;
  private:
  bool _internal_has_named_table() const;
  public:
  void clear_named_table();
  const ::substrait::ReadRel_NamedTable& named_table() const;
  PROTOBUF_NODISCARD ::substrait::ReadRel_NamedTable* release_named_table();
  ::substrait::ReadRel_NamedTable* mutable_named_table();
  void set_allocated_named_table(::substrait::ReadRel_NamedTable* named_table);
  private:
  const ::substrait::ReadRel_NamedTable& _internal_named_table() const;
  ::substrait::ReadRel_NamedTable* _internal_mutable_named_table();
  public:
  void unsafe_arena_set_allocated_named_table(
      ::substrait::ReadRel_NamedTable* named_table);
  ::substrait::ReadRel_NamedTable* unsafe_arena_release_named_table();

  // .substrait.ReadRel.ExtensionTable extension_table = 8 [json_name = "extensionTable"];
  bool has_extension_table() const;
  private:
  bool _internal_has_extension_table() const;
  public:
  void clear_extension_table();
  const ::substrait::ReadRel_ExtensionTable& extension_table() const;
  PROTOBUF_NODISCARD ::substrait::ReadRel_ExtensionTable* release_extension_table();
  ::substrait::ReadRel_ExtensionTable* mutable_extension_table();
  void set_allocated_extension_table(::substrait::ReadRel_ExtensionTable* extension_table);
  private:
  const ::substrait::ReadRel_ExtensionTable& _internal_extension_table() const;
  ::substrait::ReadRel_ExtensionTable* _internal_mutable_extension_table();
  public:
  void unsafe_arena_set_allocated_extension_table(
      ::substrait::ReadRel_ExtensionTable* extension_table);
  ::substrait::ReadRel_ExtensionTable* unsafe_arena_release_extension_table();

  void clear_read_type();
  ReadTypeCase read_type_case() const;
  // @@protoc_insertion_point(class_scope:substrait.ReadRel)
 private:
  class _Internal;
  void set_has_virtual_table();
  void set_has_local_files();
  void set_has_named_table();
  void set_has_extension_table();

  inline bool has_read_type() const;
  inline void clear_has_read_type();

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::substrait::RelCommon* common_;
  ::substrait::NamedStruct* base_schema_;
  ::substrait::Expression* filter_;
  ::substrait::Expression_MaskExpression* projection_;
  ::substrait::extensions::AdvancedExtension* advanced_extension_;
  union ReadTypeUnion {
    constexpr ReadTypeUnion() : _constinit_{} {}
      ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized _constinit_;
    ::substrait::ReadRel_VirtualTable* virtual_table_;
    ::substrait::ReadRel_LocalFiles* local_files_;
    ::substrait::ReadRel_NamedTable* named_table_;
    ::substrait::ReadRel_ExtensionTable* extension_table_;
  } read_type_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  uint32_t _oneof_case_[1];

  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class ProjectRel final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.ProjectRel) */ {
 public:
  inline ProjectRel() : ProjectRel(nullptr) {}
  ~ProjectRel() override;
  explicit constexpr ProjectRel(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  ProjectRel(const ProjectRel& from);
  ProjectRel(ProjectRel&& from) noexcept
    : ProjectRel() {
    *this = ::std::move(from);
  }

  inline ProjectRel& operator=(const ProjectRel& from) {
    CopyFrom(from);
    return *this;
  }
  inline ProjectRel& operator=(ProjectRel&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const ProjectRel& default_instance() {
    return *internal_default_instance();
  }
  static inline const ProjectRel* internal_default_instance() {
    return reinterpret_cast<const ProjectRel*>(
               &_ProjectRel_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    12;

  friend void swap(ProjectRel& a, ProjectRel& b) {
    a.Swap(&b);
  }
  inline void Swap(ProjectRel* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ProjectRel* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  ProjectRel* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<ProjectRel>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const ProjectRel& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const ProjectRel& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(ProjectRel* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.ProjectRel";
  }
  protected:
  explicit ProjectRel(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kExpressionsFieldNumber = 3,
    kCommonFieldNumber = 1,
    kInputFieldNumber = 2,
    kAdvancedExtensionFieldNumber = 10,
  };
  // repeated .substrait.Expression expressions = 3 [json_name = "expressions"];
  int expressions_size() const;
  private:
  int _internal_expressions_size() const;
  public:
  void clear_expressions();
  ::substrait::Expression* mutable_expressions(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >*
      mutable_expressions();
  private:
  const ::substrait::Expression& _internal_expressions(int index) const;
  ::substrait::Expression* _internal_add_expressions();
  public:
  const ::substrait::Expression& expressions(int index) const;
  ::substrait::Expression* add_expressions();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >&
      expressions() const;

  // .substrait.RelCommon common = 1 [json_name = "common"];
  bool has_common() const;
  private:
  bool _internal_has_common() const;
  public:
  void clear_common();
  const ::substrait::RelCommon& common() const;
  PROTOBUF_NODISCARD ::substrait::RelCommon* release_common();
  ::substrait::RelCommon* mutable_common();
  void set_allocated_common(::substrait::RelCommon* common);
  private:
  const ::substrait::RelCommon& _internal_common() const;
  ::substrait::RelCommon* _internal_mutable_common();
  public:
  void unsafe_arena_set_allocated_common(
      ::substrait::RelCommon* common);
  ::substrait::RelCommon* unsafe_arena_release_common();

  // .substrait.Rel input = 2 [json_name = "input"];
  bool has_input() const;
  private:
  bool _internal_has_input() const;
  public:
  void clear_input();
  const ::substrait::Rel& input() const;
  PROTOBUF_NODISCARD ::substrait::Rel* release_input();
  ::substrait::Rel* mutable_input();
  void set_allocated_input(::substrait::Rel* input);
  private:
  const ::substrait::Rel& _internal_input() const;
  ::substrait::Rel* _internal_mutable_input();
  public:
  void unsafe_arena_set_allocated_input(
      ::substrait::Rel* input);
  ::substrait::Rel* unsafe_arena_release_input();

  // .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
  bool has_advanced_extension() const;
  private:
  bool _internal_has_advanced_extension() const;
  public:
  void clear_advanced_extension();
  const ::substrait::extensions::AdvancedExtension& advanced_extension() const;
  PROTOBUF_NODISCARD ::substrait::extensions::AdvancedExtension* release_advanced_extension();
  ::substrait::extensions::AdvancedExtension* mutable_advanced_extension();
  void set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension);
  private:
  const ::substrait::extensions::AdvancedExtension& _internal_advanced_extension() const;
  ::substrait::extensions::AdvancedExtension* _internal_mutable_advanced_extension();
  public:
  void unsafe_arena_set_allocated_advanced_extension(
      ::substrait::extensions::AdvancedExtension* advanced_extension);
  ::substrait::extensions::AdvancedExtension* unsafe_arena_release_advanced_extension();

  // @@protoc_insertion_point(class_scope:substrait.ProjectRel)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression > expressions_;
  ::substrait::RelCommon* common_;
  ::substrait::Rel* input_;
  ::substrait::extensions::AdvancedExtension* advanced_extension_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class JoinRel final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.JoinRel) */ {
 public:
  inline JoinRel() : JoinRel(nullptr) {}
  ~JoinRel() override;
  explicit constexpr JoinRel(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  JoinRel(const JoinRel& from);
  JoinRel(JoinRel&& from) noexcept
    : JoinRel() {
    *this = ::std::move(from);
  }

  inline JoinRel& operator=(const JoinRel& from) {
    CopyFrom(from);
    return *this;
  }
  inline JoinRel& operator=(JoinRel&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const JoinRel& default_instance() {
    return *internal_default_instance();
  }
  static inline const JoinRel* internal_default_instance() {
    return reinterpret_cast<const JoinRel*>(
               &_JoinRel_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    13;

  friend void swap(JoinRel& a, JoinRel& b) {
    a.Swap(&b);
  }
  inline void Swap(JoinRel* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(JoinRel* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  JoinRel* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<JoinRel>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const JoinRel& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const JoinRel& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(JoinRel* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.JoinRel";
  }
  protected:
  explicit JoinRel(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef JoinRel_JoinType JoinType;
  static constexpr JoinType JOIN_TYPE_UNSPECIFIED =
    JoinRel_JoinType_JOIN_TYPE_UNSPECIFIED;
  static constexpr JoinType JOIN_TYPE_INNER =
    JoinRel_JoinType_JOIN_TYPE_INNER;
  static constexpr JoinType JOIN_TYPE_OUTER =
    JoinRel_JoinType_JOIN_TYPE_OUTER;
  static constexpr JoinType JOIN_TYPE_LEFT =
    JoinRel_JoinType_JOIN_TYPE_LEFT;
  static constexpr JoinType JOIN_TYPE_RIGHT =
    JoinRel_JoinType_JOIN_TYPE_RIGHT;
  static constexpr JoinType JOIN_TYPE_SEMI =
    JoinRel_JoinType_JOIN_TYPE_SEMI;
  static constexpr JoinType JOIN_TYPE_ANTI =
    JoinRel_JoinType_JOIN_TYPE_ANTI;
  static constexpr JoinType JOIN_TYPE_SINGLE =
    JoinRel_JoinType_JOIN_TYPE_SINGLE;
  static inline bool JoinType_IsValid(int value) {
    return JoinRel_JoinType_IsValid(value);
  }
  static constexpr JoinType JoinType_MIN =
    JoinRel_JoinType_JoinType_MIN;
  static constexpr JoinType JoinType_MAX =
    JoinRel_JoinType_JoinType_MAX;
  static constexpr int JoinType_ARRAYSIZE =
    JoinRel_JoinType_JoinType_ARRAYSIZE;
  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
  JoinType_descriptor() {
    return JoinRel_JoinType_descriptor();
  }
  template<typename T>
  static inline const std::string& JoinType_Name(T enum_t_value) {
    static_assert(::std::is_same<T, JoinType>::value ||
      ::std::is_integral<T>::value,
      "Incorrect type passed to function JoinType_Name.");
    return JoinRel_JoinType_Name(enum_t_value);
  }
  static inline bool JoinType_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
      JoinType* value) {
    return JoinRel_JoinType_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  enum : int {
    kCommonFieldNumber = 1,
    kLeftFieldNumber = 2,
    kRightFieldNumber = 3,
    kExpressionFieldNumber = 4,
    kPostJoinFilterFieldNumber = 5,
    kAdvancedExtensionFieldNumber = 10,
    kTypeFieldNumber = 6,
  };
  // .substrait.RelCommon common = 1 [json_name = "common"];
  bool has_common() const;
  private:
  bool _internal_has_common() const;
  public:
  void clear_common();
  const ::substrait::RelCommon& common() const;
  PROTOBUF_NODISCARD ::substrait::RelCommon* release_common();
  ::substrait::RelCommon* mutable_common();
  void set_allocated_common(::substrait::RelCommon* common);
  private:
  const ::substrait::RelCommon& _internal_common() const;
  ::substrait::RelCommon* _internal_mutable_common();
  public:
  void unsafe_arena_set_allocated_common(
      ::substrait::RelCommon* common);
  ::substrait::RelCommon* unsafe_arena_release_common();

  // .substrait.Rel left = 2 [json_name = "left"];
  bool has_left() const;
  private:
  bool _internal_has_left() const;
  public:
  void clear_left();
  const ::substrait::Rel& left() const;
  PROTOBUF_NODISCARD ::substrait::Rel* release_left();
  ::substrait::Rel* mutable_left();
  void set_allocated_left(::substrait::Rel* left);
  private:
  const ::substrait::Rel& _internal_left() const;
  ::substrait::Rel* _internal_mutable_left();
  public:
  void unsafe_arena_set_allocated_left(
      ::substrait::Rel* left);
  ::substrait::Rel* unsafe_arena_release_left();

  // .substrait.Rel right = 3 [json_name = "right"];
  bool has_right() const;
  private:
  bool _internal_has_right() const;
  public:
  void clear_right();
  const ::substrait::Rel& right() const;
  PROTOBUF_NODISCARD ::substrait::Rel* release_right();
  ::substrait::Rel* mutable_right();
  void set_allocated_right(::substrait::Rel* right);
  private:
  const ::substrait::Rel& _internal_right() const;
  ::substrait::Rel* _internal_mutable_right();
  public:
  void unsafe_arena_set_allocated_right(
      ::substrait::Rel* right);
  ::substrait::Rel* unsafe_arena_release_right();

  // .substrait.Expression expression = 4 [json_name = "expression"];
  bool has_expression() const;
  private:
  bool _internal_has_expression() const;
  public:
  void clear_expression();
  const ::substrait::Expression& expression() const;
  PROTOBUF_NODISCARD ::substrait::Expression* release_expression();
  ::substrait::Expression* mutable_expression();
  void set_allocated_expression(::substrait::Expression* expression);
  private:
  const ::substrait::Expression& _internal_expression() const;
  ::substrait::Expression* _internal_mutable_expression();
  public:
  void unsafe_arena_set_allocated_expression(
      ::substrait::Expression* expression);
  ::substrait::Expression* unsafe_arena_release_expression();

  // .substrait.Expression post_join_filter = 5 [json_name = "postJoinFilter"];
  bool has_post_join_filter() const;
  private:
  bool _internal_has_post_join_filter() const;
  public:
  void clear_post_join_filter();
  const ::substrait::Expression& post_join_filter() const;
  PROTOBUF_NODISCARD ::substrait::Expression* release_post_join_filter();
  ::substrait::Expression* mutable_post_join_filter();
  void set_allocated_post_join_filter(::substrait::Expression* post_join_filter);
  private:
  const ::substrait::Expression& _internal_post_join_filter() const;
  ::substrait::Expression* _internal_mutable_post_join_filter();
  public:
  void unsafe_arena_set_allocated_post_join_filter(
      ::substrait::Expression* post_join_filter);
  ::substrait::Expression* unsafe_arena_release_post_join_filter();

  // .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
  bool has_advanced_extension() const;
  private:
  bool _internal_has_advanced_extension() const;
  public:
  void clear_advanced_extension();
  const ::substrait::extensions::AdvancedExtension& advanced_extension() const;
  PROTOBUF_NODISCARD ::substrait::extensions::AdvancedExtension* release_advanced_extension();
  ::substrait::extensions::AdvancedExtension* mutable_advanced_extension();
  void set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension);
  private:
  const ::substrait::extensions::AdvancedExtension& _internal_advanced_extension() const;
  ::substrait::extensions::AdvancedExtension* _internal_mutable_advanced_extension();
  public:
  void unsafe_arena_set_allocated_advanced_extension(
      ::substrait::extensions::AdvancedExtension* advanced_extension);
  ::substrait::extensions::AdvancedExtension* unsafe_arena_release_advanced_extension();

  // .substrait.JoinRel.JoinType type = 6 [json_name = "type"];
  void clear_type();
  ::substrait::JoinRel_JoinType type() const;
  void set_type(::substrait::JoinRel_JoinType value);
  private:
  ::substrait::JoinRel_JoinType _internal_type() const;
  void _internal_set_type(::substrait::JoinRel_JoinType value);
  public:

  // @@protoc_insertion_point(class_scope:substrait.JoinRel)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::substrait::RelCommon* common_;
  ::substrait::Rel* left_;
  ::substrait::Rel* right_;
  ::substrait::Expression* expression_;
  ::substrait::Expression* post_join_filter_;
  ::substrait::extensions::AdvancedExtension* advanced_extension_;
  int type_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class CrossRel final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.CrossRel) */ {
 public:
  inline CrossRel() : CrossRel(nullptr) {}
  ~CrossRel() override;
  explicit constexpr CrossRel(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  CrossRel(const CrossRel& from);
  CrossRel(CrossRel&& from) noexcept
    : CrossRel() {
    *this = ::std::move(from);
  }

  inline CrossRel& operator=(const CrossRel& from) {
    CopyFrom(from);
    return *this;
  }
  inline CrossRel& operator=(CrossRel&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const CrossRel& default_instance() {
    return *internal_default_instance();
  }
  static inline const CrossRel* internal_default_instance() {
    return reinterpret_cast<const CrossRel*>(
               &_CrossRel_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    14;

  friend void swap(CrossRel& a, CrossRel& b) {
    a.Swap(&b);
  }
  inline void Swap(CrossRel* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(CrossRel* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  CrossRel* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<CrossRel>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const CrossRel& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const CrossRel& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(CrossRel* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.CrossRel";
  }
  protected:
  explicit CrossRel(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kCommonFieldNumber = 1,
    kLeftFieldNumber = 2,
    kRightFieldNumber = 3,
    kAdvancedExtensionFieldNumber = 10,
  };
  // .substrait.RelCommon common = 1 [json_name = "common"];
  bool has_common() const;
  private:
  bool _internal_has_common() const;
  public:
  void clear_common();
  const ::substrait::RelCommon& common() const;
  PROTOBUF_NODISCARD ::substrait::RelCommon* release_common();
  ::substrait::RelCommon* mutable_common();
  void set_allocated_common(::substrait::RelCommon* common);
  private:
  const ::substrait::RelCommon& _internal_common() const;
  ::substrait::RelCommon* _internal_mutable_common();
  public:
  void unsafe_arena_set_allocated_common(
      ::substrait::RelCommon* common);
  ::substrait::RelCommon* unsafe_arena_release_common();

  // .substrait.Rel left = 2 [json_name = "left"];
  bool has_left() const;
  private:
  bool _internal_has_left() const;
  public:
  void clear_left();
  const ::substrait::Rel& left() const;
  PROTOBUF_NODISCARD ::substrait::Rel* release_left();
  ::substrait::Rel* mutable_left();
  void set_allocated_left(::substrait::Rel* left);
  private:
  const ::substrait::Rel& _internal_left() const;
  ::substrait::Rel* _internal_mutable_left();
  public:
  void unsafe_arena_set_allocated_left(
      ::substrait::Rel* left);
  ::substrait::Rel* unsafe_arena_release_left();

  // .substrait.Rel right = 3 [json_name = "right"];
  bool has_right() const;
  private:
  bool _internal_has_right() const;
  public:
  void clear_right();
  const ::substrait::Rel& right() const;
  PROTOBUF_NODISCARD ::substrait::Rel* release_right();
  ::substrait::Rel* mutable_right();
  void set_allocated_right(::substrait::Rel* right);
  private:
  const ::substrait::Rel& _internal_right() const;
  ::substrait::Rel* _internal_mutable_right();
  public:
  void unsafe_arena_set_allocated_right(
      ::substrait::Rel* right);
  ::substrait::Rel* unsafe_arena_release_right();

  // .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
  bool has_advanced_extension() const;
  private:
  bool _internal_has_advanced_extension() const;
  public:
  void clear_advanced_extension();
  const ::substrait::extensions::AdvancedExtension& advanced_extension() const;
  PROTOBUF_NODISCARD ::substrait::extensions::AdvancedExtension* release_advanced_extension();
  ::substrait::extensions::AdvancedExtension* mutable_advanced_extension();
  void set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension);
  private:
  const ::substrait::extensions::AdvancedExtension& _internal_advanced_extension() const;
  ::substrait::extensions::AdvancedExtension* _internal_mutable_advanced_extension();
  public:
  void unsafe_arena_set_allocated_advanced_extension(
      ::substrait::extensions::AdvancedExtension* advanced_extension);
  ::substrait::extensions::AdvancedExtension* unsafe_arena_release_advanced_extension();

  // @@protoc_insertion_point(class_scope:substrait.CrossRel)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::substrait::RelCommon* common_;
  ::substrait::Rel* left_;
  ::substrait::Rel* right_;
  ::substrait::extensions::AdvancedExtension* advanced_extension_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class FetchRel final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.FetchRel) */ {
 public:
  inline FetchRel() : FetchRel(nullptr) {}
  ~FetchRel() override;
  explicit constexpr FetchRel(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  FetchRel(const FetchRel& from);
  FetchRel(FetchRel&& from) noexcept
    : FetchRel() {
    *this = ::std::move(from);
  }

  inline FetchRel& operator=(const FetchRel& from) {
    CopyFrom(from);
    return *this;
  }
  inline FetchRel& operator=(FetchRel&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const FetchRel& default_instance() {
    return *internal_default_instance();
  }
  static inline const FetchRel* internal_default_instance() {
    return reinterpret_cast<const FetchRel*>(
               &_FetchRel_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    15;

  friend void swap(FetchRel& a, FetchRel& b) {
    a.Swap(&b);
  }
  inline void Swap(FetchRel* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(FetchRel* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  FetchRel* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<FetchRel>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const FetchRel& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const FetchRel& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(FetchRel* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.FetchRel";
  }
  protected:
  explicit FetchRel(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kCommonFieldNumber = 1,
    kInputFieldNumber = 2,
    kAdvancedExtensionFieldNumber = 10,
    kOffsetFieldNumber = 3,
    kCountFieldNumber = 4,
  };
  // .substrait.RelCommon common = 1 [json_name = "common"];
  bool has_common() const;
  private:
  bool _internal_has_common() const;
  public:
  void clear_common();
  const ::substrait::RelCommon& common() const;
  PROTOBUF_NODISCARD ::substrait::RelCommon* release_common();
  ::substrait::RelCommon* mutable_common();
  void set_allocated_common(::substrait::RelCommon* common);
  private:
  const ::substrait::RelCommon& _internal_common() const;
  ::substrait::RelCommon* _internal_mutable_common();
  public:
  void unsafe_arena_set_allocated_common(
      ::substrait::RelCommon* common);
  ::substrait::RelCommon* unsafe_arena_release_common();

  // .substrait.Rel input = 2 [json_name = "input"];
  bool has_input() const;
  private:
  bool _internal_has_input() const;
  public:
  void clear_input();
  const ::substrait::Rel& input() const;
  PROTOBUF_NODISCARD ::substrait::Rel* release_input();
  ::substrait::Rel* mutable_input();
  void set_allocated_input(::substrait::Rel* input);
  private:
  const ::substrait::Rel& _internal_input() const;
  ::substrait::Rel* _internal_mutable_input();
  public:
  void unsafe_arena_set_allocated_input(
      ::substrait::Rel* input);
  ::substrait::Rel* unsafe_arena_release_input();

  // .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
  bool has_advanced_extension() const;
  private:
  bool _internal_has_advanced_extension() const;
  public:
  void clear_advanced_extension();
  const ::substrait::extensions::AdvancedExtension& advanced_extension() const;
  PROTOBUF_NODISCARD ::substrait::extensions::AdvancedExtension* release_advanced_extension();
  ::substrait::extensions::AdvancedExtension* mutable_advanced_extension();
  void set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension);
  private:
  const ::substrait::extensions::AdvancedExtension& _internal_advanced_extension() const;
  ::substrait::extensions::AdvancedExtension* _internal_mutable_advanced_extension();
  public:
  void unsafe_arena_set_allocated_advanced_extension(
      ::substrait::extensions::AdvancedExtension* advanced_extension);
  ::substrait::extensions::AdvancedExtension* unsafe_arena_release_advanced_extension();

  // int64 offset = 3 [json_name = "offset"];
  void clear_offset();
  int64_t offset() const;
  void set_offset(int64_t value);
  private:
  int64_t _internal_offset() const;
  void _internal_set_offset(int64_t value);
  public:

  // int64 count = 4 [json_name = "count"];
  void clear_count();
  int64_t count() const;
  void set_count(int64_t value);
  private:
  int64_t _internal_count() const;
  void _internal_set_count(int64_t value);
  public:

  // @@protoc_insertion_point(class_scope:substrait.FetchRel)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::substrait::RelCommon* common_;
  ::substrait::Rel* input_;
  ::substrait::extensions::AdvancedExtension* advanced_extension_;
  int64_t offset_;
  int64_t count_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class AggregateRel_Grouping final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.AggregateRel.Grouping) */ {
 public:
  inline AggregateRel_Grouping() : AggregateRel_Grouping(nullptr) {}
  ~AggregateRel_Grouping() override;
  explicit constexpr AggregateRel_Grouping(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  AggregateRel_Grouping(const AggregateRel_Grouping& from);
  AggregateRel_Grouping(AggregateRel_Grouping&& from) noexcept
    : AggregateRel_Grouping() {
    *this = ::std::move(from);
  }

  inline AggregateRel_Grouping& operator=(const AggregateRel_Grouping& from) {
    CopyFrom(from);
    return *this;
  }
  inline AggregateRel_Grouping& operator=(AggregateRel_Grouping&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const AggregateRel_Grouping& default_instance() {
    return *internal_default_instance();
  }
  static inline const AggregateRel_Grouping* internal_default_instance() {
    return reinterpret_cast<const AggregateRel_Grouping*>(
               &_AggregateRel_Grouping_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    16;

  friend void swap(AggregateRel_Grouping& a, AggregateRel_Grouping& b) {
    a.Swap(&b);
  }
  inline void Swap(AggregateRel_Grouping* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(AggregateRel_Grouping* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  AggregateRel_Grouping* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<AggregateRel_Grouping>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const AggregateRel_Grouping& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const AggregateRel_Grouping& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(AggregateRel_Grouping* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.AggregateRel.Grouping";
  }
  protected:
  explicit AggregateRel_Grouping(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kGroupingExpressionsFieldNumber = 1,
  };
  // repeated .substrait.Expression grouping_expressions = 1 [json_name = "groupingExpressions"];
  int grouping_expressions_size() const;
  private:
  int _internal_grouping_expressions_size() const;
  public:
  void clear_grouping_expressions();
  ::substrait::Expression* mutable_grouping_expressions(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >*
      mutable_grouping_expressions();
  private:
  const ::substrait::Expression& _internal_grouping_expressions(int index) const;
  ::substrait::Expression* _internal_add_grouping_expressions();
  public:
  const ::substrait::Expression& grouping_expressions(int index) const;
  ::substrait::Expression* add_grouping_expressions();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >&
      grouping_expressions() const;

  // @@protoc_insertion_point(class_scope:substrait.AggregateRel.Grouping)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression > grouping_expressions_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class AggregateRel_Measure final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.AggregateRel.Measure) */ {
 public:
  inline AggregateRel_Measure() : AggregateRel_Measure(nullptr) {}
  ~AggregateRel_Measure() override;
  explicit constexpr AggregateRel_Measure(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  AggregateRel_Measure(const AggregateRel_Measure& from);
  AggregateRel_Measure(AggregateRel_Measure&& from) noexcept
    : AggregateRel_Measure() {
    *this = ::std::move(from);
  }

  inline AggregateRel_Measure& operator=(const AggregateRel_Measure& from) {
    CopyFrom(from);
    return *this;
  }
  inline AggregateRel_Measure& operator=(AggregateRel_Measure&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const AggregateRel_Measure& default_instance() {
    return *internal_default_instance();
  }
  static inline const AggregateRel_Measure* internal_default_instance() {
    return reinterpret_cast<const AggregateRel_Measure*>(
               &_AggregateRel_Measure_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    17;

  friend void swap(AggregateRel_Measure& a, AggregateRel_Measure& b) {
    a.Swap(&b);
  }
  inline void Swap(AggregateRel_Measure* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(AggregateRel_Measure* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  AggregateRel_Measure* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<AggregateRel_Measure>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const AggregateRel_Measure& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const AggregateRel_Measure& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(AggregateRel_Measure* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.AggregateRel.Measure";
  }
  protected:
  explicit AggregateRel_Measure(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kMeasureFieldNumber = 1,
    kFilterFieldNumber = 2,
  };
  // .substrait.AggregateFunction measure = 1 [json_name = "measure"];
  bool has_measure() const;
  private:
  bool _internal_has_measure() const;
  public:
  void clear_measure();
  const ::substrait::AggregateFunction& measure() const;
  PROTOBUF_NODISCARD ::substrait::AggregateFunction* release_measure();
  ::substrait::AggregateFunction* mutable_measure();
  void set_allocated_measure(::substrait::AggregateFunction* measure);
  private:
  const ::substrait::AggregateFunction& _internal_measure() const;
  ::substrait::AggregateFunction* _internal_mutable_measure();
  public:
  void unsafe_arena_set_allocated_measure(
      ::substrait::AggregateFunction* measure);
  ::substrait::AggregateFunction* unsafe_arena_release_measure();

  // .substrait.Expression filter = 2 [json_name = "filter"];
  bool has_filter() const;
  private:
  bool _internal_has_filter() const;
  public:
  void clear_filter();
  const ::substrait::Expression& filter() const;
  PROTOBUF_NODISCARD ::substrait::Expression* release_filter();
  ::substrait::Expression* mutable_filter();
  void set_allocated_filter(::substrait::Expression* filter);
  private:
  const ::substrait::Expression& _internal_filter() const;
  ::substrait::Expression* _internal_mutable_filter();
  public:
  void unsafe_arena_set_allocated_filter(
      ::substrait::Expression* filter);
  ::substrait::Expression* unsafe_arena_release_filter();

  // @@protoc_insertion_point(class_scope:substrait.AggregateRel.Measure)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::substrait::AggregateFunction* measure_;
  ::substrait::Expression* filter_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class AggregateRel final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.AggregateRel) */ {
 public:
  inline AggregateRel() : AggregateRel(nullptr) {}
  ~AggregateRel() override;
  explicit constexpr AggregateRel(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  AggregateRel(const AggregateRel& from);
  AggregateRel(AggregateRel&& from) noexcept
    : AggregateRel() {
    *this = ::std::move(from);
  }

  inline AggregateRel& operator=(const AggregateRel& from) {
    CopyFrom(from);
    return *this;
  }
  inline AggregateRel& operator=(AggregateRel&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const AggregateRel& default_instance() {
    return *internal_default_instance();
  }
  static inline const AggregateRel* internal_default_instance() {
    return reinterpret_cast<const AggregateRel*>(
               &_AggregateRel_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    18;

  friend void swap(AggregateRel& a, AggregateRel& b) {
    a.Swap(&b);
  }
  inline void Swap(AggregateRel* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(AggregateRel* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  AggregateRel* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<AggregateRel>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const AggregateRel& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const AggregateRel& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(AggregateRel* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.AggregateRel";
  }
  protected:
  explicit AggregateRel(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef AggregateRel_Grouping Grouping;
  typedef AggregateRel_Measure Measure;

  // accessors -------------------------------------------------------

  enum : int {
    kGroupingsFieldNumber = 3,
    kMeasuresFieldNumber = 4,
    kCommonFieldNumber = 1,
    kInputFieldNumber = 2,
    kAdvancedExtensionFieldNumber = 10,
  };
  // repeated .substrait.AggregateRel.Grouping groupings = 3 [json_name = "groupings"];
  int groupings_size() const;
  private:
  int _internal_groupings_size() const;
  public:
  void clear_groupings();
  ::substrait::AggregateRel_Grouping* mutable_groupings(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::AggregateRel_Grouping >*
      mutable_groupings();
  private:
  const ::substrait::AggregateRel_Grouping& _internal_groupings(int index) const;
  ::substrait::AggregateRel_Grouping* _internal_add_groupings();
  public:
  const ::substrait::AggregateRel_Grouping& groupings(int index) const;
  ::substrait::AggregateRel_Grouping* add_groupings();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::AggregateRel_Grouping >&
      groupings() const;

  // repeated .substrait.AggregateRel.Measure measures = 4 [json_name = "measures"];
  int measures_size() const;
  private:
  int _internal_measures_size() const;
  public:
  void clear_measures();
  ::substrait::AggregateRel_Measure* mutable_measures(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::AggregateRel_Measure >*
      mutable_measures();
  private:
  const ::substrait::AggregateRel_Measure& _internal_measures(int index) const;
  ::substrait::AggregateRel_Measure* _internal_add_measures();
  public:
  const ::substrait::AggregateRel_Measure& measures(int index) const;
  ::substrait::AggregateRel_Measure* add_measures();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::AggregateRel_Measure >&
      measures() const;

  // .substrait.RelCommon common = 1 [json_name = "common"];
  bool has_common() const;
  private:
  bool _internal_has_common() const;
  public:
  void clear_common();
  const ::substrait::RelCommon& common() const;
  PROTOBUF_NODISCARD ::substrait::RelCommon* release_common();
  ::substrait::RelCommon* mutable_common();
  void set_allocated_common(::substrait::RelCommon* common);
  private:
  const ::substrait::RelCommon& _internal_common() const;
  ::substrait::RelCommon* _internal_mutable_common();
  public:
  void unsafe_arena_set_allocated_common(
      ::substrait::RelCommon* common);
  ::substrait::RelCommon* unsafe_arena_release_common();

  // .substrait.Rel input = 2 [json_name = "input"];
  bool has_input() const;
  private:
  bool _internal_has_input() const;
  public:
  void clear_input();
  const ::substrait::Rel& input() const;
  PROTOBUF_NODISCARD ::substrait::Rel* release_input();
  ::substrait::Rel* mutable_input();
  void set_allocated_input(::substrait::Rel* input);
  private:
  const ::substrait::Rel& _internal_input() const;
  ::substrait::Rel* _internal_mutable_input();
  public:
  void unsafe_arena_set_allocated_input(
      ::substrait::Rel* input);
  ::substrait::Rel* unsafe_arena_release_input();

  // .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
  bool has_advanced_extension() const;
  private:
  bool _internal_has_advanced_extension() const;
  public:
  void clear_advanced_extension();
  const ::substrait::extensions::AdvancedExtension& advanced_extension() const;
  PROTOBUF_NODISCARD ::substrait::extensions::AdvancedExtension* release_advanced_extension();
  ::substrait::extensions::AdvancedExtension* mutable_advanced_extension();
  void set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension);
  private:
  const ::substrait::extensions::AdvancedExtension& _internal_advanced_extension() const;
  ::substrait::extensions::AdvancedExtension* _internal_mutable_advanced_extension();
  public:
  void unsafe_arena_set_allocated_advanced_extension(
      ::substrait::extensions::AdvancedExtension* advanced_extension);
  ::substrait::extensions::AdvancedExtension* unsafe_arena_release_advanced_extension();

  // @@protoc_insertion_point(class_scope:substrait.AggregateRel)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::AggregateRel_Grouping > groupings_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::AggregateRel_Measure > measures_;
  ::substrait::RelCommon* common_;
  ::substrait::Rel* input_;
  ::substrait::extensions::AdvancedExtension* advanced_extension_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class SortRel final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.SortRel) */ {
 public:
  inline SortRel() : SortRel(nullptr) {}
  ~SortRel() override;
  explicit constexpr SortRel(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  SortRel(const SortRel& from);
  SortRel(SortRel&& from) noexcept
    : SortRel() {
    *this = ::std::move(from);
  }

  inline SortRel& operator=(const SortRel& from) {
    CopyFrom(from);
    return *this;
  }
  inline SortRel& operator=(SortRel&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const SortRel& default_instance() {
    return *internal_default_instance();
  }
  static inline const SortRel* internal_default_instance() {
    return reinterpret_cast<const SortRel*>(
               &_SortRel_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    19;

  friend void swap(SortRel& a, SortRel& b) {
    a.Swap(&b);
  }
  inline void Swap(SortRel* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(SortRel* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  SortRel* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<SortRel>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const SortRel& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const SortRel& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(SortRel* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.SortRel";
  }
  protected:
  explicit SortRel(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kSortsFieldNumber = 3,
    kCommonFieldNumber = 1,
    kInputFieldNumber = 2,
    kAdvancedExtensionFieldNumber = 10,
  };
  // repeated .substrait.SortField sorts = 3 [json_name = "sorts"];
  int sorts_size() const;
  private:
  int _internal_sorts_size() const;
  public:
  void clear_sorts();
  ::substrait::SortField* mutable_sorts(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::SortField >*
      mutable_sorts();
  private:
  const ::substrait::SortField& _internal_sorts(int index) const;
  ::substrait::SortField* _internal_add_sorts();
  public:
  const ::substrait::SortField& sorts(int index) const;
  ::substrait::SortField* add_sorts();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::SortField >&
      sorts() const;

  // .substrait.RelCommon common = 1 [json_name = "common"];
  bool has_common() const;
  private:
  bool _internal_has_common() const;
  public:
  void clear_common();
  const ::substrait::RelCommon& common() const;
  PROTOBUF_NODISCARD ::substrait::RelCommon* release_common();
  ::substrait::RelCommon* mutable_common();
  void set_allocated_common(::substrait::RelCommon* common);
  private:
  const ::substrait::RelCommon& _internal_common() const;
  ::substrait::RelCommon* _internal_mutable_common();
  public:
  void unsafe_arena_set_allocated_common(
      ::substrait::RelCommon* common);
  ::substrait::RelCommon* unsafe_arena_release_common();

  // .substrait.Rel input = 2 [json_name = "input"];
  bool has_input() const;
  private:
  bool _internal_has_input() const;
  public:
  void clear_input();
  const ::substrait::Rel& input() const;
  PROTOBUF_NODISCARD ::substrait::Rel* release_input();
  ::substrait::Rel* mutable_input();
  void set_allocated_input(::substrait::Rel* input);
  private:
  const ::substrait::Rel& _internal_input() const;
  ::substrait::Rel* _internal_mutable_input();
  public:
  void unsafe_arena_set_allocated_input(
      ::substrait::Rel* input);
  ::substrait::Rel* unsafe_arena_release_input();

  // .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
  bool has_advanced_extension() const;
  private:
  bool _internal_has_advanced_extension() const;
  public:
  void clear_advanced_extension();
  const ::substrait::extensions::AdvancedExtension& advanced_extension() const;
  PROTOBUF_NODISCARD ::substrait::extensions::AdvancedExtension* release_advanced_extension();
  ::substrait::extensions::AdvancedExtension* mutable_advanced_extension();
  void set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension);
  private:
  const ::substrait::extensions::AdvancedExtension& _internal_advanced_extension() const;
  ::substrait::extensions::AdvancedExtension* _internal_mutable_advanced_extension();
  public:
  void unsafe_arena_set_allocated_advanced_extension(
      ::substrait::extensions::AdvancedExtension* advanced_extension);
  ::substrait::extensions::AdvancedExtension* unsafe_arena_release_advanced_extension();

  // @@protoc_insertion_point(class_scope:substrait.SortRel)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::SortField > sorts_;
  ::substrait::RelCommon* common_;
  ::substrait::Rel* input_;
  ::substrait::extensions::AdvancedExtension* advanced_extension_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class FilterRel final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.FilterRel) */ {
 public:
  inline FilterRel() : FilterRel(nullptr) {}
  ~FilterRel() override;
  explicit constexpr FilterRel(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  FilterRel(const FilterRel& from);
  FilterRel(FilterRel&& from) noexcept
    : FilterRel() {
    *this = ::std::move(from);
  }

  inline FilterRel& operator=(const FilterRel& from) {
    CopyFrom(from);
    return *this;
  }
  inline FilterRel& operator=(FilterRel&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const FilterRel& default_instance() {
    return *internal_default_instance();
  }
  static inline const FilterRel* internal_default_instance() {
    return reinterpret_cast<const FilterRel*>(
               &_FilterRel_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    20;

  friend void swap(FilterRel& a, FilterRel& b) {
    a.Swap(&b);
  }
  inline void Swap(FilterRel* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(FilterRel* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  FilterRel* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<FilterRel>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const FilterRel& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const FilterRel& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(FilterRel* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.FilterRel";
  }
  protected:
  explicit FilterRel(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kCommonFieldNumber = 1,
    kInputFieldNumber = 2,
    kConditionFieldNumber = 3,
    kAdvancedExtensionFieldNumber = 10,
  };
  // .substrait.RelCommon common = 1 [json_name = "common"];
  bool has_common() const;
  private:
  bool _internal_has_common() const;
  public:
  void clear_common();
  const ::substrait::RelCommon& common() const;
  PROTOBUF_NODISCARD ::substrait::RelCommon* release_common();
  ::substrait::RelCommon* mutable_common();
  void set_allocated_common(::substrait::RelCommon* common);
  private:
  const ::substrait::RelCommon& _internal_common() const;
  ::substrait::RelCommon* _internal_mutable_common();
  public:
  void unsafe_arena_set_allocated_common(
      ::substrait::RelCommon* common);
  ::substrait::RelCommon* unsafe_arena_release_common();

  // .substrait.Rel input = 2 [json_name = "input"];
  bool has_input() const;
  private:
  bool _internal_has_input() const;
  public:
  void clear_input();
  const ::substrait::Rel& input() const;
  PROTOBUF_NODISCARD ::substrait::Rel* release_input();
  ::substrait::Rel* mutable_input();
  void set_allocated_input(::substrait::Rel* input);
  private:
  const ::substrait::Rel& _internal_input() const;
  ::substrait::Rel* _internal_mutable_input();
  public:
  void unsafe_arena_set_allocated_input(
      ::substrait::Rel* input);
  ::substrait::Rel* unsafe_arena_release_input();

  // .substrait.Expression condition = 3 [json_name = "condition"];
  bool has_condition() const;
  private:
  bool _internal_has_condition() const;
  public:
  void clear_condition();
  const ::substrait::Expression& condition() const;
  PROTOBUF_NODISCARD ::substrait::Expression* release_condition();
  ::substrait::Expression* mutable_condition();
  void set_allocated_condition(::substrait::Expression* condition);
  private:
  const ::substrait::Expression& _internal_condition() const;
  ::substrait::Expression* _internal_mutable_condition();
  public:
  void unsafe_arena_set_allocated_condition(
      ::substrait::Expression* condition);
  ::substrait::Expression* unsafe_arena_release_condition();

  // .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
  bool has_advanced_extension() const;
  private:
  bool _internal_has_advanced_extension() const;
  public:
  void clear_advanced_extension();
  const ::substrait::extensions::AdvancedExtension& advanced_extension() const;
  PROTOBUF_NODISCARD ::substrait::extensions::AdvancedExtension* release_advanced_extension();
  ::substrait::extensions::AdvancedExtension* mutable_advanced_extension();
  void set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension);
  private:
  const ::substrait::extensions::AdvancedExtension& _internal_advanced_extension() const;
  ::substrait::extensions::AdvancedExtension* _internal_mutable_advanced_extension();
  public:
  void unsafe_arena_set_allocated_advanced_extension(
      ::substrait::extensions::AdvancedExtension* advanced_extension);
  ::substrait::extensions::AdvancedExtension* unsafe_arena_release_advanced_extension();

  // @@protoc_insertion_point(class_scope:substrait.FilterRel)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::substrait::RelCommon* common_;
  ::substrait::Rel* input_;
  ::substrait::Expression* condition_;
  ::substrait::extensions::AdvancedExtension* advanced_extension_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class SetRel final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.SetRel) */ {
 public:
  inline SetRel() : SetRel(nullptr) {}
  ~SetRel() override;
  explicit constexpr SetRel(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  SetRel(const SetRel& from);
  SetRel(SetRel&& from) noexcept
    : SetRel() {
    *this = ::std::move(from);
  }

  inline SetRel& operator=(const SetRel& from) {
    CopyFrom(from);
    return *this;
  }
  inline SetRel& operator=(SetRel&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const SetRel& default_instance() {
    return *internal_default_instance();
  }
  static inline const SetRel* internal_default_instance() {
    return reinterpret_cast<const SetRel*>(
               &_SetRel_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    21;

  friend void swap(SetRel& a, SetRel& b) {
    a.Swap(&b);
  }
  inline void Swap(SetRel* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(SetRel* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  SetRel* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<SetRel>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const SetRel& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const SetRel& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(SetRel* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.SetRel";
  }
  protected:
  explicit SetRel(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef SetRel_SetOp SetOp;
  static constexpr SetOp SET_OP_UNSPECIFIED =
    SetRel_SetOp_SET_OP_UNSPECIFIED;
  static constexpr SetOp SET_OP_MINUS_PRIMARY =
    SetRel_SetOp_SET_OP_MINUS_PRIMARY;
  static constexpr SetOp SET_OP_MINUS_MULTISET =
    SetRel_SetOp_SET_OP_MINUS_MULTISET;
  static constexpr SetOp SET_OP_INTERSECTION_PRIMARY =
    SetRel_SetOp_SET_OP_INTERSECTION_PRIMARY;
  static constexpr SetOp SET_OP_INTERSECTION_MULTISET =
    SetRel_SetOp_SET_OP_INTERSECTION_MULTISET;
  static constexpr SetOp SET_OP_UNION_DISTINCT =
    SetRel_SetOp_SET_OP_UNION_DISTINCT;
  static constexpr SetOp SET_OP_UNION_ALL =
    SetRel_SetOp_SET_OP_UNION_ALL;
  static inline bool SetOp_IsValid(int value) {
    return SetRel_SetOp_IsValid(value);
  }
  static constexpr SetOp SetOp_MIN =
    SetRel_SetOp_SetOp_MIN;
  static constexpr SetOp SetOp_MAX =
    SetRel_SetOp_SetOp_MAX;
  static constexpr int SetOp_ARRAYSIZE =
    SetRel_SetOp_SetOp_ARRAYSIZE;
  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
  SetOp_descriptor() {
    return SetRel_SetOp_descriptor();
  }
  template<typename T>
  static inline const std::string& SetOp_Name(T enum_t_value) {
    static_assert(::std::is_same<T, SetOp>::value ||
      ::std::is_integral<T>::value,
      "Incorrect type passed to function SetOp_Name.");
    return SetRel_SetOp_Name(enum_t_value);
  }
  static inline bool SetOp_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
      SetOp* value) {
    return SetRel_SetOp_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  enum : int {
    kInputsFieldNumber = 2,
    kCommonFieldNumber = 1,
    kAdvancedExtensionFieldNumber = 10,
    kOpFieldNumber = 3,
  };
  // repeated .substrait.Rel inputs = 2 [json_name = "inputs"];
  int inputs_size() const;
  private:
  int _internal_inputs_size() const;
  public:
  void clear_inputs();
  ::substrait::Rel* mutable_inputs(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Rel >*
      mutable_inputs();
  private:
  const ::substrait::Rel& _internal_inputs(int index) const;
  ::substrait::Rel* _internal_add_inputs();
  public:
  const ::substrait::Rel& inputs(int index) const;
  ::substrait::Rel* add_inputs();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Rel >&
      inputs() const;

  // .substrait.RelCommon common = 1 [json_name = "common"];
  bool has_common() const;
  private:
  bool _internal_has_common() const;
  public:
  void clear_common();
  const ::substrait::RelCommon& common() const;
  PROTOBUF_NODISCARD ::substrait::RelCommon* release_common();
  ::substrait::RelCommon* mutable_common();
  void set_allocated_common(::substrait::RelCommon* common);
  private:
  const ::substrait::RelCommon& _internal_common() const;
  ::substrait::RelCommon* _internal_mutable_common();
  public:
  void unsafe_arena_set_allocated_common(
      ::substrait::RelCommon* common);
  ::substrait::RelCommon* unsafe_arena_release_common();

  // .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
  bool has_advanced_extension() const;
  private:
  bool _internal_has_advanced_extension() const;
  public:
  void clear_advanced_extension();
  const ::substrait::extensions::AdvancedExtension& advanced_extension() const;
  PROTOBUF_NODISCARD ::substrait::extensions::AdvancedExtension* release_advanced_extension();
  ::substrait::extensions::AdvancedExtension* mutable_advanced_extension();
  void set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension);
  private:
  const ::substrait::extensions::AdvancedExtension& _internal_advanced_extension() const;
  ::substrait::extensions::AdvancedExtension* _internal_mutable_advanced_extension();
  public:
  void unsafe_arena_set_allocated_advanced_extension(
      ::substrait::extensions::AdvancedExtension* advanced_extension);
  ::substrait::extensions::AdvancedExtension* unsafe_arena_release_advanced_extension();

  // .substrait.SetRel.SetOp op = 3 [json_name = "op"];
  void clear_op();
  ::substrait::SetRel_SetOp op() const;
  void set_op(::substrait::SetRel_SetOp value);
  private:
  ::substrait::SetRel_SetOp _internal_op() const;
  void _internal_set_op(::substrait::SetRel_SetOp value);
  public:

  // @@protoc_insertion_point(class_scope:substrait.SetRel)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Rel > inputs_;
  ::substrait::RelCommon* common_;
  ::substrait::extensions::AdvancedExtension* advanced_extension_;
  int op_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class ExtensionSingleRel final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.ExtensionSingleRel) */ {
 public:
  inline ExtensionSingleRel() : ExtensionSingleRel(nullptr) {}
  ~ExtensionSingleRel() override;
  explicit constexpr ExtensionSingleRel(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  ExtensionSingleRel(const ExtensionSingleRel& from);
  ExtensionSingleRel(ExtensionSingleRel&& from) noexcept
    : ExtensionSingleRel() {
    *this = ::std::move(from);
  }

  inline ExtensionSingleRel& operator=(const ExtensionSingleRel& from) {
    CopyFrom(from);
    return *this;
  }
  inline ExtensionSingleRel& operator=(ExtensionSingleRel&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const ExtensionSingleRel& default_instance() {
    return *internal_default_instance();
  }
  static inline const ExtensionSingleRel* internal_default_instance() {
    return reinterpret_cast<const ExtensionSingleRel*>(
               &_ExtensionSingleRel_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    22;

  friend void swap(ExtensionSingleRel& a, ExtensionSingleRel& b) {
    a.Swap(&b);
  }
  inline void Swap(ExtensionSingleRel* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ExtensionSingleRel* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  ExtensionSingleRel* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<ExtensionSingleRel>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const ExtensionSingleRel& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const ExtensionSingleRel& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(ExtensionSingleRel* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.ExtensionSingleRel";
  }
  protected:
  explicit ExtensionSingleRel(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kCommonFieldNumber = 1,
    kInputFieldNumber = 2,
    kDetailFieldNumber = 3,
  };
  // .substrait.RelCommon common = 1 [json_name = "common"];
  bool has_common() const;
  private:
  bool _internal_has_common() const;
  public:
  void clear_common();
  const ::substrait::RelCommon& common() const;
  PROTOBUF_NODISCARD ::substrait::RelCommon* release_common();
  ::substrait::RelCommon* mutable_common();
  void set_allocated_common(::substrait::RelCommon* common);
  private:
  const ::substrait::RelCommon& _internal_common() const;
  ::substrait::RelCommon* _internal_mutable_common();
  public:
  void unsafe_arena_set_allocated_common(
      ::substrait::RelCommon* common);
  ::substrait::RelCommon* unsafe_arena_release_common();

  // .substrait.Rel input = 2 [json_name = "input"];
  bool has_input() const;
  private:
  bool _internal_has_input() const;
  public:
  void clear_input();
  const ::substrait::Rel& input() const;
  PROTOBUF_NODISCARD ::substrait::Rel* release_input();
  ::substrait::Rel* mutable_input();
  void set_allocated_input(::substrait::Rel* input);
  private:
  const ::substrait::Rel& _internal_input() const;
  ::substrait::Rel* _internal_mutable_input();
  public:
  void unsafe_arena_set_allocated_input(
      ::substrait::Rel* input);
  ::substrait::Rel* unsafe_arena_release_input();

  // .google.protobuf.Any detail = 3 [json_name = "detail"];
  bool has_detail() const;
  private:
  bool _internal_has_detail() const;
  public:
  void clear_detail();
  const ::PROTOBUF_NAMESPACE_ID::Any& detail() const;
  PROTOBUF_NODISCARD ::PROTOBUF_NAMESPACE_ID::Any* release_detail();
  ::PROTOBUF_NAMESPACE_ID::Any* mutable_detail();
  void set_allocated_detail(::PROTOBUF_NAMESPACE_ID::Any* detail);
  private:
  const ::PROTOBUF_NAMESPACE_ID::Any& _internal_detail() const;
  ::PROTOBUF_NAMESPACE_ID::Any* _internal_mutable_detail();
  public:
  void unsafe_arena_set_allocated_detail(
      ::PROTOBUF_NAMESPACE_ID::Any* detail);
  ::PROTOBUF_NAMESPACE_ID::Any* unsafe_arena_release_detail();

  // @@protoc_insertion_point(class_scope:substrait.ExtensionSingleRel)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::substrait::RelCommon* common_;
  ::substrait::Rel* input_;
  ::PROTOBUF_NAMESPACE_ID::Any* detail_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class ExtensionLeafRel final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.ExtensionLeafRel) */ {
 public:
  inline ExtensionLeafRel() : ExtensionLeafRel(nullptr) {}
  ~ExtensionLeafRel() override;
  explicit constexpr ExtensionLeafRel(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  ExtensionLeafRel(const ExtensionLeafRel& from);
  ExtensionLeafRel(ExtensionLeafRel&& from) noexcept
    : ExtensionLeafRel() {
    *this = ::std::move(from);
  }

  inline ExtensionLeafRel& operator=(const ExtensionLeafRel& from) {
    CopyFrom(from);
    return *this;
  }
  inline ExtensionLeafRel& operator=(ExtensionLeafRel&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const ExtensionLeafRel& default_instance() {
    return *internal_default_instance();
  }
  static inline const ExtensionLeafRel* internal_default_instance() {
    return reinterpret_cast<const ExtensionLeafRel*>(
               &_ExtensionLeafRel_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    23;

  friend void swap(ExtensionLeafRel& a, ExtensionLeafRel& b) {
    a.Swap(&b);
  }
  inline void Swap(ExtensionLeafRel* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ExtensionLeafRel* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  ExtensionLeafRel* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<ExtensionLeafRel>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const ExtensionLeafRel& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const ExtensionLeafRel& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(ExtensionLeafRel* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.ExtensionLeafRel";
  }
  protected:
  explicit ExtensionLeafRel(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kCommonFieldNumber = 1,
    kDetailFieldNumber = 2,
  };
  // .substrait.RelCommon common = 1 [json_name = "common"];
  bool has_common() const;
  private:
  bool _internal_has_common() const;
  public:
  void clear_common();
  const ::substrait::RelCommon& common() const;
  PROTOBUF_NODISCARD ::substrait::RelCommon* release_common();
  ::substrait::RelCommon* mutable_common();
  void set_allocated_common(::substrait::RelCommon* common);
  private:
  const ::substrait::RelCommon& _internal_common() const;
  ::substrait::RelCommon* _internal_mutable_common();
  public:
  void unsafe_arena_set_allocated_common(
      ::substrait::RelCommon* common);
  ::substrait::RelCommon* unsafe_arena_release_common();

  // .google.protobuf.Any detail = 2 [json_name = "detail"];
  bool has_detail() const;
  private:
  bool _internal_has_detail() const;
  public:
  void clear_detail();
  const ::PROTOBUF_NAMESPACE_ID::Any& detail() const;
  PROTOBUF_NODISCARD ::PROTOBUF_NAMESPACE_ID::Any* release_detail();
  ::PROTOBUF_NAMESPACE_ID::Any* mutable_detail();
  void set_allocated_detail(::PROTOBUF_NAMESPACE_ID::Any* detail);
  private:
  const ::PROTOBUF_NAMESPACE_ID::Any& _internal_detail() const;
  ::PROTOBUF_NAMESPACE_ID::Any* _internal_mutable_detail();
  public:
  void unsafe_arena_set_allocated_detail(
      ::PROTOBUF_NAMESPACE_ID::Any* detail);
  ::PROTOBUF_NAMESPACE_ID::Any* unsafe_arena_release_detail();

  // @@protoc_insertion_point(class_scope:substrait.ExtensionLeafRel)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::substrait::RelCommon* common_;
  ::PROTOBUF_NAMESPACE_ID::Any* detail_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class ExtensionMultiRel final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.ExtensionMultiRel) */ {
 public:
  inline ExtensionMultiRel() : ExtensionMultiRel(nullptr) {}
  ~ExtensionMultiRel() override;
  explicit constexpr ExtensionMultiRel(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  ExtensionMultiRel(const ExtensionMultiRel& from);
  ExtensionMultiRel(ExtensionMultiRel&& from) noexcept
    : ExtensionMultiRel() {
    *this = ::std::move(from);
  }

  inline ExtensionMultiRel& operator=(const ExtensionMultiRel& from) {
    CopyFrom(from);
    return *this;
  }
  inline ExtensionMultiRel& operator=(ExtensionMultiRel&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const ExtensionMultiRel& default_instance() {
    return *internal_default_instance();
  }
  static inline const ExtensionMultiRel* internal_default_instance() {
    return reinterpret_cast<const ExtensionMultiRel*>(
               &_ExtensionMultiRel_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    24;

  friend void swap(ExtensionMultiRel& a, ExtensionMultiRel& b) {
    a.Swap(&b);
  }
  inline void Swap(ExtensionMultiRel* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ExtensionMultiRel* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  ExtensionMultiRel* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<ExtensionMultiRel>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const ExtensionMultiRel& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const ExtensionMultiRel& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(ExtensionMultiRel* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.ExtensionMultiRel";
  }
  protected:
  explicit ExtensionMultiRel(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kInputsFieldNumber = 2,
    kCommonFieldNumber = 1,
    kDetailFieldNumber = 3,
  };
  // repeated .substrait.Rel inputs = 2 [json_name = "inputs"];
  int inputs_size() const;
  private:
  int _internal_inputs_size() const;
  public:
  void clear_inputs();
  ::substrait::Rel* mutable_inputs(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Rel >*
      mutable_inputs();
  private:
  const ::substrait::Rel& _internal_inputs(int index) const;
  ::substrait::Rel* _internal_add_inputs();
  public:
  const ::substrait::Rel& inputs(int index) const;
  ::substrait::Rel* add_inputs();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Rel >&
      inputs() const;

  // .substrait.RelCommon common = 1 [json_name = "common"];
  bool has_common() const;
  private:
  bool _internal_has_common() const;
  public:
  void clear_common();
  const ::substrait::RelCommon& common() const;
  PROTOBUF_NODISCARD ::substrait::RelCommon* release_common();
  ::substrait::RelCommon* mutable_common();
  void set_allocated_common(::substrait::RelCommon* common);
  private:
  const ::substrait::RelCommon& _internal_common() const;
  ::substrait::RelCommon* _internal_mutable_common();
  public:
  void unsafe_arena_set_allocated_common(
      ::substrait::RelCommon* common);
  ::substrait::RelCommon* unsafe_arena_release_common();

  // .google.protobuf.Any detail = 3 [json_name = "detail"];
  bool has_detail() const;
  private:
  bool _internal_has_detail() const;
  public:
  void clear_detail();
  const ::PROTOBUF_NAMESPACE_ID::Any& detail() const;
  PROTOBUF_NODISCARD ::PROTOBUF_NAMESPACE_ID::Any* release_detail();
  ::PROTOBUF_NAMESPACE_ID::Any* mutable_detail();
  void set_allocated_detail(::PROTOBUF_NAMESPACE_ID::Any* detail);
  private:
  const ::PROTOBUF_NAMESPACE_ID::Any& _internal_detail() const;
  ::PROTOBUF_NAMESPACE_ID::Any* _internal_mutable_detail();
  public:
  void unsafe_arena_set_allocated_detail(
      ::PROTOBUF_NAMESPACE_ID::Any* detail);
  ::PROTOBUF_NAMESPACE_ID::Any* unsafe_arena_release_detail();

  // @@protoc_insertion_point(class_scope:substrait.ExtensionMultiRel)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Rel > inputs_;
  ::substrait::RelCommon* common_;
  ::PROTOBUF_NAMESPACE_ID::Any* detail_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class RelRoot final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.RelRoot) */ {
 public:
  inline RelRoot() : RelRoot(nullptr) {}
  ~RelRoot() override;
  explicit constexpr RelRoot(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  RelRoot(const RelRoot& from);
  RelRoot(RelRoot&& from) noexcept
    : RelRoot() {
    *this = ::std::move(from);
  }

  inline RelRoot& operator=(const RelRoot& from) {
    CopyFrom(from);
    return *this;
  }
  inline RelRoot& operator=(RelRoot&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const RelRoot& default_instance() {
    return *internal_default_instance();
  }
  static inline const RelRoot* internal_default_instance() {
    return reinterpret_cast<const RelRoot*>(
               &_RelRoot_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    25;

  friend void swap(RelRoot& a, RelRoot& b) {
    a.Swap(&b);
  }
  inline void Swap(RelRoot* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(RelRoot* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  RelRoot* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<RelRoot>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const RelRoot& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const RelRoot& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(RelRoot* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.RelRoot";
  }
  protected:
  explicit RelRoot(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kNamesFieldNumber = 2,
    kInputFieldNumber = 1,
  };
  // repeated string names = 2 [json_name = "names"];
  int names_size() const;
  private:
  int _internal_names_size() const;
  public:
  void clear_names();
  const std::string& names(int index) const;
  std::string* mutable_names(int index);
  void set_names(int index, const std::string& value);
  void set_names(int index, std::string&& value);
  void set_names(int index, const char* value);
  void set_names(int index, const char* value, size_t size);
  std::string* add_names();
  void add_names(const std::string& value);
  void add_names(std::string&& value);
  void add_names(const char* value);
  void add_names(const char* value, size_t size);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& names() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_names();
  private:
  const std::string& _internal_names(int index) const;
  std::string* _internal_add_names();
  public:

  // .substrait.Rel input = 1 [json_name = "input"];
  bool has_input() const;
  private:
  bool _internal_has_input() const;
  public:
  void clear_input();
  const ::substrait::Rel& input() const;
  PROTOBUF_NODISCARD ::substrait::Rel* release_input();
  ::substrait::Rel* mutable_input();
  void set_allocated_input(::substrait::Rel* input);
  private:
  const ::substrait::Rel& _internal_input() const;
  ::substrait::Rel* _internal_mutable_input();
  public:
  void unsafe_arena_set_allocated_input(
      ::substrait::Rel* input);
  ::substrait::Rel* unsafe_arena_release_input();

  // @@protoc_insertion_point(class_scope:substrait.RelRoot)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> names_;
  ::substrait::Rel* input_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Rel final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Rel) */ {
 public:
  inline Rel() : Rel(nullptr) {}
  ~Rel() override;
  explicit constexpr Rel(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Rel(const Rel& from);
  Rel(Rel&& from) noexcept
    : Rel() {
    *this = ::std::move(from);
  }

  inline Rel& operator=(const Rel& from) {
    CopyFrom(from);
    return *this;
  }
  inline Rel& operator=(Rel&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Rel& default_instance() {
    return *internal_default_instance();
  }
  enum RelTypeCase {
    kRead = 1,
    kFilter = 2,
    kFetch = 3,
    kAggregate = 4,
    kSort = 5,
    kJoin = 6,
    kProject = 7,
    kSet = 8,
    kExtensionSingle = 9,
    kExtensionMulti = 10,
    kExtensionLeaf = 11,
    kCross = 12,
    REL_TYPE_NOT_SET = 0,
  };

  static inline const Rel* internal_default_instance() {
    return reinterpret_cast<const Rel*>(
               &_Rel_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    26;

  friend void swap(Rel& a, Rel& b) {
    a.Swap(&b);
  }
  inline void Swap(Rel* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Rel* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Rel* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Rel>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Rel& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Rel& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Rel* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Rel";
  }
  protected:
  explicit Rel(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kReadFieldNumber = 1,
    kFilterFieldNumber = 2,
    kFetchFieldNumber = 3,
    kAggregateFieldNumber = 4,
    kSortFieldNumber = 5,
    kJoinFieldNumber = 6,
    kProjectFieldNumber = 7,
    kSetFieldNumber = 8,
    kExtensionSingleFieldNumber = 9,
    kExtensionMultiFieldNumber = 10,
    kExtensionLeafFieldNumber = 11,
    kCrossFieldNumber = 12,
  };
  // .substrait.ReadRel read = 1 [json_name = "read"];
  bool has_read() const;
  private:
  bool _internal_has_read() const;
  public:
  void clear_read();
  const ::substrait::ReadRel& read() const;
  PROTOBUF_NODISCARD ::substrait::ReadRel* release_read();
  ::substrait::ReadRel* mutable_read();
  void set_allocated_read(::substrait::ReadRel* read);
  private:
  const ::substrait::ReadRel& _internal_read() const;
  ::substrait::ReadRel* _internal_mutable_read();
  public:
  void unsafe_arena_set_allocated_read(
      ::substrait::ReadRel* read);
  ::substrait::ReadRel* unsafe_arena_release_read();

  // .substrait.FilterRel filter = 2 [json_name = "filter"];
  bool has_filter() const;
  private:
  bool _internal_has_filter() const;
  public:
  void clear_filter();
  const ::substrait::FilterRel& filter() const;
  PROTOBUF_NODISCARD ::substrait::FilterRel* release_filter();
  ::substrait::FilterRel* mutable_filter();
  void set_allocated_filter(::substrait::FilterRel* filter);
  private:
  const ::substrait::FilterRel& _internal_filter() const;
  ::substrait::FilterRel* _internal_mutable_filter();
  public:
  void unsafe_arena_set_allocated_filter(
      ::substrait::FilterRel* filter);
  ::substrait::FilterRel* unsafe_arena_release_filter();

  // .substrait.FetchRel fetch = 3 [json_name = "fetch"];
  bool has_fetch() const;
  private:
  bool _internal_has_fetch() const;
  public:
  void clear_fetch();
  const ::substrait::FetchRel& fetch() const;
  PROTOBUF_NODISCARD ::substrait::FetchRel* release_fetch();
  ::substrait::FetchRel* mutable_fetch();
  void set_allocated_fetch(::substrait::FetchRel* fetch);
  private:
  const ::substrait::FetchRel& _internal_fetch() const;
  ::substrait::FetchRel* _internal_mutable_fetch();
  public:
  void unsafe_arena_set_allocated_fetch(
      ::substrait::FetchRel* fetch);
  ::substrait::FetchRel* unsafe_arena_release_fetch();

  // .substrait.AggregateRel aggregate = 4 [json_name = "aggregate"];
  bool has_aggregate() const;
  private:
  bool _internal_has_aggregate() const;
  public:
  void clear_aggregate();
  const ::substrait::AggregateRel& aggregate() const;
  PROTOBUF_NODISCARD ::substrait::AggregateRel* release_aggregate();
  ::substrait::AggregateRel* mutable_aggregate();
  void set_allocated_aggregate(::substrait::AggregateRel* aggregate);
  private:
  const ::substrait::AggregateRel& _internal_aggregate() const;
  ::substrait::AggregateRel* _internal_mutable_aggregate();
  public:
  void unsafe_arena_set_allocated_aggregate(
      ::substrait::AggregateRel* aggregate);
  ::substrait::AggregateRel* unsafe_arena_release_aggregate();

  // .substrait.SortRel sort = 5 [json_name = "sort"];
  bool has_sort() const;
  private:
  bool _internal_has_sort() const;
  public:
  void clear_sort();
  const ::substrait::SortRel& sort() const;
  PROTOBUF_NODISCARD ::substrait::SortRel* release_sort();
  ::substrait::SortRel* mutable_sort();
  void set_allocated_sort(::substrait::SortRel* sort);
  private:
  const ::substrait::SortRel& _internal_sort() const;
  ::substrait::SortRel* _internal_mutable_sort();
  public:
  void unsafe_arena_set_allocated_sort(
      ::substrait::SortRel* sort);
  ::substrait::SortRel* unsafe_arena_release_sort();

  // .substrait.JoinRel join = 6 [json_name = "join"];
  bool has_join() const;
  private:
  bool _internal_has_join() const;
  public:
  void clear_join();
  const ::substrait::JoinRel& join() const;
  PROTOBUF_NODISCARD ::substrait::JoinRel* release_join();
  ::substrait::JoinRel* mutable_join();
  void set_allocated_join(::substrait::JoinRel* join);
  private:
  const ::substrait::JoinRel& _internal_join() const;
  ::substrait::JoinRel* _internal_mutable_join();
  public:
  void unsafe_arena_set_allocated_join(
      ::substrait::JoinRel* join);
  ::substrait::JoinRel* unsafe_arena_release_join();

  // .substrait.ProjectRel project = 7 [json_name = "project"];
  bool has_project() const;
  private:
  bool _internal_has_project() const;
  public:
  void clear_project();
  const ::substrait::ProjectRel& project() const;
  PROTOBUF_NODISCARD ::substrait::ProjectRel* release_project();
  ::substrait::ProjectRel* mutable_project();
  void set_allocated_project(::substrait::ProjectRel* project);
  private:
  const ::substrait::ProjectRel& _internal_project() const;
  ::substrait::ProjectRel* _internal_mutable_project();
  public:
  void unsafe_arena_set_allocated_project(
      ::substrait::ProjectRel* project);
  ::substrait::ProjectRel* unsafe_arena_release_project();

  // .substrait.SetRel set = 8 [json_name = "set"];
  bool has_set() const;
  private:
  bool _internal_has_set() const;
  public:
  void clear_set();
  const ::substrait::SetRel& set() const;
  PROTOBUF_NODISCARD ::substrait::SetRel* release_set();
  ::substrait::SetRel* mutable_set();
  void set_allocated_set(::substrait::SetRel* set);
  private:
  const ::substrait::SetRel& _internal_set() const;
  ::substrait::SetRel* _internal_mutable_set();
  public:
  void unsafe_arena_set_allocated_set(
      ::substrait::SetRel* set);
  ::substrait::SetRel* unsafe_arena_release_set();

  // .substrait.ExtensionSingleRel extension_single = 9 [json_name = "extensionSingle"];
  bool has_extension_single() const;
  private:
  bool _internal_has_extension_single() const;
  public:
  void clear_extension_single();
  const ::substrait::ExtensionSingleRel& extension_single() const;
  PROTOBUF_NODISCARD ::substrait::ExtensionSingleRel* release_extension_single();
  ::substrait::ExtensionSingleRel* mutable_extension_single();
  void set_allocated_extension_single(::substrait::ExtensionSingleRel* extension_single);
  private:
  const ::substrait::ExtensionSingleRel& _internal_extension_single() const;
  ::substrait::ExtensionSingleRel* _internal_mutable_extension_single();
  public:
  void unsafe_arena_set_allocated_extension_single(
      ::substrait::ExtensionSingleRel* extension_single);
  ::substrait::ExtensionSingleRel* unsafe_arena_release_extension_single();

  // .substrait.ExtensionMultiRel extension_multi = 10 [json_name = "extensionMulti"];
  bool has_extension_multi() const;
  private:
  bool _internal_has_extension_multi() const;
  public:
  void clear_extension_multi();
  const ::substrait::ExtensionMultiRel& extension_multi() const;
  PROTOBUF_NODISCARD ::substrait::ExtensionMultiRel* release_extension_multi();
  ::substrait::ExtensionMultiRel* mutable_extension_multi();
  void set_allocated_extension_multi(::substrait::ExtensionMultiRel* extension_multi);
  private:
  const ::substrait::ExtensionMultiRel& _internal_extension_multi() const;
  ::substrait::ExtensionMultiRel* _internal_mutable_extension_multi();
  public:
  void unsafe_arena_set_allocated_extension_multi(
      ::substrait::ExtensionMultiRel* extension_multi);
  ::substrait::ExtensionMultiRel* unsafe_arena_release_extension_multi();

  // .substrait.ExtensionLeafRel extension_leaf = 11 [json_name = "extensionLeaf"];
  bool has_extension_leaf() const;
  private:
  bool _internal_has_extension_leaf() const;
  public:
  void clear_extension_leaf();
  const ::substrait::ExtensionLeafRel& extension_leaf() const;
  PROTOBUF_NODISCARD ::substrait::ExtensionLeafRel* release_extension_leaf();
  ::substrait::ExtensionLeafRel* mutable_extension_leaf();
  void set_allocated_extension_leaf(::substrait::ExtensionLeafRel* extension_leaf);
  private:
  const ::substrait::ExtensionLeafRel& _internal_extension_leaf() const;
  ::substrait::ExtensionLeafRel* _internal_mutable_extension_leaf();
  public:
  void unsafe_arena_set_allocated_extension_leaf(
      ::substrait::ExtensionLeafRel* extension_leaf);
  ::substrait::ExtensionLeafRel* unsafe_arena_release_extension_leaf();

  // .substrait.CrossRel cross = 12 [json_name = "cross"];
  bool has_cross() const;
  private:
  bool _internal_has_cross() const;
  public:
  void clear_cross();
  const ::substrait::CrossRel& cross() const;
  PROTOBUF_NODISCARD ::substrait::CrossRel* release_cross();
  ::substrait::CrossRel* mutable_cross();
  void set_allocated_cross(::substrait::CrossRel* cross);
  private:
  const ::substrait::CrossRel& _internal_cross() const;
  ::substrait::CrossRel* _internal_mutable_cross();
  public:
  void unsafe_arena_set_allocated_cross(
      ::substrait::CrossRel* cross);
  ::substrait::CrossRel* unsafe_arena_release_cross();

  void clear_rel_type();
  RelTypeCase rel_type_case() const;
  // @@protoc_insertion_point(class_scope:substrait.Rel)
 private:
  class _Internal;
  void set_has_read();
  void set_has_filter();
  void set_has_fetch();
  void set_has_aggregate();
  void set_has_sort();
  void set_has_join();
  void set_has_project();
  void set_has_set();
  void set_has_extension_single();
  void set_has_extension_multi();
  void set_has_extension_leaf();
  void set_has_cross();

  inline bool has_rel_type() const;
  inline void clear_has_rel_type();

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  union RelTypeUnion {
    constexpr RelTypeUnion() : _constinit_{} {}
      ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized _constinit_;
    ::substrait::ReadRel* read_;
    ::substrait::FilterRel* filter_;
    ::substrait::FetchRel* fetch_;
    ::substrait::AggregateRel* aggregate_;
    ::substrait::SortRel* sort_;
    ::substrait::JoinRel* join_;
    ::substrait::ProjectRel* project_;
    ::substrait::SetRel* set_;
    ::substrait::ExtensionSingleRel* extension_single_;
    ::substrait::ExtensionMultiRel* extension_multi_;
    ::substrait::ExtensionLeafRel* extension_leaf_;
    ::substrait::CrossRel* cross_;
  } rel_type_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  uint32_t _oneof_case_[1];

  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_Enum_Empty final :
    public ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase /* @@protoc_insertion_point(class_definition:substrait.Expression.Enum.Empty) */ {
 public:
  inline Expression_Enum_Empty() : Expression_Enum_Empty(nullptr) {}
  explicit constexpr Expression_Enum_Empty(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_Enum_Empty(const Expression_Enum_Empty& from);
  Expression_Enum_Empty(Expression_Enum_Empty&& from) noexcept
    : Expression_Enum_Empty() {
    *this = ::std::move(from);
  }

  inline Expression_Enum_Empty& operator=(const Expression_Enum_Empty& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_Enum_Empty& operator=(Expression_Enum_Empty&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_Enum_Empty& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_Enum_Empty* internal_default_instance() {
    return reinterpret_cast<const Expression_Enum_Empty*>(
               &_Expression_Enum_Empty_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    27;

  friend void swap(Expression_Enum_Empty& a, Expression_Enum_Empty& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_Enum_Empty* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_Enum_Empty* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_Enum_Empty* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_Enum_Empty>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::CopyFrom;
  inline void CopyFrom(const Expression_Enum_Empty& from) {
    ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::CopyImpl(this, from);
  }
  using ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::MergeFrom;
  void MergeFrom(const Expression_Enum_Empty& from) {
    ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::MergeImpl(this, from);
  }
  public:

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.Enum.Empty";
  }
  protected:
  explicit Expression_Enum_Empty(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // @@protoc_insertion_point(class_scope:substrait.Expression.Enum.Empty)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_Enum final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.Enum) */ {
 public:
  inline Expression_Enum() : Expression_Enum(nullptr) {}
  ~Expression_Enum() override;
  explicit constexpr Expression_Enum(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_Enum(const Expression_Enum& from);
  Expression_Enum(Expression_Enum&& from) noexcept
    : Expression_Enum() {
    *this = ::std::move(from);
  }

  inline Expression_Enum& operator=(const Expression_Enum& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_Enum& operator=(Expression_Enum&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_Enum& default_instance() {
    return *internal_default_instance();
  }
  enum EnumKindCase {
    kSpecified = 1,
    kUnspecified = 2,
    ENUM_KIND_NOT_SET = 0,
  };

  static inline const Expression_Enum* internal_default_instance() {
    return reinterpret_cast<const Expression_Enum*>(
               &_Expression_Enum_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    28;

  friend void swap(Expression_Enum& a, Expression_Enum& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_Enum* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_Enum* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_Enum* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_Enum>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_Enum& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_Enum& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_Enum* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.Enum";
  }
  protected:
  explicit Expression_Enum(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef Expression_Enum_Empty Empty;

  // accessors -------------------------------------------------------

  enum : int {
    kSpecifiedFieldNumber = 1,
    kUnspecifiedFieldNumber = 2,
  };
  // string specified = 1 [json_name = "specified"];
  bool has_specified() const;
  private:
  bool _internal_has_specified() const;
  public:
  void clear_specified();
  const std::string& specified() const;
  template <typename ArgT0 = const std::string&, typename... ArgT>
  void set_specified(ArgT0&& arg0, ArgT... args);
  std::string* mutable_specified();
  PROTOBUF_NODISCARD std::string* release_specified();
  void set_allocated_specified(std::string* specified);
  private:
  const std::string& _internal_specified() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_specified(const std::string& value);
  std::string* _internal_mutable_specified();
  public:

  // .substrait.Expression.Enum.Empty unspecified = 2 [json_name = "unspecified"];
  bool has_unspecified() const;
  private:
  bool _internal_has_unspecified() const;
  public:
  void clear_unspecified();
  const ::substrait::Expression_Enum_Empty& unspecified() const;
  PROTOBUF_NODISCARD ::substrait::Expression_Enum_Empty* release_unspecified();
  ::substrait::Expression_Enum_Empty* mutable_unspecified();
  void set_allocated_unspecified(::substrait::Expression_Enum_Empty* unspecified);
  private:
  const ::substrait::Expression_Enum_Empty& _internal_unspecified() const;
  ::substrait::Expression_Enum_Empty* _internal_mutable_unspecified();
  public:
  void unsafe_arena_set_allocated_unspecified(
      ::substrait::Expression_Enum_Empty* unspecified);
  ::substrait::Expression_Enum_Empty* unsafe_arena_release_unspecified();

  void clear_enum_kind();
  EnumKindCase enum_kind_case() const;
  // @@protoc_insertion_point(class_scope:substrait.Expression.Enum)
 private:
  class _Internal;
  void set_has_specified();
  void set_has_unspecified();

  inline bool has_enum_kind() const;
  inline void clear_has_enum_kind();

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  union EnumKindUnion {
    constexpr EnumKindUnion() : _constinit_{} {}
      ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized _constinit_;
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr specified_;
    ::substrait::Expression_Enum_Empty* unspecified_;
  } enum_kind_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  uint32_t _oneof_case_[1];

  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_Literal_VarChar final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.Literal.VarChar) */ {
 public:
  inline Expression_Literal_VarChar() : Expression_Literal_VarChar(nullptr) {}
  ~Expression_Literal_VarChar() override;
  explicit constexpr Expression_Literal_VarChar(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_Literal_VarChar(const Expression_Literal_VarChar& from);
  Expression_Literal_VarChar(Expression_Literal_VarChar&& from) noexcept
    : Expression_Literal_VarChar() {
    *this = ::std::move(from);
  }

  inline Expression_Literal_VarChar& operator=(const Expression_Literal_VarChar& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_Literal_VarChar& operator=(Expression_Literal_VarChar&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_Literal_VarChar& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_Literal_VarChar* internal_default_instance() {
    return reinterpret_cast<const Expression_Literal_VarChar*>(
               &_Expression_Literal_VarChar_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    29;

  friend void swap(Expression_Literal_VarChar& a, Expression_Literal_VarChar& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_Literal_VarChar* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_Literal_VarChar* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_Literal_VarChar* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_Literal_VarChar>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_Literal_VarChar& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_Literal_VarChar& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_Literal_VarChar* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.Literal.VarChar";
  }
  protected:
  explicit Expression_Literal_VarChar(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kValueFieldNumber = 1,
    kLengthFieldNumber = 2,
  };
  // string value = 1 [json_name = "value"];
  void clear_value();
  const std::string& value() const;
  template <typename ArgT0 = const std::string&, typename... ArgT>
  void set_value(ArgT0&& arg0, ArgT... args);
  std::string* mutable_value();
  PROTOBUF_NODISCARD std::string* release_value();
  void set_allocated_value(std::string* value);
  private:
  const std::string& _internal_value() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_value(const std::string& value);
  std::string* _internal_mutable_value();
  public:

  // uint32 length = 2 [json_name = "length"];
  void clear_length();
  uint32_t length() const;
  void set_length(uint32_t value);
  private:
  uint32_t _internal_length() const;
  void _internal_set_length(uint32_t value);
  public:

  // @@protoc_insertion_point(class_scope:substrait.Expression.Literal.VarChar)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr value_;
  uint32_t length_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_Literal_Decimal final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.Literal.Decimal) */ {
 public:
  inline Expression_Literal_Decimal() : Expression_Literal_Decimal(nullptr) {}
  ~Expression_Literal_Decimal() override;
  explicit constexpr Expression_Literal_Decimal(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_Literal_Decimal(const Expression_Literal_Decimal& from);
  Expression_Literal_Decimal(Expression_Literal_Decimal&& from) noexcept
    : Expression_Literal_Decimal() {
    *this = ::std::move(from);
  }

  inline Expression_Literal_Decimal& operator=(const Expression_Literal_Decimal& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_Literal_Decimal& operator=(Expression_Literal_Decimal&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_Literal_Decimal& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_Literal_Decimal* internal_default_instance() {
    return reinterpret_cast<const Expression_Literal_Decimal*>(
               &_Expression_Literal_Decimal_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    30;

  friend void swap(Expression_Literal_Decimal& a, Expression_Literal_Decimal& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_Literal_Decimal* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_Literal_Decimal* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_Literal_Decimal* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_Literal_Decimal>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_Literal_Decimal& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_Literal_Decimal& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_Literal_Decimal* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.Literal.Decimal";
  }
  protected:
  explicit Expression_Literal_Decimal(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kValueFieldNumber = 1,
    kPrecisionFieldNumber = 2,
    kScaleFieldNumber = 3,
  };
  // bytes value = 1 [json_name = "value"];
  void clear_value();
  const std::string& value() const;
  template <typename ArgT0 = const std::string&, typename... ArgT>
  void set_value(ArgT0&& arg0, ArgT... args);
  std::string* mutable_value();
  PROTOBUF_NODISCARD std::string* release_value();
  void set_allocated_value(std::string* value);
  private:
  const std::string& _internal_value() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_value(const std::string& value);
  std::string* _internal_mutable_value();
  public:

  // int32 precision = 2 [json_name = "precision"];
  void clear_precision();
  int32_t precision() const;
  void set_precision(int32_t value);
  private:
  int32_t _internal_precision() const;
  void _internal_set_precision(int32_t value);
  public:

  // int32 scale = 3 [json_name = "scale"];
  void clear_scale();
  int32_t scale() const;
  void set_scale(int32_t value);
  private:
  int32_t _internal_scale() const;
  void _internal_set_scale(int32_t value);
  public:

  // @@protoc_insertion_point(class_scope:substrait.Expression.Literal.Decimal)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr value_;
  int32_t precision_;
  int32_t scale_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_Literal_Map_KeyValue final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.Literal.Map.KeyValue) */ {
 public:
  inline Expression_Literal_Map_KeyValue() : Expression_Literal_Map_KeyValue(nullptr) {}
  ~Expression_Literal_Map_KeyValue() override;
  explicit constexpr Expression_Literal_Map_KeyValue(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_Literal_Map_KeyValue(const Expression_Literal_Map_KeyValue& from);
  Expression_Literal_Map_KeyValue(Expression_Literal_Map_KeyValue&& from) noexcept
    : Expression_Literal_Map_KeyValue() {
    *this = ::std::move(from);
  }

  inline Expression_Literal_Map_KeyValue& operator=(const Expression_Literal_Map_KeyValue& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_Literal_Map_KeyValue& operator=(Expression_Literal_Map_KeyValue&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_Literal_Map_KeyValue& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_Literal_Map_KeyValue* internal_default_instance() {
    return reinterpret_cast<const Expression_Literal_Map_KeyValue*>(
               &_Expression_Literal_Map_KeyValue_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    31;

  friend void swap(Expression_Literal_Map_KeyValue& a, Expression_Literal_Map_KeyValue& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_Literal_Map_KeyValue* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_Literal_Map_KeyValue* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_Literal_Map_KeyValue* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_Literal_Map_KeyValue>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_Literal_Map_KeyValue& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_Literal_Map_KeyValue& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_Literal_Map_KeyValue* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.Literal.Map.KeyValue";
  }
  protected:
  explicit Expression_Literal_Map_KeyValue(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kKeyFieldNumber = 1,
    kValueFieldNumber = 2,
  };
  // .substrait.Expression.Literal key = 1 [json_name = "key"];
  bool has_key() const;
  private:
  bool _internal_has_key() const;
  public:
  void clear_key();
  const ::substrait::Expression_Literal& key() const;
  PROTOBUF_NODISCARD ::substrait::Expression_Literal* release_key();
  ::substrait::Expression_Literal* mutable_key();
  void set_allocated_key(::substrait::Expression_Literal* key);
  private:
  const ::substrait::Expression_Literal& _internal_key() const;
  ::substrait::Expression_Literal* _internal_mutable_key();
  public:
  void unsafe_arena_set_allocated_key(
      ::substrait::Expression_Literal* key);
  ::substrait::Expression_Literal* unsafe_arena_release_key();

  // .substrait.Expression.Literal value = 2 [json_name = "value"];
  bool has_value() const;
  private:
  bool _internal_has_value() const;
  public:
  void clear_value();
  const ::substrait::Expression_Literal& value() const;
  PROTOBUF_NODISCARD ::substrait::Expression_Literal* release_value();
  ::substrait::Expression_Literal* mutable_value();
  void set_allocated_value(::substrait::Expression_Literal* value);
  private:
  const ::substrait::Expression_Literal& _internal_value() const;
  ::substrait::Expression_Literal* _internal_mutable_value();
  public:
  void unsafe_arena_set_allocated_value(
      ::substrait::Expression_Literal* value);
  ::substrait::Expression_Literal* unsafe_arena_release_value();

  // @@protoc_insertion_point(class_scope:substrait.Expression.Literal.Map.KeyValue)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::substrait::Expression_Literal* key_;
  ::substrait::Expression_Literal* value_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_Literal_Map final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.Literal.Map) */ {
 public:
  inline Expression_Literal_Map() : Expression_Literal_Map(nullptr) {}
  ~Expression_Literal_Map() override;
  explicit constexpr Expression_Literal_Map(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_Literal_Map(const Expression_Literal_Map& from);
  Expression_Literal_Map(Expression_Literal_Map&& from) noexcept
    : Expression_Literal_Map() {
    *this = ::std::move(from);
  }

  inline Expression_Literal_Map& operator=(const Expression_Literal_Map& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_Literal_Map& operator=(Expression_Literal_Map&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_Literal_Map& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_Literal_Map* internal_default_instance() {
    return reinterpret_cast<const Expression_Literal_Map*>(
               &_Expression_Literal_Map_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    32;

  friend void swap(Expression_Literal_Map& a, Expression_Literal_Map& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_Literal_Map* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_Literal_Map* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_Literal_Map* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_Literal_Map>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_Literal_Map& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_Literal_Map& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_Literal_Map* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.Literal.Map";
  }
  protected:
  explicit Expression_Literal_Map(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef Expression_Literal_Map_KeyValue KeyValue;

  // accessors -------------------------------------------------------

  enum : int {
    kKeyValuesFieldNumber = 1,
  };
  // repeated .substrait.Expression.Literal.Map.KeyValue key_values = 1 [json_name = "keyValues"];
  int key_values_size() const;
  private:
  int _internal_key_values_size() const;
  public:
  void clear_key_values();
  ::substrait::Expression_Literal_Map_KeyValue* mutable_key_values(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_Literal_Map_KeyValue >*
      mutable_key_values();
  private:
  const ::substrait::Expression_Literal_Map_KeyValue& _internal_key_values(int index) const;
  ::substrait::Expression_Literal_Map_KeyValue* _internal_add_key_values();
  public:
  const ::substrait::Expression_Literal_Map_KeyValue& key_values(int index) const;
  ::substrait::Expression_Literal_Map_KeyValue* add_key_values();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_Literal_Map_KeyValue >&
      key_values() const;

  // @@protoc_insertion_point(class_scope:substrait.Expression.Literal.Map)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_Literal_Map_KeyValue > key_values_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_Literal_IntervalYearToMonth final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.Literal.IntervalYearToMonth) */ {
 public:
  inline Expression_Literal_IntervalYearToMonth() : Expression_Literal_IntervalYearToMonth(nullptr) {}
  ~Expression_Literal_IntervalYearToMonth() override;
  explicit constexpr Expression_Literal_IntervalYearToMonth(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_Literal_IntervalYearToMonth(const Expression_Literal_IntervalYearToMonth& from);
  Expression_Literal_IntervalYearToMonth(Expression_Literal_IntervalYearToMonth&& from) noexcept
    : Expression_Literal_IntervalYearToMonth() {
    *this = ::std::move(from);
  }

  inline Expression_Literal_IntervalYearToMonth& operator=(const Expression_Literal_IntervalYearToMonth& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_Literal_IntervalYearToMonth& operator=(Expression_Literal_IntervalYearToMonth&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_Literal_IntervalYearToMonth& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_Literal_IntervalYearToMonth* internal_default_instance() {
    return reinterpret_cast<const Expression_Literal_IntervalYearToMonth*>(
               &_Expression_Literal_IntervalYearToMonth_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    33;

  friend void swap(Expression_Literal_IntervalYearToMonth& a, Expression_Literal_IntervalYearToMonth& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_Literal_IntervalYearToMonth* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_Literal_IntervalYearToMonth* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_Literal_IntervalYearToMonth* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_Literal_IntervalYearToMonth>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_Literal_IntervalYearToMonth& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_Literal_IntervalYearToMonth& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_Literal_IntervalYearToMonth* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.Literal.IntervalYearToMonth";
  }
  protected:
  explicit Expression_Literal_IntervalYearToMonth(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kYearsFieldNumber = 1,
    kMonthsFieldNumber = 2,
  };
  // int32 years = 1 [json_name = "years"];
  void clear_years();
  int32_t years() const;
  void set_years(int32_t value);
  private:
  int32_t _internal_years() const;
  void _internal_set_years(int32_t value);
  public:

  // int32 months = 2 [json_name = "months"];
  void clear_months();
  int32_t months() const;
  void set_months(int32_t value);
  private:
  int32_t _internal_months() const;
  void _internal_set_months(int32_t value);
  public:

  // @@protoc_insertion_point(class_scope:substrait.Expression.Literal.IntervalYearToMonth)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  int32_t years_;
  int32_t months_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_Literal_IntervalDayToSecond final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.Literal.IntervalDayToSecond) */ {
 public:
  inline Expression_Literal_IntervalDayToSecond() : Expression_Literal_IntervalDayToSecond(nullptr) {}
  ~Expression_Literal_IntervalDayToSecond() override;
  explicit constexpr Expression_Literal_IntervalDayToSecond(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_Literal_IntervalDayToSecond(const Expression_Literal_IntervalDayToSecond& from);
  Expression_Literal_IntervalDayToSecond(Expression_Literal_IntervalDayToSecond&& from) noexcept
    : Expression_Literal_IntervalDayToSecond() {
    *this = ::std::move(from);
  }

  inline Expression_Literal_IntervalDayToSecond& operator=(const Expression_Literal_IntervalDayToSecond& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_Literal_IntervalDayToSecond& operator=(Expression_Literal_IntervalDayToSecond&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_Literal_IntervalDayToSecond& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_Literal_IntervalDayToSecond* internal_default_instance() {
    return reinterpret_cast<const Expression_Literal_IntervalDayToSecond*>(
               &_Expression_Literal_IntervalDayToSecond_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    34;

  friend void swap(Expression_Literal_IntervalDayToSecond& a, Expression_Literal_IntervalDayToSecond& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_Literal_IntervalDayToSecond* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_Literal_IntervalDayToSecond* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_Literal_IntervalDayToSecond* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_Literal_IntervalDayToSecond>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_Literal_IntervalDayToSecond& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_Literal_IntervalDayToSecond& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_Literal_IntervalDayToSecond* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.Literal.IntervalDayToSecond";
  }
  protected:
  explicit Expression_Literal_IntervalDayToSecond(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kDaysFieldNumber = 1,
    kSecondsFieldNumber = 2,
  };
  // int32 days = 1 [json_name = "days"];
  void clear_days();
  int32_t days() const;
  void set_days(int32_t value);
  private:
  int32_t _internal_days() const;
  void _internal_set_days(int32_t value);
  public:

  // int32 seconds = 2 [json_name = "seconds"];
  void clear_seconds();
  int32_t seconds() const;
  void set_seconds(int32_t value);
  private:
  int32_t _internal_seconds() const;
  void _internal_set_seconds(int32_t value);
  public:

  // @@protoc_insertion_point(class_scope:substrait.Expression.Literal.IntervalDayToSecond)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  int32_t days_;
  int32_t seconds_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_Literal_Struct final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.Literal.Struct) */ {
 public:
  inline Expression_Literal_Struct() : Expression_Literal_Struct(nullptr) {}
  ~Expression_Literal_Struct() override;
  explicit constexpr Expression_Literal_Struct(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_Literal_Struct(const Expression_Literal_Struct& from);
  Expression_Literal_Struct(Expression_Literal_Struct&& from) noexcept
    : Expression_Literal_Struct() {
    *this = ::std::move(from);
  }

  inline Expression_Literal_Struct& operator=(const Expression_Literal_Struct& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_Literal_Struct& operator=(Expression_Literal_Struct&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_Literal_Struct& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_Literal_Struct* internal_default_instance() {
    return reinterpret_cast<const Expression_Literal_Struct*>(
               &_Expression_Literal_Struct_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    35;

  friend void swap(Expression_Literal_Struct& a, Expression_Literal_Struct& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_Literal_Struct* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_Literal_Struct* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_Literal_Struct* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_Literal_Struct>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_Literal_Struct& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_Literal_Struct& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_Literal_Struct* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.Literal.Struct";
  }
  protected:
  explicit Expression_Literal_Struct(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kFieldsFieldNumber = 1,
  };
  // repeated .substrait.Expression.Literal fields = 1 [json_name = "fields"];
  int fields_size() const;
  private:
  int _internal_fields_size() const;
  public:
  void clear_fields();
  ::substrait::Expression_Literal* mutable_fields(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_Literal >*
      mutable_fields();
  private:
  const ::substrait::Expression_Literal& _internal_fields(int index) const;
  ::substrait::Expression_Literal* _internal_add_fields();
  public:
  const ::substrait::Expression_Literal& fields(int index) const;
  ::substrait::Expression_Literal* add_fields();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_Literal >&
      fields() const;

  // @@protoc_insertion_point(class_scope:substrait.Expression.Literal.Struct)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_Literal > fields_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_Literal_List final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.Literal.List) */ {
 public:
  inline Expression_Literal_List() : Expression_Literal_List(nullptr) {}
  ~Expression_Literal_List() override;
  explicit constexpr Expression_Literal_List(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_Literal_List(const Expression_Literal_List& from);
  Expression_Literal_List(Expression_Literal_List&& from) noexcept
    : Expression_Literal_List() {
    *this = ::std::move(from);
  }

  inline Expression_Literal_List& operator=(const Expression_Literal_List& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_Literal_List& operator=(Expression_Literal_List&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_Literal_List& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_Literal_List* internal_default_instance() {
    return reinterpret_cast<const Expression_Literal_List*>(
               &_Expression_Literal_List_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    36;

  friend void swap(Expression_Literal_List& a, Expression_Literal_List& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_Literal_List* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_Literal_List* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_Literal_List* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_Literal_List>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_Literal_List& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_Literal_List& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_Literal_List* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.Literal.List";
  }
  protected:
  explicit Expression_Literal_List(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kValuesFieldNumber = 1,
  };
  // repeated .substrait.Expression.Literal values = 1 [json_name = "values"];
  int values_size() const;
  private:
  int _internal_values_size() const;
  public:
  void clear_values();
  ::substrait::Expression_Literal* mutable_values(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_Literal >*
      mutable_values();
  private:
  const ::substrait::Expression_Literal& _internal_values(int index) const;
  ::substrait::Expression_Literal* _internal_add_values();
  public:
  const ::substrait::Expression_Literal& values(int index) const;
  ::substrait::Expression_Literal* add_values();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_Literal >&
      values() const;

  // @@protoc_insertion_point(class_scope:substrait.Expression.Literal.List)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_Literal > values_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_Literal final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.Literal) */ {
 public:
  inline Expression_Literal() : Expression_Literal(nullptr) {}
  ~Expression_Literal() override;
  explicit constexpr Expression_Literal(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_Literal(const Expression_Literal& from);
  Expression_Literal(Expression_Literal&& from) noexcept
    : Expression_Literal() {
    *this = ::std::move(from);
  }

  inline Expression_Literal& operator=(const Expression_Literal& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_Literal& operator=(Expression_Literal&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_Literal& default_instance() {
    return *internal_default_instance();
  }
  enum LiteralTypeCase {
    kBoolean = 1,
    kI8 = 2,
    kI16 = 3,
    kI32 = 5,
    kI64 = 7,
    kFp32 = 10,
    kFp64 = 11,
    kString = 12,
    kBinary = 13,
    kTimestamp = 14,
    kDate = 16,
    kTime = 17,
    kIntervalYearToMonth = 19,
    kIntervalDayToSecond = 20,
    kFixedChar = 21,
    kVarChar = 22,
    kFixedBinary = 23,
    kDecimal = 24,
    kStruct = 25,
    kMap = 26,
    kTimestampTz = 27,
    kUuid = 28,
    kNull = 29,
    kList = 30,
    kEmptyList = 31,
    kEmptyMap = 32,
    LITERAL_TYPE_NOT_SET = 0,
  };

  static inline const Expression_Literal* internal_default_instance() {
    return reinterpret_cast<const Expression_Literal*>(
               &_Expression_Literal_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    37;

  friend void swap(Expression_Literal& a, Expression_Literal& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_Literal* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_Literal* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_Literal* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_Literal>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_Literal& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_Literal& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_Literal* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.Literal";
  }
  protected:
  explicit Expression_Literal(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef Expression_Literal_VarChar VarChar;
  typedef Expression_Literal_Decimal Decimal;
  typedef Expression_Literal_Map Map;
  typedef Expression_Literal_IntervalYearToMonth IntervalYearToMonth;
  typedef Expression_Literal_IntervalDayToSecond IntervalDayToSecond;
  typedef Expression_Literal_Struct Struct;
  typedef Expression_Literal_List List;

  // accessors -------------------------------------------------------

  enum : int {
    kNullableFieldNumber = 50,
    kBooleanFieldNumber = 1,
    kI8FieldNumber = 2,
    kI16FieldNumber = 3,
    kI32FieldNumber = 5,
    kI64FieldNumber = 7,
    kFp32FieldNumber = 10,
    kFp64FieldNumber = 11,
    kStringFieldNumber = 12,
    kBinaryFieldNumber = 13,
    kTimestampFieldNumber = 14,
    kDateFieldNumber = 16,
    kTimeFieldNumber = 17,
    kIntervalYearToMonthFieldNumber = 19,
    kIntervalDayToSecondFieldNumber = 20,
    kFixedCharFieldNumber = 21,
    kVarCharFieldNumber = 22,
    kFixedBinaryFieldNumber = 23,
    kDecimalFieldNumber = 24,
    kStructFieldNumber = 25,
    kMapFieldNumber = 26,
    kTimestampTzFieldNumber = 27,
    kUuidFieldNumber = 28,
    kNullFieldNumber = 29,
    kListFieldNumber = 30,
    kEmptyListFieldNumber = 31,
    kEmptyMapFieldNumber = 32,
  };
  // bool nullable = 50 [json_name = "nullable"];
  void clear_nullable();
  bool nullable() const;
  void set_nullable(bool value);
  private:
  bool _internal_nullable() const;
  void _internal_set_nullable(bool value);
  public:

  // bool boolean = 1 [json_name = "boolean"];
  bool has_boolean() const;
  private:
  bool _internal_has_boolean() const;
  public:
  void clear_boolean();
  bool boolean() const;
  void set_boolean(bool value);
  private:
  bool _internal_boolean() const;
  void _internal_set_boolean(bool value);
  public:

  // int32 i8 = 2 [json_name = "i8"];
  bool has_i8() const;
  private:
  bool _internal_has_i8() const;
  public:
  void clear_i8();
  int32_t i8() const;
  void set_i8(int32_t value);
  private:
  int32_t _internal_i8() const;
  void _internal_set_i8(int32_t value);
  public:

  // int32 i16 = 3 [json_name = "i16"];
  bool has_i16() const;
  private:
  bool _internal_has_i16() const;
  public:
  void clear_i16();
  int32_t i16() const;
  void set_i16(int32_t value);
  private:
  int32_t _internal_i16() const;
  void _internal_set_i16(int32_t value);
  public:

  // int32 i32 = 5 [json_name = "i32"];
  bool has_i32() const;
  private:
  bool _internal_has_i32() const;
  public:
  void clear_i32();
  int32_t i32() const;
  void set_i32(int32_t value);
  private:
  int32_t _internal_i32() const;
  void _internal_set_i32(int32_t value);
  public:

  // int64 i64 = 7 [json_name = "i64"];
  bool has_i64() const;
  private:
  bool _internal_has_i64() const;
  public:
  void clear_i64();
  int64_t i64() const;
  void set_i64(int64_t value);
  private:
  int64_t _internal_i64() const;
  void _internal_set_i64(int64_t value);
  public:

  // float fp32 = 10 [json_name = "fp32"];
  bool has_fp32() const;
  private:
  bool _internal_has_fp32() const;
  public:
  void clear_fp32();
  float fp32() const;
  void set_fp32(float value);
  private:
  float _internal_fp32() const;
  void _internal_set_fp32(float value);
  public:

  // double fp64 = 11 [json_name = "fp64"];
  bool has_fp64() const;
  private:
  bool _internal_has_fp64() const;
  public:
  void clear_fp64();
  double fp64() const;
  void set_fp64(double value);
  private:
  double _internal_fp64() const;
  void _internal_set_fp64(double value);
  public:

  // string string = 12 [json_name = "string"];
  bool has_string() const;
  private:
  bool _internal_has_string() const;
  public:
  void clear_string();
  const std::string& string() const;
  template <typename ArgT0 = const std::string&, typename... ArgT>
  void set_string(ArgT0&& arg0, ArgT... args);
  std::string* mutable_string();
  PROTOBUF_NODISCARD std::string* release_string();
  void set_allocated_string(std::string* string);
  private:
  const std::string& _internal_string() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_string(const std::string& value);
  std::string* _internal_mutable_string();
  public:

  // bytes binary = 13 [json_name = "binary"];
  bool has_binary() const;
  private:
  bool _internal_has_binary() const;
  public:
  void clear_binary();
  const std::string& binary() const;
  template <typename ArgT0 = const std::string&, typename... ArgT>
  void set_binary(ArgT0&& arg0, ArgT... args);
  std::string* mutable_binary();
  PROTOBUF_NODISCARD std::string* release_binary();
  void set_allocated_binary(std::string* binary);
  private:
  const std::string& _internal_binary() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_binary(const std::string& value);
  std::string* _internal_mutable_binary();
  public:

  // int64 timestamp = 14 [json_name = "timestamp"];
  bool has_timestamp() const;
  private:
  bool _internal_has_timestamp() const;
  public:
  void clear_timestamp();
  int64_t timestamp() const;
  void set_timestamp(int64_t value);
  private:
  int64_t _internal_timestamp() const;
  void _internal_set_timestamp(int64_t value);
  public:

  // int32 date = 16 [json_name = "date"];
  bool has_date() const;
  private:
  bool _internal_has_date() const;
  public:
  void clear_date();
  int32_t date() const;
  void set_date(int32_t value);
  private:
  int32_t _internal_date() const;
  void _internal_set_date(int32_t value);
  public:

  // int64 time = 17 [json_name = "time"];
  bool has_time() const;
  private:
  bool _internal_has_time() const;
  public:
  void clear_time();
  int64_t time() const;
  void set_time(int64_t value);
  private:
  int64_t _internal_time() const;
  void _internal_set_time(int64_t value);
  public:

  // .substrait.Expression.Literal.IntervalYearToMonth interval_year_to_month = 19 [json_name = "intervalYearToMonth"];
  bool has_interval_year_to_month() const;
  private:
  bool _internal_has_interval_year_to_month() const;
  public:
  void clear_interval_year_to_month();
  const ::substrait::Expression_Literal_IntervalYearToMonth& interval_year_to_month() const;
  PROTOBUF_NODISCARD ::substrait::Expression_Literal_IntervalYearToMonth* release_interval_year_to_month();
  ::substrait::Expression_Literal_IntervalYearToMonth* mutable_interval_year_to_month();
  void set_allocated_interval_year_to_month(::substrait::Expression_Literal_IntervalYearToMonth* interval_year_to_month);
  private:
  const ::substrait::Expression_Literal_IntervalYearToMonth& _internal_interval_year_to_month() const;
  ::substrait::Expression_Literal_IntervalYearToMonth* _internal_mutable_interval_year_to_month();
  public:
  void unsafe_arena_set_allocated_interval_year_to_month(
      ::substrait::Expression_Literal_IntervalYearToMonth* interval_year_to_month);
  ::substrait::Expression_Literal_IntervalYearToMonth* unsafe_arena_release_interval_year_to_month();

  // .substrait.Expression.Literal.IntervalDayToSecond interval_day_to_second = 20 [json_name = "intervalDayToSecond"];
  bool has_interval_day_to_second() const;
  private:
  bool _internal_has_interval_day_to_second() const;
  public:
  void clear_interval_day_to_second();
  const ::substrait::Expression_Literal_IntervalDayToSecond& interval_day_to_second() const;
  PROTOBUF_NODISCARD ::substrait::Expression_Literal_IntervalDayToSecond* release_interval_day_to_second();
  ::substrait::Expression_Literal_IntervalDayToSecond* mutable_interval_day_to_second();
  void set_allocated_interval_day_to_second(::substrait::Expression_Literal_IntervalDayToSecond* interval_day_to_second);
  private:
  const ::substrait::Expression_Literal_IntervalDayToSecond& _internal_interval_day_to_second() const;
  ::substrait::Expression_Literal_IntervalDayToSecond* _internal_mutable_interval_day_to_second();
  public:
  void unsafe_arena_set_allocated_interval_day_to_second(
      ::substrait::Expression_Literal_IntervalDayToSecond* interval_day_to_second);
  ::substrait::Expression_Literal_IntervalDayToSecond* unsafe_arena_release_interval_day_to_second();

  // string fixed_char = 21 [json_name = "fixedChar"];
  bool has_fixed_char() const;
  private:
  bool _internal_has_fixed_char() const;
  public:
  void clear_fixed_char();
  const std::string& fixed_char() const;
  template <typename ArgT0 = const std::string&, typename... ArgT>
  void set_fixed_char(ArgT0&& arg0, ArgT... args);
  std::string* mutable_fixed_char();
  PROTOBUF_NODISCARD std::string* release_fixed_char();
  void set_allocated_fixed_char(std::string* fixed_char);
  private:
  const std::string& _internal_fixed_char() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_fixed_char(const std::string& value);
  std::string* _internal_mutable_fixed_char();
  public:

  // .substrait.Expression.Literal.VarChar var_char = 22 [json_name = "varChar"];
  bool has_var_char() const;
  private:
  bool _internal_has_var_char() const;
  public:
  void clear_var_char();
  const ::substrait::Expression_Literal_VarChar& var_char() const;
  PROTOBUF_NODISCARD ::substrait::Expression_Literal_VarChar* release_var_char();
  ::substrait::Expression_Literal_VarChar* mutable_var_char();
  void set_allocated_var_char(::substrait::Expression_Literal_VarChar* var_char);
  private:
  const ::substrait::Expression_Literal_VarChar& _internal_var_char() const;
  ::substrait::Expression_Literal_VarChar* _internal_mutable_var_char();
  public:
  void unsafe_arena_set_allocated_var_char(
      ::substrait::Expression_Literal_VarChar* var_char);
  ::substrait::Expression_Literal_VarChar* unsafe_arena_release_var_char();

  // bytes fixed_binary = 23 [json_name = "fixedBinary"];
  bool has_fixed_binary() const;
  private:
  bool _internal_has_fixed_binary() const;
  public:
  void clear_fixed_binary();
  const std::string& fixed_binary() const;
  template <typename ArgT0 = const std::string&, typename... ArgT>
  void set_fixed_binary(ArgT0&& arg0, ArgT... args);
  std::string* mutable_fixed_binary();
  PROTOBUF_NODISCARD std::string* release_fixed_binary();
  void set_allocated_fixed_binary(std::string* fixed_binary);
  private:
  const std::string& _internal_fixed_binary() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_fixed_binary(const std::string& value);
  std::string* _internal_mutable_fixed_binary();
  public:

  // .substrait.Expression.Literal.Decimal decimal = 24 [json_name = "decimal"];
  bool has_decimal() const;
  private:
  bool _internal_has_decimal() const;
  public:
  void clear_decimal();
  const ::substrait::Expression_Literal_Decimal& decimal() const;
  PROTOBUF_NODISCARD ::substrait::Expression_Literal_Decimal* release_decimal();
  ::substrait::Expression_Literal_Decimal* mutable_decimal();
  void set_allocated_decimal(::substrait::Expression_Literal_Decimal* decimal);
  private:
  const ::substrait::Expression_Literal_Decimal& _internal_decimal() const;
  ::substrait::Expression_Literal_Decimal* _internal_mutable_decimal();
  public:
  void unsafe_arena_set_allocated_decimal(
      ::substrait::Expression_Literal_Decimal* decimal);
  ::substrait::Expression_Literal_Decimal* unsafe_arena_release_decimal();

  // .substrait.Expression.Literal.Struct struct = 25 [json_name = "struct"];
  bool has_struct_() const;
  private:
  bool _internal_has_struct_() const;
  public:
  void clear_struct_();
  const ::substrait::Expression_Literal_Struct& struct_() const;
  PROTOBUF_NODISCARD ::substrait::Expression_Literal_Struct* release_struct_();
  ::substrait::Expression_Literal_Struct* mutable_struct_();
  void set_allocated_struct_(::substrait::Expression_Literal_Struct* struct_);
  private:
  const ::substrait::Expression_Literal_Struct& _internal_struct_() const;
  ::substrait::Expression_Literal_Struct* _internal_mutable_struct_();
  public:
  void unsafe_arena_set_allocated_struct_(
      ::substrait::Expression_Literal_Struct* struct_);
  ::substrait::Expression_Literal_Struct* unsafe_arena_release_struct_();

  // .substrait.Expression.Literal.Map map = 26 [json_name = "map"];
  bool has_map() const;
  private:
  bool _internal_has_map() const;
  public:
  void clear_map();
  const ::substrait::Expression_Literal_Map& map() const;
  PROTOBUF_NODISCARD ::substrait::Expression_Literal_Map* release_map();
  ::substrait::Expression_Literal_Map* mutable_map();
  void set_allocated_map(::substrait::Expression_Literal_Map* map);
  private:
  const ::substrait::Expression_Literal_Map& _internal_map() const;
  ::substrait::Expression_Literal_Map* _internal_mutable_map();
  public:
  void unsafe_arena_set_allocated_map(
      ::substrait::Expression_Literal_Map* map);
  ::substrait::Expression_Literal_Map* unsafe_arena_release_map();

  // int64 timestamp_tz = 27 [json_name = "timestampTz"];
  bool has_timestamp_tz() const;
  private:
  bool _internal_has_timestamp_tz() const;
  public:
  void clear_timestamp_tz();
  int64_t timestamp_tz() const;
  void set_timestamp_tz(int64_t value);
  private:
  int64_t _internal_timestamp_tz() const;
  void _internal_set_timestamp_tz(int64_t value);
  public:

  // bytes uuid = 28 [json_name = "uuid"];
  bool has_uuid() const;
  private:
  bool _internal_has_uuid() const;
  public:
  void clear_uuid();
  const std::string& uuid() const;
  template <typename ArgT0 = const std::string&, typename... ArgT>
  void set_uuid(ArgT0&& arg0, ArgT... args);
  std::string* mutable_uuid();
  PROTOBUF_NODISCARD std::string* release_uuid();
  void set_allocated_uuid(std::string* uuid);
  private:
  const std::string& _internal_uuid() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_uuid(const std::string& value);
  std::string* _internal_mutable_uuid();
  public:

  // .substrait.Type null = 29 [json_name = "null"];
  bool has_null() const;
  private:
  bool _internal_has_null() const;
  public:
  void clear_null();
  const ::substrait::Type& null() const;
  PROTOBUF_NODISCARD ::substrait::Type* release_null();
  ::substrait::Type* mutable_null();
  void set_allocated_null(::substrait::Type* null);
  private:
  const ::substrait::Type& _internal_null() const;
  ::substrait::Type* _internal_mutable_null();
  public:
  void unsafe_arena_set_allocated_null(
      ::substrait::Type* null);
  ::substrait::Type* unsafe_arena_release_null();

  // .substrait.Expression.Literal.List list = 30 [json_name = "list"];
  bool has_list() const;
  private:
  bool _internal_has_list() const;
  public:
  void clear_list();
  const ::substrait::Expression_Literal_List& list() const;
  PROTOBUF_NODISCARD ::substrait::Expression_Literal_List* release_list();
  ::substrait::Expression_Literal_List* mutable_list();
  void set_allocated_list(::substrait::Expression_Literal_List* list);
  private:
  const ::substrait::Expression_Literal_List& _internal_list() const;
  ::substrait::Expression_Literal_List* _internal_mutable_list();
  public:
  void unsafe_arena_set_allocated_list(
      ::substrait::Expression_Literal_List* list);
  ::substrait::Expression_Literal_List* unsafe_arena_release_list();

  // .substrait.Type.List empty_list = 31 [json_name = "emptyList"];
  bool has_empty_list() const;
  private:
  bool _internal_has_empty_list() const;
  public:
  void clear_empty_list();
  const ::substrait::Type_List& empty_list() const;
  PROTOBUF_NODISCARD ::substrait::Type_List* release_empty_list();
  ::substrait::Type_List* mutable_empty_list();
  void set_allocated_empty_list(::substrait::Type_List* empty_list);
  private:
  const ::substrait::Type_List& _internal_empty_list() const;
  ::substrait::Type_List* _internal_mutable_empty_list();
  public:
  void unsafe_arena_set_allocated_empty_list(
      ::substrait::Type_List* empty_list);
  ::substrait::Type_List* unsafe_arena_release_empty_list();

  // .substrait.Type.Map empty_map = 32 [json_name = "emptyMap"];
  bool has_empty_map() const;
  private:
  bool _internal_has_empty_map() const;
  public:
  void clear_empty_map();
  const ::substrait::Type_Map& empty_map() const;
  PROTOBUF_NODISCARD ::substrait::Type_Map* release_empty_map();
  ::substrait::Type_Map* mutable_empty_map();
  void set_allocated_empty_map(::substrait::Type_Map* empty_map);
  private:
  const ::substrait::Type_Map& _internal_empty_map() const;
  ::substrait::Type_Map* _internal_mutable_empty_map();
  public:
  void unsafe_arena_set_allocated_empty_map(
      ::substrait::Type_Map* empty_map);
  ::substrait::Type_Map* unsafe_arena_release_empty_map();

  void clear_literal_type();
  LiteralTypeCase literal_type_case() const;
  // @@protoc_insertion_point(class_scope:substrait.Expression.Literal)
 private:
  class _Internal;
  void set_has_boolean();
  void set_has_i8();
  void set_has_i16();
  void set_has_i32();
  void set_has_i64();
  void set_has_fp32();
  void set_has_fp64();
  void set_has_string();
  void set_has_binary();
  void set_has_timestamp();
  void set_has_date();
  void set_has_time();
  void set_has_interval_year_to_month();
  void set_has_interval_day_to_second();
  void set_has_fixed_char();
  void set_has_var_char();
  void set_has_fixed_binary();
  void set_has_decimal();
  void set_has_struct_();
  void set_has_map();
  void set_has_timestamp_tz();
  void set_has_uuid();
  void set_has_null();
  void set_has_list();
  void set_has_empty_list();
  void set_has_empty_map();

  inline bool has_literal_type() const;
  inline void clear_has_literal_type();

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  bool nullable_;
  union LiteralTypeUnion {
    constexpr LiteralTypeUnion() : _constinit_{} {}
      ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized _constinit_;
    bool boolean_;
    int32_t i8_;
    int32_t i16_;
    int32_t i32_;
    int64_t i64_;
    float fp32_;
    double fp64_;
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr string_;
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr binary_;
    int64_t timestamp_;
    int32_t date_;
    int64_t time_;
    ::substrait::Expression_Literal_IntervalYearToMonth* interval_year_to_month_;
    ::substrait::Expression_Literal_IntervalDayToSecond* interval_day_to_second_;
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr fixed_char_;
    ::substrait::Expression_Literal_VarChar* var_char_;
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr fixed_binary_;
    ::substrait::Expression_Literal_Decimal* decimal_;
    ::substrait::Expression_Literal_Struct* struct__;
    ::substrait::Expression_Literal_Map* map_;
    int64_t timestamp_tz_;
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr uuid_;
    ::substrait::Type* null_;
    ::substrait::Expression_Literal_List* list_;
    ::substrait::Type_List* empty_list_;
    ::substrait::Type_Map* empty_map_;
  } literal_type_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  uint32_t _oneof_case_[1];

  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_ScalarFunction final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.ScalarFunction) */ {
 public:
  inline Expression_ScalarFunction() : Expression_ScalarFunction(nullptr) {}
  ~Expression_ScalarFunction() override;
  explicit constexpr Expression_ScalarFunction(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_ScalarFunction(const Expression_ScalarFunction& from);
  Expression_ScalarFunction(Expression_ScalarFunction&& from) noexcept
    : Expression_ScalarFunction() {
    *this = ::std::move(from);
  }

  inline Expression_ScalarFunction& operator=(const Expression_ScalarFunction& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_ScalarFunction& operator=(Expression_ScalarFunction&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_ScalarFunction& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_ScalarFunction* internal_default_instance() {
    return reinterpret_cast<const Expression_ScalarFunction*>(
               &_Expression_ScalarFunction_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    38;

  friend void swap(Expression_ScalarFunction& a, Expression_ScalarFunction& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_ScalarFunction* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_ScalarFunction* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_ScalarFunction* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_ScalarFunction>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_ScalarFunction& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_ScalarFunction& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_ScalarFunction* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.ScalarFunction";
  }
  protected:
  explicit Expression_ScalarFunction(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kArgsFieldNumber = 2,
    kOutputTypeFieldNumber = 3,
    kFunctionReferenceFieldNumber = 1,
  };
  // repeated .substrait.Expression args = 2 [json_name = "args"];
  int args_size() const;
  private:
  int _internal_args_size() const;
  public:
  void clear_args();
  ::substrait::Expression* mutable_args(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >*
      mutable_args();
  private:
  const ::substrait::Expression& _internal_args(int index) const;
  ::substrait::Expression* _internal_add_args();
  public:
  const ::substrait::Expression& args(int index) const;
  ::substrait::Expression* add_args();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >&
      args() const;

  // .substrait.Type output_type = 3 [json_name = "outputType"];
  bool has_output_type() const;
  private:
  bool _internal_has_output_type() const;
  public:
  void clear_output_type();
  const ::substrait::Type& output_type() const;
  PROTOBUF_NODISCARD ::substrait::Type* release_output_type();
  ::substrait::Type* mutable_output_type();
  void set_allocated_output_type(::substrait::Type* output_type);
  private:
  const ::substrait::Type& _internal_output_type() const;
  ::substrait::Type* _internal_mutable_output_type();
  public:
  void unsafe_arena_set_allocated_output_type(
      ::substrait::Type* output_type);
  ::substrait::Type* unsafe_arena_release_output_type();

  // uint32 function_reference = 1 [json_name = "functionReference"];
  void clear_function_reference();
  uint32_t function_reference() const;
  void set_function_reference(uint32_t value);
  private:
  uint32_t _internal_function_reference() const;
  void _internal_set_function_reference(uint32_t value);
  public:

  // @@protoc_insertion_point(class_scope:substrait.Expression.ScalarFunction)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression > args_;
  ::substrait::Type* output_type_;
  uint32_t function_reference_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_WindowFunction_Bound_Preceding final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.WindowFunction.Bound.Preceding) */ {
 public:
  inline Expression_WindowFunction_Bound_Preceding() : Expression_WindowFunction_Bound_Preceding(nullptr) {}
  ~Expression_WindowFunction_Bound_Preceding() override;
  explicit constexpr Expression_WindowFunction_Bound_Preceding(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_WindowFunction_Bound_Preceding(const Expression_WindowFunction_Bound_Preceding& from);
  Expression_WindowFunction_Bound_Preceding(Expression_WindowFunction_Bound_Preceding&& from) noexcept
    : Expression_WindowFunction_Bound_Preceding() {
    *this = ::std::move(from);
  }

  inline Expression_WindowFunction_Bound_Preceding& operator=(const Expression_WindowFunction_Bound_Preceding& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_WindowFunction_Bound_Preceding& operator=(Expression_WindowFunction_Bound_Preceding&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_WindowFunction_Bound_Preceding& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_WindowFunction_Bound_Preceding* internal_default_instance() {
    return reinterpret_cast<const Expression_WindowFunction_Bound_Preceding*>(
               &_Expression_WindowFunction_Bound_Preceding_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    39;

  friend void swap(Expression_WindowFunction_Bound_Preceding& a, Expression_WindowFunction_Bound_Preceding& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_WindowFunction_Bound_Preceding* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_WindowFunction_Bound_Preceding* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_WindowFunction_Bound_Preceding* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_WindowFunction_Bound_Preceding>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_WindowFunction_Bound_Preceding& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_WindowFunction_Bound_Preceding& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_WindowFunction_Bound_Preceding* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.WindowFunction.Bound.Preceding";
  }
  protected:
  explicit Expression_WindowFunction_Bound_Preceding(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kOffsetFieldNumber = 1,
  };
  // int64 offset = 1 [json_name = "offset"];
  void clear_offset();
  int64_t offset() const;
  void set_offset(int64_t value);
  private:
  int64_t _internal_offset() const;
  void _internal_set_offset(int64_t value);
  public:

  // @@protoc_insertion_point(class_scope:substrait.Expression.WindowFunction.Bound.Preceding)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  int64_t offset_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_WindowFunction_Bound_Following final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.WindowFunction.Bound.Following) */ {
 public:
  inline Expression_WindowFunction_Bound_Following() : Expression_WindowFunction_Bound_Following(nullptr) {}
  ~Expression_WindowFunction_Bound_Following() override;
  explicit constexpr Expression_WindowFunction_Bound_Following(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_WindowFunction_Bound_Following(const Expression_WindowFunction_Bound_Following& from);
  Expression_WindowFunction_Bound_Following(Expression_WindowFunction_Bound_Following&& from) noexcept
    : Expression_WindowFunction_Bound_Following() {
    *this = ::std::move(from);
  }

  inline Expression_WindowFunction_Bound_Following& operator=(const Expression_WindowFunction_Bound_Following& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_WindowFunction_Bound_Following& operator=(Expression_WindowFunction_Bound_Following&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_WindowFunction_Bound_Following& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_WindowFunction_Bound_Following* internal_default_instance() {
    return reinterpret_cast<const Expression_WindowFunction_Bound_Following*>(
               &_Expression_WindowFunction_Bound_Following_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    40;

  friend void swap(Expression_WindowFunction_Bound_Following& a, Expression_WindowFunction_Bound_Following& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_WindowFunction_Bound_Following* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_WindowFunction_Bound_Following* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_WindowFunction_Bound_Following* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_WindowFunction_Bound_Following>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_WindowFunction_Bound_Following& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_WindowFunction_Bound_Following& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_WindowFunction_Bound_Following* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.WindowFunction.Bound.Following";
  }
  protected:
  explicit Expression_WindowFunction_Bound_Following(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kOffsetFieldNumber = 1,
  };
  // int64 offset = 1 [json_name = "offset"];
  void clear_offset();
  int64_t offset() const;
  void set_offset(int64_t value);
  private:
  int64_t _internal_offset() const;
  void _internal_set_offset(int64_t value);
  public:

  // @@protoc_insertion_point(class_scope:substrait.Expression.WindowFunction.Bound.Following)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  int64_t offset_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_WindowFunction_Bound_CurrentRow final :
    public ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase /* @@protoc_insertion_point(class_definition:substrait.Expression.WindowFunction.Bound.CurrentRow) */ {
 public:
  inline Expression_WindowFunction_Bound_CurrentRow() : Expression_WindowFunction_Bound_CurrentRow(nullptr) {}
  explicit constexpr Expression_WindowFunction_Bound_CurrentRow(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_WindowFunction_Bound_CurrentRow(const Expression_WindowFunction_Bound_CurrentRow& from);
  Expression_WindowFunction_Bound_CurrentRow(Expression_WindowFunction_Bound_CurrentRow&& from) noexcept
    : Expression_WindowFunction_Bound_CurrentRow() {
    *this = ::std::move(from);
  }

  inline Expression_WindowFunction_Bound_CurrentRow& operator=(const Expression_WindowFunction_Bound_CurrentRow& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_WindowFunction_Bound_CurrentRow& operator=(Expression_WindowFunction_Bound_CurrentRow&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_WindowFunction_Bound_CurrentRow& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_WindowFunction_Bound_CurrentRow* internal_default_instance() {
    return reinterpret_cast<const Expression_WindowFunction_Bound_CurrentRow*>(
               &_Expression_WindowFunction_Bound_CurrentRow_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    41;

  friend void swap(Expression_WindowFunction_Bound_CurrentRow& a, Expression_WindowFunction_Bound_CurrentRow& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_WindowFunction_Bound_CurrentRow* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_WindowFunction_Bound_CurrentRow* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_WindowFunction_Bound_CurrentRow* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_WindowFunction_Bound_CurrentRow>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::CopyFrom;
  inline void CopyFrom(const Expression_WindowFunction_Bound_CurrentRow& from) {
    ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::CopyImpl(this, from);
  }
  using ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::MergeFrom;
  void MergeFrom(const Expression_WindowFunction_Bound_CurrentRow& from) {
    ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::MergeImpl(this, from);
  }
  public:

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.WindowFunction.Bound.CurrentRow";
  }
  protected:
  explicit Expression_WindowFunction_Bound_CurrentRow(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // @@protoc_insertion_point(class_scope:substrait.Expression.WindowFunction.Bound.CurrentRow)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_WindowFunction_Bound_Unbounded final :
    public ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase /* @@protoc_insertion_point(class_definition:substrait.Expression.WindowFunction.Bound.Unbounded) */ {
 public:
  inline Expression_WindowFunction_Bound_Unbounded() : Expression_WindowFunction_Bound_Unbounded(nullptr) {}
  explicit constexpr Expression_WindowFunction_Bound_Unbounded(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_WindowFunction_Bound_Unbounded(const Expression_WindowFunction_Bound_Unbounded& from);
  Expression_WindowFunction_Bound_Unbounded(Expression_WindowFunction_Bound_Unbounded&& from) noexcept
    : Expression_WindowFunction_Bound_Unbounded() {
    *this = ::std::move(from);
  }

  inline Expression_WindowFunction_Bound_Unbounded& operator=(const Expression_WindowFunction_Bound_Unbounded& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_WindowFunction_Bound_Unbounded& operator=(Expression_WindowFunction_Bound_Unbounded&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_WindowFunction_Bound_Unbounded& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_WindowFunction_Bound_Unbounded* internal_default_instance() {
    return reinterpret_cast<const Expression_WindowFunction_Bound_Unbounded*>(
               &_Expression_WindowFunction_Bound_Unbounded_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    42;

  friend void swap(Expression_WindowFunction_Bound_Unbounded& a, Expression_WindowFunction_Bound_Unbounded& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_WindowFunction_Bound_Unbounded* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_WindowFunction_Bound_Unbounded* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_WindowFunction_Bound_Unbounded* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_WindowFunction_Bound_Unbounded>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::CopyFrom;
  inline void CopyFrom(const Expression_WindowFunction_Bound_Unbounded& from) {
    ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::CopyImpl(this, from);
  }
  using ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::MergeFrom;
  void MergeFrom(const Expression_WindowFunction_Bound_Unbounded& from) {
    ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::MergeImpl(this, from);
  }
  public:

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.WindowFunction.Bound.Unbounded";
  }
  protected:
  explicit Expression_WindowFunction_Bound_Unbounded(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // @@protoc_insertion_point(class_scope:substrait.Expression.WindowFunction.Bound.Unbounded)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_WindowFunction_Bound final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.WindowFunction.Bound) */ {
 public:
  inline Expression_WindowFunction_Bound() : Expression_WindowFunction_Bound(nullptr) {}
  ~Expression_WindowFunction_Bound() override;
  explicit constexpr Expression_WindowFunction_Bound(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_WindowFunction_Bound(const Expression_WindowFunction_Bound& from);
  Expression_WindowFunction_Bound(Expression_WindowFunction_Bound&& from) noexcept
    : Expression_WindowFunction_Bound() {
    *this = ::std::move(from);
  }

  inline Expression_WindowFunction_Bound& operator=(const Expression_WindowFunction_Bound& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_WindowFunction_Bound& operator=(Expression_WindowFunction_Bound&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_WindowFunction_Bound& default_instance() {
    return *internal_default_instance();
  }
  enum KindCase {
    kPreceding = 1,
    kFollowing = 2,
    kCurrentRow = 3,
    kUnbounded = 4,
    KIND_NOT_SET = 0,
  };

  static inline const Expression_WindowFunction_Bound* internal_default_instance() {
    return reinterpret_cast<const Expression_WindowFunction_Bound*>(
               &_Expression_WindowFunction_Bound_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    43;

  friend void swap(Expression_WindowFunction_Bound& a, Expression_WindowFunction_Bound& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_WindowFunction_Bound* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_WindowFunction_Bound* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_WindowFunction_Bound* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_WindowFunction_Bound>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_WindowFunction_Bound& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_WindowFunction_Bound& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_WindowFunction_Bound* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.WindowFunction.Bound";
  }
  protected:
  explicit Expression_WindowFunction_Bound(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef Expression_WindowFunction_Bound_Preceding Preceding;
  typedef Expression_WindowFunction_Bound_Following Following;
  typedef Expression_WindowFunction_Bound_CurrentRow CurrentRow;
  typedef Expression_WindowFunction_Bound_Unbounded Unbounded;

  // accessors -------------------------------------------------------

  enum : int {
    kPrecedingFieldNumber = 1,
    kFollowingFieldNumber = 2,
    kCurrentRowFieldNumber = 3,
    kUnboundedFieldNumber = 4,
  };
  // .substrait.Expression.WindowFunction.Bound.Preceding preceding = 1 [json_name = "preceding"];
  bool has_preceding() const;
  private:
  bool _internal_has_preceding() const;
  public:
  void clear_preceding();
  const ::substrait::Expression_WindowFunction_Bound_Preceding& preceding() const;
  PROTOBUF_NODISCARD ::substrait::Expression_WindowFunction_Bound_Preceding* release_preceding();
  ::substrait::Expression_WindowFunction_Bound_Preceding* mutable_preceding();
  void set_allocated_preceding(::substrait::Expression_WindowFunction_Bound_Preceding* preceding);
  private:
  const ::substrait::Expression_WindowFunction_Bound_Preceding& _internal_preceding() const;
  ::substrait::Expression_WindowFunction_Bound_Preceding* _internal_mutable_preceding();
  public:
  void unsafe_arena_set_allocated_preceding(
      ::substrait::Expression_WindowFunction_Bound_Preceding* preceding);
  ::substrait::Expression_WindowFunction_Bound_Preceding* unsafe_arena_release_preceding();

  // .substrait.Expression.WindowFunction.Bound.Following following = 2 [json_name = "following"];
  bool has_following() const;
  private:
  bool _internal_has_following() const;
  public:
  void clear_following();
  const ::substrait::Expression_WindowFunction_Bound_Following& following() const;
  PROTOBUF_NODISCARD ::substrait::Expression_WindowFunction_Bound_Following* release_following();
  ::substrait::Expression_WindowFunction_Bound_Following* mutable_following();
  void set_allocated_following(::substrait::Expression_WindowFunction_Bound_Following* following);
  private:
  const ::substrait::Expression_WindowFunction_Bound_Following& _internal_following() const;
  ::substrait::Expression_WindowFunction_Bound_Following* _internal_mutable_following();
  public:
  void unsafe_arena_set_allocated_following(
      ::substrait::Expression_WindowFunction_Bound_Following* following);
  ::substrait::Expression_WindowFunction_Bound_Following* unsafe_arena_release_following();

  // .substrait.Expression.WindowFunction.Bound.CurrentRow current_row = 3 [json_name = "currentRow"];
  bool has_current_row() const;
  private:
  bool _internal_has_current_row() const;
  public:
  void clear_current_row();
  const ::substrait::Expression_WindowFunction_Bound_CurrentRow& current_row() const;
  PROTOBUF_NODISCARD ::substrait::Expression_WindowFunction_Bound_CurrentRow* release_current_row();
  ::substrait::Expression_WindowFunction_Bound_CurrentRow* mutable_current_row();
  void set_allocated_current_row(::substrait::Expression_WindowFunction_Bound_CurrentRow* current_row);
  private:
  const ::substrait::Expression_WindowFunction_Bound_CurrentRow& _internal_current_row() const;
  ::substrait::Expression_WindowFunction_Bound_CurrentRow* _internal_mutable_current_row();
  public:
  void unsafe_arena_set_allocated_current_row(
      ::substrait::Expression_WindowFunction_Bound_CurrentRow* current_row);
  ::substrait::Expression_WindowFunction_Bound_CurrentRow* unsafe_arena_release_current_row();

  // .substrait.Expression.WindowFunction.Bound.Unbounded unbounded = 4 [json_name = "unbounded"];
  bool has_unbounded() const;
  private:
  bool _internal_has_unbounded() const;
  public:
  void clear_unbounded();
  const ::substrait::Expression_WindowFunction_Bound_Unbounded& unbounded() const;
  PROTOBUF_NODISCARD ::substrait::Expression_WindowFunction_Bound_Unbounded* release_unbounded();
  ::substrait::Expression_WindowFunction_Bound_Unbounded* mutable_unbounded();
  void set_allocated_unbounded(::substrait::Expression_WindowFunction_Bound_Unbounded* unbounded);
  private:
  const ::substrait::Expression_WindowFunction_Bound_Unbounded& _internal_unbounded() const;
  ::substrait::Expression_WindowFunction_Bound_Unbounded* _internal_mutable_unbounded();
  public:
  void unsafe_arena_set_allocated_unbounded(
      ::substrait::Expression_WindowFunction_Bound_Unbounded* unbounded);
  ::substrait::Expression_WindowFunction_Bound_Unbounded* unsafe_arena_release_unbounded();

  void clear_kind();
  KindCase kind_case() const;
  // @@protoc_insertion_point(class_scope:substrait.Expression.WindowFunction.Bound)
 private:
  class _Internal;
  void set_has_preceding();
  void set_has_following();
  void set_has_current_row();
  void set_has_unbounded();

  inline bool has_kind() const;
  inline void clear_has_kind();

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  union KindUnion {
    constexpr KindUnion() : _constinit_{} {}
      ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized _constinit_;
    ::substrait::Expression_WindowFunction_Bound_Preceding* preceding_;
    ::substrait::Expression_WindowFunction_Bound_Following* following_;
    ::substrait::Expression_WindowFunction_Bound_CurrentRow* current_row_;
    ::substrait::Expression_WindowFunction_Bound_Unbounded* unbounded_;
  } kind_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  uint32_t _oneof_case_[1];

  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_WindowFunction final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.WindowFunction) */ {
 public:
  inline Expression_WindowFunction() : Expression_WindowFunction(nullptr) {}
  ~Expression_WindowFunction() override;
  explicit constexpr Expression_WindowFunction(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_WindowFunction(const Expression_WindowFunction& from);
  Expression_WindowFunction(Expression_WindowFunction&& from) noexcept
    : Expression_WindowFunction() {
    *this = ::std::move(from);
  }

  inline Expression_WindowFunction& operator=(const Expression_WindowFunction& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_WindowFunction& operator=(Expression_WindowFunction&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_WindowFunction& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_WindowFunction* internal_default_instance() {
    return reinterpret_cast<const Expression_WindowFunction*>(
               &_Expression_WindowFunction_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    44;

  friend void swap(Expression_WindowFunction& a, Expression_WindowFunction& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_WindowFunction* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_WindowFunction* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_WindowFunction* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_WindowFunction>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_WindowFunction& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_WindowFunction& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_WindowFunction* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.WindowFunction";
  }
  protected:
  explicit Expression_WindowFunction(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef Expression_WindowFunction_Bound Bound;

  // accessors -------------------------------------------------------

  enum : int {
    kPartitionsFieldNumber = 2,
    kSortsFieldNumber = 3,
    kArgsFieldNumber = 8,
    kUpperBoundFieldNumber = 4,
    kLowerBoundFieldNumber = 5,
    kOutputTypeFieldNumber = 7,
    kFunctionReferenceFieldNumber = 1,
    kPhaseFieldNumber = 6,
  };
  // repeated .substrait.Expression partitions = 2 [json_name = "partitions"];
  int partitions_size() const;
  private:
  int _internal_partitions_size() const;
  public:
  void clear_partitions();
  ::substrait::Expression* mutable_partitions(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >*
      mutable_partitions();
  private:
  const ::substrait::Expression& _internal_partitions(int index) const;
  ::substrait::Expression* _internal_add_partitions();
  public:
  const ::substrait::Expression& partitions(int index) const;
  ::substrait::Expression* add_partitions();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >&
      partitions() const;

  // repeated .substrait.SortField sorts = 3 [json_name = "sorts"];
  int sorts_size() const;
  private:
  int _internal_sorts_size() const;
  public:
  void clear_sorts();
  ::substrait::SortField* mutable_sorts(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::SortField >*
      mutable_sorts();
  private:
  const ::substrait::SortField& _internal_sorts(int index) const;
  ::substrait::SortField* _internal_add_sorts();
  public:
  const ::substrait::SortField& sorts(int index) const;
  ::substrait::SortField* add_sorts();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::SortField >&
      sorts() const;

  // repeated .substrait.Expression args = 8 [json_name = "args"];
  int args_size() const;
  private:
  int _internal_args_size() const;
  public:
  void clear_args();
  ::substrait::Expression* mutable_args(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >*
      mutable_args();
  private:
  const ::substrait::Expression& _internal_args(int index) const;
  ::substrait::Expression* _internal_add_args();
  public:
  const ::substrait::Expression& args(int index) const;
  ::substrait::Expression* add_args();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >&
      args() const;

  // .substrait.Expression.WindowFunction.Bound upper_bound = 4 [json_name = "upperBound"];
  bool has_upper_bound() const;
  private:
  bool _internal_has_upper_bound() const;
  public:
  void clear_upper_bound();
  const ::substrait::Expression_WindowFunction_Bound& upper_bound() const;
  PROTOBUF_NODISCARD ::substrait::Expression_WindowFunction_Bound* release_upper_bound();
  ::substrait::Expression_WindowFunction_Bound* mutable_upper_bound();
  void set_allocated_upper_bound(::substrait::Expression_WindowFunction_Bound* upper_bound);
  private:
  const ::substrait::Expression_WindowFunction_Bound& _internal_upper_bound() const;
  ::substrait::Expression_WindowFunction_Bound* _internal_mutable_upper_bound();
  public:
  void unsafe_arena_set_allocated_upper_bound(
      ::substrait::Expression_WindowFunction_Bound* upper_bound);
  ::substrait::Expression_WindowFunction_Bound* unsafe_arena_release_upper_bound();

  // .substrait.Expression.WindowFunction.Bound lower_bound = 5 [json_name = "lowerBound"];
  bool has_lower_bound() const;
  private:
  bool _internal_has_lower_bound() const;
  public:
  void clear_lower_bound();
  const ::substrait::Expression_WindowFunction_Bound& lower_bound() const;
  PROTOBUF_NODISCARD ::substrait::Expression_WindowFunction_Bound* release_lower_bound();
  ::substrait::Expression_WindowFunction_Bound* mutable_lower_bound();
  void set_allocated_lower_bound(::substrait::Expression_WindowFunction_Bound* lower_bound);
  private:
  const ::substrait::Expression_WindowFunction_Bound& _internal_lower_bound() const;
  ::substrait::Expression_WindowFunction_Bound* _internal_mutable_lower_bound();
  public:
  void unsafe_arena_set_allocated_lower_bound(
      ::substrait::Expression_WindowFunction_Bound* lower_bound);
  ::substrait::Expression_WindowFunction_Bound* unsafe_arena_release_lower_bound();

  // .substrait.Type output_type = 7 [json_name = "outputType"];
  bool has_output_type() const;
  private:
  bool _internal_has_output_type() const;
  public:
  void clear_output_type();
  const ::substrait::Type& output_type() const;
  PROTOBUF_NODISCARD ::substrait::Type* release_output_type();
  ::substrait::Type* mutable_output_type();
  void set_allocated_output_type(::substrait::Type* output_type);
  private:
  const ::substrait::Type& _internal_output_type() const;
  ::substrait::Type* _internal_mutable_output_type();
  public:
  void unsafe_arena_set_allocated_output_type(
      ::substrait::Type* output_type);
  ::substrait::Type* unsafe_arena_release_output_type();

  // uint32 function_reference = 1 [json_name = "functionReference"];
  void clear_function_reference();
  uint32_t function_reference() const;
  void set_function_reference(uint32_t value);
  private:
  uint32_t _internal_function_reference() const;
  void _internal_set_function_reference(uint32_t value);
  public:

  // .substrait.AggregationPhase phase = 6 [json_name = "phase"];
  void clear_phase();
  ::substrait::AggregationPhase phase() const;
  void set_phase(::substrait::AggregationPhase value);
  private:
  ::substrait::AggregationPhase _internal_phase() const;
  void _internal_set_phase(::substrait::AggregationPhase value);
  public:

  // @@protoc_insertion_point(class_scope:substrait.Expression.WindowFunction)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression > partitions_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::SortField > sorts_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression > args_;
  ::substrait::Expression_WindowFunction_Bound* upper_bound_;
  ::substrait::Expression_WindowFunction_Bound* lower_bound_;
  ::substrait::Type* output_type_;
  uint32_t function_reference_;
  int phase_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_IfThen_IfClause final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.IfThen.IfClause) */ {
 public:
  inline Expression_IfThen_IfClause() : Expression_IfThen_IfClause(nullptr) {}
  ~Expression_IfThen_IfClause() override;
  explicit constexpr Expression_IfThen_IfClause(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_IfThen_IfClause(const Expression_IfThen_IfClause& from);
  Expression_IfThen_IfClause(Expression_IfThen_IfClause&& from) noexcept
    : Expression_IfThen_IfClause() {
    *this = ::std::move(from);
  }

  inline Expression_IfThen_IfClause& operator=(const Expression_IfThen_IfClause& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_IfThen_IfClause& operator=(Expression_IfThen_IfClause&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_IfThen_IfClause& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_IfThen_IfClause* internal_default_instance() {
    return reinterpret_cast<const Expression_IfThen_IfClause*>(
               &_Expression_IfThen_IfClause_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    45;

  friend void swap(Expression_IfThen_IfClause& a, Expression_IfThen_IfClause& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_IfThen_IfClause* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_IfThen_IfClause* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_IfThen_IfClause* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_IfThen_IfClause>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_IfThen_IfClause& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_IfThen_IfClause& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_IfThen_IfClause* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.IfThen.IfClause";
  }
  protected:
  explicit Expression_IfThen_IfClause(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kIfFieldNumber = 1,
    kThenFieldNumber = 2,
  };
  // .substrait.Expression if = 1 [json_name = "if"];
  bool has_if_() const;
  private:
  bool _internal_has_if_() const;
  public:
  void clear_if_();
  const ::substrait::Expression& if_() const;
  PROTOBUF_NODISCARD ::substrait::Expression* release_if_();
  ::substrait::Expression* mutable_if_();
  void set_allocated_if_(::substrait::Expression* if_);
  private:
  const ::substrait::Expression& _internal_if_() const;
  ::substrait::Expression* _internal_mutable_if_();
  public:
  void unsafe_arena_set_allocated_if_(
      ::substrait::Expression* if_);
  ::substrait::Expression* unsafe_arena_release_if_();

  // .substrait.Expression then = 2 [json_name = "then"];
  bool has_then() const;
  private:
  bool _internal_has_then() const;
  public:
  void clear_then();
  const ::substrait::Expression& then() const;
  PROTOBUF_NODISCARD ::substrait::Expression* release_then();
  ::substrait::Expression* mutable_then();
  void set_allocated_then(::substrait::Expression* then);
  private:
  const ::substrait::Expression& _internal_then() const;
  ::substrait::Expression* _internal_mutable_then();
  public:
  void unsafe_arena_set_allocated_then(
      ::substrait::Expression* then);
  ::substrait::Expression* unsafe_arena_release_then();

  // @@protoc_insertion_point(class_scope:substrait.Expression.IfThen.IfClause)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::substrait::Expression* if__;
  ::substrait::Expression* then_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_IfThen final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.IfThen) */ {
 public:
  inline Expression_IfThen() : Expression_IfThen(nullptr) {}
  ~Expression_IfThen() override;
  explicit constexpr Expression_IfThen(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_IfThen(const Expression_IfThen& from);
  Expression_IfThen(Expression_IfThen&& from) noexcept
    : Expression_IfThen() {
    *this = ::std::move(from);
  }

  inline Expression_IfThen& operator=(const Expression_IfThen& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_IfThen& operator=(Expression_IfThen&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_IfThen& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_IfThen* internal_default_instance() {
    return reinterpret_cast<const Expression_IfThen*>(
               &_Expression_IfThen_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    46;

  friend void swap(Expression_IfThen& a, Expression_IfThen& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_IfThen* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_IfThen* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_IfThen* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_IfThen>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_IfThen& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_IfThen& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_IfThen* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.IfThen";
  }
  protected:
  explicit Expression_IfThen(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef Expression_IfThen_IfClause IfClause;

  // accessors -------------------------------------------------------

  enum : int {
    kIfsFieldNumber = 1,
    kElseFieldNumber = 2,
  };
  // repeated .substrait.Expression.IfThen.IfClause ifs = 1 [json_name = "ifs"];
  int ifs_size() const;
  private:
  int _internal_ifs_size() const;
  public:
  void clear_ifs();
  ::substrait::Expression_IfThen_IfClause* mutable_ifs(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_IfThen_IfClause >*
      mutable_ifs();
  private:
  const ::substrait::Expression_IfThen_IfClause& _internal_ifs(int index) const;
  ::substrait::Expression_IfThen_IfClause* _internal_add_ifs();
  public:
  const ::substrait::Expression_IfThen_IfClause& ifs(int index) const;
  ::substrait::Expression_IfThen_IfClause* add_ifs();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_IfThen_IfClause >&
      ifs() const;

  // .substrait.Expression else = 2 [json_name = "else"];
  bool has_else_() const;
  private:
  bool _internal_has_else_() const;
  public:
  void clear_else_();
  const ::substrait::Expression& else_() const;
  PROTOBUF_NODISCARD ::substrait::Expression* release_else_();
  ::substrait::Expression* mutable_else_();
  void set_allocated_else_(::substrait::Expression* else_);
  private:
  const ::substrait::Expression& _internal_else_() const;
  ::substrait::Expression* _internal_mutable_else_();
  public:
  void unsafe_arena_set_allocated_else_(
      ::substrait::Expression* else_);
  ::substrait::Expression* unsafe_arena_release_else_();

  // @@protoc_insertion_point(class_scope:substrait.Expression.IfThen)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_IfThen_IfClause > ifs_;
  ::substrait::Expression* else__;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_Cast final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.Cast) */ {
 public:
  inline Expression_Cast() : Expression_Cast(nullptr) {}
  ~Expression_Cast() override;
  explicit constexpr Expression_Cast(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_Cast(const Expression_Cast& from);
  Expression_Cast(Expression_Cast&& from) noexcept
    : Expression_Cast() {
    *this = ::std::move(from);
  }

  inline Expression_Cast& operator=(const Expression_Cast& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_Cast& operator=(Expression_Cast&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_Cast& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_Cast* internal_default_instance() {
    return reinterpret_cast<const Expression_Cast*>(
               &_Expression_Cast_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    47;

  friend void swap(Expression_Cast& a, Expression_Cast& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_Cast* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_Cast* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_Cast* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_Cast>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_Cast& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_Cast& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_Cast* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.Cast";
  }
  protected:
  explicit Expression_Cast(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kTypeFieldNumber = 1,
    kInputFieldNumber = 2,
  };
  // .substrait.Type type = 1 [json_name = "type"];
  bool has_type() const;
  private:
  bool _internal_has_type() const;
  public:
  void clear_type();
  const ::substrait::Type& type() const;
  PROTOBUF_NODISCARD ::substrait::Type* release_type();
  ::substrait::Type* mutable_type();
  void set_allocated_type(::substrait::Type* type);
  private:
  const ::substrait::Type& _internal_type() const;
  ::substrait::Type* _internal_mutable_type();
  public:
  void unsafe_arena_set_allocated_type(
      ::substrait::Type* type);
  ::substrait::Type* unsafe_arena_release_type();

  // .substrait.Expression input = 2 [json_name = "input"];
  bool has_input() const;
  private:
  bool _internal_has_input() const;
  public:
  void clear_input();
  const ::substrait::Expression& input() const;
  PROTOBUF_NODISCARD ::substrait::Expression* release_input();
  ::substrait::Expression* mutable_input();
  void set_allocated_input(::substrait::Expression* input);
  private:
  const ::substrait::Expression& _internal_input() const;
  ::substrait::Expression* _internal_mutable_input();
  public:
  void unsafe_arena_set_allocated_input(
      ::substrait::Expression* input);
  ::substrait::Expression* unsafe_arena_release_input();

  // @@protoc_insertion_point(class_scope:substrait.Expression.Cast)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::substrait::Type* type_;
  ::substrait::Expression* input_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_SwitchExpression_IfValue final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.SwitchExpression.IfValue) */ {
 public:
  inline Expression_SwitchExpression_IfValue() : Expression_SwitchExpression_IfValue(nullptr) {}
  ~Expression_SwitchExpression_IfValue() override;
  explicit constexpr Expression_SwitchExpression_IfValue(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_SwitchExpression_IfValue(const Expression_SwitchExpression_IfValue& from);
  Expression_SwitchExpression_IfValue(Expression_SwitchExpression_IfValue&& from) noexcept
    : Expression_SwitchExpression_IfValue() {
    *this = ::std::move(from);
  }

  inline Expression_SwitchExpression_IfValue& operator=(const Expression_SwitchExpression_IfValue& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_SwitchExpression_IfValue& operator=(Expression_SwitchExpression_IfValue&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_SwitchExpression_IfValue& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_SwitchExpression_IfValue* internal_default_instance() {
    return reinterpret_cast<const Expression_SwitchExpression_IfValue*>(
               &_Expression_SwitchExpression_IfValue_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    48;

  friend void swap(Expression_SwitchExpression_IfValue& a, Expression_SwitchExpression_IfValue& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_SwitchExpression_IfValue* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_SwitchExpression_IfValue* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_SwitchExpression_IfValue* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_SwitchExpression_IfValue>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_SwitchExpression_IfValue& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_SwitchExpression_IfValue& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_SwitchExpression_IfValue* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.SwitchExpression.IfValue";
  }
  protected:
  explicit Expression_SwitchExpression_IfValue(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kIfFieldNumber = 1,
    kThenFieldNumber = 2,
  };
  // .substrait.Expression.Literal if = 1 [json_name = "if"];
  bool has_if_() const;
  private:
  bool _internal_has_if_() const;
  public:
  void clear_if_();
  const ::substrait::Expression_Literal& if_() const;
  PROTOBUF_NODISCARD ::substrait::Expression_Literal* release_if_();
  ::substrait::Expression_Literal* mutable_if_();
  void set_allocated_if_(::substrait::Expression_Literal* if_);
  private:
  const ::substrait::Expression_Literal& _internal_if_() const;
  ::substrait::Expression_Literal* _internal_mutable_if_();
  public:
  void unsafe_arena_set_allocated_if_(
      ::substrait::Expression_Literal* if_);
  ::substrait::Expression_Literal* unsafe_arena_release_if_();

  // .substrait.Expression then = 2 [json_name = "then"];
  bool has_then() const;
  private:
  bool _internal_has_then() const;
  public:
  void clear_then();
  const ::substrait::Expression& then() const;
  PROTOBUF_NODISCARD ::substrait::Expression* release_then();
  ::substrait::Expression* mutable_then();
  void set_allocated_then(::substrait::Expression* then);
  private:
  const ::substrait::Expression& _internal_then() const;
  ::substrait::Expression* _internal_mutable_then();
  public:
  void unsafe_arena_set_allocated_then(
      ::substrait::Expression* then);
  ::substrait::Expression* unsafe_arena_release_then();

  // @@protoc_insertion_point(class_scope:substrait.Expression.SwitchExpression.IfValue)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::substrait::Expression_Literal* if__;
  ::substrait::Expression* then_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_SwitchExpression final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.SwitchExpression) */ {
 public:
  inline Expression_SwitchExpression() : Expression_SwitchExpression(nullptr) {}
  ~Expression_SwitchExpression() override;
  explicit constexpr Expression_SwitchExpression(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_SwitchExpression(const Expression_SwitchExpression& from);
  Expression_SwitchExpression(Expression_SwitchExpression&& from) noexcept
    : Expression_SwitchExpression() {
    *this = ::std::move(from);
  }

  inline Expression_SwitchExpression& operator=(const Expression_SwitchExpression& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_SwitchExpression& operator=(Expression_SwitchExpression&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_SwitchExpression& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_SwitchExpression* internal_default_instance() {
    return reinterpret_cast<const Expression_SwitchExpression*>(
               &_Expression_SwitchExpression_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    49;

  friend void swap(Expression_SwitchExpression& a, Expression_SwitchExpression& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_SwitchExpression* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_SwitchExpression* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_SwitchExpression* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_SwitchExpression>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_SwitchExpression& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_SwitchExpression& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_SwitchExpression* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.SwitchExpression";
  }
  protected:
  explicit Expression_SwitchExpression(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef Expression_SwitchExpression_IfValue IfValue;

  // accessors -------------------------------------------------------

  enum : int {
    kIfsFieldNumber = 1,
    kElseFieldNumber = 2,
  };
  // repeated .substrait.Expression.SwitchExpression.IfValue ifs = 1 [json_name = "ifs"];
  int ifs_size() const;
  private:
  int _internal_ifs_size() const;
  public:
  void clear_ifs();
  ::substrait::Expression_SwitchExpression_IfValue* mutable_ifs(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_SwitchExpression_IfValue >*
      mutable_ifs();
  private:
  const ::substrait::Expression_SwitchExpression_IfValue& _internal_ifs(int index) const;
  ::substrait::Expression_SwitchExpression_IfValue* _internal_add_ifs();
  public:
  const ::substrait::Expression_SwitchExpression_IfValue& ifs(int index) const;
  ::substrait::Expression_SwitchExpression_IfValue* add_ifs();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_SwitchExpression_IfValue >&
      ifs() const;

  // .substrait.Expression else = 2 [json_name = "else"];
  bool has_else_() const;
  private:
  bool _internal_has_else_() const;
  public:
  void clear_else_();
  const ::substrait::Expression& else_() const;
  PROTOBUF_NODISCARD ::substrait::Expression* release_else_();
  ::substrait::Expression* mutable_else_();
  void set_allocated_else_(::substrait::Expression* else_);
  private:
  const ::substrait::Expression& _internal_else_() const;
  ::substrait::Expression* _internal_mutable_else_();
  public:
  void unsafe_arena_set_allocated_else_(
      ::substrait::Expression* else_);
  ::substrait::Expression* unsafe_arena_release_else_();

  // @@protoc_insertion_point(class_scope:substrait.Expression.SwitchExpression)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_SwitchExpression_IfValue > ifs_;
  ::substrait::Expression* else__;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_SingularOrList final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.SingularOrList) */ {
 public:
  inline Expression_SingularOrList() : Expression_SingularOrList(nullptr) {}
  ~Expression_SingularOrList() override;
  explicit constexpr Expression_SingularOrList(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_SingularOrList(const Expression_SingularOrList& from);
  Expression_SingularOrList(Expression_SingularOrList&& from) noexcept
    : Expression_SingularOrList() {
    *this = ::std::move(from);
  }

  inline Expression_SingularOrList& operator=(const Expression_SingularOrList& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_SingularOrList& operator=(Expression_SingularOrList&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_SingularOrList& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_SingularOrList* internal_default_instance() {
    return reinterpret_cast<const Expression_SingularOrList*>(
               &_Expression_SingularOrList_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    50;

  friend void swap(Expression_SingularOrList& a, Expression_SingularOrList& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_SingularOrList* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_SingularOrList* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_SingularOrList* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_SingularOrList>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_SingularOrList& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_SingularOrList& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_SingularOrList* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.SingularOrList";
  }
  protected:
  explicit Expression_SingularOrList(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kOptionsFieldNumber = 2,
    kValueFieldNumber = 1,
  };
  // repeated .substrait.Expression options = 2 [json_name = "options"];
  int options_size() const;
  private:
  int _internal_options_size() const;
  public:
  void clear_options();
  ::substrait::Expression* mutable_options(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >*
      mutable_options();
  private:
  const ::substrait::Expression& _internal_options(int index) const;
  ::substrait::Expression* _internal_add_options();
  public:
  const ::substrait::Expression& options(int index) const;
  ::substrait::Expression* add_options();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >&
      options() const;

  // .substrait.Expression value = 1 [json_name = "value"];
  bool has_value() const;
  private:
  bool _internal_has_value() const;
  public:
  void clear_value();
  const ::substrait::Expression& value() const;
  PROTOBUF_NODISCARD ::substrait::Expression* release_value();
  ::substrait::Expression* mutable_value();
  void set_allocated_value(::substrait::Expression* value);
  private:
  const ::substrait::Expression& _internal_value() const;
  ::substrait::Expression* _internal_mutable_value();
  public:
  void unsafe_arena_set_allocated_value(
      ::substrait::Expression* value);
  ::substrait::Expression* unsafe_arena_release_value();

  // @@protoc_insertion_point(class_scope:substrait.Expression.SingularOrList)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression > options_;
  ::substrait::Expression* value_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_MultiOrList_Record final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.MultiOrList.Record) */ {
 public:
  inline Expression_MultiOrList_Record() : Expression_MultiOrList_Record(nullptr) {}
  ~Expression_MultiOrList_Record() override;
  explicit constexpr Expression_MultiOrList_Record(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_MultiOrList_Record(const Expression_MultiOrList_Record& from);
  Expression_MultiOrList_Record(Expression_MultiOrList_Record&& from) noexcept
    : Expression_MultiOrList_Record() {
    *this = ::std::move(from);
  }

  inline Expression_MultiOrList_Record& operator=(const Expression_MultiOrList_Record& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_MultiOrList_Record& operator=(Expression_MultiOrList_Record&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_MultiOrList_Record& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_MultiOrList_Record* internal_default_instance() {
    return reinterpret_cast<const Expression_MultiOrList_Record*>(
               &_Expression_MultiOrList_Record_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    51;

  friend void swap(Expression_MultiOrList_Record& a, Expression_MultiOrList_Record& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_MultiOrList_Record* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_MultiOrList_Record* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_MultiOrList_Record* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_MultiOrList_Record>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_MultiOrList_Record& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_MultiOrList_Record& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_MultiOrList_Record* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.MultiOrList.Record";
  }
  protected:
  explicit Expression_MultiOrList_Record(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kFieldsFieldNumber = 1,
  };
  // repeated .substrait.Expression fields = 1 [json_name = "fields"];
  int fields_size() const;
  private:
  int _internal_fields_size() const;
  public:
  void clear_fields();
  ::substrait::Expression* mutable_fields(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >*
      mutable_fields();
  private:
  const ::substrait::Expression& _internal_fields(int index) const;
  ::substrait::Expression* _internal_add_fields();
  public:
  const ::substrait::Expression& fields(int index) const;
  ::substrait::Expression* add_fields();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >&
      fields() const;

  // @@protoc_insertion_point(class_scope:substrait.Expression.MultiOrList.Record)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression > fields_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_MultiOrList final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.MultiOrList) */ {
 public:
  inline Expression_MultiOrList() : Expression_MultiOrList(nullptr) {}
  ~Expression_MultiOrList() override;
  explicit constexpr Expression_MultiOrList(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_MultiOrList(const Expression_MultiOrList& from);
  Expression_MultiOrList(Expression_MultiOrList&& from) noexcept
    : Expression_MultiOrList() {
    *this = ::std::move(from);
  }

  inline Expression_MultiOrList& operator=(const Expression_MultiOrList& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_MultiOrList& operator=(Expression_MultiOrList&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_MultiOrList& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_MultiOrList* internal_default_instance() {
    return reinterpret_cast<const Expression_MultiOrList*>(
               &_Expression_MultiOrList_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    52;

  friend void swap(Expression_MultiOrList& a, Expression_MultiOrList& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_MultiOrList* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_MultiOrList* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_MultiOrList* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_MultiOrList>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_MultiOrList& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_MultiOrList& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_MultiOrList* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.MultiOrList";
  }
  protected:
  explicit Expression_MultiOrList(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef Expression_MultiOrList_Record Record;

  // accessors -------------------------------------------------------

  enum : int {
    kValueFieldNumber = 1,
    kOptionsFieldNumber = 2,
  };
  // repeated .substrait.Expression value = 1 [json_name = "value"];
  int value_size() const;
  private:
  int _internal_value_size() const;
  public:
  void clear_value();
  ::substrait::Expression* mutable_value(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >*
      mutable_value();
  private:
  const ::substrait::Expression& _internal_value(int index) const;
  ::substrait::Expression* _internal_add_value();
  public:
  const ::substrait::Expression& value(int index) const;
  ::substrait::Expression* add_value();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >&
      value() const;

  // repeated .substrait.Expression.MultiOrList.Record options = 2 [json_name = "options"];
  int options_size() const;
  private:
  int _internal_options_size() const;
  public:
  void clear_options();
  ::substrait::Expression_MultiOrList_Record* mutable_options(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_MultiOrList_Record >*
      mutable_options();
  private:
  const ::substrait::Expression_MultiOrList_Record& _internal_options(int index) const;
  ::substrait::Expression_MultiOrList_Record* _internal_add_options();
  public:
  const ::substrait::Expression_MultiOrList_Record& options(int index) const;
  ::substrait::Expression_MultiOrList_Record* add_options();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_MultiOrList_Record >&
      options() const;

  // @@protoc_insertion_point(class_scope:substrait.Expression.MultiOrList)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression > value_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_MultiOrList_Record > options_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_EmbeddedFunction_PythonPickleFunction final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.EmbeddedFunction.PythonPickleFunction) */ {
 public:
  inline Expression_EmbeddedFunction_PythonPickleFunction() : Expression_EmbeddedFunction_PythonPickleFunction(nullptr) {}
  ~Expression_EmbeddedFunction_PythonPickleFunction() override;
  explicit constexpr Expression_EmbeddedFunction_PythonPickleFunction(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_EmbeddedFunction_PythonPickleFunction(const Expression_EmbeddedFunction_PythonPickleFunction& from);
  Expression_EmbeddedFunction_PythonPickleFunction(Expression_EmbeddedFunction_PythonPickleFunction&& from) noexcept
    : Expression_EmbeddedFunction_PythonPickleFunction() {
    *this = ::std::move(from);
  }

  inline Expression_EmbeddedFunction_PythonPickleFunction& operator=(const Expression_EmbeddedFunction_PythonPickleFunction& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_EmbeddedFunction_PythonPickleFunction& operator=(Expression_EmbeddedFunction_PythonPickleFunction&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_EmbeddedFunction_PythonPickleFunction& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_EmbeddedFunction_PythonPickleFunction* internal_default_instance() {
    return reinterpret_cast<const Expression_EmbeddedFunction_PythonPickleFunction*>(
               &_Expression_EmbeddedFunction_PythonPickleFunction_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    53;

  friend void swap(Expression_EmbeddedFunction_PythonPickleFunction& a, Expression_EmbeddedFunction_PythonPickleFunction& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_EmbeddedFunction_PythonPickleFunction* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_EmbeddedFunction_PythonPickleFunction* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_EmbeddedFunction_PythonPickleFunction* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_EmbeddedFunction_PythonPickleFunction>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_EmbeddedFunction_PythonPickleFunction& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_EmbeddedFunction_PythonPickleFunction& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_EmbeddedFunction_PythonPickleFunction* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.EmbeddedFunction.PythonPickleFunction";
  }
  protected:
  explicit Expression_EmbeddedFunction_PythonPickleFunction(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kPrerequisiteFieldNumber = 2,
    kFunctionFieldNumber = 1,
  };
  // repeated string prerequisite = 2 [json_name = "prerequisite"];
  int prerequisite_size() const;
  private:
  int _internal_prerequisite_size() const;
  public:
  void clear_prerequisite();
  const std::string& prerequisite(int index) const;
  std::string* mutable_prerequisite(int index);
  void set_prerequisite(int index, const std::string& value);
  void set_prerequisite(int index, std::string&& value);
  void set_prerequisite(int index, const char* value);
  void set_prerequisite(int index, const char* value, size_t size);
  std::string* add_prerequisite();
  void add_prerequisite(const std::string& value);
  void add_prerequisite(std::string&& value);
  void add_prerequisite(const char* value);
  void add_prerequisite(const char* value, size_t size);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& prerequisite() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_prerequisite();
  private:
  const std::string& _internal_prerequisite(int index) const;
  std::string* _internal_add_prerequisite();
  public:

  // bytes function = 1 [json_name = "function"];
  void clear_function();
  const std::string& function() const;
  template <typename ArgT0 = const std::string&, typename... ArgT>
  void set_function(ArgT0&& arg0, ArgT... args);
  std::string* mutable_function();
  PROTOBUF_NODISCARD std::string* release_function();
  void set_allocated_function(std::string* function);
  private:
  const std::string& _internal_function() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_function(const std::string& value);
  std::string* _internal_mutable_function();
  public:

  // @@protoc_insertion_point(class_scope:substrait.Expression.EmbeddedFunction.PythonPickleFunction)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> prerequisite_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr function_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_EmbeddedFunction_WebAssemblyFunction final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.EmbeddedFunction.WebAssemblyFunction) */ {
 public:
  inline Expression_EmbeddedFunction_WebAssemblyFunction() : Expression_EmbeddedFunction_WebAssemblyFunction(nullptr) {}
  ~Expression_EmbeddedFunction_WebAssemblyFunction() override;
  explicit constexpr Expression_EmbeddedFunction_WebAssemblyFunction(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_EmbeddedFunction_WebAssemblyFunction(const Expression_EmbeddedFunction_WebAssemblyFunction& from);
  Expression_EmbeddedFunction_WebAssemblyFunction(Expression_EmbeddedFunction_WebAssemblyFunction&& from) noexcept
    : Expression_EmbeddedFunction_WebAssemblyFunction() {
    *this = ::std::move(from);
  }

  inline Expression_EmbeddedFunction_WebAssemblyFunction& operator=(const Expression_EmbeddedFunction_WebAssemblyFunction& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_EmbeddedFunction_WebAssemblyFunction& operator=(Expression_EmbeddedFunction_WebAssemblyFunction&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_EmbeddedFunction_WebAssemblyFunction& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_EmbeddedFunction_WebAssemblyFunction* internal_default_instance() {
    return reinterpret_cast<const Expression_EmbeddedFunction_WebAssemblyFunction*>(
               &_Expression_EmbeddedFunction_WebAssemblyFunction_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    54;

  friend void swap(Expression_EmbeddedFunction_WebAssemblyFunction& a, Expression_EmbeddedFunction_WebAssemblyFunction& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_EmbeddedFunction_WebAssemblyFunction* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_EmbeddedFunction_WebAssemblyFunction* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_EmbeddedFunction_WebAssemblyFunction* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_EmbeddedFunction_WebAssemblyFunction>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_EmbeddedFunction_WebAssemblyFunction& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_EmbeddedFunction_WebAssemblyFunction& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_EmbeddedFunction_WebAssemblyFunction* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.EmbeddedFunction.WebAssemblyFunction";
  }
  protected:
  explicit Expression_EmbeddedFunction_WebAssemblyFunction(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kPrerequisiteFieldNumber = 2,
    kScriptFieldNumber = 1,
  };
  // repeated string prerequisite = 2 [json_name = "prerequisite"];
  int prerequisite_size() const;
  private:
  int _internal_prerequisite_size() const;
  public:
  void clear_prerequisite();
  const std::string& prerequisite(int index) const;
  std::string* mutable_prerequisite(int index);
  void set_prerequisite(int index, const std::string& value);
  void set_prerequisite(int index, std::string&& value);
  void set_prerequisite(int index, const char* value);
  void set_prerequisite(int index, const char* value, size_t size);
  std::string* add_prerequisite();
  void add_prerequisite(const std::string& value);
  void add_prerequisite(std::string&& value);
  void add_prerequisite(const char* value);
  void add_prerequisite(const char* value, size_t size);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& prerequisite() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_prerequisite();
  private:
  const std::string& _internal_prerequisite(int index) const;
  std::string* _internal_add_prerequisite();
  public:

  // bytes script = 1 [json_name = "script"];
  void clear_script();
  const std::string& script() const;
  template <typename ArgT0 = const std::string&, typename... ArgT>
  void set_script(ArgT0&& arg0, ArgT... args);
  std::string* mutable_script();
  PROTOBUF_NODISCARD std::string* release_script();
  void set_allocated_script(std::string* script);
  private:
  const std::string& _internal_script() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_script(const std::string& value);
  std::string* _internal_mutable_script();
  public:

  // @@protoc_insertion_point(class_scope:substrait.Expression.EmbeddedFunction.WebAssemblyFunction)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> prerequisite_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr script_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_EmbeddedFunction final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.EmbeddedFunction) */ {
 public:
  inline Expression_EmbeddedFunction() : Expression_EmbeddedFunction(nullptr) {}
  ~Expression_EmbeddedFunction() override;
  explicit constexpr Expression_EmbeddedFunction(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_EmbeddedFunction(const Expression_EmbeddedFunction& from);
  Expression_EmbeddedFunction(Expression_EmbeddedFunction&& from) noexcept
    : Expression_EmbeddedFunction() {
    *this = ::std::move(from);
  }

  inline Expression_EmbeddedFunction& operator=(const Expression_EmbeddedFunction& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_EmbeddedFunction& operator=(Expression_EmbeddedFunction&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_EmbeddedFunction& default_instance() {
    return *internal_default_instance();
  }
  enum KindCase {
    kPythonPickleFunction = 3,
    kWebAssemblyFunction = 4,
    KIND_NOT_SET = 0,
  };

  static inline const Expression_EmbeddedFunction* internal_default_instance() {
    return reinterpret_cast<const Expression_EmbeddedFunction*>(
               &_Expression_EmbeddedFunction_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    55;

  friend void swap(Expression_EmbeddedFunction& a, Expression_EmbeddedFunction& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_EmbeddedFunction* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_EmbeddedFunction* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_EmbeddedFunction* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_EmbeddedFunction>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_EmbeddedFunction& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_EmbeddedFunction& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_EmbeddedFunction* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.EmbeddedFunction";
  }
  protected:
  explicit Expression_EmbeddedFunction(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef Expression_EmbeddedFunction_PythonPickleFunction PythonPickleFunction;
  typedef Expression_EmbeddedFunction_WebAssemblyFunction WebAssemblyFunction;

  // accessors -------------------------------------------------------

  enum : int {
    kArgumentsFieldNumber = 1,
    kOutputTypeFieldNumber = 2,
    kPythonPickleFunctionFieldNumber = 3,
    kWebAssemblyFunctionFieldNumber = 4,
  };
  // repeated .substrait.Expression arguments = 1 [json_name = "arguments"];
  int arguments_size() const;
  private:
  int _internal_arguments_size() const;
  public:
  void clear_arguments();
  ::substrait::Expression* mutable_arguments(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >*
      mutable_arguments();
  private:
  const ::substrait::Expression& _internal_arguments(int index) const;
  ::substrait::Expression* _internal_add_arguments();
  public:
  const ::substrait::Expression& arguments(int index) const;
  ::substrait::Expression* add_arguments();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >&
      arguments() const;

  // .substrait.Type output_type = 2 [json_name = "outputType"];
  bool has_output_type() const;
  private:
  bool _internal_has_output_type() const;
  public:
  void clear_output_type();
  const ::substrait::Type& output_type() const;
  PROTOBUF_NODISCARD ::substrait::Type* release_output_type();
  ::substrait::Type* mutable_output_type();
  void set_allocated_output_type(::substrait::Type* output_type);
  private:
  const ::substrait::Type& _internal_output_type() const;
  ::substrait::Type* _internal_mutable_output_type();
  public:
  void unsafe_arena_set_allocated_output_type(
      ::substrait::Type* output_type);
  ::substrait::Type* unsafe_arena_release_output_type();

  // .substrait.Expression.EmbeddedFunction.PythonPickleFunction python_pickle_function = 3 [json_name = "pythonPickleFunction"];
  bool has_python_pickle_function() const;
  private:
  bool _internal_has_python_pickle_function() const;
  public:
  void clear_python_pickle_function();
  const ::substrait::Expression_EmbeddedFunction_PythonPickleFunction& python_pickle_function() const;
  PROTOBUF_NODISCARD ::substrait::Expression_EmbeddedFunction_PythonPickleFunction* release_python_pickle_function();
  ::substrait::Expression_EmbeddedFunction_PythonPickleFunction* mutable_python_pickle_function();
  void set_allocated_python_pickle_function(::substrait::Expression_EmbeddedFunction_PythonPickleFunction* python_pickle_function);
  private:
  const ::substrait::Expression_EmbeddedFunction_PythonPickleFunction& _internal_python_pickle_function() const;
  ::substrait::Expression_EmbeddedFunction_PythonPickleFunction* _internal_mutable_python_pickle_function();
  public:
  void unsafe_arena_set_allocated_python_pickle_function(
      ::substrait::Expression_EmbeddedFunction_PythonPickleFunction* python_pickle_function);
  ::substrait::Expression_EmbeddedFunction_PythonPickleFunction* unsafe_arena_release_python_pickle_function();

  // .substrait.Expression.EmbeddedFunction.WebAssemblyFunction web_assembly_function = 4 [json_name = "webAssemblyFunction"];
  bool has_web_assembly_function() const;
  private:
  bool _internal_has_web_assembly_function() const;
  public:
  void clear_web_assembly_function();
  const ::substrait::Expression_EmbeddedFunction_WebAssemblyFunction& web_assembly_function() const;
  PROTOBUF_NODISCARD ::substrait::Expression_EmbeddedFunction_WebAssemblyFunction* release_web_assembly_function();
  ::substrait::Expression_EmbeddedFunction_WebAssemblyFunction* mutable_web_assembly_function();
  void set_allocated_web_assembly_function(::substrait::Expression_EmbeddedFunction_WebAssemblyFunction* web_assembly_function);
  private:
  const ::substrait::Expression_EmbeddedFunction_WebAssemblyFunction& _internal_web_assembly_function() const;
  ::substrait::Expression_EmbeddedFunction_WebAssemblyFunction* _internal_mutable_web_assembly_function();
  public:
  void unsafe_arena_set_allocated_web_assembly_function(
      ::substrait::Expression_EmbeddedFunction_WebAssemblyFunction* web_assembly_function);
  ::substrait::Expression_EmbeddedFunction_WebAssemblyFunction* unsafe_arena_release_web_assembly_function();

  void clear_kind();
  KindCase kind_case() const;
  // @@protoc_insertion_point(class_scope:substrait.Expression.EmbeddedFunction)
 private:
  class _Internal;
  void set_has_python_pickle_function();
  void set_has_web_assembly_function();

  inline bool has_kind() const;
  inline void clear_has_kind();

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression > arguments_;
  ::substrait::Type* output_type_;
  union KindUnion {
    constexpr KindUnion() : _constinit_{} {}
      ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized _constinit_;
    ::substrait::Expression_EmbeddedFunction_PythonPickleFunction* python_pickle_function_;
    ::substrait::Expression_EmbeddedFunction_WebAssemblyFunction* web_assembly_function_;
  } kind_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  uint32_t _oneof_case_[1];

  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_ReferenceSegment_MapKey final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.ReferenceSegment.MapKey) */ {
 public:
  inline Expression_ReferenceSegment_MapKey() : Expression_ReferenceSegment_MapKey(nullptr) {}
  ~Expression_ReferenceSegment_MapKey() override;
  explicit constexpr Expression_ReferenceSegment_MapKey(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_ReferenceSegment_MapKey(const Expression_ReferenceSegment_MapKey& from);
  Expression_ReferenceSegment_MapKey(Expression_ReferenceSegment_MapKey&& from) noexcept
    : Expression_ReferenceSegment_MapKey() {
    *this = ::std::move(from);
  }

  inline Expression_ReferenceSegment_MapKey& operator=(const Expression_ReferenceSegment_MapKey& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_ReferenceSegment_MapKey& operator=(Expression_ReferenceSegment_MapKey&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_ReferenceSegment_MapKey& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_ReferenceSegment_MapKey* internal_default_instance() {
    return reinterpret_cast<const Expression_ReferenceSegment_MapKey*>(
               &_Expression_ReferenceSegment_MapKey_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    56;

  friend void swap(Expression_ReferenceSegment_MapKey& a, Expression_ReferenceSegment_MapKey& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_ReferenceSegment_MapKey* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_ReferenceSegment_MapKey* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_ReferenceSegment_MapKey* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_ReferenceSegment_MapKey>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_ReferenceSegment_MapKey& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_ReferenceSegment_MapKey& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_ReferenceSegment_MapKey* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.ReferenceSegment.MapKey";
  }
  protected:
  explicit Expression_ReferenceSegment_MapKey(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kMapKeyFieldNumber = 1,
    kChildFieldNumber = 2,
  };
  // .substrait.Expression.Literal map_key = 1 [json_name = "mapKey"];
  bool has_map_key() const;
  private:
  bool _internal_has_map_key() const;
  public:
  void clear_map_key();
  const ::substrait::Expression_Literal& map_key() const;
  PROTOBUF_NODISCARD ::substrait::Expression_Literal* release_map_key();
  ::substrait::Expression_Literal* mutable_map_key();
  void set_allocated_map_key(::substrait::Expression_Literal* map_key);
  private:
  const ::substrait::Expression_Literal& _internal_map_key() const;
  ::substrait::Expression_Literal* _internal_mutable_map_key();
  public:
  void unsafe_arena_set_allocated_map_key(
      ::substrait::Expression_Literal* map_key);
  ::substrait::Expression_Literal* unsafe_arena_release_map_key();

  // .substrait.Expression.ReferenceSegment child = 2 [json_name = "child"];
  bool has_child() const;
  private:
  bool _internal_has_child() const;
  public:
  void clear_child();
  const ::substrait::Expression_ReferenceSegment& child() const;
  PROTOBUF_NODISCARD ::substrait::Expression_ReferenceSegment* release_child();
  ::substrait::Expression_ReferenceSegment* mutable_child();
  void set_allocated_child(::substrait::Expression_ReferenceSegment* child);
  private:
  const ::substrait::Expression_ReferenceSegment& _internal_child() const;
  ::substrait::Expression_ReferenceSegment* _internal_mutable_child();
  public:
  void unsafe_arena_set_allocated_child(
      ::substrait::Expression_ReferenceSegment* child);
  ::substrait::Expression_ReferenceSegment* unsafe_arena_release_child();

  // @@protoc_insertion_point(class_scope:substrait.Expression.ReferenceSegment.MapKey)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::substrait::Expression_Literal* map_key_;
  ::substrait::Expression_ReferenceSegment* child_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_ReferenceSegment_StructField final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.ReferenceSegment.StructField) */ {
 public:
  inline Expression_ReferenceSegment_StructField() : Expression_ReferenceSegment_StructField(nullptr) {}
  ~Expression_ReferenceSegment_StructField() override;
  explicit constexpr Expression_ReferenceSegment_StructField(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_ReferenceSegment_StructField(const Expression_ReferenceSegment_StructField& from);
  Expression_ReferenceSegment_StructField(Expression_ReferenceSegment_StructField&& from) noexcept
    : Expression_ReferenceSegment_StructField() {
    *this = ::std::move(from);
  }

  inline Expression_ReferenceSegment_StructField& operator=(const Expression_ReferenceSegment_StructField& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_ReferenceSegment_StructField& operator=(Expression_ReferenceSegment_StructField&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_ReferenceSegment_StructField& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_ReferenceSegment_StructField* internal_default_instance() {
    return reinterpret_cast<const Expression_ReferenceSegment_StructField*>(
               &_Expression_ReferenceSegment_StructField_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    57;

  friend void swap(Expression_ReferenceSegment_StructField& a, Expression_ReferenceSegment_StructField& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_ReferenceSegment_StructField* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_ReferenceSegment_StructField* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_ReferenceSegment_StructField* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_ReferenceSegment_StructField>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_ReferenceSegment_StructField& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_ReferenceSegment_StructField& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_ReferenceSegment_StructField* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.ReferenceSegment.StructField";
  }
  protected:
  explicit Expression_ReferenceSegment_StructField(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kChildFieldNumber = 2,
    kFieldFieldNumber = 1,
  };
  // .substrait.Expression.ReferenceSegment child = 2 [json_name = "child"];
  bool has_child() const;
  private:
  bool _internal_has_child() const;
  public:
  void clear_child();
  const ::substrait::Expression_ReferenceSegment& child() const;
  PROTOBUF_NODISCARD ::substrait::Expression_ReferenceSegment* release_child();
  ::substrait::Expression_ReferenceSegment* mutable_child();
  void set_allocated_child(::substrait::Expression_ReferenceSegment* child);
  private:
  const ::substrait::Expression_ReferenceSegment& _internal_child() const;
  ::substrait::Expression_ReferenceSegment* _internal_mutable_child();
  public:
  void unsafe_arena_set_allocated_child(
      ::substrait::Expression_ReferenceSegment* child);
  ::substrait::Expression_ReferenceSegment* unsafe_arena_release_child();

  // int32 field = 1 [json_name = "field"];
  void clear_field();
  int32_t field() const;
  void set_field(int32_t value);
  private:
  int32_t _internal_field() const;
  void _internal_set_field(int32_t value);
  public:

  // @@protoc_insertion_point(class_scope:substrait.Expression.ReferenceSegment.StructField)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::substrait::Expression_ReferenceSegment* child_;
  int32_t field_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_ReferenceSegment_ListElement final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.ReferenceSegment.ListElement) */ {
 public:
  inline Expression_ReferenceSegment_ListElement() : Expression_ReferenceSegment_ListElement(nullptr) {}
  ~Expression_ReferenceSegment_ListElement() override;
  explicit constexpr Expression_ReferenceSegment_ListElement(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_ReferenceSegment_ListElement(const Expression_ReferenceSegment_ListElement& from);
  Expression_ReferenceSegment_ListElement(Expression_ReferenceSegment_ListElement&& from) noexcept
    : Expression_ReferenceSegment_ListElement() {
    *this = ::std::move(from);
  }

  inline Expression_ReferenceSegment_ListElement& operator=(const Expression_ReferenceSegment_ListElement& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_ReferenceSegment_ListElement& operator=(Expression_ReferenceSegment_ListElement&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_ReferenceSegment_ListElement& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_ReferenceSegment_ListElement* internal_default_instance() {
    return reinterpret_cast<const Expression_ReferenceSegment_ListElement*>(
               &_Expression_ReferenceSegment_ListElement_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    58;

  friend void swap(Expression_ReferenceSegment_ListElement& a, Expression_ReferenceSegment_ListElement& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_ReferenceSegment_ListElement* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_ReferenceSegment_ListElement* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_ReferenceSegment_ListElement* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_ReferenceSegment_ListElement>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_ReferenceSegment_ListElement& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_ReferenceSegment_ListElement& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_ReferenceSegment_ListElement* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.ReferenceSegment.ListElement";
  }
  protected:
  explicit Expression_ReferenceSegment_ListElement(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kChildFieldNumber = 2,
    kOffsetFieldNumber = 1,
  };
  // .substrait.Expression.ReferenceSegment child = 2 [json_name = "child"];
  bool has_child() const;
  private:
  bool _internal_has_child() const;
  public:
  void clear_child();
  const ::substrait::Expression_ReferenceSegment& child() const;
  PROTOBUF_NODISCARD ::substrait::Expression_ReferenceSegment* release_child();
  ::substrait::Expression_ReferenceSegment* mutable_child();
  void set_allocated_child(::substrait::Expression_ReferenceSegment* child);
  private:
  const ::substrait::Expression_ReferenceSegment& _internal_child() const;
  ::substrait::Expression_ReferenceSegment* _internal_mutable_child();
  public:
  void unsafe_arena_set_allocated_child(
      ::substrait::Expression_ReferenceSegment* child);
  ::substrait::Expression_ReferenceSegment* unsafe_arena_release_child();

  // int32 offset = 1 [json_name = "offset"];
  void clear_offset();
  int32_t offset() const;
  void set_offset(int32_t value);
  private:
  int32_t _internal_offset() const;
  void _internal_set_offset(int32_t value);
  public:

  // @@protoc_insertion_point(class_scope:substrait.Expression.ReferenceSegment.ListElement)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::substrait::Expression_ReferenceSegment* child_;
  int32_t offset_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_ReferenceSegment final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.ReferenceSegment) */ {
 public:
  inline Expression_ReferenceSegment() : Expression_ReferenceSegment(nullptr) {}
  ~Expression_ReferenceSegment() override;
  explicit constexpr Expression_ReferenceSegment(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_ReferenceSegment(const Expression_ReferenceSegment& from);
  Expression_ReferenceSegment(Expression_ReferenceSegment&& from) noexcept
    : Expression_ReferenceSegment() {
    *this = ::std::move(from);
  }

  inline Expression_ReferenceSegment& operator=(const Expression_ReferenceSegment& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_ReferenceSegment& operator=(Expression_ReferenceSegment&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_ReferenceSegment& default_instance() {
    return *internal_default_instance();
  }
  enum ReferenceTypeCase {
    kMapKey = 1,
    kStructField = 2,
    kListElement = 3,
    REFERENCE_TYPE_NOT_SET = 0,
  };

  static inline const Expression_ReferenceSegment* internal_default_instance() {
    return reinterpret_cast<const Expression_ReferenceSegment*>(
               &_Expression_ReferenceSegment_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    59;

  friend void swap(Expression_ReferenceSegment& a, Expression_ReferenceSegment& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_ReferenceSegment* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_ReferenceSegment* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_ReferenceSegment* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_ReferenceSegment>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_ReferenceSegment& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_ReferenceSegment& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_ReferenceSegment* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.ReferenceSegment";
  }
  protected:
  explicit Expression_ReferenceSegment(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef Expression_ReferenceSegment_MapKey MapKey;
  typedef Expression_ReferenceSegment_StructField StructField;
  typedef Expression_ReferenceSegment_ListElement ListElement;

  // accessors -------------------------------------------------------

  enum : int {
    kMapKeyFieldNumber = 1,
    kStructFieldFieldNumber = 2,
    kListElementFieldNumber = 3,
  };
  // .substrait.Expression.ReferenceSegment.MapKey map_key = 1 [json_name = "mapKey"];
  bool has_map_key() const;
  private:
  bool _internal_has_map_key() const;
  public:
  void clear_map_key();
  const ::substrait::Expression_ReferenceSegment_MapKey& map_key() const;
  PROTOBUF_NODISCARD ::substrait::Expression_ReferenceSegment_MapKey* release_map_key();
  ::substrait::Expression_ReferenceSegment_MapKey* mutable_map_key();
  void set_allocated_map_key(::substrait::Expression_ReferenceSegment_MapKey* map_key);
  private:
  const ::substrait::Expression_ReferenceSegment_MapKey& _internal_map_key() const;
  ::substrait::Expression_ReferenceSegment_MapKey* _internal_mutable_map_key();
  public:
  void unsafe_arena_set_allocated_map_key(
      ::substrait::Expression_ReferenceSegment_MapKey* map_key);
  ::substrait::Expression_ReferenceSegment_MapKey* unsafe_arena_release_map_key();

  // .substrait.Expression.ReferenceSegment.StructField struct_field = 2 [json_name = "structField"];
  bool has_struct_field() const;
  private:
  bool _internal_has_struct_field() const;
  public:
  void clear_struct_field();
  const ::substrait::Expression_ReferenceSegment_StructField& struct_field() const;
  PROTOBUF_NODISCARD ::substrait::Expression_ReferenceSegment_StructField* release_struct_field();
  ::substrait::Expression_ReferenceSegment_StructField* mutable_struct_field();
  void set_allocated_struct_field(::substrait::Expression_ReferenceSegment_StructField* struct_field);
  private:
  const ::substrait::Expression_ReferenceSegment_StructField& _internal_struct_field() const;
  ::substrait::Expression_ReferenceSegment_StructField* _internal_mutable_struct_field();
  public:
  void unsafe_arena_set_allocated_struct_field(
      ::substrait::Expression_ReferenceSegment_StructField* struct_field);
  ::substrait::Expression_ReferenceSegment_StructField* unsafe_arena_release_struct_field();

  // .substrait.Expression.ReferenceSegment.ListElement list_element = 3 [json_name = "listElement"];
  bool has_list_element() const;
  private:
  bool _internal_has_list_element() const;
  public:
  void clear_list_element();
  const ::substrait::Expression_ReferenceSegment_ListElement& list_element() const;
  PROTOBUF_NODISCARD ::substrait::Expression_ReferenceSegment_ListElement* release_list_element();
  ::substrait::Expression_ReferenceSegment_ListElement* mutable_list_element();
  void set_allocated_list_element(::substrait::Expression_ReferenceSegment_ListElement* list_element);
  private:
  const ::substrait::Expression_ReferenceSegment_ListElement& _internal_list_element() const;
  ::substrait::Expression_ReferenceSegment_ListElement* _internal_mutable_list_element();
  public:
  void unsafe_arena_set_allocated_list_element(
      ::substrait::Expression_ReferenceSegment_ListElement* list_element);
  ::substrait::Expression_ReferenceSegment_ListElement* unsafe_arena_release_list_element();

  void clear_reference_type();
  ReferenceTypeCase reference_type_case() const;
  // @@protoc_insertion_point(class_scope:substrait.Expression.ReferenceSegment)
 private:
  class _Internal;
  void set_has_map_key();
  void set_has_struct_field();
  void set_has_list_element();

  inline bool has_reference_type() const;
  inline void clear_has_reference_type();

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  union ReferenceTypeUnion {
    constexpr ReferenceTypeUnion() : _constinit_{} {}
      ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized _constinit_;
    ::substrait::Expression_ReferenceSegment_MapKey* map_key_;
    ::substrait::Expression_ReferenceSegment_StructField* struct_field_;
    ::substrait::Expression_ReferenceSegment_ListElement* list_element_;
  } reference_type_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  uint32_t _oneof_case_[1];

  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_MaskExpression_Select final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.MaskExpression.Select) */ {
 public:
  inline Expression_MaskExpression_Select() : Expression_MaskExpression_Select(nullptr) {}
  ~Expression_MaskExpression_Select() override;
  explicit constexpr Expression_MaskExpression_Select(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_MaskExpression_Select(const Expression_MaskExpression_Select& from);
  Expression_MaskExpression_Select(Expression_MaskExpression_Select&& from) noexcept
    : Expression_MaskExpression_Select() {
    *this = ::std::move(from);
  }

  inline Expression_MaskExpression_Select& operator=(const Expression_MaskExpression_Select& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_MaskExpression_Select& operator=(Expression_MaskExpression_Select&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_MaskExpression_Select& default_instance() {
    return *internal_default_instance();
  }
  enum TypeCase {
    kStruct = 1,
    kList = 2,
    kMap = 3,
    TYPE_NOT_SET = 0,
  };

  static inline const Expression_MaskExpression_Select* internal_default_instance() {
    return reinterpret_cast<const Expression_MaskExpression_Select*>(
               &_Expression_MaskExpression_Select_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    60;

  friend void swap(Expression_MaskExpression_Select& a, Expression_MaskExpression_Select& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_MaskExpression_Select* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_MaskExpression_Select* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_MaskExpression_Select* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_MaskExpression_Select>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_MaskExpression_Select& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_MaskExpression_Select& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_MaskExpression_Select* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.MaskExpression.Select";
  }
  protected:
  explicit Expression_MaskExpression_Select(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kStructFieldNumber = 1,
    kListFieldNumber = 2,
    kMapFieldNumber = 3,
  };
  // .substrait.Expression.MaskExpression.StructSelect struct = 1 [json_name = "struct"];
  bool has_struct_() const;
  private:
  bool _internal_has_struct_() const;
  public:
  void clear_struct_();
  const ::substrait::Expression_MaskExpression_StructSelect& struct_() const;
  PROTOBUF_NODISCARD ::substrait::Expression_MaskExpression_StructSelect* release_struct_();
  ::substrait::Expression_MaskExpression_StructSelect* mutable_struct_();
  void set_allocated_struct_(::substrait::Expression_MaskExpression_StructSelect* struct_);
  private:
  const ::substrait::Expression_MaskExpression_StructSelect& _internal_struct_() const;
  ::substrait::Expression_MaskExpression_StructSelect* _internal_mutable_struct_();
  public:
  void unsafe_arena_set_allocated_struct_(
      ::substrait::Expression_MaskExpression_StructSelect* struct_);
  ::substrait::Expression_MaskExpression_StructSelect* unsafe_arena_release_struct_();

  // .substrait.Expression.MaskExpression.ListSelect list = 2 [json_name = "list"];
  bool has_list() const;
  private:
  bool _internal_has_list() const;
  public:
  void clear_list();
  const ::substrait::Expression_MaskExpression_ListSelect& list() const;
  PROTOBUF_NODISCARD ::substrait::Expression_MaskExpression_ListSelect* release_list();
  ::substrait::Expression_MaskExpression_ListSelect* mutable_list();
  void set_allocated_list(::substrait::Expression_MaskExpression_ListSelect* list);
  private:
  const ::substrait::Expression_MaskExpression_ListSelect& _internal_list() const;
  ::substrait::Expression_MaskExpression_ListSelect* _internal_mutable_list();
  public:
  void unsafe_arena_set_allocated_list(
      ::substrait::Expression_MaskExpression_ListSelect* list);
  ::substrait::Expression_MaskExpression_ListSelect* unsafe_arena_release_list();

  // .substrait.Expression.MaskExpression.MapSelect map = 3 [json_name = "map"];
  bool has_map() const;
  private:
  bool _internal_has_map() const;
  public:
  void clear_map();
  const ::substrait::Expression_MaskExpression_MapSelect& map() const;
  PROTOBUF_NODISCARD ::substrait::Expression_MaskExpression_MapSelect* release_map();
  ::substrait::Expression_MaskExpression_MapSelect* mutable_map();
  void set_allocated_map(::substrait::Expression_MaskExpression_MapSelect* map);
  private:
  const ::substrait::Expression_MaskExpression_MapSelect& _internal_map() const;
  ::substrait::Expression_MaskExpression_MapSelect* _internal_mutable_map();
  public:
  void unsafe_arena_set_allocated_map(
      ::substrait::Expression_MaskExpression_MapSelect* map);
  ::substrait::Expression_MaskExpression_MapSelect* unsafe_arena_release_map();

  void clear_type();
  TypeCase type_case() const;
  // @@protoc_insertion_point(class_scope:substrait.Expression.MaskExpression.Select)
 private:
  class _Internal;
  void set_has_struct_();
  void set_has_list();
  void set_has_map();

  inline bool has_type() const;
  inline void clear_has_type();

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  union TypeUnion {
    constexpr TypeUnion() : _constinit_{} {}
      ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized _constinit_;
    ::substrait::Expression_MaskExpression_StructSelect* struct__;
    ::substrait::Expression_MaskExpression_ListSelect* list_;
    ::substrait::Expression_MaskExpression_MapSelect* map_;
  } type_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  uint32_t _oneof_case_[1];

  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_MaskExpression_StructSelect final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.MaskExpression.StructSelect) */ {
 public:
  inline Expression_MaskExpression_StructSelect() : Expression_MaskExpression_StructSelect(nullptr) {}
  ~Expression_MaskExpression_StructSelect() override;
  explicit constexpr Expression_MaskExpression_StructSelect(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_MaskExpression_StructSelect(const Expression_MaskExpression_StructSelect& from);
  Expression_MaskExpression_StructSelect(Expression_MaskExpression_StructSelect&& from) noexcept
    : Expression_MaskExpression_StructSelect() {
    *this = ::std::move(from);
  }

  inline Expression_MaskExpression_StructSelect& operator=(const Expression_MaskExpression_StructSelect& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_MaskExpression_StructSelect& operator=(Expression_MaskExpression_StructSelect&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_MaskExpression_StructSelect& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_MaskExpression_StructSelect* internal_default_instance() {
    return reinterpret_cast<const Expression_MaskExpression_StructSelect*>(
               &_Expression_MaskExpression_StructSelect_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    61;

  friend void swap(Expression_MaskExpression_StructSelect& a, Expression_MaskExpression_StructSelect& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_MaskExpression_StructSelect* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_MaskExpression_StructSelect* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_MaskExpression_StructSelect* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_MaskExpression_StructSelect>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_MaskExpression_StructSelect& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_MaskExpression_StructSelect& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_MaskExpression_StructSelect* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.MaskExpression.StructSelect";
  }
  protected:
  explicit Expression_MaskExpression_StructSelect(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kStructItemsFieldNumber = 1,
  };
  // repeated .substrait.Expression.MaskExpression.StructItem struct_items = 1 [json_name = "structItems"];
  int struct_items_size() const;
  private:
  int _internal_struct_items_size() const;
  public:
  void clear_struct_items();
  ::substrait::Expression_MaskExpression_StructItem* mutable_struct_items(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_MaskExpression_StructItem >*
      mutable_struct_items();
  private:
  const ::substrait::Expression_MaskExpression_StructItem& _internal_struct_items(int index) const;
  ::substrait::Expression_MaskExpression_StructItem* _internal_add_struct_items();
  public:
  const ::substrait::Expression_MaskExpression_StructItem& struct_items(int index) const;
  ::substrait::Expression_MaskExpression_StructItem* add_struct_items();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_MaskExpression_StructItem >&
      struct_items() const;

  // @@protoc_insertion_point(class_scope:substrait.Expression.MaskExpression.StructSelect)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_MaskExpression_StructItem > struct_items_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_MaskExpression_StructItem final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.MaskExpression.StructItem) */ {
 public:
  inline Expression_MaskExpression_StructItem() : Expression_MaskExpression_StructItem(nullptr) {}
  ~Expression_MaskExpression_StructItem() override;
  explicit constexpr Expression_MaskExpression_StructItem(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_MaskExpression_StructItem(const Expression_MaskExpression_StructItem& from);
  Expression_MaskExpression_StructItem(Expression_MaskExpression_StructItem&& from) noexcept
    : Expression_MaskExpression_StructItem() {
    *this = ::std::move(from);
  }

  inline Expression_MaskExpression_StructItem& operator=(const Expression_MaskExpression_StructItem& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_MaskExpression_StructItem& operator=(Expression_MaskExpression_StructItem&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_MaskExpression_StructItem& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_MaskExpression_StructItem* internal_default_instance() {
    return reinterpret_cast<const Expression_MaskExpression_StructItem*>(
               &_Expression_MaskExpression_StructItem_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    62;

  friend void swap(Expression_MaskExpression_StructItem& a, Expression_MaskExpression_StructItem& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_MaskExpression_StructItem* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_MaskExpression_StructItem* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_MaskExpression_StructItem* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_MaskExpression_StructItem>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_MaskExpression_StructItem& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_MaskExpression_StructItem& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_MaskExpression_StructItem* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.MaskExpression.StructItem";
  }
  protected:
  explicit Expression_MaskExpression_StructItem(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kChildFieldNumber = 2,
    kFieldFieldNumber = 1,
  };
  // .substrait.Expression.MaskExpression.Select child = 2 [json_name = "child"];
  bool has_child() const;
  private:
  bool _internal_has_child() const;
  public:
  void clear_child();
  const ::substrait::Expression_MaskExpression_Select& child() const;
  PROTOBUF_NODISCARD ::substrait::Expression_MaskExpression_Select* release_child();
  ::substrait::Expression_MaskExpression_Select* mutable_child();
  void set_allocated_child(::substrait::Expression_MaskExpression_Select* child);
  private:
  const ::substrait::Expression_MaskExpression_Select& _internal_child() const;
  ::substrait::Expression_MaskExpression_Select* _internal_mutable_child();
  public:
  void unsafe_arena_set_allocated_child(
      ::substrait::Expression_MaskExpression_Select* child);
  ::substrait::Expression_MaskExpression_Select* unsafe_arena_release_child();

  // int32 field = 1 [json_name = "field"];
  void clear_field();
  int32_t field() const;
  void set_field(int32_t value);
  private:
  int32_t _internal_field() const;
  void _internal_set_field(int32_t value);
  public:

  // @@protoc_insertion_point(class_scope:substrait.Expression.MaskExpression.StructItem)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::substrait::Expression_MaskExpression_Select* child_;
  int32_t field_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_MaskExpression_ListSelect_ListSelectItem_ListElement final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.MaskExpression.ListSelect.ListSelectItem.ListElement) */ {
 public:
  inline Expression_MaskExpression_ListSelect_ListSelectItem_ListElement() : Expression_MaskExpression_ListSelect_ListSelectItem_ListElement(nullptr) {}
  ~Expression_MaskExpression_ListSelect_ListSelectItem_ListElement() override;
  explicit constexpr Expression_MaskExpression_ListSelect_ListSelectItem_ListElement(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_MaskExpression_ListSelect_ListSelectItem_ListElement(const Expression_MaskExpression_ListSelect_ListSelectItem_ListElement& from);
  Expression_MaskExpression_ListSelect_ListSelectItem_ListElement(Expression_MaskExpression_ListSelect_ListSelectItem_ListElement&& from) noexcept
    : Expression_MaskExpression_ListSelect_ListSelectItem_ListElement() {
    *this = ::std::move(from);
  }

  inline Expression_MaskExpression_ListSelect_ListSelectItem_ListElement& operator=(const Expression_MaskExpression_ListSelect_ListSelectItem_ListElement& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_MaskExpression_ListSelect_ListSelectItem_ListElement& operator=(Expression_MaskExpression_ListSelect_ListSelectItem_ListElement&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_MaskExpression_ListSelect_ListSelectItem_ListElement& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_MaskExpression_ListSelect_ListSelectItem_ListElement* internal_default_instance() {
    return reinterpret_cast<const Expression_MaskExpression_ListSelect_ListSelectItem_ListElement*>(
               &_Expression_MaskExpression_ListSelect_ListSelectItem_ListElement_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    63;

  friend void swap(Expression_MaskExpression_ListSelect_ListSelectItem_ListElement& a, Expression_MaskExpression_ListSelect_ListSelectItem_ListElement& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_MaskExpression_ListSelect_ListSelectItem_ListElement* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_MaskExpression_ListSelect_ListSelectItem_ListElement* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_MaskExpression_ListSelect_ListSelectItem_ListElement* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_MaskExpression_ListSelect_ListSelectItem_ListElement>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_MaskExpression_ListSelect_ListSelectItem_ListElement& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_MaskExpression_ListSelect_ListSelectItem_ListElement& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_MaskExpression_ListSelect_ListSelectItem_ListElement* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.MaskExpression.ListSelect.ListSelectItem.ListElement";
  }
  protected:
  explicit Expression_MaskExpression_ListSelect_ListSelectItem_ListElement(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kFieldFieldNumber = 1,
  };
  // int32 field = 1 [json_name = "field"];
  void clear_field();
  int32_t field() const;
  void set_field(int32_t value);
  private:
  int32_t _internal_field() const;
  void _internal_set_field(int32_t value);
  public:

  // @@protoc_insertion_point(class_scope:substrait.Expression.MaskExpression.ListSelect.ListSelectItem.ListElement)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  int32_t field_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.MaskExpression.ListSelect.ListSelectItem.ListSlice) */ {
 public:
  inline Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice() : Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice(nullptr) {}
  ~Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice() override;
  explicit constexpr Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice(const Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice& from);
  Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice(Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice&& from) noexcept
    : Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice() {
    *this = ::std::move(from);
  }

  inline Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice& operator=(const Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice& operator=(Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice* internal_default_instance() {
    return reinterpret_cast<const Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice*>(
               &_Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    64;

  friend void swap(Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice& a, Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.MaskExpression.ListSelect.ListSelectItem.ListSlice";
  }
  protected:
  explicit Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kStartFieldNumber = 1,
    kEndFieldNumber = 2,
  };
  // int32 start = 1 [json_name = "start"];
  void clear_start();
  int32_t start() const;
  void set_start(int32_t value);
  private:
  int32_t _internal_start() const;
  void _internal_set_start(int32_t value);
  public:

  // int32 end = 2 [json_name = "end"];
  void clear_end();
  int32_t end() const;
  void set_end(int32_t value);
  private:
  int32_t _internal_end() const;
  void _internal_set_end(int32_t value);
  public:

  // @@protoc_insertion_point(class_scope:substrait.Expression.MaskExpression.ListSelect.ListSelectItem.ListSlice)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  int32_t start_;
  int32_t end_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_MaskExpression_ListSelect_ListSelectItem final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.MaskExpression.ListSelect.ListSelectItem) */ {
 public:
  inline Expression_MaskExpression_ListSelect_ListSelectItem() : Expression_MaskExpression_ListSelect_ListSelectItem(nullptr) {}
  ~Expression_MaskExpression_ListSelect_ListSelectItem() override;
  explicit constexpr Expression_MaskExpression_ListSelect_ListSelectItem(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_MaskExpression_ListSelect_ListSelectItem(const Expression_MaskExpression_ListSelect_ListSelectItem& from);
  Expression_MaskExpression_ListSelect_ListSelectItem(Expression_MaskExpression_ListSelect_ListSelectItem&& from) noexcept
    : Expression_MaskExpression_ListSelect_ListSelectItem() {
    *this = ::std::move(from);
  }

  inline Expression_MaskExpression_ListSelect_ListSelectItem& operator=(const Expression_MaskExpression_ListSelect_ListSelectItem& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_MaskExpression_ListSelect_ListSelectItem& operator=(Expression_MaskExpression_ListSelect_ListSelectItem&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_MaskExpression_ListSelect_ListSelectItem& default_instance() {
    return *internal_default_instance();
  }
  enum TypeCase {
    kItem = 1,
    kSlice = 2,
    TYPE_NOT_SET = 0,
  };

  static inline const Expression_MaskExpression_ListSelect_ListSelectItem* internal_default_instance() {
    return reinterpret_cast<const Expression_MaskExpression_ListSelect_ListSelectItem*>(
               &_Expression_MaskExpression_ListSelect_ListSelectItem_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    65;

  friend void swap(Expression_MaskExpression_ListSelect_ListSelectItem& a, Expression_MaskExpression_ListSelect_ListSelectItem& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_MaskExpression_ListSelect_ListSelectItem* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_MaskExpression_ListSelect_ListSelectItem* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_MaskExpression_ListSelect_ListSelectItem* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_MaskExpression_ListSelect_ListSelectItem>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_MaskExpression_ListSelect_ListSelectItem& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_MaskExpression_ListSelect_ListSelectItem& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_MaskExpression_ListSelect_ListSelectItem* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.MaskExpression.ListSelect.ListSelectItem";
  }
  protected:
  explicit Expression_MaskExpression_ListSelect_ListSelectItem(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef Expression_MaskExpression_ListSelect_ListSelectItem_ListElement ListElement;
  typedef Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice ListSlice;

  // accessors -------------------------------------------------------

  enum : int {
    kItemFieldNumber = 1,
    kSliceFieldNumber = 2,
  };
  // .substrait.Expression.MaskExpression.ListSelect.ListSelectItem.ListElement item = 1 [json_name = "item"];
  bool has_item() const;
  private:
  bool _internal_has_item() const;
  public:
  void clear_item();
  const ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListElement& item() const;
  PROTOBUF_NODISCARD ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListElement* release_item();
  ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListElement* mutable_item();
  void set_allocated_item(::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListElement* item);
  private:
  const ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListElement& _internal_item() const;
  ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListElement* _internal_mutable_item();
  public:
  void unsafe_arena_set_allocated_item(
      ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListElement* item);
  ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListElement* unsafe_arena_release_item();

  // .substrait.Expression.MaskExpression.ListSelect.ListSelectItem.ListSlice slice = 2 [json_name = "slice"];
  bool has_slice() const;
  private:
  bool _internal_has_slice() const;
  public:
  void clear_slice();
  const ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice& slice() const;
  PROTOBUF_NODISCARD ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice* release_slice();
  ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice* mutable_slice();
  void set_allocated_slice(::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice* slice);
  private:
  const ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice& _internal_slice() const;
  ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice* _internal_mutable_slice();
  public:
  void unsafe_arena_set_allocated_slice(
      ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice* slice);
  ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice* unsafe_arena_release_slice();

  void clear_type();
  TypeCase type_case() const;
  // @@protoc_insertion_point(class_scope:substrait.Expression.MaskExpression.ListSelect.ListSelectItem)
 private:
  class _Internal;
  void set_has_item();
  void set_has_slice();

  inline bool has_type() const;
  inline void clear_has_type();

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  union TypeUnion {
    constexpr TypeUnion() : _constinit_{} {}
      ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized _constinit_;
    ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListElement* item_;
    ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice* slice_;
  } type_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  uint32_t _oneof_case_[1];

  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_MaskExpression_ListSelect final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.MaskExpression.ListSelect) */ {
 public:
  inline Expression_MaskExpression_ListSelect() : Expression_MaskExpression_ListSelect(nullptr) {}
  ~Expression_MaskExpression_ListSelect() override;
  explicit constexpr Expression_MaskExpression_ListSelect(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_MaskExpression_ListSelect(const Expression_MaskExpression_ListSelect& from);
  Expression_MaskExpression_ListSelect(Expression_MaskExpression_ListSelect&& from) noexcept
    : Expression_MaskExpression_ListSelect() {
    *this = ::std::move(from);
  }

  inline Expression_MaskExpression_ListSelect& operator=(const Expression_MaskExpression_ListSelect& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_MaskExpression_ListSelect& operator=(Expression_MaskExpression_ListSelect&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_MaskExpression_ListSelect& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_MaskExpression_ListSelect* internal_default_instance() {
    return reinterpret_cast<const Expression_MaskExpression_ListSelect*>(
               &_Expression_MaskExpression_ListSelect_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    66;

  friend void swap(Expression_MaskExpression_ListSelect& a, Expression_MaskExpression_ListSelect& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_MaskExpression_ListSelect* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_MaskExpression_ListSelect* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_MaskExpression_ListSelect* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_MaskExpression_ListSelect>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_MaskExpression_ListSelect& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_MaskExpression_ListSelect& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_MaskExpression_ListSelect* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.MaskExpression.ListSelect";
  }
  protected:
  explicit Expression_MaskExpression_ListSelect(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef Expression_MaskExpression_ListSelect_ListSelectItem ListSelectItem;

  // accessors -------------------------------------------------------

  enum : int {
    kSelectionFieldNumber = 1,
    kChildFieldNumber = 2,
  };
  // repeated .substrait.Expression.MaskExpression.ListSelect.ListSelectItem selection = 1 [json_name = "selection"];
  int selection_size() const;
  private:
  int _internal_selection_size() const;
  public:
  void clear_selection();
  ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem* mutable_selection(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem >*
      mutable_selection();
  private:
  const ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem& _internal_selection(int index) const;
  ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem* _internal_add_selection();
  public:
  const ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem& selection(int index) const;
  ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem* add_selection();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem >&
      selection() const;

  // .substrait.Expression.MaskExpression.Select child = 2 [json_name = "child"];
  bool has_child() const;
  private:
  bool _internal_has_child() const;
  public:
  void clear_child();
  const ::substrait::Expression_MaskExpression_Select& child() const;
  PROTOBUF_NODISCARD ::substrait::Expression_MaskExpression_Select* release_child();
  ::substrait::Expression_MaskExpression_Select* mutable_child();
  void set_allocated_child(::substrait::Expression_MaskExpression_Select* child);
  private:
  const ::substrait::Expression_MaskExpression_Select& _internal_child() const;
  ::substrait::Expression_MaskExpression_Select* _internal_mutable_child();
  public:
  void unsafe_arena_set_allocated_child(
      ::substrait::Expression_MaskExpression_Select* child);
  ::substrait::Expression_MaskExpression_Select* unsafe_arena_release_child();

  // @@protoc_insertion_point(class_scope:substrait.Expression.MaskExpression.ListSelect)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem > selection_;
  ::substrait::Expression_MaskExpression_Select* child_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_MaskExpression_MapSelect_MapKey final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.MaskExpression.MapSelect.MapKey) */ {
 public:
  inline Expression_MaskExpression_MapSelect_MapKey() : Expression_MaskExpression_MapSelect_MapKey(nullptr) {}
  ~Expression_MaskExpression_MapSelect_MapKey() override;
  explicit constexpr Expression_MaskExpression_MapSelect_MapKey(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_MaskExpression_MapSelect_MapKey(const Expression_MaskExpression_MapSelect_MapKey& from);
  Expression_MaskExpression_MapSelect_MapKey(Expression_MaskExpression_MapSelect_MapKey&& from) noexcept
    : Expression_MaskExpression_MapSelect_MapKey() {
    *this = ::std::move(from);
  }

  inline Expression_MaskExpression_MapSelect_MapKey& operator=(const Expression_MaskExpression_MapSelect_MapKey& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_MaskExpression_MapSelect_MapKey& operator=(Expression_MaskExpression_MapSelect_MapKey&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_MaskExpression_MapSelect_MapKey& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_MaskExpression_MapSelect_MapKey* internal_default_instance() {
    return reinterpret_cast<const Expression_MaskExpression_MapSelect_MapKey*>(
               &_Expression_MaskExpression_MapSelect_MapKey_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    67;

  friend void swap(Expression_MaskExpression_MapSelect_MapKey& a, Expression_MaskExpression_MapSelect_MapKey& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_MaskExpression_MapSelect_MapKey* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_MaskExpression_MapSelect_MapKey* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_MaskExpression_MapSelect_MapKey* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_MaskExpression_MapSelect_MapKey>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_MaskExpression_MapSelect_MapKey& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_MaskExpression_MapSelect_MapKey& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_MaskExpression_MapSelect_MapKey* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.MaskExpression.MapSelect.MapKey";
  }
  protected:
  explicit Expression_MaskExpression_MapSelect_MapKey(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kMapKeyFieldNumber = 1,
  };
  // string map_key = 1 [json_name = "mapKey"];
  void clear_map_key();
  const std::string& map_key() const;
  template <typename ArgT0 = const std::string&, typename... ArgT>
  void set_map_key(ArgT0&& arg0, ArgT... args);
  std::string* mutable_map_key();
  PROTOBUF_NODISCARD std::string* release_map_key();
  void set_allocated_map_key(std::string* map_key);
  private:
  const std::string& _internal_map_key() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_map_key(const std::string& value);
  std::string* _internal_mutable_map_key();
  public:

  // @@protoc_insertion_point(class_scope:substrait.Expression.MaskExpression.MapSelect.MapKey)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr map_key_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_MaskExpression_MapSelect_MapKeyExpression final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.MaskExpression.MapSelect.MapKeyExpression) */ {
 public:
  inline Expression_MaskExpression_MapSelect_MapKeyExpression() : Expression_MaskExpression_MapSelect_MapKeyExpression(nullptr) {}
  ~Expression_MaskExpression_MapSelect_MapKeyExpression() override;
  explicit constexpr Expression_MaskExpression_MapSelect_MapKeyExpression(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_MaskExpression_MapSelect_MapKeyExpression(const Expression_MaskExpression_MapSelect_MapKeyExpression& from);
  Expression_MaskExpression_MapSelect_MapKeyExpression(Expression_MaskExpression_MapSelect_MapKeyExpression&& from) noexcept
    : Expression_MaskExpression_MapSelect_MapKeyExpression() {
    *this = ::std::move(from);
  }

  inline Expression_MaskExpression_MapSelect_MapKeyExpression& operator=(const Expression_MaskExpression_MapSelect_MapKeyExpression& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_MaskExpression_MapSelect_MapKeyExpression& operator=(Expression_MaskExpression_MapSelect_MapKeyExpression&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_MaskExpression_MapSelect_MapKeyExpression& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_MaskExpression_MapSelect_MapKeyExpression* internal_default_instance() {
    return reinterpret_cast<const Expression_MaskExpression_MapSelect_MapKeyExpression*>(
               &_Expression_MaskExpression_MapSelect_MapKeyExpression_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    68;

  friend void swap(Expression_MaskExpression_MapSelect_MapKeyExpression& a, Expression_MaskExpression_MapSelect_MapKeyExpression& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_MaskExpression_MapSelect_MapKeyExpression* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_MaskExpression_MapSelect_MapKeyExpression* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_MaskExpression_MapSelect_MapKeyExpression* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_MaskExpression_MapSelect_MapKeyExpression>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_MaskExpression_MapSelect_MapKeyExpression& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_MaskExpression_MapSelect_MapKeyExpression& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_MaskExpression_MapSelect_MapKeyExpression* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.MaskExpression.MapSelect.MapKeyExpression";
  }
  protected:
  explicit Expression_MaskExpression_MapSelect_MapKeyExpression(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kMapKeyExpressionFieldNumber = 1,
  };
  // string map_key_expression = 1 [json_name = "mapKeyExpression"];
  void clear_map_key_expression();
  const std::string& map_key_expression() const;
  template <typename ArgT0 = const std::string&, typename... ArgT>
  void set_map_key_expression(ArgT0&& arg0, ArgT... args);
  std::string* mutable_map_key_expression();
  PROTOBUF_NODISCARD std::string* release_map_key_expression();
  void set_allocated_map_key_expression(std::string* map_key_expression);
  private:
  const std::string& _internal_map_key_expression() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_map_key_expression(const std::string& value);
  std::string* _internal_mutable_map_key_expression();
  public:

  // @@protoc_insertion_point(class_scope:substrait.Expression.MaskExpression.MapSelect.MapKeyExpression)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr map_key_expression_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_MaskExpression_MapSelect final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.MaskExpression.MapSelect) */ {
 public:
  inline Expression_MaskExpression_MapSelect() : Expression_MaskExpression_MapSelect(nullptr) {}
  ~Expression_MaskExpression_MapSelect() override;
  explicit constexpr Expression_MaskExpression_MapSelect(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_MaskExpression_MapSelect(const Expression_MaskExpression_MapSelect& from);
  Expression_MaskExpression_MapSelect(Expression_MaskExpression_MapSelect&& from) noexcept
    : Expression_MaskExpression_MapSelect() {
    *this = ::std::move(from);
  }

  inline Expression_MaskExpression_MapSelect& operator=(const Expression_MaskExpression_MapSelect& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_MaskExpression_MapSelect& operator=(Expression_MaskExpression_MapSelect&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_MaskExpression_MapSelect& default_instance() {
    return *internal_default_instance();
  }
  enum SelectCase {
    kKey = 1,
    kExpression = 2,
    SELECT_NOT_SET = 0,
  };

  static inline const Expression_MaskExpression_MapSelect* internal_default_instance() {
    return reinterpret_cast<const Expression_MaskExpression_MapSelect*>(
               &_Expression_MaskExpression_MapSelect_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    69;

  friend void swap(Expression_MaskExpression_MapSelect& a, Expression_MaskExpression_MapSelect& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_MaskExpression_MapSelect* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_MaskExpression_MapSelect* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_MaskExpression_MapSelect* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_MaskExpression_MapSelect>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_MaskExpression_MapSelect& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_MaskExpression_MapSelect& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_MaskExpression_MapSelect* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.MaskExpression.MapSelect";
  }
  protected:
  explicit Expression_MaskExpression_MapSelect(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef Expression_MaskExpression_MapSelect_MapKey MapKey;
  typedef Expression_MaskExpression_MapSelect_MapKeyExpression MapKeyExpression;

  // accessors -------------------------------------------------------

  enum : int {
    kChildFieldNumber = 3,
    kKeyFieldNumber = 1,
    kExpressionFieldNumber = 2,
  };
  // .substrait.Expression.MaskExpression.Select child = 3 [json_name = "child"];
  bool has_child() const;
  private:
  bool _internal_has_child() const;
  public:
  void clear_child();
  const ::substrait::Expression_MaskExpression_Select& child() const;
  PROTOBUF_NODISCARD ::substrait::Expression_MaskExpression_Select* release_child();
  ::substrait::Expression_MaskExpression_Select* mutable_child();
  void set_allocated_child(::substrait::Expression_MaskExpression_Select* child);
  private:
  const ::substrait::Expression_MaskExpression_Select& _internal_child() const;
  ::substrait::Expression_MaskExpression_Select* _internal_mutable_child();
  public:
  void unsafe_arena_set_allocated_child(
      ::substrait::Expression_MaskExpression_Select* child);
  ::substrait::Expression_MaskExpression_Select* unsafe_arena_release_child();

  // .substrait.Expression.MaskExpression.MapSelect.MapKey key = 1 [json_name = "key"];
  bool has_key() const;
  private:
  bool _internal_has_key() const;
  public:
  void clear_key();
  const ::substrait::Expression_MaskExpression_MapSelect_MapKey& key() const;
  PROTOBUF_NODISCARD ::substrait::Expression_MaskExpression_MapSelect_MapKey* release_key();
  ::substrait::Expression_MaskExpression_MapSelect_MapKey* mutable_key();
  void set_allocated_key(::substrait::Expression_MaskExpression_MapSelect_MapKey* key);
  private:
  const ::substrait::Expression_MaskExpression_MapSelect_MapKey& _internal_key() const;
  ::substrait::Expression_MaskExpression_MapSelect_MapKey* _internal_mutable_key();
  public:
  void unsafe_arena_set_allocated_key(
      ::substrait::Expression_MaskExpression_MapSelect_MapKey* key);
  ::substrait::Expression_MaskExpression_MapSelect_MapKey* unsafe_arena_release_key();

  // .substrait.Expression.MaskExpression.MapSelect.MapKeyExpression expression = 2 [json_name = "expression"];
  bool has_expression() const;
  private:
  bool _internal_has_expression() const;
  public:
  void clear_expression();
  const ::substrait::Expression_MaskExpression_MapSelect_MapKeyExpression& expression() const;
  PROTOBUF_NODISCARD ::substrait::Expression_MaskExpression_MapSelect_MapKeyExpression* release_expression();
  ::substrait::Expression_MaskExpression_MapSelect_MapKeyExpression* mutable_expression();
  void set_allocated_expression(::substrait::Expression_MaskExpression_MapSelect_MapKeyExpression* expression);
  private:
  const ::substrait::Expression_MaskExpression_MapSelect_MapKeyExpression& _internal_expression() const;
  ::substrait::Expression_MaskExpression_MapSelect_MapKeyExpression* _internal_mutable_expression();
  public:
  void unsafe_arena_set_allocated_expression(
      ::substrait::Expression_MaskExpression_MapSelect_MapKeyExpression* expression);
  ::substrait::Expression_MaskExpression_MapSelect_MapKeyExpression* unsafe_arena_release_expression();

  void clear_select();
  SelectCase select_case() const;
  // @@protoc_insertion_point(class_scope:substrait.Expression.MaskExpression.MapSelect)
 private:
  class _Internal;
  void set_has_key();
  void set_has_expression();

  inline bool has_select() const;
  inline void clear_has_select();

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::substrait::Expression_MaskExpression_Select* child_;
  union SelectUnion {
    constexpr SelectUnion() : _constinit_{} {}
      ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized _constinit_;
    ::substrait::Expression_MaskExpression_MapSelect_MapKey* key_;
    ::substrait::Expression_MaskExpression_MapSelect_MapKeyExpression* expression_;
  } select_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  uint32_t _oneof_case_[1];

  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_MaskExpression final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.MaskExpression) */ {
 public:
  inline Expression_MaskExpression() : Expression_MaskExpression(nullptr) {}
  ~Expression_MaskExpression() override;
  explicit constexpr Expression_MaskExpression(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_MaskExpression(const Expression_MaskExpression& from);
  Expression_MaskExpression(Expression_MaskExpression&& from) noexcept
    : Expression_MaskExpression() {
    *this = ::std::move(from);
  }

  inline Expression_MaskExpression& operator=(const Expression_MaskExpression& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_MaskExpression& operator=(Expression_MaskExpression&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_MaskExpression& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_MaskExpression* internal_default_instance() {
    return reinterpret_cast<const Expression_MaskExpression*>(
               &_Expression_MaskExpression_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    70;

  friend void swap(Expression_MaskExpression& a, Expression_MaskExpression& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_MaskExpression* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_MaskExpression* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_MaskExpression* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_MaskExpression>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_MaskExpression& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_MaskExpression& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_MaskExpression* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.MaskExpression";
  }
  protected:
  explicit Expression_MaskExpression(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef Expression_MaskExpression_Select Select;
  typedef Expression_MaskExpression_StructSelect StructSelect;
  typedef Expression_MaskExpression_StructItem StructItem;
  typedef Expression_MaskExpression_ListSelect ListSelect;
  typedef Expression_MaskExpression_MapSelect MapSelect;

  // accessors -------------------------------------------------------

  enum : int {
    kSelectFieldNumber = 1,
    kMaintainSingularStructFieldNumber = 2,
  };
  // .substrait.Expression.MaskExpression.StructSelect select = 1 [json_name = "select"];
  bool has_select() const;
  private:
  bool _internal_has_select() const;
  public:
  void clear_select();
  const ::substrait::Expression_MaskExpression_StructSelect& select() const;
  PROTOBUF_NODISCARD ::substrait::Expression_MaskExpression_StructSelect* release_select();
  ::substrait::Expression_MaskExpression_StructSelect* mutable_select();
  void set_allocated_select(::substrait::Expression_MaskExpression_StructSelect* select);
  private:
  const ::substrait::Expression_MaskExpression_StructSelect& _internal_select() const;
  ::substrait::Expression_MaskExpression_StructSelect* _internal_mutable_select();
  public:
  void unsafe_arena_set_allocated_select(
      ::substrait::Expression_MaskExpression_StructSelect* select);
  ::substrait::Expression_MaskExpression_StructSelect* unsafe_arena_release_select();

  // bool maintain_singular_struct = 2 [json_name = "maintainSingularStruct"];
  void clear_maintain_singular_struct();
  bool maintain_singular_struct() const;
  void set_maintain_singular_struct(bool value);
  private:
  bool _internal_maintain_singular_struct() const;
  void _internal_set_maintain_singular_struct(bool value);
  public:

  // @@protoc_insertion_point(class_scope:substrait.Expression.MaskExpression)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::substrait::Expression_MaskExpression_StructSelect* select_;
  bool maintain_singular_struct_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_FieldReference_RootReference final :
    public ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase /* @@protoc_insertion_point(class_definition:substrait.Expression.FieldReference.RootReference) */ {
 public:
  inline Expression_FieldReference_RootReference() : Expression_FieldReference_RootReference(nullptr) {}
  explicit constexpr Expression_FieldReference_RootReference(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_FieldReference_RootReference(const Expression_FieldReference_RootReference& from);
  Expression_FieldReference_RootReference(Expression_FieldReference_RootReference&& from) noexcept
    : Expression_FieldReference_RootReference() {
    *this = ::std::move(from);
  }

  inline Expression_FieldReference_RootReference& operator=(const Expression_FieldReference_RootReference& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_FieldReference_RootReference& operator=(Expression_FieldReference_RootReference&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_FieldReference_RootReference& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_FieldReference_RootReference* internal_default_instance() {
    return reinterpret_cast<const Expression_FieldReference_RootReference*>(
               &_Expression_FieldReference_RootReference_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    71;

  friend void swap(Expression_FieldReference_RootReference& a, Expression_FieldReference_RootReference& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_FieldReference_RootReference* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_FieldReference_RootReference* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_FieldReference_RootReference* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_FieldReference_RootReference>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::CopyFrom;
  inline void CopyFrom(const Expression_FieldReference_RootReference& from) {
    ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::CopyImpl(this, from);
  }
  using ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::MergeFrom;
  void MergeFrom(const Expression_FieldReference_RootReference& from) {
    ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::MergeImpl(this, from);
  }
  public:

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.FieldReference.RootReference";
  }
  protected:
  explicit Expression_FieldReference_RootReference(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // @@protoc_insertion_point(class_scope:substrait.Expression.FieldReference.RootReference)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_FieldReference_OuterReference final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.FieldReference.OuterReference) */ {
 public:
  inline Expression_FieldReference_OuterReference() : Expression_FieldReference_OuterReference(nullptr) {}
  ~Expression_FieldReference_OuterReference() override;
  explicit constexpr Expression_FieldReference_OuterReference(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_FieldReference_OuterReference(const Expression_FieldReference_OuterReference& from);
  Expression_FieldReference_OuterReference(Expression_FieldReference_OuterReference&& from) noexcept
    : Expression_FieldReference_OuterReference() {
    *this = ::std::move(from);
  }

  inline Expression_FieldReference_OuterReference& operator=(const Expression_FieldReference_OuterReference& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_FieldReference_OuterReference& operator=(Expression_FieldReference_OuterReference&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_FieldReference_OuterReference& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_FieldReference_OuterReference* internal_default_instance() {
    return reinterpret_cast<const Expression_FieldReference_OuterReference*>(
               &_Expression_FieldReference_OuterReference_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    72;

  friend void swap(Expression_FieldReference_OuterReference& a, Expression_FieldReference_OuterReference& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_FieldReference_OuterReference* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_FieldReference_OuterReference* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_FieldReference_OuterReference* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_FieldReference_OuterReference>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_FieldReference_OuterReference& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_FieldReference_OuterReference& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_FieldReference_OuterReference* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.FieldReference.OuterReference";
  }
  protected:
  explicit Expression_FieldReference_OuterReference(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kStepsOutFieldNumber = 1,
  };
  // uint32 steps_out = 1 [json_name = "stepsOut"];
  void clear_steps_out();
  uint32_t steps_out() const;
  void set_steps_out(uint32_t value);
  private:
  uint32_t _internal_steps_out() const;
  void _internal_set_steps_out(uint32_t value);
  public:

  // @@protoc_insertion_point(class_scope:substrait.Expression.FieldReference.OuterReference)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  uint32_t steps_out_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_FieldReference final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.FieldReference) */ {
 public:
  inline Expression_FieldReference() : Expression_FieldReference(nullptr) {}
  ~Expression_FieldReference() override;
  explicit constexpr Expression_FieldReference(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_FieldReference(const Expression_FieldReference& from);
  Expression_FieldReference(Expression_FieldReference&& from) noexcept
    : Expression_FieldReference() {
    *this = ::std::move(from);
  }

  inline Expression_FieldReference& operator=(const Expression_FieldReference& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_FieldReference& operator=(Expression_FieldReference&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_FieldReference& default_instance() {
    return *internal_default_instance();
  }
  enum ReferenceTypeCase {
    kDirectReference = 1,
    kMaskedReference = 2,
    REFERENCE_TYPE_NOT_SET = 0,
  };

  enum RootTypeCase {
    kExpression = 3,
    kRootReference = 4,
    kOuterReference = 5,
    ROOT_TYPE_NOT_SET = 0,
  };

  static inline const Expression_FieldReference* internal_default_instance() {
    return reinterpret_cast<const Expression_FieldReference*>(
               &_Expression_FieldReference_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    73;

  friend void swap(Expression_FieldReference& a, Expression_FieldReference& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_FieldReference* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_FieldReference* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_FieldReference* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_FieldReference>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_FieldReference& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_FieldReference& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_FieldReference* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.FieldReference";
  }
  protected:
  explicit Expression_FieldReference(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef Expression_FieldReference_RootReference RootReference;
  typedef Expression_FieldReference_OuterReference OuterReference;

  // accessors -------------------------------------------------------

  enum : int {
    kDirectReferenceFieldNumber = 1,
    kMaskedReferenceFieldNumber = 2,
    kExpressionFieldNumber = 3,
    kRootReferenceFieldNumber = 4,
    kOuterReferenceFieldNumber = 5,
  };
  // .substrait.Expression.ReferenceSegment direct_reference = 1 [json_name = "directReference"];
  bool has_direct_reference() const;
  private:
  bool _internal_has_direct_reference() const;
  public:
  void clear_direct_reference();
  const ::substrait::Expression_ReferenceSegment& direct_reference() const;
  PROTOBUF_NODISCARD ::substrait::Expression_ReferenceSegment* release_direct_reference();
  ::substrait::Expression_ReferenceSegment* mutable_direct_reference();
  void set_allocated_direct_reference(::substrait::Expression_ReferenceSegment* direct_reference);
  private:
  const ::substrait::Expression_ReferenceSegment& _internal_direct_reference() const;
  ::substrait::Expression_ReferenceSegment* _internal_mutable_direct_reference();
  public:
  void unsafe_arena_set_allocated_direct_reference(
      ::substrait::Expression_ReferenceSegment* direct_reference);
  ::substrait::Expression_ReferenceSegment* unsafe_arena_release_direct_reference();

  // .substrait.Expression.MaskExpression masked_reference = 2 [json_name = "maskedReference"];
  bool has_masked_reference() const;
  private:
  bool _internal_has_masked_reference() const;
  public:
  void clear_masked_reference();
  const ::substrait::Expression_MaskExpression& masked_reference() const;
  PROTOBUF_NODISCARD ::substrait::Expression_MaskExpression* release_masked_reference();
  ::substrait::Expression_MaskExpression* mutable_masked_reference();
  void set_allocated_masked_reference(::substrait::Expression_MaskExpression* masked_reference);
  private:
  const ::substrait::Expression_MaskExpression& _internal_masked_reference() const;
  ::substrait::Expression_MaskExpression* _internal_mutable_masked_reference();
  public:
  void unsafe_arena_set_allocated_masked_reference(
      ::substrait::Expression_MaskExpression* masked_reference);
  ::substrait::Expression_MaskExpression* unsafe_arena_release_masked_reference();

  // .substrait.Expression expression = 3 [json_name = "expression"];
  bool has_expression() const;
  private:
  bool _internal_has_expression() const;
  public:
  void clear_expression();
  const ::substrait::Expression& expression() const;
  PROTOBUF_NODISCARD ::substrait::Expression* release_expression();
  ::substrait::Expression* mutable_expression();
  void set_allocated_expression(::substrait::Expression* expression);
  private:
  const ::substrait::Expression& _internal_expression() const;
  ::substrait::Expression* _internal_mutable_expression();
  public:
  void unsafe_arena_set_allocated_expression(
      ::substrait::Expression* expression);
  ::substrait::Expression* unsafe_arena_release_expression();

  // .substrait.Expression.FieldReference.RootReference root_reference = 4 [json_name = "rootReference"];
  bool has_root_reference() const;
  private:
  bool _internal_has_root_reference() const;
  public:
  void clear_root_reference();
  const ::substrait::Expression_FieldReference_RootReference& root_reference() const;
  PROTOBUF_NODISCARD ::substrait::Expression_FieldReference_RootReference* release_root_reference();
  ::substrait::Expression_FieldReference_RootReference* mutable_root_reference();
  void set_allocated_root_reference(::substrait::Expression_FieldReference_RootReference* root_reference);
  private:
  const ::substrait::Expression_FieldReference_RootReference& _internal_root_reference() const;
  ::substrait::Expression_FieldReference_RootReference* _internal_mutable_root_reference();
  public:
  void unsafe_arena_set_allocated_root_reference(
      ::substrait::Expression_FieldReference_RootReference* root_reference);
  ::substrait::Expression_FieldReference_RootReference* unsafe_arena_release_root_reference();

  // .substrait.Expression.FieldReference.OuterReference outer_reference = 5 [json_name = "outerReference"];
  bool has_outer_reference() const;
  private:
  bool _internal_has_outer_reference() const;
  public:
  void clear_outer_reference();
  const ::substrait::Expression_FieldReference_OuterReference& outer_reference() const;
  PROTOBUF_NODISCARD ::substrait::Expression_FieldReference_OuterReference* release_outer_reference();
  ::substrait::Expression_FieldReference_OuterReference* mutable_outer_reference();
  void set_allocated_outer_reference(::substrait::Expression_FieldReference_OuterReference* outer_reference);
  private:
  const ::substrait::Expression_FieldReference_OuterReference& _internal_outer_reference() const;
  ::substrait::Expression_FieldReference_OuterReference* _internal_mutable_outer_reference();
  public:
  void unsafe_arena_set_allocated_outer_reference(
      ::substrait::Expression_FieldReference_OuterReference* outer_reference);
  ::substrait::Expression_FieldReference_OuterReference* unsafe_arena_release_outer_reference();

  void clear_reference_type();
  ReferenceTypeCase reference_type_case() const;
  void clear_root_type();
  RootTypeCase root_type_case() const;
  // @@protoc_insertion_point(class_scope:substrait.Expression.FieldReference)
 private:
  class _Internal;
  void set_has_direct_reference();
  void set_has_masked_reference();
  void set_has_expression();
  void set_has_root_reference();
  void set_has_outer_reference();

  inline bool has_reference_type() const;
  inline void clear_has_reference_type();

  inline bool has_root_type() const;
  inline void clear_has_root_type();

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  union ReferenceTypeUnion {
    constexpr ReferenceTypeUnion() : _constinit_{} {}
      ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized _constinit_;
    ::substrait::Expression_ReferenceSegment* direct_reference_;
    ::substrait::Expression_MaskExpression* masked_reference_;
  } reference_type_;
  union RootTypeUnion {
    constexpr RootTypeUnion() : _constinit_{} {}
      ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized _constinit_;
    ::substrait::Expression* expression_;
    ::substrait::Expression_FieldReference_RootReference* root_reference_;
    ::substrait::Expression_FieldReference_OuterReference* outer_reference_;
  } root_type_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  uint32_t _oneof_case_[2];

  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_Subquery_Scalar final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.Subquery.Scalar) */ {
 public:
  inline Expression_Subquery_Scalar() : Expression_Subquery_Scalar(nullptr) {}
  ~Expression_Subquery_Scalar() override;
  explicit constexpr Expression_Subquery_Scalar(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_Subquery_Scalar(const Expression_Subquery_Scalar& from);
  Expression_Subquery_Scalar(Expression_Subquery_Scalar&& from) noexcept
    : Expression_Subquery_Scalar() {
    *this = ::std::move(from);
  }

  inline Expression_Subquery_Scalar& operator=(const Expression_Subquery_Scalar& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_Subquery_Scalar& operator=(Expression_Subquery_Scalar&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_Subquery_Scalar& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_Subquery_Scalar* internal_default_instance() {
    return reinterpret_cast<const Expression_Subquery_Scalar*>(
               &_Expression_Subquery_Scalar_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    74;

  friend void swap(Expression_Subquery_Scalar& a, Expression_Subquery_Scalar& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_Subquery_Scalar* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_Subquery_Scalar* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_Subquery_Scalar* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_Subquery_Scalar>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_Subquery_Scalar& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_Subquery_Scalar& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_Subquery_Scalar* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.Subquery.Scalar";
  }
  protected:
  explicit Expression_Subquery_Scalar(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kInputFieldNumber = 1,
  };
  // .substrait.Rel input = 1 [json_name = "input"];
  bool has_input() const;
  private:
  bool _internal_has_input() const;
  public:
  void clear_input();
  const ::substrait::Rel& input() const;
  PROTOBUF_NODISCARD ::substrait::Rel* release_input();
  ::substrait::Rel* mutable_input();
  void set_allocated_input(::substrait::Rel* input);
  private:
  const ::substrait::Rel& _internal_input() const;
  ::substrait::Rel* _internal_mutable_input();
  public:
  void unsafe_arena_set_allocated_input(
      ::substrait::Rel* input);
  ::substrait::Rel* unsafe_arena_release_input();

  // @@protoc_insertion_point(class_scope:substrait.Expression.Subquery.Scalar)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::substrait::Rel* input_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_Subquery_InPredicate final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.Subquery.InPredicate) */ {
 public:
  inline Expression_Subquery_InPredicate() : Expression_Subquery_InPredicate(nullptr) {}
  ~Expression_Subquery_InPredicate() override;
  explicit constexpr Expression_Subquery_InPredicate(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_Subquery_InPredicate(const Expression_Subquery_InPredicate& from);
  Expression_Subquery_InPredicate(Expression_Subquery_InPredicate&& from) noexcept
    : Expression_Subquery_InPredicate() {
    *this = ::std::move(from);
  }

  inline Expression_Subquery_InPredicate& operator=(const Expression_Subquery_InPredicate& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_Subquery_InPredicate& operator=(Expression_Subquery_InPredicate&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_Subquery_InPredicate& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_Subquery_InPredicate* internal_default_instance() {
    return reinterpret_cast<const Expression_Subquery_InPredicate*>(
               &_Expression_Subquery_InPredicate_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    75;

  friend void swap(Expression_Subquery_InPredicate& a, Expression_Subquery_InPredicate& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_Subquery_InPredicate* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_Subquery_InPredicate* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_Subquery_InPredicate* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_Subquery_InPredicate>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_Subquery_InPredicate& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_Subquery_InPredicate& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_Subquery_InPredicate* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.Subquery.InPredicate";
  }
  protected:
  explicit Expression_Subquery_InPredicate(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kNeedlesFieldNumber = 1,
    kHaystackFieldNumber = 2,
  };
  // repeated .substrait.Expression needles = 1 [json_name = "needles"];
  int needles_size() const;
  private:
  int _internal_needles_size() const;
  public:
  void clear_needles();
  ::substrait::Expression* mutable_needles(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >*
      mutable_needles();
  private:
  const ::substrait::Expression& _internal_needles(int index) const;
  ::substrait::Expression* _internal_add_needles();
  public:
  const ::substrait::Expression& needles(int index) const;
  ::substrait::Expression* add_needles();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >&
      needles() const;

  // .substrait.Rel haystack = 2 [json_name = "haystack"];
  bool has_haystack() const;
  private:
  bool _internal_has_haystack() const;
  public:
  void clear_haystack();
  const ::substrait::Rel& haystack() const;
  PROTOBUF_NODISCARD ::substrait::Rel* release_haystack();
  ::substrait::Rel* mutable_haystack();
  void set_allocated_haystack(::substrait::Rel* haystack);
  private:
  const ::substrait::Rel& _internal_haystack() const;
  ::substrait::Rel* _internal_mutable_haystack();
  public:
  void unsafe_arena_set_allocated_haystack(
      ::substrait::Rel* haystack);
  ::substrait::Rel* unsafe_arena_release_haystack();

  // @@protoc_insertion_point(class_scope:substrait.Expression.Subquery.InPredicate)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression > needles_;
  ::substrait::Rel* haystack_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_Subquery_SetPredicate final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.Subquery.SetPredicate) */ {
 public:
  inline Expression_Subquery_SetPredicate() : Expression_Subquery_SetPredicate(nullptr) {}
  ~Expression_Subquery_SetPredicate() override;
  explicit constexpr Expression_Subquery_SetPredicate(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_Subquery_SetPredicate(const Expression_Subquery_SetPredicate& from);
  Expression_Subquery_SetPredicate(Expression_Subquery_SetPredicate&& from) noexcept
    : Expression_Subquery_SetPredicate() {
    *this = ::std::move(from);
  }

  inline Expression_Subquery_SetPredicate& operator=(const Expression_Subquery_SetPredicate& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_Subquery_SetPredicate& operator=(Expression_Subquery_SetPredicate&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_Subquery_SetPredicate& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_Subquery_SetPredicate* internal_default_instance() {
    return reinterpret_cast<const Expression_Subquery_SetPredicate*>(
               &_Expression_Subquery_SetPredicate_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    76;

  friend void swap(Expression_Subquery_SetPredicate& a, Expression_Subquery_SetPredicate& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_Subquery_SetPredicate* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_Subquery_SetPredicate* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_Subquery_SetPredicate* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_Subquery_SetPredicate>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_Subquery_SetPredicate& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_Subquery_SetPredicate& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_Subquery_SetPredicate* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.Subquery.SetPredicate";
  }
  protected:
  explicit Expression_Subquery_SetPredicate(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef Expression_Subquery_SetPredicate_PredicateOp PredicateOp;
  static constexpr PredicateOp PREDICATE_OP_UNSPECIFIED =
    Expression_Subquery_SetPredicate_PredicateOp_PREDICATE_OP_UNSPECIFIED;
  static constexpr PredicateOp PREDICATE_OP_EXISTS =
    Expression_Subquery_SetPredicate_PredicateOp_PREDICATE_OP_EXISTS;
  static constexpr PredicateOp PREDICATE_OP_UNIQUE =
    Expression_Subquery_SetPredicate_PredicateOp_PREDICATE_OP_UNIQUE;
  static inline bool PredicateOp_IsValid(int value) {
    return Expression_Subquery_SetPredicate_PredicateOp_IsValid(value);
  }
  static constexpr PredicateOp PredicateOp_MIN =
    Expression_Subquery_SetPredicate_PredicateOp_PredicateOp_MIN;
  static constexpr PredicateOp PredicateOp_MAX =
    Expression_Subquery_SetPredicate_PredicateOp_PredicateOp_MAX;
  static constexpr int PredicateOp_ARRAYSIZE =
    Expression_Subquery_SetPredicate_PredicateOp_PredicateOp_ARRAYSIZE;
  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
  PredicateOp_descriptor() {
    return Expression_Subquery_SetPredicate_PredicateOp_descriptor();
  }
  template<typename T>
  static inline const std::string& PredicateOp_Name(T enum_t_value) {
    static_assert(::std::is_same<T, PredicateOp>::value ||
      ::std::is_integral<T>::value,
      "Incorrect type passed to function PredicateOp_Name.");
    return Expression_Subquery_SetPredicate_PredicateOp_Name(enum_t_value);
  }
  static inline bool PredicateOp_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
      PredicateOp* value) {
    return Expression_Subquery_SetPredicate_PredicateOp_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  enum : int {
    kTuplesFieldNumber = 2,
    kPredicateOpFieldNumber = 1,
  };
  // .substrait.Rel tuples = 2 [json_name = "tuples"];
  bool has_tuples() const;
  private:
  bool _internal_has_tuples() const;
  public:
  void clear_tuples();
  const ::substrait::Rel& tuples() const;
  PROTOBUF_NODISCARD ::substrait::Rel* release_tuples();
  ::substrait::Rel* mutable_tuples();
  void set_allocated_tuples(::substrait::Rel* tuples);
  private:
  const ::substrait::Rel& _internal_tuples() const;
  ::substrait::Rel* _internal_mutable_tuples();
  public:
  void unsafe_arena_set_allocated_tuples(
      ::substrait::Rel* tuples);
  ::substrait::Rel* unsafe_arena_release_tuples();

  // .substrait.Expression.Subquery.SetPredicate.PredicateOp predicate_op = 1 [json_name = "predicateOp"];
  void clear_predicate_op();
  ::substrait::Expression_Subquery_SetPredicate_PredicateOp predicate_op() const;
  void set_predicate_op(::substrait::Expression_Subquery_SetPredicate_PredicateOp value);
  private:
  ::substrait::Expression_Subquery_SetPredicate_PredicateOp _internal_predicate_op() const;
  void _internal_set_predicate_op(::substrait::Expression_Subquery_SetPredicate_PredicateOp value);
  public:

  // @@protoc_insertion_point(class_scope:substrait.Expression.Subquery.SetPredicate)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::substrait::Rel* tuples_;
  int predicate_op_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_Subquery_SetComparison final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.Subquery.SetComparison) */ {
 public:
  inline Expression_Subquery_SetComparison() : Expression_Subquery_SetComparison(nullptr) {}
  ~Expression_Subquery_SetComparison() override;
  explicit constexpr Expression_Subquery_SetComparison(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_Subquery_SetComparison(const Expression_Subquery_SetComparison& from);
  Expression_Subquery_SetComparison(Expression_Subquery_SetComparison&& from) noexcept
    : Expression_Subquery_SetComparison() {
    *this = ::std::move(from);
  }

  inline Expression_Subquery_SetComparison& operator=(const Expression_Subquery_SetComparison& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_Subquery_SetComparison& operator=(Expression_Subquery_SetComparison&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_Subquery_SetComparison& default_instance() {
    return *internal_default_instance();
  }
  static inline const Expression_Subquery_SetComparison* internal_default_instance() {
    return reinterpret_cast<const Expression_Subquery_SetComparison*>(
               &_Expression_Subquery_SetComparison_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    77;

  friend void swap(Expression_Subquery_SetComparison& a, Expression_Subquery_SetComparison& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_Subquery_SetComparison* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_Subquery_SetComparison* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_Subquery_SetComparison* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_Subquery_SetComparison>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_Subquery_SetComparison& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_Subquery_SetComparison& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_Subquery_SetComparison* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.Subquery.SetComparison";
  }
  protected:
  explicit Expression_Subquery_SetComparison(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef Expression_Subquery_SetComparison_ComparisonOp ComparisonOp;
  static constexpr ComparisonOp COMPARISON_OP_UNSPECIFIED =
    Expression_Subquery_SetComparison_ComparisonOp_COMPARISON_OP_UNSPECIFIED;
  static constexpr ComparisonOp COMPARISON_OP_EQ =
    Expression_Subquery_SetComparison_ComparisonOp_COMPARISON_OP_EQ;
  static constexpr ComparisonOp COMPARISON_OP_NE =
    Expression_Subquery_SetComparison_ComparisonOp_COMPARISON_OP_NE;
  static constexpr ComparisonOp COMPARISON_OP_LT =
    Expression_Subquery_SetComparison_ComparisonOp_COMPARISON_OP_LT;
  static constexpr ComparisonOp COMPARISON_OP_GT =
    Expression_Subquery_SetComparison_ComparisonOp_COMPARISON_OP_GT;
  static constexpr ComparisonOp COMPARISON_OP_LE =
    Expression_Subquery_SetComparison_ComparisonOp_COMPARISON_OP_LE;
  static constexpr ComparisonOp COMPARISON_OP_GE =
    Expression_Subquery_SetComparison_ComparisonOp_COMPARISON_OP_GE;
  static inline bool ComparisonOp_IsValid(int value) {
    return Expression_Subquery_SetComparison_ComparisonOp_IsValid(value);
  }
  static constexpr ComparisonOp ComparisonOp_MIN =
    Expression_Subquery_SetComparison_ComparisonOp_ComparisonOp_MIN;
  static constexpr ComparisonOp ComparisonOp_MAX =
    Expression_Subquery_SetComparison_ComparisonOp_ComparisonOp_MAX;
  static constexpr int ComparisonOp_ARRAYSIZE =
    Expression_Subquery_SetComparison_ComparisonOp_ComparisonOp_ARRAYSIZE;
  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
  ComparisonOp_descriptor() {
    return Expression_Subquery_SetComparison_ComparisonOp_descriptor();
  }
  template<typename T>
  static inline const std::string& ComparisonOp_Name(T enum_t_value) {
    static_assert(::std::is_same<T, ComparisonOp>::value ||
      ::std::is_integral<T>::value,
      "Incorrect type passed to function ComparisonOp_Name.");
    return Expression_Subquery_SetComparison_ComparisonOp_Name(enum_t_value);
  }
  static inline bool ComparisonOp_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
      ComparisonOp* value) {
    return Expression_Subquery_SetComparison_ComparisonOp_Parse(name, value);
  }

  typedef Expression_Subquery_SetComparison_ReductionOp ReductionOp;
  static constexpr ReductionOp REDUCTION_OP_UNSPECIFIED =
    Expression_Subquery_SetComparison_ReductionOp_REDUCTION_OP_UNSPECIFIED;
  static constexpr ReductionOp REDUCTION_OP_ANY =
    Expression_Subquery_SetComparison_ReductionOp_REDUCTION_OP_ANY;
  static constexpr ReductionOp REDUCTION_OP_ALL =
    Expression_Subquery_SetComparison_ReductionOp_REDUCTION_OP_ALL;
  static inline bool ReductionOp_IsValid(int value) {
    return Expression_Subquery_SetComparison_ReductionOp_IsValid(value);
  }
  static constexpr ReductionOp ReductionOp_MIN =
    Expression_Subquery_SetComparison_ReductionOp_ReductionOp_MIN;
  static constexpr ReductionOp ReductionOp_MAX =
    Expression_Subquery_SetComparison_ReductionOp_ReductionOp_MAX;
  static constexpr int ReductionOp_ARRAYSIZE =
    Expression_Subquery_SetComparison_ReductionOp_ReductionOp_ARRAYSIZE;
  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
  ReductionOp_descriptor() {
    return Expression_Subquery_SetComparison_ReductionOp_descriptor();
  }
  template<typename T>
  static inline const std::string& ReductionOp_Name(T enum_t_value) {
    static_assert(::std::is_same<T, ReductionOp>::value ||
      ::std::is_integral<T>::value,
      "Incorrect type passed to function ReductionOp_Name.");
    return Expression_Subquery_SetComparison_ReductionOp_Name(enum_t_value);
  }
  static inline bool ReductionOp_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
      ReductionOp* value) {
    return Expression_Subquery_SetComparison_ReductionOp_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  enum : int {
    kLeftFieldNumber = 3,
    kRightFieldNumber = 4,
    kReductionOpFieldNumber = 1,
    kComparisonOpFieldNumber = 2,
  };
  // .substrait.Expression left = 3 [json_name = "left"];
  bool has_left() const;
  private:
  bool _internal_has_left() const;
  public:
  void clear_left();
  const ::substrait::Expression& left() const;
  PROTOBUF_NODISCARD ::substrait::Expression* release_left();
  ::substrait::Expression* mutable_left();
  void set_allocated_left(::substrait::Expression* left);
  private:
  const ::substrait::Expression& _internal_left() const;
  ::substrait::Expression* _internal_mutable_left();
  public:
  void unsafe_arena_set_allocated_left(
      ::substrait::Expression* left);
  ::substrait::Expression* unsafe_arena_release_left();

  // .substrait.Rel right = 4 [json_name = "right"];
  bool has_right() const;
  private:
  bool _internal_has_right() const;
  public:
  void clear_right();
  const ::substrait::Rel& right() const;
  PROTOBUF_NODISCARD ::substrait::Rel* release_right();
  ::substrait::Rel* mutable_right();
  void set_allocated_right(::substrait::Rel* right);
  private:
  const ::substrait::Rel& _internal_right() const;
  ::substrait::Rel* _internal_mutable_right();
  public:
  void unsafe_arena_set_allocated_right(
      ::substrait::Rel* right);
  ::substrait::Rel* unsafe_arena_release_right();

  // .substrait.Expression.Subquery.SetComparison.ReductionOp reduction_op = 1 [json_name = "reductionOp"];
  void clear_reduction_op();
  ::substrait::Expression_Subquery_SetComparison_ReductionOp reduction_op() const;
  void set_reduction_op(::substrait::Expression_Subquery_SetComparison_ReductionOp value);
  private:
  ::substrait::Expression_Subquery_SetComparison_ReductionOp _internal_reduction_op() const;
  void _internal_set_reduction_op(::substrait::Expression_Subquery_SetComparison_ReductionOp value);
  public:

  // .substrait.Expression.Subquery.SetComparison.ComparisonOp comparison_op = 2 [json_name = "comparisonOp"];
  void clear_comparison_op();
  ::substrait::Expression_Subquery_SetComparison_ComparisonOp comparison_op() const;
  void set_comparison_op(::substrait::Expression_Subquery_SetComparison_ComparisonOp value);
  private:
  ::substrait::Expression_Subquery_SetComparison_ComparisonOp _internal_comparison_op() const;
  void _internal_set_comparison_op(::substrait::Expression_Subquery_SetComparison_ComparisonOp value);
  public:

  // @@protoc_insertion_point(class_scope:substrait.Expression.Subquery.SetComparison)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::substrait::Expression* left_;
  ::substrait::Rel* right_;
  int reduction_op_;
  int comparison_op_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression_Subquery final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression.Subquery) */ {
 public:
  inline Expression_Subquery() : Expression_Subquery(nullptr) {}
  ~Expression_Subquery() override;
  explicit constexpr Expression_Subquery(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression_Subquery(const Expression_Subquery& from);
  Expression_Subquery(Expression_Subquery&& from) noexcept
    : Expression_Subquery() {
    *this = ::std::move(from);
  }

  inline Expression_Subquery& operator=(const Expression_Subquery& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression_Subquery& operator=(Expression_Subquery&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression_Subquery& default_instance() {
    return *internal_default_instance();
  }
  enum SubqueryTypeCase {
    kScalar = 1,
    kInPredicate = 2,
    kSetPredicate = 3,
    kSetComparison = 4,
    SUBQUERY_TYPE_NOT_SET = 0,
  };

  static inline const Expression_Subquery* internal_default_instance() {
    return reinterpret_cast<const Expression_Subquery*>(
               &_Expression_Subquery_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    78;

  friend void swap(Expression_Subquery& a, Expression_Subquery& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression_Subquery* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression_Subquery* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression_Subquery* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression_Subquery>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression_Subquery& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression_Subquery& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression_Subquery* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression.Subquery";
  }
  protected:
  explicit Expression_Subquery(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef Expression_Subquery_Scalar Scalar;
  typedef Expression_Subquery_InPredicate InPredicate;
  typedef Expression_Subquery_SetPredicate SetPredicate;
  typedef Expression_Subquery_SetComparison SetComparison;

  // accessors -------------------------------------------------------

  enum : int {
    kScalarFieldNumber = 1,
    kInPredicateFieldNumber = 2,
    kSetPredicateFieldNumber = 3,
    kSetComparisonFieldNumber = 4,
  };
  // .substrait.Expression.Subquery.Scalar scalar = 1 [json_name = "scalar"];
  bool has_scalar() const;
  private:
  bool _internal_has_scalar() const;
  public:
  void clear_scalar();
  const ::substrait::Expression_Subquery_Scalar& scalar() const;
  PROTOBUF_NODISCARD ::substrait::Expression_Subquery_Scalar* release_scalar();
  ::substrait::Expression_Subquery_Scalar* mutable_scalar();
  void set_allocated_scalar(::substrait::Expression_Subquery_Scalar* scalar);
  private:
  const ::substrait::Expression_Subquery_Scalar& _internal_scalar() const;
  ::substrait::Expression_Subquery_Scalar* _internal_mutable_scalar();
  public:
  void unsafe_arena_set_allocated_scalar(
      ::substrait::Expression_Subquery_Scalar* scalar);
  ::substrait::Expression_Subquery_Scalar* unsafe_arena_release_scalar();

  // .substrait.Expression.Subquery.InPredicate in_predicate = 2 [json_name = "inPredicate"];
  bool has_in_predicate() const;
  private:
  bool _internal_has_in_predicate() const;
  public:
  void clear_in_predicate();
  const ::substrait::Expression_Subquery_InPredicate& in_predicate() const;
  PROTOBUF_NODISCARD ::substrait::Expression_Subquery_InPredicate* release_in_predicate();
  ::substrait::Expression_Subquery_InPredicate* mutable_in_predicate();
  void set_allocated_in_predicate(::substrait::Expression_Subquery_InPredicate* in_predicate);
  private:
  const ::substrait::Expression_Subquery_InPredicate& _internal_in_predicate() const;
  ::substrait::Expression_Subquery_InPredicate* _internal_mutable_in_predicate();
  public:
  void unsafe_arena_set_allocated_in_predicate(
      ::substrait::Expression_Subquery_InPredicate* in_predicate);
  ::substrait::Expression_Subquery_InPredicate* unsafe_arena_release_in_predicate();

  // .substrait.Expression.Subquery.SetPredicate set_predicate = 3 [json_name = "setPredicate"];
  bool has_set_predicate() const;
  private:
  bool _internal_has_set_predicate() const;
  public:
  void clear_set_predicate();
  const ::substrait::Expression_Subquery_SetPredicate& set_predicate() const;
  PROTOBUF_NODISCARD ::substrait::Expression_Subquery_SetPredicate* release_set_predicate();
  ::substrait::Expression_Subquery_SetPredicate* mutable_set_predicate();
  void set_allocated_set_predicate(::substrait::Expression_Subquery_SetPredicate* set_predicate);
  private:
  const ::substrait::Expression_Subquery_SetPredicate& _internal_set_predicate() const;
  ::substrait::Expression_Subquery_SetPredicate* _internal_mutable_set_predicate();
  public:
  void unsafe_arena_set_allocated_set_predicate(
      ::substrait::Expression_Subquery_SetPredicate* set_predicate);
  ::substrait::Expression_Subquery_SetPredicate* unsafe_arena_release_set_predicate();

  // .substrait.Expression.Subquery.SetComparison set_comparison = 4 [json_name = "setComparison"];
  bool has_set_comparison() const;
  private:
  bool _internal_has_set_comparison() const;
  public:
  void clear_set_comparison();
  const ::substrait::Expression_Subquery_SetComparison& set_comparison() const;
  PROTOBUF_NODISCARD ::substrait::Expression_Subquery_SetComparison* release_set_comparison();
  ::substrait::Expression_Subquery_SetComparison* mutable_set_comparison();
  void set_allocated_set_comparison(::substrait::Expression_Subquery_SetComparison* set_comparison);
  private:
  const ::substrait::Expression_Subquery_SetComparison& _internal_set_comparison() const;
  ::substrait::Expression_Subquery_SetComparison* _internal_mutable_set_comparison();
  public:
  void unsafe_arena_set_allocated_set_comparison(
      ::substrait::Expression_Subquery_SetComparison* set_comparison);
  ::substrait::Expression_Subquery_SetComparison* unsafe_arena_release_set_comparison();

  void clear_subquery_type();
  SubqueryTypeCase subquery_type_case() const;
  // @@protoc_insertion_point(class_scope:substrait.Expression.Subquery)
 private:
  class _Internal;
  void set_has_scalar();
  void set_has_in_predicate();
  void set_has_set_predicate();
  void set_has_set_comparison();

  inline bool has_subquery_type() const;
  inline void clear_has_subquery_type();

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  union SubqueryTypeUnion {
    constexpr SubqueryTypeUnion() : _constinit_{} {}
      ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized _constinit_;
    ::substrait::Expression_Subquery_Scalar* scalar_;
    ::substrait::Expression_Subquery_InPredicate* in_predicate_;
    ::substrait::Expression_Subquery_SetPredicate* set_predicate_;
    ::substrait::Expression_Subquery_SetComparison* set_comparison_;
  } subquery_type_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  uint32_t _oneof_case_[1];

  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class Expression final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.Expression) */ {
 public:
  inline Expression() : Expression(nullptr) {}
  ~Expression() override;
  explicit constexpr Expression(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Expression(const Expression& from);
  Expression(Expression&& from) noexcept
    : Expression() {
    *this = ::std::move(from);
  }

  inline Expression& operator=(const Expression& from) {
    CopyFrom(from);
    return *this;
  }
  inline Expression& operator=(Expression&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Expression& default_instance() {
    return *internal_default_instance();
  }
  enum RexTypeCase {
    kLiteral = 1,
    kSelection = 2,
    kScalarFunction = 3,
    kWindowFunction = 5,
    kIfThen = 6,
    kSwitchExpression = 7,
    kSingularOrList = 8,
    kMultiOrList = 9,
    kEnum = 10,
    kCast = 11,
    kSubquery = 12,
    REX_TYPE_NOT_SET = 0,
  };

  static inline const Expression* internal_default_instance() {
    return reinterpret_cast<const Expression*>(
               &_Expression_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    79;

  friend void swap(Expression& a, Expression& b) {
    a.Swap(&b);
  }
  inline void Swap(Expression* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Expression* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Expression* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Expression>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Expression& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Expression& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Expression* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.Expression";
  }
  protected:
  explicit Expression(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef Expression_Enum Enum;
  typedef Expression_Literal Literal;
  typedef Expression_ScalarFunction ScalarFunction;
  typedef Expression_WindowFunction WindowFunction;
  typedef Expression_IfThen IfThen;
  typedef Expression_Cast Cast;
  typedef Expression_SwitchExpression SwitchExpression;
  typedef Expression_SingularOrList SingularOrList;
  typedef Expression_MultiOrList MultiOrList;
  typedef Expression_EmbeddedFunction EmbeddedFunction;
  typedef Expression_ReferenceSegment ReferenceSegment;
  typedef Expression_MaskExpression MaskExpression;
  typedef Expression_FieldReference FieldReference;
  typedef Expression_Subquery Subquery;

  // accessors -------------------------------------------------------

  enum : int {
    kLiteralFieldNumber = 1,
    kSelectionFieldNumber = 2,
    kScalarFunctionFieldNumber = 3,
    kWindowFunctionFieldNumber = 5,
    kIfThenFieldNumber = 6,
    kSwitchExpressionFieldNumber = 7,
    kSingularOrListFieldNumber = 8,
    kMultiOrListFieldNumber = 9,
    kEnumFieldNumber = 10,
    kCastFieldNumber = 11,
    kSubqueryFieldNumber = 12,
  };
  // .substrait.Expression.Literal literal = 1 [json_name = "literal"];
  bool has_literal() const;
  private:
  bool _internal_has_literal() const;
  public:
  void clear_literal();
  const ::substrait::Expression_Literal& literal() const;
  PROTOBUF_NODISCARD ::substrait::Expression_Literal* release_literal();
  ::substrait::Expression_Literal* mutable_literal();
  void set_allocated_literal(::substrait::Expression_Literal* literal);
  private:
  const ::substrait::Expression_Literal& _internal_literal() const;
  ::substrait::Expression_Literal* _internal_mutable_literal();
  public:
  void unsafe_arena_set_allocated_literal(
      ::substrait::Expression_Literal* literal);
  ::substrait::Expression_Literal* unsafe_arena_release_literal();

  // .substrait.Expression.FieldReference selection = 2 [json_name = "selection"];
  bool has_selection() const;
  private:
  bool _internal_has_selection() const;
  public:
  void clear_selection();
  const ::substrait::Expression_FieldReference& selection() const;
  PROTOBUF_NODISCARD ::substrait::Expression_FieldReference* release_selection();
  ::substrait::Expression_FieldReference* mutable_selection();
  void set_allocated_selection(::substrait::Expression_FieldReference* selection);
  private:
  const ::substrait::Expression_FieldReference& _internal_selection() const;
  ::substrait::Expression_FieldReference* _internal_mutable_selection();
  public:
  void unsafe_arena_set_allocated_selection(
      ::substrait::Expression_FieldReference* selection);
  ::substrait::Expression_FieldReference* unsafe_arena_release_selection();

  // .substrait.Expression.ScalarFunction scalar_function = 3 [json_name = "scalarFunction"];
  bool has_scalar_function() const;
  private:
  bool _internal_has_scalar_function() const;
  public:
  void clear_scalar_function();
  const ::substrait::Expression_ScalarFunction& scalar_function() const;
  PROTOBUF_NODISCARD ::substrait::Expression_ScalarFunction* release_scalar_function();
  ::substrait::Expression_ScalarFunction* mutable_scalar_function();
  void set_allocated_scalar_function(::substrait::Expression_ScalarFunction* scalar_function);
  private:
  const ::substrait::Expression_ScalarFunction& _internal_scalar_function() const;
  ::substrait::Expression_ScalarFunction* _internal_mutable_scalar_function();
  public:
  void unsafe_arena_set_allocated_scalar_function(
      ::substrait::Expression_ScalarFunction* scalar_function);
  ::substrait::Expression_ScalarFunction* unsafe_arena_release_scalar_function();

  // .substrait.Expression.WindowFunction window_function = 5 [json_name = "windowFunction"];
  bool has_window_function() const;
  private:
  bool _internal_has_window_function() const;
  public:
  void clear_window_function();
  const ::substrait::Expression_WindowFunction& window_function() const;
  PROTOBUF_NODISCARD ::substrait::Expression_WindowFunction* release_window_function();
  ::substrait::Expression_WindowFunction* mutable_window_function();
  void set_allocated_window_function(::substrait::Expression_WindowFunction* window_function);
  private:
  const ::substrait::Expression_WindowFunction& _internal_window_function() const;
  ::substrait::Expression_WindowFunction* _internal_mutable_window_function();
  public:
  void unsafe_arena_set_allocated_window_function(
      ::substrait::Expression_WindowFunction* window_function);
  ::substrait::Expression_WindowFunction* unsafe_arena_release_window_function();

  // .substrait.Expression.IfThen if_then = 6 [json_name = "ifThen"];
  bool has_if_then() const;
  private:
  bool _internal_has_if_then() const;
  public:
  void clear_if_then();
  const ::substrait::Expression_IfThen& if_then() const;
  PROTOBUF_NODISCARD ::substrait::Expression_IfThen* release_if_then();
  ::substrait::Expression_IfThen* mutable_if_then();
  void set_allocated_if_then(::substrait::Expression_IfThen* if_then);
  private:
  const ::substrait::Expression_IfThen& _internal_if_then() const;
  ::substrait::Expression_IfThen* _internal_mutable_if_then();
  public:
  void unsafe_arena_set_allocated_if_then(
      ::substrait::Expression_IfThen* if_then);
  ::substrait::Expression_IfThen* unsafe_arena_release_if_then();

  // .substrait.Expression.SwitchExpression switch_expression = 7 [json_name = "switchExpression"];
  bool has_switch_expression() const;
  private:
  bool _internal_has_switch_expression() const;
  public:
  void clear_switch_expression();
  const ::substrait::Expression_SwitchExpression& switch_expression() const;
  PROTOBUF_NODISCARD ::substrait::Expression_SwitchExpression* release_switch_expression();
  ::substrait::Expression_SwitchExpression* mutable_switch_expression();
  void set_allocated_switch_expression(::substrait::Expression_SwitchExpression* switch_expression);
  private:
  const ::substrait::Expression_SwitchExpression& _internal_switch_expression() const;
  ::substrait::Expression_SwitchExpression* _internal_mutable_switch_expression();
  public:
  void unsafe_arena_set_allocated_switch_expression(
      ::substrait::Expression_SwitchExpression* switch_expression);
  ::substrait::Expression_SwitchExpression* unsafe_arena_release_switch_expression();

  // .substrait.Expression.SingularOrList singular_or_list = 8 [json_name = "singularOrList"];
  bool has_singular_or_list() const;
  private:
  bool _internal_has_singular_or_list() const;
  public:
  void clear_singular_or_list();
  const ::substrait::Expression_SingularOrList& singular_or_list() const;
  PROTOBUF_NODISCARD ::substrait::Expression_SingularOrList* release_singular_or_list();
  ::substrait::Expression_SingularOrList* mutable_singular_or_list();
  void set_allocated_singular_or_list(::substrait::Expression_SingularOrList* singular_or_list);
  private:
  const ::substrait::Expression_SingularOrList& _internal_singular_or_list() const;
  ::substrait::Expression_SingularOrList* _internal_mutable_singular_or_list();
  public:
  void unsafe_arena_set_allocated_singular_or_list(
      ::substrait::Expression_SingularOrList* singular_or_list);
  ::substrait::Expression_SingularOrList* unsafe_arena_release_singular_or_list();

  // .substrait.Expression.MultiOrList multi_or_list = 9 [json_name = "multiOrList"];
  bool has_multi_or_list() const;
  private:
  bool _internal_has_multi_or_list() const;
  public:
  void clear_multi_or_list();
  const ::substrait::Expression_MultiOrList& multi_or_list() const;
  PROTOBUF_NODISCARD ::substrait::Expression_MultiOrList* release_multi_or_list();
  ::substrait::Expression_MultiOrList* mutable_multi_or_list();
  void set_allocated_multi_or_list(::substrait::Expression_MultiOrList* multi_or_list);
  private:
  const ::substrait::Expression_MultiOrList& _internal_multi_or_list() const;
  ::substrait::Expression_MultiOrList* _internal_mutable_multi_or_list();
  public:
  void unsafe_arena_set_allocated_multi_or_list(
      ::substrait::Expression_MultiOrList* multi_or_list);
  ::substrait::Expression_MultiOrList* unsafe_arena_release_multi_or_list();

  // .substrait.Expression.Enum enum = 10 [json_name = "enum"];
  bool has_enum_() const;
  private:
  bool _internal_has_enum_() const;
  public:
  void clear_enum_();
  const ::substrait::Expression_Enum& enum_() const;
  PROTOBUF_NODISCARD ::substrait::Expression_Enum* release_enum_();
  ::substrait::Expression_Enum* mutable_enum_();
  void set_allocated_enum_(::substrait::Expression_Enum* enum_);
  private:
  const ::substrait::Expression_Enum& _internal_enum_() const;
  ::substrait::Expression_Enum* _internal_mutable_enum_();
  public:
  void unsafe_arena_set_allocated_enum_(
      ::substrait::Expression_Enum* enum_);
  ::substrait::Expression_Enum* unsafe_arena_release_enum_();

  // .substrait.Expression.Cast cast = 11 [json_name = "cast"];
  bool has_cast() const;
  private:
  bool _internal_has_cast() const;
  public:
  void clear_cast();
  const ::substrait::Expression_Cast& cast() const;
  PROTOBUF_NODISCARD ::substrait::Expression_Cast* release_cast();
  ::substrait::Expression_Cast* mutable_cast();
  void set_allocated_cast(::substrait::Expression_Cast* cast);
  private:
  const ::substrait::Expression_Cast& _internal_cast() const;
  ::substrait::Expression_Cast* _internal_mutable_cast();
  public:
  void unsafe_arena_set_allocated_cast(
      ::substrait::Expression_Cast* cast);
  ::substrait::Expression_Cast* unsafe_arena_release_cast();

  // .substrait.Expression.Subquery subquery = 12 [json_name = "subquery"];
  bool has_subquery() const;
  private:
  bool _internal_has_subquery() const;
  public:
  void clear_subquery();
  const ::substrait::Expression_Subquery& subquery() const;
  PROTOBUF_NODISCARD ::substrait::Expression_Subquery* release_subquery();
  ::substrait::Expression_Subquery* mutable_subquery();
  void set_allocated_subquery(::substrait::Expression_Subquery* subquery);
  private:
  const ::substrait::Expression_Subquery& _internal_subquery() const;
  ::substrait::Expression_Subquery* _internal_mutable_subquery();
  public:
  void unsafe_arena_set_allocated_subquery(
      ::substrait::Expression_Subquery* subquery);
  ::substrait::Expression_Subquery* unsafe_arena_release_subquery();

  void clear_rex_type();
  RexTypeCase rex_type_case() const;
  // @@protoc_insertion_point(class_scope:substrait.Expression)
 private:
  class _Internal;
  void set_has_literal();
  void set_has_selection();
  void set_has_scalar_function();
  void set_has_window_function();
  void set_has_if_then();
  void set_has_switch_expression();
  void set_has_singular_or_list();
  void set_has_multi_or_list();
  void set_has_enum_();
  void set_has_cast();
  void set_has_subquery();

  inline bool has_rex_type() const;
  inline void clear_has_rex_type();

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  union RexTypeUnion {
    constexpr RexTypeUnion() : _constinit_{} {}
      ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized _constinit_;
    ::substrait::Expression_Literal* literal_;
    ::substrait::Expression_FieldReference* selection_;
    ::substrait::Expression_ScalarFunction* scalar_function_;
    ::substrait::Expression_WindowFunction* window_function_;
    ::substrait::Expression_IfThen* if_then_;
    ::substrait::Expression_SwitchExpression* switch_expression_;
    ::substrait::Expression_SingularOrList* singular_or_list_;
    ::substrait::Expression_MultiOrList* multi_or_list_;
    ::substrait::Expression_Enum* enum__;
    ::substrait::Expression_Cast* cast_;
    ::substrait::Expression_Subquery* subquery_;
  } rex_type_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  uint32_t _oneof_case_[1];

  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class SortField final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.SortField) */ {
 public:
  inline SortField() : SortField(nullptr) {}
  ~SortField() override;
  explicit constexpr SortField(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  SortField(const SortField& from);
  SortField(SortField&& from) noexcept
    : SortField() {
    *this = ::std::move(from);
  }

  inline SortField& operator=(const SortField& from) {
    CopyFrom(from);
    return *this;
  }
  inline SortField& operator=(SortField&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const SortField& default_instance() {
    return *internal_default_instance();
  }
  enum SortKindCase {
    kDirection = 2,
    kComparisonFunctionReference = 3,
    SORT_KIND_NOT_SET = 0,
  };

  static inline const SortField* internal_default_instance() {
    return reinterpret_cast<const SortField*>(
               &_SortField_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    80;

  friend void swap(SortField& a, SortField& b) {
    a.Swap(&b);
  }
  inline void Swap(SortField* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(SortField* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  SortField* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<SortField>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const SortField& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const SortField& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(SortField* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.SortField";
  }
  protected:
  explicit SortField(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  typedef SortField_SortDirection SortDirection;
  static constexpr SortDirection SORT_DIRECTION_UNSPECIFIED =
    SortField_SortDirection_SORT_DIRECTION_UNSPECIFIED;
  static constexpr SortDirection SORT_DIRECTION_ASC_NULLS_FIRST =
    SortField_SortDirection_SORT_DIRECTION_ASC_NULLS_FIRST;
  static constexpr SortDirection SORT_DIRECTION_ASC_NULLS_LAST =
    SortField_SortDirection_SORT_DIRECTION_ASC_NULLS_LAST;
  static constexpr SortDirection SORT_DIRECTION_DESC_NULLS_FIRST =
    SortField_SortDirection_SORT_DIRECTION_DESC_NULLS_FIRST;
  static constexpr SortDirection SORT_DIRECTION_DESC_NULLS_LAST =
    SortField_SortDirection_SORT_DIRECTION_DESC_NULLS_LAST;
  static constexpr SortDirection SORT_DIRECTION_CLUSTERED =
    SortField_SortDirection_SORT_DIRECTION_CLUSTERED;
  static inline bool SortDirection_IsValid(int value) {
    return SortField_SortDirection_IsValid(value);
  }
  static constexpr SortDirection SortDirection_MIN =
    SortField_SortDirection_SortDirection_MIN;
  static constexpr SortDirection SortDirection_MAX =
    SortField_SortDirection_SortDirection_MAX;
  static constexpr int SortDirection_ARRAYSIZE =
    SortField_SortDirection_SortDirection_ARRAYSIZE;
  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
  SortDirection_descriptor() {
    return SortField_SortDirection_descriptor();
  }
  template<typename T>
  static inline const std::string& SortDirection_Name(T enum_t_value) {
    static_assert(::std::is_same<T, SortDirection>::value ||
      ::std::is_integral<T>::value,
      "Incorrect type passed to function SortDirection_Name.");
    return SortField_SortDirection_Name(enum_t_value);
  }
  static inline bool SortDirection_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
      SortDirection* value) {
    return SortField_SortDirection_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  enum : int {
    kExprFieldNumber = 1,
    kDirectionFieldNumber = 2,
    kComparisonFunctionReferenceFieldNumber = 3,
  };
  // .substrait.Expression expr = 1 [json_name = "expr"];
  bool has_expr() const;
  private:
  bool _internal_has_expr() const;
  public:
  void clear_expr();
  const ::substrait::Expression& expr() const;
  PROTOBUF_NODISCARD ::substrait::Expression* release_expr();
  ::substrait::Expression* mutable_expr();
  void set_allocated_expr(::substrait::Expression* expr);
  private:
  const ::substrait::Expression& _internal_expr() const;
  ::substrait::Expression* _internal_mutable_expr();
  public:
  void unsafe_arena_set_allocated_expr(
      ::substrait::Expression* expr);
  ::substrait::Expression* unsafe_arena_release_expr();

  // .substrait.SortField.SortDirection direction = 2 [json_name = "direction"];
  bool has_direction() const;
  private:
  bool _internal_has_direction() const;
  public:
  void clear_direction();
  ::substrait::SortField_SortDirection direction() const;
  void set_direction(::substrait::SortField_SortDirection value);
  private:
  ::substrait::SortField_SortDirection _internal_direction() const;
  void _internal_set_direction(::substrait::SortField_SortDirection value);
  public:

  // uint32 comparison_function_reference = 3 [json_name = "comparisonFunctionReference"];
  bool has_comparison_function_reference() const;
  private:
  bool _internal_has_comparison_function_reference() const;
  public:
  void clear_comparison_function_reference();
  uint32_t comparison_function_reference() const;
  void set_comparison_function_reference(uint32_t value);
  private:
  uint32_t _internal_comparison_function_reference() const;
  void _internal_set_comparison_function_reference(uint32_t value);
  public:

  void clear_sort_kind();
  SortKindCase sort_kind_case() const;
  // @@protoc_insertion_point(class_scope:substrait.SortField)
 private:
  class _Internal;
  void set_has_direction();
  void set_has_comparison_function_reference();

  inline bool has_sort_kind() const;
  inline void clear_has_sort_kind();

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::substrait::Expression* expr_;
  union SortKindUnion {
    constexpr SortKindUnion() : _constinit_{} {}
      ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized _constinit_;
    int direction_;
    uint32_t comparison_function_reference_;
  } sort_kind_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  uint32_t _oneof_case_[1];

  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// -------------------------------------------------------------------

class AggregateFunction final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.AggregateFunction) */ {
 public:
  inline AggregateFunction() : AggregateFunction(nullptr) {}
  ~AggregateFunction() override;
  explicit constexpr AggregateFunction(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  AggregateFunction(const AggregateFunction& from);
  AggregateFunction(AggregateFunction&& from) noexcept
    : AggregateFunction() {
    *this = ::std::move(from);
  }

  inline AggregateFunction& operator=(const AggregateFunction& from) {
    CopyFrom(from);
    return *this;
  }
  inline AggregateFunction& operator=(AggregateFunction&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const AggregateFunction& default_instance() {
    return *internal_default_instance();
  }
  static inline const AggregateFunction* internal_default_instance() {
    return reinterpret_cast<const AggregateFunction*>(
               &_AggregateFunction_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    81;

  friend void swap(AggregateFunction& a, AggregateFunction& b) {
    a.Swap(&b);
  }
  inline void Swap(AggregateFunction* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(AggregateFunction* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  AggregateFunction* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<AggregateFunction>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const AggregateFunction& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const AggregateFunction& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(AggregateFunction* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "substrait.AggregateFunction";
  }
  protected:
  explicit AggregateFunction(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kArgsFieldNumber = 2,
    kSortsFieldNumber = 3,
    kOutputTypeFieldNumber = 5,
    kFunctionReferenceFieldNumber = 1,
    kPhaseFieldNumber = 4,
  };
  // repeated .substrait.Expression args = 2 [json_name = "args"];
  int args_size() const;
  private:
  int _internal_args_size() const;
  public:
  void clear_args();
  ::substrait::Expression* mutable_args(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >*
      mutable_args();
  private:
  const ::substrait::Expression& _internal_args(int index) const;
  ::substrait::Expression* _internal_add_args();
  public:
  const ::substrait::Expression& args(int index) const;
  ::substrait::Expression* add_args();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >&
      args() const;

  // repeated .substrait.SortField sorts = 3 [json_name = "sorts"];
  int sorts_size() const;
  private:
  int _internal_sorts_size() const;
  public:
  void clear_sorts();
  ::substrait::SortField* mutable_sorts(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::SortField >*
      mutable_sorts();
  private:
  const ::substrait::SortField& _internal_sorts(int index) const;
  ::substrait::SortField* _internal_add_sorts();
  public:
  const ::substrait::SortField& sorts(int index) const;
  ::substrait::SortField* add_sorts();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::SortField >&
      sorts() const;

  // .substrait.Type output_type = 5 [json_name = "outputType"];
  bool has_output_type() const;
  private:
  bool _internal_has_output_type() const;
  public:
  void clear_output_type();
  const ::substrait::Type& output_type() const;
  PROTOBUF_NODISCARD ::substrait::Type* release_output_type();
  ::substrait::Type* mutable_output_type();
  void set_allocated_output_type(::substrait::Type* output_type);
  private:
  const ::substrait::Type& _internal_output_type() const;
  ::substrait::Type* _internal_mutable_output_type();
  public:
  void unsafe_arena_set_allocated_output_type(
      ::substrait::Type* output_type);
  ::substrait::Type* unsafe_arena_release_output_type();

  // uint32 function_reference = 1 [json_name = "functionReference"];
  void clear_function_reference();
  uint32_t function_reference() const;
  void set_function_reference(uint32_t value);
  private:
  uint32_t _internal_function_reference() const;
  void _internal_set_function_reference(uint32_t value);
  public:

  // .substrait.AggregationPhase phase = 4 [json_name = "phase"];
  void clear_phase();
  ::substrait::AggregationPhase phase() const;
  void set_phase(::substrait::AggregationPhase value);
  private:
  ::substrait::AggregationPhase _internal_phase() const;
  void _internal_set_phase(::substrait::AggregationPhase value);
  public:

  // @@protoc_insertion_point(class_scope:substrait.AggregateFunction)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression > args_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::SortField > sorts_;
  ::substrait::Type* output_type_;
  uint32_t function_reference_;
  int phase_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_substrait_2falgebra_2eproto;
};
// ===================================================================


// ===================================================================

#ifdef __GNUC__
  #pragma GCC diagnostic push
  #pragma GCC diagnostic ignored "-Wstrict-aliasing"
#endif  // __GNUC__
// RelCommon_Direct

// -------------------------------------------------------------------

// RelCommon_Emit

// repeated int32 output_mapping = 1 [json_name = "outputMapping"];
inline int RelCommon_Emit::_internal_output_mapping_size() const {
  return output_mapping_.size();
}
inline int RelCommon_Emit::output_mapping_size() const {
  return _internal_output_mapping_size();
}
inline void RelCommon_Emit::clear_output_mapping() {
  output_mapping_.Clear();
}
inline int32_t RelCommon_Emit::_internal_output_mapping(int index) const {
  return output_mapping_.Get(index);
}
inline int32_t RelCommon_Emit::output_mapping(int index) const {
  // @@protoc_insertion_point(field_get:substrait.RelCommon.Emit.output_mapping)
  return _internal_output_mapping(index);
}
inline void RelCommon_Emit::set_output_mapping(int index, int32_t value) {
  output_mapping_.Set(index, value);
  // @@protoc_insertion_point(field_set:substrait.RelCommon.Emit.output_mapping)
}
inline void RelCommon_Emit::_internal_add_output_mapping(int32_t value) {
  output_mapping_.Add(value);
}
inline void RelCommon_Emit::add_output_mapping(int32_t value) {
  _internal_add_output_mapping(value);
  // @@protoc_insertion_point(field_add:substrait.RelCommon.Emit.output_mapping)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >&
RelCommon_Emit::_internal_output_mapping() const {
  return output_mapping_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >&
RelCommon_Emit::output_mapping() const {
  // @@protoc_insertion_point(field_list:substrait.RelCommon.Emit.output_mapping)
  return _internal_output_mapping();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >*
RelCommon_Emit::_internal_mutable_output_mapping() {
  return &output_mapping_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >*
RelCommon_Emit::mutable_output_mapping() {
  // @@protoc_insertion_point(field_mutable_list:substrait.RelCommon.Emit.output_mapping)
  return _internal_mutable_output_mapping();
}

// -------------------------------------------------------------------

// RelCommon_Hint_Stats

// double row_count = 1 [json_name = "rowCount"];
inline void RelCommon_Hint_Stats::clear_row_count() {
  row_count_ = 0;
}
inline double RelCommon_Hint_Stats::_internal_row_count() const {
  return row_count_;
}
inline double RelCommon_Hint_Stats::row_count() const {
  // @@protoc_insertion_point(field_get:substrait.RelCommon.Hint.Stats.row_count)
  return _internal_row_count();
}
inline void RelCommon_Hint_Stats::_internal_set_row_count(double value) {
  
  row_count_ = value;
}
inline void RelCommon_Hint_Stats::set_row_count(double value) {
  _internal_set_row_count(value);
  // @@protoc_insertion_point(field_set:substrait.RelCommon.Hint.Stats.row_count)
}

// double record_size = 2 [json_name = "recordSize"];
inline void RelCommon_Hint_Stats::clear_record_size() {
  record_size_ = 0;
}
inline double RelCommon_Hint_Stats::_internal_record_size() const {
  return record_size_;
}
inline double RelCommon_Hint_Stats::record_size() const {
  // @@protoc_insertion_point(field_get:substrait.RelCommon.Hint.Stats.record_size)
  return _internal_record_size();
}
inline void RelCommon_Hint_Stats::_internal_set_record_size(double value) {
  
  record_size_ = value;
}
inline void RelCommon_Hint_Stats::set_record_size(double value) {
  _internal_set_record_size(value);
  // @@protoc_insertion_point(field_set:substrait.RelCommon.Hint.Stats.record_size)
}

// .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
inline bool RelCommon_Hint_Stats::_internal_has_advanced_extension() const {
  return this != internal_default_instance() && advanced_extension_ != nullptr;
}
inline bool RelCommon_Hint_Stats::has_advanced_extension() const {
  return _internal_has_advanced_extension();
}
inline const ::substrait::extensions::AdvancedExtension& RelCommon_Hint_Stats::_internal_advanced_extension() const {
  const ::substrait::extensions::AdvancedExtension* p = advanced_extension_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::extensions::AdvancedExtension&>(
      ::substrait::extensions::_AdvancedExtension_default_instance_);
}
inline const ::substrait::extensions::AdvancedExtension& RelCommon_Hint_Stats::advanced_extension() const {
  // @@protoc_insertion_point(field_get:substrait.RelCommon.Hint.Stats.advanced_extension)
  return _internal_advanced_extension();
}
inline void RelCommon_Hint_Stats::unsafe_arena_set_allocated_advanced_extension(
    ::substrait::extensions::AdvancedExtension* advanced_extension) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  advanced_extension_ = advanced_extension;
  if (advanced_extension) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.RelCommon.Hint.Stats.advanced_extension)
}
inline ::substrait::extensions::AdvancedExtension* RelCommon_Hint_Stats::release_advanced_extension() {
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* RelCommon_Hint_Stats::unsafe_arena_release_advanced_extension() {
  // @@protoc_insertion_point(field_release:substrait.RelCommon.Hint.Stats.advanced_extension)
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* RelCommon_Hint_Stats::_internal_mutable_advanced_extension() {
  
  if (advanced_extension_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::extensions::AdvancedExtension>(GetArenaForAllocation());
    advanced_extension_ = p;
  }
  return advanced_extension_;
}
inline ::substrait::extensions::AdvancedExtension* RelCommon_Hint_Stats::mutable_advanced_extension() {
  ::substrait::extensions::AdvancedExtension* _msg = _internal_mutable_advanced_extension();
  // @@protoc_insertion_point(field_mutable:substrait.RelCommon.Hint.Stats.advanced_extension)
  return _msg;
}
inline void RelCommon_Hint_Stats::set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  if (advanced_extension) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension));
    if (message_arena != submessage_arena) {
      advanced_extension = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, advanced_extension, submessage_arena);
    }
    
  } else {
    
  }
  advanced_extension_ = advanced_extension;
  // @@protoc_insertion_point(field_set_allocated:substrait.RelCommon.Hint.Stats.advanced_extension)
}

// -------------------------------------------------------------------

// RelCommon_Hint_RuntimeConstraint

// .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
inline bool RelCommon_Hint_RuntimeConstraint::_internal_has_advanced_extension() const {
  return this != internal_default_instance() && advanced_extension_ != nullptr;
}
inline bool RelCommon_Hint_RuntimeConstraint::has_advanced_extension() const {
  return _internal_has_advanced_extension();
}
inline const ::substrait::extensions::AdvancedExtension& RelCommon_Hint_RuntimeConstraint::_internal_advanced_extension() const {
  const ::substrait::extensions::AdvancedExtension* p = advanced_extension_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::extensions::AdvancedExtension&>(
      ::substrait::extensions::_AdvancedExtension_default_instance_);
}
inline const ::substrait::extensions::AdvancedExtension& RelCommon_Hint_RuntimeConstraint::advanced_extension() const {
  // @@protoc_insertion_point(field_get:substrait.RelCommon.Hint.RuntimeConstraint.advanced_extension)
  return _internal_advanced_extension();
}
inline void RelCommon_Hint_RuntimeConstraint::unsafe_arena_set_allocated_advanced_extension(
    ::substrait::extensions::AdvancedExtension* advanced_extension) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  advanced_extension_ = advanced_extension;
  if (advanced_extension) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.RelCommon.Hint.RuntimeConstraint.advanced_extension)
}
inline ::substrait::extensions::AdvancedExtension* RelCommon_Hint_RuntimeConstraint::release_advanced_extension() {
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* RelCommon_Hint_RuntimeConstraint::unsafe_arena_release_advanced_extension() {
  // @@protoc_insertion_point(field_release:substrait.RelCommon.Hint.RuntimeConstraint.advanced_extension)
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* RelCommon_Hint_RuntimeConstraint::_internal_mutable_advanced_extension() {
  
  if (advanced_extension_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::extensions::AdvancedExtension>(GetArenaForAllocation());
    advanced_extension_ = p;
  }
  return advanced_extension_;
}
inline ::substrait::extensions::AdvancedExtension* RelCommon_Hint_RuntimeConstraint::mutable_advanced_extension() {
  ::substrait::extensions::AdvancedExtension* _msg = _internal_mutable_advanced_extension();
  // @@protoc_insertion_point(field_mutable:substrait.RelCommon.Hint.RuntimeConstraint.advanced_extension)
  return _msg;
}
inline void RelCommon_Hint_RuntimeConstraint::set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  if (advanced_extension) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension));
    if (message_arena != submessage_arena) {
      advanced_extension = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, advanced_extension, submessage_arena);
    }
    
  } else {
    
  }
  advanced_extension_ = advanced_extension;
  // @@protoc_insertion_point(field_set_allocated:substrait.RelCommon.Hint.RuntimeConstraint.advanced_extension)
}

// -------------------------------------------------------------------

// RelCommon_Hint

// .substrait.RelCommon.Hint.Stats stats = 1 [json_name = "stats"];
inline bool RelCommon_Hint::_internal_has_stats() const {
  return this != internal_default_instance() && stats_ != nullptr;
}
inline bool RelCommon_Hint::has_stats() const {
  return _internal_has_stats();
}
inline void RelCommon_Hint::clear_stats() {
  if (GetArenaForAllocation() == nullptr && stats_ != nullptr) {
    delete stats_;
  }
  stats_ = nullptr;
}
inline const ::substrait::RelCommon_Hint_Stats& RelCommon_Hint::_internal_stats() const {
  const ::substrait::RelCommon_Hint_Stats* p = stats_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::RelCommon_Hint_Stats&>(
      ::substrait::_RelCommon_Hint_Stats_default_instance_);
}
inline const ::substrait::RelCommon_Hint_Stats& RelCommon_Hint::stats() const {
  // @@protoc_insertion_point(field_get:substrait.RelCommon.Hint.stats)
  return _internal_stats();
}
inline void RelCommon_Hint::unsafe_arena_set_allocated_stats(
    ::substrait::RelCommon_Hint_Stats* stats) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(stats_);
  }
  stats_ = stats;
  if (stats) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.RelCommon.Hint.stats)
}
inline ::substrait::RelCommon_Hint_Stats* RelCommon_Hint::release_stats() {
  
  ::substrait::RelCommon_Hint_Stats* temp = stats_;
  stats_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::RelCommon_Hint_Stats* RelCommon_Hint::unsafe_arena_release_stats() {
  // @@protoc_insertion_point(field_release:substrait.RelCommon.Hint.stats)
  
  ::substrait::RelCommon_Hint_Stats* temp = stats_;
  stats_ = nullptr;
  return temp;
}
inline ::substrait::RelCommon_Hint_Stats* RelCommon_Hint::_internal_mutable_stats() {
  
  if (stats_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::RelCommon_Hint_Stats>(GetArenaForAllocation());
    stats_ = p;
  }
  return stats_;
}
inline ::substrait::RelCommon_Hint_Stats* RelCommon_Hint::mutable_stats() {
  ::substrait::RelCommon_Hint_Stats* _msg = _internal_mutable_stats();
  // @@protoc_insertion_point(field_mutable:substrait.RelCommon.Hint.stats)
  return _msg;
}
inline void RelCommon_Hint::set_allocated_stats(::substrait::RelCommon_Hint_Stats* stats) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete stats_;
  }
  if (stats) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::RelCommon_Hint_Stats>::GetOwningArena(stats);
    if (message_arena != submessage_arena) {
      stats = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, stats, submessage_arena);
    }
    
  } else {
    
  }
  stats_ = stats;
  // @@protoc_insertion_point(field_set_allocated:substrait.RelCommon.Hint.stats)
}

// .substrait.RelCommon.Hint.RuntimeConstraint constraint = 2 [json_name = "constraint"];
inline bool RelCommon_Hint::_internal_has_constraint() const {
  return this != internal_default_instance() && constraint_ != nullptr;
}
inline bool RelCommon_Hint::has_constraint() const {
  return _internal_has_constraint();
}
inline void RelCommon_Hint::clear_constraint() {
  if (GetArenaForAllocation() == nullptr && constraint_ != nullptr) {
    delete constraint_;
  }
  constraint_ = nullptr;
}
inline const ::substrait::RelCommon_Hint_RuntimeConstraint& RelCommon_Hint::_internal_constraint() const {
  const ::substrait::RelCommon_Hint_RuntimeConstraint* p = constraint_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::RelCommon_Hint_RuntimeConstraint&>(
      ::substrait::_RelCommon_Hint_RuntimeConstraint_default_instance_);
}
inline const ::substrait::RelCommon_Hint_RuntimeConstraint& RelCommon_Hint::constraint() const {
  // @@protoc_insertion_point(field_get:substrait.RelCommon.Hint.constraint)
  return _internal_constraint();
}
inline void RelCommon_Hint::unsafe_arena_set_allocated_constraint(
    ::substrait::RelCommon_Hint_RuntimeConstraint* constraint) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(constraint_);
  }
  constraint_ = constraint;
  if (constraint) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.RelCommon.Hint.constraint)
}
inline ::substrait::RelCommon_Hint_RuntimeConstraint* RelCommon_Hint::release_constraint() {
  
  ::substrait::RelCommon_Hint_RuntimeConstraint* temp = constraint_;
  constraint_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::RelCommon_Hint_RuntimeConstraint* RelCommon_Hint::unsafe_arena_release_constraint() {
  // @@protoc_insertion_point(field_release:substrait.RelCommon.Hint.constraint)
  
  ::substrait::RelCommon_Hint_RuntimeConstraint* temp = constraint_;
  constraint_ = nullptr;
  return temp;
}
inline ::substrait::RelCommon_Hint_RuntimeConstraint* RelCommon_Hint::_internal_mutable_constraint() {
  
  if (constraint_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::RelCommon_Hint_RuntimeConstraint>(GetArenaForAllocation());
    constraint_ = p;
  }
  return constraint_;
}
inline ::substrait::RelCommon_Hint_RuntimeConstraint* RelCommon_Hint::mutable_constraint() {
  ::substrait::RelCommon_Hint_RuntimeConstraint* _msg = _internal_mutable_constraint();
  // @@protoc_insertion_point(field_mutable:substrait.RelCommon.Hint.constraint)
  return _msg;
}
inline void RelCommon_Hint::set_allocated_constraint(::substrait::RelCommon_Hint_RuntimeConstraint* constraint) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete constraint_;
  }
  if (constraint) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::RelCommon_Hint_RuntimeConstraint>::GetOwningArena(constraint);
    if (message_arena != submessage_arena) {
      constraint = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, constraint, submessage_arena);
    }
    
  } else {
    
  }
  constraint_ = constraint;
  // @@protoc_insertion_point(field_set_allocated:substrait.RelCommon.Hint.constraint)
}

// .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
inline bool RelCommon_Hint::_internal_has_advanced_extension() const {
  return this != internal_default_instance() && advanced_extension_ != nullptr;
}
inline bool RelCommon_Hint::has_advanced_extension() const {
  return _internal_has_advanced_extension();
}
inline const ::substrait::extensions::AdvancedExtension& RelCommon_Hint::_internal_advanced_extension() const {
  const ::substrait::extensions::AdvancedExtension* p = advanced_extension_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::extensions::AdvancedExtension&>(
      ::substrait::extensions::_AdvancedExtension_default_instance_);
}
inline const ::substrait::extensions::AdvancedExtension& RelCommon_Hint::advanced_extension() const {
  // @@protoc_insertion_point(field_get:substrait.RelCommon.Hint.advanced_extension)
  return _internal_advanced_extension();
}
inline void RelCommon_Hint::unsafe_arena_set_allocated_advanced_extension(
    ::substrait::extensions::AdvancedExtension* advanced_extension) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  advanced_extension_ = advanced_extension;
  if (advanced_extension) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.RelCommon.Hint.advanced_extension)
}
inline ::substrait::extensions::AdvancedExtension* RelCommon_Hint::release_advanced_extension() {
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* RelCommon_Hint::unsafe_arena_release_advanced_extension() {
  // @@protoc_insertion_point(field_release:substrait.RelCommon.Hint.advanced_extension)
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* RelCommon_Hint::_internal_mutable_advanced_extension() {
  
  if (advanced_extension_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::extensions::AdvancedExtension>(GetArenaForAllocation());
    advanced_extension_ = p;
  }
  return advanced_extension_;
}
inline ::substrait::extensions::AdvancedExtension* RelCommon_Hint::mutable_advanced_extension() {
  ::substrait::extensions::AdvancedExtension* _msg = _internal_mutable_advanced_extension();
  // @@protoc_insertion_point(field_mutable:substrait.RelCommon.Hint.advanced_extension)
  return _msg;
}
inline void RelCommon_Hint::set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  if (advanced_extension) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension));
    if (message_arena != submessage_arena) {
      advanced_extension = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, advanced_extension, submessage_arena);
    }
    
  } else {
    
  }
  advanced_extension_ = advanced_extension;
  // @@protoc_insertion_point(field_set_allocated:substrait.RelCommon.Hint.advanced_extension)
}

// -------------------------------------------------------------------

// RelCommon

// .substrait.RelCommon.Direct direct = 1 [json_name = "direct"];
inline bool RelCommon::_internal_has_direct() const {
  return emit_kind_case() == kDirect;
}
inline bool RelCommon::has_direct() const {
  return _internal_has_direct();
}
inline void RelCommon::set_has_direct() {
  _oneof_case_[0] = kDirect;
}
inline void RelCommon::clear_direct() {
  if (_internal_has_direct()) {
    if (GetArenaForAllocation() == nullptr) {
      delete emit_kind_.direct_;
    }
    clear_has_emit_kind();
  }
}
inline ::substrait::RelCommon_Direct* RelCommon::release_direct() {
  // @@protoc_insertion_point(field_release:substrait.RelCommon.direct)
  if (_internal_has_direct()) {
    clear_has_emit_kind();
      ::substrait::RelCommon_Direct* temp = emit_kind_.direct_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    emit_kind_.direct_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::RelCommon_Direct& RelCommon::_internal_direct() const {
  return _internal_has_direct()
      ? *emit_kind_.direct_
      : reinterpret_cast< ::substrait::RelCommon_Direct&>(::substrait::_RelCommon_Direct_default_instance_);
}
inline const ::substrait::RelCommon_Direct& RelCommon::direct() const {
  // @@protoc_insertion_point(field_get:substrait.RelCommon.direct)
  return _internal_direct();
}
inline ::substrait::RelCommon_Direct* RelCommon::unsafe_arena_release_direct() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.RelCommon.direct)
  if (_internal_has_direct()) {
    clear_has_emit_kind();
    ::substrait::RelCommon_Direct* temp = emit_kind_.direct_;
    emit_kind_.direct_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void RelCommon::unsafe_arena_set_allocated_direct(::substrait::RelCommon_Direct* direct) {
  clear_emit_kind();
  if (direct) {
    set_has_direct();
    emit_kind_.direct_ = direct;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.RelCommon.direct)
}
inline ::substrait::RelCommon_Direct* RelCommon::_internal_mutable_direct() {
  if (!_internal_has_direct()) {
    clear_emit_kind();
    set_has_direct();
    emit_kind_.direct_ = CreateMaybeMessage< ::substrait::RelCommon_Direct >(GetArenaForAllocation());
  }
  return emit_kind_.direct_;
}
inline ::substrait::RelCommon_Direct* RelCommon::mutable_direct() {
  ::substrait::RelCommon_Direct* _msg = _internal_mutable_direct();
  // @@protoc_insertion_point(field_mutable:substrait.RelCommon.direct)
  return _msg;
}

// .substrait.RelCommon.Emit emit = 2 [json_name = "emit"];
inline bool RelCommon::_internal_has_emit() const {
  return emit_kind_case() == kEmit;
}
inline bool RelCommon::has_emit() const {
  return _internal_has_emit();
}
inline void RelCommon::set_has_emit() {
  _oneof_case_[0] = kEmit;
}
inline void RelCommon::clear_emit() {
  if (_internal_has_emit()) {
    if (GetArenaForAllocation() == nullptr) {
      delete emit_kind_.emit_;
    }
    clear_has_emit_kind();
  }
}
inline ::substrait::RelCommon_Emit* RelCommon::release_emit() {
  // @@protoc_insertion_point(field_release:substrait.RelCommon.emit)
  if (_internal_has_emit()) {
    clear_has_emit_kind();
      ::substrait::RelCommon_Emit* temp = emit_kind_.emit_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    emit_kind_.emit_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::RelCommon_Emit& RelCommon::_internal_emit() const {
  return _internal_has_emit()
      ? *emit_kind_.emit_
      : reinterpret_cast< ::substrait::RelCommon_Emit&>(::substrait::_RelCommon_Emit_default_instance_);
}
inline const ::substrait::RelCommon_Emit& RelCommon::emit() const {
  // @@protoc_insertion_point(field_get:substrait.RelCommon.emit)
  return _internal_emit();
}
inline ::substrait::RelCommon_Emit* RelCommon::unsafe_arena_release_emit() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.RelCommon.emit)
  if (_internal_has_emit()) {
    clear_has_emit_kind();
    ::substrait::RelCommon_Emit* temp = emit_kind_.emit_;
    emit_kind_.emit_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void RelCommon::unsafe_arena_set_allocated_emit(::substrait::RelCommon_Emit* emit) {
  clear_emit_kind();
  if (emit) {
    set_has_emit();
    emit_kind_.emit_ = emit;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.RelCommon.emit)
}
inline ::substrait::RelCommon_Emit* RelCommon::_internal_mutable_emit() {
  if (!_internal_has_emit()) {
    clear_emit_kind();
    set_has_emit();
    emit_kind_.emit_ = CreateMaybeMessage< ::substrait::RelCommon_Emit >(GetArenaForAllocation());
  }
  return emit_kind_.emit_;
}
inline ::substrait::RelCommon_Emit* RelCommon::mutable_emit() {
  ::substrait::RelCommon_Emit* _msg = _internal_mutable_emit();
  // @@protoc_insertion_point(field_mutable:substrait.RelCommon.emit)
  return _msg;
}

// .substrait.RelCommon.Hint hint = 3 [json_name = "hint"];
inline bool RelCommon::_internal_has_hint() const {
  return this != internal_default_instance() && hint_ != nullptr;
}
inline bool RelCommon::has_hint() const {
  return _internal_has_hint();
}
inline void RelCommon::clear_hint() {
  if (GetArenaForAllocation() == nullptr && hint_ != nullptr) {
    delete hint_;
  }
  hint_ = nullptr;
}
inline const ::substrait::RelCommon_Hint& RelCommon::_internal_hint() const {
  const ::substrait::RelCommon_Hint* p = hint_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::RelCommon_Hint&>(
      ::substrait::_RelCommon_Hint_default_instance_);
}
inline const ::substrait::RelCommon_Hint& RelCommon::hint() const {
  // @@protoc_insertion_point(field_get:substrait.RelCommon.hint)
  return _internal_hint();
}
inline void RelCommon::unsafe_arena_set_allocated_hint(
    ::substrait::RelCommon_Hint* hint) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(hint_);
  }
  hint_ = hint;
  if (hint) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.RelCommon.hint)
}
inline ::substrait::RelCommon_Hint* RelCommon::release_hint() {
  
  ::substrait::RelCommon_Hint* temp = hint_;
  hint_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::RelCommon_Hint* RelCommon::unsafe_arena_release_hint() {
  // @@protoc_insertion_point(field_release:substrait.RelCommon.hint)
  
  ::substrait::RelCommon_Hint* temp = hint_;
  hint_ = nullptr;
  return temp;
}
inline ::substrait::RelCommon_Hint* RelCommon::_internal_mutable_hint() {
  
  if (hint_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::RelCommon_Hint>(GetArenaForAllocation());
    hint_ = p;
  }
  return hint_;
}
inline ::substrait::RelCommon_Hint* RelCommon::mutable_hint() {
  ::substrait::RelCommon_Hint* _msg = _internal_mutable_hint();
  // @@protoc_insertion_point(field_mutable:substrait.RelCommon.hint)
  return _msg;
}
inline void RelCommon::set_allocated_hint(::substrait::RelCommon_Hint* hint) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete hint_;
  }
  if (hint) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::RelCommon_Hint>::GetOwningArena(hint);
    if (message_arena != submessage_arena) {
      hint = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, hint, submessage_arena);
    }
    
  } else {
    
  }
  hint_ = hint;
  // @@protoc_insertion_point(field_set_allocated:substrait.RelCommon.hint)
}

// .substrait.extensions.AdvancedExtension advanced_extension = 4 [json_name = "advancedExtension"];
inline bool RelCommon::_internal_has_advanced_extension() const {
  return this != internal_default_instance() && advanced_extension_ != nullptr;
}
inline bool RelCommon::has_advanced_extension() const {
  return _internal_has_advanced_extension();
}
inline const ::substrait::extensions::AdvancedExtension& RelCommon::_internal_advanced_extension() const {
  const ::substrait::extensions::AdvancedExtension* p = advanced_extension_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::extensions::AdvancedExtension&>(
      ::substrait::extensions::_AdvancedExtension_default_instance_);
}
inline const ::substrait::extensions::AdvancedExtension& RelCommon::advanced_extension() const {
  // @@protoc_insertion_point(field_get:substrait.RelCommon.advanced_extension)
  return _internal_advanced_extension();
}
inline void RelCommon::unsafe_arena_set_allocated_advanced_extension(
    ::substrait::extensions::AdvancedExtension* advanced_extension) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  advanced_extension_ = advanced_extension;
  if (advanced_extension) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.RelCommon.advanced_extension)
}
inline ::substrait::extensions::AdvancedExtension* RelCommon::release_advanced_extension() {
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* RelCommon::unsafe_arena_release_advanced_extension() {
  // @@protoc_insertion_point(field_release:substrait.RelCommon.advanced_extension)
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* RelCommon::_internal_mutable_advanced_extension() {
  
  if (advanced_extension_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::extensions::AdvancedExtension>(GetArenaForAllocation());
    advanced_extension_ = p;
  }
  return advanced_extension_;
}
inline ::substrait::extensions::AdvancedExtension* RelCommon::mutable_advanced_extension() {
  ::substrait::extensions::AdvancedExtension* _msg = _internal_mutable_advanced_extension();
  // @@protoc_insertion_point(field_mutable:substrait.RelCommon.advanced_extension)
  return _msg;
}
inline void RelCommon::set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  if (advanced_extension) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension));
    if (message_arena != submessage_arena) {
      advanced_extension = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, advanced_extension, submessage_arena);
    }
    
  } else {
    
  }
  advanced_extension_ = advanced_extension;
  // @@protoc_insertion_point(field_set_allocated:substrait.RelCommon.advanced_extension)
}

inline bool RelCommon::has_emit_kind() const {
  return emit_kind_case() != EMIT_KIND_NOT_SET;
}
inline void RelCommon::clear_has_emit_kind() {
  _oneof_case_[0] = EMIT_KIND_NOT_SET;
}
inline RelCommon::EmitKindCase RelCommon::emit_kind_case() const {
  return RelCommon::EmitKindCase(_oneof_case_[0]);
}
// -------------------------------------------------------------------

// ReadRel_NamedTable

// repeated string names = 1 [json_name = "names"];
inline int ReadRel_NamedTable::_internal_names_size() const {
  return names_.size();
}
inline int ReadRel_NamedTable::names_size() const {
  return _internal_names_size();
}
inline void ReadRel_NamedTable::clear_names() {
  names_.Clear();
}
inline std::string* ReadRel_NamedTable::add_names() {
  std::string* _s = _internal_add_names();
  // @@protoc_insertion_point(field_add_mutable:substrait.ReadRel.NamedTable.names)
  return _s;
}
inline const std::string& ReadRel_NamedTable::_internal_names(int index) const {
  return names_.Get(index);
}
inline const std::string& ReadRel_NamedTable::names(int index) const {
  // @@protoc_insertion_point(field_get:substrait.ReadRel.NamedTable.names)
  return _internal_names(index);
}
inline std::string* ReadRel_NamedTable::mutable_names(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.ReadRel.NamedTable.names)
  return names_.Mutable(index);
}
inline void ReadRel_NamedTable::set_names(int index, const std::string& value) {
  names_.Mutable(index)->assign(value);
  // @@protoc_insertion_point(field_set:substrait.ReadRel.NamedTable.names)
}
inline void ReadRel_NamedTable::set_names(int index, std::string&& value) {
  names_.Mutable(index)->assign(std::move(value));
  // @@protoc_insertion_point(field_set:substrait.ReadRel.NamedTable.names)
}
inline void ReadRel_NamedTable::set_names(int index, const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  names_.Mutable(index)->assign(value);
  // @@protoc_insertion_point(field_set_char:substrait.ReadRel.NamedTable.names)
}
inline void ReadRel_NamedTable::set_names(int index, const char* value, size_t size) {
  names_.Mutable(index)->assign(
    reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_set_pointer:substrait.ReadRel.NamedTable.names)
}
inline std::string* ReadRel_NamedTable::_internal_add_names() {
  return names_.Add();
}
inline void ReadRel_NamedTable::add_names(const std::string& value) {
  names_.Add()->assign(value);
  // @@protoc_insertion_point(field_add:substrait.ReadRel.NamedTable.names)
}
inline void ReadRel_NamedTable::add_names(std::string&& value) {
  names_.Add(std::move(value));
  // @@protoc_insertion_point(field_add:substrait.ReadRel.NamedTable.names)
}
inline void ReadRel_NamedTable::add_names(const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  names_.Add()->assign(value);
  // @@protoc_insertion_point(field_add_char:substrait.ReadRel.NamedTable.names)
}
inline void ReadRel_NamedTable::add_names(const char* value, size_t size) {
  names_.Add()->assign(reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_add_pointer:substrait.ReadRel.NamedTable.names)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>&
ReadRel_NamedTable::names() const {
  // @@protoc_insertion_point(field_list:substrait.ReadRel.NamedTable.names)
  return names_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>*
ReadRel_NamedTable::mutable_names() {
  // @@protoc_insertion_point(field_mutable_list:substrait.ReadRel.NamedTable.names)
  return &names_;
}

// .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
inline bool ReadRel_NamedTable::_internal_has_advanced_extension() const {
  return this != internal_default_instance() && advanced_extension_ != nullptr;
}
inline bool ReadRel_NamedTable::has_advanced_extension() const {
  return _internal_has_advanced_extension();
}
inline const ::substrait::extensions::AdvancedExtension& ReadRel_NamedTable::_internal_advanced_extension() const {
  const ::substrait::extensions::AdvancedExtension* p = advanced_extension_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::extensions::AdvancedExtension&>(
      ::substrait::extensions::_AdvancedExtension_default_instance_);
}
inline const ::substrait::extensions::AdvancedExtension& ReadRel_NamedTable::advanced_extension() const {
  // @@protoc_insertion_point(field_get:substrait.ReadRel.NamedTable.advanced_extension)
  return _internal_advanced_extension();
}
inline void ReadRel_NamedTable::unsafe_arena_set_allocated_advanced_extension(
    ::substrait::extensions::AdvancedExtension* advanced_extension) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  advanced_extension_ = advanced_extension;
  if (advanced_extension) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.ReadRel.NamedTable.advanced_extension)
}
inline ::substrait::extensions::AdvancedExtension* ReadRel_NamedTable::release_advanced_extension() {
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* ReadRel_NamedTable::unsafe_arena_release_advanced_extension() {
  // @@protoc_insertion_point(field_release:substrait.ReadRel.NamedTable.advanced_extension)
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* ReadRel_NamedTable::_internal_mutable_advanced_extension() {
  
  if (advanced_extension_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::extensions::AdvancedExtension>(GetArenaForAllocation());
    advanced_extension_ = p;
  }
  return advanced_extension_;
}
inline ::substrait::extensions::AdvancedExtension* ReadRel_NamedTable::mutable_advanced_extension() {
  ::substrait::extensions::AdvancedExtension* _msg = _internal_mutable_advanced_extension();
  // @@protoc_insertion_point(field_mutable:substrait.ReadRel.NamedTable.advanced_extension)
  return _msg;
}
inline void ReadRel_NamedTable::set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  if (advanced_extension) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension));
    if (message_arena != submessage_arena) {
      advanced_extension = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, advanced_extension, submessage_arena);
    }
    
  } else {
    
  }
  advanced_extension_ = advanced_extension;
  // @@protoc_insertion_point(field_set_allocated:substrait.ReadRel.NamedTable.advanced_extension)
}

// -------------------------------------------------------------------

// ReadRel_VirtualTable

// repeated .substrait.Expression.Literal.Struct values = 1 [json_name = "values"];
inline int ReadRel_VirtualTable::_internal_values_size() const {
  return values_.size();
}
inline int ReadRel_VirtualTable::values_size() const {
  return _internal_values_size();
}
inline void ReadRel_VirtualTable::clear_values() {
  values_.Clear();
}
inline ::substrait::Expression_Literal_Struct* ReadRel_VirtualTable::mutable_values(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.ReadRel.VirtualTable.values)
  return values_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_Literal_Struct >*
ReadRel_VirtualTable::mutable_values() {
  // @@protoc_insertion_point(field_mutable_list:substrait.ReadRel.VirtualTable.values)
  return &values_;
}
inline const ::substrait::Expression_Literal_Struct& ReadRel_VirtualTable::_internal_values(int index) const {
  return values_.Get(index);
}
inline const ::substrait::Expression_Literal_Struct& ReadRel_VirtualTable::values(int index) const {
  // @@protoc_insertion_point(field_get:substrait.ReadRel.VirtualTable.values)
  return _internal_values(index);
}
inline ::substrait::Expression_Literal_Struct* ReadRel_VirtualTable::_internal_add_values() {
  return values_.Add();
}
inline ::substrait::Expression_Literal_Struct* ReadRel_VirtualTable::add_values() {
  ::substrait::Expression_Literal_Struct* _add = _internal_add_values();
  // @@protoc_insertion_point(field_add:substrait.ReadRel.VirtualTable.values)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_Literal_Struct >&
ReadRel_VirtualTable::values() const {
  // @@protoc_insertion_point(field_list:substrait.ReadRel.VirtualTable.values)
  return values_;
}

// -------------------------------------------------------------------

// ReadRel_ExtensionTable

// .google.protobuf.Any detail = 1 [json_name = "detail"];
inline bool ReadRel_ExtensionTable::_internal_has_detail() const {
  return this != internal_default_instance() && detail_ != nullptr;
}
inline bool ReadRel_ExtensionTable::has_detail() const {
  return _internal_has_detail();
}
inline const ::PROTOBUF_NAMESPACE_ID::Any& ReadRel_ExtensionTable::_internal_detail() const {
  const ::PROTOBUF_NAMESPACE_ID::Any* p = detail_;
  return p != nullptr ? *p : reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Any&>(
      ::PROTOBUF_NAMESPACE_ID::_Any_default_instance_);
}
inline const ::PROTOBUF_NAMESPACE_ID::Any& ReadRel_ExtensionTable::detail() const {
  // @@protoc_insertion_point(field_get:substrait.ReadRel.ExtensionTable.detail)
  return _internal_detail();
}
inline void ReadRel_ExtensionTable::unsafe_arena_set_allocated_detail(
    ::PROTOBUF_NAMESPACE_ID::Any* detail) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(detail_);
  }
  detail_ = detail;
  if (detail) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.ReadRel.ExtensionTable.detail)
}
inline ::PROTOBUF_NAMESPACE_ID::Any* ReadRel_ExtensionTable::release_detail() {
  
  ::PROTOBUF_NAMESPACE_ID::Any* temp = detail_;
  detail_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::PROTOBUF_NAMESPACE_ID::Any* ReadRel_ExtensionTable::unsafe_arena_release_detail() {
  // @@protoc_insertion_point(field_release:substrait.ReadRel.ExtensionTable.detail)
  
  ::PROTOBUF_NAMESPACE_ID::Any* temp = detail_;
  detail_ = nullptr;
  return temp;
}
inline ::PROTOBUF_NAMESPACE_ID::Any* ReadRel_ExtensionTable::_internal_mutable_detail() {
  
  if (detail_ == nullptr) {
    auto* p = CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Any>(GetArenaForAllocation());
    detail_ = p;
  }
  return detail_;
}
inline ::PROTOBUF_NAMESPACE_ID::Any* ReadRel_ExtensionTable::mutable_detail() {
  ::PROTOBUF_NAMESPACE_ID::Any* _msg = _internal_mutable_detail();
  // @@protoc_insertion_point(field_mutable:substrait.ReadRel.ExtensionTable.detail)
  return _msg;
}
inline void ReadRel_ExtensionTable::set_allocated_detail(::PROTOBUF_NAMESPACE_ID::Any* detail) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(detail_);
  }
  if (detail) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(detail));
    if (message_arena != submessage_arena) {
      detail = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, detail, submessage_arena);
    }
    
  } else {
    
  }
  detail_ = detail;
  // @@protoc_insertion_point(field_set_allocated:substrait.ReadRel.ExtensionTable.detail)
}

// -------------------------------------------------------------------

// ReadRel_LocalFiles_FileOrFiles

// string uri_path = 1 [json_name = "uriPath"];
inline bool ReadRel_LocalFiles_FileOrFiles::_internal_has_uri_path() const {
  return path_type_case() == kUriPath;
}
inline bool ReadRel_LocalFiles_FileOrFiles::has_uri_path() const {
  return _internal_has_uri_path();
}
inline void ReadRel_LocalFiles_FileOrFiles::set_has_uri_path() {
  _oneof_case_[0] = kUriPath;
}
inline void ReadRel_LocalFiles_FileOrFiles::clear_uri_path() {
  if (_internal_has_uri_path()) {
    path_type_.uri_path_.Destroy(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
    clear_has_path_type();
  }
}
inline const std::string& ReadRel_LocalFiles_FileOrFiles::uri_path() const {
  // @@protoc_insertion_point(field_get:substrait.ReadRel.LocalFiles.FileOrFiles.uri_path)
  return _internal_uri_path();
}
template <typename ArgT0, typename... ArgT>
inline void ReadRel_LocalFiles_FileOrFiles::set_uri_path(ArgT0&& arg0, ArgT... args) {
  if (!_internal_has_uri_path()) {
    clear_path_type();
    set_has_uri_path();
    path_type_.uri_path_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  path_type_.uri_path_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
  // @@protoc_insertion_point(field_set:substrait.ReadRel.LocalFiles.FileOrFiles.uri_path)
}
inline std::string* ReadRel_LocalFiles_FileOrFiles::mutable_uri_path() {
  std::string* _s = _internal_mutable_uri_path();
  // @@protoc_insertion_point(field_mutable:substrait.ReadRel.LocalFiles.FileOrFiles.uri_path)
  return _s;
}
inline const std::string& ReadRel_LocalFiles_FileOrFiles::_internal_uri_path() const {
  if (_internal_has_uri_path()) {
    return path_type_.uri_path_.Get();
  }
  return ::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited();
}
inline void ReadRel_LocalFiles_FileOrFiles::_internal_set_uri_path(const std::string& value) {
  if (!_internal_has_uri_path()) {
    clear_path_type();
    set_has_uri_path();
    path_type_.uri_path_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  path_type_.uri_path_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
}
inline std::string* ReadRel_LocalFiles_FileOrFiles::_internal_mutable_uri_path() {
  if (!_internal_has_uri_path()) {
    clear_path_type();
    set_has_uri_path();
    path_type_.uri_path_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  return path_type_.uri_path_.Mutable(
      ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
}
inline std::string* ReadRel_LocalFiles_FileOrFiles::release_uri_path() {
  // @@protoc_insertion_point(field_release:substrait.ReadRel.LocalFiles.FileOrFiles.uri_path)
  if (_internal_has_uri_path()) {
    clear_has_path_type();
    return path_type_.uri_path_.ReleaseNonDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
  } else {
    return nullptr;
  }
}
inline void ReadRel_LocalFiles_FileOrFiles::set_allocated_uri_path(std::string* uri_path) {
  if (has_path_type()) {
    clear_path_type();
  }
  if (uri_path != nullptr) {
    set_has_uri_path();
    path_type_.uri_path_.UnsafeSetDefault(uri_path);
    ::PROTOBUF_NAMESPACE_ID::Arena* arena = GetArenaForAllocation();
    if (arena != nullptr) {
      arena->Own(uri_path);
    }
  }
  // @@protoc_insertion_point(field_set_allocated:substrait.ReadRel.LocalFiles.FileOrFiles.uri_path)
}

// string uri_path_glob = 2 [json_name = "uriPathGlob"];
inline bool ReadRel_LocalFiles_FileOrFiles::_internal_has_uri_path_glob() const {
  return path_type_case() == kUriPathGlob;
}
inline bool ReadRel_LocalFiles_FileOrFiles::has_uri_path_glob() const {
  return _internal_has_uri_path_glob();
}
inline void ReadRel_LocalFiles_FileOrFiles::set_has_uri_path_glob() {
  _oneof_case_[0] = kUriPathGlob;
}
inline void ReadRel_LocalFiles_FileOrFiles::clear_uri_path_glob() {
  if (_internal_has_uri_path_glob()) {
    path_type_.uri_path_glob_.Destroy(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
    clear_has_path_type();
  }
}
inline const std::string& ReadRel_LocalFiles_FileOrFiles::uri_path_glob() const {
  // @@protoc_insertion_point(field_get:substrait.ReadRel.LocalFiles.FileOrFiles.uri_path_glob)
  return _internal_uri_path_glob();
}
template <typename ArgT0, typename... ArgT>
inline void ReadRel_LocalFiles_FileOrFiles::set_uri_path_glob(ArgT0&& arg0, ArgT... args) {
  if (!_internal_has_uri_path_glob()) {
    clear_path_type();
    set_has_uri_path_glob();
    path_type_.uri_path_glob_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  path_type_.uri_path_glob_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
  // @@protoc_insertion_point(field_set:substrait.ReadRel.LocalFiles.FileOrFiles.uri_path_glob)
}
inline std::string* ReadRel_LocalFiles_FileOrFiles::mutable_uri_path_glob() {
  std::string* _s = _internal_mutable_uri_path_glob();
  // @@protoc_insertion_point(field_mutable:substrait.ReadRel.LocalFiles.FileOrFiles.uri_path_glob)
  return _s;
}
inline const std::string& ReadRel_LocalFiles_FileOrFiles::_internal_uri_path_glob() const {
  if (_internal_has_uri_path_glob()) {
    return path_type_.uri_path_glob_.Get();
  }
  return ::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited();
}
inline void ReadRel_LocalFiles_FileOrFiles::_internal_set_uri_path_glob(const std::string& value) {
  if (!_internal_has_uri_path_glob()) {
    clear_path_type();
    set_has_uri_path_glob();
    path_type_.uri_path_glob_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  path_type_.uri_path_glob_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
}
inline std::string* ReadRel_LocalFiles_FileOrFiles::_internal_mutable_uri_path_glob() {
  if (!_internal_has_uri_path_glob()) {
    clear_path_type();
    set_has_uri_path_glob();
    path_type_.uri_path_glob_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  return path_type_.uri_path_glob_.Mutable(
      ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
}
inline std::string* ReadRel_LocalFiles_FileOrFiles::release_uri_path_glob() {
  // @@protoc_insertion_point(field_release:substrait.ReadRel.LocalFiles.FileOrFiles.uri_path_glob)
  if (_internal_has_uri_path_glob()) {
    clear_has_path_type();
    return path_type_.uri_path_glob_.ReleaseNonDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
  } else {
    return nullptr;
  }
}
inline void ReadRel_LocalFiles_FileOrFiles::set_allocated_uri_path_glob(std::string* uri_path_glob) {
  if (has_path_type()) {
    clear_path_type();
  }
  if (uri_path_glob != nullptr) {
    set_has_uri_path_glob();
    path_type_.uri_path_glob_.UnsafeSetDefault(uri_path_glob);
    ::PROTOBUF_NAMESPACE_ID::Arena* arena = GetArenaForAllocation();
    if (arena != nullptr) {
      arena->Own(uri_path_glob);
    }
  }
  // @@protoc_insertion_point(field_set_allocated:substrait.ReadRel.LocalFiles.FileOrFiles.uri_path_glob)
}

// string uri_file = 3 [json_name = "uriFile"];
inline bool ReadRel_LocalFiles_FileOrFiles::_internal_has_uri_file() const {
  return path_type_case() == kUriFile;
}
inline bool ReadRel_LocalFiles_FileOrFiles::has_uri_file() const {
  return _internal_has_uri_file();
}
inline void ReadRel_LocalFiles_FileOrFiles::set_has_uri_file() {
  _oneof_case_[0] = kUriFile;
}
inline void ReadRel_LocalFiles_FileOrFiles::clear_uri_file() {
  if (_internal_has_uri_file()) {
    path_type_.uri_file_.Destroy(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
    clear_has_path_type();
  }
}
inline const std::string& ReadRel_LocalFiles_FileOrFiles::uri_file() const {
  // @@protoc_insertion_point(field_get:substrait.ReadRel.LocalFiles.FileOrFiles.uri_file)
  return _internal_uri_file();
}
template <typename ArgT0, typename... ArgT>
inline void ReadRel_LocalFiles_FileOrFiles::set_uri_file(ArgT0&& arg0, ArgT... args) {
  if (!_internal_has_uri_file()) {
    clear_path_type();
    set_has_uri_file();
    path_type_.uri_file_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  path_type_.uri_file_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
  // @@protoc_insertion_point(field_set:substrait.ReadRel.LocalFiles.FileOrFiles.uri_file)
}
inline std::string* ReadRel_LocalFiles_FileOrFiles::mutable_uri_file() {
  std::string* _s = _internal_mutable_uri_file();
  // @@protoc_insertion_point(field_mutable:substrait.ReadRel.LocalFiles.FileOrFiles.uri_file)
  return _s;
}
inline const std::string& ReadRel_LocalFiles_FileOrFiles::_internal_uri_file() const {
  if (_internal_has_uri_file()) {
    return path_type_.uri_file_.Get();
  }
  return ::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited();
}
inline void ReadRel_LocalFiles_FileOrFiles::_internal_set_uri_file(const std::string& value) {
  if (!_internal_has_uri_file()) {
    clear_path_type();
    set_has_uri_file();
    path_type_.uri_file_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  path_type_.uri_file_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
}
inline std::string* ReadRel_LocalFiles_FileOrFiles::_internal_mutable_uri_file() {
  if (!_internal_has_uri_file()) {
    clear_path_type();
    set_has_uri_file();
    path_type_.uri_file_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  return path_type_.uri_file_.Mutable(
      ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
}
inline std::string* ReadRel_LocalFiles_FileOrFiles::release_uri_file() {
  // @@protoc_insertion_point(field_release:substrait.ReadRel.LocalFiles.FileOrFiles.uri_file)
  if (_internal_has_uri_file()) {
    clear_has_path_type();
    return path_type_.uri_file_.ReleaseNonDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
  } else {
    return nullptr;
  }
}
inline void ReadRel_LocalFiles_FileOrFiles::set_allocated_uri_file(std::string* uri_file) {
  if (has_path_type()) {
    clear_path_type();
  }
  if (uri_file != nullptr) {
    set_has_uri_file();
    path_type_.uri_file_.UnsafeSetDefault(uri_file);
    ::PROTOBUF_NAMESPACE_ID::Arena* arena = GetArenaForAllocation();
    if (arena != nullptr) {
      arena->Own(uri_file);
    }
  }
  // @@protoc_insertion_point(field_set_allocated:substrait.ReadRel.LocalFiles.FileOrFiles.uri_file)
}

// string uri_folder = 4 [json_name = "uriFolder"];
inline bool ReadRel_LocalFiles_FileOrFiles::_internal_has_uri_folder() const {
  return path_type_case() == kUriFolder;
}
inline bool ReadRel_LocalFiles_FileOrFiles::has_uri_folder() const {
  return _internal_has_uri_folder();
}
inline void ReadRel_LocalFiles_FileOrFiles::set_has_uri_folder() {
  _oneof_case_[0] = kUriFolder;
}
inline void ReadRel_LocalFiles_FileOrFiles::clear_uri_folder() {
  if (_internal_has_uri_folder()) {
    path_type_.uri_folder_.Destroy(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
    clear_has_path_type();
  }
}
inline const std::string& ReadRel_LocalFiles_FileOrFiles::uri_folder() const {
  // @@protoc_insertion_point(field_get:substrait.ReadRel.LocalFiles.FileOrFiles.uri_folder)
  return _internal_uri_folder();
}
template <typename ArgT0, typename... ArgT>
inline void ReadRel_LocalFiles_FileOrFiles::set_uri_folder(ArgT0&& arg0, ArgT... args) {
  if (!_internal_has_uri_folder()) {
    clear_path_type();
    set_has_uri_folder();
    path_type_.uri_folder_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  path_type_.uri_folder_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
  // @@protoc_insertion_point(field_set:substrait.ReadRel.LocalFiles.FileOrFiles.uri_folder)
}
inline std::string* ReadRel_LocalFiles_FileOrFiles::mutable_uri_folder() {
  std::string* _s = _internal_mutable_uri_folder();
  // @@protoc_insertion_point(field_mutable:substrait.ReadRel.LocalFiles.FileOrFiles.uri_folder)
  return _s;
}
inline const std::string& ReadRel_LocalFiles_FileOrFiles::_internal_uri_folder() const {
  if (_internal_has_uri_folder()) {
    return path_type_.uri_folder_.Get();
  }
  return ::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited();
}
inline void ReadRel_LocalFiles_FileOrFiles::_internal_set_uri_folder(const std::string& value) {
  if (!_internal_has_uri_folder()) {
    clear_path_type();
    set_has_uri_folder();
    path_type_.uri_folder_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  path_type_.uri_folder_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
}
inline std::string* ReadRel_LocalFiles_FileOrFiles::_internal_mutable_uri_folder() {
  if (!_internal_has_uri_folder()) {
    clear_path_type();
    set_has_uri_folder();
    path_type_.uri_folder_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  return path_type_.uri_folder_.Mutable(
      ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
}
inline std::string* ReadRel_LocalFiles_FileOrFiles::release_uri_folder() {
  // @@protoc_insertion_point(field_release:substrait.ReadRel.LocalFiles.FileOrFiles.uri_folder)
  if (_internal_has_uri_folder()) {
    clear_has_path_type();
    return path_type_.uri_folder_.ReleaseNonDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
  } else {
    return nullptr;
  }
}
inline void ReadRel_LocalFiles_FileOrFiles::set_allocated_uri_folder(std::string* uri_folder) {
  if (has_path_type()) {
    clear_path_type();
  }
  if (uri_folder != nullptr) {
    set_has_uri_folder();
    path_type_.uri_folder_.UnsafeSetDefault(uri_folder);
    ::PROTOBUF_NAMESPACE_ID::Arena* arena = GetArenaForAllocation();
    if (arena != nullptr) {
      arena->Own(uri_folder);
    }
  }
  // @@protoc_insertion_point(field_set_allocated:substrait.ReadRel.LocalFiles.FileOrFiles.uri_folder)
}

// .substrait.ReadRel.LocalFiles.FileOrFiles.FileFormat format = 5 [json_name = "format"];
inline void ReadRel_LocalFiles_FileOrFiles::clear_format() {
  format_ = 0;
}
inline ::substrait::ReadRel_LocalFiles_FileOrFiles_FileFormat ReadRel_LocalFiles_FileOrFiles::_internal_format() const {
  return static_cast< ::substrait::ReadRel_LocalFiles_FileOrFiles_FileFormat >(format_);
}
inline ::substrait::ReadRel_LocalFiles_FileOrFiles_FileFormat ReadRel_LocalFiles_FileOrFiles::format() const {
  // @@protoc_insertion_point(field_get:substrait.ReadRel.LocalFiles.FileOrFiles.format)
  return _internal_format();
}
inline void ReadRel_LocalFiles_FileOrFiles::_internal_set_format(::substrait::ReadRel_LocalFiles_FileOrFiles_FileFormat value) {
  
  format_ = value;
}
inline void ReadRel_LocalFiles_FileOrFiles::set_format(::substrait::ReadRel_LocalFiles_FileOrFiles_FileFormat value) {
  _internal_set_format(value);
  // @@protoc_insertion_point(field_set:substrait.ReadRel.LocalFiles.FileOrFiles.format)
}

// uint64 partition_index = 6 [json_name = "partitionIndex"];
inline void ReadRel_LocalFiles_FileOrFiles::clear_partition_index() {
  partition_index_ = uint64_t{0u};
}
inline uint64_t ReadRel_LocalFiles_FileOrFiles::_internal_partition_index() const {
  return partition_index_;
}
inline uint64_t ReadRel_LocalFiles_FileOrFiles::partition_index() const {
  // @@protoc_insertion_point(field_get:substrait.ReadRel.LocalFiles.FileOrFiles.partition_index)
  return _internal_partition_index();
}
inline void ReadRel_LocalFiles_FileOrFiles::_internal_set_partition_index(uint64_t value) {
  
  partition_index_ = value;
}
inline void ReadRel_LocalFiles_FileOrFiles::set_partition_index(uint64_t value) {
  _internal_set_partition_index(value);
  // @@protoc_insertion_point(field_set:substrait.ReadRel.LocalFiles.FileOrFiles.partition_index)
}

// uint64 start = 7 [json_name = "start"];
inline void ReadRel_LocalFiles_FileOrFiles::clear_start() {
  start_ = uint64_t{0u};
}
inline uint64_t ReadRel_LocalFiles_FileOrFiles::_internal_start() const {
  return start_;
}
inline uint64_t ReadRel_LocalFiles_FileOrFiles::start() const {
  // @@protoc_insertion_point(field_get:substrait.ReadRel.LocalFiles.FileOrFiles.start)
  return _internal_start();
}
inline void ReadRel_LocalFiles_FileOrFiles::_internal_set_start(uint64_t value) {
  
  start_ = value;
}
inline void ReadRel_LocalFiles_FileOrFiles::set_start(uint64_t value) {
  _internal_set_start(value);
  // @@protoc_insertion_point(field_set:substrait.ReadRel.LocalFiles.FileOrFiles.start)
}

// uint64 length = 8 [json_name = "length"];
inline void ReadRel_LocalFiles_FileOrFiles::clear_length() {
  length_ = uint64_t{0u};
}
inline uint64_t ReadRel_LocalFiles_FileOrFiles::_internal_length() const {
  return length_;
}
inline uint64_t ReadRel_LocalFiles_FileOrFiles::length() const {
  // @@protoc_insertion_point(field_get:substrait.ReadRel.LocalFiles.FileOrFiles.length)
  return _internal_length();
}
inline void ReadRel_LocalFiles_FileOrFiles::_internal_set_length(uint64_t value) {
  
  length_ = value;
}
inline void ReadRel_LocalFiles_FileOrFiles::set_length(uint64_t value) {
  _internal_set_length(value);
  // @@protoc_insertion_point(field_set:substrait.ReadRel.LocalFiles.FileOrFiles.length)
}

inline bool ReadRel_LocalFiles_FileOrFiles::has_path_type() const {
  return path_type_case() != PATH_TYPE_NOT_SET;
}
inline void ReadRel_LocalFiles_FileOrFiles::clear_has_path_type() {
  _oneof_case_[0] = PATH_TYPE_NOT_SET;
}
inline ReadRel_LocalFiles_FileOrFiles::PathTypeCase ReadRel_LocalFiles_FileOrFiles::path_type_case() const {
  return ReadRel_LocalFiles_FileOrFiles::PathTypeCase(_oneof_case_[0]);
}
// -------------------------------------------------------------------

// ReadRel_LocalFiles

// repeated .substrait.ReadRel.LocalFiles.FileOrFiles items = 1 [json_name = "items"];
inline int ReadRel_LocalFiles::_internal_items_size() const {
  return items_.size();
}
inline int ReadRel_LocalFiles::items_size() const {
  return _internal_items_size();
}
inline void ReadRel_LocalFiles::clear_items() {
  items_.Clear();
}
inline ::substrait::ReadRel_LocalFiles_FileOrFiles* ReadRel_LocalFiles::mutable_items(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.ReadRel.LocalFiles.items)
  return items_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::ReadRel_LocalFiles_FileOrFiles >*
ReadRel_LocalFiles::mutable_items() {
  // @@protoc_insertion_point(field_mutable_list:substrait.ReadRel.LocalFiles.items)
  return &items_;
}
inline const ::substrait::ReadRel_LocalFiles_FileOrFiles& ReadRel_LocalFiles::_internal_items(int index) const {
  return items_.Get(index);
}
inline const ::substrait::ReadRel_LocalFiles_FileOrFiles& ReadRel_LocalFiles::items(int index) const {
  // @@protoc_insertion_point(field_get:substrait.ReadRel.LocalFiles.items)
  return _internal_items(index);
}
inline ::substrait::ReadRel_LocalFiles_FileOrFiles* ReadRel_LocalFiles::_internal_add_items() {
  return items_.Add();
}
inline ::substrait::ReadRel_LocalFiles_FileOrFiles* ReadRel_LocalFiles::add_items() {
  ::substrait::ReadRel_LocalFiles_FileOrFiles* _add = _internal_add_items();
  // @@protoc_insertion_point(field_add:substrait.ReadRel.LocalFiles.items)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::ReadRel_LocalFiles_FileOrFiles >&
ReadRel_LocalFiles::items() const {
  // @@protoc_insertion_point(field_list:substrait.ReadRel.LocalFiles.items)
  return items_;
}

// .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
inline bool ReadRel_LocalFiles::_internal_has_advanced_extension() const {
  return this != internal_default_instance() && advanced_extension_ != nullptr;
}
inline bool ReadRel_LocalFiles::has_advanced_extension() const {
  return _internal_has_advanced_extension();
}
inline const ::substrait::extensions::AdvancedExtension& ReadRel_LocalFiles::_internal_advanced_extension() const {
  const ::substrait::extensions::AdvancedExtension* p = advanced_extension_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::extensions::AdvancedExtension&>(
      ::substrait::extensions::_AdvancedExtension_default_instance_);
}
inline const ::substrait::extensions::AdvancedExtension& ReadRel_LocalFiles::advanced_extension() const {
  // @@protoc_insertion_point(field_get:substrait.ReadRel.LocalFiles.advanced_extension)
  return _internal_advanced_extension();
}
inline void ReadRel_LocalFiles::unsafe_arena_set_allocated_advanced_extension(
    ::substrait::extensions::AdvancedExtension* advanced_extension) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  advanced_extension_ = advanced_extension;
  if (advanced_extension) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.ReadRel.LocalFiles.advanced_extension)
}
inline ::substrait::extensions::AdvancedExtension* ReadRel_LocalFiles::release_advanced_extension() {
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* ReadRel_LocalFiles::unsafe_arena_release_advanced_extension() {
  // @@protoc_insertion_point(field_release:substrait.ReadRel.LocalFiles.advanced_extension)
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* ReadRel_LocalFiles::_internal_mutable_advanced_extension() {
  
  if (advanced_extension_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::extensions::AdvancedExtension>(GetArenaForAllocation());
    advanced_extension_ = p;
  }
  return advanced_extension_;
}
inline ::substrait::extensions::AdvancedExtension* ReadRel_LocalFiles::mutable_advanced_extension() {
  ::substrait::extensions::AdvancedExtension* _msg = _internal_mutable_advanced_extension();
  // @@protoc_insertion_point(field_mutable:substrait.ReadRel.LocalFiles.advanced_extension)
  return _msg;
}
inline void ReadRel_LocalFiles::set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  if (advanced_extension) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension));
    if (message_arena != submessage_arena) {
      advanced_extension = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, advanced_extension, submessage_arena);
    }
    
  } else {
    
  }
  advanced_extension_ = advanced_extension;
  // @@protoc_insertion_point(field_set_allocated:substrait.ReadRel.LocalFiles.advanced_extension)
}

// -------------------------------------------------------------------

// ReadRel

// .substrait.RelCommon common = 1 [json_name = "common"];
inline bool ReadRel::_internal_has_common() const {
  return this != internal_default_instance() && common_ != nullptr;
}
inline bool ReadRel::has_common() const {
  return _internal_has_common();
}
inline void ReadRel::clear_common() {
  if (GetArenaForAllocation() == nullptr && common_ != nullptr) {
    delete common_;
  }
  common_ = nullptr;
}
inline const ::substrait::RelCommon& ReadRel::_internal_common() const {
  const ::substrait::RelCommon* p = common_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::RelCommon&>(
      ::substrait::_RelCommon_default_instance_);
}
inline const ::substrait::RelCommon& ReadRel::common() const {
  // @@protoc_insertion_point(field_get:substrait.ReadRel.common)
  return _internal_common();
}
inline void ReadRel::unsafe_arena_set_allocated_common(
    ::substrait::RelCommon* common) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(common_);
  }
  common_ = common;
  if (common) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.ReadRel.common)
}
inline ::substrait::RelCommon* ReadRel::release_common() {
  
  ::substrait::RelCommon* temp = common_;
  common_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::RelCommon* ReadRel::unsafe_arena_release_common() {
  // @@protoc_insertion_point(field_release:substrait.ReadRel.common)
  
  ::substrait::RelCommon* temp = common_;
  common_ = nullptr;
  return temp;
}
inline ::substrait::RelCommon* ReadRel::_internal_mutable_common() {
  
  if (common_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::RelCommon>(GetArenaForAllocation());
    common_ = p;
  }
  return common_;
}
inline ::substrait::RelCommon* ReadRel::mutable_common() {
  ::substrait::RelCommon* _msg = _internal_mutable_common();
  // @@protoc_insertion_point(field_mutable:substrait.ReadRel.common)
  return _msg;
}
inline void ReadRel::set_allocated_common(::substrait::RelCommon* common) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete common_;
  }
  if (common) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::RelCommon>::GetOwningArena(common);
    if (message_arena != submessage_arena) {
      common = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, common, submessage_arena);
    }
    
  } else {
    
  }
  common_ = common;
  // @@protoc_insertion_point(field_set_allocated:substrait.ReadRel.common)
}

// .substrait.NamedStruct base_schema = 2 [json_name = "baseSchema"];
inline bool ReadRel::_internal_has_base_schema() const {
  return this != internal_default_instance() && base_schema_ != nullptr;
}
inline bool ReadRel::has_base_schema() const {
  return _internal_has_base_schema();
}
inline const ::substrait::NamedStruct& ReadRel::_internal_base_schema() const {
  const ::substrait::NamedStruct* p = base_schema_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::NamedStruct&>(
      ::substrait::_NamedStruct_default_instance_);
}
inline const ::substrait::NamedStruct& ReadRel::base_schema() const {
  // @@protoc_insertion_point(field_get:substrait.ReadRel.base_schema)
  return _internal_base_schema();
}
inline void ReadRel::unsafe_arena_set_allocated_base_schema(
    ::substrait::NamedStruct* base_schema) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(base_schema_);
  }
  base_schema_ = base_schema;
  if (base_schema) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.ReadRel.base_schema)
}
inline ::substrait::NamedStruct* ReadRel::release_base_schema() {
  
  ::substrait::NamedStruct* temp = base_schema_;
  base_schema_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::NamedStruct* ReadRel::unsafe_arena_release_base_schema() {
  // @@protoc_insertion_point(field_release:substrait.ReadRel.base_schema)
  
  ::substrait::NamedStruct* temp = base_schema_;
  base_schema_ = nullptr;
  return temp;
}
inline ::substrait::NamedStruct* ReadRel::_internal_mutable_base_schema() {
  
  if (base_schema_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::NamedStruct>(GetArenaForAllocation());
    base_schema_ = p;
  }
  return base_schema_;
}
inline ::substrait::NamedStruct* ReadRel::mutable_base_schema() {
  ::substrait::NamedStruct* _msg = _internal_mutable_base_schema();
  // @@protoc_insertion_point(field_mutable:substrait.ReadRel.base_schema)
  return _msg;
}
inline void ReadRel::set_allocated_base_schema(::substrait::NamedStruct* base_schema) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(base_schema_);
  }
  if (base_schema) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(base_schema));
    if (message_arena != submessage_arena) {
      base_schema = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, base_schema, submessage_arena);
    }
    
  } else {
    
  }
  base_schema_ = base_schema;
  // @@protoc_insertion_point(field_set_allocated:substrait.ReadRel.base_schema)
}

// .substrait.Expression filter = 3 [json_name = "filter"];
inline bool ReadRel::_internal_has_filter() const {
  return this != internal_default_instance() && filter_ != nullptr;
}
inline bool ReadRel::has_filter() const {
  return _internal_has_filter();
}
inline void ReadRel::clear_filter() {
  if (GetArenaForAllocation() == nullptr && filter_ != nullptr) {
    delete filter_;
  }
  filter_ = nullptr;
}
inline const ::substrait::Expression& ReadRel::_internal_filter() const {
  const ::substrait::Expression* p = filter_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression&>(
      ::substrait::_Expression_default_instance_);
}
inline const ::substrait::Expression& ReadRel::filter() const {
  // @@protoc_insertion_point(field_get:substrait.ReadRel.filter)
  return _internal_filter();
}
inline void ReadRel::unsafe_arena_set_allocated_filter(
    ::substrait::Expression* filter) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(filter_);
  }
  filter_ = filter;
  if (filter) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.ReadRel.filter)
}
inline ::substrait::Expression* ReadRel::release_filter() {
  
  ::substrait::Expression* temp = filter_;
  filter_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression* ReadRel::unsafe_arena_release_filter() {
  // @@protoc_insertion_point(field_release:substrait.ReadRel.filter)
  
  ::substrait::Expression* temp = filter_;
  filter_ = nullptr;
  return temp;
}
inline ::substrait::Expression* ReadRel::_internal_mutable_filter() {
  
  if (filter_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression>(GetArenaForAllocation());
    filter_ = p;
  }
  return filter_;
}
inline ::substrait::Expression* ReadRel::mutable_filter() {
  ::substrait::Expression* _msg = _internal_mutable_filter();
  // @@protoc_insertion_point(field_mutable:substrait.ReadRel.filter)
  return _msg;
}
inline void ReadRel::set_allocated_filter(::substrait::Expression* filter) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete filter_;
  }
  if (filter) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression>::GetOwningArena(filter);
    if (message_arena != submessage_arena) {
      filter = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, filter, submessage_arena);
    }
    
  } else {
    
  }
  filter_ = filter;
  // @@protoc_insertion_point(field_set_allocated:substrait.ReadRel.filter)
}

// .substrait.Expression.MaskExpression projection = 4 [json_name = "projection"];
inline bool ReadRel::_internal_has_projection() const {
  return this != internal_default_instance() && projection_ != nullptr;
}
inline bool ReadRel::has_projection() const {
  return _internal_has_projection();
}
inline void ReadRel::clear_projection() {
  if (GetArenaForAllocation() == nullptr && projection_ != nullptr) {
    delete projection_;
  }
  projection_ = nullptr;
}
inline const ::substrait::Expression_MaskExpression& ReadRel::_internal_projection() const {
  const ::substrait::Expression_MaskExpression* p = projection_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression_MaskExpression&>(
      ::substrait::_Expression_MaskExpression_default_instance_);
}
inline const ::substrait::Expression_MaskExpression& ReadRel::projection() const {
  // @@protoc_insertion_point(field_get:substrait.ReadRel.projection)
  return _internal_projection();
}
inline void ReadRel::unsafe_arena_set_allocated_projection(
    ::substrait::Expression_MaskExpression* projection) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(projection_);
  }
  projection_ = projection;
  if (projection) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.ReadRel.projection)
}
inline ::substrait::Expression_MaskExpression* ReadRel::release_projection() {
  
  ::substrait::Expression_MaskExpression* temp = projection_;
  projection_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression_MaskExpression* ReadRel::unsafe_arena_release_projection() {
  // @@protoc_insertion_point(field_release:substrait.ReadRel.projection)
  
  ::substrait::Expression_MaskExpression* temp = projection_;
  projection_ = nullptr;
  return temp;
}
inline ::substrait::Expression_MaskExpression* ReadRel::_internal_mutable_projection() {
  
  if (projection_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression_MaskExpression>(GetArenaForAllocation());
    projection_ = p;
  }
  return projection_;
}
inline ::substrait::Expression_MaskExpression* ReadRel::mutable_projection() {
  ::substrait::Expression_MaskExpression* _msg = _internal_mutable_projection();
  // @@protoc_insertion_point(field_mutable:substrait.ReadRel.projection)
  return _msg;
}
inline void ReadRel::set_allocated_projection(::substrait::Expression_MaskExpression* projection) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete projection_;
  }
  if (projection) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression_MaskExpression>::GetOwningArena(projection);
    if (message_arena != submessage_arena) {
      projection = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, projection, submessage_arena);
    }
    
  } else {
    
  }
  projection_ = projection;
  // @@protoc_insertion_point(field_set_allocated:substrait.ReadRel.projection)
}

// .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
inline bool ReadRel::_internal_has_advanced_extension() const {
  return this != internal_default_instance() && advanced_extension_ != nullptr;
}
inline bool ReadRel::has_advanced_extension() const {
  return _internal_has_advanced_extension();
}
inline const ::substrait::extensions::AdvancedExtension& ReadRel::_internal_advanced_extension() const {
  const ::substrait::extensions::AdvancedExtension* p = advanced_extension_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::extensions::AdvancedExtension&>(
      ::substrait::extensions::_AdvancedExtension_default_instance_);
}
inline const ::substrait::extensions::AdvancedExtension& ReadRel::advanced_extension() const {
  // @@protoc_insertion_point(field_get:substrait.ReadRel.advanced_extension)
  return _internal_advanced_extension();
}
inline void ReadRel::unsafe_arena_set_allocated_advanced_extension(
    ::substrait::extensions::AdvancedExtension* advanced_extension) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  advanced_extension_ = advanced_extension;
  if (advanced_extension) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.ReadRel.advanced_extension)
}
inline ::substrait::extensions::AdvancedExtension* ReadRel::release_advanced_extension() {
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* ReadRel::unsafe_arena_release_advanced_extension() {
  // @@protoc_insertion_point(field_release:substrait.ReadRel.advanced_extension)
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* ReadRel::_internal_mutable_advanced_extension() {
  
  if (advanced_extension_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::extensions::AdvancedExtension>(GetArenaForAllocation());
    advanced_extension_ = p;
  }
  return advanced_extension_;
}
inline ::substrait::extensions::AdvancedExtension* ReadRel::mutable_advanced_extension() {
  ::substrait::extensions::AdvancedExtension* _msg = _internal_mutable_advanced_extension();
  // @@protoc_insertion_point(field_mutable:substrait.ReadRel.advanced_extension)
  return _msg;
}
inline void ReadRel::set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  if (advanced_extension) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension));
    if (message_arena != submessage_arena) {
      advanced_extension = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, advanced_extension, submessage_arena);
    }
    
  } else {
    
  }
  advanced_extension_ = advanced_extension;
  // @@protoc_insertion_point(field_set_allocated:substrait.ReadRel.advanced_extension)
}

// .substrait.ReadRel.VirtualTable virtual_table = 5 [json_name = "virtualTable"];
inline bool ReadRel::_internal_has_virtual_table() const {
  return read_type_case() == kVirtualTable;
}
inline bool ReadRel::has_virtual_table() const {
  return _internal_has_virtual_table();
}
inline void ReadRel::set_has_virtual_table() {
  _oneof_case_[0] = kVirtualTable;
}
inline void ReadRel::clear_virtual_table() {
  if (_internal_has_virtual_table()) {
    if (GetArenaForAllocation() == nullptr) {
      delete read_type_.virtual_table_;
    }
    clear_has_read_type();
  }
}
inline ::substrait::ReadRel_VirtualTable* ReadRel::release_virtual_table() {
  // @@protoc_insertion_point(field_release:substrait.ReadRel.virtual_table)
  if (_internal_has_virtual_table()) {
    clear_has_read_type();
      ::substrait::ReadRel_VirtualTable* temp = read_type_.virtual_table_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    read_type_.virtual_table_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::ReadRel_VirtualTable& ReadRel::_internal_virtual_table() const {
  return _internal_has_virtual_table()
      ? *read_type_.virtual_table_
      : reinterpret_cast< ::substrait::ReadRel_VirtualTable&>(::substrait::_ReadRel_VirtualTable_default_instance_);
}
inline const ::substrait::ReadRel_VirtualTable& ReadRel::virtual_table() const {
  // @@protoc_insertion_point(field_get:substrait.ReadRel.virtual_table)
  return _internal_virtual_table();
}
inline ::substrait::ReadRel_VirtualTable* ReadRel::unsafe_arena_release_virtual_table() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.ReadRel.virtual_table)
  if (_internal_has_virtual_table()) {
    clear_has_read_type();
    ::substrait::ReadRel_VirtualTable* temp = read_type_.virtual_table_;
    read_type_.virtual_table_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ReadRel::unsafe_arena_set_allocated_virtual_table(::substrait::ReadRel_VirtualTable* virtual_table) {
  clear_read_type();
  if (virtual_table) {
    set_has_virtual_table();
    read_type_.virtual_table_ = virtual_table;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.ReadRel.virtual_table)
}
inline ::substrait::ReadRel_VirtualTable* ReadRel::_internal_mutable_virtual_table() {
  if (!_internal_has_virtual_table()) {
    clear_read_type();
    set_has_virtual_table();
    read_type_.virtual_table_ = CreateMaybeMessage< ::substrait::ReadRel_VirtualTable >(GetArenaForAllocation());
  }
  return read_type_.virtual_table_;
}
inline ::substrait::ReadRel_VirtualTable* ReadRel::mutable_virtual_table() {
  ::substrait::ReadRel_VirtualTable* _msg = _internal_mutable_virtual_table();
  // @@protoc_insertion_point(field_mutable:substrait.ReadRel.virtual_table)
  return _msg;
}

// .substrait.ReadRel.LocalFiles local_files = 6 [json_name = "localFiles"];
inline bool ReadRel::_internal_has_local_files() const {
  return read_type_case() == kLocalFiles;
}
inline bool ReadRel::has_local_files() const {
  return _internal_has_local_files();
}
inline void ReadRel::set_has_local_files() {
  _oneof_case_[0] = kLocalFiles;
}
inline void ReadRel::clear_local_files() {
  if (_internal_has_local_files()) {
    if (GetArenaForAllocation() == nullptr) {
      delete read_type_.local_files_;
    }
    clear_has_read_type();
  }
}
inline ::substrait::ReadRel_LocalFiles* ReadRel::release_local_files() {
  // @@protoc_insertion_point(field_release:substrait.ReadRel.local_files)
  if (_internal_has_local_files()) {
    clear_has_read_type();
      ::substrait::ReadRel_LocalFiles* temp = read_type_.local_files_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    read_type_.local_files_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::ReadRel_LocalFiles& ReadRel::_internal_local_files() const {
  return _internal_has_local_files()
      ? *read_type_.local_files_
      : reinterpret_cast< ::substrait::ReadRel_LocalFiles&>(::substrait::_ReadRel_LocalFiles_default_instance_);
}
inline const ::substrait::ReadRel_LocalFiles& ReadRel::local_files() const {
  // @@protoc_insertion_point(field_get:substrait.ReadRel.local_files)
  return _internal_local_files();
}
inline ::substrait::ReadRel_LocalFiles* ReadRel::unsafe_arena_release_local_files() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.ReadRel.local_files)
  if (_internal_has_local_files()) {
    clear_has_read_type();
    ::substrait::ReadRel_LocalFiles* temp = read_type_.local_files_;
    read_type_.local_files_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ReadRel::unsafe_arena_set_allocated_local_files(::substrait::ReadRel_LocalFiles* local_files) {
  clear_read_type();
  if (local_files) {
    set_has_local_files();
    read_type_.local_files_ = local_files;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.ReadRel.local_files)
}
inline ::substrait::ReadRel_LocalFiles* ReadRel::_internal_mutable_local_files() {
  if (!_internal_has_local_files()) {
    clear_read_type();
    set_has_local_files();
    read_type_.local_files_ = CreateMaybeMessage< ::substrait::ReadRel_LocalFiles >(GetArenaForAllocation());
  }
  return read_type_.local_files_;
}
inline ::substrait::ReadRel_LocalFiles* ReadRel::mutable_local_files() {
  ::substrait::ReadRel_LocalFiles* _msg = _internal_mutable_local_files();
  // @@protoc_insertion_point(field_mutable:substrait.ReadRel.local_files)
  return _msg;
}

// .substrait.ReadRel.NamedTable named_table = 7 [json_name = "namedTable"];
inline bool ReadRel::_internal_has_named_table() const {
  return read_type_case() == kNamedTable;
}
inline bool ReadRel::has_named_table() const {
  return _internal_has_named_table();
}
inline void ReadRel::set_has_named_table() {
  _oneof_case_[0] = kNamedTable;
}
inline void ReadRel::clear_named_table() {
  if (_internal_has_named_table()) {
    if (GetArenaForAllocation() == nullptr) {
      delete read_type_.named_table_;
    }
    clear_has_read_type();
  }
}
inline ::substrait::ReadRel_NamedTable* ReadRel::release_named_table() {
  // @@protoc_insertion_point(field_release:substrait.ReadRel.named_table)
  if (_internal_has_named_table()) {
    clear_has_read_type();
      ::substrait::ReadRel_NamedTable* temp = read_type_.named_table_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    read_type_.named_table_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::ReadRel_NamedTable& ReadRel::_internal_named_table() const {
  return _internal_has_named_table()
      ? *read_type_.named_table_
      : reinterpret_cast< ::substrait::ReadRel_NamedTable&>(::substrait::_ReadRel_NamedTable_default_instance_);
}
inline const ::substrait::ReadRel_NamedTable& ReadRel::named_table() const {
  // @@protoc_insertion_point(field_get:substrait.ReadRel.named_table)
  return _internal_named_table();
}
inline ::substrait::ReadRel_NamedTable* ReadRel::unsafe_arena_release_named_table() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.ReadRel.named_table)
  if (_internal_has_named_table()) {
    clear_has_read_type();
    ::substrait::ReadRel_NamedTable* temp = read_type_.named_table_;
    read_type_.named_table_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ReadRel::unsafe_arena_set_allocated_named_table(::substrait::ReadRel_NamedTable* named_table) {
  clear_read_type();
  if (named_table) {
    set_has_named_table();
    read_type_.named_table_ = named_table;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.ReadRel.named_table)
}
inline ::substrait::ReadRel_NamedTable* ReadRel::_internal_mutable_named_table() {
  if (!_internal_has_named_table()) {
    clear_read_type();
    set_has_named_table();
    read_type_.named_table_ = CreateMaybeMessage< ::substrait::ReadRel_NamedTable >(GetArenaForAllocation());
  }
  return read_type_.named_table_;
}
inline ::substrait::ReadRel_NamedTable* ReadRel::mutable_named_table() {
  ::substrait::ReadRel_NamedTable* _msg = _internal_mutable_named_table();
  // @@protoc_insertion_point(field_mutable:substrait.ReadRel.named_table)
  return _msg;
}

// .substrait.ReadRel.ExtensionTable extension_table = 8 [json_name = "extensionTable"];
inline bool ReadRel::_internal_has_extension_table() const {
  return read_type_case() == kExtensionTable;
}
inline bool ReadRel::has_extension_table() const {
  return _internal_has_extension_table();
}
inline void ReadRel::set_has_extension_table() {
  _oneof_case_[0] = kExtensionTable;
}
inline void ReadRel::clear_extension_table() {
  if (_internal_has_extension_table()) {
    if (GetArenaForAllocation() == nullptr) {
      delete read_type_.extension_table_;
    }
    clear_has_read_type();
  }
}
inline ::substrait::ReadRel_ExtensionTable* ReadRel::release_extension_table() {
  // @@protoc_insertion_point(field_release:substrait.ReadRel.extension_table)
  if (_internal_has_extension_table()) {
    clear_has_read_type();
      ::substrait::ReadRel_ExtensionTable* temp = read_type_.extension_table_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    read_type_.extension_table_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::ReadRel_ExtensionTable& ReadRel::_internal_extension_table() const {
  return _internal_has_extension_table()
      ? *read_type_.extension_table_
      : reinterpret_cast< ::substrait::ReadRel_ExtensionTable&>(::substrait::_ReadRel_ExtensionTable_default_instance_);
}
inline const ::substrait::ReadRel_ExtensionTable& ReadRel::extension_table() const {
  // @@protoc_insertion_point(field_get:substrait.ReadRel.extension_table)
  return _internal_extension_table();
}
inline ::substrait::ReadRel_ExtensionTable* ReadRel::unsafe_arena_release_extension_table() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.ReadRel.extension_table)
  if (_internal_has_extension_table()) {
    clear_has_read_type();
    ::substrait::ReadRel_ExtensionTable* temp = read_type_.extension_table_;
    read_type_.extension_table_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ReadRel::unsafe_arena_set_allocated_extension_table(::substrait::ReadRel_ExtensionTable* extension_table) {
  clear_read_type();
  if (extension_table) {
    set_has_extension_table();
    read_type_.extension_table_ = extension_table;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.ReadRel.extension_table)
}
inline ::substrait::ReadRel_ExtensionTable* ReadRel::_internal_mutable_extension_table() {
  if (!_internal_has_extension_table()) {
    clear_read_type();
    set_has_extension_table();
    read_type_.extension_table_ = CreateMaybeMessage< ::substrait::ReadRel_ExtensionTable >(GetArenaForAllocation());
  }
  return read_type_.extension_table_;
}
inline ::substrait::ReadRel_ExtensionTable* ReadRel::mutable_extension_table() {
  ::substrait::ReadRel_ExtensionTable* _msg = _internal_mutable_extension_table();
  // @@protoc_insertion_point(field_mutable:substrait.ReadRel.extension_table)
  return _msg;
}

inline bool ReadRel::has_read_type() const {
  return read_type_case() != READ_TYPE_NOT_SET;
}
inline void ReadRel::clear_has_read_type() {
  _oneof_case_[0] = READ_TYPE_NOT_SET;
}
inline ReadRel::ReadTypeCase ReadRel::read_type_case() const {
  return ReadRel::ReadTypeCase(_oneof_case_[0]);
}
// -------------------------------------------------------------------

// ProjectRel

// .substrait.RelCommon common = 1 [json_name = "common"];
inline bool ProjectRel::_internal_has_common() const {
  return this != internal_default_instance() && common_ != nullptr;
}
inline bool ProjectRel::has_common() const {
  return _internal_has_common();
}
inline void ProjectRel::clear_common() {
  if (GetArenaForAllocation() == nullptr && common_ != nullptr) {
    delete common_;
  }
  common_ = nullptr;
}
inline const ::substrait::RelCommon& ProjectRel::_internal_common() const {
  const ::substrait::RelCommon* p = common_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::RelCommon&>(
      ::substrait::_RelCommon_default_instance_);
}
inline const ::substrait::RelCommon& ProjectRel::common() const {
  // @@protoc_insertion_point(field_get:substrait.ProjectRel.common)
  return _internal_common();
}
inline void ProjectRel::unsafe_arena_set_allocated_common(
    ::substrait::RelCommon* common) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(common_);
  }
  common_ = common;
  if (common) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.ProjectRel.common)
}
inline ::substrait::RelCommon* ProjectRel::release_common() {
  
  ::substrait::RelCommon* temp = common_;
  common_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::RelCommon* ProjectRel::unsafe_arena_release_common() {
  // @@protoc_insertion_point(field_release:substrait.ProjectRel.common)
  
  ::substrait::RelCommon* temp = common_;
  common_ = nullptr;
  return temp;
}
inline ::substrait::RelCommon* ProjectRel::_internal_mutable_common() {
  
  if (common_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::RelCommon>(GetArenaForAllocation());
    common_ = p;
  }
  return common_;
}
inline ::substrait::RelCommon* ProjectRel::mutable_common() {
  ::substrait::RelCommon* _msg = _internal_mutable_common();
  // @@protoc_insertion_point(field_mutable:substrait.ProjectRel.common)
  return _msg;
}
inline void ProjectRel::set_allocated_common(::substrait::RelCommon* common) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete common_;
  }
  if (common) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::RelCommon>::GetOwningArena(common);
    if (message_arena != submessage_arena) {
      common = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, common, submessage_arena);
    }
    
  } else {
    
  }
  common_ = common;
  // @@protoc_insertion_point(field_set_allocated:substrait.ProjectRel.common)
}

// .substrait.Rel input = 2 [json_name = "input"];
inline bool ProjectRel::_internal_has_input() const {
  return this != internal_default_instance() && input_ != nullptr;
}
inline bool ProjectRel::has_input() const {
  return _internal_has_input();
}
inline void ProjectRel::clear_input() {
  if (GetArenaForAllocation() == nullptr && input_ != nullptr) {
    delete input_;
  }
  input_ = nullptr;
}
inline const ::substrait::Rel& ProjectRel::_internal_input() const {
  const ::substrait::Rel* p = input_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Rel&>(
      ::substrait::_Rel_default_instance_);
}
inline const ::substrait::Rel& ProjectRel::input() const {
  // @@protoc_insertion_point(field_get:substrait.ProjectRel.input)
  return _internal_input();
}
inline void ProjectRel::unsafe_arena_set_allocated_input(
    ::substrait::Rel* input) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(input_);
  }
  input_ = input;
  if (input) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.ProjectRel.input)
}
inline ::substrait::Rel* ProjectRel::release_input() {
  
  ::substrait::Rel* temp = input_;
  input_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Rel* ProjectRel::unsafe_arena_release_input() {
  // @@protoc_insertion_point(field_release:substrait.ProjectRel.input)
  
  ::substrait::Rel* temp = input_;
  input_ = nullptr;
  return temp;
}
inline ::substrait::Rel* ProjectRel::_internal_mutable_input() {
  
  if (input_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Rel>(GetArenaForAllocation());
    input_ = p;
  }
  return input_;
}
inline ::substrait::Rel* ProjectRel::mutable_input() {
  ::substrait::Rel* _msg = _internal_mutable_input();
  // @@protoc_insertion_point(field_mutable:substrait.ProjectRel.input)
  return _msg;
}
inline void ProjectRel::set_allocated_input(::substrait::Rel* input) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete input_;
  }
  if (input) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Rel>::GetOwningArena(input);
    if (message_arena != submessage_arena) {
      input = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, input, submessage_arena);
    }
    
  } else {
    
  }
  input_ = input;
  // @@protoc_insertion_point(field_set_allocated:substrait.ProjectRel.input)
}

// repeated .substrait.Expression expressions = 3 [json_name = "expressions"];
inline int ProjectRel::_internal_expressions_size() const {
  return expressions_.size();
}
inline int ProjectRel::expressions_size() const {
  return _internal_expressions_size();
}
inline void ProjectRel::clear_expressions() {
  expressions_.Clear();
}
inline ::substrait::Expression* ProjectRel::mutable_expressions(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.ProjectRel.expressions)
  return expressions_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >*
ProjectRel::mutable_expressions() {
  // @@protoc_insertion_point(field_mutable_list:substrait.ProjectRel.expressions)
  return &expressions_;
}
inline const ::substrait::Expression& ProjectRel::_internal_expressions(int index) const {
  return expressions_.Get(index);
}
inline const ::substrait::Expression& ProjectRel::expressions(int index) const {
  // @@protoc_insertion_point(field_get:substrait.ProjectRel.expressions)
  return _internal_expressions(index);
}
inline ::substrait::Expression* ProjectRel::_internal_add_expressions() {
  return expressions_.Add();
}
inline ::substrait::Expression* ProjectRel::add_expressions() {
  ::substrait::Expression* _add = _internal_add_expressions();
  // @@protoc_insertion_point(field_add:substrait.ProjectRel.expressions)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >&
ProjectRel::expressions() const {
  // @@protoc_insertion_point(field_list:substrait.ProjectRel.expressions)
  return expressions_;
}

// .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
inline bool ProjectRel::_internal_has_advanced_extension() const {
  return this != internal_default_instance() && advanced_extension_ != nullptr;
}
inline bool ProjectRel::has_advanced_extension() const {
  return _internal_has_advanced_extension();
}
inline const ::substrait::extensions::AdvancedExtension& ProjectRel::_internal_advanced_extension() const {
  const ::substrait::extensions::AdvancedExtension* p = advanced_extension_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::extensions::AdvancedExtension&>(
      ::substrait::extensions::_AdvancedExtension_default_instance_);
}
inline const ::substrait::extensions::AdvancedExtension& ProjectRel::advanced_extension() const {
  // @@protoc_insertion_point(field_get:substrait.ProjectRel.advanced_extension)
  return _internal_advanced_extension();
}
inline void ProjectRel::unsafe_arena_set_allocated_advanced_extension(
    ::substrait::extensions::AdvancedExtension* advanced_extension) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  advanced_extension_ = advanced_extension;
  if (advanced_extension) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.ProjectRel.advanced_extension)
}
inline ::substrait::extensions::AdvancedExtension* ProjectRel::release_advanced_extension() {
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* ProjectRel::unsafe_arena_release_advanced_extension() {
  // @@protoc_insertion_point(field_release:substrait.ProjectRel.advanced_extension)
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* ProjectRel::_internal_mutable_advanced_extension() {
  
  if (advanced_extension_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::extensions::AdvancedExtension>(GetArenaForAllocation());
    advanced_extension_ = p;
  }
  return advanced_extension_;
}
inline ::substrait::extensions::AdvancedExtension* ProjectRel::mutable_advanced_extension() {
  ::substrait::extensions::AdvancedExtension* _msg = _internal_mutable_advanced_extension();
  // @@protoc_insertion_point(field_mutable:substrait.ProjectRel.advanced_extension)
  return _msg;
}
inline void ProjectRel::set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  if (advanced_extension) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension));
    if (message_arena != submessage_arena) {
      advanced_extension = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, advanced_extension, submessage_arena);
    }
    
  } else {
    
  }
  advanced_extension_ = advanced_extension;
  // @@protoc_insertion_point(field_set_allocated:substrait.ProjectRel.advanced_extension)
}

// -------------------------------------------------------------------

// JoinRel

// .substrait.RelCommon common = 1 [json_name = "common"];
inline bool JoinRel::_internal_has_common() const {
  return this != internal_default_instance() && common_ != nullptr;
}
inline bool JoinRel::has_common() const {
  return _internal_has_common();
}
inline void JoinRel::clear_common() {
  if (GetArenaForAllocation() == nullptr && common_ != nullptr) {
    delete common_;
  }
  common_ = nullptr;
}
inline const ::substrait::RelCommon& JoinRel::_internal_common() const {
  const ::substrait::RelCommon* p = common_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::RelCommon&>(
      ::substrait::_RelCommon_default_instance_);
}
inline const ::substrait::RelCommon& JoinRel::common() const {
  // @@protoc_insertion_point(field_get:substrait.JoinRel.common)
  return _internal_common();
}
inline void JoinRel::unsafe_arena_set_allocated_common(
    ::substrait::RelCommon* common) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(common_);
  }
  common_ = common;
  if (common) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.JoinRel.common)
}
inline ::substrait::RelCommon* JoinRel::release_common() {
  
  ::substrait::RelCommon* temp = common_;
  common_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::RelCommon* JoinRel::unsafe_arena_release_common() {
  // @@protoc_insertion_point(field_release:substrait.JoinRel.common)
  
  ::substrait::RelCommon* temp = common_;
  common_ = nullptr;
  return temp;
}
inline ::substrait::RelCommon* JoinRel::_internal_mutable_common() {
  
  if (common_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::RelCommon>(GetArenaForAllocation());
    common_ = p;
  }
  return common_;
}
inline ::substrait::RelCommon* JoinRel::mutable_common() {
  ::substrait::RelCommon* _msg = _internal_mutable_common();
  // @@protoc_insertion_point(field_mutable:substrait.JoinRel.common)
  return _msg;
}
inline void JoinRel::set_allocated_common(::substrait::RelCommon* common) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete common_;
  }
  if (common) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::RelCommon>::GetOwningArena(common);
    if (message_arena != submessage_arena) {
      common = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, common, submessage_arena);
    }
    
  } else {
    
  }
  common_ = common;
  // @@protoc_insertion_point(field_set_allocated:substrait.JoinRel.common)
}

// .substrait.Rel left = 2 [json_name = "left"];
inline bool JoinRel::_internal_has_left() const {
  return this != internal_default_instance() && left_ != nullptr;
}
inline bool JoinRel::has_left() const {
  return _internal_has_left();
}
inline void JoinRel::clear_left() {
  if (GetArenaForAllocation() == nullptr && left_ != nullptr) {
    delete left_;
  }
  left_ = nullptr;
}
inline const ::substrait::Rel& JoinRel::_internal_left() const {
  const ::substrait::Rel* p = left_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Rel&>(
      ::substrait::_Rel_default_instance_);
}
inline const ::substrait::Rel& JoinRel::left() const {
  // @@protoc_insertion_point(field_get:substrait.JoinRel.left)
  return _internal_left();
}
inline void JoinRel::unsafe_arena_set_allocated_left(
    ::substrait::Rel* left) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(left_);
  }
  left_ = left;
  if (left) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.JoinRel.left)
}
inline ::substrait::Rel* JoinRel::release_left() {
  
  ::substrait::Rel* temp = left_;
  left_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Rel* JoinRel::unsafe_arena_release_left() {
  // @@protoc_insertion_point(field_release:substrait.JoinRel.left)
  
  ::substrait::Rel* temp = left_;
  left_ = nullptr;
  return temp;
}
inline ::substrait::Rel* JoinRel::_internal_mutable_left() {
  
  if (left_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Rel>(GetArenaForAllocation());
    left_ = p;
  }
  return left_;
}
inline ::substrait::Rel* JoinRel::mutable_left() {
  ::substrait::Rel* _msg = _internal_mutable_left();
  // @@protoc_insertion_point(field_mutable:substrait.JoinRel.left)
  return _msg;
}
inline void JoinRel::set_allocated_left(::substrait::Rel* left) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete left_;
  }
  if (left) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Rel>::GetOwningArena(left);
    if (message_arena != submessage_arena) {
      left = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, left, submessage_arena);
    }
    
  } else {
    
  }
  left_ = left;
  // @@protoc_insertion_point(field_set_allocated:substrait.JoinRel.left)
}

// .substrait.Rel right = 3 [json_name = "right"];
inline bool JoinRel::_internal_has_right() const {
  return this != internal_default_instance() && right_ != nullptr;
}
inline bool JoinRel::has_right() const {
  return _internal_has_right();
}
inline void JoinRel::clear_right() {
  if (GetArenaForAllocation() == nullptr && right_ != nullptr) {
    delete right_;
  }
  right_ = nullptr;
}
inline const ::substrait::Rel& JoinRel::_internal_right() const {
  const ::substrait::Rel* p = right_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Rel&>(
      ::substrait::_Rel_default_instance_);
}
inline const ::substrait::Rel& JoinRel::right() const {
  // @@protoc_insertion_point(field_get:substrait.JoinRel.right)
  return _internal_right();
}
inline void JoinRel::unsafe_arena_set_allocated_right(
    ::substrait::Rel* right) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(right_);
  }
  right_ = right;
  if (right) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.JoinRel.right)
}
inline ::substrait::Rel* JoinRel::release_right() {
  
  ::substrait::Rel* temp = right_;
  right_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Rel* JoinRel::unsafe_arena_release_right() {
  // @@protoc_insertion_point(field_release:substrait.JoinRel.right)
  
  ::substrait::Rel* temp = right_;
  right_ = nullptr;
  return temp;
}
inline ::substrait::Rel* JoinRel::_internal_mutable_right() {
  
  if (right_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Rel>(GetArenaForAllocation());
    right_ = p;
  }
  return right_;
}
inline ::substrait::Rel* JoinRel::mutable_right() {
  ::substrait::Rel* _msg = _internal_mutable_right();
  // @@protoc_insertion_point(field_mutable:substrait.JoinRel.right)
  return _msg;
}
inline void JoinRel::set_allocated_right(::substrait::Rel* right) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete right_;
  }
  if (right) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Rel>::GetOwningArena(right);
    if (message_arena != submessage_arena) {
      right = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, right, submessage_arena);
    }
    
  } else {
    
  }
  right_ = right;
  // @@protoc_insertion_point(field_set_allocated:substrait.JoinRel.right)
}

// .substrait.Expression expression = 4 [json_name = "expression"];
inline bool JoinRel::_internal_has_expression() const {
  return this != internal_default_instance() && expression_ != nullptr;
}
inline bool JoinRel::has_expression() const {
  return _internal_has_expression();
}
inline void JoinRel::clear_expression() {
  if (GetArenaForAllocation() == nullptr && expression_ != nullptr) {
    delete expression_;
  }
  expression_ = nullptr;
}
inline const ::substrait::Expression& JoinRel::_internal_expression() const {
  const ::substrait::Expression* p = expression_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression&>(
      ::substrait::_Expression_default_instance_);
}
inline const ::substrait::Expression& JoinRel::expression() const {
  // @@protoc_insertion_point(field_get:substrait.JoinRel.expression)
  return _internal_expression();
}
inline void JoinRel::unsafe_arena_set_allocated_expression(
    ::substrait::Expression* expression) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(expression_);
  }
  expression_ = expression;
  if (expression) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.JoinRel.expression)
}
inline ::substrait::Expression* JoinRel::release_expression() {
  
  ::substrait::Expression* temp = expression_;
  expression_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression* JoinRel::unsafe_arena_release_expression() {
  // @@protoc_insertion_point(field_release:substrait.JoinRel.expression)
  
  ::substrait::Expression* temp = expression_;
  expression_ = nullptr;
  return temp;
}
inline ::substrait::Expression* JoinRel::_internal_mutable_expression() {
  
  if (expression_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression>(GetArenaForAllocation());
    expression_ = p;
  }
  return expression_;
}
inline ::substrait::Expression* JoinRel::mutable_expression() {
  ::substrait::Expression* _msg = _internal_mutable_expression();
  // @@protoc_insertion_point(field_mutable:substrait.JoinRel.expression)
  return _msg;
}
inline void JoinRel::set_allocated_expression(::substrait::Expression* expression) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete expression_;
  }
  if (expression) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression>::GetOwningArena(expression);
    if (message_arena != submessage_arena) {
      expression = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, expression, submessage_arena);
    }
    
  } else {
    
  }
  expression_ = expression;
  // @@protoc_insertion_point(field_set_allocated:substrait.JoinRel.expression)
}

// .substrait.Expression post_join_filter = 5 [json_name = "postJoinFilter"];
inline bool JoinRel::_internal_has_post_join_filter() const {
  return this != internal_default_instance() && post_join_filter_ != nullptr;
}
inline bool JoinRel::has_post_join_filter() const {
  return _internal_has_post_join_filter();
}
inline void JoinRel::clear_post_join_filter() {
  if (GetArenaForAllocation() == nullptr && post_join_filter_ != nullptr) {
    delete post_join_filter_;
  }
  post_join_filter_ = nullptr;
}
inline const ::substrait::Expression& JoinRel::_internal_post_join_filter() const {
  const ::substrait::Expression* p = post_join_filter_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression&>(
      ::substrait::_Expression_default_instance_);
}
inline const ::substrait::Expression& JoinRel::post_join_filter() const {
  // @@protoc_insertion_point(field_get:substrait.JoinRel.post_join_filter)
  return _internal_post_join_filter();
}
inline void JoinRel::unsafe_arena_set_allocated_post_join_filter(
    ::substrait::Expression* post_join_filter) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(post_join_filter_);
  }
  post_join_filter_ = post_join_filter;
  if (post_join_filter) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.JoinRel.post_join_filter)
}
inline ::substrait::Expression* JoinRel::release_post_join_filter() {
  
  ::substrait::Expression* temp = post_join_filter_;
  post_join_filter_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression* JoinRel::unsafe_arena_release_post_join_filter() {
  // @@protoc_insertion_point(field_release:substrait.JoinRel.post_join_filter)
  
  ::substrait::Expression* temp = post_join_filter_;
  post_join_filter_ = nullptr;
  return temp;
}
inline ::substrait::Expression* JoinRel::_internal_mutable_post_join_filter() {
  
  if (post_join_filter_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression>(GetArenaForAllocation());
    post_join_filter_ = p;
  }
  return post_join_filter_;
}
inline ::substrait::Expression* JoinRel::mutable_post_join_filter() {
  ::substrait::Expression* _msg = _internal_mutable_post_join_filter();
  // @@protoc_insertion_point(field_mutable:substrait.JoinRel.post_join_filter)
  return _msg;
}
inline void JoinRel::set_allocated_post_join_filter(::substrait::Expression* post_join_filter) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete post_join_filter_;
  }
  if (post_join_filter) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression>::GetOwningArena(post_join_filter);
    if (message_arena != submessage_arena) {
      post_join_filter = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, post_join_filter, submessage_arena);
    }
    
  } else {
    
  }
  post_join_filter_ = post_join_filter;
  // @@protoc_insertion_point(field_set_allocated:substrait.JoinRel.post_join_filter)
}

// .substrait.JoinRel.JoinType type = 6 [json_name = "type"];
inline void JoinRel::clear_type() {
  type_ = 0;
}
inline ::substrait::JoinRel_JoinType JoinRel::_internal_type() const {
  return static_cast< ::substrait::JoinRel_JoinType >(type_);
}
inline ::substrait::JoinRel_JoinType JoinRel::type() const {
  // @@protoc_insertion_point(field_get:substrait.JoinRel.type)
  return _internal_type();
}
inline void JoinRel::_internal_set_type(::substrait::JoinRel_JoinType value) {
  
  type_ = value;
}
inline void JoinRel::set_type(::substrait::JoinRel_JoinType value) {
  _internal_set_type(value);
  // @@protoc_insertion_point(field_set:substrait.JoinRel.type)
}

// .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
inline bool JoinRel::_internal_has_advanced_extension() const {
  return this != internal_default_instance() && advanced_extension_ != nullptr;
}
inline bool JoinRel::has_advanced_extension() const {
  return _internal_has_advanced_extension();
}
inline const ::substrait::extensions::AdvancedExtension& JoinRel::_internal_advanced_extension() const {
  const ::substrait::extensions::AdvancedExtension* p = advanced_extension_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::extensions::AdvancedExtension&>(
      ::substrait::extensions::_AdvancedExtension_default_instance_);
}
inline const ::substrait::extensions::AdvancedExtension& JoinRel::advanced_extension() const {
  // @@protoc_insertion_point(field_get:substrait.JoinRel.advanced_extension)
  return _internal_advanced_extension();
}
inline void JoinRel::unsafe_arena_set_allocated_advanced_extension(
    ::substrait::extensions::AdvancedExtension* advanced_extension) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  advanced_extension_ = advanced_extension;
  if (advanced_extension) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.JoinRel.advanced_extension)
}
inline ::substrait::extensions::AdvancedExtension* JoinRel::release_advanced_extension() {
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* JoinRel::unsafe_arena_release_advanced_extension() {
  // @@protoc_insertion_point(field_release:substrait.JoinRel.advanced_extension)
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* JoinRel::_internal_mutable_advanced_extension() {
  
  if (advanced_extension_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::extensions::AdvancedExtension>(GetArenaForAllocation());
    advanced_extension_ = p;
  }
  return advanced_extension_;
}
inline ::substrait::extensions::AdvancedExtension* JoinRel::mutable_advanced_extension() {
  ::substrait::extensions::AdvancedExtension* _msg = _internal_mutable_advanced_extension();
  // @@protoc_insertion_point(field_mutable:substrait.JoinRel.advanced_extension)
  return _msg;
}
inline void JoinRel::set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  if (advanced_extension) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension));
    if (message_arena != submessage_arena) {
      advanced_extension = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, advanced_extension, submessage_arena);
    }
    
  } else {
    
  }
  advanced_extension_ = advanced_extension;
  // @@protoc_insertion_point(field_set_allocated:substrait.JoinRel.advanced_extension)
}

// -------------------------------------------------------------------

// CrossRel

// .substrait.RelCommon common = 1 [json_name = "common"];
inline bool CrossRel::_internal_has_common() const {
  return this != internal_default_instance() && common_ != nullptr;
}
inline bool CrossRel::has_common() const {
  return _internal_has_common();
}
inline void CrossRel::clear_common() {
  if (GetArenaForAllocation() == nullptr && common_ != nullptr) {
    delete common_;
  }
  common_ = nullptr;
}
inline const ::substrait::RelCommon& CrossRel::_internal_common() const {
  const ::substrait::RelCommon* p = common_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::RelCommon&>(
      ::substrait::_RelCommon_default_instance_);
}
inline const ::substrait::RelCommon& CrossRel::common() const {
  // @@protoc_insertion_point(field_get:substrait.CrossRel.common)
  return _internal_common();
}
inline void CrossRel::unsafe_arena_set_allocated_common(
    ::substrait::RelCommon* common) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(common_);
  }
  common_ = common;
  if (common) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.CrossRel.common)
}
inline ::substrait::RelCommon* CrossRel::release_common() {
  
  ::substrait::RelCommon* temp = common_;
  common_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::RelCommon* CrossRel::unsafe_arena_release_common() {
  // @@protoc_insertion_point(field_release:substrait.CrossRel.common)
  
  ::substrait::RelCommon* temp = common_;
  common_ = nullptr;
  return temp;
}
inline ::substrait::RelCommon* CrossRel::_internal_mutable_common() {
  
  if (common_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::RelCommon>(GetArenaForAllocation());
    common_ = p;
  }
  return common_;
}
inline ::substrait::RelCommon* CrossRel::mutable_common() {
  ::substrait::RelCommon* _msg = _internal_mutable_common();
  // @@protoc_insertion_point(field_mutable:substrait.CrossRel.common)
  return _msg;
}
inline void CrossRel::set_allocated_common(::substrait::RelCommon* common) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete common_;
  }
  if (common) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::RelCommon>::GetOwningArena(common);
    if (message_arena != submessage_arena) {
      common = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, common, submessage_arena);
    }
    
  } else {
    
  }
  common_ = common;
  // @@protoc_insertion_point(field_set_allocated:substrait.CrossRel.common)
}

// .substrait.Rel left = 2 [json_name = "left"];
inline bool CrossRel::_internal_has_left() const {
  return this != internal_default_instance() && left_ != nullptr;
}
inline bool CrossRel::has_left() const {
  return _internal_has_left();
}
inline void CrossRel::clear_left() {
  if (GetArenaForAllocation() == nullptr && left_ != nullptr) {
    delete left_;
  }
  left_ = nullptr;
}
inline const ::substrait::Rel& CrossRel::_internal_left() const {
  const ::substrait::Rel* p = left_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Rel&>(
      ::substrait::_Rel_default_instance_);
}
inline const ::substrait::Rel& CrossRel::left() const {
  // @@protoc_insertion_point(field_get:substrait.CrossRel.left)
  return _internal_left();
}
inline void CrossRel::unsafe_arena_set_allocated_left(
    ::substrait::Rel* left) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(left_);
  }
  left_ = left;
  if (left) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.CrossRel.left)
}
inline ::substrait::Rel* CrossRel::release_left() {
  
  ::substrait::Rel* temp = left_;
  left_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Rel* CrossRel::unsafe_arena_release_left() {
  // @@protoc_insertion_point(field_release:substrait.CrossRel.left)
  
  ::substrait::Rel* temp = left_;
  left_ = nullptr;
  return temp;
}
inline ::substrait::Rel* CrossRel::_internal_mutable_left() {
  
  if (left_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Rel>(GetArenaForAllocation());
    left_ = p;
  }
  return left_;
}
inline ::substrait::Rel* CrossRel::mutable_left() {
  ::substrait::Rel* _msg = _internal_mutable_left();
  // @@protoc_insertion_point(field_mutable:substrait.CrossRel.left)
  return _msg;
}
inline void CrossRel::set_allocated_left(::substrait::Rel* left) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete left_;
  }
  if (left) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Rel>::GetOwningArena(left);
    if (message_arena != submessage_arena) {
      left = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, left, submessage_arena);
    }
    
  } else {
    
  }
  left_ = left;
  // @@protoc_insertion_point(field_set_allocated:substrait.CrossRel.left)
}

// .substrait.Rel right = 3 [json_name = "right"];
inline bool CrossRel::_internal_has_right() const {
  return this != internal_default_instance() && right_ != nullptr;
}
inline bool CrossRel::has_right() const {
  return _internal_has_right();
}
inline void CrossRel::clear_right() {
  if (GetArenaForAllocation() == nullptr && right_ != nullptr) {
    delete right_;
  }
  right_ = nullptr;
}
inline const ::substrait::Rel& CrossRel::_internal_right() const {
  const ::substrait::Rel* p = right_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Rel&>(
      ::substrait::_Rel_default_instance_);
}
inline const ::substrait::Rel& CrossRel::right() const {
  // @@protoc_insertion_point(field_get:substrait.CrossRel.right)
  return _internal_right();
}
inline void CrossRel::unsafe_arena_set_allocated_right(
    ::substrait::Rel* right) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(right_);
  }
  right_ = right;
  if (right) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.CrossRel.right)
}
inline ::substrait::Rel* CrossRel::release_right() {
  
  ::substrait::Rel* temp = right_;
  right_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Rel* CrossRel::unsafe_arena_release_right() {
  // @@protoc_insertion_point(field_release:substrait.CrossRel.right)
  
  ::substrait::Rel* temp = right_;
  right_ = nullptr;
  return temp;
}
inline ::substrait::Rel* CrossRel::_internal_mutable_right() {
  
  if (right_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Rel>(GetArenaForAllocation());
    right_ = p;
  }
  return right_;
}
inline ::substrait::Rel* CrossRel::mutable_right() {
  ::substrait::Rel* _msg = _internal_mutable_right();
  // @@protoc_insertion_point(field_mutable:substrait.CrossRel.right)
  return _msg;
}
inline void CrossRel::set_allocated_right(::substrait::Rel* right) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete right_;
  }
  if (right) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Rel>::GetOwningArena(right);
    if (message_arena != submessage_arena) {
      right = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, right, submessage_arena);
    }
    
  } else {
    
  }
  right_ = right;
  // @@protoc_insertion_point(field_set_allocated:substrait.CrossRel.right)
}

// .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
inline bool CrossRel::_internal_has_advanced_extension() const {
  return this != internal_default_instance() && advanced_extension_ != nullptr;
}
inline bool CrossRel::has_advanced_extension() const {
  return _internal_has_advanced_extension();
}
inline const ::substrait::extensions::AdvancedExtension& CrossRel::_internal_advanced_extension() const {
  const ::substrait::extensions::AdvancedExtension* p = advanced_extension_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::extensions::AdvancedExtension&>(
      ::substrait::extensions::_AdvancedExtension_default_instance_);
}
inline const ::substrait::extensions::AdvancedExtension& CrossRel::advanced_extension() const {
  // @@protoc_insertion_point(field_get:substrait.CrossRel.advanced_extension)
  return _internal_advanced_extension();
}
inline void CrossRel::unsafe_arena_set_allocated_advanced_extension(
    ::substrait::extensions::AdvancedExtension* advanced_extension) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  advanced_extension_ = advanced_extension;
  if (advanced_extension) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.CrossRel.advanced_extension)
}
inline ::substrait::extensions::AdvancedExtension* CrossRel::release_advanced_extension() {
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* CrossRel::unsafe_arena_release_advanced_extension() {
  // @@protoc_insertion_point(field_release:substrait.CrossRel.advanced_extension)
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* CrossRel::_internal_mutable_advanced_extension() {
  
  if (advanced_extension_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::extensions::AdvancedExtension>(GetArenaForAllocation());
    advanced_extension_ = p;
  }
  return advanced_extension_;
}
inline ::substrait::extensions::AdvancedExtension* CrossRel::mutable_advanced_extension() {
  ::substrait::extensions::AdvancedExtension* _msg = _internal_mutable_advanced_extension();
  // @@protoc_insertion_point(field_mutable:substrait.CrossRel.advanced_extension)
  return _msg;
}
inline void CrossRel::set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  if (advanced_extension) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension));
    if (message_arena != submessage_arena) {
      advanced_extension = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, advanced_extension, submessage_arena);
    }
    
  } else {
    
  }
  advanced_extension_ = advanced_extension;
  // @@protoc_insertion_point(field_set_allocated:substrait.CrossRel.advanced_extension)
}

// -------------------------------------------------------------------

// FetchRel

// .substrait.RelCommon common = 1 [json_name = "common"];
inline bool FetchRel::_internal_has_common() const {
  return this != internal_default_instance() && common_ != nullptr;
}
inline bool FetchRel::has_common() const {
  return _internal_has_common();
}
inline void FetchRel::clear_common() {
  if (GetArenaForAllocation() == nullptr && common_ != nullptr) {
    delete common_;
  }
  common_ = nullptr;
}
inline const ::substrait::RelCommon& FetchRel::_internal_common() const {
  const ::substrait::RelCommon* p = common_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::RelCommon&>(
      ::substrait::_RelCommon_default_instance_);
}
inline const ::substrait::RelCommon& FetchRel::common() const {
  // @@protoc_insertion_point(field_get:substrait.FetchRel.common)
  return _internal_common();
}
inline void FetchRel::unsafe_arena_set_allocated_common(
    ::substrait::RelCommon* common) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(common_);
  }
  common_ = common;
  if (common) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.FetchRel.common)
}
inline ::substrait::RelCommon* FetchRel::release_common() {
  
  ::substrait::RelCommon* temp = common_;
  common_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::RelCommon* FetchRel::unsafe_arena_release_common() {
  // @@protoc_insertion_point(field_release:substrait.FetchRel.common)
  
  ::substrait::RelCommon* temp = common_;
  common_ = nullptr;
  return temp;
}
inline ::substrait::RelCommon* FetchRel::_internal_mutable_common() {
  
  if (common_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::RelCommon>(GetArenaForAllocation());
    common_ = p;
  }
  return common_;
}
inline ::substrait::RelCommon* FetchRel::mutable_common() {
  ::substrait::RelCommon* _msg = _internal_mutable_common();
  // @@protoc_insertion_point(field_mutable:substrait.FetchRel.common)
  return _msg;
}
inline void FetchRel::set_allocated_common(::substrait::RelCommon* common) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete common_;
  }
  if (common) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::RelCommon>::GetOwningArena(common);
    if (message_arena != submessage_arena) {
      common = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, common, submessage_arena);
    }
    
  } else {
    
  }
  common_ = common;
  // @@protoc_insertion_point(field_set_allocated:substrait.FetchRel.common)
}

// .substrait.Rel input = 2 [json_name = "input"];
inline bool FetchRel::_internal_has_input() const {
  return this != internal_default_instance() && input_ != nullptr;
}
inline bool FetchRel::has_input() const {
  return _internal_has_input();
}
inline void FetchRel::clear_input() {
  if (GetArenaForAllocation() == nullptr && input_ != nullptr) {
    delete input_;
  }
  input_ = nullptr;
}
inline const ::substrait::Rel& FetchRel::_internal_input() const {
  const ::substrait::Rel* p = input_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Rel&>(
      ::substrait::_Rel_default_instance_);
}
inline const ::substrait::Rel& FetchRel::input() const {
  // @@protoc_insertion_point(field_get:substrait.FetchRel.input)
  return _internal_input();
}
inline void FetchRel::unsafe_arena_set_allocated_input(
    ::substrait::Rel* input) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(input_);
  }
  input_ = input;
  if (input) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.FetchRel.input)
}
inline ::substrait::Rel* FetchRel::release_input() {
  
  ::substrait::Rel* temp = input_;
  input_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Rel* FetchRel::unsafe_arena_release_input() {
  // @@protoc_insertion_point(field_release:substrait.FetchRel.input)
  
  ::substrait::Rel* temp = input_;
  input_ = nullptr;
  return temp;
}
inline ::substrait::Rel* FetchRel::_internal_mutable_input() {
  
  if (input_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Rel>(GetArenaForAllocation());
    input_ = p;
  }
  return input_;
}
inline ::substrait::Rel* FetchRel::mutable_input() {
  ::substrait::Rel* _msg = _internal_mutable_input();
  // @@protoc_insertion_point(field_mutable:substrait.FetchRel.input)
  return _msg;
}
inline void FetchRel::set_allocated_input(::substrait::Rel* input) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete input_;
  }
  if (input) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Rel>::GetOwningArena(input);
    if (message_arena != submessage_arena) {
      input = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, input, submessage_arena);
    }
    
  } else {
    
  }
  input_ = input;
  // @@protoc_insertion_point(field_set_allocated:substrait.FetchRel.input)
}

// int64 offset = 3 [json_name = "offset"];
inline void FetchRel::clear_offset() {
  offset_ = int64_t{0};
}
inline int64_t FetchRel::_internal_offset() const {
  return offset_;
}
inline int64_t FetchRel::offset() const {
  // @@protoc_insertion_point(field_get:substrait.FetchRel.offset)
  return _internal_offset();
}
inline void FetchRel::_internal_set_offset(int64_t value) {
  
  offset_ = value;
}
inline void FetchRel::set_offset(int64_t value) {
  _internal_set_offset(value);
  // @@protoc_insertion_point(field_set:substrait.FetchRel.offset)
}

// int64 count = 4 [json_name = "count"];
inline void FetchRel::clear_count() {
  count_ = int64_t{0};
}
inline int64_t FetchRel::_internal_count() const {
  return count_;
}
inline int64_t FetchRel::count() const {
  // @@protoc_insertion_point(field_get:substrait.FetchRel.count)
  return _internal_count();
}
inline void FetchRel::_internal_set_count(int64_t value) {
  
  count_ = value;
}
inline void FetchRel::set_count(int64_t value) {
  _internal_set_count(value);
  // @@protoc_insertion_point(field_set:substrait.FetchRel.count)
}

// .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
inline bool FetchRel::_internal_has_advanced_extension() const {
  return this != internal_default_instance() && advanced_extension_ != nullptr;
}
inline bool FetchRel::has_advanced_extension() const {
  return _internal_has_advanced_extension();
}
inline const ::substrait::extensions::AdvancedExtension& FetchRel::_internal_advanced_extension() const {
  const ::substrait::extensions::AdvancedExtension* p = advanced_extension_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::extensions::AdvancedExtension&>(
      ::substrait::extensions::_AdvancedExtension_default_instance_);
}
inline const ::substrait::extensions::AdvancedExtension& FetchRel::advanced_extension() const {
  // @@protoc_insertion_point(field_get:substrait.FetchRel.advanced_extension)
  return _internal_advanced_extension();
}
inline void FetchRel::unsafe_arena_set_allocated_advanced_extension(
    ::substrait::extensions::AdvancedExtension* advanced_extension) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  advanced_extension_ = advanced_extension;
  if (advanced_extension) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.FetchRel.advanced_extension)
}
inline ::substrait::extensions::AdvancedExtension* FetchRel::release_advanced_extension() {
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* FetchRel::unsafe_arena_release_advanced_extension() {
  // @@protoc_insertion_point(field_release:substrait.FetchRel.advanced_extension)
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* FetchRel::_internal_mutable_advanced_extension() {
  
  if (advanced_extension_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::extensions::AdvancedExtension>(GetArenaForAllocation());
    advanced_extension_ = p;
  }
  return advanced_extension_;
}
inline ::substrait::extensions::AdvancedExtension* FetchRel::mutable_advanced_extension() {
  ::substrait::extensions::AdvancedExtension* _msg = _internal_mutable_advanced_extension();
  // @@protoc_insertion_point(field_mutable:substrait.FetchRel.advanced_extension)
  return _msg;
}
inline void FetchRel::set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  if (advanced_extension) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension));
    if (message_arena != submessage_arena) {
      advanced_extension = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, advanced_extension, submessage_arena);
    }
    
  } else {
    
  }
  advanced_extension_ = advanced_extension;
  // @@protoc_insertion_point(field_set_allocated:substrait.FetchRel.advanced_extension)
}

// -------------------------------------------------------------------

// AggregateRel_Grouping

// repeated .substrait.Expression grouping_expressions = 1 [json_name = "groupingExpressions"];
inline int AggregateRel_Grouping::_internal_grouping_expressions_size() const {
  return grouping_expressions_.size();
}
inline int AggregateRel_Grouping::grouping_expressions_size() const {
  return _internal_grouping_expressions_size();
}
inline void AggregateRel_Grouping::clear_grouping_expressions() {
  grouping_expressions_.Clear();
}
inline ::substrait::Expression* AggregateRel_Grouping::mutable_grouping_expressions(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.AggregateRel.Grouping.grouping_expressions)
  return grouping_expressions_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >*
AggregateRel_Grouping::mutable_grouping_expressions() {
  // @@protoc_insertion_point(field_mutable_list:substrait.AggregateRel.Grouping.grouping_expressions)
  return &grouping_expressions_;
}
inline const ::substrait::Expression& AggregateRel_Grouping::_internal_grouping_expressions(int index) const {
  return grouping_expressions_.Get(index);
}
inline const ::substrait::Expression& AggregateRel_Grouping::grouping_expressions(int index) const {
  // @@protoc_insertion_point(field_get:substrait.AggregateRel.Grouping.grouping_expressions)
  return _internal_grouping_expressions(index);
}
inline ::substrait::Expression* AggregateRel_Grouping::_internal_add_grouping_expressions() {
  return grouping_expressions_.Add();
}
inline ::substrait::Expression* AggregateRel_Grouping::add_grouping_expressions() {
  ::substrait::Expression* _add = _internal_add_grouping_expressions();
  // @@protoc_insertion_point(field_add:substrait.AggregateRel.Grouping.grouping_expressions)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >&
AggregateRel_Grouping::grouping_expressions() const {
  // @@protoc_insertion_point(field_list:substrait.AggregateRel.Grouping.grouping_expressions)
  return grouping_expressions_;
}

// -------------------------------------------------------------------

// AggregateRel_Measure

// .substrait.AggregateFunction measure = 1 [json_name = "measure"];
inline bool AggregateRel_Measure::_internal_has_measure() const {
  return this != internal_default_instance() && measure_ != nullptr;
}
inline bool AggregateRel_Measure::has_measure() const {
  return _internal_has_measure();
}
inline void AggregateRel_Measure::clear_measure() {
  if (GetArenaForAllocation() == nullptr && measure_ != nullptr) {
    delete measure_;
  }
  measure_ = nullptr;
}
inline const ::substrait::AggregateFunction& AggregateRel_Measure::_internal_measure() const {
  const ::substrait::AggregateFunction* p = measure_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::AggregateFunction&>(
      ::substrait::_AggregateFunction_default_instance_);
}
inline const ::substrait::AggregateFunction& AggregateRel_Measure::measure() const {
  // @@protoc_insertion_point(field_get:substrait.AggregateRel.Measure.measure)
  return _internal_measure();
}
inline void AggregateRel_Measure::unsafe_arena_set_allocated_measure(
    ::substrait::AggregateFunction* measure) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(measure_);
  }
  measure_ = measure;
  if (measure) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.AggregateRel.Measure.measure)
}
inline ::substrait::AggregateFunction* AggregateRel_Measure::release_measure() {
  
  ::substrait::AggregateFunction* temp = measure_;
  measure_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::AggregateFunction* AggregateRel_Measure::unsafe_arena_release_measure() {
  // @@protoc_insertion_point(field_release:substrait.AggregateRel.Measure.measure)
  
  ::substrait::AggregateFunction* temp = measure_;
  measure_ = nullptr;
  return temp;
}
inline ::substrait::AggregateFunction* AggregateRel_Measure::_internal_mutable_measure() {
  
  if (measure_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::AggregateFunction>(GetArenaForAllocation());
    measure_ = p;
  }
  return measure_;
}
inline ::substrait::AggregateFunction* AggregateRel_Measure::mutable_measure() {
  ::substrait::AggregateFunction* _msg = _internal_mutable_measure();
  // @@protoc_insertion_point(field_mutable:substrait.AggregateRel.Measure.measure)
  return _msg;
}
inline void AggregateRel_Measure::set_allocated_measure(::substrait::AggregateFunction* measure) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete measure_;
  }
  if (measure) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::AggregateFunction>::GetOwningArena(measure);
    if (message_arena != submessage_arena) {
      measure = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, measure, submessage_arena);
    }
    
  } else {
    
  }
  measure_ = measure;
  // @@protoc_insertion_point(field_set_allocated:substrait.AggregateRel.Measure.measure)
}

// .substrait.Expression filter = 2 [json_name = "filter"];
inline bool AggregateRel_Measure::_internal_has_filter() const {
  return this != internal_default_instance() && filter_ != nullptr;
}
inline bool AggregateRel_Measure::has_filter() const {
  return _internal_has_filter();
}
inline void AggregateRel_Measure::clear_filter() {
  if (GetArenaForAllocation() == nullptr && filter_ != nullptr) {
    delete filter_;
  }
  filter_ = nullptr;
}
inline const ::substrait::Expression& AggregateRel_Measure::_internal_filter() const {
  const ::substrait::Expression* p = filter_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression&>(
      ::substrait::_Expression_default_instance_);
}
inline const ::substrait::Expression& AggregateRel_Measure::filter() const {
  // @@protoc_insertion_point(field_get:substrait.AggregateRel.Measure.filter)
  return _internal_filter();
}
inline void AggregateRel_Measure::unsafe_arena_set_allocated_filter(
    ::substrait::Expression* filter) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(filter_);
  }
  filter_ = filter;
  if (filter) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.AggregateRel.Measure.filter)
}
inline ::substrait::Expression* AggregateRel_Measure::release_filter() {
  
  ::substrait::Expression* temp = filter_;
  filter_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression* AggregateRel_Measure::unsafe_arena_release_filter() {
  // @@protoc_insertion_point(field_release:substrait.AggregateRel.Measure.filter)
  
  ::substrait::Expression* temp = filter_;
  filter_ = nullptr;
  return temp;
}
inline ::substrait::Expression* AggregateRel_Measure::_internal_mutable_filter() {
  
  if (filter_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression>(GetArenaForAllocation());
    filter_ = p;
  }
  return filter_;
}
inline ::substrait::Expression* AggregateRel_Measure::mutable_filter() {
  ::substrait::Expression* _msg = _internal_mutable_filter();
  // @@protoc_insertion_point(field_mutable:substrait.AggregateRel.Measure.filter)
  return _msg;
}
inline void AggregateRel_Measure::set_allocated_filter(::substrait::Expression* filter) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete filter_;
  }
  if (filter) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression>::GetOwningArena(filter);
    if (message_arena != submessage_arena) {
      filter = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, filter, submessage_arena);
    }
    
  } else {
    
  }
  filter_ = filter;
  // @@protoc_insertion_point(field_set_allocated:substrait.AggregateRel.Measure.filter)
}

// -------------------------------------------------------------------

// AggregateRel

// .substrait.RelCommon common = 1 [json_name = "common"];
inline bool AggregateRel::_internal_has_common() const {
  return this != internal_default_instance() && common_ != nullptr;
}
inline bool AggregateRel::has_common() const {
  return _internal_has_common();
}
inline void AggregateRel::clear_common() {
  if (GetArenaForAllocation() == nullptr && common_ != nullptr) {
    delete common_;
  }
  common_ = nullptr;
}
inline const ::substrait::RelCommon& AggregateRel::_internal_common() const {
  const ::substrait::RelCommon* p = common_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::RelCommon&>(
      ::substrait::_RelCommon_default_instance_);
}
inline const ::substrait::RelCommon& AggregateRel::common() const {
  // @@protoc_insertion_point(field_get:substrait.AggregateRel.common)
  return _internal_common();
}
inline void AggregateRel::unsafe_arena_set_allocated_common(
    ::substrait::RelCommon* common) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(common_);
  }
  common_ = common;
  if (common) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.AggregateRel.common)
}
inline ::substrait::RelCommon* AggregateRel::release_common() {
  
  ::substrait::RelCommon* temp = common_;
  common_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::RelCommon* AggregateRel::unsafe_arena_release_common() {
  // @@protoc_insertion_point(field_release:substrait.AggregateRel.common)
  
  ::substrait::RelCommon* temp = common_;
  common_ = nullptr;
  return temp;
}
inline ::substrait::RelCommon* AggregateRel::_internal_mutable_common() {
  
  if (common_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::RelCommon>(GetArenaForAllocation());
    common_ = p;
  }
  return common_;
}
inline ::substrait::RelCommon* AggregateRel::mutable_common() {
  ::substrait::RelCommon* _msg = _internal_mutable_common();
  // @@protoc_insertion_point(field_mutable:substrait.AggregateRel.common)
  return _msg;
}
inline void AggregateRel::set_allocated_common(::substrait::RelCommon* common) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete common_;
  }
  if (common) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::RelCommon>::GetOwningArena(common);
    if (message_arena != submessage_arena) {
      common = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, common, submessage_arena);
    }
    
  } else {
    
  }
  common_ = common;
  // @@protoc_insertion_point(field_set_allocated:substrait.AggregateRel.common)
}

// .substrait.Rel input = 2 [json_name = "input"];
inline bool AggregateRel::_internal_has_input() const {
  return this != internal_default_instance() && input_ != nullptr;
}
inline bool AggregateRel::has_input() const {
  return _internal_has_input();
}
inline void AggregateRel::clear_input() {
  if (GetArenaForAllocation() == nullptr && input_ != nullptr) {
    delete input_;
  }
  input_ = nullptr;
}
inline const ::substrait::Rel& AggregateRel::_internal_input() const {
  const ::substrait::Rel* p = input_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Rel&>(
      ::substrait::_Rel_default_instance_);
}
inline const ::substrait::Rel& AggregateRel::input() const {
  // @@protoc_insertion_point(field_get:substrait.AggregateRel.input)
  return _internal_input();
}
inline void AggregateRel::unsafe_arena_set_allocated_input(
    ::substrait::Rel* input) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(input_);
  }
  input_ = input;
  if (input) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.AggregateRel.input)
}
inline ::substrait::Rel* AggregateRel::release_input() {
  
  ::substrait::Rel* temp = input_;
  input_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Rel* AggregateRel::unsafe_arena_release_input() {
  // @@protoc_insertion_point(field_release:substrait.AggregateRel.input)
  
  ::substrait::Rel* temp = input_;
  input_ = nullptr;
  return temp;
}
inline ::substrait::Rel* AggregateRel::_internal_mutable_input() {
  
  if (input_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Rel>(GetArenaForAllocation());
    input_ = p;
  }
  return input_;
}
inline ::substrait::Rel* AggregateRel::mutable_input() {
  ::substrait::Rel* _msg = _internal_mutable_input();
  // @@protoc_insertion_point(field_mutable:substrait.AggregateRel.input)
  return _msg;
}
inline void AggregateRel::set_allocated_input(::substrait::Rel* input) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete input_;
  }
  if (input) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Rel>::GetOwningArena(input);
    if (message_arena != submessage_arena) {
      input = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, input, submessage_arena);
    }
    
  } else {
    
  }
  input_ = input;
  // @@protoc_insertion_point(field_set_allocated:substrait.AggregateRel.input)
}

// repeated .substrait.AggregateRel.Grouping groupings = 3 [json_name = "groupings"];
inline int AggregateRel::_internal_groupings_size() const {
  return groupings_.size();
}
inline int AggregateRel::groupings_size() const {
  return _internal_groupings_size();
}
inline void AggregateRel::clear_groupings() {
  groupings_.Clear();
}
inline ::substrait::AggregateRel_Grouping* AggregateRel::mutable_groupings(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.AggregateRel.groupings)
  return groupings_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::AggregateRel_Grouping >*
AggregateRel::mutable_groupings() {
  // @@protoc_insertion_point(field_mutable_list:substrait.AggregateRel.groupings)
  return &groupings_;
}
inline const ::substrait::AggregateRel_Grouping& AggregateRel::_internal_groupings(int index) const {
  return groupings_.Get(index);
}
inline const ::substrait::AggregateRel_Grouping& AggregateRel::groupings(int index) const {
  // @@protoc_insertion_point(field_get:substrait.AggregateRel.groupings)
  return _internal_groupings(index);
}
inline ::substrait::AggregateRel_Grouping* AggregateRel::_internal_add_groupings() {
  return groupings_.Add();
}
inline ::substrait::AggregateRel_Grouping* AggregateRel::add_groupings() {
  ::substrait::AggregateRel_Grouping* _add = _internal_add_groupings();
  // @@protoc_insertion_point(field_add:substrait.AggregateRel.groupings)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::AggregateRel_Grouping >&
AggregateRel::groupings() const {
  // @@protoc_insertion_point(field_list:substrait.AggregateRel.groupings)
  return groupings_;
}

// repeated .substrait.AggregateRel.Measure measures = 4 [json_name = "measures"];
inline int AggregateRel::_internal_measures_size() const {
  return measures_.size();
}
inline int AggregateRel::measures_size() const {
  return _internal_measures_size();
}
inline void AggregateRel::clear_measures() {
  measures_.Clear();
}
inline ::substrait::AggregateRel_Measure* AggregateRel::mutable_measures(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.AggregateRel.measures)
  return measures_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::AggregateRel_Measure >*
AggregateRel::mutable_measures() {
  // @@protoc_insertion_point(field_mutable_list:substrait.AggregateRel.measures)
  return &measures_;
}
inline const ::substrait::AggregateRel_Measure& AggregateRel::_internal_measures(int index) const {
  return measures_.Get(index);
}
inline const ::substrait::AggregateRel_Measure& AggregateRel::measures(int index) const {
  // @@protoc_insertion_point(field_get:substrait.AggregateRel.measures)
  return _internal_measures(index);
}
inline ::substrait::AggregateRel_Measure* AggregateRel::_internal_add_measures() {
  return measures_.Add();
}
inline ::substrait::AggregateRel_Measure* AggregateRel::add_measures() {
  ::substrait::AggregateRel_Measure* _add = _internal_add_measures();
  // @@protoc_insertion_point(field_add:substrait.AggregateRel.measures)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::AggregateRel_Measure >&
AggregateRel::measures() const {
  // @@protoc_insertion_point(field_list:substrait.AggregateRel.measures)
  return measures_;
}

// .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
inline bool AggregateRel::_internal_has_advanced_extension() const {
  return this != internal_default_instance() && advanced_extension_ != nullptr;
}
inline bool AggregateRel::has_advanced_extension() const {
  return _internal_has_advanced_extension();
}
inline const ::substrait::extensions::AdvancedExtension& AggregateRel::_internal_advanced_extension() const {
  const ::substrait::extensions::AdvancedExtension* p = advanced_extension_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::extensions::AdvancedExtension&>(
      ::substrait::extensions::_AdvancedExtension_default_instance_);
}
inline const ::substrait::extensions::AdvancedExtension& AggregateRel::advanced_extension() const {
  // @@protoc_insertion_point(field_get:substrait.AggregateRel.advanced_extension)
  return _internal_advanced_extension();
}
inline void AggregateRel::unsafe_arena_set_allocated_advanced_extension(
    ::substrait::extensions::AdvancedExtension* advanced_extension) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  advanced_extension_ = advanced_extension;
  if (advanced_extension) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.AggregateRel.advanced_extension)
}
inline ::substrait::extensions::AdvancedExtension* AggregateRel::release_advanced_extension() {
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* AggregateRel::unsafe_arena_release_advanced_extension() {
  // @@protoc_insertion_point(field_release:substrait.AggregateRel.advanced_extension)
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* AggregateRel::_internal_mutable_advanced_extension() {
  
  if (advanced_extension_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::extensions::AdvancedExtension>(GetArenaForAllocation());
    advanced_extension_ = p;
  }
  return advanced_extension_;
}
inline ::substrait::extensions::AdvancedExtension* AggregateRel::mutable_advanced_extension() {
  ::substrait::extensions::AdvancedExtension* _msg = _internal_mutable_advanced_extension();
  // @@protoc_insertion_point(field_mutable:substrait.AggregateRel.advanced_extension)
  return _msg;
}
inline void AggregateRel::set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  if (advanced_extension) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension));
    if (message_arena != submessage_arena) {
      advanced_extension = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, advanced_extension, submessage_arena);
    }
    
  } else {
    
  }
  advanced_extension_ = advanced_extension;
  // @@protoc_insertion_point(field_set_allocated:substrait.AggregateRel.advanced_extension)
}

// -------------------------------------------------------------------

// SortRel

// .substrait.RelCommon common = 1 [json_name = "common"];
inline bool SortRel::_internal_has_common() const {
  return this != internal_default_instance() && common_ != nullptr;
}
inline bool SortRel::has_common() const {
  return _internal_has_common();
}
inline void SortRel::clear_common() {
  if (GetArenaForAllocation() == nullptr && common_ != nullptr) {
    delete common_;
  }
  common_ = nullptr;
}
inline const ::substrait::RelCommon& SortRel::_internal_common() const {
  const ::substrait::RelCommon* p = common_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::RelCommon&>(
      ::substrait::_RelCommon_default_instance_);
}
inline const ::substrait::RelCommon& SortRel::common() const {
  // @@protoc_insertion_point(field_get:substrait.SortRel.common)
  return _internal_common();
}
inline void SortRel::unsafe_arena_set_allocated_common(
    ::substrait::RelCommon* common) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(common_);
  }
  common_ = common;
  if (common) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.SortRel.common)
}
inline ::substrait::RelCommon* SortRel::release_common() {
  
  ::substrait::RelCommon* temp = common_;
  common_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::RelCommon* SortRel::unsafe_arena_release_common() {
  // @@protoc_insertion_point(field_release:substrait.SortRel.common)
  
  ::substrait::RelCommon* temp = common_;
  common_ = nullptr;
  return temp;
}
inline ::substrait::RelCommon* SortRel::_internal_mutable_common() {
  
  if (common_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::RelCommon>(GetArenaForAllocation());
    common_ = p;
  }
  return common_;
}
inline ::substrait::RelCommon* SortRel::mutable_common() {
  ::substrait::RelCommon* _msg = _internal_mutable_common();
  // @@protoc_insertion_point(field_mutable:substrait.SortRel.common)
  return _msg;
}
inline void SortRel::set_allocated_common(::substrait::RelCommon* common) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete common_;
  }
  if (common) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::RelCommon>::GetOwningArena(common);
    if (message_arena != submessage_arena) {
      common = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, common, submessage_arena);
    }
    
  } else {
    
  }
  common_ = common;
  // @@protoc_insertion_point(field_set_allocated:substrait.SortRel.common)
}

// .substrait.Rel input = 2 [json_name = "input"];
inline bool SortRel::_internal_has_input() const {
  return this != internal_default_instance() && input_ != nullptr;
}
inline bool SortRel::has_input() const {
  return _internal_has_input();
}
inline void SortRel::clear_input() {
  if (GetArenaForAllocation() == nullptr && input_ != nullptr) {
    delete input_;
  }
  input_ = nullptr;
}
inline const ::substrait::Rel& SortRel::_internal_input() const {
  const ::substrait::Rel* p = input_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Rel&>(
      ::substrait::_Rel_default_instance_);
}
inline const ::substrait::Rel& SortRel::input() const {
  // @@protoc_insertion_point(field_get:substrait.SortRel.input)
  return _internal_input();
}
inline void SortRel::unsafe_arena_set_allocated_input(
    ::substrait::Rel* input) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(input_);
  }
  input_ = input;
  if (input) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.SortRel.input)
}
inline ::substrait::Rel* SortRel::release_input() {
  
  ::substrait::Rel* temp = input_;
  input_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Rel* SortRel::unsafe_arena_release_input() {
  // @@protoc_insertion_point(field_release:substrait.SortRel.input)
  
  ::substrait::Rel* temp = input_;
  input_ = nullptr;
  return temp;
}
inline ::substrait::Rel* SortRel::_internal_mutable_input() {
  
  if (input_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Rel>(GetArenaForAllocation());
    input_ = p;
  }
  return input_;
}
inline ::substrait::Rel* SortRel::mutable_input() {
  ::substrait::Rel* _msg = _internal_mutable_input();
  // @@protoc_insertion_point(field_mutable:substrait.SortRel.input)
  return _msg;
}
inline void SortRel::set_allocated_input(::substrait::Rel* input) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete input_;
  }
  if (input) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Rel>::GetOwningArena(input);
    if (message_arena != submessage_arena) {
      input = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, input, submessage_arena);
    }
    
  } else {
    
  }
  input_ = input;
  // @@protoc_insertion_point(field_set_allocated:substrait.SortRel.input)
}

// repeated .substrait.SortField sorts = 3 [json_name = "sorts"];
inline int SortRel::_internal_sorts_size() const {
  return sorts_.size();
}
inline int SortRel::sorts_size() const {
  return _internal_sorts_size();
}
inline void SortRel::clear_sorts() {
  sorts_.Clear();
}
inline ::substrait::SortField* SortRel::mutable_sorts(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.SortRel.sorts)
  return sorts_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::SortField >*
SortRel::mutable_sorts() {
  // @@protoc_insertion_point(field_mutable_list:substrait.SortRel.sorts)
  return &sorts_;
}
inline const ::substrait::SortField& SortRel::_internal_sorts(int index) const {
  return sorts_.Get(index);
}
inline const ::substrait::SortField& SortRel::sorts(int index) const {
  // @@protoc_insertion_point(field_get:substrait.SortRel.sorts)
  return _internal_sorts(index);
}
inline ::substrait::SortField* SortRel::_internal_add_sorts() {
  return sorts_.Add();
}
inline ::substrait::SortField* SortRel::add_sorts() {
  ::substrait::SortField* _add = _internal_add_sorts();
  // @@protoc_insertion_point(field_add:substrait.SortRel.sorts)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::SortField >&
SortRel::sorts() const {
  // @@protoc_insertion_point(field_list:substrait.SortRel.sorts)
  return sorts_;
}

// .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
inline bool SortRel::_internal_has_advanced_extension() const {
  return this != internal_default_instance() && advanced_extension_ != nullptr;
}
inline bool SortRel::has_advanced_extension() const {
  return _internal_has_advanced_extension();
}
inline const ::substrait::extensions::AdvancedExtension& SortRel::_internal_advanced_extension() const {
  const ::substrait::extensions::AdvancedExtension* p = advanced_extension_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::extensions::AdvancedExtension&>(
      ::substrait::extensions::_AdvancedExtension_default_instance_);
}
inline const ::substrait::extensions::AdvancedExtension& SortRel::advanced_extension() const {
  // @@protoc_insertion_point(field_get:substrait.SortRel.advanced_extension)
  return _internal_advanced_extension();
}
inline void SortRel::unsafe_arena_set_allocated_advanced_extension(
    ::substrait::extensions::AdvancedExtension* advanced_extension) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  advanced_extension_ = advanced_extension;
  if (advanced_extension) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.SortRel.advanced_extension)
}
inline ::substrait::extensions::AdvancedExtension* SortRel::release_advanced_extension() {
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* SortRel::unsafe_arena_release_advanced_extension() {
  // @@protoc_insertion_point(field_release:substrait.SortRel.advanced_extension)
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* SortRel::_internal_mutable_advanced_extension() {
  
  if (advanced_extension_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::extensions::AdvancedExtension>(GetArenaForAllocation());
    advanced_extension_ = p;
  }
  return advanced_extension_;
}
inline ::substrait::extensions::AdvancedExtension* SortRel::mutable_advanced_extension() {
  ::substrait::extensions::AdvancedExtension* _msg = _internal_mutable_advanced_extension();
  // @@protoc_insertion_point(field_mutable:substrait.SortRel.advanced_extension)
  return _msg;
}
inline void SortRel::set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  if (advanced_extension) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension));
    if (message_arena != submessage_arena) {
      advanced_extension = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, advanced_extension, submessage_arena);
    }
    
  } else {
    
  }
  advanced_extension_ = advanced_extension;
  // @@protoc_insertion_point(field_set_allocated:substrait.SortRel.advanced_extension)
}

// -------------------------------------------------------------------

// FilterRel

// .substrait.RelCommon common = 1 [json_name = "common"];
inline bool FilterRel::_internal_has_common() const {
  return this != internal_default_instance() && common_ != nullptr;
}
inline bool FilterRel::has_common() const {
  return _internal_has_common();
}
inline void FilterRel::clear_common() {
  if (GetArenaForAllocation() == nullptr && common_ != nullptr) {
    delete common_;
  }
  common_ = nullptr;
}
inline const ::substrait::RelCommon& FilterRel::_internal_common() const {
  const ::substrait::RelCommon* p = common_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::RelCommon&>(
      ::substrait::_RelCommon_default_instance_);
}
inline const ::substrait::RelCommon& FilterRel::common() const {
  // @@protoc_insertion_point(field_get:substrait.FilterRel.common)
  return _internal_common();
}
inline void FilterRel::unsafe_arena_set_allocated_common(
    ::substrait::RelCommon* common) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(common_);
  }
  common_ = common;
  if (common) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.FilterRel.common)
}
inline ::substrait::RelCommon* FilterRel::release_common() {
  
  ::substrait::RelCommon* temp = common_;
  common_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::RelCommon* FilterRel::unsafe_arena_release_common() {
  // @@protoc_insertion_point(field_release:substrait.FilterRel.common)
  
  ::substrait::RelCommon* temp = common_;
  common_ = nullptr;
  return temp;
}
inline ::substrait::RelCommon* FilterRel::_internal_mutable_common() {
  
  if (common_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::RelCommon>(GetArenaForAllocation());
    common_ = p;
  }
  return common_;
}
inline ::substrait::RelCommon* FilterRel::mutable_common() {
  ::substrait::RelCommon* _msg = _internal_mutable_common();
  // @@protoc_insertion_point(field_mutable:substrait.FilterRel.common)
  return _msg;
}
inline void FilterRel::set_allocated_common(::substrait::RelCommon* common) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete common_;
  }
  if (common) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::RelCommon>::GetOwningArena(common);
    if (message_arena != submessage_arena) {
      common = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, common, submessage_arena);
    }
    
  } else {
    
  }
  common_ = common;
  // @@protoc_insertion_point(field_set_allocated:substrait.FilterRel.common)
}

// .substrait.Rel input = 2 [json_name = "input"];
inline bool FilterRel::_internal_has_input() const {
  return this != internal_default_instance() && input_ != nullptr;
}
inline bool FilterRel::has_input() const {
  return _internal_has_input();
}
inline void FilterRel::clear_input() {
  if (GetArenaForAllocation() == nullptr && input_ != nullptr) {
    delete input_;
  }
  input_ = nullptr;
}
inline const ::substrait::Rel& FilterRel::_internal_input() const {
  const ::substrait::Rel* p = input_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Rel&>(
      ::substrait::_Rel_default_instance_);
}
inline const ::substrait::Rel& FilterRel::input() const {
  // @@protoc_insertion_point(field_get:substrait.FilterRel.input)
  return _internal_input();
}
inline void FilterRel::unsafe_arena_set_allocated_input(
    ::substrait::Rel* input) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(input_);
  }
  input_ = input;
  if (input) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.FilterRel.input)
}
inline ::substrait::Rel* FilterRel::release_input() {
  
  ::substrait::Rel* temp = input_;
  input_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Rel* FilterRel::unsafe_arena_release_input() {
  // @@protoc_insertion_point(field_release:substrait.FilterRel.input)
  
  ::substrait::Rel* temp = input_;
  input_ = nullptr;
  return temp;
}
inline ::substrait::Rel* FilterRel::_internal_mutable_input() {
  
  if (input_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Rel>(GetArenaForAllocation());
    input_ = p;
  }
  return input_;
}
inline ::substrait::Rel* FilterRel::mutable_input() {
  ::substrait::Rel* _msg = _internal_mutable_input();
  // @@protoc_insertion_point(field_mutable:substrait.FilterRel.input)
  return _msg;
}
inline void FilterRel::set_allocated_input(::substrait::Rel* input) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete input_;
  }
  if (input) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Rel>::GetOwningArena(input);
    if (message_arena != submessage_arena) {
      input = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, input, submessage_arena);
    }
    
  } else {
    
  }
  input_ = input;
  // @@protoc_insertion_point(field_set_allocated:substrait.FilterRel.input)
}

// .substrait.Expression condition = 3 [json_name = "condition"];
inline bool FilterRel::_internal_has_condition() const {
  return this != internal_default_instance() && condition_ != nullptr;
}
inline bool FilterRel::has_condition() const {
  return _internal_has_condition();
}
inline void FilterRel::clear_condition() {
  if (GetArenaForAllocation() == nullptr && condition_ != nullptr) {
    delete condition_;
  }
  condition_ = nullptr;
}
inline const ::substrait::Expression& FilterRel::_internal_condition() const {
  const ::substrait::Expression* p = condition_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression&>(
      ::substrait::_Expression_default_instance_);
}
inline const ::substrait::Expression& FilterRel::condition() const {
  // @@protoc_insertion_point(field_get:substrait.FilterRel.condition)
  return _internal_condition();
}
inline void FilterRel::unsafe_arena_set_allocated_condition(
    ::substrait::Expression* condition) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(condition_);
  }
  condition_ = condition;
  if (condition) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.FilterRel.condition)
}
inline ::substrait::Expression* FilterRel::release_condition() {
  
  ::substrait::Expression* temp = condition_;
  condition_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression* FilterRel::unsafe_arena_release_condition() {
  // @@protoc_insertion_point(field_release:substrait.FilterRel.condition)
  
  ::substrait::Expression* temp = condition_;
  condition_ = nullptr;
  return temp;
}
inline ::substrait::Expression* FilterRel::_internal_mutable_condition() {
  
  if (condition_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression>(GetArenaForAllocation());
    condition_ = p;
  }
  return condition_;
}
inline ::substrait::Expression* FilterRel::mutable_condition() {
  ::substrait::Expression* _msg = _internal_mutable_condition();
  // @@protoc_insertion_point(field_mutable:substrait.FilterRel.condition)
  return _msg;
}
inline void FilterRel::set_allocated_condition(::substrait::Expression* condition) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete condition_;
  }
  if (condition) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression>::GetOwningArena(condition);
    if (message_arena != submessage_arena) {
      condition = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, condition, submessage_arena);
    }
    
  } else {
    
  }
  condition_ = condition;
  // @@protoc_insertion_point(field_set_allocated:substrait.FilterRel.condition)
}

// .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
inline bool FilterRel::_internal_has_advanced_extension() const {
  return this != internal_default_instance() && advanced_extension_ != nullptr;
}
inline bool FilterRel::has_advanced_extension() const {
  return _internal_has_advanced_extension();
}
inline const ::substrait::extensions::AdvancedExtension& FilterRel::_internal_advanced_extension() const {
  const ::substrait::extensions::AdvancedExtension* p = advanced_extension_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::extensions::AdvancedExtension&>(
      ::substrait::extensions::_AdvancedExtension_default_instance_);
}
inline const ::substrait::extensions::AdvancedExtension& FilterRel::advanced_extension() const {
  // @@protoc_insertion_point(field_get:substrait.FilterRel.advanced_extension)
  return _internal_advanced_extension();
}
inline void FilterRel::unsafe_arena_set_allocated_advanced_extension(
    ::substrait::extensions::AdvancedExtension* advanced_extension) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  advanced_extension_ = advanced_extension;
  if (advanced_extension) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.FilterRel.advanced_extension)
}
inline ::substrait::extensions::AdvancedExtension* FilterRel::release_advanced_extension() {
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* FilterRel::unsafe_arena_release_advanced_extension() {
  // @@protoc_insertion_point(field_release:substrait.FilterRel.advanced_extension)
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* FilterRel::_internal_mutable_advanced_extension() {
  
  if (advanced_extension_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::extensions::AdvancedExtension>(GetArenaForAllocation());
    advanced_extension_ = p;
  }
  return advanced_extension_;
}
inline ::substrait::extensions::AdvancedExtension* FilterRel::mutable_advanced_extension() {
  ::substrait::extensions::AdvancedExtension* _msg = _internal_mutable_advanced_extension();
  // @@protoc_insertion_point(field_mutable:substrait.FilterRel.advanced_extension)
  return _msg;
}
inline void FilterRel::set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  if (advanced_extension) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension));
    if (message_arena != submessage_arena) {
      advanced_extension = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, advanced_extension, submessage_arena);
    }
    
  } else {
    
  }
  advanced_extension_ = advanced_extension;
  // @@protoc_insertion_point(field_set_allocated:substrait.FilterRel.advanced_extension)
}

// -------------------------------------------------------------------

// SetRel

// .substrait.RelCommon common = 1 [json_name = "common"];
inline bool SetRel::_internal_has_common() const {
  return this != internal_default_instance() && common_ != nullptr;
}
inline bool SetRel::has_common() const {
  return _internal_has_common();
}
inline void SetRel::clear_common() {
  if (GetArenaForAllocation() == nullptr && common_ != nullptr) {
    delete common_;
  }
  common_ = nullptr;
}
inline const ::substrait::RelCommon& SetRel::_internal_common() const {
  const ::substrait::RelCommon* p = common_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::RelCommon&>(
      ::substrait::_RelCommon_default_instance_);
}
inline const ::substrait::RelCommon& SetRel::common() const {
  // @@protoc_insertion_point(field_get:substrait.SetRel.common)
  return _internal_common();
}
inline void SetRel::unsafe_arena_set_allocated_common(
    ::substrait::RelCommon* common) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(common_);
  }
  common_ = common;
  if (common) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.SetRel.common)
}
inline ::substrait::RelCommon* SetRel::release_common() {
  
  ::substrait::RelCommon* temp = common_;
  common_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::RelCommon* SetRel::unsafe_arena_release_common() {
  // @@protoc_insertion_point(field_release:substrait.SetRel.common)
  
  ::substrait::RelCommon* temp = common_;
  common_ = nullptr;
  return temp;
}
inline ::substrait::RelCommon* SetRel::_internal_mutable_common() {
  
  if (common_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::RelCommon>(GetArenaForAllocation());
    common_ = p;
  }
  return common_;
}
inline ::substrait::RelCommon* SetRel::mutable_common() {
  ::substrait::RelCommon* _msg = _internal_mutable_common();
  // @@protoc_insertion_point(field_mutable:substrait.SetRel.common)
  return _msg;
}
inline void SetRel::set_allocated_common(::substrait::RelCommon* common) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete common_;
  }
  if (common) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::RelCommon>::GetOwningArena(common);
    if (message_arena != submessage_arena) {
      common = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, common, submessage_arena);
    }
    
  } else {
    
  }
  common_ = common;
  // @@protoc_insertion_point(field_set_allocated:substrait.SetRel.common)
}

// repeated .substrait.Rel inputs = 2 [json_name = "inputs"];
inline int SetRel::_internal_inputs_size() const {
  return inputs_.size();
}
inline int SetRel::inputs_size() const {
  return _internal_inputs_size();
}
inline void SetRel::clear_inputs() {
  inputs_.Clear();
}
inline ::substrait::Rel* SetRel::mutable_inputs(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.SetRel.inputs)
  return inputs_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Rel >*
SetRel::mutable_inputs() {
  // @@protoc_insertion_point(field_mutable_list:substrait.SetRel.inputs)
  return &inputs_;
}
inline const ::substrait::Rel& SetRel::_internal_inputs(int index) const {
  return inputs_.Get(index);
}
inline const ::substrait::Rel& SetRel::inputs(int index) const {
  // @@protoc_insertion_point(field_get:substrait.SetRel.inputs)
  return _internal_inputs(index);
}
inline ::substrait::Rel* SetRel::_internal_add_inputs() {
  return inputs_.Add();
}
inline ::substrait::Rel* SetRel::add_inputs() {
  ::substrait::Rel* _add = _internal_add_inputs();
  // @@protoc_insertion_point(field_add:substrait.SetRel.inputs)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Rel >&
SetRel::inputs() const {
  // @@protoc_insertion_point(field_list:substrait.SetRel.inputs)
  return inputs_;
}

// .substrait.SetRel.SetOp op = 3 [json_name = "op"];
inline void SetRel::clear_op() {
  op_ = 0;
}
inline ::substrait::SetRel_SetOp SetRel::_internal_op() const {
  return static_cast< ::substrait::SetRel_SetOp >(op_);
}
inline ::substrait::SetRel_SetOp SetRel::op() const {
  // @@protoc_insertion_point(field_get:substrait.SetRel.op)
  return _internal_op();
}
inline void SetRel::_internal_set_op(::substrait::SetRel_SetOp value) {
  
  op_ = value;
}
inline void SetRel::set_op(::substrait::SetRel_SetOp value) {
  _internal_set_op(value);
  // @@protoc_insertion_point(field_set:substrait.SetRel.op)
}

// .substrait.extensions.AdvancedExtension advanced_extension = 10 [json_name = "advancedExtension"];
inline bool SetRel::_internal_has_advanced_extension() const {
  return this != internal_default_instance() && advanced_extension_ != nullptr;
}
inline bool SetRel::has_advanced_extension() const {
  return _internal_has_advanced_extension();
}
inline const ::substrait::extensions::AdvancedExtension& SetRel::_internal_advanced_extension() const {
  const ::substrait::extensions::AdvancedExtension* p = advanced_extension_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::extensions::AdvancedExtension&>(
      ::substrait::extensions::_AdvancedExtension_default_instance_);
}
inline const ::substrait::extensions::AdvancedExtension& SetRel::advanced_extension() const {
  // @@protoc_insertion_point(field_get:substrait.SetRel.advanced_extension)
  return _internal_advanced_extension();
}
inline void SetRel::unsafe_arena_set_allocated_advanced_extension(
    ::substrait::extensions::AdvancedExtension* advanced_extension) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  advanced_extension_ = advanced_extension;
  if (advanced_extension) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.SetRel.advanced_extension)
}
inline ::substrait::extensions::AdvancedExtension* SetRel::release_advanced_extension() {
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* SetRel::unsafe_arena_release_advanced_extension() {
  // @@protoc_insertion_point(field_release:substrait.SetRel.advanced_extension)
  
  ::substrait::extensions::AdvancedExtension* temp = advanced_extension_;
  advanced_extension_ = nullptr;
  return temp;
}
inline ::substrait::extensions::AdvancedExtension* SetRel::_internal_mutable_advanced_extension() {
  
  if (advanced_extension_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::extensions::AdvancedExtension>(GetArenaForAllocation());
    advanced_extension_ = p;
  }
  return advanced_extension_;
}
inline ::substrait::extensions::AdvancedExtension* SetRel::mutable_advanced_extension() {
  ::substrait::extensions::AdvancedExtension* _msg = _internal_mutable_advanced_extension();
  // @@protoc_insertion_point(field_mutable:substrait.SetRel.advanced_extension)
  return _msg;
}
inline void SetRel::set_allocated_advanced_extension(::substrait::extensions::AdvancedExtension* advanced_extension) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension_);
  }
  if (advanced_extension) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(advanced_extension));
    if (message_arena != submessage_arena) {
      advanced_extension = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, advanced_extension, submessage_arena);
    }
    
  } else {
    
  }
  advanced_extension_ = advanced_extension;
  // @@protoc_insertion_point(field_set_allocated:substrait.SetRel.advanced_extension)
}

// -------------------------------------------------------------------

// ExtensionSingleRel

// .substrait.RelCommon common = 1 [json_name = "common"];
inline bool ExtensionSingleRel::_internal_has_common() const {
  return this != internal_default_instance() && common_ != nullptr;
}
inline bool ExtensionSingleRel::has_common() const {
  return _internal_has_common();
}
inline void ExtensionSingleRel::clear_common() {
  if (GetArenaForAllocation() == nullptr && common_ != nullptr) {
    delete common_;
  }
  common_ = nullptr;
}
inline const ::substrait::RelCommon& ExtensionSingleRel::_internal_common() const {
  const ::substrait::RelCommon* p = common_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::RelCommon&>(
      ::substrait::_RelCommon_default_instance_);
}
inline const ::substrait::RelCommon& ExtensionSingleRel::common() const {
  // @@protoc_insertion_point(field_get:substrait.ExtensionSingleRel.common)
  return _internal_common();
}
inline void ExtensionSingleRel::unsafe_arena_set_allocated_common(
    ::substrait::RelCommon* common) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(common_);
  }
  common_ = common;
  if (common) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.ExtensionSingleRel.common)
}
inline ::substrait::RelCommon* ExtensionSingleRel::release_common() {
  
  ::substrait::RelCommon* temp = common_;
  common_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::RelCommon* ExtensionSingleRel::unsafe_arena_release_common() {
  // @@protoc_insertion_point(field_release:substrait.ExtensionSingleRel.common)
  
  ::substrait::RelCommon* temp = common_;
  common_ = nullptr;
  return temp;
}
inline ::substrait::RelCommon* ExtensionSingleRel::_internal_mutable_common() {
  
  if (common_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::RelCommon>(GetArenaForAllocation());
    common_ = p;
  }
  return common_;
}
inline ::substrait::RelCommon* ExtensionSingleRel::mutable_common() {
  ::substrait::RelCommon* _msg = _internal_mutable_common();
  // @@protoc_insertion_point(field_mutable:substrait.ExtensionSingleRel.common)
  return _msg;
}
inline void ExtensionSingleRel::set_allocated_common(::substrait::RelCommon* common) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete common_;
  }
  if (common) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::RelCommon>::GetOwningArena(common);
    if (message_arena != submessage_arena) {
      common = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, common, submessage_arena);
    }
    
  } else {
    
  }
  common_ = common;
  // @@protoc_insertion_point(field_set_allocated:substrait.ExtensionSingleRel.common)
}

// .substrait.Rel input = 2 [json_name = "input"];
inline bool ExtensionSingleRel::_internal_has_input() const {
  return this != internal_default_instance() && input_ != nullptr;
}
inline bool ExtensionSingleRel::has_input() const {
  return _internal_has_input();
}
inline void ExtensionSingleRel::clear_input() {
  if (GetArenaForAllocation() == nullptr && input_ != nullptr) {
    delete input_;
  }
  input_ = nullptr;
}
inline const ::substrait::Rel& ExtensionSingleRel::_internal_input() const {
  const ::substrait::Rel* p = input_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Rel&>(
      ::substrait::_Rel_default_instance_);
}
inline const ::substrait::Rel& ExtensionSingleRel::input() const {
  // @@protoc_insertion_point(field_get:substrait.ExtensionSingleRel.input)
  return _internal_input();
}
inline void ExtensionSingleRel::unsafe_arena_set_allocated_input(
    ::substrait::Rel* input) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(input_);
  }
  input_ = input;
  if (input) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.ExtensionSingleRel.input)
}
inline ::substrait::Rel* ExtensionSingleRel::release_input() {
  
  ::substrait::Rel* temp = input_;
  input_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Rel* ExtensionSingleRel::unsafe_arena_release_input() {
  // @@protoc_insertion_point(field_release:substrait.ExtensionSingleRel.input)
  
  ::substrait::Rel* temp = input_;
  input_ = nullptr;
  return temp;
}
inline ::substrait::Rel* ExtensionSingleRel::_internal_mutable_input() {
  
  if (input_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Rel>(GetArenaForAllocation());
    input_ = p;
  }
  return input_;
}
inline ::substrait::Rel* ExtensionSingleRel::mutable_input() {
  ::substrait::Rel* _msg = _internal_mutable_input();
  // @@protoc_insertion_point(field_mutable:substrait.ExtensionSingleRel.input)
  return _msg;
}
inline void ExtensionSingleRel::set_allocated_input(::substrait::Rel* input) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete input_;
  }
  if (input) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Rel>::GetOwningArena(input);
    if (message_arena != submessage_arena) {
      input = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, input, submessage_arena);
    }
    
  } else {
    
  }
  input_ = input;
  // @@protoc_insertion_point(field_set_allocated:substrait.ExtensionSingleRel.input)
}

// .google.protobuf.Any detail = 3 [json_name = "detail"];
inline bool ExtensionSingleRel::_internal_has_detail() const {
  return this != internal_default_instance() && detail_ != nullptr;
}
inline bool ExtensionSingleRel::has_detail() const {
  return _internal_has_detail();
}
inline const ::PROTOBUF_NAMESPACE_ID::Any& ExtensionSingleRel::_internal_detail() const {
  const ::PROTOBUF_NAMESPACE_ID::Any* p = detail_;
  return p != nullptr ? *p : reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Any&>(
      ::PROTOBUF_NAMESPACE_ID::_Any_default_instance_);
}
inline const ::PROTOBUF_NAMESPACE_ID::Any& ExtensionSingleRel::detail() const {
  // @@protoc_insertion_point(field_get:substrait.ExtensionSingleRel.detail)
  return _internal_detail();
}
inline void ExtensionSingleRel::unsafe_arena_set_allocated_detail(
    ::PROTOBUF_NAMESPACE_ID::Any* detail) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(detail_);
  }
  detail_ = detail;
  if (detail) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.ExtensionSingleRel.detail)
}
inline ::PROTOBUF_NAMESPACE_ID::Any* ExtensionSingleRel::release_detail() {
  
  ::PROTOBUF_NAMESPACE_ID::Any* temp = detail_;
  detail_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::PROTOBUF_NAMESPACE_ID::Any* ExtensionSingleRel::unsafe_arena_release_detail() {
  // @@protoc_insertion_point(field_release:substrait.ExtensionSingleRel.detail)
  
  ::PROTOBUF_NAMESPACE_ID::Any* temp = detail_;
  detail_ = nullptr;
  return temp;
}
inline ::PROTOBUF_NAMESPACE_ID::Any* ExtensionSingleRel::_internal_mutable_detail() {
  
  if (detail_ == nullptr) {
    auto* p = CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Any>(GetArenaForAllocation());
    detail_ = p;
  }
  return detail_;
}
inline ::PROTOBUF_NAMESPACE_ID::Any* ExtensionSingleRel::mutable_detail() {
  ::PROTOBUF_NAMESPACE_ID::Any* _msg = _internal_mutable_detail();
  // @@protoc_insertion_point(field_mutable:substrait.ExtensionSingleRel.detail)
  return _msg;
}
inline void ExtensionSingleRel::set_allocated_detail(::PROTOBUF_NAMESPACE_ID::Any* detail) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(detail_);
  }
  if (detail) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(detail));
    if (message_arena != submessage_arena) {
      detail = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, detail, submessage_arena);
    }
    
  } else {
    
  }
  detail_ = detail;
  // @@protoc_insertion_point(field_set_allocated:substrait.ExtensionSingleRel.detail)
}

// -------------------------------------------------------------------

// ExtensionLeafRel

// .substrait.RelCommon common = 1 [json_name = "common"];
inline bool ExtensionLeafRel::_internal_has_common() const {
  return this != internal_default_instance() && common_ != nullptr;
}
inline bool ExtensionLeafRel::has_common() const {
  return _internal_has_common();
}
inline void ExtensionLeafRel::clear_common() {
  if (GetArenaForAllocation() == nullptr && common_ != nullptr) {
    delete common_;
  }
  common_ = nullptr;
}
inline const ::substrait::RelCommon& ExtensionLeafRel::_internal_common() const {
  const ::substrait::RelCommon* p = common_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::RelCommon&>(
      ::substrait::_RelCommon_default_instance_);
}
inline const ::substrait::RelCommon& ExtensionLeafRel::common() const {
  // @@protoc_insertion_point(field_get:substrait.ExtensionLeafRel.common)
  return _internal_common();
}
inline void ExtensionLeafRel::unsafe_arena_set_allocated_common(
    ::substrait::RelCommon* common) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(common_);
  }
  common_ = common;
  if (common) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.ExtensionLeafRel.common)
}
inline ::substrait::RelCommon* ExtensionLeafRel::release_common() {
  
  ::substrait::RelCommon* temp = common_;
  common_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::RelCommon* ExtensionLeafRel::unsafe_arena_release_common() {
  // @@protoc_insertion_point(field_release:substrait.ExtensionLeafRel.common)
  
  ::substrait::RelCommon* temp = common_;
  common_ = nullptr;
  return temp;
}
inline ::substrait::RelCommon* ExtensionLeafRel::_internal_mutable_common() {
  
  if (common_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::RelCommon>(GetArenaForAllocation());
    common_ = p;
  }
  return common_;
}
inline ::substrait::RelCommon* ExtensionLeafRel::mutable_common() {
  ::substrait::RelCommon* _msg = _internal_mutable_common();
  // @@protoc_insertion_point(field_mutable:substrait.ExtensionLeafRel.common)
  return _msg;
}
inline void ExtensionLeafRel::set_allocated_common(::substrait::RelCommon* common) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete common_;
  }
  if (common) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::RelCommon>::GetOwningArena(common);
    if (message_arena != submessage_arena) {
      common = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, common, submessage_arena);
    }
    
  } else {
    
  }
  common_ = common;
  // @@protoc_insertion_point(field_set_allocated:substrait.ExtensionLeafRel.common)
}

// .google.protobuf.Any detail = 2 [json_name = "detail"];
inline bool ExtensionLeafRel::_internal_has_detail() const {
  return this != internal_default_instance() && detail_ != nullptr;
}
inline bool ExtensionLeafRel::has_detail() const {
  return _internal_has_detail();
}
inline const ::PROTOBUF_NAMESPACE_ID::Any& ExtensionLeafRel::_internal_detail() const {
  const ::PROTOBUF_NAMESPACE_ID::Any* p = detail_;
  return p != nullptr ? *p : reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Any&>(
      ::PROTOBUF_NAMESPACE_ID::_Any_default_instance_);
}
inline const ::PROTOBUF_NAMESPACE_ID::Any& ExtensionLeafRel::detail() const {
  // @@protoc_insertion_point(field_get:substrait.ExtensionLeafRel.detail)
  return _internal_detail();
}
inline void ExtensionLeafRel::unsafe_arena_set_allocated_detail(
    ::PROTOBUF_NAMESPACE_ID::Any* detail) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(detail_);
  }
  detail_ = detail;
  if (detail) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.ExtensionLeafRel.detail)
}
inline ::PROTOBUF_NAMESPACE_ID::Any* ExtensionLeafRel::release_detail() {
  
  ::PROTOBUF_NAMESPACE_ID::Any* temp = detail_;
  detail_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::PROTOBUF_NAMESPACE_ID::Any* ExtensionLeafRel::unsafe_arena_release_detail() {
  // @@protoc_insertion_point(field_release:substrait.ExtensionLeafRel.detail)
  
  ::PROTOBUF_NAMESPACE_ID::Any* temp = detail_;
  detail_ = nullptr;
  return temp;
}
inline ::PROTOBUF_NAMESPACE_ID::Any* ExtensionLeafRel::_internal_mutable_detail() {
  
  if (detail_ == nullptr) {
    auto* p = CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Any>(GetArenaForAllocation());
    detail_ = p;
  }
  return detail_;
}
inline ::PROTOBUF_NAMESPACE_ID::Any* ExtensionLeafRel::mutable_detail() {
  ::PROTOBUF_NAMESPACE_ID::Any* _msg = _internal_mutable_detail();
  // @@protoc_insertion_point(field_mutable:substrait.ExtensionLeafRel.detail)
  return _msg;
}
inline void ExtensionLeafRel::set_allocated_detail(::PROTOBUF_NAMESPACE_ID::Any* detail) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(detail_);
  }
  if (detail) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(detail));
    if (message_arena != submessage_arena) {
      detail = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, detail, submessage_arena);
    }
    
  } else {
    
  }
  detail_ = detail;
  // @@protoc_insertion_point(field_set_allocated:substrait.ExtensionLeafRel.detail)
}

// -------------------------------------------------------------------

// ExtensionMultiRel

// .substrait.RelCommon common = 1 [json_name = "common"];
inline bool ExtensionMultiRel::_internal_has_common() const {
  return this != internal_default_instance() && common_ != nullptr;
}
inline bool ExtensionMultiRel::has_common() const {
  return _internal_has_common();
}
inline void ExtensionMultiRel::clear_common() {
  if (GetArenaForAllocation() == nullptr && common_ != nullptr) {
    delete common_;
  }
  common_ = nullptr;
}
inline const ::substrait::RelCommon& ExtensionMultiRel::_internal_common() const {
  const ::substrait::RelCommon* p = common_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::RelCommon&>(
      ::substrait::_RelCommon_default_instance_);
}
inline const ::substrait::RelCommon& ExtensionMultiRel::common() const {
  // @@protoc_insertion_point(field_get:substrait.ExtensionMultiRel.common)
  return _internal_common();
}
inline void ExtensionMultiRel::unsafe_arena_set_allocated_common(
    ::substrait::RelCommon* common) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(common_);
  }
  common_ = common;
  if (common) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.ExtensionMultiRel.common)
}
inline ::substrait::RelCommon* ExtensionMultiRel::release_common() {
  
  ::substrait::RelCommon* temp = common_;
  common_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::RelCommon* ExtensionMultiRel::unsafe_arena_release_common() {
  // @@protoc_insertion_point(field_release:substrait.ExtensionMultiRel.common)
  
  ::substrait::RelCommon* temp = common_;
  common_ = nullptr;
  return temp;
}
inline ::substrait::RelCommon* ExtensionMultiRel::_internal_mutable_common() {
  
  if (common_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::RelCommon>(GetArenaForAllocation());
    common_ = p;
  }
  return common_;
}
inline ::substrait::RelCommon* ExtensionMultiRel::mutable_common() {
  ::substrait::RelCommon* _msg = _internal_mutable_common();
  // @@protoc_insertion_point(field_mutable:substrait.ExtensionMultiRel.common)
  return _msg;
}
inline void ExtensionMultiRel::set_allocated_common(::substrait::RelCommon* common) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete common_;
  }
  if (common) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::RelCommon>::GetOwningArena(common);
    if (message_arena != submessage_arena) {
      common = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, common, submessage_arena);
    }
    
  } else {
    
  }
  common_ = common;
  // @@protoc_insertion_point(field_set_allocated:substrait.ExtensionMultiRel.common)
}

// repeated .substrait.Rel inputs = 2 [json_name = "inputs"];
inline int ExtensionMultiRel::_internal_inputs_size() const {
  return inputs_.size();
}
inline int ExtensionMultiRel::inputs_size() const {
  return _internal_inputs_size();
}
inline void ExtensionMultiRel::clear_inputs() {
  inputs_.Clear();
}
inline ::substrait::Rel* ExtensionMultiRel::mutable_inputs(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.ExtensionMultiRel.inputs)
  return inputs_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Rel >*
ExtensionMultiRel::mutable_inputs() {
  // @@protoc_insertion_point(field_mutable_list:substrait.ExtensionMultiRel.inputs)
  return &inputs_;
}
inline const ::substrait::Rel& ExtensionMultiRel::_internal_inputs(int index) const {
  return inputs_.Get(index);
}
inline const ::substrait::Rel& ExtensionMultiRel::inputs(int index) const {
  // @@protoc_insertion_point(field_get:substrait.ExtensionMultiRel.inputs)
  return _internal_inputs(index);
}
inline ::substrait::Rel* ExtensionMultiRel::_internal_add_inputs() {
  return inputs_.Add();
}
inline ::substrait::Rel* ExtensionMultiRel::add_inputs() {
  ::substrait::Rel* _add = _internal_add_inputs();
  // @@protoc_insertion_point(field_add:substrait.ExtensionMultiRel.inputs)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Rel >&
ExtensionMultiRel::inputs() const {
  // @@protoc_insertion_point(field_list:substrait.ExtensionMultiRel.inputs)
  return inputs_;
}

// .google.protobuf.Any detail = 3 [json_name = "detail"];
inline bool ExtensionMultiRel::_internal_has_detail() const {
  return this != internal_default_instance() && detail_ != nullptr;
}
inline bool ExtensionMultiRel::has_detail() const {
  return _internal_has_detail();
}
inline const ::PROTOBUF_NAMESPACE_ID::Any& ExtensionMultiRel::_internal_detail() const {
  const ::PROTOBUF_NAMESPACE_ID::Any* p = detail_;
  return p != nullptr ? *p : reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Any&>(
      ::PROTOBUF_NAMESPACE_ID::_Any_default_instance_);
}
inline const ::PROTOBUF_NAMESPACE_ID::Any& ExtensionMultiRel::detail() const {
  // @@protoc_insertion_point(field_get:substrait.ExtensionMultiRel.detail)
  return _internal_detail();
}
inline void ExtensionMultiRel::unsafe_arena_set_allocated_detail(
    ::PROTOBUF_NAMESPACE_ID::Any* detail) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(detail_);
  }
  detail_ = detail;
  if (detail) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.ExtensionMultiRel.detail)
}
inline ::PROTOBUF_NAMESPACE_ID::Any* ExtensionMultiRel::release_detail() {
  
  ::PROTOBUF_NAMESPACE_ID::Any* temp = detail_;
  detail_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::PROTOBUF_NAMESPACE_ID::Any* ExtensionMultiRel::unsafe_arena_release_detail() {
  // @@protoc_insertion_point(field_release:substrait.ExtensionMultiRel.detail)
  
  ::PROTOBUF_NAMESPACE_ID::Any* temp = detail_;
  detail_ = nullptr;
  return temp;
}
inline ::PROTOBUF_NAMESPACE_ID::Any* ExtensionMultiRel::_internal_mutable_detail() {
  
  if (detail_ == nullptr) {
    auto* p = CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Any>(GetArenaForAllocation());
    detail_ = p;
  }
  return detail_;
}
inline ::PROTOBUF_NAMESPACE_ID::Any* ExtensionMultiRel::mutable_detail() {
  ::PROTOBUF_NAMESPACE_ID::Any* _msg = _internal_mutable_detail();
  // @@protoc_insertion_point(field_mutable:substrait.ExtensionMultiRel.detail)
  return _msg;
}
inline void ExtensionMultiRel::set_allocated_detail(::PROTOBUF_NAMESPACE_ID::Any* detail) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(detail_);
  }
  if (detail) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(detail));
    if (message_arena != submessage_arena) {
      detail = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, detail, submessage_arena);
    }
    
  } else {
    
  }
  detail_ = detail;
  // @@protoc_insertion_point(field_set_allocated:substrait.ExtensionMultiRel.detail)
}

// -------------------------------------------------------------------

// RelRoot

// .substrait.Rel input = 1 [json_name = "input"];
inline bool RelRoot::_internal_has_input() const {
  return this != internal_default_instance() && input_ != nullptr;
}
inline bool RelRoot::has_input() const {
  return _internal_has_input();
}
inline void RelRoot::clear_input() {
  if (GetArenaForAllocation() == nullptr && input_ != nullptr) {
    delete input_;
  }
  input_ = nullptr;
}
inline const ::substrait::Rel& RelRoot::_internal_input() const {
  const ::substrait::Rel* p = input_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Rel&>(
      ::substrait::_Rel_default_instance_);
}
inline const ::substrait::Rel& RelRoot::input() const {
  // @@protoc_insertion_point(field_get:substrait.RelRoot.input)
  return _internal_input();
}
inline void RelRoot::unsafe_arena_set_allocated_input(
    ::substrait::Rel* input) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(input_);
  }
  input_ = input;
  if (input) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.RelRoot.input)
}
inline ::substrait::Rel* RelRoot::release_input() {
  
  ::substrait::Rel* temp = input_;
  input_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Rel* RelRoot::unsafe_arena_release_input() {
  // @@protoc_insertion_point(field_release:substrait.RelRoot.input)
  
  ::substrait::Rel* temp = input_;
  input_ = nullptr;
  return temp;
}
inline ::substrait::Rel* RelRoot::_internal_mutable_input() {
  
  if (input_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Rel>(GetArenaForAllocation());
    input_ = p;
  }
  return input_;
}
inline ::substrait::Rel* RelRoot::mutable_input() {
  ::substrait::Rel* _msg = _internal_mutable_input();
  // @@protoc_insertion_point(field_mutable:substrait.RelRoot.input)
  return _msg;
}
inline void RelRoot::set_allocated_input(::substrait::Rel* input) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete input_;
  }
  if (input) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Rel>::GetOwningArena(input);
    if (message_arena != submessage_arena) {
      input = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, input, submessage_arena);
    }
    
  } else {
    
  }
  input_ = input;
  // @@protoc_insertion_point(field_set_allocated:substrait.RelRoot.input)
}

// repeated string names = 2 [json_name = "names"];
inline int RelRoot::_internal_names_size() const {
  return names_.size();
}
inline int RelRoot::names_size() const {
  return _internal_names_size();
}
inline void RelRoot::clear_names() {
  names_.Clear();
}
inline std::string* RelRoot::add_names() {
  std::string* _s = _internal_add_names();
  // @@protoc_insertion_point(field_add_mutable:substrait.RelRoot.names)
  return _s;
}
inline const std::string& RelRoot::_internal_names(int index) const {
  return names_.Get(index);
}
inline const std::string& RelRoot::names(int index) const {
  // @@protoc_insertion_point(field_get:substrait.RelRoot.names)
  return _internal_names(index);
}
inline std::string* RelRoot::mutable_names(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.RelRoot.names)
  return names_.Mutable(index);
}
inline void RelRoot::set_names(int index, const std::string& value) {
  names_.Mutable(index)->assign(value);
  // @@protoc_insertion_point(field_set:substrait.RelRoot.names)
}
inline void RelRoot::set_names(int index, std::string&& value) {
  names_.Mutable(index)->assign(std::move(value));
  // @@protoc_insertion_point(field_set:substrait.RelRoot.names)
}
inline void RelRoot::set_names(int index, const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  names_.Mutable(index)->assign(value);
  // @@protoc_insertion_point(field_set_char:substrait.RelRoot.names)
}
inline void RelRoot::set_names(int index, const char* value, size_t size) {
  names_.Mutable(index)->assign(
    reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_set_pointer:substrait.RelRoot.names)
}
inline std::string* RelRoot::_internal_add_names() {
  return names_.Add();
}
inline void RelRoot::add_names(const std::string& value) {
  names_.Add()->assign(value);
  // @@protoc_insertion_point(field_add:substrait.RelRoot.names)
}
inline void RelRoot::add_names(std::string&& value) {
  names_.Add(std::move(value));
  // @@protoc_insertion_point(field_add:substrait.RelRoot.names)
}
inline void RelRoot::add_names(const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  names_.Add()->assign(value);
  // @@protoc_insertion_point(field_add_char:substrait.RelRoot.names)
}
inline void RelRoot::add_names(const char* value, size_t size) {
  names_.Add()->assign(reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_add_pointer:substrait.RelRoot.names)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>&
RelRoot::names() const {
  // @@protoc_insertion_point(field_list:substrait.RelRoot.names)
  return names_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>*
RelRoot::mutable_names() {
  // @@protoc_insertion_point(field_mutable_list:substrait.RelRoot.names)
  return &names_;
}

// -------------------------------------------------------------------

// Rel

// .substrait.ReadRel read = 1 [json_name = "read"];
inline bool Rel::_internal_has_read() const {
  return rel_type_case() == kRead;
}
inline bool Rel::has_read() const {
  return _internal_has_read();
}
inline void Rel::set_has_read() {
  _oneof_case_[0] = kRead;
}
inline void Rel::clear_read() {
  if (_internal_has_read()) {
    if (GetArenaForAllocation() == nullptr) {
      delete rel_type_.read_;
    }
    clear_has_rel_type();
  }
}
inline ::substrait::ReadRel* Rel::release_read() {
  // @@protoc_insertion_point(field_release:substrait.Rel.read)
  if (_internal_has_read()) {
    clear_has_rel_type();
      ::substrait::ReadRel* temp = rel_type_.read_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    rel_type_.read_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::ReadRel& Rel::_internal_read() const {
  return _internal_has_read()
      ? *rel_type_.read_
      : reinterpret_cast< ::substrait::ReadRel&>(::substrait::_ReadRel_default_instance_);
}
inline const ::substrait::ReadRel& Rel::read() const {
  // @@protoc_insertion_point(field_get:substrait.Rel.read)
  return _internal_read();
}
inline ::substrait::ReadRel* Rel::unsafe_arena_release_read() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Rel.read)
  if (_internal_has_read()) {
    clear_has_rel_type();
    ::substrait::ReadRel* temp = rel_type_.read_;
    rel_type_.read_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Rel::unsafe_arena_set_allocated_read(::substrait::ReadRel* read) {
  clear_rel_type();
  if (read) {
    set_has_read();
    rel_type_.read_ = read;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Rel.read)
}
inline ::substrait::ReadRel* Rel::_internal_mutable_read() {
  if (!_internal_has_read()) {
    clear_rel_type();
    set_has_read();
    rel_type_.read_ = CreateMaybeMessage< ::substrait::ReadRel >(GetArenaForAllocation());
  }
  return rel_type_.read_;
}
inline ::substrait::ReadRel* Rel::mutable_read() {
  ::substrait::ReadRel* _msg = _internal_mutable_read();
  // @@protoc_insertion_point(field_mutable:substrait.Rel.read)
  return _msg;
}

// .substrait.FilterRel filter = 2 [json_name = "filter"];
inline bool Rel::_internal_has_filter() const {
  return rel_type_case() == kFilter;
}
inline bool Rel::has_filter() const {
  return _internal_has_filter();
}
inline void Rel::set_has_filter() {
  _oneof_case_[0] = kFilter;
}
inline void Rel::clear_filter() {
  if (_internal_has_filter()) {
    if (GetArenaForAllocation() == nullptr) {
      delete rel_type_.filter_;
    }
    clear_has_rel_type();
  }
}
inline ::substrait::FilterRel* Rel::release_filter() {
  // @@protoc_insertion_point(field_release:substrait.Rel.filter)
  if (_internal_has_filter()) {
    clear_has_rel_type();
      ::substrait::FilterRel* temp = rel_type_.filter_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    rel_type_.filter_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::FilterRel& Rel::_internal_filter() const {
  return _internal_has_filter()
      ? *rel_type_.filter_
      : reinterpret_cast< ::substrait::FilterRel&>(::substrait::_FilterRel_default_instance_);
}
inline const ::substrait::FilterRel& Rel::filter() const {
  // @@protoc_insertion_point(field_get:substrait.Rel.filter)
  return _internal_filter();
}
inline ::substrait::FilterRel* Rel::unsafe_arena_release_filter() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Rel.filter)
  if (_internal_has_filter()) {
    clear_has_rel_type();
    ::substrait::FilterRel* temp = rel_type_.filter_;
    rel_type_.filter_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Rel::unsafe_arena_set_allocated_filter(::substrait::FilterRel* filter) {
  clear_rel_type();
  if (filter) {
    set_has_filter();
    rel_type_.filter_ = filter;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Rel.filter)
}
inline ::substrait::FilterRel* Rel::_internal_mutable_filter() {
  if (!_internal_has_filter()) {
    clear_rel_type();
    set_has_filter();
    rel_type_.filter_ = CreateMaybeMessage< ::substrait::FilterRel >(GetArenaForAllocation());
  }
  return rel_type_.filter_;
}
inline ::substrait::FilterRel* Rel::mutable_filter() {
  ::substrait::FilterRel* _msg = _internal_mutable_filter();
  // @@protoc_insertion_point(field_mutable:substrait.Rel.filter)
  return _msg;
}

// .substrait.FetchRel fetch = 3 [json_name = "fetch"];
inline bool Rel::_internal_has_fetch() const {
  return rel_type_case() == kFetch;
}
inline bool Rel::has_fetch() const {
  return _internal_has_fetch();
}
inline void Rel::set_has_fetch() {
  _oneof_case_[0] = kFetch;
}
inline void Rel::clear_fetch() {
  if (_internal_has_fetch()) {
    if (GetArenaForAllocation() == nullptr) {
      delete rel_type_.fetch_;
    }
    clear_has_rel_type();
  }
}
inline ::substrait::FetchRel* Rel::release_fetch() {
  // @@protoc_insertion_point(field_release:substrait.Rel.fetch)
  if (_internal_has_fetch()) {
    clear_has_rel_type();
      ::substrait::FetchRel* temp = rel_type_.fetch_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    rel_type_.fetch_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::FetchRel& Rel::_internal_fetch() const {
  return _internal_has_fetch()
      ? *rel_type_.fetch_
      : reinterpret_cast< ::substrait::FetchRel&>(::substrait::_FetchRel_default_instance_);
}
inline const ::substrait::FetchRel& Rel::fetch() const {
  // @@protoc_insertion_point(field_get:substrait.Rel.fetch)
  return _internal_fetch();
}
inline ::substrait::FetchRel* Rel::unsafe_arena_release_fetch() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Rel.fetch)
  if (_internal_has_fetch()) {
    clear_has_rel_type();
    ::substrait::FetchRel* temp = rel_type_.fetch_;
    rel_type_.fetch_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Rel::unsafe_arena_set_allocated_fetch(::substrait::FetchRel* fetch) {
  clear_rel_type();
  if (fetch) {
    set_has_fetch();
    rel_type_.fetch_ = fetch;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Rel.fetch)
}
inline ::substrait::FetchRel* Rel::_internal_mutable_fetch() {
  if (!_internal_has_fetch()) {
    clear_rel_type();
    set_has_fetch();
    rel_type_.fetch_ = CreateMaybeMessage< ::substrait::FetchRel >(GetArenaForAllocation());
  }
  return rel_type_.fetch_;
}
inline ::substrait::FetchRel* Rel::mutable_fetch() {
  ::substrait::FetchRel* _msg = _internal_mutable_fetch();
  // @@protoc_insertion_point(field_mutable:substrait.Rel.fetch)
  return _msg;
}

// .substrait.AggregateRel aggregate = 4 [json_name = "aggregate"];
inline bool Rel::_internal_has_aggregate() const {
  return rel_type_case() == kAggregate;
}
inline bool Rel::has_aggregate() const {
  return _internal_has_aggregate();
}
inline void Rel::set_has_aggregate() {
  _oneof_case_[0] = kAggregate;
}
inline void Rel::clear_aggregate() {
  if (_internal_has_aggregate()) {
    if (GetArenaForAllocation() == nullptr) {
      delete rel_type_.aggregate_;
    }
    clear_has_rel_type();
  }
}
inline ::substrait::AggregateRel* Rel::release_aggregate() {
  // @@protoc_insertion_point(field_release:substrait.Rel.aggregate)
  if (_internal_has_aggregate()) {
    clear_has_rel_type();
      ::substrait::AggregateRel* temp = rel_type_.aggregate_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    rel_type_.aggregate_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::AggregateRel& Rel::_internal_aggregate() const {
  return _internal_has_aggregate()
      ? *rel_type_.aggregate_
      : reinterpret_cast< ::substrait::AggregateRel&>(::substrait::_AggregateRel_default_instance_);
}
inline const ::substrait::AggregateRel& Rel::aggregate() const {
  // @@protoc_insertion_point(field_get:substrait.Rel.aggregate)
  return _internal_aggregate();
}
inline ::substrait::AggregateRel* Rel::unsafe_arena_release_aggregate() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Rel.aggregate)
  if (_internal_has_aggregate()) {
    clear_has_rel_type();
    ::substrait::AggregateRel* temp = rel_type_.aggregate_;
    rel_type_.aggregate_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Rel::unsafe_arena_set_allocated_aggregate(::substrait::AggregateRel* aggregate) {
  clear_rel_type();
  if (aggregate) {
    set_has_aggregate();
    rel_type_.aggregate_ = aggregate;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Rel.aggregate)
}
inline ::substrait::AggregateRel* Rel::_internal_mutable_aggregate() {
  if (!_internal_has_aggregate()) {
    clear_rel_type();
    set_has_aggregate();
    rel_type_.aggregate_ = CreateMaybeMessage< ::substrait::AggregateRel >(GetArenaForAllocation());
  }
  return rel_type_.aggregate_;
}
inline ::substrait::AggregateRel* Rel::mutable_aggregate() {
  ::substrait::AggregateRel* _msg = _internal_mutable_aggregate();
  // @@protoc_insertion_point(field_mutable:substrait.Rel.aggregate)
  return _msg;
}

// .substrait.SortRel sort = 5 [json_name = "sort"];
inline bool Rel::_internal_has_sort() const {
  return rel_type_case() == kSort;
}
inline bool Rel::has_sort() const {
  return _internal_has_sort();
}
inline void Rel::set_has_sort() {
  _oneof_case_[0] = kSort;
}
inline void Rel::clear_sort() {
  if (_internal_has_sort()) {
    if (GetArenaForAllocation() == nullptr) {
      delete rel_type_.sort_;
    }
    clear_has_rel_type();
  }
}
inline ::substrait::SortRel* Rel::release_sort() {
  // @@protoc_insertion_point(field_release:substrait.Rel.sort)
  if (_internal_has_sort()) {
    clear_has_rel_type();
      ::substrait::SortRel* temp = rel_type_.sort_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    rel_type_.sort_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::SortRel& Rel::_internal_sort() const {
  return _internal_has_sort()
      ? *rel_type_.sort_
      : reinterpret_cast< ::substrait::SortRel&>(::substrait::_SortRel_default_instance_);
}
inline const ::substrait::SortRel& Rel::sort() const {
  // @@protoc_insertion_point(field_get:substrait.Rel.sort)
  return _internal_sort();
}
inline ::substrait::SortRel* Rel::unsafe_arena_release_sort() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Rel.sort)
  if (_internal_has_sort()) {
    clear_has_rel_type();
    ::substrait::SortRel* temp = rel_type_.sort_;
    rel_type_.sort_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Rel::unsafe_arena_set_allocated_sort(::substrait::SortRel* sort) {
  clear_rel_type();
  if (sort) {
    set_has_sort();
    rel_type_.sort_ = sort;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Rel.sort)
}
inline ::substrait::SortRel* Rel::_internal_mutable_sort() {
  if (!_internal_has_sort()) {
    clear_rel_type();
    set_has_sort();
    rel_type_.sort_ = CreateMaybeMessage< ::substrait::SortRel >(GetArenaForAllocation());
  }
  return rel_type_.sort_;
}
inline ::substrait::SortRel* Rel::mutable_sort() {
  ::substrait::SortRel* _msg = _internal_mutable_sort();
  // @@protoc_insertion_point(field_mutable:substrait.Rel.sort)
  return _msg;
}

// .substrait.JoinRel join = 6 [json_name = "join"];
inline bool Rel::_internal_has_join() const {
  return rel_type_case() == kJoin;
}
inline bool Rel::has_join() const {
  return _internal_has_join();
}
inline void Rel::set_has_join() {
  _oneof_case_[0] = kJoin;
}
inline void Rel::clear_join() {
  if (_internal_has_join()) {
    if (GetArenaForAllocation() == nullptr) {
      delete rel_type_.join_;
    }
    clear_has_rel_type();
  }
}
inline ::substrait::JoinRel* Rel::release_join() {
  // @@protoc_insertion_point(field_release:substrait.Rel.join)
  if (_internal_has_join()) {
    clear_has_rel_type();
      ::substrait::JoinRel* temp = rel_type_.join_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    rel_type_.join_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::JoinRel& Rel::_internal_join() const {
  return _internal_has_join()
      ? *rel_type_.join_
      : reinterpret_cast< ::substrait::JoinRel&>(::substrait::_JoinRel_default_instance_);
}
inline const ::substrait::JoinRel& Rel::join() const {
  // @@protoc_insertion_point(field_get:substrait.Rel.join)
  return _internal_join();
}
inline ::substrait::JoinRel* Rel::unsafe_arena_release_join() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Rel.join)
  if (_internal_has_join()) {
    clear_has_rel_type();
    ::substrait::JoinRel* temp = rel_type_.join_;
    rel_type_.join_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Rel::unsafe_arena_set_allocated_join(::substrait::JoinRel* join) {
  clear_rel_type();
  if (join) {
    set_has_join();
    rel_type_.join_ = join;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Rel.join)
}
inline ::substrait::JoinRel* Rel::_internal_mutable_join() {
  if (!_internal_has_join()) {
    clear_rel_type();
    set_has_join();
    rel_type_.join_ = CreateMaybeMessage< ::substrait::JoinRel >(GetArenaForAllocation());
  }
  return rel_type_.join_;
}
inline ::substrait::JoinRel* Rel::mutable_join() {
  ::substrait::JoinRel* _msg = _internal_mutable_join();
  // @@protoc_insertion_point(field_mutable:substrait.Rel.join)
  return _msg;
}

// .substrait.ProjectRel project = 7 [json_name = "project"];
inline bool Rel::_internal_has_project() const {
  return rel_type_case() == kProject;
}
inline bool Rel::has_project() const {
  return _internal_has_project();
}
inline void Rel::set_has_project() {
  _oneof_case_[0] = kProject;
}
inline void Rel::clear_project() {
  if (_internal_has_project()) {
    if (GetArenaForAllocation() == nullptr) {
      delete rel_type_.project_;
    }
    clear_has_rel_type();
  }
}
inline ::substrait::ProjectRel* Rel::release_project() {
  // @@protoc_insertion_point(field_release:substrait.Rel.project)
  if (_internal_has_project()) {
    clear_has_rel_type();
      ::substrait::ProjectRel* temp = rel_type_.project_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    rel_type_.project_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::ProjectRel& Rel::_internal_project() const {
  return _internal_has_project()
      ? *rel_type_.project_
      : reinterpret_cast< ::substrait::ProjectRel&>(::substrait::_ProjectRel_default_instance_);
}
inline const ::substrait::ProjectRel& Rel::project() const {
  // @@protoc_insertion_point(field_get:substrait.Rel.project)
  return _internal_project();
}
inline ::substrait::ProjectRel* Rel::unsafe_arena_release_project() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Rel.project)
  if (_internal_has_project()) {
    clear_has_rel_type();
    ::substrait::ProjectRel* temp = rel_type_.project_;
    rel_type_.project_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Rel::unsafe_arena_set_allocated_project(::substrait::ProjectRel* project) {
  clear_rel_type();
  if (project) {
    set_has_project();
    rel_type_.project_ = project;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Rel.project)
}
inline ::substrait::ProjectRel* Rel::_internal_mutable_project() {
  if (!_internal_has_project()) {
    clear_rel_type();
    set_has_project();
    rel_type_.project_ = CreateMaybeMessage< ::substrait::ProjectRel >(GetArenaForAllocation());
  }
  return rel_type_.project_;
}
inline ::substrait::ProjectRel* Rel::mutable_project() {
  ::substrait::ProjectRel* _msg = _internal_mutable_project();
  // @@protoc_insertion_point(field_mutable:substrait.Rel.project)
  return _msg;
}

// .substrait.SetRel set = 8 [json_name = "set"];
inline bool Rel::_internal_has_set() const {
  return rel_type_case() == kSet;
}
inline bool Rel::has_set() const {
  return _internal_has_set();
}
inline void Rel::set_has_set() {
  _oneof_case_[0] = kSet;
}
inline void Rel::clear_set() {
  if (_internal_has_set()) {
    if (GetArenaForAllocation() == nullptr) {
      delete rel_type_.set_;
    }
    clear_has_rel_type();
  }
}
inline ::substrait::SetRel* Rel::release_set() {
  // @@protoc_insertion_point(field_release:substrait.Rel.set)
  if (_internal_has_set()) {
    clear_has_rel_type();
      ::substrait::SetRel* temp = rel_type_.set_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    rel_type_.set_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::SetRel& Rel::_internal_set() const {
  return _internal_has_set()
      ? *rel_type_.set_
      : reinterpret_cast< ::substrait::SetRel&>(::substrait::_SetRel_default_instance_);
}
inline const ::substrait::SetRel& Rel::set() const {
  // @@protoc_insertion_point(field_get:substrait.Rel.set)
  return _internal_set();
}
inline ::substrait::SetRel* Rel::unsafe_arena_release_set() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Rel.set)
  if (_internal_has_set()) {
    clear_has_rel_type();
    ::substrait::SetRel* temp = rel_type_.set_;
    rel_type_.set_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Rel::unsafe_arena_set_allocated_set(::substrait::SetRel* set) {
  clear_rel_type();
  if (set) {
    set_has_set();
    rel_type_.set_ = set;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Rel.set)
}
inline ::substrait::SetRel* Rel::_internal_mutable_set() {
  if (!_internal_has_set()) {
    clear_rel_type();
    set_has_set();
    rel_type_.set_ = CreateMaybeMessage< ::substrait::SetRel >(GetArenaForAllocation());
  }
  return rel_type_.set_;
}
inline ::substrait::SetRel* Rel::mutable_set() {
  ::substrait::SetRel* _msg = _internal_mutable_set();
  // @@protoc_insertion_point(field_mutable:substrait.Rel.set)
  return _msg;
}

// .substrait.ExtensionSingleRel extension_single = 9 [json_name = "extensionSingle"];
inline bool Rel::_internal_has_extension_single() const {
  return rel_type_case() == kExtensionSingle;
}
inline bool Rel::has_extension_single() const {
  return _internal_has_extension_single();
}
inline void Rel::set_has_extension_single() {
  _oneof_case_[0] = kExtensionSingle;
}
inline void Rel::clear_extension_single() {
  if (_internal_has_extension_single()) {
    if (GetArenaForAllocation() == nullptr) {
      delete rel_type_.extension_single_;
    }
    clear_has_rel_type();
  }
}
inline ::substrait::ExtensionSingleRel* Rel::release_extension_single() {
  // @@protoc_insertion_point(field_release:substrait.Rel.extension_single)
  if (_internal_has_extension_single()) {
    clear_has_rel_type();
      ::substrait::ExtensionSingleRel* temp = rel_type_.extension_single_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    rel_type_.extension_single_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::ExtensionSingleRel& Rel::_internal_extension_single() const {
  return _internal_has_extension_single()
      ? *rel_type_.extension_single_
      : reinterpret_cast< ::substrait::ExtensionSingleRel&>(::substrait::_ExtensionSingleRel_default_instance_);
}
inline const ::substrait::ExtensionSingleRel& Rel::extension_single() const {
  // @@protoc_insertion_point(field_get:substrait.Rel.extension_single)
  return _internal_extension_single();
}
inline ::substrait::ExtensionSingleRel* Rel::unsafe_arena_release_extension_single() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Rel.extension_single)
  if (_internal_has_extension_single()) {
    clear_has_rel_type();
    ::substrait::ExtensionSingleRel* temp = rel_type_.extension_single_;
    rel_type_.extension_single_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Rel::unsafe_arena_set_allocated_extension_single(::substrait::ExtensionSingleRel* extension_single) {
  clear_rel_type();
  if (extension_single) {
    set_has_extension_single();
    rel_type_.extension_single_ = extension_single;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Rel.extension_single)
}
inline ::substrait::ExtensionSingleRel* Rel::_internal_mutable_extension_single() {
  if (!_internal_has_extension_single()) {
    clear_rel_type();
    set_has_extension_single();
    rel_type_.extension_single_ = CreateMaybeMessage< ::substrait::ExtensionSingleRel >(GetArenaForAllocation());
  }
  return rel_type_.extension_single_;
}
inline ::substrait::ExtensionSingleRel* Rel::mutable_extension_single() {
  ::substrait::ExtensionSingleRel* _msg = _internal_mutable_extension_single();
  // @@protoc_insertion_point(field_mutable:substrait.Rel.extension_single)
  return _msg;
}

// .substrait.ExtensionMultiRel extension_multi = 10 [json_name = "extensionMulti"];
inline bool Rel::_internal_has_extension_multi() const {
  return rel_type_case() == kExtensionMulti;
}
inline bool Rel::has_extension_multi() const {
  return _internal_has_extension_multi();
}
inline void Rel::set_has_extension_multi() {
  _oneof_case_[0] = kExtensionMulti;
}
inline void Rel::clear_extension_multi() {
  if (_internal_has_extension_multi()) {
    if (GetArenaForAllocation() == nullptr) {
      delete rel_type_.extension_multi_;
    }
    clear_has_rel_type();
  }
}
inline ::substrait::ExtensionMultiRel* Rel::release_extension_multi() {
  // @@protoc_insertion_point(field_release:substrait.Rel.extension_multi)
  if (_internal_has_extension_multi()) {
    clear_has_rel_type();
      ::substrait::ExtensionMultiRel* temp = rel_type_.extension_multi_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    rel_type_.extension_multi_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::ExtensionMultiRel& Rel::_internal_extension_multi() const {
  return _internal_has_extension_multi()
      ? *rel_type_.extension_multi_
      : reinterpret_cast< ::substrait::ExtensionMultiRel&>(::substrait::_ExtensionMultiRel_default_instance_);
}
inline const ::substrait::ExtensionMultiRel& Rel::extension_multi() const {
  // @@protoc_insertion_point(field_get:substrait.Rel.extension_multi)
  return _internal_extension_multi();
}
inline ::substrait::ExtensionMultiRel* Rel::unsafe_arena_release_extension_multi() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Rel.extension_multi)
  if (_internal_has_extension_multi()) {
    clear_has_rel_type();
    ::substrait::ExtensionMultiRel* temp = rel_type_.extension_multi_;
    rel_type_.extension_multi_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Rel::unsafe_arena_set_allocated_extension_multi(::substrait::ExtensionMultiRel* extension_multi) {
  clear_rel_type();
  if (extension_multi) {
    set_has_extension_multi();
    rel_type_.extension_multi_ = extension_multi;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Rel.extension_multi)
}
inline ::substrait::ExtensionMultiRel* Rel::_internal_mutable_extension_multi() {
  if (!_internal_has_extension_multi()) {
    clear_rel_type();
    set_has_extension_multi();
    rel_type_.extension_multi_ = CreateMaybeMessage< ::substrait::ExtensionMultiRel >(GetArenaForAllocation());
  }
  return rel_type_.extension_multi_;
}
inline ::substrait::ExtensionMultiRel* Rel::mutable_extension_multi() {
  ::substrait::ExtensionMultiRel* _msg = _internal_mutable_extension_multi();
  // @@protoc_insertion_point(field_mutable:substrait.Rel.extension_multi)
  return _msg;
}

// .substrait.ExtensionLeafRel extension_leaf = 11 [json_name = "extensionLeaf"];
inline bool Rel::_internal_has_extension_leaf() const {
  return rel_type_case() == kExtensionLeaf;
}
inline bool Rel::has_extension_leaf() const {
  return _internal_has_extension_leaf();
}
inline void Rel::set_has_extension_leaf() {
  _oneof_case_[0] = kExtensionLeaf;
}
inline void Rel::clear_extension_leaf() {
  if (_internal_has_extension_leaf()) {
    if (GetArenaForAllocation() == nullptr) {
      delete rel_type_.extension_leaf_;
    }
    clear_has_rel_type();
  }
}
inline ::substrait::ExtensionLeafRel* Rel::release_extension_leaf() {
  // @@protoc_insertion_point(field_release:substrait.Rel.extension_leaf)
  if (_internal_has_extension_leaf()) {
    clear_has_rel_type();
      ::substrait::ExtensionLeafRel* temp = rel_type_.extension_leaf_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    rel_type_.extension_leaf_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::ExtensionLeafRel& Rel::_internal_extension_leaf() const {
  return _internal_has_extension_leaf()
      ? *rel_type_.extension_leaf_
      : reinterpret_cast< ::substrait::ExtensionLeafRel&>(::substrait::_ExtensionLeafRel_default_instance_);
}
inline const ::substrait::ExtensionLeafRel& Rel::extension_leaf() const {
  // @@protoc_insertion_point(field_get:substrait.Rel.extension_leaf)
  return _internal_extension_leaf();
}
inline ::substrait::ExtensionLeafRel* Rel::unsafe_arena_release_extension_leaf() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Rel.extension_leaf)
  if (_internal_has_extension_leaf()) {
    clear_has_rel_type();
    ::substrait::ExtensionLeafRel* temp = rel_type_.extension_leaf_;
    rel_type_.extension_leaf_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Rel::unsafe_arena_set_allocated_extension_leaf(::substrait::ExtensionLeafRel* extension_leaf) {
  clear_rel_type();
  if (extension_leaf) {
    set_has_extension_leaf();
    rel_type_.extension_leaf_ = extension_leaf;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Rel.extension_leaf)
}
inline ::substrait::ExtensionLeafRel* Rel::_internal_mutable_extension_leaf() {
  if (!_internal_has_extension_leaf()) {
    clear_rel_type();
    set_has_extension_leaf();
    rel_type_.extension_leaf_ = CreateMaybeMessage< ::substrait::ExtensionLeafRel >(GetArenaForAllocation());
  }
  return rel_type_.extension_leaf_;
}
inline ::substrait::ExtensionLeafRel* Rel::mutable_extension_leaf() {
  ::substrait::ExtensionLeafRel* _msg = _internal_mutable_extension_leaf();
  // @@protoc_insertion_point(field_mutable:substrait.Rel.extension_leaf)
  return _msg;
}

// .substrait.CrossRel cross = 12 [json_name = "cross"];
inline bool Rel::_internal_has_cross() const {
  return rel_type_case() == kCross;
}
inline bool Rel::has_cross() const {
  return _internal_has_cross();
}
inline void Rel::set_has_cross() {
  _oneof_case_[0] = kCross;
}
inline void Rel::clear_cross() {
  if (_internal_has_cross()) {
    if (GetArenaForAllocation() == nullptr) {
      delete rel_type_.cross_;
    }
    clear_has_rel_type();
  }
}
inline ::substrait::CrossRel* Rel::release_cross() {
  // @@protoc_insertion_point(field_release:substrait.Rel.cross)
  if (_internal_has_cross()) {
    clear_has_rel_type();
      ::substrait::CrossRel* temp = rel_type_.cross_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    rel_type_.cross_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::CrossRel& Rel::_internal_cross() const {
  return _internal_has_cross()
      ? *rel_type_.cross_
      : reinterpret_cast< ::substrait::CrossRel&>(::substrait::_CrossRel_default_instance_);
}
inline const ::substrait::CrossRel& Rel::cross() const {
  // @@protoc_insertion_point(field_get:substrait.Rel.cross)
  return _internal_cross();
}
inline ::substrait::CrossRel* Rel::unsafe_arena_release_cross() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Rel.cross)
  if (_internal_has_cross()) {
    clear_has_rel_type();
    ::substrait::CrossRel* temp = rel_type_.cross_;
    rel_type_.cross_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Rel::unsafe_arena_set_allocated_cross(::substrait::CrossRel* cross) {
  clear_rel_type();
  if (cross) {
    set_has_cross();
    rel_type_.cross_ = cross;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Rel.cross)
}
inline ::substrait::CrossRel* Rel::_internal_mutable_cross() {
  if (!_internal_has_cross()) {
    clear_rel_type();
    set_has_cross();
    rel_type_.cross_ = CreateMaybeMessage< ::substrait::CrossRel >(GetArenaForAllocation());
  }
  return rel_type_.cross_;
}
inline ::substrait::CrossRel* Rel::mutable_cross() {
  ::substrait::CrossRel* _msg = _internal_mutable_cross();
  // @@protoc_insertion_point(field_mutable:substrait.Rel.cross)
  return _msg;
}

inline bool Rel::has_rel_type() const {
  return rel_type_case() != REL_TYPE_NOT_SET;
}
inline void Rel::clear_has_rel_type() {
  _oneof_case_[0] = REL_TYPE_NOT_SET;
}
inline Rel::RelTypeCase Rel::rel_type_case() const {
  return Rel::RelTypeCase(_oneof_case_[0]);
}
// -------------------------------------------------------------------

// Expression_Enum_Empty

// -------------------------------------------------------------------

// Expression_Enum

// string specified = 1 [json_name = "specified"];
inline bool Expression_Enum::_internal_has_specified() const {
  return enum_kind_case() == kSpecified;
}
inline bool Expression_Enum::has_specified() const {
  return _internal_has_specified();
}
inline void Expression_Enum::set_has_specified() {
  _oneof_case_[0] = kSpecified;
}
inline void Expression_Enum::clear_specified() {
  if (_internal_has_specified()) {
    enum_kind_.specified_.Destroy(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
    clear_has_enum_kind();
  }
}
inline const std::string& Expression_Enum::specified() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Enum.specified)
  return _internal_specified();
}
template <typename ArgT0, typename... ArgT>
inline void Expression_Enum::set_specified(ArgT0&& arg0, ArgT... args) {
  if (!_internal_has_specified()) {
    clear_enum_kind();
    set_has_specified();
    enum_kind_.specified_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  enum_kind_.specified_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
  // @@protoc_insertion_point(field_set:substrait.Expression.Enum.specified)
}
inline std::string* Expression_Enum::mutable_specified() {
  std::string* _s = _internal_mutable_specified();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Enum.specified)
  return _s;
}
inline const std::string& Expression_Enum::_internal_specified() const {
  if (_internal_has_specified()) {
    return enum_kind_.specified_.Get();
  }
  return ::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited();
}
inline void Expression_Enum::_internal_set_specified(const std::string& value) {
  if (!_internal_has_specified()) {
    clear_enum_kind();
    set_has_specified();
    enum_kind_.specified_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  enum_kind_.specified_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
}
inline std::string* Expression_Enum::_internal_mutable_specified() {
  if (!_internal_has_specified()) {
    clear_enum_kind();
    set_has_specified();
    enum_kind_.specified_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  return enum_kind_.specified_.Mutable(
      ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
}
inline std::string* Expression_Enum::release_specified() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Enum.specified)
  if (_internal_has_specified()) {
    clear_has_enum_kind();
    return enum_kind_.specified_.ReleaseNonDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
  } else {
    return nullptr;
  }
}
inline void Expression_Enum::set_allocated_specified(std::string* specified) {
  if (has_enum_kind()) {
    clear_enum_kind();
  }
  if (specified != nullptr) {
    set_has_specified();
    enum_kind_.specified_.UnsafeSetDefault(specified);
    ::PROTOBUF_NAMESPACE_ID::Arena* arena = GetArenaForAllocation();
    if (arena != nullptr) {
      arena->Own(specified);
    }
  }
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.Enum.specified)
}

// .substrait.Expression.Enum.Empty unspecified = 2 [json_name = "unspecified"];
inline bool Expression_Enum::_internal_has_unspecified() const {
  return enum_kind_case() == kUnspecified;
}
inline bool Expression_Enum::has_unspecified() const {
  return _internal_has_unspecified();
}
inline void Expression_Enum::set_has_unspecified() {
  _oneof_case_[0] = kUnspecified;
}
inline void Expression_Enum::clear_unspecified() {
  if (_internal_has_unspecified()) {
    if (GetArenaForAllocation() == nullptr) {
      delete enum_kind_.unspecified_;
    }
    clear_has_enum_kind();
  }
}
inline ::substrait::Expression_Enum_Empty* Expression_Enum::release_unspecified() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Enum.unspecified)
  if (_internal_has_unspecified()) {
    clear_has_enum_kind();
      ::substrait::Expression_Enum_Empty* temp = enum_kind_.unspecified_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    enum_kind_.unspecified_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_Enum_Empty& Expression_Enum::_internal_unspecified() const {
  return _internal_has_unspecified()
      ? *enum_kind_.unspecified_
      : reinterpret_cast< ::substrait::Expression_Enum_Empty&>(::substrait::_Expression_Enum_Empty_default_instance_);
}
inline const ::substrait::Expression_Enum_Empty& Expression_Enum::unspecified() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Enum.unspecified)
  return _internal_unspecified();
}
inline ::substrait::Expression_Enum_Empty* Expression_Enum::unsafe_arena_release_unspecified() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.Enum.unspecified)
  if (_internal_has_unspecified()) {
    clear_has_enum_kind();
    ::substrait::Expression_Enum_Empty* temp = enum_kind_.unspecified_;
    enum_kind_.unspecified_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_Enum::unsafe_arena_set_allocated_unspecified(::substrait::Expression_Enum_Empty* unspecified) {
  clear_enum_kind();
  if (unspecified) {
    set_has_unspecified();
    enum_kind_.unspecified_ = unspecified;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.Enum.unspecified)
}
inline ::substrait::Expression_Enum_Empty* Expression_Enum::_internal_mutable_unspecified() {
  if (!_internal_has_unspecified()) {
    clear_enum_kind();
    set_has_unspecified();
    enum_kind_.unspecified_ = CreateMaybeMessage< ::substrait::Expression_Enum_Empty >(GetArenaForAllocation());
  }
  return enum_kind_.unspecified_;
}
inline ::substrait::Expression_Enum_Empty* Expression_Enum::mutable_unspecified() {
  ::substrait::Expression_Enum_Empty* _msg = _internal_mutable_unspecified();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Enum.unspecified)
  return _msg;
}

inline bool Expression_Enum::has_enum_kind() const {
  return enum_kind_case() != ENUM_KIND_NOT_SET;
}
inline void Expression_Enum::clear_has_enum_kind() {
  _oneof_case_[0] = ENUM_KIND_NOT_SET;
}
inline Expression_Enum::EnumKindCase Expression_Enum::enum_kind_case() const {
  return Expression_Enum::EnumKindCase(_oneof_case_[0]);
}
// -------------------------------------------------------------------

// Expression_Literal_VarChar

// string value = 1 [json_name = "value"];
inline void Expression_Literal_VarChar::clear_value() {
  value_.ClearToEmpty();
}
inline const std::string& Expression_Literal_VarChar::value() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.VarChar.value)
  return _internal_value();
}
template <typename ArgT0, typename... ArgT>
inline PROTOBUF_ALWAYS_INLINE
void Expression_Literal_VarChar::set_value(ArgT0&& arg0, ArgT... args) {
 
 value_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
  // @@protoc_insertion_point(field_set:substrait.Expression.Literal.VarChar.value)
}
inline std::string* Expression_Literal_VarChar::mutable_value() {
  std::string* _s = _internal_mutable_value();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Literal.VarChar.value)
  return _s;
}
inline const std::string& Expression_Literal_VarChar::_internal_value() const {
  return value_.Get();
}
inline void Expression_Literal_VarChar::_internal_set_value(const std::string& value) {
  
  value_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
}
inline std::string* Expression_Literal_VarChar::_internal_mutable_value() {
  
  return value_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
}
inline std::string* Expression_Literal_VarChar::release_value() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Literal.VarChar.value)
  return value_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
}
inline void Expression_Literal_VarChar::set_allocated_value(std::string* value) {
  if (value != nullptr) {
    
  } else {
    
  }
  value_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value,
      GetArenaForAllocation());
#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (value_.IsDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited())) {
    value_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), "", GetArenaForAllocation());
  }
#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.Literal.VarChar.value)
}

// uint32 length = 2 [json_name = "length"];
inline void Expression_Literal_VarChar::clear_length() {
  length_ = 0u;
}
inline uint32_t Expression_Literal_VarChar::_internal_length() const {
  return length_;
}
inline uint32_t Expression_Literal_VarChar::length() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.VarChar.length)
  return _internal_length();
}
inline void Expression_Literal_VarChar::_internal_set_length(uint32_t value) {
  
  length_ = value;
}
inline void Expression_Literal_VarChar::set_length(uint32_t value) {
  _internal_set_length(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.Literal.VarChar.length)
}

// -------------------------------------------------------------------

// Expression_Literal_Decimal

// bytes value = 1 [json_name = "value"];
inline void Expression_Literal_Decimal::clear_value() {
  value_.ClearToEmpty();
}
inline const std::string& Expression_Literal_Decimal::value() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.Decimal.value)
  return _internal_value();
}
template <typename ArgT0, typename... ArgT>
inline PROTOBUF_ALWAYS_INLINE
void Expression_Literal_Decimal::set_value(ArgT0&& arg0, ArgT... args) {
 
 value_.SetBytes(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
  // @@protoc_insertion_point(field_set:substrait.Expression.Literal.Decimal.value)
}
inline std::string* Expression_Literal_Decimal::mutable_value() {
  std::string* _s = _internal_mutable_value();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Literal.Decimal.value)
  return _s;
}
inline const std::string& Expression_Literal_Decimal::_internal_value() const {
  return value_.Get();
}
inline void Expression_Literal_Decimal::_internal_set_value(const std::string& value) {
  
  value_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
}
inline std::string* Expression_Literal_Decimal::_internal_mutable_value() {
  
  return value_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
}
inline std::string* Expression_Literal_Decimal::release_value() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Literal.Decimal.value)
  return value_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
}
inline void Expression_Literal_Decimal::set_allocated_value(std::string* value) {
  if (value != nullptr) {
    
  } else {
    
  }
  value_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value,
      GetArenaForAllocation());
#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (value_.IsDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited())) {
    value_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), "", GetArenaForAllocation());
  }
#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.Literal.Decimal.value)
}

// int32 precision = 2 [json_name = "precision"];
inline void Expression_Literal_Decimal::clear_precision() {
  precision_ = 0;
}
inline int32_t Expression_Literal_Decimal::_internal_precision() const {
  return precision_;
}
inline int32_t Expression_Literal_Decimal::precision() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.Decimal.precision)
  return _internal_precision();
}
inline void Expression_Literal_Decimal::_internal_set_precision(int32_t value) {
  
  precision_ = value;
}
inline void Expression_Literal_Decimal::set_precision(int32_t value) {
  _internal_set_precision(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.Literal.Decimal.precision)
}

// int32 scale = 3 [json_name = "scale"];
inline void Expression_Literal_Decimal::clear_scale() {
  scale_ = 0;
}
inline int32_t Expression_Literal_Decimal::_internal_scale() const {
  return scale_;
}
inline int32_t Expression_Literal_Decimal::scale() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.Decimal.scale)
  return _internal_scale();
}
inline void Expression_Literal_Decimal::_internal_set_scale(int32_t value) {
  
  scale_ = value;
}
inline void Expression_Literal_Decimal::set_scale(int32_t value) {
  _internal_set_scale(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.Literal.Decimal.scale)
}

// -------------------------------------------------------------------

// Expression_Literal_Map_KeyValue

// .substrait.Expression.Literal key = 1 [json_name = "key"];
inline bool Expression_Literal_Map_KeyValue::_internal_has_key() const {
  return this != internal_default_instance() && key_ != nullptr;
}
inline bool Expression_Literal_Map_KeyValue::has_key() const {
  return _internal_has_key();
}
inline void Expression_Literal_Map_KeyValue::clear_key() {
  if (GetArenaForAllocation() == nullptr && key_ != nullptr) {
    delete key_;
  }
  key_ = nullptr;
}
inline const ::substrait::Expression_Literal& Expression_Literal_Map_KeyValue::_internal_key() const {
  const ::substrait::Expression_Literal* p = key_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression_Literal&>(
      ::substrait::_Expression_Literal_default_instance_);
}
inline const ::substrait::Expression_Literal& Expression_Literal_Map_KeyValue::key() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.Map.KeyValue.key)
  return _internal_key();
}
inline void Expression_Literal_Map_KeyValue::unsafe_arena_set_allocated_key(
    ::substrait::Expression_Literal* key) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(key_);
  }
  key_ = key;
  if (key) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.Literal.Map.KeyValue.key)
}
inline ::substrait::Expression_Literal* Expression_Literal_Map_KeyValue::release_key() {
  
  ::substrait::Expression_Literal* temp = key_;
  key_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression_Literal* Expression_Literal_Map_KeyValue::unsafe_arena_release_key() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Literal.Map.KeyValue.key)
  
  ::substrait::Expression_Literal* temp = key_;
  key_ = nullptr;
  return temp;
}
inline ::substrait::Expression_Literal* Expression_Literal_Map_KeyValue::_internal_mutable_key() {
  
  if (key_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression_Literal>(GetArenaForAllocation());
    key_ = p;
  }
  return key_;
}
inline ::substrait::Expression_Literal* Expression_Literal_Map_KeyValue::mutable_key() {
  ::substrait::Expression_Literal* _msg = _internal_mutable_key();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Literal.Map.KeyValue.key)
  return _msg;
}
inline void Expression_Literal_Map_KeyValue::set_allocated_key(::substrait::Expression_Literal* key) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete key_;
  }
  if (key) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression_Literal>::GetOwningArena(key);
    if (message_arena != submessage_arena) {
      key = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, key, submessage_arena);
    }
    
  } else {
    
  }
  key_ = key;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.Literal.Map.KeyValue.key)
}

// .substrait.Expression.Literal value = 2 [json_name = "value"];
inline bool Expression_Literal_Map_KeyValue::_internal_has_value() const {
  return this != internal_default_instance() && value_ != nullptr;
}
inline bool Expression_Literal_Map_KeyValue::has_value() const {
  return _internal_has_value();
}
inline void Expression_Literal_Map_KeyValue::clear_value() {
  if (GetArenaForAllocation() == nullptr && value_ != nullptr) {
    delete value_;
  }
  value_ = nullptr;
}
inline const ::substrait::Expression_Literal& Expression_Literal_Map_KeyValue::_internal_value() const {
  const ::substrait::Expression_Literal* p = value_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression_Literal&>(
      ::substrait::_Expression_Literal_default_instance_);
}
inline const ::substrait::Expression_Literal& Expression_Literal_Map_KeyValue::value() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.Map.KeyValue.value)
  return _internal_value();
}
inline void Expression_Literal_Map_KeyValue::unsafe_arena_set_allocated_value(
    ::substrait::Expression_Literal* value) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(value_);
  }
  value_ = value;
  if (value) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.Literal.Map.KeyValue.value)
}
inline ::substrait::Expression_Literal* Expression_Literal_Map_KeyValue::release_value() {
  
  ::substrait::Expression_Literal* temp = value_;
  value_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression_Literal* Expression_Literal_Map_KeyValue::unsafe_arena_release_value() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Literal.Map.KeyValue.value)
  
  ::substrait::Expression_Literal* temp = value_;
  value_ = nullptr;
  return temp;
}
inline ::substrait::Expression_Literal* Expression_Literal_Map_KeyValue::_internal_mutable_value() {
  
  if (value_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression_Literal>(GetArenaForAllocation());
    value_ = p;
  }
  return value_;
}
inline ::substrait::Expression_Literal* Expression_Literal_Map_KeyValue::mutable_value() {
  ::substrait::Expression_Literal* _msg = _internal_mutable_value();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Literal.Map.KeyValue.value)
  return _msg;
}
inline void Expression_Literal_Map_KeyValue::set_allocated_value(::substrait::Expression_Literal* value) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete value_;
  }
  if (value) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression_Literal>::GetOwningArena(value);
    if (message_arena != submessage_arena) {
      value = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, value, submessage_arena);
    }
    
  } else {
    
  }
  value_ = value;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.Literal.Map.KeyValue.value)
}

// -------------------------------------------------------------------

// Expression_Literal_Map

// repeated .substrait.Expression.Literal.Map.KeyValue key_values = 1 [json_name = "keyValues"];
inline int Expression_Literal_Map::_internal_key_values_size() const {
  return key_values_.size();
}
inline int Expression_Literal_Map::key_values_size() const {
  return _internal_key_values_size();
}
inline void Expression_Literal_Map::clear_key_values() {
  key_values_.Clear();
}
inline ::substrait::Expression_Literal_Map_KeyValue* Expression_Literal_Map::mutable_key_values(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Literal.Map.key_values)
  return key_values_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_Literal_Map_KeyValue >*
Expression_Literal_Map::mutable_key_values() {
  // @@protoc_insertion_point(field_mutable_list:substrait.Expression.Literal.Map.key_values)
  return &key_values_;
}
inline const ::substrait::Expression_Literal_Map_KeyValue& Expression_Literal_Map::_internal_key_values(int index) const {
  return key_values_.Get(index);
}
inline const ::substrait::Expression_Literal_Map_KeyValue& Expression_Literal_Map::key_values(int index) const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.Map.key_values)
  return _internal_key_values(index);
}
inline ::substrait::Expression_Literal_Map_KeyValue* Expression_Literal_Map::_internal_add_key_values() {
  return key_values_.Add();
}
inline ::substrait::Expression_Literal_Map_KeyValue* Expression_Literal_Map::add_key_values() {
  ::substrait::Expression_Literal_Map_KeyValue* _add = _internal_add_key_values();
  // @@protoc_insertion_point(field_add:substrait.Expression.Literal.Map.key_values)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_Literal_Map_KeyValue >&
Expression_Literal_Map::key_values() const {
  // @@protoc_insertion_point(field_list:substrait.Expression.Literal.Map.key_values)
  return key_values_;
}

// -------------------------------------------------------------------

// Expression_Literal_IntervalYearToMonth

// int32 years = 1 [json_name = "years"];
inline void Expression_Literal_IntervalYearToMonth::clear_years() {
  years_ = 0;
}
inline int32_t Expression_Literal_IntervalYearToMonth::_internal_years() const {
  return years_;
}
inline int32_t Expression_Literal_IntervalYearToMonth::years() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.IntervalYearToMonth.years)
  return _internal_years();
}
inline void Expression_Literal_IntervalYearToMonth::_internal_set_years(int32_t value) {
  
  years_ = value;
}
inline void Expression_Literal_IntervalYearToMonth::set_years(int32_t value) {
  _internal_set_years(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.Literal.IntervalYearToMonth.years)
}

// int32 months = 2 [json_name = "months"];
inline void Expression_Literal_IntervalYearToMonth::clear_months() {
  months_ = 0;
}
inline int32_t Expression_Literal_IntervalYearToMonth::_internal_months() const {
  return months_;
}
inline int32_t Expression_Literal_IntervalYearToMonth::months() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.IntervalYearToMonth.months)
  return _internal_months();
}
inline void Expression_Literal_IntervalYearToMonth::_internal_set_months(int32_t value) {
  
  months_ = value;
}
inline void Expression_Literal_IntervalYearToMonth::set_months(int32_t value) {
  _internal_set_months(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.Literal.IntervalYearToMonth.months)
}

// -------------------------------------------------------------------

// Expression_Literal_IntervalDayToSecond

// int32 days = 1 [json_name = "days"];
inline void Expression_Literal_IntervalDayToSecond::clear_days() {
  days_ = 0;
}
inline int32_t Expression_Literal_IntervalDayToSecond::_internal_days() const {
  return days_;
}
inline int32_t Expression_Literal_IntervalDayToSecond::days() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.IntervalDayToSecond.days)
  return _internal_days();
}
inline void Expression_Literal_IntervalDayToSecond::_internal_set_days(int32_t value) {
  
  days_ = value;
}
inline void Expression_Literal_IntervalDayToSecond::set_days(int32_t value) {
  _internal_set_days(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.Literal.IntervalDayToSecond.days)
}

// int32 seconds = 2 [json_name = "seconds"];
inline void Expression_Literal_IntervalDayToSecond::clear_seconds() {
  seconds_ = 0;
}
inline int32_t Expression_Literal_IntervalDayToSecond::_internal_seconds() const {
  return seconds_;
}
inline int32_t Expression_Literal_IntervalDayToSecond::seconds() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.IntervalDayToSecond.seconds)
  return _internal_seconds();
}
inline void Expression_Literal_IntervalDayToSecond::_internal_set_seconds(int32_t value) {
  
  seconds_ = value;
}
inline void Expression_Literal_IntervalDayToSecond::set_seconds(int32_t value) {
  _internal_set_seconds(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.Literal.IntervalDayToSecond.seconds)
}

// -------------------------------------------------------------------

// Expression_Literal_Struct

// repeated .substrait.Expression.Literal fields = 1 [json_name = "fields"];
inline int Expression_Literal_Struct::_internal_fields_size() const {
  return fields_.size();
}
inline int Expression_Literal_Struct::fields_size() const {
  return _internal_fields_size();
}
inline void Expression_Literal_Struct::clear_fields() {
  fields_.Clear();
}
inline ::substrait::Expression_Literal* Expression_Literal_Struct::mutable_fields(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Literal.Struct.fields)
  return fields_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_Literal >*
Expression_Literal_Struct::mutable_fields() {
  // @@protoc_insertion_point(field_mutable_list:substrait.Expression.Literal.Struct.fields)
  return &fields_;
}
inline const ::substrait::Expression_Literal& Expression_Literal_Struct::_internal_fields(int index) const {
  return fields_.Get(index);
}
inline const ::substrait::Expression_Literal& Expression_Literal_Struct::fields(int index) const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.Struct.fields)
  return _internal_fields(index);
}
inline ::substrait::Expression_Literal* Expression_Literal_Struct::_internal_add_fields() {
  return fields_.Add();
}
inline ::substrait::Expression_Literal* Expression_Literal_Struct::add_fields() {
  ::substrait::Expression_Literal* _add = _internal_add_fields();
  // @@protoc_insertion_point(field_add:substrait.Expression.Literal.Struct.fields)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_Literal >&
Expression_Literal_Struct::fields() const {
  // @@protoc_insertion_point(field_list:substrait.Expression.Literal.Struct.fields)
  return fields_;
}

// -------------------------------------------------------------------

// Expression_Literal_List

// repeated .substrait.Expression.Literal values = 1 [json_name = "values"];
inline int Expression_Literal_List::_internal_values_size() const {
  return values_.size();
}
inline int Expression_Literal_List::values_size() const {
  return _internal_values_size();
}
inline void Expression_Literal_List::clear_values() {
  values_.Clear();
}
inline ::substrait::Expression_Literal* Expression_Literal_List::mutable_values(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Literal.List.values)
  return values_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_Literal >*
Expression_Literal_List::mutable_values() {
  // @@protoc_insertion_point(field_mutable_list:substrait.Expression.Literal.List.values)
  return &values_;
}
inline const ::substrait::Expression_Literal& Expression_Literal_List::_internal_values(int index) const {
  return values_.Get(index);
}
inline const ::substrait::Expression_Literal& Expression_Literal_List::values(int index) const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.List.values)
  return _internal_values(index);
}
inline ::substrait::Expression_Literal* Expression_Literal_List::_internal_add_values() {
  return values_.Add();
}
inline ::substrait::Expression_Literal* Expression_Literal_List::add_values() {
  ::substrait::Expression_Literal* _add = _internal_add_values();
  // @@protoc_insertion_point(field_add:substrait.Expression.Literal.List.values)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_Literal >&
Expression_Literal_List::values() const {
  // @@protoc_insertion_point(field_list:substrait.Expression.Literal.List.values)
  return values_;
}

// -------------------------------------------------------------------

// Expression_Literal

// bool boolean = 1 [json_name = "boolean"];
inline bool Expression_Literal::_internal_has_boolean() const {
  return literal_type_case() == kBoolean;
}
inline bool Expression_Literal::has_boolean() const {
  return _internal_has_boolean();
}
inline void Expression_Literal::set_has_boolean() {
  _oneof_case_[0] = kBoolean;
}
inline void Expression_Literal::clear_boolean() {
  if (_internal_has_boolean()) {
    literal_type_.boolean_ = false;
    clear_has_literal_type();
  }
}
inline bool Expression_Literal::_internal_boolean() const {
  if (_internal_has_boolean()) {
    return literal_type_.boolean_;
  }
  return false;
}
inline void Expression_Literal::_internal_set_boolean(bool value) {
  if (!_internal_has_boolean()) {
    clear_literal_type();
    set_has_boolean();
  }
  literal_type_.boolean_ = value;
}
inline bool Expression_Literal::boolean() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.boolean)
  return _internal_boolean();
}
inline void Expression_Literal::set_boolean(bool value) {
  _internal_set_boolean(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.Literal.boolean)
}

// int32 i8 = 2 [json_name = "i8"];
inline bool Expression_Literal::_internal_has_i8() const {
  return literal_type_case() == kI8;
}
inline bool Expression_Literal::has_i8() const {
  return _internal_has_i8();
}
inline void Expression_Literal::set_has_i8() {
  _oneof_case_[0] = kI8;
}
inline void Expression_Literal::clear_i8() {
  if (_internal_has_i8()) {
    literal_type_.i8_ = 0;
    clear_has_literal_type();
  }
}
inline int32_t Expression_Literal::_internal_i8() const {
  if (_internal_has_i8()) {
    return literal_type_.i8_;
  }
  return 0;
}
inline void Expression_Literal::_internal_set_i8(int32_t value) {
  if (!_internal_has_i8()) {
    clear_literal_type();
    set_has_i8();
  }
  literal_type_.i8_ = value;
}
inline int32_t Expression_Literal::i8() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.i8)
  return _internal_i8();
}
inline void Expression_Literal::set_i8(int32_t value) {
  _internal_set_i8(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.Literal.i8)
}

// int32 i16 = 3 [json_name = "i16"];
inline bool Expression_Literal::_internal_has_i16() const {
  return literal_type_case() == kI16;
}
inline bool Expression_Literal::has_i16() const {
  return _internal_has_i16();
}
inline void Expression_Literal::set_has_i16() {
  _oneof_case_[0] = kI16;
}
inline void Expression_Literal::clear_i16() {
  if (_internal_has_i16()) {
    literal_type_.i16_ = 0;
    clear_has_literal_type();
  }
}
inline int32_t Expression_Literal::_internal_i16() const {
  if (_internal_has_i16()) {
    return literal_type_.i16_;
  }
  return 0;
}
inline void Expression_Literal::_internal_set_i16(int32_t value) {
  if (!_internal_has_i16()) {
    clear_literal_type();
    set_has_i16();
  }
  literal_type_.i16_ = value;
}
inline int32_t Expression_Literal::i16() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.i16)
  return _internal_i16();
}
inline void Expression_Literal::set_i16(int32_t value) {
  _internal_set_i16(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.Literal.i16)
}

// int32 i32 = 5 [json_name = "i32"];
inline bool Expression_Literal::_internal_has_i32() const {
  return literal_type_case() == kI32;
}
inline bool Expression_Literal::has_i32() const {
  return _internal_has_i32();
}
inline void Expression_Literal::set_has_i32() {
  _oneof_case_[0] = kI32;
}
inline void Expression_Literal::clear_i32() {
  if (_internal_has_i32()) {
    literal_type_.i32_ = 0;
    clear_has_literal_type();
  }
}
inline int32_t Expression_Literal::_internal_i32() const {
  if (_internal_has_i32()) {
    return literal_type_.i32_;
  }
  return 0;
}
inline void Expression_Literal::_internal_set_i32(int32_t value) {
  if (!_internal_has_i32()) {
    clear_literal_type();
    set_has_i32();
  }
  literal_type_.i32_ = value;
}
inline int32_t Expression_Literal::i32() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.i32)
  return _internal_i32();
}
inline void Expression_Literal::set_i32(int32_t value) {
  _internal_set_i32(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.Literal.i32)
}

// int64 i64 = 7 [json_name = "i64"];
inline bool Expression_Literal::_internal_has_i64() const {
  return literal_type_case() == kI64;
}
inline bool Expression_Literal::has_i64() const {
  return _internal_has_i64();
}
inline void Expression_Literal::set_has_i64() {
  _oneof_case_[0] = kI64;
}
inline void Expression_Literal::clear_i64() {
  if (_internal_has_i64()) {
    literal_type_.i64_ = int64_t{0};
    clear_has_literal_type();
  }
}
inline int64_t Expression_Literal::_internal_i64() const {
  if (_internal_has_i64()) {
    return literal_type_.i64_;
  }
  return int64_t{0};
}
inline void Expression_Literal::_internal_set_i64(int64_t value) {
  if (!_internal_has_i64()) {
    clear_literal_type();
    set_has_i64();
  }
  literal_type_.i64_ = value;
}
inline int64_t Expression_Literal::i64() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.i64)
  return _internal_i64();
}
inline void Expression_Literal::set_i64(int64_t value) {
  _internal_set_i64(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.Literal.i64)
}

// float fp32 = 10 [json_name = "fp32"];
inline bool Expression_Literal::_internal_has_fp32() const {
  return literal_type_case() == kFp32;
}
inline bool Expression_Literal::has_fp32() const {
  return _internal_has_fp32();
}
inline void Expression_Literal::set_has_fp32() {
  _oneof_case_[0] = kFp32;
}
inline void Expression_Literal::clear_fp32() {
  if (_internal_has_fp32()) {
    literal_type_.fp32_ = 0;
    clear_has_literal_type();
  }
}
inline float Expression_Literal::_internal_fp32() const {
  if (_internal_has_fp32()) {
    return literal_type_.fp32_;
  }
  return 0;
}
inline void Expression_Literal::_internal_set_fp32(float value) {
  if (!_internal_has_fp32()) {
    clear_literal_type();
    set_has_fp32();
  }
  literal_type_.fp32_ = value;
}
inline float Expression_Literal::fp32() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.fp32)
  return _internal_fp32();
}
inline void Expression_Literal::set_fp32(float value) {
  _internal_set_fp32(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.Literal.fp32)
}

// double fp64 = 11 [json_name = "fp64"];
inline bool Expression_Literal::_internal_has_fp64() const {
  return literal_type_case() == kFp64;
}
inline bool Expression_Literal::has_fp64() const {
  return _internal_has_fp64();
}
inline void Expression_Literal::set_has_fp64() {
  _oneof_case_[0] = kFp64;
}
inline void Expression_Literal::clear_fp64() {
  if (_internal_has_fp64()) {
    literal_type_.fp64_ = 0;
    clear_has_literal_type();
  }
}
inline double Expression_Literal::_internal_fp64() const {
  if (_internal_has_fp64()) {
    return literal_type_.fp64_;
  }
  return 0;
}
inline void Expression_Literal::_internal_set_fp64(double value) {
  if (!_internal_has_fp64()) {
    clear_literal_type();
    set_has_fp64();
  }
  literal_type_.fp64_ = value;
}
inline double Expression_Literal::fp64() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.fp64)
  return _internal_fp64();
}
inline void Expression_Literal::set_fp64(double value) {
  _internal_set_fp64(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.Literal.fp64)
}

// string string = 12 [json_name = "string"];
inline bool Expression_Literal::_internal_has_string() const {
  return literal_type_case() == kString;
}
inline bool Expression_Literal::has_string() const {
  return _internal_has_string();
}
inline void Expression_Literal::set_has_string() {
  _oneof_case_[0] = kString;
}
inline void Expression_Literal::clear_string() {
  if (_internal_has_string()) {
    literal_type_.string_.Destroy(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
    clear_has_literal_type();
  }
}
inline const std::string& Expression_Literal::string() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.string)
  return _internal_string();
}
template <typename ArgT0, typename... ArgT>
inline void Expression_Literal::set_string(ArgT0&& arg0, ArgT... args) {
  if (!_internal_has_string()) {
    clear_literal_type();
    set_has_string();
    literal_type_.string_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  literal_type_.string_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
  // @@protoc_insertion_point(field_set:substrait.Expression.Literal.string)
}
inline std::string* Expression_Literal::mutable_string() {
  std::string* _s = _internal_mutable_string();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Literal.string)
  return _s;
}
inline const std::string& Expression_Literal::_internal_string() const {
  if (_internal_has_string()) {
    return literal_type_.string_.Get();
  }
  return ::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited();
}
inline void Expression_Literal::_internal_set_string(const std::string& value) {
  if (!_internal_has_string()) {
    clear_literal_type();
    set_has_string();
    literal_type_.string_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  literal_type_.string_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
}
inline std::string* Expression_Literal::_internal_mutable_string() {
  if (!_internal_has_string()) {
    clear_literal_type();
    set_has_string();
    literal_type_.string_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  return literal_type_.string_.Mutable(
      ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
}
inline std::string* Expression_Literal::release_string() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Literal.string)
  if (_internal_has_string()) {
    clear_has_literal_type();
    return literal_type_.string_.ReleaseNonDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
  } else {
    return nullptr;
  }
}
inline void Expression_Literal::set_allocated_string(std::string* string) {
  if (has_literal_type()) {
    clear_literal_type();
  }
  if (string != nullptr) {
    set_has_string();
    literal_type_.string_.UnsafeSetDefault(string);
    ::PROTOBUF_NAMESPACE_ID::Arena* arena = GetArenaForAllocation();
    if (arena != nullptr) {
      arena->Own(string);
    }
  }
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.Literal.string)
}

// bytes binary = 13 [json_name = "binary"];
inline bool Expression_Literal::_internal_has_binary() const {
  return literal_type_case() == kBinary;
}
inline bool Expression_Literal::has_binary() const {
  return _internal_has_binary();
}
inline void Expression_Literal::set_has_binary() {
  _oneof_case_[0] = kBinary;
}
inline void Expression_Literal::clear_binary() {
  if (_internal_has_binary()) {
    literal_type_.binary_.Destroy(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
    clear_has_literal_type();
  }
}
inline const std::string& Expression_Literal::binary() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.binary)
  return _internal_binary();
}
template <typename ArgT0, typename... ArgT>
inline void Expression_Literal::set_binary(ArgT0&& arg0, ArgT... args) {
  if (!_internal_has_binary()) {
    clear_literal_type();
    set_has_binary();
    literal_type_.binary_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  literal_type_.binary_.SetBytes(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
  // @@protoc_insertion_point(field_set:substrait.Expression.Literal.binary)
}
inline std::string* Expression_Literal::mutable_binary() {
  std::string* _s = _internal_mutable_binary();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Literal.binary)
  return _s;
}
inline const std::string& Expression_Literal::_internal_binary() const {
  if (_internal_has_binary()) {
    return literal_type_.binary_.Get();
  }
  return ::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited();
}
inline void Expression_Literal::_internal_set_binary(const std::string& value) {
  if (!_internal_has_binary()) {
    clear_literal_type();
    set_has_binary();
    literal_type_.binary_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  literal_type_.binary_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
}
inline std::string* Expression_Literal::_internal_mutable_binary() {
  if (!_internal_has_binary()) {
    clear_literal_type();
    set_has_binary();
    literal_type_.binary_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  return literal_type_.binary_.Mutable(
      ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
}
inline std::string* Expression_Literal::release_binary() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Literal.binary)
  if (_internal_has_binary()) {
    clear_has_literal_type();
    return literal_type_.binary_.ReleaseNonDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
  } else {
    return nullptr;
  }
}
inline void Expression_Literal::set_allocated_binary(std::string* binary) {
  if (has_literal_type()) {
    clear_literal_type();
  }
  if (binary != nullptr) {
    set_has_binary();
    literal_type_.binary_.UnsafeSetDefault(binary);
    ::PROTOBUF_NAMESPACE_ID::Arena* arena = GetArenaForAllocation();
    if (arena != nullptr) {
      arena->Own(binary);
    }
  }
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.Literal.binary)
}

// int64 timestamp = 14 [json_name = "timestamp"];
inline bool Expression_Literal::_internal_has_timestamp() const {
  return literal_type_case() == kTimestamp;
}
inline bool Expression_Literal::has_timestamp() const {
  return _internal_has_timestamp();
}
inline void Expression_Literal::set_has_timestamp() {
  _oneof_case_[0] = kTimestamp;
}
inline void Expression_Literal::clear_timestamp() {
  if (_internal_has_timestamp()) {
    literal_type_.timestamp_ = int64_t{0};
    clear_has_literal_type();
  }
}
inline int64_t Expression_Literal::_internal_timestamp() const {
  if (_internal_has_timestamp()) {
    return literal_type_.timestamp_;
  }
  return int64_t{0};
}
inline void Expression_Literal::_internal_set_timestamp(int64_t value) {
  if (!_internal_has_timestamp()) {
    clear_literal_type();
    set_has_timestamp();
  }
  literal_type_.timestamp_ = value;
}
inline int64_t Expression_Literal::timestamp() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.timestamp)
  return _internal_timestamp();
}
inline void Expression_Literal::set_timestamp(int64_t value) {
  _internal_set_timestamp(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.Literal.timestamp)
}

// int32 date = 16 [json_name = "date"];
inline bool Expression_Literal::_internal_has_date() const {
  return literal_type_case() == kDate;
}
inline bool Expression_Literal::has_date() const {
  return _internal_has_date();
}
inline void Expression_Literal::set_has_date() {
  _oneof_case_[0] = kDate;
}
inline void Expression_Literal::clear_date() {
  if (_internal_has_date()) {
    literal_type_.date_ = 0;
    clear_has_literal_type();
  }
}
inline int32_t Expression_Literal::_internal_date() const {
  if (_internal_has_date()) {
    return literal_type_.date_;
  }
  return 0;
}
inline void Expression_Literal::_internal_set_date(int32_t value) {
  if (!_internal_has_date()) {
    clear_literal_type();
    set_has_date();
  }
  literal_type_.date_ = value;
}
inline int32_t Expression_Literal::date() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.date)
  return _internal_date();
}
inline void Expression_Literal::set_date(int32_t value) {
  _internal_set_date(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.Literal.date)
}

// int64 time = 17 [json_name = "time"];
inline bool Expression_Literal::_internal_has_time() const {
  return literal_type_case() == kTime;
}
inline bool Expression_Literal::has_time() const {
  return _internal_has_time();
}
inline void Expression_Literal::set_has_time() {
  _oneof_case_[0] = kTime;
}
inline void Expression_Literal::clear_time() {
  if (_internal_has_time()) {
    literal_type_.time_ = int64_t{0};
    clear_has_literal_type();
  }
}
inline int64_t Expression_Literal::_internal_time() const {
  if (_internal_has_time()) {
    return literal_type_.time_;
  }
  return int64_t{0};
}
inline void Expression_Literal::_internal_set_time(int64_t value) {
  if (!_internal_has_time()) {
    clear_literal_type();
    set_has_time();
  }
  literal_type_.time_ = value;
}
inline int64_t Expression_Literal::time() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.time)
  return _internal_time();
}
inline void Expression_Literal::set_time(int64_t value) {
  _internal_set_time(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.Literal.time)
}

// .substrait.Expression.Literal.IntervalYearToMonth interval_year_to_month = 19 [json_name = "intervalYearToMonth"];
inline bool Expression_Literal::_internal_has_interval_year_to_month() const {
  return literal_type_case() == kIntervalYearToMonth;
}
inline bool Expression_Literal::has_interval_year_to_month() const {
  return _internal_has_interval_year_to_month();
}
inline void Expression_Literal::set_has_interval_year_to_month() {
  _oneof_case_[0] = kIntervalYearToMonth;
}
inline void Expression_Literal::clear_interval_year_to_month() {
  if (_internal_has_interval_year_to_month()) {
    if (GetArenaForAllocation() == nullptr) {
      delete literal_type_.interval_year_to_month_;
    }
    clear_has_literal_type();
  }
}
inline ::substrait::Expression_Literal_IntervalYearToMonth* Expression_Literal::release_interval_year_to_month() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Literal.interval_year_to_month)
  if (_internal_has_interval_year_to_month()) {
    clear_has_literal_type();
      ::substrait::Expression_Literal_IntervalYearToMonth* temp = literal_type_.interval_year_to_month_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    literal_type_.interval_year_to_month_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_Literal_IntervalYearToMonth& Expression_Literal::_internal_interval_year_to_month() const {
  return _internal_has_interval_year_to_month()
      ? *literal_type_.interval_year_to_month_
      : reinterpret_cast< ::substrait::Expression_Literal_IntervalYearToMonth&>(::substrait::_Expression_Literal_IntervalYearToMonth_default_instance_);
}
inline const ::substrait::Expression_Literal_IntervalYearToMonth& Expression_Literal::interval_year_to_month() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.interval_year_to_month)
  return _internal_interval_year_to_month();
}
inline ::substrait::Expression_Literal_IntervalYearToMonth* Expression_Literal::unsafe_arena_release_interval_year_to_month() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.Literal.interval_year_to_month)
  if (_internal_has_interval_year_to_month()) {
    clear_has_literal_type();
    ::substrait::Expression_Literal_IntervalYearToMonth* temp = literal_type_.interval_year_to_month_;
    literal_type_.interval_year_to_month_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_Literal::unsafe_arena_set_allocated_interval_year_to_month(::substrait::Expression_Literal_IntervalYearToMonth* interval_year_to_month) {
  clear_literal_type();
  if (interval_year_to_month) {
    set_has_interval_year_to_month();
    literal_type_.interval_year_to_month_ = interval_year_to_month;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.Literal.interval_year_to_month)
}
inline ::substrait::Expression_Literal_IntervalYearToMonth* Expression_Literal::_internal_mutable_interval_year_to_month() {
  if (!_internal_has_interval_year_to_month()) {
    clear_literal_type();
    set_has_interval_year_to_month();
    literal_type_.interval_year_to_month_ = CreateMaybeMessage< ::substrait::Expression_Literal_IntervalYearToMonth >(GetArenaForAllocation());
  }
  return literal_type_.interval_year_to_month_;
}
inline ::substrait::Expression_Literal_IntervalYearToMonth* Expression_Literal::mutable_interval_year_to_month() {
  ::substrait::Expression_Literal_IntervalYearToMonth* _msg = _internal_mutable_interval_year_to_month();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Literal.interval_year_to_month)
  return _msg;
}

// .substrait.Expression.Literal.IntervalDayToSecond interval_day_to_second = 20 [json_name = "intervalDayToSecond"];
inline bool Expression_Literal::_internal_has_interval_day_to_second() const {
  return literal_type_case() == kIntervalDayToSecond;
}
inline bool Expression_Literal::has_interval_day_to_second() const {
  return _internal_has_interval_day_to_second();
}
inline void Expression_Literal::set_has_interval_day_to_second() {
  _oneof_case_[0] = kIntervalDayToSecond;
}
inline void Expression_Literal::clear_interval_day_to_second() {
  if (_internal_has_interval_day_to_second()) {
    if (GetArenaForAllocation() == nullptr) {
      delete literal_type_.interval_day_to_second_;
    }
    clear_has_literal_type();
  }
}
inline ::substrait::Expression_Literal_IntervalDayToSecond* Expression_Literal::release_interval_day_to_second() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Literal.interval_day_to_second)
  if (_internal_has_interval_day_to_second()) {
    clear_has_literal_type();
      ::substrait::Expression_Literal_IntervalDayToSecond* temp = literal_type_.interval_day_to_second_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    literal_type_.interval_day_to_second_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_Literal_IntervalDayToSecond& Expression_Literal::_internal_interval_day_to_second() const {
  return _internal_has_interval_day_to_second()
      ? *literal_type_.interval_day_to_second_
      : reinterpret_cast< ::substrait::Expression_Literal_IntervalDayToSecond&>(::substrait::_Expression_Literal_IntervalDayToSecond_default_instance_);
}
inline const ::substrait::Expression_Literal_IntervalDayToSecond& Expression_Literal::interval_day_to_second() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.interval_day_to_second)
  return _internal_interval_day_to_second();
}
inline ::substrait::Expression_Literal_IntervalDayToSecond* Expression_Literal::unsafe_arena_release_interval_day_to_second() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.Literal.interval_day_to_second)
  if (_internal_has_interval_day_to_second()) {
    clear_has_literal_type();
    ::substrait::Expression_Literal_IntervalDayToSecond* temp = literal_type_.interval_day_to_second_;
    literal_type_.interval_day_to_second_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_Literal::unsafe_arena_set_allocated_interval_day_to_second(::substrait::Expression_Literal_IntervalDayToSecond* interval_day_to_second) {
  clear_literal_type();
  if (interval_day_to_second) {
    set_has_interval_day_to_second();
    literal_type_.interval_day_to_second_ = interval_day_to_second;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.Literal.interval_day_to_second)
}
inline ::substrait::Expression_Literal_IntervalDayToSecond* Expression_Literal::_internal_mutable_interval_day_to_second() {
  if (!_internal_has_interval_day_to_second()) {
    clear_literal_type();
    set_has_interval_day_to_second();
    literal_type_.interval_day_to_second_ = CreateMaybeMessage< ::substrait::Expression_Literal_IntervalDayToSecond >(GetArenaForAllocation());
  }
  return literal_type_.interval_day_to_second_;
}
inline ::substrait::Expression_Literal_IntervalDayToSecond* Expression_Literal::mutable_interval_day_to_second() {
  ::substrait::Expression_Literal_IntervalDayToSecond* _msg = _internal_mutable_interval_day_to_second();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Literal.interval_day_to_second)
  return _msg;
}

// string fixed_char = 21 [json_name = "fixedChar"];
inline bool Expression_Literal::_internal_has_fixed_char() const {
  return literal_type_case() == kFixedChar;
}
inline bool Expression_Literal::has_fixed_char() const {
  return _internal_has_fixed_char();
}
inline void Expression_Literal::set_has_fixed_char() {
  _oneof_case_[0] = kFixedChar;
}
inline void Expression_Literal::clear_fixed_char() {
  if (_internal_has_fixed_char()) {
    literal_type_.fixed_char_.Destroy(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
    clear_has_literal_type();
  }
}
inline const std::string& Expression_Literal::fixed_char() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.fixed_char)
  return _internal_fixed_char();
}
template <typename ArgT0, typename... ArgT>
inline void Expression_Literal::set_fixed_char(ArgT0&& arg0, ArgT... args) {
  if (!_internal_has_fixed_char()) {
    clear_literal_type();
    set_has_fixed_char();
    literal_type_.fixed_char_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  literal_type_.fixed_char_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
  // @@protoc_insertion_point(field_set:substrait.Expression.Literal.fixed_char)
}
inline std::string* Expression_Literal::mutable_fixed_char() {
  std::string* _s = _internal_mutable_fixed_char();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Literal.fixed_char)
  return _s;
}
inline const std::string& Expression_Literal::_internal_fixed_char() const {
  if (_internal_has_fixed_char()) {
    return literal_type_.fixed_char_.Get();
  }
  return ::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited();
}
inline void Expression_Literal::_internal_set_fixed_char(const std::string& value) {
  if (!_internal_has_fixed_char()) {
    clear_literal_type();
    set_has_fixed_char();
    literal_type_.fixed_char_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  literal_type_.fixed_char_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
}
inline std::string* Expression_Literal::_internal_mutable_fixed_char() {
  if (!_internal_has_fixed_char()) {
    clear_literal_type();
    set_has_fixed_char();
    literal_type_.fixed_char_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  return literal_type_.fixed_char_.Mutable(
      ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
}
inline std::string* Expression_Literal::release_fixed_char() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Literal.fixed_char)
  if (_internal_has_fixed_char()) {
    clear_has_literal_type();
    return literal_type_.fixed_char_.ReleaseNonDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
  } else {
    return nullptr;
  }
}
inline void Expression_Literal::set_allocated_fixed_char(std::string* fixed_char) {
  if (has_literal_type()) {
    clear_literal_type();
  }
  if (fixed_char != nullptr) {
    set_has_fixed_char();
    literal_type_.fixed_char_.UnsafeSetDefault(fixed_char);
    ::PROTOBUF_NAMESPACE_ID::Arena* arena = GetArenaForAllocation();
    if (arena != nullptr) {
      arena->Own(fixed_char);
    }
  }
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.Literal.fixed_char)
}

// .substrait.Expression.Literal.VarChar var_char = 22 [json_name = "varChar"];
inline bool Expression_Literal::_internal_has_var_char() const {
  return literal_type_case() == kVarChar;
}
inline bool Expression_Literal::has_var_char() const {
  return _internal_has_var_char();
}
inline void Expression_Literal::set_has_var_char() {
  _oneof_case_[0] = kVarChar;
}
inline void Expression_Literal::clear_var_char() {
  if (_internal_has_var_char()) {
    if (GetArenaForAllocation() == nullptr) {
      delete literal_type_.var_char_;
    }
    clear_has_literal_type();
  }
}
inline ::substrait::Expression_Literal_VarChar* Expression_Literal::release_var_char() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Literal.var_char)
  if (_internal_has_var_char()) {
    clear_has_literal_type();
      ::substrait::Expression_Literal_VarChar* temp = literal_type_.var_char_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    literal_type_.var_char_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_Literal_VarChar& Expression_Literal::_internal_var_char() const {
  return _internal_has_var_char()
      ? *literal_type_.var_char_
      : reinterpret_cast< ::substrait::Expression_Literal_VarChar&>(::substrait::_Expression_Literal_VarChar_default_instance_);
}
inline const ::substrait::Expression_Literal_VarChar& Expression_Literal::var_char() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.var_char)
  return _internal_var_char();
}
inline ::substrait::Expression_Literal_VarChar* Expression_Literal::unsafe_arena_release_var_char() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.Literal.var_char)
  if (_internal_has_var_char()) {
    clear_has_literal_type();
    ::substrait::Expression_Literal_VarChar* temp = literal_type_.var_char_;
    literal_type_.var_char_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_Literal::unsafe_arena_set_allocated_var_char(::substrait::Expression_Literal_VarChar* var_char) {
  clear_literal_type();
  if (var_char) {
    set_has_var_char();
    literal_type_.var_char_ = var_char;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.Literal.var_char)
}
inline ::substrait::Expression_Literal_VarChar* Expression_Literal::_internal_mutable_var_char() {
  if (!_internal_has_var_char()) {
    clear_literal_type();
    set_has_var_char();
    literal_type_.var_char_ = CreateMaybeMessage< ::substrait::Expression_Literal_VarChar >(GetArenaForAllocation());
  }
  return literal_type_.var_char_;
}
inline ::substrait::Expression_Literal_VarChar* Expression_Literal::mutable_var_char() {
  ::substrait::Expression_Literal_VarChar* _msg = _internal_mutable_var_char();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Literal.var_char)
  return _msg;
}

// bytes fixed_binary = 23 [json_name = "fixedBinary"];
inline bool Expression_Literal::_internal_has_fixed_binary() const {
  return literal_type_case() == kFixedBinary;
}
inline bool Expression_Literal::has_fixed_binary() const {
  return _internal_has_fixed_binary();
}
inline void Expression_Literal::set_has_fixed_binary() {
  _oneof_case_[0] = kFixedBinary;
}
inline void Expression_Literal::clear_fixed_binary() {
  if (_internal_has_fixed_binary()) {
    literal_type_.fixed_binary_.Destroy(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
    clear_has_literal_type();
  }
}
inline const std::string& Expression_Literal::fixed_binary() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.fixed_binary)
  return _internal_fixed_binary();
}
template <typename ArgT0, typename... ArgT>
inline void Expression_Literal::set_fixed_binary(ArgT0&& arg0, ArgT... args) {
  if (!_internal_has_fixed_binary()) {
    clear_literal_type();
    set_has_fixed_binary();
    literal_type_.fixed_binary_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  literal_type_.fixed_binary_.SetBytes(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
  // @@protoc_insertion_point(field_set:substrait.Expression.Literal.fixed_binary)
}
inline std::string* Expression_Literal::mutable_fixed_binary() {
  std::string* _s = _internal_mutable_fixed_binary();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Literal.fixed_binary)
  return _s;
}
inline const std::string& Expression_Literal::_internal_fixed_binary() const {
  if (_internal_has_fixed_binary()) {
    return literal_type_.fixed_binary_.Get();
  }
  return ::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited();
}
inline void Expression_Literal::_internal_set_fixed_binary(const std::string& value) {
  if (!_internal_has_fixed_binary()) {
    clear_literal_type();
    set_has_fixed_binary();
    literal_type_.fixed_binary_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  literal_type_.fixed_binary_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
}
inline std::string* Expression_Literal::_internal_mutable_fixed_binary() {
  if (!_internal_has_fixed_binary()) {
    clear_literal_type();
    set_has_fixed_binary();
    literal_type_.fixed_binary_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  return literal_type_.fixed_binary_.Mutable(
      ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
}
inline std::string* Expression_Literal::release_fixed_binary() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Literal.fixed_binary)
  if (_internal_has_fixed_binary()) {
    clear_has_literal_type();
    return literal_type_.fixed_binary_.ReleaseNonDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
  } else {
    return nullptr;
  }
}
inline void Expression_Literal::set_allocated_fixed_binary(std::string* fixed_binary) {
  if (has_literal_type()) {
    clear_literal_type();
  }
  if (fixed_binary != nullptr) {
    set_has_fixed_binary();
    literal_type_.fixed_binary_.UnsafeSetDefault(fixed_binary);
    ::PROTOBUF_NAMESPACE_ID::Arena* arena = GetArenaForAllocation();
    if (arena != nullptr) {
      arena->Own(fixed_binary);
    }
  }
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.Literal.fixed_binary)
}

// .substrait.Expression.Literal.Decimal decimal = 24 [json_name = "decimal"];
inline bool Expression_Literal::_internal_has_decimal() const {
  return literal_type_case() == kDecimal;
}
inline bool Expression_Literal::has_decimal() const {
  return _internal_has_decimal();
}
inline void Expression_Literal::set_has_decimal() {
  _oneof_case_[0] = kDecimal;
}
inline void Expression_Literal::clear_decimal() {
  if (_internal_has_decimal()) {
    if (GetArenaForAllocation() == nullptr) {
      delete literal_type_.decimal_;
    }
    clear_has_literal_type();
  }
}
inline ::substrait::Expression_Literal_Decimal* Expression_Literal::release_decimal() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Literal.decimal)
  if (_internal_has_decimal()) {
    clear_has_literal_type();
      ::substrait::Expression_Literal_Decimal* temp = literal_type_.decimal_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    literal_type_.decimal_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_Literal_Decimal& Expression_Literal::_internal_decimal() const {
  return _internal_has_decimal()
      ? *literal_type_.decimal_
      : reinterpret_cast< ::substrait::Expression_Literal_Decimal&>(::substrait::_Expression_Literal_Decimal_default_instance_);
}
inline const ::substrait::Expression_Literal_Decimal& Expression_Literal::decimal() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.decimal)
  return _internal_decimal();
}
inline ::substrait::Expression_Literal_Decimal* Expression_Literal::unsafe_arena_release_decimal() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.Literal.decimal)
  if (_internal_has_decimal()) {
    clear_has_literal_type();
    ::substrait::Expression_Literal_Decimal* temp = literal_type_.decimal_;
    literal_type_.decimal_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_Literal::unsafe_arena_set_allocated_decimal(::substrait::Expression_Literal_Decimal* decimal) {
  clear_literal_type();
  if (decimal) {
    set_has_decimal();
    literal_type_.decimal_ = decimal;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.Literal.decimal)
}
inline ::substrait::Expression_Literal_Decimal* Expression_Literal::_internal_mutable_decimal() {
  if (!_internal_has_decimal()) {
    clear_literal_type();
    set_has_decimal();
    literal_type_.decimal_ = CreateMaybeMessage< ::substrait::Expression_Literal_Decimal >(GetArenaForAllocation());
  }
  return literal_type_.decimal_;
}
inline ::substrait::Expression_Literal_Decimal* Expression_Literal::mutable_decimal() {
  ::substrait::Expression_Literal_Decimal* _msg = _internal_mutable_decimal();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Literal.decimal)
  return _msg;
}

// .substrait.Expression.Literal.Struct struct = 25 [json_name = "struct"];
inline bool Expression_Literal::_internal_has_struct_() const {
  return literal_type_case() == kStruct;
}
inline bool Expression_Literal::has_struct_() const {
  return _internal_has_struct_();
}
inline void Expression_Literal::set_has_struct_() {
  _oneof_case_[0] = kStruct;
}
inline void Expression_Literal::clear_struct_() {
  if (_internal_has_struct_()) {
    if (GetArenaForAllocation() == nullptr) {
      delete literal_type_.struct__;
    }
    clear_has_literal_type();
  }
}
inline ::substrait::Expression_Literal_Struct* Expression_Literal::release_struct_() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Literal.struct)
  if (_internal_has_struct_()) {
    clear_has_literal_type();
      ::substrait::Expression_Literal_Struct* temp = literal_type_.struct__;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    literal_type_.struct__ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_Literal_Struct& Expression_Literal::_internal_struct_() const {
  return _internal_has_struct_()
      ? *literal_type_.struct__
      : reinterpret_cast< ::substrait::Expression_Literal_Struct&>(::substrait::_Expression_Literal_Struct_default_instance_);
}
inline const ::substrait::Expression_Literal_Struct& Expression_Literal::struct_() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.struct)
  return _internal_struct_();
}
inline ::substrait::Expression_Literal_Struct* Expression_Literal::unsafe_arena_release_struct_() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.Literal.struct)
  if (_internal_has_struct_()) {
    clear_has_literal_type();
    ::substrait::Expression_Literal_Struct* temp = literal_type_.struct__;
    literal_type_.struct__ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_Literal::unsafe_arena_set_allocated_struct_(::substrait::Expression_Literal_Struct* struct_) {
  clear_literal_type();
  if (struct_) {
    set_has_struct_();
    literal_type_.struct__ = struct_;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.Literal.struct)
}
inline ::substrait::Expression_Literal_Struct* Expression_Literal::_internal_mutable_struct_() {
  if (!_internal_has_struct_()) {
    clear_literal_type();
    set_has_struct_();
    literal_type_.struct__ = CreateMaybeMessage< ::substrait::Expression_Literal_Struct >(GetArenaForAllocation());
  }
  return literal_type_.struct__;
}
inline ::substrait::Expression_Literal_Struct* Expression_Literal::mutable_struct_() {
  ::substrait::Expression_Literal_Struct* _msg = _internal_mutable_struct_();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Literal.struct)
  return _msg;
}

// .substrait.Expression.Literal.Map map = 26 [json_name = "map"];
inline bool Expression_Literal::_internal_has_map() const {
  return literal_type_case() == kMap;
}
inline bool Expression_Literal::has_map() const {
  return _internal_has_map();
}
inline void Expression_Literal::set_has_map() {
  _oneof_case_[0] = kMap;
}
inline void Expression_Literal::clear_map() {
  if (_internal_has_map()) {
    if (GetArenaForAllocation() == nullptr) {
      delete literal_type_.map_;
    }
    clear_has_literal_type();
  }
}
inline ::substrait::Expression_Literal_Map* Expression_Literal::release_map() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Literal.map)
  if (_internal_has_map()) {
    clear_has_literal_type();
      ::substrait::Expression_Literal_Map* temp = literal_type_.map_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    literal_type_.map_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_Literal_Map& Expression_Literal::_internal_map() const {
  return _internal_has_map()
      ? *literal_type_.map_
      : reinterpret_cast< ::substrait::Expression_Literal_Map&>(::substrait::_Expression_Literal_Map_default_instance_);
}
inline const ::substrait::Expression_Literal_Map& Expression_Literal::map() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.map)
  return _internal_map();
}
inline ::substrait::Expression_Literal_Map* Expression_Literal::unsafe_arena_release_map() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.Literal.map)
  if (_internal_has_map()) {
    clear_has_literal_type();
    ::substrait::Expression_Literal_Map* temp = literal_type_.map_;
    literal_type_.map_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_Literal::unsafe_arena_set_allocated_map(::substrait::Expression_Literal_Map* map) {
  clear_literal_type();
  if (map) {
    set_has_map();
    literal_type_.map_ = map;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.Literal.map)
}
inline ::substrait::Expression_Literal_Map* Expression_Literal::_internal_mutable_map() {
  if (!_internal_has_map()) {
    clear_literal_type();
    set_has_map();
    literal_type_.map_ = CreateMaybeMessage< ::substrait::Expression_Literal_Map >(GetArenaForAllocation());
  }
  return literal_type_.map_;
}
inline ::substrait::Expression_Literal_Map* Expression_Literal::mutable_map() {
  ::substrait::Expression_Literal_Map* _msg = _internal_mutable_map();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Literal.map)
  return _msg;
}

// int64 timestamp_tz = 27 [json_name = "timestampTz"];
inline bool Expression_Literal::_internal_has_timestamp_tz() const {
  return literal_type_case() == kTimestampTz;
}
inline bool Expression_Literal::has_timestamp_tz() const {
  return _internal_has_timestamp_tz();
}
inline void Expression_Literal::set_has_timestamp_tz() {
  _oneof_case_[0] = kTimestampTz;
}
inline void Expression_Literal::clear_timestamp_tz() {
  if (_internal_has_timestamp_tz()) {
    literal_type_.timestamp_tz_ = int64_t{0};
    clear_has_literal_type();
  }
}
inline int64_t Expression_Literal::_internal_timestamp_tz() const {
  if (_internal_has_timestamp_tz()) {
    return literal_type_.timestamp_tz_;
  }
  return int64_t{0};
}
inline void Expression_Literal::_internal_set_timestamp_tz(int64_t value) {
  if (!_internal_has_timestamp_tz()) {
    clear_literal_type();
    set_has_timestamp_tz();
  }
  literal_type_.timestamp_tz_ = value;
}
inline int64_t Expression_Literal::timestamp_tz() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.timestamp_tz)
  return _internal_timestamp_tz();
}
inline void Expression_Literal::set_timestamp_tz(int64_t value) {
  _internal_set_timestamp_tz(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.Literal.timestamp_tz)
}

// bytes uuid = 28 [json_name = "uuid"];
inline bool Expression_Literal::_internal_has_uuid() const {
  return literal_type_case() == kUuid;
}
inline bool Expression_Literal::has_uuid() const {
  return _internal_has_uuid();
}
inline void Expression_Literal::set_has_uuid() {
  _oneof_case_[0] = kUuid;
}
inline void Expression_Literal::clear_uuid() {
  if (_internal_has_uuid()) {
    literal_type_.uuid_.Destroy(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
    clear_has_literal_type();
  }
}
inline const std::string& Expression_Literal::uuid() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.uuid)
  return _internal_uuid();
}
template <typename ArgT0, typename... ArgT>
inline void Expression_Literal::set_uuid(ArgT0&& arg0, ArgT... args) {
  if (!_internal_has_uuid()) {
    clear_literal_type();
    set_has_uuid();
    literal_type_.uuid_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  literal_type_.uuid_.SetBytes(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
  // @@protoc_insertion_point(field_set:substrait.Expression.Literal.uuid)
}
inline std::string* Expression_Literal::mutable_uuid() {
  std::string* _s = _internal_mutable_uuid();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Literal.uuid)
  return _s;
}
inline const std::string& Expression_Literal::_internal_uuid() const {
  if (_internal_has_uuid()) {
    return literal_type_.uuid_.Get();
  }
  return ::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited();
}
inline void Expression_Literal::_internal_set_uuid(const std::string& value) {
  if (!_internal_has_uuid()) {
    clear_literal_type();
    set_has_uuid();
    literal_type_.uuid_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  literal_type_.uuid_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
}
inline std::string* Expression_Literal::_internal_mutable_uuid() {
  if (!_internal_has_uuid()) {
    clear_literal_type();
    set_has_uuid();
    literal_type_.uuid_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  return literal_type_.uuid_.Mutable(
      ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
}
inline std::string* Expression_Literal::release_uuid() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Literal.uuid)
  if (_internal_has_uuid()) {
    clear_has_literal_type();
    return literal_type_.uuid_.ReleaseNonDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
  } else {
    return nullptr;
  }
}
inline void Expression_Literal::set_allocated_uuid(std::string* uuid) {
  if (has_literal_type()) {
    clear_literal_type();
  }
  if (uuid != nullptr) {
    set_has_uuid();
    literal_type_.uuid_.UnsafeSetDefault(uuid);
    ::PROTOBUF_NAMESPACE_ID::Arena* arena = GetArenaForAllocation();
    if (arena != nullptr) {
      arena->Own(uuid);
    }
  }
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.Literal.uuid)
}

// .substrait.Type null = 29 [json_name = "null"];
inline bool Expression_Literal::_internal_has_null() const {
  return literal_type_case() == kNull;
}
inline bool Expression_Literal::has_null() const {
  return _internal_has_null();
}
inline void Expression_Literal::set_has_null() {
  _oneof_case_[0] = kNull;
}
inline ::substrait::Type* Expression_Literal::release_null() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Literal.null)
  if (_internal_has_null()) {
    clear_has_literal_type();
      ::substrait::Type* temp = literal_type_.null_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    literal_type_.null_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Type& Expression_Literal::_internal_null() const {
  return _internal_has_null()
      ? *literal_type_.null_
      : reinterpret_cast< ::substrait::Type&>(::substrait::_Type_default_instance_);
}
inline const ::substrait::Type& Expression_Literal::null() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.null)
  return _internal_null();
}
inline ::substrait::Type* Expression_Literal::unsafe_arena_release_null() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.Literal.null)
  if (_internal_has_null()) {
    clear_has_literal_type();
    ::substrait::Type* temp = literal_type_.null_;
    literal_type_.null_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_Literal::unsafe_arena_set_allocated_null(::substrait::Type* null) {
  clear_literal_type();
  if (null) {
    set_has_null();
    literal_type_.null_ = null;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.Literal.null)
}
inline ::substrait::Type* Expression_Literal::_internal_mutable_null() {
  if (!_internal_has_null()) {
    clear_literal_type();
    set_has_null();
    literal_type_.null_ = CreateMaybeMessage< ::substrait::Type >(GetArenaForAllocation());
  }
  return literal_type_.null_;
}
inline ::substrait::Type* Expression_Literal::mutable_null() {
  ::substrait::Type* _msg = _internal_mutable_null();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Literal.null)
  return _msg;
}

// .substrait.Expression.Literal.List list = 30 [json_name = "list"];
inline bool Expression_Literal::_internal_has_list() const {
  return literal_type_case() == kList;
}
inline bool Expression_Literal::has_list() const {
  return _internal_has_list();
}
inline void Expression_Literal::set_has_list() {
  _oneof_case_[0] = kList;
}
inline void Expression_Literal::clear_list() {
  if (_internal_has_list()) {
    if (GetArenaForAllocation() == nullptr) {
      delete literal_type_.list_;
    }
    clear_has_literal_type();
  }
}
inline ::substrait::Expression_Literal_List* Expression_Literal::release_list() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Literal.list)
  if (_internal_has_list()) {
    clear_has_literal_type();
      ::substrait::Expression_Literal_List* temp = literal_type_.list_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    literal_type_.list_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_Literal_List& Expression_Literal::_internal_list() const {
  return _internal_has_list()
      ? *literal_type_.list_
      : reinterpret_cast< ::substrait::Expression_Literal_List&>(::substrait::_Expression_Literal_List_default_instance_);
}
inline const ::substrait::Expression_Literal_List& Expression_Literal::list() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.list)
  return _internal_list();
}
inline ::substrait::Expression_Literal_List* Expression_Literal::unsafe_arena_release_list() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.Literal.list)
  if (_internal_has_list()) {
    clear_has_literal_type();
    ::substrait::Expression_Literal_List* temp = literal_type_.list_;
    literal_type_.list_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_Literal::unsafe_arena_set_allocated_list(::substrait::Expression_Literal_List* list) {
  clear_literal_type();
  if (list) {
    set_has_list();
    literal_type_.list_ = list;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.Literal.list)
}
inline ::substrait::Expression_Literal_List* Expression_Literal::_internal_mutable_list() {
  if (!_internal_has_list()) {
    clear_literal_type();
    set_has_list();
    literal_type_.list_ = CreateMaybeMessage< ::substrait::Expression_Literal_List >(GetArenaForAllocation());
  }
  return literal_type_.list_;
}
inline ::substrait::Expression_Literal_List* Expression_Literal::mutable_list() {
  ::substrait::Expression_Literal_List* _msg = _internal_mutable_list();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Literal.list)
  return _msg;
}

// .substrait.Type.List empty_list = 31 [json_name = "emptyList"];
inline bool Expression_Literal::_internal_has_empty_list() const {
  return literal_type_case() == kEmptyList;
}
inline bool Expression_Literal::has_empty_list() const {
  return _internal_has_empty_list();
}
inline void Expression_Literal::set_has_empty_list() {
  _oneof_case_[0] = kEmptyList;
}
inline ::substrait::Type_List* Expression_Literal::release_empty_list() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Literal.empty_list)
  if (_internal_has_empty_list()) {
    clear_has_literal_type();
      ::substrait::Type_List* temp = literal_type_.empty_list_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    literal_type_.empty_list_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Type_List& Expression_Literal::_internal_empty_list() const {
  return _internal_has_empty_list()
      ? *literal_type_.empty_list_
      : reinterpret_cast< ::substrait::Type_List&>(::substrait::_Type_List_default_instance_);
}
inline const ::substrait::Type_List& Expression_Literal::empty_list() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.empty_list)
  return _internal_empty_list();
}
inline ::substrait::Type_List* Expression_Literal::unsafe_arena_release_empty_list() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.Literal.empty_list)
  if (_internal_has_empty_list()) {
    clear_has_literal_type();
    ::substrait::Type_List* temp = literal_type_.empty_list_;
    literal_type_.empty_list_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_Literal::unsafe_arena_set_allocated_empty_list(::substrait::Type_List* empty_list) {
  clear_literal_type();
  if (empty_list) {
    set_has_empty_list();
    literal_type_.empty_list_ = empty_list;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.Literal.empty_list)
}
inline ::substrait::Type_List* Expression_Literal::_internal_mutable_empty_list() {
  if (!_internal_has_empty_list()) {
    clear_literal_type();
    set_has_empty_list();
    literal_type_.empty_list_ = CreateMaybeMessage< ::substrait::Type_List >(GetArenaForAllocation());
  }
  return literal_type_.empty_list_;
}
inline ::substrait::Type_List* Expression_Literal::mutable_empty_list() {
  ::substrait::Type_List* _msg = _internal_mutable_empty_list();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Literal.empty_list)
  return _msg;
}

// .substrait.Type.Map empty_map = 32 [json_name = "emptyMap"];
inline bool Expression_Literal::_internal_has_empty_map() const {
  return literal_type_case() == kEmptyMap;
}
inline bool Expression_Literal::has_empty_map() const {
  return _internal_has_empty_map();
}
inline void Expression_Literal::set_has_empty_map() {
  _oneof_case_[0] = kEmptyMap;
}
inline ::substrait::Type_Map* Expression_Literal::release_empty_map() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Literal.empty_map)
  if (_internal_has_empty_map()) {
    clear_has_literal_type();
      ::substrait::Type_Map* temp = literal_type_.empty_map_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    literal_type_.empty_map_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Type_Map& Expression_Literal::_internal_empty_map() const {
  return _internal_has_empty_map()
      ? *literal_type_.empty_map_
      : reinterpret_cast< ::substrait::Type_Map&>(::substrait::_Type_Map_default_instance_);
}
inline const ::substrait::Type_Map& Expression_Literal::empty_map() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.empty_map)
  return _internal_empty_map();
}
inline ::substrait::Type_Map* Expression_Literal::unsafe_arena_release_empty_map() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.Literal.empty_map)
  if (_internal_has_empty_map()) {
    clear_has_literal_type();
    ::substrait::Type_Map* temp = literal_type_.empty_map_;
    literal_type_.empty_map_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_Literal::unsafe_arena_set_allocated_empty_map(::substrait::Type_Map* empty_map) {
  clear_literal_type();
  if (empty_map) {
    set_has_empty_map();
    literal_type_.empty_map_ = empty_map;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.Literal.empty_map)
}
inline ::substrait::Type_Map* Expression_Literal::_internal_mutable_empty_map() {
  if (!_internal_has_empty_map()) {
    clear_literal_type();
    set_has_empty_map();
    literal_type_.empty_map_ = CreateMaybeMessage< ::substrait::Type_Map >(GetArenaForAllocation());
  }
  return literal_type_.empty_map_;
}
inline ::substrait::Type_Map* Expression_Literal::mutable_empty_map() {
  ::substrait::Type_Map* _msg = _internal_mutable_empty_map();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Literal.empty_map)
  return _msg;
}

// bool nullable = 50 [json_name = "nullable"];
inline void Expression_Literal::clear_nullable() {
  nullable_ = false;
}
inline bool Expression_Literal::_internal_nullable() const {
  return nullable_;
}
inline bool Expression_Literal::nullable() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Literal.nullable)
  return _internal_nullable();
}
inline void Expression_Literal::_internal_set_nullable(bool value) {
  
  nullable_ = value;
}
inline void Expression_Literal::set_nullable(bool value) {
  _internal_set_nullable(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.Literal.nullable)
}

inline bool Expression_Literal::has_literal_type() const {
  return literal_type_case() != LITERAL_TYPE_NOT_SET;
}
inline void Expression_Literal::clear_has_literal_type() {
  _oneof_case_[0] = LITERAL_TYPE_NOT_SET;
}
inline Expression_Literal::LiteralTypeCase Expression_Literal::literal_type_case() const {
  return Expression_Literal::LiteralTypeCase(_oneof_case_[0]);
}
// -------------------------------------------------------------------

// Expression_ScalarFunction

// uint32 function_reference = 1 [json_name = "functionReference"];
inline void Expression_ScalarFunction::clear_function_reference() {
  function_reference_ = 0u;
}
inline uint32_t Expression_ScalarFunction::_internal_function_reference() const {
  return function_reference_;
}
inline uint32_t Expression_ScalarFunction::function_reference() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.ScalarFunction.function_reference)
  return _internal_function_reference();
}
inline void Expression_ScalarFunction::_internal_set_function_reference(uint32_t value) {
  
  function_reference_ = value;
}
inline void Expression_ScalarFunction::set_function_reference(uint32_t value) {
  _internal_set_function_reference(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.ScalarFunction.function_reference)
}

// repeated .substrait.Expression args = 2 [json_name = "args"];
inline int Expression_ScalarFunction::_internal_args_size() const {
  return args_.size();
}
inline int Expression_ScalarFunction::args_size() const {
  return _internal_args_size();
}
inline void Expression_ScalarFunction::clear_args() {
  args_.Clear();
}
inline ::substrait::Expression* Expression_ScalarFunction::mutable_args(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.Expression.ScalarFunction.args)
  return args_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >*
Expression_ScalarFunction::mutable_args() {
  // @@protoc_insertion_point(field_mutable_list:substrait.Expression.ScalarFunction.args)
  return &args_;
}
inline const ::substrait::Expression& Expression_ScalarFunction::_internal_args(int index) const {
  return args_.Get(index);
}
inline const ::substrait::Expression& Expression_ScalarFunction::args(int index) const {
  // @@protoc_insertion_point(field_get:substrait.Expression.ScalarFunction.args)
  return _internal_args(index);
}
inline ::substrait::Expression* Expression_ScalarFunction::_internal_add_args() {
  return args_.Add();
}
inline ::substrait::Expression* Expression_ScalarFunction::add_args() {
  ::substrait::Expression* _add = _internal_add_args();
  // @@protoc_insertion_point(field_add:substrait.Expression.ScalarFunction.args)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >&
Expression_ScalarFunction::args() const {
  // @@protoc_insertion_point(field_list:substrait.Expression.ScalarFunction.args)
  return args_;
}

// .substrait.Type output_type = 3 [json_name = "outputType"];
inline bool Expression_ScalarFunction::_internal_has_output_type() const {
  return this != internal_default_instance() && output_type_ != nullptr;
}
inline bool Expression_ScalarFunction::has_output_type() const {
  return _internal_has_output_type();
}
inline const ::substrait::Type& Expression_ScalarFunction::_internal_output_type() const {
  const ::substrait::Type* p = output_type_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Type&>(
      ::substrait::_Type_default_instance_);
}
inline const ::substrait::Type& Expression_ScalarFunction::output_type() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.ScalarFunction.output_type)
  return _internal_output_type();
}
inline void Expression_ScalarFunction::unsafe_arena_set_allocated_output_type(
    ::substrait::Type* output_type) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(output_type_);
  }
  output_type_ = output_type;
  if (output_type) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.ScalarFunction.output_type)
}
inline ::substrait::Type* Expression_ScalarFunction::release_output_type() {
  
  ::substrait::Type* temp = output_type_;
  output_type_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Type* Expression_ScalarFunction::unsafe_arena_release_output_type() {
  // @@protoc_insertion_point(field_release:substrait.Expression.ScalarFunction.output_type)
  
  ::substrait::Type* temp = output_type_;
  output_type_ = nullptr;
  return temp;
}
inline ::substrait::Type* Expression_ScalarFunction::_internal_mutable_output_type() {
  
  if (output_type_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Type>(GetArenaForAllocation());
    output_type_ = p;
  }
  return output_type_;
}
inline ::substrait::Type* Expression_ScalarFunction::mutable_output_type() {
  ::substrait::Type* _msg = _internal_mutable_output_type();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.ScalarFunction.output_type)
  return _msg;
}
inline void Expression_ScalarFunction::set_allocated_output_type(::substrait::Type* output_type) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(output_type_);
  }
  if (output_type) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(output_type));
    if (message_arena != submessage_arena) {
      output_type = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, output_type, submessage_arena);
    }
    
  } else {
    
  }
  output_type_ = output_type;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.ScalarFunction.output_type)
}

// -------------------------------------------------------------------

// Expression_WindowFunction_Bound_Preceding

// int64 offset = 1 [json_name = "offset"];
inline void Expression_WindowFunction_Bound_Preceding::clear_offset() {
  offset_ = int64_t{0};
}
inline int64_t Expression_WindowFunction_Bound_Preceding::_internal_offset() const {
  return offset_;
}
inline int64_t Expression_WindowFunction_Bound_Preceding::offset() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.WindowFunction.Bound.Preceding.offset)
  return _internal_offset();
}
inline void Expression_WindowFunction_Bound_Preceding::_internal_set_offset(int64_t value) {
  
  offset_ = value;
}
inline void Expression_WindowFunction_Bound_Preceding::set_offset(int64_t value) {
  _internal_set_offset(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.WindowFunction.Bound.Preceding.offset)
}

// -------------------------------------------------------------------

// Expression_WindowFunction_Bound_Following

// int64 offset = 1 [json_name = "offset"];
inline void Expression_WindowFunction_Bound_Following::clear_offset() {
  offset_ = int64_t{0};
}
inline int64_t Expression_WindowFunction_Bound_Following::_internal_offset() const {
  return offset_;
}
inline int64_t Expression_WindowFunction_Bound_Following::offset() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.WindowFunction.Bound.Following.offset)
  return _internal_offset();
}
inline void Expression_WindowFunction_Bound_Following::_internal_set_offset(int64_t value) {
  
  offset_ = value;
}
inline void Expression_WindowFunction_Bound_Following::set_offset(int64_t value) {
  _internal_set_offset(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.WindowFunction.Bound.Following.offset)
}

// -------------------------------------------------------------------

// Expression_WindowFunction_Bound_CurrentRow

// -------------------------------------------------------------------

// Expression_WindowFunction_Bound_Unbounded

// -------------------------------------------------------------------

// Expression_WindowFunction_Bound

// .substrait.Expression.WindowFunction.Bound.Preceding preceding = 1 [json_name = "preceding"];
inline bool Expression_WindowFunction_Bound::_internal_has_preceding() const {
  return kind_case() == kPreceding;
}
inline bool Expression_WindowFunction_Bound::has_preceding() const {
  return _internal_has_preceding();
}
inline void Expression_WindowFunction_Bound::set_has_preceding() {
  _oneof_case_[0] = kPreceding;
}
inline void Expression_WindowFunction_Bound::clear_preceding() {
  if (_internal_has_preceding()) {
    if (GetArenaForAllocation() == nullptr) {
      delete kind_.preceding_;
    }
    clear_has_kind();
  }
}
inline ::substrait::Expression_WindowFunction_Bound_Preceding* Expression_WindowFunction_Bound::release_preceding() {
  // @@protoc_insertion_point(field_release:substrait.Expression.WindowFunction.Bound.preceding)
  if (_internal_has_preceding()) {
    clear_has_kind();
      ::substrait::Expression_WindowFunction_Bound_Preceding* temp = kind_.preceding_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    kind_.preceding_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_WindowFunction_Bound_Preceding& Expression_WindowFunction_Bound::_internal_preceding() const {
  return _internal_has_preceding()
      ? *kind_.preceding_
      : reinterpret_cast< ::substrait::Expression_WindowFunction_Bound_Preceding&>(::substrait::_Expression_WindowFunction_Bound_Preceding_default_instance_);
}
inline const ::substrait::Expression_WindowFunction_Bound_Preceding& Expression_WindowFunction_Bound::preceding() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.WindowFunction.Bound.preceding)
  return _internal_preceding();
}
inline ::substrait::Expression_WindowFunction_Bound_Preceding* Expression_WindowFunction_Bound::unsafe_arena_release_preceding() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.WindowFunction.Bound.preceding)
  if (_internal_has_preceding()) {
    clear_has_kind();
    ::substrait::Expression_WindowFunction_Bound_Preceding* temp = kind_.preceding_;
    kind_.preceding_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_WindowFunction_Bound::unsafe_arena_set_allocated_preceding(::substrait::Expression_WindowFunction_Bound_Preceding* preceding) {
  clear_kind();
  if (preceding) {
    set_has_preceding();
    kind_.preceding_ = preceding;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.WindowFunction.Bound.preceding)
}
inline ::substrait::Expression_WindowFunction_Bound_Preceding* Expression_WindowFunction_Bound::_internal_mutable_preceding() {
  if (!_internal_has_preceding()) {
    clear_kind();
    set_has_preceding();
    kind_.preceding_ = CreateMaybeMessage< ::substrait::Expression_WindowFunction_Bound_Preceding >(GetArenaForAllocation());
  }
  return kind_.preceding_;
}
inline ::substrait::Expression_WindowFunction_Bound_Preceding* Expression_WindowFunction_Bound::mutable_preceding() {
  ::substrait::Expression_WindowFunction_Bound_Preceding* _msg = _internal_mutable_preceding();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.WindowFunction.Bound.preceding)
  return _msg;
}

// .substrait.Expression.WindowFunction.Bound.Following following = 2 [json_name = "following"];
inline bool Expression_WindowFunction_Bound::_internal_has_following() const {
  return kind_case() == kFollowing;
}
inline bool Expression_WindowFunction_Bound::has_following() const {
  return _internal_has_following();
}
inline void Expression_WindowFunction_Bound::set_has_following() {
  _oneof_case_[0] = kFollowing;
}
inline void Expression_WindowFunction_Bound::clear_following() {
  if (_internal_has_following()) {
    if (GetArenaForAllocation() == nullptr) {
      delete kind_.following_;
    }
    clear_has_kind();
  }
}
inline ::substrait::Expression_WindowFunction_Bound_Following* Expression_WindowFunction_Bound::release_following() {
  // @@protoc_insertion_point(field_release:substrait.Expression.WindowFunction.Bound.following)
  if (_internal_has_following()) {
    clear_has_kind();
      ::substrait::Expression_WindowFunction_Bound_Following* temp = kind_.following_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    kind_.following_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_WindowFunction_Bound_Following& Expression_WindowFunction_Bound::_internal_following() const {
  return _internal_has_following()
      ? *kind_.following_
      : reinterpret_cast< ::substrait::Expression_WindowFunction_Bound_Following&>(::substrait::_Expression_WindowFunction_Bound_Following_default_instance_);
}
inline const ::substrait::Expression_WindowFunction_Bound_Following& Expression_WindowFunction_Bound::following() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.WindowFunction.Bound.following)
  return _internal_following();
}
inline ::substrait::Expression_WindowFunction_Bound_Following* Expression_WindowFunction_Bound::unsafe_arena_release_following() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.WindowFunction.Bound.following)
  if (_internal_has_following()) {
    clear_has_kind();
    ::substrait::Expression_WindowFunction_Bound_Following* temp = kind_.following_;
    kind_.following_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_WindowFunction_Bound::unsafe_arena_set_allocated_following(::substrait::Expression_WindowFunction_Bound_Following* following) {
  clear_kind();
  if (following) {
    set_has_following();
    kind_.following_ = following;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.WindowFunction.Bound.following)
}
inline ::substrait::Expression_WindowFunction_Bound_Following* Expression_WindowFunction_Bound::_internal_mutable_following() {
  if (!_internal_has_following()) {
    clear_kind();
    set_has_following();
    kind_.following_ = CreateMaybeMessage< ::substrait::Expression_WindowFunction_Bound_Following >(GetArenaForAllocation());
  }
  return kind_.following_;
}
inline ::substrait::Expression_WindowFunction_Bound_Following* Expression_WindowFunction_Bound::mutable_following() {
  ::substrait::Expression_WindowFunction_Bound_Following* _msg = _internal_mutable_following();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.WindowFunction.Bound.following)
  return _msg;
}

// .substrait.Expression.WindowFunction.Bound.CurrentRow current_row = 3 [json_name = "currentRow"];
inline bool Expression_WindowFunction_Bound::_internal_has_current_row() const {
  return kind_case() == kCurrentRow;
}
inline bool Expression_WindowFunction_Bound::has_current_row() const {
  return _internal_has_current_row();
}
inline void Expression_WindowFunction_Bound::set_has_current_row() {
  _oneof_case_[0] = kCurrentRow;
}
inline void Expression_WindowFunction_Bound::clear_current_row() {
  if (_internal_has_current_row()) {
    if (GetArenaForAllocation() == nullptr) {
      delete kind_.current_row_;
    }
    clear_has_kind();
  }
}
inline ::substrait::Expression_WindowFunction_Bound_CurrentRow* Expression_WindowFunction_Bound::release_current_row() {
  // @@protoc_insertion_point(field_release:substrait.Expression.WindowFunction.Bound.current_row)
  if (_internal_has_current_row()) {
    clear_has_kind();
      ::substrait::Expression_WindowFunction_Bound_CurrentRow* temp = kind_.current_row_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    kind_.current_row_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_WindowFunction_Bound_CurrentRow& Expression_WindowFunction_Bound::_internal_current_row() const {
  return _internal_has_current_row()
      ? *kind_.current_row_
      : reinterpret_cast< ::substrait::Expression_WindowFunction_Bound_CurrentRow&>(::substrait::_Expression_WindowFunction_Bound_CurrentRow_default_instance_);
}
inline const ::substrait::Expression_WindowFunction_Bound_CurrentRow& Expression_WindowFunction_Bound::current_row() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.WindowFunction.Bound.current_row)
  return _internal_current_row();
}
inline ::substrait::Expression_WindowFunction_Bound_CurrentRow* Expression_WindowFunction_Bound::unsafe_arena_release_current_row() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.WindowFunction.Bound.current_row)
  if (_internal_has_current_row()) {
    clear_has_kind();
    ::substrait::Expression_WindowFunction_Bound_CurrentRow* temp = kind_.current_row_;
    kind_.current_row_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_WindowFunction_Bound::unsafe_arena_set_allocated_current_row(::substrait::Expression_WindowFunction_Bound_CurrentRow* current_row) {
  clear_kind();
  if (current_row) {
    set_has_current_row();
    kind_.current_row_ = current_row;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.WindowFunction.Bound.current_row)
}
inline ::substrait::Expression_WindowFunction_Bound_CurrentRow* Expression_WindowFunction_Bound::_internal_mutable_current_row() {
  if (!_internal_has_current_row()) {
    clear_kind();
    set_has_current_row();
    kind_.current_row_ = CreateMaybeMessage< ::substrait::Expression_WindowFunction_Bound_CurrentRow >(GetArenaForAllocation());
  }
  return kind_.current_row_;
}
inline ::substrait::Expression_WindowFunction_Bound_CurrentRow* Expression_WindowFunction_Bound::mutable_current_row() {
  ::substrait::Expression_WindowFunction_Bound_CurrentRow* _msg = _internal_mutable_current_row();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.WindowFunction.Bound.current_row)
  return _msg;
}

// .substrait.Expression.WindowFunction.Bound.Unbounded unbounded = 4 [json_name = "unbounded"];
inline bool Expression_WindowFunction_Bound::_internal_has_unbounded() const {
  return kind_case() == kUnbounded;
}
inline bool Expression_WindowFunction_Bound::has_unbounded() const {
  return _internal_has_unbounded();
}
inline void Expression_WindowFunction_Bound::set_has_unbounded() {
  _oneof_case_[0] = kUnbounded;
}
inline void Expression_WindowFunction_Bound::clear_unbounded() {
  if (_internal_has_unbounded()) {
    if (GetArenaForAllocation() == nullptr) {
      delete kind_.unbounded_;
    }
    clear_has_kind();
  }
}
inline ::substrait::Expression_WindowFunction_Bound_Unbounded* Expression_WindowFunction_Bound::release_unbounded() {
  // @@protoc_insertion_point(field_release:substrait.Expression.WindowFunction.Bound.unbounded)
  if (_internal_has_unbounded()) {
    clear_has_kind();
      ::substrait::Expression_WindowFunction_Bound_Unbounded* temp = kind_.unbounded_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    kind_.unbounded_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_WindowFunction_Bound_Unbounded& Expression_WindowFunction_Bound::_internal_unbounded() const {
  return _internal_has_unbounded()
      ? *kind_.unbounded_
      : reinterpret_cast< ::substrait::Expression_WindowFunction_Bound_Unbounded&>(::substrait::_Expression_WindowFunction_Bound_Unbounded_default_instance_);
}
inline const ::substrait::Expression_WindowFunction_Bound_Unbounded& Expression_WindowFunction_Bound::unbounded() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.WindowFunction.Bound.unbounded)
  return _internal_unbounded();
}
inline ::substrait::Expression_WindowFunction_Bound_Unbounded* Expression_WindowFunction_Bound::unsafe_arena_release_unbounded() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.WindowFunction.Bound.unbounded)
  if (_internal_has_unbounded()) {
    clear_has_kind();
    ::substrait::Expression_WindowFunction_Bound_Unbounded* temp = kind_.unbounded_;
    kind_.unbounded_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_WindowFunction_Bound::unsafe_arena_set_allocated_unbounded(::substrait::Expression_WindowFunction_Bound_Unbounded* unbounded) {
  clear_kind();
  if (unbounded) {
    set_has_unbounded();
    kind_.unbounded_ = unbounded;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.WindowFunction.Bound.unbounded)
}
inline ::substrait::Expression_WindowFunction_Bound_Unbounded* Expression_WindowFunction_Bound::_internal_mutable_unbounded() {
  if (!_internal_has_unbounded()) {
    clear_kind();
    set_has_unbounded();
    kind_.unbounded_ = CreateMaybeMessage< ::substrait::Expression_WindowFunction_Bound_Unbounded >(GetArenaForAllocation());
  }
  return kind_.unbounded_;
}
inline ::substrait::Expression_WindowFunction_Bound_Unbounded* Expression_WindowFunction_Bound::mutable_unbounded() {
  ::substrait::Expression_WindowFunction_Bound_Unbounded* _msg = _internal_mutable_unbounded();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.WindowFunction.Bound.unbounded)
  return _msg;
}

inline bool Expression_WindowFunction_Bound::has_kind() const {
  return kind_case() != KIND_NOT_SET;
}
inline void Expression_WindowFunction_Bound::clear_has_kind() {
  _oneof_case_[0] = KIND_NOT_SET;
}
inline Expression_WindowFunction_Bound::KindCase Expression_WindowFunction_Bound::kind_case() const {
  return Expression_WindowFunction_Bound::KindCase(_oneof_case_[0]);
}
// -------------------------------------------------------------------

// Expression_WindowFunction

// uint32 function_reference = 1 [json_name = "functionReference"];
inline void Expression_WindowFunction::clear_function_reference() {
  function_reference_ = 0u;
}
inline uint32_t Expression_WindowFunction::_internal_function_reference() const {
  return function_reference_;
}
inline uint32_t Expression_WindowFunction::function_reference() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.WindowFunction.function_reference)
  return _internal_function_reference();
}
inline void Expression_WindowFunction::_internal_set_function_reference(uint32_t value) {
  
  function_reference_ = value;
}
inline void Expression_WindowFunction::set_function_reference(uint32_t value) {
  _internal_set_function_reference(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.WindowFunction.function_reference)
}

// repeated .substrait.Expression partitions = 2 [json_name = "partitions"];
inline int Expression_WindowFunction::_internal_partitions_size() const {
  return partitions_.size();
}
inline int Expression_WindowFunction::partitions_size() const {
  return _internal_partitions_size();
}
inline void Expression_WindowFunction::clear_partitions() {
  partitions_.Clear();
}
inline ::substrait::Expression* Expression_WindowFunction::mutable_partitions(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.Expression.WindowFunction.partitions)
  return partitions_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >*
Expression_WindowFunction::mutable_partitions() {
  // @@protoc_insertion_point(field_mutable_list:substrait.Expression.WindowFunction.partitions)
  return &partitions_;
}
inline const ::substrait::Expression& Expression_WindowFunction::_internal_partitions(int index) const {
  return partitions_.Get(index);
}
inline const ::substrait::Expression& Expression_WindowFunction::partitions(int index) const {
  // @@protoc_insertion_point(field_get:substrait.Expression.WindowFunction.partitions)
  return _internal_partitions(index);
}
inline ::substrait::Expression* Expression_WindowFunction::_internal_add_partitions() {
  return partitions_.Add();
}
inline ::substrait::Expression* Expression_WindowFunction::add_partitions() {
  ::substrait::Expression* _add = _internal_add_partitions();
  // @@protoc_insertion_point(field_add:substrait.Expression.WindowFunction.partitions)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >&
Expression_WindowFunction::partitions() const {
  // @@protoc_insertion_point(field_list:substrait.Expression.WindowFunction.partitions)
  return partitions_;
}

// repeated .substrait.SortField sorts = 3 [json_name = "sorts"];
inline int Expression_WindowFunction::_internal_sorts_size() const {
  return sorts_.size();
}
inline int Expression_WindowFunction::sorts_size() const {
  return _internal_sorts_size();
}
inline void Expression_WindowFunction::clear_sorts() {
  sorts_.Clear();
}
inline ::substrait::SortField* Expression_WindowFunction::mutable_sorts(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.Expression.WindowFunction.sorts)
  return sorts_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::SortField >*
Expression_WindowFunction::mutable_sorts() {
  // @@protoc_insertion_point(field_mutable_list:substrait.Expression.WindowFunction.sorts)
  return &sorts_;
}
inline const ::substrait::SortField& Expression_WindowFunction::_internal_sorts(int index) const {
  return sorts_.Get(index);
}
inline const ::substrait::SortField& Expression_WindowFunction::sorts(int index) const {
  // @@protoc_insertion_point(field_get:substrait.Expression.WindowFunction.sorts)
  return _internal_sorts(index);
}
inline ::substrait::SortField* Expression_WindowFunction::_internal_add_sorts() {
  return sorts_.Add();
}
inline ::substrait::SortField* Expression_WindowFunction::add_sorts() {
  ::substrait::SortField* _add = _internal_add_sorts();
  // @@protoc_insertion_point(field_add:substrait.Expression.WindowFunction.sorts)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::SortField >&
Expression_WindowFunction::sorts() const {
  // @@protoc_insertion_point(field_list:substrait.Expression.WindowFunction.sorts)
  return sorts_;
}

// .substrait.Expression.WindowFunction.Bound upper_bound = 4 [json_name = "upperBound"];
inline bool Expression_WindowFunction::_internal_has_upper_bound() const {
  return this != internal_default_instance() && upper_bound_ != nullptr;
}
inline bool Expression_WindowFunction::has_upper_bound() const {
  return _internal_has_upper_bound();
}
inline void Expression_WindowFunction::clear_upper_bound() {
  if (GetArenaForAllocation() == nullptr && upper_bound_ != nullptr) {
    delete upper_bound_;
  }
  upper_bound_ = nullptr;
}
inline const ::substrait::Expression_WindowFunction_Bound& Expression_WindowFunction::_internal_upper_bound() const {
  const ::substrait::Expression_WindowFunction_Bound* p = upper_bound_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression_WindowFunction_Bound&>(
      ::substrait::_Expression_WindowFunction_Bound_default_instance_);
}
inline const ::substrait::Expression_WindowFunction_Bound& Expression_WindowFunction::upper_bound() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.WindowFunction.upper_bound)
  return _internal_upper_bound();
}
inline void Expression_WindowFunction::unsafe_arena_set_allocated_upper_bound(
    ::substrait::Expression_WindowFunction_Bound* upper_bound) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(upper_bound_);
  }
  upper_bound_ = upper_bound;
  if (upper_bound) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.WindowFunction.upper_bound)
}
inline ::substrait::Expression_WindowFunction_Bound* Expression_WindowFunction::release_upper_bound() {
  
  ::substrait::Expression_WindowFunction_Bound* temp = upper_bound_;
  upper_bound_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression_WindowFunction_Bound* Expression_WindowFunction::unsafe_arena_release_upper_bound() {
  // @@protoc_insertion_point(field_release:substrait.Expression.WindowFunction.upper_bound)
  
  ::substrait::Expression_WindowFunction_Bound* temp = upper_bound_;
  upper_bound_ = nullptr;
  return temp;
}
inline ::substrait::Expression_WindowFunction_Bound* Expression_WindowFunction::_internal_mutable_upper_bound() {
  
  if (upper_bound_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression_WindowFunction_Bound>(GetArenaForAllocation());
    upper_bound_ = p;
  }
  return upper_bound_;
}
inline ::substrait::Expression_WindowFunction_Bound* Expression_WindowFunction::mutable_upper_bound() {
  ::substrait::Expression_WindowFunction_Bound* _msg = _internal_mutable_upper_bound();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.WindowFunction.upper_bound)
  return _msg;
}
inline void Expression_WindowFunction::set_allocated_upper_bound(::substrait::Expression_WindowFunction_Bound* upper_bound) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete upper_bound_;
  }
  if (upper_bound) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression_WindowFunction_Bound>::GetOwningArena(upper_bound);
    if (message_arena != submessage_arena) {
      upper_bound = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, upper_bound, submessage_arena);
    }
    
  } else {
    
  }
  upper_bound_ = upper_bound;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.WindowFunction.upper_bound)
}

// .substrait.Expression.WindowFunction.Bound lower_bound = 5 [json_name = "lowerBound"];
inline bool Expression_WindowFunction::_internal_has_lower_bound() const {
  return this != internal_default_instance() && lower_bound_ != nullptr;
}
inline bool Expression_WindowFunction::has_lower_bound() const {
  return _internal_has_lower_bound();
}
inline void Expression_WindowFunction::clear_lower_bound() {
  if (GetArenaForAllocation() == nullptr && lower_bound_ != nullptr) {
    delete lower_bound_;
  }
  lower_bound_ = nullptr;
}
inline const ::substrait::Expression_WindowFunction_Bound& Expression_WindowFunction::_internal_lower_bound() const {
  const ::substrait::Expression_WindowFunction_Bound* p = lower_bound_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression_WindowFunction_Bound&>(
      ::substrait::_Expression_WindowFunction_Bound_default_instance_);
}
inline const ::substrait::Expression_WindowFunction_Bound& Expression_WindowFunction::lower_bound() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.WindowFunction.lower_bound)
  return _internal_lower_bound();
}
inline void Expression_WindowFunction::unsafe_arena_set_allocated_lower_bound(
    ::substrait::Expression_WindowFunction_Bound* lower_bound) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(lower_bound_);
  }
  lower_bound_ = lower_bound;
  if (lower_bound) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.WindowFunction.lower_bound)
}
inline ::substrait::Expression_WindowFunction_Bound* Expression_WindowFunction::release_lower_bound() {
  
  ::substrait::Expression_WindowFunction_Bound* temp = lower_bound_;
  lower_bound_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression_WindowFunction_Bound* Expression_WindowFunction::unsafe_arena_release_lower_bound() {
  // @@protoc_insertion_point(field_release:substrait.Expression.WindowFunction.lower_bound)
  
  ::substrait::Expression_WindowFunction_Bound* temp = lower_bound_;
  lower_bound_ = nullptr;
  return temp;
}
inline ::substrait::Expression_WindowFunction_Bound* Expression_WindowFunction::_internal_mutable_lower_bound() {
  
  if (lower_bound_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression_WindowFunction_Bound>(GetArenaForAllocation());
    lower_bound_ = p;
  }
  return lower_bound_;
}
inline ::substrait::Expression_WindowFunction_Bound* Expression_WindowFunction::mutable_lower_bound() {
  ::substrait::Expression_WindowFunction_Bound* _msg = _internal_mutable_lower_bound();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.WindowFunction.lower_bound)
  return _msg;
}
inline void Expression_WindowFunction::set_allocated_lower_bound(::substrait::Expression_WindowFunction_Bound* lower_bound) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete lower_bound_;
  }
  if (lower_bound) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression_WindowFunction_Bound>::GetOwningArena(lower_bound);
    if (message_arena != submessage_arena) {
      lower_bound = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, lower_bound, submessage_arena);
    }
    
  } else {
    
  }
  lower_bound_ = lower_bound;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.WindowFunction.lower_bound)
}

// .substrait.AggregationPhase phase = 6 [json_name = "phase"];
inline void Expression_WindowFunction::clear_phase() {
  phase_ = 0;
}
inline ::substrait::AggregationPhase Expression_WindowFunction::_internal_phase() const {
  return static_cast< ::substrait::AggregationPhase >(phase_);
}
inline ::substrait::AggregationPhase Expression_WindowFunction::phase() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.WindowFunction.phase)
  return _internal_phase();
}
inline void Expression_WindowFunction::_internal_set_phase(::substrait::AggregationPhase value) {
  
  phase_ = value;
}
inline void Expression_WindowFunction::set_phase(::substrait::AggregationPhase value) {
  _internal_set_phase(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.WindowFunction.phase)
}

// .substrait.Type output_type = 7 [json_name = "outputType"];
inline bool Expression_WindowFunction::_internal_has_output_type() const {
  return this != internal_default_instance() && output_type_ != nullptr;
}
inline bool Expression_WindowFunction::has_output_type() const {
  return _internal_has_output_type();
}
inline const ::substrait::Type& Expression_WindowFunction::_internal_output_type() const {
  const ::substrait::Type* p = output_type_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Type&>(
      ::substrait::_Type_default_instance_);
}
inline const ::substrait::Type& Expression_WindowFunction::output_type() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.WindowFunction.output_type)
  return _internal_output_type();
}
inline void Expression_WindowFunction::unsafe_arena_set_allocated_output_type(
    ::substrait::Type* output_type) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(output_type_);
  }
  output_type_ = output_type;
  if (output_type) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.WindowFunction.output_type)
}
inline ::substrait::Type* Expression_WindowFunction::release_output_type() {
  
  ::substrait::Type* temp = output_type_;
  output_type_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Type* Expression_WindowFunction::unsafe_arena_release_output_type() {
  // @@protoc_insertion_point(field_release:substrait.Expression.WindowFunction.output_type)
  
  ::substrait::Type* temp = output_type_;
  output_type_ = nullptr;
  return temp;
}
inline ::substrait::Type* Expression_WindowFunction::_internal_mutable_output_type() {
  
  if (output_type_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Type>(GetArenaForAllocation());
    output_type_ = p;
  }
  return output_type_;
}
inline ::substrait::Type* Expression_WindowFunction::mutable_output_type() {
  ::substrait::Type* _msg = _internal_mutable_output_type();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.WindowFunction.output_type)
  return _msg;
}
inline void Expression_WindowFunction::set_allocated_output_type(::substrait::Type* output_type) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(output_type_);
  }
  if (output_type) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(output_type));
    if (message_arena != submessage_arena) {
      output_type = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, output_type, submessage_arena);
    }
    
  } else {
    
  }
  output_type_ = output_type;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.WindowFunction.output_type)
}

// repeated .substrait.Expression args = 8 [json_name = "args"];
inline int Expression_WindowFunction::_internal_args_size() const {
  return args_.size();
}
inline int Expression_WindowFunction::args_size() const {
  return _internal_args_size();
}
inline void Expression_WindowFunction::clear_args() {
  args_.Clear();
}
inline ::substrait::Expression* Expression_WindowFunction::mutable_args(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.Expression.WindowFunction.args)
  return args_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >*
Expression_WindowFunction::mutable_args() {
  // @@protoc_insertion_point(field_mutable_list:substrait.Expression.WindowFunction.args)
  return &args_;
}
inline const ::substrait::Expression& Expression_WindowFunction::_internal_args(int index) const {
  return args_.Get(index);
}
inline const ::substrait::Expression& Expression_WindowFunction::args(int index) const {
  // @@protoc_insertion_point(field_get:substrait.Expression.WindowFunction.args)
  return _internal_args(index);
}
inline ::substrait::Expression* Expression_WindowFunction::_internal_add_args() {
  return args_.Add();
}
inline ::substrait::Expression* Expression_WindowFunction::add_args() {
  ::substrait::Expression* _add = _internal_add_args();
  // @@protoc_insertion_point(field_add:substrait.Expression.WindowFunction.args)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >&
Expression_WindowFunction::args() const {
  // @@protoc_insertion_point(field_list:substrait.Expression.WindowFunction.args)
  return args_;
}

// -------------------------------------------------------------------

// Expression_IfThen_IfClause

// .substrait.Expression if = 1 [json_name = "if"];
inline bool Expression_IfThen_IfClause::_internal_has_if_() const {
  return this != internal_default_instance() && if__ != nullptr;
}
inline bool Expression_IfThen_IfClause::has_if_() const {
  return _internal_has_if_();
}
inline void Expression_IfThen_IfClause::clear_if_() {
  if (GetArenaForAllocation() == nullptr && if__ != nullptr) {
    delete if__;
  }
  if__ = nullptr;
}
inline const ::substrait::Expression& Expression_IfThen_IfClause::_internal_if_() const {
  const ::substrait::Expression* p = if__;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression&>(
      ::substrait::_Expression_default_instance_);
}
inline const ::substrait::Expression& Expression_IfThen_IfClause::if_() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.IfThen.IfClause.if)
  return _internal_if_();
}
inline void Expression_IfThen_IfClause::unsafe_arena_set_allocated_if_(
    ::substrait::Expression* if_) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(if__);
  }
  if__ = if_;
  if (if_) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.IfThen.IfClause.if)
}
inline ::substrait::Expression* Expression_IfThen_IfClause::release_if_() {
  
  ::substrait::Expression* temp = if__;
  if__ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression* Expression_IfThen_IfClause::unsafe_arena_release_if_() {
  // @@protoc_insertion_point(field_release:substrait.Expression.IfThen.IfClause.if)
  
  ::substrait::Expression* temp = if__;
  if__ = nullptr;
  return temp;
}
inline ::substrait::Expression* Expression_IfThen_IfClause::_internal_mutable_if_() {
  
  if (if__ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression>(GetArenaForAllocation());
    if__ = p;
  }
  return if__;
}
inline ::substrait::Expression* Expression_IfThen_IfClause::mutable_if_() {
  ::substrait::Expression* _msg = _internal_mutable_if_();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.IfThen.IfClause.if)
  return _msg;
}
inline void Expression_IfThen_IfClause::set_allocated_if_(::substrait::Expression* if_) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete if__;
  }
  if (if_) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression>::GetOwningArena(if_);
    if (message_arena != submessage_arena) {
      if_ = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, if_, submessage_arena);
    }
    
  } else {
    
  }
  if__ = if_;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.IfThen.IfClause.if)
}

// .substrait.Expression then = 2 [json_name = "then"];
inline bool Expression_IfThen_IfClause::_internal_has_then() const {
  return this != internal_default_instance() && then_ != nullptr;
}
inline bool Expression_IfThen_IfClause::has_then() const {
  return _internal_has_then();
}
inline void Expression_IfThen_IfClause::clear_then() {
  if (GetArenaForAllocation() == nullptr && then_ != nullptr) {
    delete then_;
  }
  then_ = nullptr;
}
inline const ::substrait::Expression& Expression_IfThen_IfClause::_internal_then() const {
  const ::substrait::Expression* p = then_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression&>(
      ::substrait::_Expression_default_instance_);
}
inline const ::substrait::Expression& Expression_IfThen_IfClause::then() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.IfThen.IfClause.then)
  return _internal_then();
}
inline void Expression_IfThen_IfClause::unsafe_arena_set_allocated_then(
    ::substrait::Expression* then) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(then_);
  }
  then_ = then;
  if (then) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.IfThen.IfClause.then)
}
inline ::substrait::Expression* Expression_IfThen_IfClause::release_then() {
  
  ::substrait::Expression* temp = then_;
  then_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression* Expression_IfThen_IfClause::unsafe_arena_release_then() {
  // @@protoc_insertion_point(field_release:substrait.Expression.IfThen.IfClause.then)
  
  ::substrait::Expression* temp = then_;
  then_ = nullptr;
  return temp;
}
inline ::substrait::Expression* Expression_IfThen_IfClause::_internal_mutable_then() {
  
  if (then_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression>(GetArenaForAllocation());
    then_ = p;
  }
  return then_;
}
inline ::substrait::Expression* Expression_IfThen_IfClause::mutable_then() {
  ::substrait::Expression* _msg = _internal_mutable_then();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.IfThen.IfClause.then)
  return _msg;
}
inline void Expression_IfThen_IfClause::set_allocated_then(::substrait::Expression* then) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete then_;
  }
  if (then) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression>::GetOwningArena(then);
    if (message_arena != submessage_arena) {
      then = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, then, submessage_arena);
    }
    
  } else {
    
  }
  then_ = then;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.IfThen.IfClause.then)
}

// -------------------------------------------------------------------

// Expression_IfThen

// repeated .substrait.Expression.IfThen.IfClause ifs = 1 [json_name = "ifs"];
inline int Expression_IfThen::_internal_ifs_size() const {
  return ifs_.size();
}
inline int Expression_IfThen::ifs_size() const {
  return _internal_ifs_size();
}
inline void Expression_IfThen::clear_ifs() {
  ifs_.Clear();
}
inline ::substrait::Expression_IfThen_IfClause* Expression_IfThen::mutable_ifs(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.Expression.IfThen.ifs)
  return ifs_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_IfThen_IfClause >*
Expression_IfThen::mutable_ifs() {
  // @@protoc_insertion_point(field_mutable_list:substrait.Expression.IfThen.ifs)
  return &ifs_;
}
inline const ::substrait::Expression_IfThen_IfClause& Expression_IfThen::_internal_ifs(int index) const {
  return ifs_.Get(index);
}
inline const ::substrait::Expression_IfThen_IfClause& Expression_IfThen::ifs(int index) const {
  // @@protoc_insertion_point(field_get:substrait.Expression.IfThen.ifs)
  return _internal_ifs(index);
}
inline ::substrait::Expression_IfThen_IfClause* Expression_IfThen::_internal_add_ifs() {
  return ifs_.Add();
}
inline ::substrait::Expression_IfThen_IfClause* Expression_IfThen::add_ifs() {
  ::substrait::Expression_IfThen_IfClause* _add = _internal_add_ifs();
  // @@protoc_insertion_point(field_add:substrait.Expression.IfThen.ifs)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_IfThen_IfClause >&
Expression_IfThen::ifs() const {
  // @@protoc_insertion_point(field_list:substrait.Expression.IfThen.ifs)
  return ifs_;
}

// .substrait.Expression else = 2 [json_name = "else"];
inline bool Expression_IfThen::_internal_has_else_() const {
  return this != internal_default_instance() && else__ != nullptr;
}
inline bool Expression_IfThen::has_else_() const {
  return _internal_has_else_();
}
inline void Expression_IfThen::clear_else_() {
  if (GetArenaForAllocation() == nullptr && else__ != nullptr) {
    delete else__;
  }
  else__ = nullptr;
}
inline const ::substrait::Expression& Expression_IfThen::_internal_else_() const {
  const ::substrait::Expression* p = else__;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression&>(
      ::substrait::_Expression_default_instance_);
}
inline const ::substrait::Expression& Expression_IfThen::else_() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.IfThen.else)
  return _internal_else_();
}
inline void Expression_IfThen::unsafe_arena_set_allocated_else_(
    ::substrait::Expression* else_) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(else__);
  }
  else__ = else_;
  if (else_) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.IfThen.else)
}
inline ::substrait::Expression* Expression_IfThen::release_else_() {
  
  ::substrait::Expression* temp = else__;
  else__ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression* Expression_IfThen::unsafe_arena_release_else_() {
  // @@protoc_insertion_point(field_release:substrait.Expression.IfThen.else)
  
  ::substrait::Expression* temp = else__;
  else__ = nullptr;
  return temp;
}
inline ::substrait::Expression* Expression_IfThen::_internal_mutable_else_() {
  
  if (else__ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression>(GetArenaForAllocation());
    else__ = p;
  }
  return else__;
}
inline ::substrait::Expression* Expression_IfThen::mutable_else_() {
  ::substrait::Expression* _msg = _internal_mutable_else_();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.IfThen.else)
  return _msg;
}
inline void Expression_IfThen::set_allocated_else_(::substrait::Expression* else_) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete else__;
  }
  if (else_) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression>::GetOwningArena(else_);
    if (message_arena != submessage_arena) {
      else_ = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, else_, submessage_arena);
    }
    
  } else {
    
  }
  else__ = else_;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.IfThen.else)
}

// -------------------------------------------------------------------

// Expression_Cast

// .substrait.Type type = 1 [json_name = "type"];
inline bool Expression_Cast::_internal_has_type() const {
  return this != internal_default_instance() && type_ != nullptr;
}
inline bool Expression_Cast::has_type() const {
  return _internal_has_type();
}
inline const ::substrait::Type& Expression_Cast::_internal_type() const {
  const ::substrait::Type* p = type_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Type&>(
      ::substrait::_Type_default_instance_);
}
inline const ::substrait::Type& Expression_Cast::type() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Cast.type)
  return _internal_type();
}
inline void Expression_Cast::unsafe_arena_set_allocated_type(
    ::substrait::Type* type) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(type_);
  }
  type_ = type;
  if (type) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.Cast.type)
}
inline ::substrait::Type* Expression_Cast::release_type() {
  
  ::substrait::Type* temp = type_;
  type_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Type* Expression_Cast::unsafe_arena_release_type() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Cast.type)
  
  ::substrait::Type* temp = type_;
  type_ = nullptr;
  return temp;
}
inline ::substrait::Type* Expression_Cast::_internal_mutable_type() {
  
  if (type_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Type>(GetArenaForAllocation());
    type_ = p;
  }
  return type_;
}
inline ::substrait::Type* Expression_Cast::mutable_type() {
  ::substrait::Type* _msg = _internal_mutable_type();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Cast.type)
  return _msg;
}
inline void Expression_Cast::set_allocated_type(::substrait::Type* type) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(type_);
  }
  if (type) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(type));
    if (message_arena != submessage_arena) {
      type = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, type, submessage_arena);
    }
    
  } else {
    
  }
  type_ = type;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.Cast.type)
}

// .substrait.Expression input = 2 [json_name = "input"];
inline bool Expression_Cast::_internal_has_input() const {
  return this != internal_default_instance() && input_ != nullptr;
}
inline bool Expression_Cast::has_input() const {
  return _internal_has_input();
}
inline void Expression_Cast::clear_input() {
  if (GetArenaForAllocation() == nullptr && input_ != nullptr) {
    delete input_;
  }
  input_ = nullptr;
}
inline const ::substrait::Expression& Expression_Cast::_internal_input() const {
  const ::substrait::Expression* p = input_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression&>(
      ::substrait::_Expression_default_instance_);
}
inline const ::substrait::Expression& Expression_Cast::input() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Cast.input)
  return _internal_input();
}
inline void Expression_Cast::unsafe_arena_set_allocated_input(
    ::substrait::Expression* input) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(input_);
  }
  input_ = input;
  if (input) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.Cast.input)
}
inline ::substrait::Expression* Expression_Cast::release_input() {
  
  ::substrait::Expression* temp = input_;
  input_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression* Expression_Cast::unsafe_arena_release_input() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Cast.input)
  
  ::substrait::Expression* temp = input_;
  input_ = nullptr;
  return temp;
}
inline ::substrait::Expression* Expression_Cast::_internal_mutable_input() {
  
  if (input_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression>(GetArenaForAllocation());
    input_ = p;
  }
  return input_;
}
inline ::substrait::Expression* Expression_Cast::mutable_input() {
  ::substrait::Expression* _msg = _internal_mutable_input();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Cast.input)
  return _msg;
}
inline void Expression_Cast::set_allocated_input(::substrait::Expression* input) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete input_;
  }
  if (input) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression>::GetOwningArena(input);
    if (message_arena != submessage_arena) {
      input = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, input, submessage_arena);
    }
    
  } else {
    
  }
  input_ = input;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.Cast.input)
}

// -------------------------------------------------------------------

// Expression_SwitchExpression_IfValue

// .substrait.Expression.Literal if = 1 [json_name = "if"];
inline bool Expression_SwitchExpression_IfValue::_internal_has_if_() const {
  return this != internal_default_instance() && if__ != nullptr;
}
inline bool Expression_SwitchExpression_IfValue::has_if_() const {
  return _internal_has_if_();
}
inline void Expression_SwitchExpression_IfValue::clear_if_() {
  if (GetArenaForAllocation() == nullptr && if__ != nullptr) {
    delete if__;
  }
  if__ = nullptr;
}
inline const ::substrait::Expression_Literal& Expression_SwitchExpression_IfValue::_internal_if_() const {
  const ::substrait::Expression_Literal* p = if__;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression_Literal&>(
      ::substrait::_Expression_Literal_default_instance_);
}
inline const ::substrait::Expression_Literal& Expression_SwitchExpression_IfValue::if_() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.SwitchExpression.IfValue.if)
  return _internal_if_();
}
inline void Expression_SwitchExpression_IfValue::unsafe_arena_set_allocated_if_(
    ::substrait::Expression_Literal* if_) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(if__);
  }
  if__ = if_;
  if (if_) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.SwitchExpression.IfValue.if)
}
inline ::substrait::Expression_Literal* Expression_SwitchExpression_IfValue::release_if_() {
  
  ::substrait::Expression_Literal* temp = if__;
  if__ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression_Literal* Expression_SwitchExpression_IfValue::unsafe_arena_release_if_() {
  // @@protoc_insertion_point(field_release:substrait.Expression.SwitchExpression.IfValue.if)
  
  ::substrait::Expression_Literal* temp = if__;
  if__ = nullptr;
  return temp;
}
inline ::substrait::Expression_Literal* Expression_SwitchExpression_IfValue::_internal_mutable_if_() {
  
  if (if__ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression_Literal>(GetArenaForAllocation());
    if__ = p;
  }
  return if__;
}
inline ::substrait::Expression_Literal* Expression_SwitchExpression_IfValue::mutable_if_() {
  ::substrait::Expression_Literal* _msg = _internal_mutable_if_();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.SwitchExpression.IfValue.if)
  return _msg;
}
inline void Expression_SwitchExpression_IfValue::set_allocated_if_(::substrait::Expression_Literal* if_) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete if__;
  }
  if (if_) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression_Literal>::GetOwningArena(if_);
    if (message_arena != submessage_arena) {
      if_ = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, if_, submessage_arena);
    }
    
  } else {
    
  }
  if__ = if_;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.SwitchExpression.IfValue.if)
}

// .substrait.Expression then = 2 [json_name = "then"];
inline bool Expression_SwitchExpression_IfValue::_internal_has_then() const {
  return this != internal_default_instance() && then_ != nullptr;
}
inline bool Expression_SwitchExpression_IfValue::has_then() const {
  return _internal_has_then();
}
inline void Expression_SwitchExpression_IfValue::clear_then() {
  if (GetArenaForAllocation() == nullptr && then_ != nullptr) {
    delete then_;
  }
  then_ = nullptr;
}
inline const ::substrait::Expression& Expression_SwitchExpression_IfValue::_internal_then() const {
  const ::substrait::Expression* p = then_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression&>(
      ::substrait::_Expression_default_instance_);
}
inline const ::substrait::Expression& Expression_SwitchExpression_IfValue::then() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.SwitchExpression.IfValue.then)
  return _internal_then();
}
inline void Expression_SwitchExpression_IfValue::unsafe_arena_set_allocated_then(
    ::substrait::Expression* then) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(then_);
  }
  then_ = then;
  if (then) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.SwitchExpression.IfValue.then)
}
inline ::substrait::Expression* Expression_SwitchExpression_IfValue::release_then() {
  
  ::substrait::Expression* temp = then_;
  then_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression* Expression_SwitchExpression_IfValue::unsafe_arena_release_then() {
  // @@protoc_insertion_point(field_release:substrait.Expression.SwitchExpression.IfValue.then)
  
  ::substrait::Expression* temp = then_;
  then_ = nullptr;
  return temp;
}
inline ::substrait::Expression* Expression_SwitchExpression_IfValue::_internal_mutable_then() {
  
  if (then_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression>(GetArenaForAllocation());
    then_ = p;
  }
  return then_;
}
inline ::substrait::Expression* Expression_SwitchExpression_IfValue::mutable_then() {
  ::substrait::Expression* _msg = _internal_mutable_then();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.SwitchExpression.IfValue.then)
  return _msg;
}
inline void Expression_SwitchExpression_IfValue::set_allocated_then(::substrait::Expression* then) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete then_;
  }
  if (then) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression>::GetOwningArena(then);
    if (message_arena != submessage_arena) {
      then = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, then, submessage_arena);
    }
    
  } else {
    
  }
  then_ = then;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.SwitchExpression.IfValue.then)
}

// -------------------------------------------------------------------

// Expression_SwitchExpression

// repeated .substrait.Expression.SwitchExpression.IfValue ifs = 1 [json_name = "ifs"];
inline int Expression_SwitchExpression::_internal_ifs_size() const {
  return ifs_.size();
}
inline int Expression_SwitchExpression::ifs_size() const {
  return _internal_ifs_size();
}
inline void Expression_SwitchExpression::clear_ifs() {
  ifs_.Clear();
}
inline ::substrait::Expression_SwitchExpression_IfValue* Expression_SwitchExpression::mutable_ifs(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.Expression.SwitchExpression.ifs)
  return ifs_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_SwitchExpression_IfValue >*
Expression_SwitchExpression::mutable_ifs() {
  // @@protoc_insertion_point(field_mutable_list:substrait.Expression.SwitchExpression.ifs)
  return &ifs_;
}
inline const ::substrait::Expression_SwitchExpression_IfValue& Expression_SwitchExpression::_internal_ifs(int index) const {
  return ifs_.Get(index);
}
inline const ::substrait::Expression_SwitchExpression_IfValue& Expression_SwitchExpression::ifs(int index) const {
  // @@protoc_insertion_point(field_get:substrait.Expression.SwitchExpression.ifs)
  return _internal_ifs(index);
}
inline ::substrait::Expression_SwitchExpression_IfValue* Expression_SwitchExpression::_internal_add_ifs() {
  return ifs_.Add();
}
inline ::substrait::Expression_SwitchExpression_IfValue* Expression_SwitchExpression::add_ifs() {
  ::substrait::Expression_SwitchExpression_IfValue* _add = _internal_add_ifs();
  // @@protoc_insertion_point(field_add:substrait.Expression.SwitchExpression.ifs)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_SwitchExpression_IfValue >&
Expression_SwitchExpression::ifs() const {
  // @@protoc_insertion_point(field_list:substrait.Expression.SwitchExpression.ifs)
  return ifs_;
}

// .substrait.Expression else = 2 [json_name = "else"];
inline bool Expression_SwitchExpression::_internal_has_else_() const {
  return this != internal_default_instance() && else__ != nullptr;
}
inline bool Expression_SwitchExpression::has_else_() const {
  return _internal_has_else_();
}
inline void Expression_SwitchExpression::clear_else_() {
  if (GetArenaForAllocation() == nullptr && else__ != nullptr) {
    delete else__;
  }
  else__ = nullptr;
}
inline const ::substrait::Expression& Expression_SwitchExpression::_internal_else_() const {
  const ::substrait::Expression* p = else__;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression&>(
      ::substrait::_Expression_default_instance_);
}
inline const ::substrait::Expression& Expression_SwitchExpression::else_() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.SwitchExpression.else)
  return _internal_else_();
}
inline void Expression_SwitchExpression::unsafe_arena_set_allocated_else_(
    ::substrait::Expression* else_) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(else__);
  }
  else__ = else_;
  if (else_) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.SwitchExpression.else)
}
inline ::substrait::Expression* Expression_SwitchExpression::release_else_() {
  
  ::substrait::Expression* temp = else__;
  else__ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression* Expression_SwitchExpression::unsafe_arena_release_else_() {
  // @@protoc_insertion_point(field_release:substrait.Expression.SwitchExpression.else)
  
  ::substrait::Expression* temp = else__;
  else__ = nullptr;
  return temp;
}
inline ::substrait::Expression* Expression_SwitchExpression::_internal_mutable_else_() {
  
  if (else__ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression>(GetArenaForAllocation());
    else__ = p;
  }
  return else__;
}
inline ::substrait::Expression* Expression_SwitchExpression::mutable_else_() {
  ::substrait::Expression* _msg = _internal_mutable_else_();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.SwitchExpression.else)
  return _msg;
}
inline void Expression_SwitchExpression::set_allocated_else_(::substrait::Expression* else_) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete else__;
  }
  if (else_) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression>::GetOwningArena(else_);
    if (message_arena != submessage_arena) {
      else_ = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, else_, submessage_arena);
    }
    
  } else {
    
  }
  else__ = else_;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.SwitchExpression.else)
}

// -------------------------------------------------------------------

// Expression_SingularOrList

// .substrait.Expression value = 1 [json_name = "value"];
inline bool Expression_SingularOrList::_internal_has_value() const {
  return this != internal_default_instance() && value_ != nullptr;
}
inline bool Expression_SingularOrList::has_value() const {
  return _internal_has_value();
}
inline void Expression_SingularOrList::clear_value() {
  if (GetArenaForAllocation() == nullptr && value_ != nullptr) {
    delete value_;
  }
  value_ = nullptr;
}
inline const ::substrait::Expression& Expression_SingularOrList::_internal_value() const {
  const ::substrait::Expression* p = value_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression&>(
      ::substrait::_Expression_default_instance_);
}
inline const ::substrait::Expression& Expression_SingularOrList::value() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.SingularOrList.value)
  return _internal_value();
}
inline void Expression_SingularOrList::unsafe_arena_set_allocated_value(
    ::substrait::Expression* value) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(value_);
  }
  value_ = value;
  if (value) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.SingularOrList.value)
}
inline ::substrait::Expression* Expression_SingularOrList::release_value() {
  
  ::substrait::Expression* temp = value_;
  value_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression* Expression_SingularOrList::unsafe_arena_release_value() {
  // @@protoc_insertion_point(field_release:substrait.Expression.SingularOrList.value)
  
  ::substrait::Expression* temp = value_;
  value_ = nullptr;
  return temp;
}
inline ::substrait::Expression* Expression_SingularOrList::_internal_mutable_value() {
  
  if (value_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression>(GetArenaForAllocation());
    value_ = p;
  }
  return value_;
}
inline ::substrait::Expression* Expression_SingularOrList::mutable_value() {
  ::substrait::Expression* _msg = _internal_mutable_value();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.SingularOrList.value)
  return _msg;
}
inline void Expression_SingularOrList::set_allocated_value(::substrait::Expression* value) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete value_;
  }
  if (value) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression>::GetOwningArena(value);
    if (message_arena != submessage_arena) {
      value = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, value, submessage_arena);
    }
    
  } else {
    
  }
  value_ = value;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.SingularOrList.value)
}

// repeated .substrait.Expression options = 2 [json_name = "options"];
inline int Expression_SingularOrList::_internal_options_size() const {
  return options_.size();
}
inline int Expression_SingularOrList::options_size() const {
  return _internal_options_size();
}
inline void Expression_SingularOrList::clear_options() {
  options_.Clear();
}
inline ::substrait::Expression* Expression_SingularOrList::mutable_options(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.Expression.SingularOrList.options)
  return options_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >*
Expression_SingularOrList::mutable_options() {
  // @@protoc_insertion_point(field_mutable_list:substrait.Expression.SingularOrList.options)
  return &options_;
}
inline const ::substrait::Expression& Expression_SingularOrList::_internal_options(int index) const {
  return options_.Get(index);
}
inline const ::substrait::Expression& Expression_SingularOrList::options(int index) const {
  // @@protoc_insertion_point(field_get:substrait.Expression.SingularOrList.options)
  return _internal_options(index);
}
inline ::substrait::Expression* Expression_SingularOrList::_internal_add_options() {
  return options_.Add();
}
inline ::substrait::Expression* Expression_SingularOrList::add_options() {
  ::substrait::Expression* _add = _internal_add_options();
  // @@protoc_insertion_point(field_add:substrait.Expression.SingularOrList.options)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >&
Expression_SingularOrList::options() const {
  // @@protoc_insertion_point(field_list:substrait.Expression.SingularOrList.options)
  return options_;
}

// -------------------------------------------------------------------

// Expression_MultiOrList_Record

// repeated .substrait.Expression fields = 1 [json_name = "fields"];
inline int Expression_MultiOrList_Record::_internal_fields_size() const {
  return fields_.size();
}
inline int Expression_MultiOrList_Record::fields_size() const {
  return _internal_fields_size();
}
inline void Expression_MultiOrList_Record::clear_fields() {
  fields_.Clear();
}
inline ::substrait::Expression* Expression_MultiOrList_Record::mutable_fields(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.Expression.MultiOrList.Record.fields)
  return fields_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >*
Expression_MultiOrList_Record::mutable_fields() {
  // @@protoc_insertion_point(field_mutable_list:substrait.Expression.MultiOrList.Record.fields)
  return &fields_;
}
inline const ::substrait::Expression& Expression_MultiOrList_Record::_internal_fields(int index) const {
  return fields_.Get(index);
}
inline const ::substrait::Expression& Expression_MultiOrList_Record::fields(int index) const {
  // @@protoc_insertion_point(field_get:substrait.Expression.MultiOrList.Record.fields)
  return _internal_fields(index);
}
inline ::substrait::Expression* Expression_MultiOrList_Record::_internal_add_fields() {
  return fields_.Add();
}
inline ::substrait::Expression* Expression_MultiOrList_Record::add_fields() {
  ::substrait::Expression* _add = _internal_add_fields();
  // @@protoc_insertion_point(field_add:substrait.Expression.MultiOrList.Record.fields)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >&
Expression_MultiOrList_Record::fields() const {
  // @@protoc_insertion_point(field_list:substrait.Expression.MultiOrList.Record.fields)
  return fields_;
}

// -------------------------------------------------------------------

// Expression_MultiOrList

// repeated .substrait.Expression value = 1 [json_name = "value"];
inline int Expression_MultiOrList::_internal_value_size() const {
  return value_.size();
}
inline int Expression_MultiOrList::value_size() const {
  return _internal_value_size();
}
inline void Expression_MultiOrList::clear_value() {
  value_.Clear();
}
inline ::substrait::Expression* Expression_MultiOrList::mutable_value(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.Expression.MultiOrList.value)
  return value_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >*
Expression_MultiOrList::mutable_value() {
  // @@protoc_insertion_point(field_mutable_list:substrait.Expression.MultiOrList.value)
  return &value_;
}
inline const ::substrait::Expression& Expression_MultiOrList::_internal_value(int index) const {
  return value_.Get(index);
}
inline const ::substrait::Expression& Expression_MultiOrList::value(int index) const {
  // @@protoc_insertion_point(field_get:substrait.Expression.MultiOrList.value)
  return _internal_value(index);
}
inline ::substrait::Expression* Expression_MultiOrList::_internal_add_value() {
  return value_.Add();
}
inline ::substrait::Expression* Expression_MultiOrList::add_value() {
  ::substrait::Expression* _add = _internal_add_value();
  // @@protoc_insertion_point(field_add:substrait.Expression.MultiOrList.value)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >&
Expression_MultiOrList::value() const {
  // @@protoc_insertion_point(field_list:substrait.Expression.MultiOrList.value)
  return value_;
}

// repeated .substrait.Expression.MultiOrList.Record options = 2 [json_name = "options"];
inline int Expression_MultiOrList::_internal_options_size() const {
  return options_.size();
}
inline int Expression_MultiOrList::options_size() const {
  return _internal_options_size();
}
inline void Expression_MultiOrList::clear_options() {
  options_.Clear();
}
inline ::substrait::Expression_MultiOrList_Record* Expression_MultiOrList::mutable_options(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.Expression.MultiOrList.options)
  return options_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_MultiOrList_Record >*
Expression_MultiOrList::mutable_options() {
  // @@protoc_insertion_point(field_mutable_list:substrait.Expression.MultiOrList.options)
  return &options_;
}
inline const ::substrait::Expression_MultiOrList_Record& Expression_MultiOrList::_internal_options(int index) const {
  return options_.Get(index);
}
inline const ::substrait::Expression_MultiOrList_Record& Expression_MultiOrList::options(int index) const {
  // @@protoc_insertion_point(field_get:substrait.Expression.MultiOrList.options)
  return _internal_options(index);
}
inline ::substrait::Expression_MultiOrList_Record* Expression_MultiOrList::_internal_add_options() {
  return options_.Add();
}
inline ::substrait::Expression_MultiOrList_Record* Expression_MultiOrList::add_options() {
  ::substrait::Expression_MultiOrList_Record* _add = _internal_add_options();
  // @@protoc_insertion_point(field_add:substrait.Expression.MultiOrList.options)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_MultiOrList_Record >&
Expression_MultiOrList::options() const {
  // @@protoc_insertion_point(field_list:substrait.Expression.MultiOrList.options)
  return options_;
}

// -------------------------------------------------------------------

// Expression_EmbeddedFunction_PythonPickleFunction

// bytes function = 1 [json_name = "function"];
inline void Expression_EmbeddedFunction_PythonPickleFunction::clear_function() {
  function_.ClearToEmpty();
}
inline const std::string& Expression_EmbeddedFunction_PythonPickleFunction::function() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.EmbeddedFunction.PythonPickleFunction.function)
  return _internal_function();
}
template <typename ArgT0, typename... ArgT>
inline PROTOBUF_ALWAYS_INLINE
void Expression_EmbeddedFunction_PythonPickleFunction::set_function(ArgT0&& arg0, ArgT... args) {
 
 function_.SetBytes(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
  // @@protoc_insertion_point(field_set:substrait.Expression.EmbeddedFunction.PythonPickleFunction.function)
}
inline std::string* Expression_EmbeddedFunction_PythonPickleFunction::mutable_function() {
  std::string* _s = _internal_mutable_function();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.EmbeddedFunction.PythonPickleFunction.function)
  return _s;
}
inline const std::string& Expression_EmbeddedFunction_PythonPickleFunction::_internal_function() const {
  return function_.Get();
}
inline void Expression_EmbeddedFunction_PythonPickleFunction::_internal_set_function(const std::string& value) {
  
  function_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
}
inline std::string* Expression_EmbeddedFunction_PythonPickleFunction::_internal_mutable_function() {
  
  return function_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
}
inline std::string* Expression_EmbeddedFunction_PythonPickleFunction::release_function() {
  // @@protoc_insertion_point(field_release:substrait.Expression.EmbeddedFunction.PythonPickleFunction.function)
  return function_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
}
inline void Expression_EmbeddedFunction_PythonPickleFunction::set_allocated_function(std::string* function) {
  if (function != nullptr) {
    
  } else {
    
  }
  function_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), function,
      GetArenaForAllocation());
#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (function_.IsDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited())) {
    function_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), "", GetArenaForAllocation());
  }
#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.EmbeddedFunction.PythonPickleFunction.function)
}

// repeated string prerequisite = 2 [json_name = "prerequisite"];
inline int Expression_EmbeddedFunction_PythonPickleFunction::_internal_prerequisite_size() const {
  return prerequisite_.size();
}
inline int Expression_EmbeddedFunction_PythonPickleFunction::prerequisite_size() const {
  return _internal_prerequisite_size();
}
inline void Expression_EmbeddedFunction_PythonPickleFunction::clear_prerequisite() {
  prerequisite_.Clear();
}
inline std::string* Expression_EmbeddedFunction_PythonPickleFunction::add_prerequisite() {
  std::string* _s = _internal_add_prerequisite();
  // @@protoc_insertion_point(field_add_mutable:substrait.Expression.EmbeddedFunction.PythonPickleFunction.prerequisite)
  return _s;
}
inline const std::string& Expression_EmbeddedFunction_PythonPickleFunction::_internal_prerequisite(int index) const {
  return prerequisite_.Get(index);
}
inline const std::string& Expression_EmbeddedFunction_PythonPickleFunction::prerequisite(int index) const {
  // @@protoc_insertion_point(field_get:substrait.Expression.EmbeddedFunction.PythonPickleFunction.prerequisite)
  return _internal_prerequisite(index);
}
inline std::string* Expression_EmbeddedFunction_PythonPickleFunction::mutable_prerequisite(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.Expression.EmbeddedFunction.PythonPickleFunction.prerequisite)
  return prerequisite_.Mutable(index);
}
inline void Expression_EmbeddedFunction_PythonPickleFunction::set_prerequisite(int index, const std::string& value) {
  prerequisite_.Mutable(index)->assign(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.EmbeddedFunction.PythonPickleFunction.prerequisite)
}
inline void Expression_EmbeddedFunction_PythonPickleFunction::set_prerequisite(int index, std::string&& value) {
  prerequisite_.Mutable(index)->assign(std::move(value));
  // @@protoc_insertion_point(field_set:substrait.Expression.EmbeddedFunction.PythonPickleFunction.prerequisite)
}
inline void Expression_EmbeddedFunction_PythonPickleFunction::set_prerequisite(int index, const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  prerequisite_.Mutable(index)->assign(value);
  // @@protoc_insertion_point(field_set_char:substrait.Expression.EmbeddedFunction.PythonPickleFunction.prerequisite)
}
inline void Expression_EmbeddedFunction_PythonPickleFunction::set_prerequisite(int index, const char* value, size_t size) {
  prerequisite_.Mutable(index)->assign(
    reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_set_pointer:substrait.Expression.EmbeddedFunction.PythonPickleFunction.prerequisite)
}
inline std::string* Expression_EmbeddedFunction_PythonPickleFunction::_internal_add_prerequisite() {
  return prerequisite_.Add();
}
inline void Expression_EmbeddedFunction_PythonPickleFunction::add_prerequisite(const std::string& value) {
  prerequisite_.Add()->assign(value);
  // @@protoc_insertion_point(field_add:substrait.Expression.EmbeddedFunction.PythonPickleFunction.prerequisite)
}
inline void Expression_EmbeddedFunction_PythonPickleFunction::add_prerequisite(std::string&& value) {
  prerequisite_.Add(std::move(value));
  // @@protoc_insertion_point(field_add:substrait.Expression.EmbeddedFunction.PythonPickleFunction.prerequisite)
}
inline void Expression_EmbeddedFunction_PythonPickleFunction::add_prerequisite(const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  prerequisite_.Add()->assign(value);
  // @@protoc_insertion_point(field_add_char:substrait.Expression.EmbeddedFunction.PythonPickleFunction.prerequisite)
}
inline void Expression_EmbeddedFunction_PythonPickleFunction::add_prerequisite(const char* value, size_t size) {
  prerequisite_.Add()->assign(reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_add_pointer:substrait.Expression.EmbeddedFunction.PythonPickleFunction.prerequisite)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>&
Expression_EmbeddedFunction_PythonPickleFunction::prerequisite() const {
  // @@protoc_insertion_point(field_list:substrait.Expression.EmbeddedFunction.PythonPickleFunction.prerequisite)
  return prerequisite_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>*
Expression_EmbeddedFunction_PythonPickleFunction::mutable_prerequisite() {
  // @@protoc_insertion_point(field_mutable_list:substrait.Expression.EmbeddedFunction.PythonPickleFunction.prerequisite)
  return &prerequisite_;
}

// -------------------------------------------------------------------

// Expression_EmbeddedFunction_WebAssemblyFunction

// bytes script = 1 [json_name = "script"];
inline void Expression_EmbeddedFunction_WebAssemblyFunction::clear_script() {
  script_.ClearToEmpty();
}
inline const std::string& Expression_EmbeddedFunction_WebAssemblyFunction::script() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.EmbeddedFunction.WebAssemblyFunction.script)
  return _internal_script();
}
template <typename ArgT0, typename... ArgT>
inline PROTOBUF_ALWAYS_INLINE
void Expression_EmbeddedFunction_WebAssemblyFunction::set_script(ArgT0&& arg0, ArgT... args) {
 
 script_.SetBytes(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
  // @@protoc_insertion_point(field_set:substrait.Expression.EmbeddedFunction.WebAssemblyFunction.script)
}
inline std::string* Expression_EmbeddedFunction_WebAssemblyFunction::mutable_script() {
  std::string* _s = _internal_mutable_script();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.EmbeddedFunction.WebAssemblyFunction.script)
  return _s;
}
inline const std::string& Expression_EmbeddedFunction_WebAssemblyFunction::_internal_script() const {
  return script_.Get();
}
inline void Expression_EmbeddedFunction_WebAssemblyFunction::_internal_set_script(const std::string& value) {
  
  script_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
}
inline std::string* Expression_EmbeddedFunction_WebAssemblyFunction::_internal_mutable_script() {
  
  return script_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
}
inline std::string* Expression_EmbeddedFunction_WebAssemblyFunction::release_script() {
  // @@protoc_insertion_point(field_release:substrait.Expression.EmbeddedFunction.WebAssemblyFunction.script)
  return script_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
}
inline void Expression_EmbeddedFunction_WebAssemblyFunction::set_allocated_script(std::string* script) {
  if (script != nullptr) {
    
  } else {
    
  }
  script_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), script,
      GetArenaForAllocation());
#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (script_.IsDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited())) {
    script_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), "", GetArenaForAllocation());
  }
#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.EmbeddedFunction.WebAssemblyFunction.script)
}

// repeated string prerequisite = 2 [json_name = "prerequisite"];
inline int Expression_EmbeddedFunction_WebAssemblyFunction::_internal_prerequisite_size() const {
  return prerequisite_.size();
}
inline int Expression_EmbeddedFunction_WebAssemblyFunction::prerequisite_size() const {
  return _internal_prerequisite_size();
}
inline void Expression_EmbeddedFunction_WebAssemblyFunction::clear_prerequisite() {
  prerequisite_.Clear();
}
inline std::string* Expression_EmbeddedFunction_WebAssemblyFunction::add_prerequisite() {
  std::string* _s = _internal_add_prerequisite();
  // @@protoc_insertion_point(field_add_mutable:substrait.Expression.EmbeddedFunction.WebAssemblyFunction.prerequisite)
  return _s;
}
inline const std::string& Expression_EmbeddedFunction_WebAssemblyFunction::_internal_prerequisite(int index) const {
  return prerequisite_.Get(index);
}
inline const std::string& Expression_EmbeddedFunction_WebAssemblyFunction::prerequisite(int index) const {
  // @@protoc_insertion_point(field_get:substrait.Expression.EmbeddedFunction.WebAssemblyFunction.prerequisite)
  return _internal_prerequisite(index);
}
inline std::string* Expression_EmbeddedFunction_WebAssemblyFunction::mutable_prerequisite(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.Expression.EmbeddedFunction.WebAssemblyFunction.prerequisite)
  return prerequisite_.Mutable(index);
}
inline void Expression_EmbeddedFunction_WebAssemblyFunction::set_prerequisite(int index, const std::string& value) {
  prerequisite_.Mutable(index)->assign(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.EmbeddedFunction.WebAssemblyFunction.prerequisite)
}
inline void Expression_EmbeddedFunction_WebAssemblyFunction::set_prerequisite(int index, std::string&& value) {
  prerequisite_.Mutable(index)->assign(std::move(value));
  // @@protoc_insertion_point(field_set:substrait.Expression.EmbeddedFunction.WebAssemblyFunction.prerequisite)
}
inline void Expression_EmbeddedFunction_WebAssemblyFunction::set_prerequisite(int index, const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  prerequisite_.Mutable(index)->assign(value);
  // @@protoc_insertion_point(field_set_char:substrait.Expression.EmbeddedFunction.WebAssemblyFunction.prerequisite)
}
inline void Expression_EmbeddedFunction_WebAssemblyFunction::set_prerequisite(int index, const char* value, size_t size) {
  prerequisite_.Mutable(index)->assign(
    reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_set_pointer:substrait.Expression.EmbeddedFunction.WebAssemblyFunction.prerequisite)
}
inline std::string* Expression_EmbeddedFunction_WebAssemblyFunction::_internal_add_prerequisite() {
  return prerequisite_.Add();
}
inline void Expression_EmbeddedFunction_WebAssemblyFunction::add_prerequisite(const std::string& value) {
  prerequisite_.Add()->assign(value);
  // @@protoc_insertion_point(field_add:substrait.Expression.EmbeddedFunction.WebAssemblyFunction.prerequisite)
}
inline void Expression_EmbeddedFunction_WebAssemblyFunction::add_prerequisite(std::string&& value) {
  prerequisite_.Add(std::move(value));
  // @@protoc_insertion_point(field_add:substrait.Expression.EmbeddedFunction.WebAssemblyFunction.prerequisite)
}
inline void Expression_EmbeddedFunction_WebAssemblyFunction::add_prerequisite(const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  prerequisite_.Add()->assign(value);
  // @@protoc_insertion_point(field_add_char:substrait.Expression.EmbeddedFunction.WebAssemblyFunction.prerequisite)
}
inline void Expression_EmbeddedFunction_WebAssemblyFunction::add_prerequisite(const char* value, size_t size) {
  prerequisite_.Add()->assign(reinterpret_cast<const char*>(value), size);
  // @@protoc_insertion_point(field_add_pointer:substrait.Expression.EmbeddedFunction.WebAssemblyFunction.prerequisite)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>&
Expression_EmbeddedFunction_WebAssemblyFunction::prerequisite() const {
  // @@protoc_insertion_point(field_list:substrait.Expression.EmbeddedFunction.WebAssemblyFunction.prerequisite)
  return prerequisite_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>*
Expression_EmbeddedFunction_WebAssemblyFunction::mutable_prerequisite() {
  // @@protoc_insertion_point(field_mutable_list:substrait.Expression.EmbeddedFunction.WebAssemblyFunction.prerequisite)
  return &prerequisite_;
}

// -------------------------------------------------------------------

// Expression_EmbeddedFunction

// repeated .substrait.Expression arguments = 1 [json_name = "arguments"];
inline int Expression_EmbeddedFunction::_internal_arguments_size() const {
  return arguments_.size();
}
inline int Expression_EmbeddedFunction::arguments_size() const {
  return _internal_arguments_size();
}
inline void Expression_EmbeddedFunction::clear_arguments() {
  arguments_.Clear();
}
inline ::substrait::Expression* Expression_EmbeddedFunction::mutable_arguments(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.Expression.EmbeddedFunction.arguments)
  return arguments_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >*
Expression_EmbeddedFunction::mutable_arguments() {
  // @@protoc_insertion_point(field_mutable_list:substrait.Expression.EmbeddedFunction.arguments)
  return &arguments_;
}
inline const ::substrait::Expression& Expression_EmbeddedFunction::_internal_arguments(int index) const {
  return arguments_.Get(index);
}
inline const ::substrait::Expression& Expression_EmbeddedFunction::arguments(int index) const {
  // @@protoc_insertion_point(field_get:substrait.Expression.EmbeddedFunction.arguments)
  return _internal_arguments(index);
}
inline ::substrait::Expression* Expression_EmbeddedFunction::_internal_add_arguments() {
  return arguments_.Add();
}
inline ::substrait::Expression* Expression_EmbeddedFunction::add_arguments() {
  ::substrait::Expression* _add = _internal_add_arguments();
  // @@protoc_insertion_point(field_add:substrait.Expression.EmbeddedFunction.arguments)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >&
Expression_EmbeddedFunction::arguments() const {
  // @@protoc_insertion_point(field_list:substrait.Expression.EmbeddedFunction.arguments)
  return arguments_;
}

// .substrait.Type output_type = 2 [json_name = "outputType"];
inline bool Expression_EmbeddedFunction::_internal_has_output_type() const {
  return this != internal_default_instance() && output_type_ != nullptr;
}
inline bool Expression_EmbeddedFunction::has_output_type() const {
  return _internal_has_output_type();
}
inline const ::substrait::Type& Expression_EmbeddedFunction::_internal_output_type() const {
  const ::substrait::Type* p = output_type_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Type&>(
      ::substrait::_Type_default_instance_);
}
inline const ::substrait::Type& Expression_EmbeddedFunction::output_type() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.EmbeddedFunction.output_type)
  return _internal_output_type();
}
inline void Expression_EmbeddedFunction::unsafe_arena_set_allocated_output_type(
    ::substrait::Type* output_type) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(output_type_);
  }
  output_type_ = output_type;
  if (output_type) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.EmbeddedFunction.output_type)
}
inline ::substrait::Type* Expression_EmbeddedFunction::release_output_type() {
  
  ::substrait::Type* temp = output_type_;
  output_type_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Type* Expression_EmbeddedFunction::unsafe_arena_release_output_type() {
  // @@protoc_insertion_point(field_release:substrait.Expression.EmbeddedFunction.output_type)
  
  ::substrait::Type* temp = output_type_;
  output_type_ = nullptr;
  return temp;
}
inline ::substrait::Type* Expression_EmbeddedFunction::_internal_mutable_output_type() {
  
  if (output_type_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Type>(GetArenaForAllocation());
    output_type_ = p;
  }
  return output_type_;
}
inline ::substrait::Type* Expression_EmbeddedFunction::mutable_output_type() {
  ::substrait::Type* _msg = _internal_mutable_output_type();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.EmbeddedFunction.output_type)
  return _msg;
}
inline void Expression_EmbeddedFunction::set_allocated_output_type(::substrait::Type* output_type) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(output_type_);
  }
  if (output_type) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(output_type));
    if (message_arena != submessage_arena) {
      output_type = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, output_type, submessage_arena);
    }
    
  } else {
    
  }
  output_type_ = output_type;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.EmbeddedFunction.output_type)
}

// .substrait.Expression.EmbeddedFunction.PythonPickleFunction python_pickle_function = 3 [json_name = "pythonPickleFunction"];
inline bool Expression_EmbeddedFunction::_internal_has_python_pickle_function() const {
  return kind_case() == kPythonPickleFunction;
}
inline bool Expression_EmbeddedFunction::has_python_pickle_function() const {
  return _internal_has_python_pickle_function();
}
inline void Expression_EmbeddedFunction::set_has_python_pickle_function() {
  _oneof_case_[0] = kPythonPickleFunction;
}
inline void Expression_EmbeddedFunction::clear_python_pickle_function() {
  if (_internal_has_python_pickle_function()) {
    if (GetArenaForAllocation() == nullptr) {
      delete kind_.python_pickle_function_;
    }
    clear_has_kind();
  }
}
inline ::substrait::Expression_EmbeddedFunction_PythonPickleFunction* Expression_EmbeddedFunction::release_python_pickle_function() {
  // @@protoc_insertion_point(field_release:substrait.Expression.EmbeddedFunction.python_pickle_function)
  if (_internal_has_python_pickle_function()) {
    clear_has_kind();
      ::substrait::Expression_EmbeddedFunction_PythonPickleFunction* temp = kind_.python_pickle_function_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    kind_.python_pickle_function_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_EmbeddedFunction_PythonPickleFunction& Expression_EmbeddedFunction::_internal_python_pickle_function() const {
  return _internal_has_python_pickle_function()
      ? *kind_.python_pickle_function_
      : reinterpret_cast< ::substrait::Expression_EmbeddedFunction_PythonPickleFunction&>(::substrait::_Expression_EmbeddedFunction_PythonPickleFunction_default_instance_);
}
inline const ::substrait::Expression_EmbeddedFunction_PythonPickleFunction& Expression_EmbeddedFunction::python_pickle_function() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.EmbeddedFunction.python_pickle_function)
  return _internal_python_pickle_function();
}
inline ::substrait::Expression_EmbeddedFunction_PythonPickleFunction* Expression_EmbeddedFunction::unsafe_arena_release_python_pickle_function() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.EmbeddedFunction.python_pickle_function)
  if (_internal_has_python_pickle_function()) {
    clear_has_kind();
    ::substrait::Expression_EmbeddedFunction_PythonPickleFunction* temp = kind_.python_pickle_function_;
    kind_.python_pickle_function_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_EmbeddedFunction::unsafe_arena_set_allocated_python_pickle_function(::substrait::Expression_EmbeddedFunction_PythonPickleFunction* python_pickle_function) {
  clear_kind();
  if (python_pickle_function) {
    set_has_python_pickle_function();
    kind_.python_pickle_function_ = python_pickle_function;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.EmbeddedFunction.python_pickle_function)
}
inline ::substrait::Expression_EmbeddedFunction_PythonPickleFunction* Expression_EmbeddedFunction::_internal_mutable_python_pickle_function() {
  if (!_internal_has_python_pickle_function()) {
    clear_kind();
    set_has_python_pickle_function();
    kind_.python_pickle_function_ = CreateMaybeMessage< ::substrait::Expression_EmbeddedFunction_PythonPickleFunction >(GetArenaForAllocation());
  }
  return kind_.python_pickle_function_;
}
inline ::substrait::Expression_EmbeddedFunction_PythonPickleFunction* Expression_EmbeddedFunction::mutable_python_pickle_function() {
  ::substrait::Expression_EmbeddedFunction_PythonPickleFunction* _msg = _internal_mutable_python_pickle_function();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.EmbeddedFunction.python_pickle_function)
  return _msg;
}

// .substrait.Expression.EmbeddedFunction.WebAssemblyFunction web_assembly_function = 4 [json_name = "webAssemblyFunction"];
inline bool Expression_EmbeddedFunction::_internal_has_web_assembly_function() const {
  return kind_case() == kWebAssemblyFunction;
}
inline bool Expression_EmbeddedFunction::has_web_assembly_function() const {
  return _internal_has_web_assembly_function();
}
inline void Expression_EmbeddedFunction::set_has_web_assembly_function() {
  _oneof_case_[0] = kWebAssemblyFunction;
}
inline void Expression_EmbeddedFunction::clear_web_assembly_function() {
  if (_internal_has_web_assembly_function()) {
    if (GetArenaForAllocation() == nullptr) {
      delete kind_.web_assembly_function_;
    }
    clear_has_kind();
  }
}
inline ::substrait::Expression_EmbeddedFunction_WebAssemblyFunction* Expression_EmbeddedFunction::release_web_assembly_function() {
  // @@protoc_insertion_point(field_release:substrait.Expression.EmbeddedFunction.web_assembly_function)
  if (_internal_has_web_assembly_function()) {
    clear_has_kind();
      ::substrait::Expression_EmbeddedFunction_WebAssemblyFunction* temp = kind_.web_assembly_function_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    kind_.web_assembly_function_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_EmbeddedFunction_WebAssemblyFunction& Expression_EmbeddedFunction::_internal_web_assembly_function() const {
  return _internal_has_web_assembly_function()
      ? *kind_.web_assembly_function_
      : reinterpret_cast< ::substrait::Expression_EmbeddedFunction_WebAssemblyFunction&>(::substrait::_Expression_EmbeddedFunction_WebAssemblyFunction_default_instance_);
}
inline const ::substrait::Expression_EmbeddedFunction_WebAssemblyFunction& Expression_EmbeddedFunction::web_assembly_function() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.EmbeddedFunction.web_assembly_function)
  return _internal_web_assembly_function();
}
inline ::substrait::Expression_EmbeddedFunction_WebAssemblyFunction* Expression_EmbeddedFunction::unsafe_arena_release_web_assembly_function() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.EmbeddedFunction.web_assembly_function)
  if (_internal_has_web_assembly_function()) {
    clear_has_kind();
    ::substrait::Expression_EmbeddedFunction_WebAssemblyFunction* temp = kind_.web_assembly_function_;
    kind_.web_assembly_function_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_EmbeddedFunction::unsafe_arena_set_allocated_web_assembly_function(::substrait::Expression_EmbeddedFunction_WebAssemblyFunction* web_assembly_function) {
  clear_kind();
  if (web_assembly_function) {
    set_has_web_assembly_function();
    kind_.web_assembly_function_ = web_assembly_function;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.EmbeddedFunction.web_assembly_function)
}
inline ::substrait::Expression_EmbeddedFunction_WebAssemblyFunction* Expression_EmbeddedFunction::_internal_mutable_web_assembly_function() {
  if (!_internal_has_web_assembly_function()) {
    clear_kind();
    set_has_web_assembly_function();
    kind_.web_assembly_function_ = CreateMaybeMessage< ::substrait::Expression_EmbeddedFunction_WebAssemblyFunction >(GetArenaForAllocation());
  }
  return kind_.web_assembly_function_;
}
inline ::substrait::Expression_EmbeddedFunction_WebAssemblyFunction* Expression_EmbeddedFunction::mutable_web_assembly_function() {
  ::substrait::Expression_EmbeddedFunction_WebAssemblyFunction* _msg = _internal_mutable_web_assembly_function();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.EmbeddedFunction.web_assembly_function)
  return _msg;
}

inline bool Expression_EmbeddedFunction::has_kind() const {
  return kind_case() != KIND_NOT_SET;
}
inline void Expression_EmbeddedFunction::clear_has_kind() {
  _oneof_case_[0] = KIND_NOT_SET;
}
inline Expression_EmbeddedFunction::KindCase Expression_EmbeddedFunction::kind_case() const {
  return Expression_EmbeddedFunction::KindCase(_oneof_case_[0]);
}
// -------------------------------------------------------------------

// Expression_ReferenceSegment_MapKey

// .substrait.Expression.Literal map_key = 1 [json_name = "mapKey"];
inline bool Expression_ReferenceSegment_MapKey::_internal_has_map_key() const {
  return this != internal_default_instance() && map_key_ != nullptr;
}
inline bool Expression_ReferenceSegment_MapKey::has_map_key() const {
  return _internal_has_map_key();
}
inline void Expression_ReferenceSegment_MapKey::clear_map_key() {
  if (GetArenaForAllocation() == nullptr && map_key_ != nullptr) {
    delete map_key_;
  }
  map_key_ = nullptr;
}
inline const ::substrait::Expression_Literal& Expression_ReferenceSegment_MapKey::_internal_map_key() const {
  const ::substrait::Expression_Literal* p = map_key_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression_Literal&>(
      ::substrait::_Expression_Literal_default_instance_);
}
inline const ::substrait::Expression_Literal& Expression_ReferenceSegment_MapKey::map_key() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.ReferenceSegment.MapKey.map_key)
  return _internal_map_key();
}
inline void Expression_ReferenceSegment_MapKey::unsafe_arena_set_allocated_map_key(
    ::substrait::Expression_Literal* map_key) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(map_key_);
  }
  map_key_ = map_key;
  if (map_key) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.ReferenceSegment.MapKey.map_key)
}
inline ::substrait::Expression_Literal* Expression_ReferenceSegment_MapKey::release_map_key() {
  
  ::substrait::Expression_Literal* temp = map_key_;
  map_key_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression_Literal* Expression_ReferenceSegment_MapKey::unsafe_arena_release_map_key() {
  // @@protoc_insertion_point(field_release:substrait.Expression.ReferenceSegment.MapKey.map_key)
  
  ::substrait::Expression_Literal* temp = map_key_;
  map_key_ = nullptr;
  return temp;
}
inline ::substrait::Expression_Literal* Expression_ReferenceSegment_MapKey::_internal_mutable_map_key() {
  
  if (map_key_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression_Literal>(GetArenaForAllocation());
    map_key_ = p;
  }
  return map_key_;
}
inline ::substrait::Expression_Literal* Expression_ReferenceSegment_MapKey::mutable_map_key() {
  ::substrait::Expression_Literal* _msg = _internal_mutable_map_key();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.ReferenceSegment.MapKey.map_key)
  return _msg;
}
inline void Expression_ReferenceSegment_MapKey::set_allocated_map_key(::substrait::Expression_Literal* map_key) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete map_key_;
  }
  if (map_key) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression_Literal>::GetOwningArena(map_key);
    if (message_arena != submessage_arena) {
      map_key = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, map_key, submessage_arena);
    }
    
  } else {
    
  }
  map_key_ = map_key;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.ReferenceSegment.MapKey.map_key)
}

// .substrait.Expression.ReferenceSegment child = 2 [json_name = "child"];
inline bool Expression_ReferenceSegment_MapKey::_internal_has_child() const {
  return this != internal_default_instance() && child_ != nullptr;
}
inline bool Expression_ReferenceSegment_MapKey::has_child() const {
  return _internal_has_child();
}
inline void Expression_ReferenceSegment_MapKey::clear_child() {
  if (GetArenaForAllocation() == nullptr && child_ != nullptr) {
    delete child_;
  }
  child_ = nullptr;
}
inline const ::substrait::Expression_ReferenceSegment& Expression_ReferenceSegment_MapKey::_internal_child() const {
  const ::substrait::Expression_ReferenceSegment* p = child_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression_ReferenceSegment&>(
      ::substrait::_Expression_ReferenceSegment_default_instance_);
}
inline const ::substrait::Expression_ReferenceSegment& Expression_ReferenceSegment_MapKey::child() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.ReferenceSegment.MapKey.child)
  return _internal_child();
}
inline void Expression_ReferenceSegment_MapKey::unsafe_arena_set_allocated_child(
    ::substrait::Expression_ReferenceSegment* child) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(child_);
  }
  child_ = child;
  if (child) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.ReferenceSegment.MapKey.child)
}
inline ::substrait::Expression_ReferenceSegment* Expression_ReferenceSegment_MapKey::release_child() {
  
  ::substrait::Expression_ReferenceSegment* temp = child_;
  child_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression_ReferenceSegment* Expression_ReferenceSegment_MapKey::unsafe_arena_release_child() {
  // @@protoc_insertion_point(field_release:substrait.Expression.ReferenceSegment.MapKey.child)
  
  ::substrait::Expression_ReferenceSegment* temp = child_;
  child_ = nullptr;
  return temp;
}
inline ::substrait::Expression_ReferenceSegment* Expression_ReferenceSegment_MapKey::_internal_mutable_child() {
  
  if (child_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression_ReferenceSegment>(GetArenaForAllocation());
    child_ = p;
  }
  return child_;
}
inline ::substrait::Expression_ReferenceSegment* Expression_ReferenceSegment_MapKey::mutable_child() {
  ::substrait::Expression_ReferenceSegment* _msg = _internal_mutable_child();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.ReferenceSegment.MapKey.child)
  return _msg;
}
inline void Expression_ReferenceSegment_MapKey::set_allocated_child(::substrait::Expression_ReferenceSegment* child) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete child_;
  }
  if (child) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression_ReferenceSegment>::GetOwningArena(child);
    if (message_arena != submessage_arena) {
      child = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, child, submessage_arena);
    }
    
  } else {
    
  }
  child_ = child;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.ReferenceSegment.MapKey.child)
}

// -------------------------------------------------------------------

// Expression_ReferenceSegment_StructField

// int32 field = 1 [json_name = "field"];
inline void Expression_ReferenceSegment_StructField::clear_field() {
  field_ = 0;
}
inline int32_t Expression_ReferenceSegment_StructField::_internal_field() const {
  return field_;
}
inline int32_t Expression_ReferenceSegment_StructField::field() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.ReferenceSegment.StructField.field)
  return _internal_field();
}
inline void Expression_ReferenceSegment_StructField::_internal_set_field(int32_t value) {
  
  field_ = value;
}
inline void Expression_ReferenceSegment_StructField::set_field(int32_t value) {
  _internal_set_field(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.ReferenceSegment.StructField.field)
}

// .substrait.Expression.ReferenceSegment child = 2 [json_name = "child"];
inline bool Expression_ReferenceSegment_StructField::_internal_has_child() const {
  return this != internal_default_instance() && child_ != nullptr;
}
inline bool Expression_ReferenceSegment_StructField::has_child() const {
  return _internal_has_child();
}
inline void Expression_ReferenceSegment_StructField::clear_child() {
  if (GetArenaForAllocation() == nullptr && child_ != nullptr) {
    delete child_;
  }
  child_ = nullptr;
}
inline const ::substrait::Expression_ReferenceSegment& Expression_ReferenceSegment_StructField::_internal_child() const {
  const ::substrait::Expression_ReferenceSegment* p = child_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression_ReferenceSegment&>(
      ::substrait::_Expression_ReferenceSegment_default_instance_);
}
inline const ::substrait::Expression_ReferenceSegment& Expression_ReferenceSegment_StructField::child() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.ReferenceSegment.StructField.child)
  return _internal_child();
}
inline void Expression_ReferenceSegment_StructField::unsafe_arena_set_allocated_child(
    ::substrait::Expression_ReferenceSegment* child) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(child_);
  }
  child_ = child;
  if (child) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.ReferenceSegment.StructField.child)
}
inline ::substrait::Expression_ReferenceSegment* Expression_ReferenceSegment_StructField::release_child() {
  
  ::substrait::Expression_ReferenceSegment* temp = child_;
  child_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression_ReferenceSegment* Expression_ReferenceSegment_StructField::unsafe_arena_release_child() {
  // @@protoc_insertion_point(field_release:substrait.Expression.ReferenceSegment.StructField.child)
  
  ::substrait::Expression_ReferenceSegment* temp = child_;
  child_ = nullptr;
  return temp;
}
inline ::substrait::Expression_ReferenceSegment* Expression_ReferenceSegment_StructField::_internal_mutable_child() {
  
  if (child_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression_ReferenceSegment>(GetArenaForAllocation());
    child_ = p;
  }
  return child_;
}
inline ::substrait::Expression_ReferenceSegment* Expression_ReferenceSegment_StructField::mutable_child() {
  ::substrait::Expression_ReferenceSegment* _msg = _internal_mutable_child();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.ReferenceSegment.StructField.child)
  return _msg;
}
inline void Expression_ReferenceSegment_StructField::set_allocated_child(::substrait::Expression_ReferenceSegment* child) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete child_;
  }
  if (child) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression_ReferenceSegment>::GetOwningArena(child);
    if (message_arena != submessage_arena) {
      child = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, child, submessage_arena);
    }
    
  } else {
    
  }
  child_ = child;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.ReferenceSegment.StructField.child)
}

// -------------------------------------------------------------------

// Expression_ReferenceSegment_ListElement

// int32 offset = 1 [json_name = "offset"];
inline void Expression_ReferenceSegment_ListElement::clear_offset() {
  offset_ = 0;
}
inline int32_t Expression_ReferenceSegment_ListElement::_internal_offset() const {
  return offset_;
}
inline int32_t Expression_ReferenceSegment_ListElement::offset() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.ReferenceSegment.ListElement.offset)
  return _internal_offset();
}
inline void Expression_ReferenceSegment_ListElement::_internal_set_offset(int32_t value) {
  
  offset_ = value;
}
inline void Expression_ReferenceSegment_ListElement::set_offset(int32_t value) {
  _internal_set_offset(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.ReferenceSegment.ListElement.offset)
}

// .substrait.Expression.ReferenceSegment child = 2 [json_name = "child"];
inline bool Expression_ReferenceSegment_ListElement::_internal_has_child() const {
  return this != internal_default_instance() && child_ != nullptr;
}
inline bool Expression_ReferenceSegment_ListElement::has_child() const {
  return _internal_has_child();
}
inline void Expression_ReferenceSegment_ListElement::clear_child() {
  if (GetArenaForAllocation() == nullptr && child_ != nullptr) {
    delete child_;
  }
  child_ = nullptr;
}
inline const ::substrait::Expression_ReferenceSegment& Expression_ReferenceSegment_ListElement::_internal_child() const {
  const ::substrait::Expression_ReferenceSegment* p = child_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression_ReferenceSegment&>(
      ::substrait::_Expression_ReferenceSegment_default_instance_);
}
inline const ::substrait::Expression_ReferenceSegment& Expression_ReferenceSegment_ListElement::child() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.ReferenceSegment.ListElement.child)
  return _internal_child();
}
inline void Expression_ReferenceSegment_ListElement::unsafe_arena_set_allocated_child(
    ::substrait::Expression_ReferenceSegment* child) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(child_);
  }
  child_ = child;
  if (child) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.ReferenceSegment.ListElement.child)
}
inline ::substrait::Expression_ReferenceSegment* Expression_ReferenceSegment_ListElement::release_child() {
  
  ::substrait::Expression_ReferenceSegment* temp = child_;
  child_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression_ReferenceSegment* Expression_ReferenceSegment_ListElement::unsafe_arena_release_child() {
  // @@protoc_insertion_point(field_release:substrait.Expression.ReferenceSegment.ListElement.child)
  
  ::substrait::Expression_ReferenceSegment* temp = child_;
  child_ = nullptr;
  return temp;
}
inline ::substrait::Expression_ReferenceSegment* Expression_ReferenceSegment_ListElement::_internal_mutable_child() {
  
  if (child_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression_ReferenceSegment>(GetArenaForAllocation());
    child_ = p;
  }
  return child_;
}
inline ::substrait::Expression_ReferenceSegment* Expression_ReferenceSegment_ListElement::mutable_child() {
  ::substrait::Expression_ReferenceSegment* _msg = _internal_mutable_child();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.ReferenceSegment.ListElement.child)
  return _msg;
}
inline void Expression_ReferenceSegment_ListElement::set_allocated_child(::substrait::Expression_ReferenceSegment* child) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete child_;
  }
  if (child) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression_ReferenceSegment>::GetOwningArena(child);
    if (message_arena != submessage_arena) {
      child = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, child, submessage_arena);
    }
    
  } else {
    
  }
  child_ = child;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.ReferenceSegment.ListElement.child)
}

// -------------------------------------------------------------------

// Expression_ReferenceSegment

// .substrait.Expression.ReferenceSegment.MapKey map_key = 1 [json_name = "mapKey"];
inline bool Expression_ReferenceSegment::_internal_has_map_key() const {
  return reference_type_case() == kMapKey;
}
inline bool Expression_ReferenceSegment::has_map_key() const {
  return _internal_has_map_key();
}
inline void Expression_ReferenceSegment::set_has_map_key() {
  _oneof_case_[0] = kMapKey;
}
inline void Expression_ReferenceSegment::clear_map_key() {
  if (_internal_has_map_key()) {
    if (GetArenaForAllocation() == nullptr) {
      delete reference_type_.map_key_;
    }
    clear_has_reference_type();
  }
}
inline ::substrait::Expression_ReferenceSegment_MapKey* Expression_ReferenceSegment::release_map_key() {
  // @@protoc_insertion_point(field_release:substrait.Expression.ReferenceSegment.map_key)
  if (_internal_has_map_key()) {
    clear_has_reference_type();
      ::substrait::Expression_ReferenceSegment_MapKey* temp = reference_type_.map_key_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    reference_type_.map_key_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_ReferenceSegment_MapKey& Expression_ReferenceSegment::_internal_map_key() const {
  return _internal_has_map_key()
      ? *reference_type_.map_key_
      : reinterpret_cast< ::substrait::Expression_ReferenceSegment_MapKey&>(::substrait::_Expression_ReferenceSegment_MapKey_default_instance_);
}
inline const ::substrait::Expression_ReferenceSegment_MapKey& Expression_ReferenceSegment::map_key() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.ReferenceSegment.map_key)
  return _internal_map_key();
}
inline ::substrait::Expression_ReferenceSegment_MapKey* Expression_ReferenceSegment::unsafe_arena_release_map_key() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.ReferenceSegment.map_key)
  if (_internal_has_map_key()) {
    clear_has_reference_type();
    ::substrait::Expression_ReferenceSegment_MapKey* temp = reference_type_.map_key_;
    reference_type_.map_key_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_ReferenceSegment::unsafe_arena_set_allocated_map_key(::substrait::Expression_ReferenceSegment_MapKey* map_key) {
  clear_reference_type();
  if (map_key) {
    set_has_map_key();
    reference_type_.map_key_ = map_key;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.ReferenceSegment.map_key)
}
inline ::substrait::Expression_ReferenceSegment_MapKey* Expression_ReferenceSegment::_internal_mutable_map_key() {
  if (!_internal_has_map_key()) {
    clear_reference_type();
    set_has_map_key();
    reference_type_.map_key_ = CreateMaybeMessage< ::substrait::Expression_ReferenceSegment_MapKey >(GetArenaForAllocation());
  }
  return reference_type_.map_key_;
}
inline ::substrait::Expression_ReferenceSegment_MapKey* Expression_ReferenceSegment::mutable_map_key() {
  ::substrait::Expression_ReferenceSegment_MapKey* _msg = _internal_mutable_map_key();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.ReferenceSegment.map_key)
  return _msg;
}

// .substrait.Expression.ReferenceSegment.StructField struct_field = 2 [json_name = "structField"];
inline bool Expression_ReferenceSegment::_internal_has_struct_field() const {
  return reference_type_case() == kStructField;
}
inline bool Expression_ReferenceSegment::has_struct_field() const {
  return _internal_has_struct_field();
}
inline void Expression_ReferenceSegment::set_has_struct_field() {
  _oneof_case_[0] = kStructField;
}
inline void Expression_ReferenceSegment::clear_struct_field() {
  if (_internal_has_struct_field()) {
    if (GetArenaForAllocation() == nullptr) {
      delete reference_type_.struct_field_;
    }
    clear_has_reference_type();
  }
}
inline ::substrait::Expression_ReferenceSegment_StructField* Expression_ReferenceSegment::release_struct_field() {
  // @@protoc_insertion_point(field_release:substrait.Expression.ReferenceSegment.struct_field)
  if (_internal_has_struct_field()) {
    clear_has_reference_type();
      ::substrait::Expression_ReferenceSegment_StructField* temp = reference_type_.struct_field_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    reference_type_.struct_field_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_ReferenceSegment_StructField& Expression_ReferenceSegment::_internal_struct_field() const {
  return _internal_has_struct_field()
      ? *reference_type_.struct_field_
      : reinterpret_cast< ::substrait::Expression_ReferenceSegment_StructField&>(::substrait::_Expression_ReferenceSegment_StructField_default_instance_);
}
inline const ::substrait::Expression_ReferenceSegment_StructField& Expression_ReferenceSegment::struct_field() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.ReferenceSegment.struct_field)
  return _internal_struct_field();
}
inline ::substrait::Expression_ReferenceSegment_StructField* Expression_ReferenceSegment::unsafe_arena_release_struct_field() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.ReferenceSegment.struct_field)
  if (_internal_has_struct_field()) {
    clear_has_reference_type();
    ::substrait::Expression_ReferenceSegment_StructField* temp = reference_type_.struct_field_;
    reference_type_.struct_field_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_ReferenceSegment::unsafe_arena_set_allocated_struct_field(::substrait::Expression_ReferenceSegment_StructField* struct_field) {
  clear_reference_type();
  if (struct_field) {
    set_has_struct_field();
    reference_type_.struct_field_ = struct_field;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.ReferenceSegment.struct_field)
}
inline ::substrait::Expression_ReferenceSegment_StructField* Expression_ReferenceSegment::_internal_mutable_struct_field() {
  if (!_internal_has_struct_field()) {
    clear_reference_type();
    set_has_struct_field();
    reference_type_.struct_field_ = CreateMaybeMessage< ::substrait::Expression_ReferenceSegment_StructField >(GetArenaForAllocation());
  }
  return reference_type_.struct_field_;
}
inline ::substrait::Expression_ReferenceSegment_StructField* Expression_ReferenceSegment::mutable_struct_field() {
  ::substrait::Expression_ReferenceSegment_StructField* _msg = _internal_mutable_struct_field();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.ReferenceSegment.struct_field)
  return _msg;
}

// .substrait.Expression.ReferenceSegment.ListElement list_element = 3 [json_name = "listElement"];
inline bool Expression_ReferenceSegment::_internal_has_list_element() const {
  return reference_type_case() == kListElement;
}
inline bool Expression_ReferenceSegment::has_list_element() const {
  return _internal_has_list_element();
}
inline void Expression_ReferenceSegment::set_has_list_element() {
  _oneof_case_[0] = kListElement;
}
inline void Expression_ReferenceSegment::clear_list_element() {
  if (_internal_has_list_element()) {
    if (GetArenaForAllocation() == nullptr) {
      delete reference_type_.list_element_;
    }
    clear_has_reference_type();
  }
}
inline ::substrait::Expression_ReferenceSegment_ListElement* Expression_ReferenceSegment::release_list_element() {
  // @@protoc_insertion_point(field_release:substrait.Expression.ReferenceSegment.list_element)
  if (_internal_has_list_element()) {
    clear_has_reference_type();
      ::substrait::Expression_ReferenceSegment_ListElement* temp = reference_type_.list_element_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    reference_type_.list_element_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_ReferenceSegment_ListElement& Expression_ReferenceSegment::_internal_list_element() const {
  return _internal_has_list_element()
      ? *reference_type_.list_element_
      : reinterpret_cast< ::substrait::Expression_ReferenceSegment_ListElement&>(::substrait::_Expression_ReferenceSegment_ListElement_default_instance_);
}
inline const ::substrait::Expression_ReferenceSegment_ListElement& Expression_ReferenceSegment::list_element() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.ReferenceSegment.list_element)
  return _internal_list_element();
}
inline ::substrait::Expression_ReferenceSegment_ListElement* Expression_ReferenceSegment::unsafe_arena_release_list_element() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.ReferenceSegment.list_element)
  if (_internal_has_list_element()) {
    clear_has_reference_type();
    ::substrait::Expression_ReferenceSegment_ListElement* temp = reference_type_.list_element_;
    reference_type_.list_element_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_ReferenceSegment::unsafe_arena_set_allocated_list_element(::substrait::Expression_ReferenceSegment_ListElement* list_element) {
  clear_reference_type();
  if (list_element) {
    set_has_list_element();
    reference_type_.list_element_ = list_element;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.ReferenceSegment.list_element)
}
inline ::substrait::Expression_ReferenceSegment_ListElement* Expression_ReferenceSegment::_internal_mutable_list_element() {
  if (!_internal_has_list_element()) {
    clear_reference_type();
    set_has_list_element();
    reference_type_.list_element_ = CreateMaybeMessage< ::substrait::Expression_ReferenceSegment_ListElement >(GetArenaForAllocation());
  }
  return reference_type_.list_element_;
}
inline ::substrait::Expression_ReferenceSegment_ListElement* Expression_ReferenceSegment::mutable_list_element() {
  ::substrait::Expression_ReferenceSegment_ListElement* _msg = _internal_mutable_list_element();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.ReferenceSegment.list_element)
  return _msg;
}

inline bool Expression_ReferenceSegment::has_reference_type() const {
  return reference_type_case() != REFERENCE_TYPE_NOT_SET;
}
inline void Expression_ReferenceSegment::clear_has_reference_type() {
  _oneof_case_[0] = REFERENCE_TYPE_NOT_SET;
}
inline Expression_ReferenceSegment::ReferenceTypeCase Expression_ReferenceSegment::reference_type_case() const {
  return Expression_ReferenceSegment::ReferenceTypeCase(_oneof_case_[0]);
}
// -------------------------------------------------------------------

// Expression_MaskExpression_Select

// .substrait.Expression.MaskExpression.StructSelect struct = 1 [json_name = "struct"];
inline bool Expression_MaskExpression_Select::_internal_has_struct_() const {
  return type_case() == kStruct;
}
inline bool Expression_MaskExpression_Select::has_struct_() const {
  return _internal_has_struct_();
}
inline void Expression_MaskExpression_Select::set_has_struct_() {
  _oneof_case_[0] = kStruct;
}
inline void Expression_MaskExpression_Select::clear_struct_() {
  if (_internal_has_struct_()) {
    if (GetArenaForAllocation() == nullptr) {
      delete type_.struct__;
    }
    clear_has_type();
  }
}
inline ::substrait::Expression_MaskExpression_StructSelect* Expression_MaskExpression_Select::release_struct_() {
  // @@protoc_insertion_point(field_release:substrait.Expression.MaskExpression.Select.struct)
  if (_internal_has_struct_()) {
    clear_has_type();
      ::substrait::Expression_MaskExpression_StructSelect* temp = type_.struct__;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    type_.struct__ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_MaskExpression_StructSelect& Expression_MaskExpression_Select::_internal_struct_() const {
  return _internal_has_struct_()
      ? *type_.struct__
      : reinterpret_cast< ::substrait::Expression_MaskExpression_StructSelect&>(::substrait::_Expression_MaskExpression_StructSelect_default_instance_);
}
inline const ::substrait::Expression_MaskExpression_StructSelect& Expression_MaskExpression_Select::struct_() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.MaskExpression.Select.struct)
  return _internal_struct_();
}
inline ::substrait::Expression_MaskExpression_StructSelect* Expression_MaskExpression_Select::unsafe_arena_release_struct_() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.MaskExpression.Select.struct)
  if (_internal_has_struct_()) {
    clear_has_type();
    ::substrait::Expression_MaskExpression_StructSelect* temp = type_.struct__;
    type_.struct__ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_MaskExpression_Select::unsafe_arena_set_allocated_struct_(::substrait::Expression_MaskExpression_StructSelect* struct_) {
  clear_type();
  if (struct_) {
    set_has_struct_();
    type_.struct__ = struct_;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.MaskExpression.Select.struct)
}
inline ::substrait::Expression_MaskExpression_StructSelect* Expression_MaskExpression_Select::_internal_mutable_struct_() {
  if (!_internal_has_struct_()) {
    clear_type();
    set_has_struct_();
    type_.struct__ = CreateMaybeMessage< ::substrait::Expression_MaskExpression_StructSelect >(GetArenaForAllocation());
  }
  return type_.struct__;
}
inline ::substrait::Expression_MaskExpression_StructSelect* Expression_MaskExpression_Select::mutable_struct_() {
  ::substrait::Expression_MaskExpression_StructSelect* _msg = _internal_mutable_struct_();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.MaskExpression.Select.struct)
  return _msg;
}

// .substrait.Expression.MaskExpression.ListSelect list = 2 [json_name = "list"];
inline bool Expression_MaskExpression_Select::_internal_has_list() const {
  return type_case() == kList;
}
inline bool Expression_MaskExpression_Select::has_list() const {
  return _internal_has_list();
}
inline void Expression_MaskExpression_Select::set_has_list() {
  _oneof_case_[0] = kList;
}
inline void Expression_MaskExpression_Select::clear_list() {
  if (_internal_has_list()) {
    if (GetArenaForAllocation() == nullptr) {
      delete type_.list_;
    }
    clear_has_type();
  }
}
inline ::substrait::Expression_MaskExpression_ListSelect* Expression_MaskExpression_Select::release_list() {
  // @@protoc_insertion_point(field_release:substrait.Expression.MaskExpression.Select.list)
  if (_internal_has_list()) {
    clear_has_type();
      ::substrait::Expression_MaskExpression_ListSelect* temp = type_.list_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    type_.list_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_MaskExpression_ListSelect& Expression_MaskExpression_Select::_internal_list() const {
  return _internal_has_list()
      ? *type_.list_
      : reinterpret_cast< ::substrait::Expression_MaskExpression_ListSelect&>(::substrait::_Expression_MaskExpression_ListSelect_default_instance_);
}
inline const ::substrait::Expression_MaskExpression_ListSelect& Expression_MaskExpression_Select::list() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.MaskExpression.Select.list)
  return _internal_list();
}
inline ::substrait::Expression_MaskExpression_ListSelect* Expression_MaskExpression_Select::unsafe_arena_release_list() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.MaskExpression.Select.list)
  if (_internal_has_list()) {
    clear_has_type();
    ::substrait::Expression_MaskExpression_ListSelect* temp = type_.list_;
    type_.list_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_MaskExpression_Select::unsafe_arena_set_allocated_list(::substrait::Expression_MaskExpression_ListSelect* list) {
  clear_type();
  if (list) {
    set_has_list();
    type_.list_ = list;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.MaskExpression.Select.list)
}
inline ::substrait::Expression_MaskExpression_ListSelect* Expression_MaskExpression_Select::_internal_mutable_list() {
  if (!_internal_has_list()) {
    clear_type();
    set_has_list();
    type_.list_ = CreateMaybeMessage< ::substrait::Expression_MaskExpression_ListSelect >(GetArenaForAllocation());
  }
  return type_.list_;
}
inline ::substrait::Expression_MaskExpression_ListSelect* Expression_MaskExpression_Select::mutable_list() {
  ::substrait::Expression_MaskExpression_ListSelect* _msg = _internal_mutable_list();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.MaskExpression.Select.list)
  return _msg;
}

// .substrait.Expression.MaskExpression.MapSelect map = 3 [json_name = "map"];
inline bool Expression_MaskExpression_Select::_internal_has_map() const {
  return type_case() == kMap;
}
inline bool Expression_MaskExpression_Select::has_map() const {
  return _internal_has_map();
}
inline void Expression_MaskExpression_Select::set_has_map() {
  _oneof_case_[0] = kMap;
}
inline void Expression_MaskExpression_Select::clear_map() {
  if (_internal_has_map()) {
    if (GetArenaForAllocation() == nullptr) {
      delete type_.map_;
    }
    clear_has_type();
  }
}
inline ::substrait::Expression_MaskExpression_MapSelect* Expression_MaskExpression_Select::release_map() {
  // @@protoc_insertion_point(field_release:substrait.Expression.MaskExpression.Select.map)
  if (_internal_has_map()) {
    clear_has_type();
      ::substrait::Expression_MaskExpression_MapSelect* temp = type_.map_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    type_.map_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_MaskExpression_MapSelect& Expression_MaskExpression_Select::_internal_map() const {
  return _internal_has_map()
      ? *type_.map_
      : reinterpret_cast< ::substrait::Expression_MaskExpression_MapSelect&>(::substrait::_Expression_MaskExpression_MapSelect_default_instance_);
}
inline const ::substrait::Expression_MaskExpression_MapSelect& Expression_MaskExpression_Select::map() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.MaskExpression.Select.map)
  return _internal_map();
}
inline ::substrait::Expression_MaskExpression_MapSelect* Expression_MaskExpression_Select::unsafe_arena_release_map() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.MaskExpression.Select.map)
  if (_internal_has_map()) {
    clear_has_type();
    ::substrait::Expression_MaskExpression_MapSelect* temp = type_.map_;
    type_.map_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_MaskExpression_Select::unsafe_arena_set_allocated_map(::substrait::Expression_MaskExpression_MapSelect* map) {
  clear_type();
  if (map) {
    set_has_map();
    type_.map_ = map;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.MaskExpression.Select.map)
}
inline ::substrait::Expression_MaskExpression_MapSelect* Expression_MaskExpression_Select::_internal_mutable_map() {
  if (!_internal_has_map()) {
    clear_type();
    set_has_map();
    type_.map_ = CreateMaybeMessage< ::substrait::Expression_MaskExpression_MapSelect >(GetArenaForAllocation());
  }
  return type_.map_;
}
inline ::substrait::Expression_MaskExpression_MapSelect* Expression_MaskExpression_Select::mutable_map() {
  ::substrait::Expression_MaskExpression_MapSelect* _msg = _internal_mutable_map();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.MaskExpression.Select.map)
  return _msg;
}

inline bool Expression_MaskExpression_Select::has_type() const {
  return type_case() != TYPE_NOT_SET;
}
inline void Expression_MaskExpression_Select::clear_has_type() {
  _oneof_case_[0] = TYPE_NOT_SET;
}
inline Expression_MaskExpression_Select::TypeCase Expression_MaskExpression_Select::type_case() const {
  return Expression_MaskExpression_Select::TypeCase(_oneof_case_[0]);
}
// -------------------------------------------------------------------

// Expression_MaskExpression_StructSelect

// repeated .substrait.Expression.MaskExpression.StructItem struct_items = 1 [json_name = "structItems"];
inline int Expression_MaskExpression_StructSelect::_internal_struct_items_size() const {
  return struct_items_.size();
}
inline int Expression_MaskExpression_StructSelect::struct_items_size() const {
  return _internal_struct_items_size();
}
inline void Expression_MaskExpression_StructSelect::clear_struct_items() {
  struct_items_.Clear();
}
inline ::substrait::Expression_MaskExpression_StructItem* Expression_MaskExpression_StructSelect::mutable_struct_items(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.Expression.MaskExpression.StructSelect.struct_items)
  return struct_items_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_MaskExpression_StructItem >*
Expression_MaskExpression_StructSelect::mutable_struct_items() {
  // @@protoc_insertion_point(field_mutable_list:substrait.Expression.MaskExpression.StructSelect.struct_items)
  return &struct_items_;
}
inline const ::substrait::Expression_MaskExpression_StructItem& Expression_MaskExpression_StructSelect::_internal_struct_items(int index) const {
  return struct_items_.Get(index);
}
inline const ::substrait::Expression_MaskExpression_StructItem& Expression_MaskExpression_StructSelect::struct_items(int index) const {
  // @@protoc_insertion_point(field_get:substrait.Expression.MaskExpression.StructSelect.struct_items)
  return _internal_struct_items(index);
}
inline ::substrait::Expression_MaskExpression_StructItem* Expression_MaskExpression_StructSelect::_internal_add_struct_items() {
  return struct_items_.Add();
}
inline ::substrait::Expression_MaskExpression_StructItem* Expression_MaskExpression_StructSelect::add_struct_items() {
  ::substrait::Expression_MaskExpression_StructItem* _add = _internal_add_struct_items();
  // @@protoc_insertion_point(field_add:substrait.Expression.MaskExpression.StructSelect.struct_items)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_MaskExpression_StructItem >&
Expression_MaskExpression_StructSelect::struct_items() const {
  // @@protoc_insertion_point(field_list:substrait.Expression.MaskExpression.StructSelect.struct_items)
  return struct_items_;
}

// -------------------------------------------------------------------

// Expression_MaskExpression_StructItem

// int32 field = 1 [json_name = "field"];
inline void Expression_MaskExpression_StructItem::clear_field() {
  field_ = 0;
}
inline int32_t Expression_MaskExpression_StructItem::_internal_field() const {
  return field_;
}
inline int32_t Expression_MaskExpression_StructItem::field() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.MaskExpression.StructItem.field)
  return _internal_field();
}
inline void Expression_MaskExpression_StructItem::_internal_set_field(int32_t value) {
  
  field_ = value;
}
inline void Expression_MaskExpression_StructItem::set_field(int32_t value) {
  _internal_set_field(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.MaskExpression.StructItem.field)
}

// .substrait.Expression.MaskExpression.Select child = 2 [json_name = "child"];
inline bool Expression_MaskExpression_StructItem::_internal_has_child() const {
  return this != internal_default_instance() && child_ != nullptr;
}
inline bool Expression_MaskExpression_StructItem::has_child() const {
  return _internal_has_child();
}
inline void Expression_MaskExpression_StructItem::clear_child() {
  if (GetArenaForAllocation() == nullptr && child_ != nullptr) {
    delete child_;
  }
  child_ = nullptr;
}
inline const ::substrait::Expression_MaskExpression_Select& Expression_MaskExpression_StructItem::_internal_child() const {
  const ::substrait::Expression_MaskExpression_Select* p = child_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression_MaskExpression_Select&>(
      ::substrait::_Expression_MaskExpression_Select_default_instance_);
}
inline const ::substrait::Expression_MaskExpression_Select& Expression_MaskExpression_StructItem::child() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.MaskExpression.StructItem.child)
  return _internal_child();
}
inline void Expression_MaskExpression_StructItem::unsafe_arena_set_allocated_child(
    ::substrait::Expression_MaskExpression_Select* child) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(child_);
  }
  child_ = child;
  if (child) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.MaskExpression.StructItem.child)
}
inline ::substrait::Expression_MaskExpression_Select* Expression_MaskExpression_StructItem::release_child() {
  
  ::substrait::Expression_MaskExpression_Select* temp = child_;
  child_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression_MaskExpression_Select* Expression_MaskExpression_StructItem::unsafe_arena_release_child() {
  // @@protoc_insertion_point(field_release:substrait.Expression.MaskExpression.StructItem.child)
  
  ::substrait::Expression_MaskExpression_Select* temp = child_;
  child_ = nullptr;
  return temp;
}
inline ::substrait::Expression_MaskExpression_Select* Expression_MaskExpression_StructItem::_internal_mutable_child() {
  
  if (child_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression_MaskExpression_Select>(GetArenaForAllocation());
    child_ = p;
  }
  return child_;
}
inline ::substrait::Expression_MaskExpression_Select* Expression_MaskExpression_StructItem::mutable_child() {
  ::substrait::Expression_MaskExpression_Select* _msg = _internal_mutable_child();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.MaskExpression.StructItem.child)
  return _msg;
}
inline void Expression_MaskExpression_StructItem::set_allocated_child(::substrait::Expression_MaskExpression_Select* child) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete child_;
  }
  if (child) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression_MaskExpression_Select>::GetOwningArena(child);
    if (message_arena != submessage_arena) {
      child = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, child, submessage_arena);
    }
    
  } else {
    
  }
  child_ = child;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.MaskExpression.StructItem.child)
}

// -------------------------------------------------------------------

// Expression_MaskExpression_ListSelect_ListSelectItem_ListElement

// int32 field = 1 [json_name = "field"];
inline void Expression_MaskExpression_ListSelect_ListSelectItem_ListElement::clear_field() {
  field_ = 0;
}
inline int32_t Expression_MaskExpression_ListSelect_ListSelectItem_ListElement::_internal_field() const {
  return field_;
}
inline int32_t Expression_MaskExpression_ListSelect_ListSelectItem_ListElement::field() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.MaskExpression.ListSelect.ListSelectItem.ListElement.field)
  return _internal_field();
}
inline void Expression_MaskExpression_ListSelect_ListSelectItem_ListElement::_internal_set_field(int32_t value) {
  
  field_ = value;
}
inline void Expression_MaskExpression_ListSelect_ListSelectItem_ListElement::set_field(int32_t value) {
  _internal_set_field(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.MaskExpression.ListSelect.ListSelectItem.ListElement.field)
}

// -------------------------------------------------------------------

// Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice

// int32 start = 1 [json_name = "start"];
inline void Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice::clear_start() {
  start_ = 0;
}
inline int32_t Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice::_internal_start() const {
  return start_;
}
inline int32_t Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice::start() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.MaskExpression.ListSelect.ListSelectItem.ListSlice.start)
  return _internal_start();
}
inline void Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice::_internal_set_start(int32_t value) {
  
  start_ = value;
}
inline void Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice::set_start(int32_t value) {
  _internal_set_start(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.MaskExpression.ListSelect.ListSelectItem.ListSlice.start)
}

// int32 end = 2 [json_name = "end"];
inline void Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice::clear_end() {
  end_ = 0;
}
inline int32_t Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice::_internal_end() const {
  return end_;
}
inline int32_t Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice::end() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.MaskExpression.ListSelect.ListSelectItem.ListSlice.end)
  return _internal_end();
}
inline void Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice::_internal_set_end(int32_t value) {
  
  end_ = value;
}
inline void Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice::set_end(int32_t value) {
  _internal_set_end(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.MaskExpression.ListSelect.ListSelectItem.ListSlice.end)
}

// -------------------------------------------------------------------

// Expression_MaskExpression_ListSelect_ListSelectItem

// .substrait.Expression.MaskExpression.ListSelect.ListSelectItem.ListElement item = 1 [json_name = "item"];
inline bool Expression_MaskExpression_ListSelect_ListSelectItem::_internal_has_item() const {
  return type_case() == kItem;
}
inline bool Expression_MaskExpression_ListSelect_ListSelectItem::has_item() const {
  return _internal_has_item();
}
inline void Expression_MaskExpression_ListSelect_ListSelectItem::set_has_item() {
  _oneof_case_[0] = kItem;
}
inline void Expression_MaskExpression_ListSelect_ListSelectItem::clear_item() {
  if (_internal_has_item()) {
    if (GetArenaForAllocation() == nullptr) {
      delete type_.item_;
    }
    clear_has_type();
  }
}
inline ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListElement* Expression_MaskExpression_ListSelect_ListSelectItem::release_item() {
  // @@protoc_insertion_point(field_release:substrait.Expression.MaskExpression.ListSelect.ListSelectItem.item)
  if (_internal_has_item()) {
    clear_has_type();
      ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListElement* temp = type_.item_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    type_.item_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListElement& Expression_MaskExpression_ListSelect_ListSelectItem::_internal_item() const {
  return _internal_has_item()
      ? *type_.item_
      : reinterpret_cast< ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListElement&>(::substrait::_Expression_MaskExpression_ListSelect_ListSelectItem_ListElement_default_instance_);
}
inline const ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListElement& Expression_MaskExpression_ListSelect_ListSelectItem::item() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.MaskExpression.ListSelect.ListSelectItem.item)
  return _internal_item();
}
inline ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListElement* Expression_MaskExpression_ListSelect_ListSelectItem::unsafe_arena_release_item() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.MaskExpression.ListSelect.ListSelectItem.item)
  if (_internal_has_item()) {
    clear_has_type();
    ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListElement* temp = type_.item_;
    type_.item_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_MaskExpression_ListSelect_ListSelectItem::unsafe_arena_set_allocated_item(::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListElement* item) {
  clear_type();
  if (item) {
    set_has_item();
    type_.item_ = item;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.MaskExpression.ListSelect.ListSelectItem.item)
}
inline ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListElement* Expression_MaskExpression_ListSelect_ListSelectItem::_internal_mutable_item() {
  if (!_internal_has_item()) {
    clear_type();
    set_has_item();
    type_.item_ = CreateMaybeMessage< ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListElement >(GetArenaForAllocation());
  }
  return type_.item_;
}
inline ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListElement* Expression_MaskExpression_ListSelect_ListSelectItem::mutable_item() {
  ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListElement* _msg = _internal_mutable_item();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.MaskExpression.ListSelect.ListSelectItem.item)
  return _msg;
}

// .substrait.Expression.MaskExpression.ListSelect.ListSelectItem.ListSlice slice = 2 [json_name = "slice"];
inline bool Expression_MaskExpression_ListSelect_ListSelectItem::_internal_has_slice() const {
  return type_case() == kSlice;
}
inline bool Expression_MaskExpression_ListSelect_ListSelectItem::has_slice() const {
  return _internal_has_slice();
}
inline void Expression_MaskExpression_ListSelect_ListSelectItem::set_has_slice() {
  _oneof_case_[0] = kSlice;
}
inline void Expression_MaskExpression_ListSelect_ListSelectItem::clear_slice() {
  if (_internal_has_slice()) {
    if (GetArenaForAllocation() == nullptr) {
      delete type_.slice_;
    }
    clear_has_type();
  }
}
inline ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice* Expression_MaskExpression_ListSelect_ListSelectItem::release_slice() {
  // @@protoc_insertion_point(field_release:substrait.Expression.MaskExpression.ListSelect.ListSelectItem.slice)
  if (_internal_has_slice()) {
    clear_has_type();
      ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice* temp = type_.slice_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    type_.slice_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice& Expression_MaskExpression_ListSelect_ListSelectItem::_internal_slice() const {
  return _internal_has_slice()
      ? *type_.slice_
      : reinterpret_cast< ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice&>(::substrait::_Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice_default_instance_);
}
inline const ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice& Expression_MaskExpression_ListSelect_ListSelectItem::slice() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.MaskExpression.ListSelect.ListSelectItem.slice)
  return _internal_slice();
}
inline ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice* Expression_MaskExpression_ListSelect_ListSelectItem::unsafe_arena_release_slice() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.MaskExpression.ListSelect.ListSelectItem.slice)
  if (_internal_has_slice()) {
    clear_has_type();
    ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice* temp = type_.slice_;
    type_.slice_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_MaskExpression_ListSelect_ListSelectItem::unsafe_arena_set_allocated_slice(::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice* slice) {
  clear_type();
  if (slice) {
    set_has_slice();
    type_.slice_ = slice;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.MaskExpression.ListSelect.ListSelectItem.slice)
}
inline ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice* Expression_MaskExpression_ListSelect_ListSelectItem::_internal_mutable_slice() {
  if (!_internal_has_slice()) {
    clear_type();
    set_has_slice();
    type_.slice_ = CreateMaybeMessage< ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice >(GetArenaForAllocation());
  }
  return type_.slice_;
}
inline ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice* Expression_MaskExpression_ListSelect_ListSelectItem::mutable_slice() {
  ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem_ListSlice* _msg = _internal_mutable_slice();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.MaskExpression.ListSelect.ListSelectItem.slice)
  return _msg;
}

inline bool Expression_MaskExpression_ListSelect_ListSelectItem::has_type() const {
  return type_case() != TYPE_NOT_SET;
}
inline void Expression_MaskExpression_ListSelect_ListSelectItem::clear_has_type() {
  _oneof_case_[0] = TYPE_NOT_SET;
}
inline Expression_MaskExpression_ListSelect_ListSelectItem::TypeCase Expression_MaskExpression_ListSelect_ListSelectItem::type_case() const {
  return Expression_MaskExpression_ListSelect_ListSelectItem::TypeCase(_oneof_case_[0]);
}
// -------------------------------------------------------------------

// Expression_MaskExpression_ListSelect

// repeated .substrait.Expression.MaskExpression.ListSelect.ListSelectItem selection = 1 [json_name = "selection"];
inline int Expression_MaskExpression_ListSelect::_internal_selection_size() const {
  return selection_.size();
}
inline int Expression_MaskExpression_ListSelect::selection_size() const {
  return _internal_selection_size();
}
inline void Expression_MaskExpression_ListSelect::clear_selection() {
  selection_.Clear();
}
inline ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem* Expression_MaskExpression_ListSelect::mutable_selection(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.Expression.MaskExpression.ListSelect.selection)
  return selection_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem >*
Expression_MaskExpression_ListSelect::mutable_selection() {
  // @@protoc_insertion_point(field_mutable_list:substrait.Expression.MaskExpression.ListSelect.selection)
  return &selection_;
}
inline const ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem& Expression_MaskExpression_ListSelect::_internal_selection(int index) const {
  return selection_.Get(index);
}
inline const ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem& Expression_MaskExpression_ListSelect::selection(int index) const {
  // @@protoc_insertion_point(field_get:substrait.Expression.MaskExpression.ListSelect.selection)
  return _internal_selection(index);
}
inline ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem* Expression_MaskExpression_ListSelect::_internal_add_selection() {
  return selection_.Add();
}
inline ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem* Expression_MaskExpression_ListSelect::add_selection() {
  ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem* _add = _internal_add_selection();
  // @@protoc_insertion_point(field_add:substrait.Expression.MaskExpression.ListSelect.selection)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression_MaskExpression_ListSelect_ListSelectItem >&
Expression_MaskExpression_ListSelect::selection() const {
  // @@protoc_insertion_point(field_list:substrait.Expression.MaskExpression.ListSelect.selection)
  return selection_;
}

// .substrait.Expression.MaskExpression.Select child = 2 [json_name = "child"];
inline bool Expression_MaskExpression_ListSelect::_internal_has_child() const {
  return this != internal_default_instance() && child_ != nullptr;
}
inline bool Expression_MaskExpression_ListSelect::has_child() const {
  return _internal_has_child();
}
inline void Expression_MaskExpression_ListSelect::clear_child() {
  if (GetArenaForAllocation() == nullptr && child_ != nullptr) {
    delete child_;
  }
  child_ = nullptr;
}
inline const ::substrait::Expression_MaskExpression_Select& Expression_MaskExpression_ListSelect::_internal_child() const {
  const ::substrait::Expression_MaskExpression_Select* p = child_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression_MaskExpression_Select&>(
      ::substrait::_Expression_MaskExpression_Select_default_instance_);
}
inline const ::substrait::Expression_MaskExpression_Select& Expression_MaskExpression_ListSelect::child() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.MaskExpression.ListSelect.child)
  return _internal_child();
}
inline void Expression_MaskExpression_ListSelect::unsafe_arena_set_allocated_child(
    ::substrait::Expression_MaskExpression_Select* child) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(child_);
  }
  child_ = child;
  if (child) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.MaskExpression.ListSelect.child)
}
inline ::substrait::Expression_MaskExpression_Select* Expression_MaskExpression_ListSelect::release_child() {
  
  ::substrait::Expression_MaskExpression_Select* temp = child_;
  child_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression_MaskExpression_Select* Expression_MaskExpression_ListSelect::unsafe_arena_release_child() {
  // @@protoc_insertion_point(field_release:substrait.Expression.MaskExpression.ListSelect.child)
  
  ::substrait::Expression_MaskExpression_Select* temp = child_;
  child_ = nullptr;
  return temp;
}
inline ::substrait::Expression_MaskExpression_Select* Expression_MaskExpression_ListSelect::_internal_mutable_child() {
  
  if (child_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression_MaskExpression_Select>(GetArenaForAllocation());
    child_ = p;
  }
  return child_;
}
inline ::substrait::Expression_MaskExpression_Select* Expression_MaskExpression_ListSelect::mutable_child() {
  ::substrait::Expression_MaskExpression_Select* _msg = _internal_mutable_child();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.MaskExpression.ListSelect.child)
  return _msg;
}
inline void Expression_MaskExpression_ListSelect::set_allocated_child(::substrait::Expression_MaskExpression_Select* child) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete child_;
  }
  if (child) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression_MaskExpression_Select>::GetOwningArena(child);
    if (message_arena != submessage_arena) {
      child = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, child, submessage_arena);
    }
    
  } else {
    
  }
  child_ = child;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.MaskExpression.ListSelect.child)
}

// -------------------------------------------------------------------

// Expression_MaskExpression_MapSelect_MapKey

// string map_key = 1 [json_name = "mapKey"];
inline void Expression_MaskExpression_MapSelect_MapKey::clear_map_key() {
  map_key_.ClearToEmpty();
}
inline const std::string& Expression_MaskExpression_MapSelect_MapKey::map_key() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.MaskExpression.MapSelect.MapKey.map_key)
  return _internal_map_key();
}
template <typename ArgT0, typename... ArgT>
inline PROTOBUF_ALWAYS_INLINE
void Expression_MaskExpression_MapSelect_MapKey::set_map_key(ArgT0&& arg0, ArgT... args) {
 
 map_key_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
  // @@protoc_insertion_point(field_set:substrait.Expression.MaskExpression.MapSelect.MapKey.map_key)
}
inline std::string* Expression_MaskExpression_MapSelect_MapKey::mutable_map_key() {
  std::string* _s = _internal_mutable_map_key();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.MaskExpression.MapSelect.MapKey.map_key)
  return _s;
}
inline const std::string& Expression_MaskExpression_MapSelect_MapKey::_internal_map_key() const {
  return map_key_.Get();
}
inline void Expression_MaskExpression_MapSelect_MapKey::_internal_set_map_key(const std::string& value) {
  
  map_key_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
}
inline std::string* Expression_MaskExpression_MapSelect_MapKey::_internal_mutable_map_key() {
  
  return map_key_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
}
inline std::string* Expression_MaskExpression_MapSelect_MapKey::release_map_key() {
  // @@protoc_insertion_point(field_release:substrait.Expression.MaskExpression.MapSelect.MapKey.map_key)
  return map_key_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
}
inline void Expression_MaskExpression_MapSelect_MapKey::set_allocated_map_key(std::string* map_key) {
  if (map_key != nullptr) {
    
  } else {
    
  }
  map_key_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), map_key,
      GetArenaForAllocation());
#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (map_key_.IsDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited())) {
    map_key_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), "", GetArenaForAllocation());
  }
#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.MaskExpression.MapSelect.MapKey.map_key)
}

// -------------------------------------------------------------------

// Expression_MaskExpression_MapSelect_MapKeyExpression

// string map_key_expression = 1 [json_name = "mapKeyExpression"];
inline void Expression_MaskExpression_MapSelect_MapKeyExpression::clear_map_key_expression() {
  map_key_expression_.ClearToEmpty();
}
inline const std::string& Expression_MaskExpression_MapSelect_MapKeyExpression::map_key_expression() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.MaskExpression.MapSelect.MapKeyExpression.map_key_expression)
  return _internal_map_key_expression();
}
template <typename ArgT0, typename... ArgT>
inline PROTOBUF_ALWAYS_INLINE
void Expression_MaskExpression_MapSelect_MapKeyExpression::set_map_key_expression(ArgT0&& arg0, ArgT... args) {
 
 map_key_expression_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
  // @@protoc_insertion_point(field_set:substrait.Expression.MaskExpression.MapSelect.MapKeyExpression.map_key_expression)
}
inline std::string* Expression_MaskExpression_MapSelect_MapKeyExpression::mutable_map_key_expression() {
  std::string* _s = _internal_mutable_map_key_expression();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.MaskExpression.MapSelect.MapKeyExpression.map_key_expression)
  return _s;
}
inline const std::string& Expression_MaskExpression_MapSelect_MapKeyExpression::_internal_map_key_expression() const {
  return map_key_expression_.Get();
}
inline void Expression_MaskExpression_MapSelect_MapKeyExpression::_internal_set_map_key_expression(const std::string& value) {
  
  map_key_expression_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
}
inline std::string* Expression_MaskExpression_MapSelect_MapKeyExpression::_internal_mutable_map_key_expression() {
  
  return map_key_expression_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
}
inline std::string* Expression_MaskExpression_MapSelect_MapKeyExpression::release_map_key_expression() {
  // @@protoc_insertion_point(field_release:substrait.Expression.MaskExpression.MapSelect.MapKeyExpression.map_key_expression)
  return map_key_expression_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
}
inline void Expression_MaskExpression_MapSelect_MapKeyExpression::set_allocated_map_key_expression(std::string* map_key_expression) {
  if (map_key_expression != nullptr) {
    
  } else {
    
  }
  map_key_expression_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), map_key_expression,
      GetArenaForAllocation());
#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (map_key_expression_.IsDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited())) {
    map_key_expression_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), "", GetArenaForAllocation());
  }
#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.MaskExpression.MapSelect.MapKeyExpression.map_key_expression)
}

// -------------------------------------------------------------------

// Expression_MaskExpression_MapSelect

// .substrait.Expression.MaskExpression.MapSelect.MapKey key = 1 [json_name = "key"];
inline bool Expression_MaskExpression_MapSelect::_internal_has_key() const {
  return select_case() == kKey;
}
inline bool Expression_MaskExpression_MapSelect::has_key() const {
  return _internal_has_key();
}
inline void Expression_MaskExpression_MapSelect::set_has_key() {
  _oneof_case_[0] = kKey;
}
inline void Expression_MaskExpression_MapSelect::clear_key() {
  if (_internal_has_key()) {
    if (GetArenaForAllocation() == nullptr) {
      delete select_.key_;
    }
    clear_has_select();
  }
}
inline ::substrait::Expression_MaskExpression_MapSelect_MapKey* Expression_MaskExpression_MapSelect::release_key() {
  // @@protoc_insertion_point(field_release:substrait.Expression.MaskExpression.MapSelect.key)
  if (_internal_has_key()) {
    clear_has_select();
      ::substrait::Expression_MaskExpression_MapSelect_MapKey* temp = select_.key_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    select_.key_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_MaskExpression_MapSelect_MapKey& Expression_MaskExpression_MapSelect::_internal_key() const {
  return _internal_has_key()
      ? *select_.key_
      : reinterpret_cast< ::substrait::Expression_MaskExpression_MapSelect_MapKey&>(::substrait::_Expression_MaskExpression_MapSelect_MapKey_default_instance_);
}
inline const ::substrait::Expression_MaskExpression_MapSelect_MapKey& Expression_MaskExpression_MapSelect::key() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.MaskExpression.MapSelect.key)
  return _internal_key();
}
inline ::substrait::Expression_MaskExpression_MapSelect_MapKey* Expression_MaskExpression_MapSelect::unsafe_arena_release_key() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.MaskExpression.MapSelect.key)
  if (_internal_has_key()) {
    clear_has_select();
    ::substrait::Expression_MaskExpression_MapSelect_MapKey* temp = select_.key_;
    select_.key_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_MaskExpression_MapSelect::unsafe_arena_set_allocated_key(::substrait::Expression_MaskExpression_MapSelect_MapKey* key) {
  clear_select();
  if (key) {
    set_has_key();
    select_.key_ = key;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.MaskExpression.MapSelect.key)
}
inline ::substrait::Expression_MaskExpression_MapSelect_MapKey* Expression_MaskExpression_MapSelect::_internal_mutable_key() {
  if (!_internal_has_key()) {
    clear_select();
    set_has_key();
    select_.key_ = CreateMaybeMessage< ::substrait::Expression_MaskExpression_MapSelect_MapKey >(GetArenaForAllocation());
  }
  return select_.key_;
}
inline ::substrait::Expression_MaskExpression_MapSelect_MapKey* Expression_MaskExpression_MapSelect::mutable_key() {
  ::substrait::Expression_MaskExpression_MapSelect_MapKey* _msg = _internal_mutable_key();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.MaskExpression.MapSelect.key)
  return _msg;
}

// .substrait.Expression.MaskExpression.MapSelect.MapKeyExpression expression = 2 [json_name = "expression"];
inline bool Expression_MaskExpression_MapSelect::_internal_has_expression() const {
  return select_case() == kExpression;
}
inline bool Expression_MaskExpression_MapSelect::has_expression() const {
  return _internal_has_expression();
}
inline void Expression_MaskExpression_MapSelect::set_has_expression() {
  _oneof_case_[0] = kExpression;
}
inline void Expression_MaskExpression_MapSelect::clear_expression() {
  if (_internal_has_expression()) {
    if (GetArenaForAllocation() == nullptr) {
      delete select_.expression_;
    }
    clear_has_select();
  }
}
inline ::substrait::Expression_MaskExpression_MapSelect_MapKeyExpression* Expression_MaskExpression_MapSelect::release_expression() {
  // @@protoc_insertion_point(field_release:substrait.Expression.MaskExpression.MapSelect.expression)
  if (_internal_has_expression()) {
    clear_has_select();
      ::substrait::Expression_MaskExpression_MapSelect_MapKeyExpression* temp = select_.expression_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    select_.expression_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_MaskExpression_MapSelect_MapKeyExpression& Expression_MaskExpression_MapSelect::_internal_expression() const {
  return _internal_has_expression()
      ? *select_.expression_
      : reinterpret_cast< ::substrait::Expression_MaskExpression_MapSelect_MapKeyExpression&>(::substrait::_Expression_MaskExpression_MapSelect_MapKeyExpression_default_instance_);
}
inline const ::substrait::Expression_MaskExpression_MapSelect_MapKeyExpression& Expression_MaskExpression_MapSelect::expression() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.MaskExpression.MapSelect.expression)
  return _internal_expression();
}
inline ::substrait::Expression_MaskExpression_MapSelect_MapKeyExpression* Expression_MaskExpression_MapSelect::unsafe_arena_release_expression() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.MaskExpression.MapSelect.expression)
  if (_internal_has_expression()) {
    clear_has_select();
    ::substrait::Expression_MaskExpression_MapSelect_MapKeyExpression* temp = select_.expression_;
    select_.expression_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_MaskExpression_MapSelect::unsafe_arena_set_allocated_expression(::substrait::Expression_MaskExpression_MapSelect_MapKeyExpression* expression) {
  clear_select();
  if (expression) {
    set_has_expression();
    select_.expression_ = expression;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.MaskExpression.MapSelect.expression)
}
inline ::substrait::Expression_MaskExpression_MapSelect_MapKeyExpression* Expression_MaskExpression_MapSelect::_internal_mutable_expression() {
  if (!_internal_has_expression()) {
    clear_select();
    set_has_expression();
    select_.expression_ = CreateMaybeMessage< ::substrait::Expression_MaskExpression_MapSelect_MapKeyExpression >(GetArenaForAllocation());
  }
  return select_.expression_;
}
inline ::substrait::Expression_MaskExpression_MapSelect_MapKeyExpression* Expression_MaskExpression_MapSelect::mutable_expression() {
  ::substrait::Expression_MaskExpression_MapSelect_MapKeyExpression* _msg = _internal_mutable_expression();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.MaskExpression.MapSelect.expression)
  return _msg;
}

// .substrait.Expression.MaskExpression.Select child = 3 [json_name = "child"];
inline bool Expression_MaskExpression_MapSelect::_internal_has_child() const {
  return this != internal_default_instance() && child_ != nullptr;
}
inline bool Expression_MaskExpression_MapSelect::has_child() const {
  return _internal_has_child();
}
inline void Expression_MaskExpression_MapSelect::clear_child() {
  if (GetArenaForAllocation() == nullptr && child_ != nullptr) {
    delete child_;
  }
  child_ = nullptr;
}
inline const ::substrait::Expression_MaskExpression_Select& Expression_MaskExpression_MapSelect::_internal_child() const {
  const ::substrait::Expression_MaskExpression_Select* p = child_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression_MaskExpression_Select&>(
      ::substrait::_Expression_MaskExpression_Select_default_instance_);
}
inline const ::substrait::Expression_MaskExpression_Select& Expression_MaskExpression_MapSelect::child() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.MaskExpression.MapSelect.child)
  return _internal_child();
}
inline void Expression_MaskExpression_MapSelect::unsafe_arena_set_allocated_child(
    ::substrait::Expression_MaskExpression_Select* child) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(child_);
  }
  child_ = child;
  if (child) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.MaskExpression.MapSelect.child)
}
inline ::substrait::Expression_MaskExpression_Select* Expression_MaskExpression_MapSelect::release_child() {
  
  ::substrait::Expression_MaskExpression_Select* temp = child_;
  child_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression_MaskExpression_Select* Expression_MaskExpression_MapSelect::unsafe_arena_release_child() {
  // @@protoc_insertion_point(field_release:substrait.Expression.MaskExpression.MapSelect.child)
  
  ::substrait::Expression_MaskExpression_Select* temp = child_;
  child_ = nullptr;
  return temp;
}
inline ::substrait::Expression_MaskExpression_Select* Expression_MaskExpression_MapSelect::_internal_mutable_child() {
  
  if (child_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression_MaskExpression_Select>(GetArenaForAllocation());
    child_ = p;
  }
  return child_;
}
inline ::substrait::Expression_MaskExpression_Select* Expression_MaskExpression_MapSelect::mutable_child() {
  ::substrait::Expression_MaskExpression_Select* _msg = _internal_mutable_child();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.MaskExpression.MapSelect.child)
  return _msg;
}
inline void Expression_MaskExpression_MapSelect::set_allocated_child(::substrait::Expression_MaskExpression_Select* child) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete child_;
  }
  if (child) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression_MaskExpression_Select>::GetOwningArena(child);
    if (message_arena != submessage_arena) {
      child = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, child, submessage_arena);
    }
    
  } else {
    
  }
  child_ = child;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.MaskExpression.MapSelect.child)
}

inline bool Expression_MaskExpression_MapSelect::has_select() const {
  return select_case() != SELECT_NOT_SET;
}
inline void Expression_MaskExpression_MapSelect::clear_has_select() {
  _oneof_case_[0] = SELECT_NOT_SET;
}
inline Expression_MaskExpression_MapSelect::SelectCase Expression_MaskExpression_MapSelect::select_case() const {
  return Expression_MaskExpression_MapSelect::SelectCase(_oneof_case_[0]);
}
// -------------------------------------------------------------------

// Expression_MaskExpression

// .substrait.Expression.MaskExpression.StructSelect select = 1 [json_name = "select"];
inline bool Expression_MaskExpression::_internal_has_select() const {
  return this != internal_default_instance() && select_ != nullptr;
}
inline bool Expression_MaskExpression::has_select() const {
  return _internal_has_select();
}
inline void Expression_MaskExpression::clear_select() {
  if (GetArenaForAllocation() == nullptr && select_ != nullptr) {
    delete select_;
  }
  select_ = nullptr;
}
inline const ::substrait::Expression_MaskExpression_StructSelect& Expression_MaskExpression::_internal_select() const {
  const ::substrait::Expression_MaskExpression_StructSelect* p = select_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression_MaskExpression_StructSelect&>(
      ::substrait::_Expression_MaskExpression_StructSelect_default_instance_);
}
inline const ::substrait::Expression_MaskExpression_StructSelect& Expression_MaskExpression::select() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.MaskExpression.select)
  return _internal_select();
}
inline void Expression_MaskExpression::unsafe_arena_set_allocated_select(
    ::substrait::Expression_MaskExpression_StructSelect* select) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(select_);
  }
  select_ = select;
  if (select) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.MaskExpression.select)
}
inline ::substrait::Expression_MaskExpression_StructSelect* Expression_MaskExpression::release_select() {
  
  ::substrait::Expression_MaskExpression_StructSelect* temp = select_;
  select_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression_MaskExpression_StructSelect* Expression_MaskExpression::unsafe_arena_release_select() {
  // @@protoc_insertion_point(field_release:substrait.Expression.MaskExpression.select)
  
  ::substrait::Expression_MaskExpression_StructSelect* temp = select_;
  select_ = nullptr;
  return temp;
}
inline ::substrait::Expression_MaskExpression_StructSelect* Expression_MaskExpression::_internal_mutable_select() {
  
  if (select_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression_MaskExpression_StructSelect>(GetArenaForAllocation());
    select_ = p;
  }
  return select_;
}
inline ::substrait::Expression_MaskExpression_StructSelect* Expression_MaskExpression::mutable_select() {
  ::substrait::Expression_MaskExpression_StructSelect* _msg = _internal_mutable_select();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.MaskExpression.select)
  return _msg;
}
inline void Expression_MaskExpression::set_allocated_select(::substrait::Expression_MaskExpression_StructSelect* select) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete select_;
  }
  if (select) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression_MaskExpression_StructSelect>::GetOwningArena(select);
    if (message_arena != submessage_arena) {
      select = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, select, submessage_arena);
    }
    
  } else {
    
  }
  select_ = select;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.MaskExpression.select)
}

// bool maintain_singular_struct = 2 [json_name = "maintainSingularStruct"];
inline void Expression_MaskExpression::clear_maintain_singular_struct() {
  maintain_singular_struct_ = false;
}
inline bool Expression_MaskExpression::_internal_maintain_singular_struct() const {
  return maintain_singular_struct_;
}
inline bool Expression_MaskExpression::maintain_singular_struct() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.MaskExpression.maintain_singular_struct)
  return _internal_maintain_singular_struct();
}
inline void Expression_MaskExpression::_internal_set_maintain_singular_struct(bool value) {
  
  maintain_singular_struct_ = value;
}
inline void Expression_MaskExpression::set_maintain_singular_struct(bool value) {
  _internal_set_maintain_singular_struct(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.MaskExpression.maintain_singular_struct)
}

// -------------------------------------------------------------------

// Expression_FieldReference_RootReference

// -------------------------------------------------------------------

// Expression_FieldReference_OuterReference

// uint32 steps_out = 1 [json_name = "stepsOut"];
inline void Expression_FieldReference_OuterReference::clear_steps_out() {
  steps_out_ = 0u;
}
inline uint32_t Expression_FieldReference_OuterReference::_internal_steps_out() const {
  return steps_out_;
}
inline uint32_t Expression_FieldReference_OuterReference::steps_out() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.FieldReference.OuterReference.steps_out)
  return _internal_steps_out();
}
inline void Expression_FieldReference_OuterReference::_internal_set_steps_out(uint32_t value) {
  
  steps_out_ = value;
}
inline void Expression_FieldReference_OuterReference::set_steps_out(uint32_t value) {
  _internal_set_steps_out(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.FieldReference.OuterReference.steps_out)
}

// -------------------------------------------------------------------

// Expression_FieldReference

// .substrait.Expression.ReferenceSegment direct_reference = 1 [json_name = "directReference"];
inline bool Expression_FieldReference::_internal_has_direct_reference() const {
  return reference_type_case() == kDirectReference;
}
inline bool Expression_FieldReference::has_direct_reference() const {
  return _internal_has_direct_reference();
}
inline void Expression_FieldReference::set_has_direct_reference() {
  _oneof_case_[0] = kDirectReference;
}
inline void Expression_FieldReference::clear_direct_reference() {
  if (_internal_has_direct_reference()) {
    if (GetArenaForAllocation() == nullptr) {
      delete reference_type_.direct_reference_;
    }
    clear_has_reference_type();
  }
}
inline ::substrait::Expression_ReferenceSegment* Expression_FieldReference::release_direct_reference() {
  // @@protoc_insertion_point(field_release:substrait.Expression.FieldReference.direct_reference)
  if (_internal_has_direct_reference()) {
    clear_has_reference_type();
      ::substrait::Expression_ReferenceSegment* temp = reference_type_.direct_reference_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    reference_type_.direct_reference_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_ReferenceSegment& Expression_FieldReference::_internal_direct_reference() const {
  return _internal_has_direct_reference()
      ? *reference_type_.direct_reference_
      : reinterpret_cast< ::substrait::Expression_ReferenceSegment&>(::substrait::_Expression_ReferenceSegment_default_instance_);
}
inline const ::substrait::Expression_ReferenceSegment& Expression_FieldReference::direct_reference() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.FieldReference.direct_reference)
  return _internal_direct_reference();
}
inline ::substrait::Expression_ReferenceSegment* Expression_FieldReference::unsafe_arena_release_direct_reference() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.FieldReference.direct_reference)
  if (_internal_has_direct_reference()) {
    clear_has_reference_type();
    ::substrait::Expression_ReferenceSegment* temp = reference_type_.direct_reference_;
    reference_type_.direct_reference_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_FieldReference::unsafe_arena_set_allocated_direct_reference(::substrait::Expression_ReferenceSegment* direct_reference) {
  clear_reference_type();
  if (direct_reference) {
    set_has_direct_reference();
    reference_type_.direct_reference_ = direct_reference;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.FieldReference.direct_reference)
}
inline ::substrait::Expression_ReferenceSegment* Expression_FieldReference::_internal_mutable_direct_reference() {
  if (!_internal_has_direct_reference()) {
    clear_reference_type();
    set_has_direct_reference();
    reference_type_.direct_reference_ = CreateMaybeMessage< ::substrait::Expression_ReferenceSegment >(GetArenaForAllocation());
  }
  return reference_type_.direct_reference_;
}
inline ::substrait::Expression_ReferenceSegment* Expression_FieldReference::mutable_direct_reference() {
  ::substrait::Expression_ReferenceSegment* _msg = _internal_mutable_direct_reference();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.FieldReference.direct_reference)
  return _msg;
}

// .substrait.Expression.MaskExpression masked_reference = 2 [json_name = "maskedReference"];
inline bool Expression_FieldReference::_internal_has_masked_reference() const {
  return reference_type_case() == kMaskedReference;
}
inline bool Expression_FieldReference::has_masked_reference() const {
  return _internal_has_masked_reference();
}
inline void Expression_FieldReference::set_has_masked_reference() {
  _oneof_case_[0] = kMaskedReference;
}
inline void Expression_FieldReference::clear_masked_reference() {
  if (_internal_has_masked_reference()) {
    if (GetArenaForAllocation() == nullptr) {
      delete reference_type_.masked_reference_;
    }
    clear_has_reference_type();
  }
}
inline ::substrait::Expression_MaskExpression* Expression_FieldReference::release_masked_reference() {
  // @@protoc_insertion_point(field_release:substrait.Expression.FieldReference.masked_reference)
  if (_internal_has_masked_reference()) {
    clear_has_reference_type();
      ::substrait::Expression_MaskExpression* temp = reference_type_.masked_reference_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    reference_type_.masked_reference_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_MaskExpression& Expression_FieldReference::_internal_masked_reference() const {
  return _internal_has_masked_reference()
      ? *reference_type_.masked_reference_
      : reinterpret_cast< ::substrait::Expression_MaskExpression&>(::substrait::_Expression_MaskExpression_default_instance_);
}
inline const ::substrait::Expression_MaskExpression& Expression_FieldReference::masked_reference() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.FieldReference.masked_reference)
  return _internal_masked_reference();
}
inline ::substrait::Expression_MaskExpression* Expression_FieldReference::unsafe_arena_release_masked_reference() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.FieldReference.masked_reference)
  if (_internal_has_masked_reference()) {
    clear_has_reference_type();
    ::substrait::Expression_MaskExpression* temp = reference_type_.masked_reference_;
    reference_type_.masked_reference_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_FieldReference::unsafe_arena_set_allocated_masked_reference(::substrait::Expression_MaskExpression* masked_reference) {
  clear_reference_type();
  if (masked_reference) {
    set_has_masked_reference();
    reference_type_.masked_reference_ = masked_reference;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.FieldReference.masked_reference)
}
inline ::substrait::Expression_MaskExpression* Expression_FieldReference::_internal_mutable_masked_reference() {
  if (!_internal_has_masked_reference()) {
    clear_reference_type();
    set_has_masked_reference();
    reference_type_.masked_reference_ = CreateMaybeMessage< ::substrait::Expression_MaskExpression >(GetArenaForAllocation());
  }
  return reference_type_.masked_reference_;
}
inline ::substrait::Expression_MaskExpression* Expression_FieldReference::mutable_masked_reference() {
  ::substrait::Expression_MaskExpression* _msg = _internal_mutable_masked_reference();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.FieldReference.masked_reference)
  return _msg;
}

// .substrait.Expression expression = 3 [json_name = "expression"];
inline bool Expression_FieldReference::_internal_has_expression() const {
  return root_type_case() == kExpression;
}
inline bool Expression_FieldReference::has_expression() const {
  return _internal_has_expression();
}
inline void Expression_FieldReference::set_has_expression() {
  _oneof_case_[1] = kExpression;
}
inline void Expression_FieldReference::clear_expression() {
  if (_internal_has_expression()) {
    if (GetArenaForAllocation() == nullptr) {
      delete root_type_.expression_;
    }
    clear_has_root_type();
  }
}
inline ::substrait::Expression* Expression_FieldReference::release_expression() {
  // @@protoc_insertion_point(field_release:substrait.Expression.FieldReference.expression)
  if (_internal_has_expression()) {
    clear_has_root_type();
      ::substrait::Expression* temp = root_type_.expression_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    root_type_.expression_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression& Expression_FieldReference::_internal_expression() const {
  return _internal_has_expression()
      ? *root_type_.expression_
      : reinterpret_cast< ::substrait::Expression&>(::substrait::_Expression_default_instance_);
}
inline const ::substrait::Expression& Expression_FieldReference::expression() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.FieldReference.expression)
  return _internal_expression();
}
inline ::substrait::Expression* Expression_FieldReference::unsafe_arena_release_expression() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.FieldReference.expression)
  if (_internal_has_expression()) {
    clear_has_root_type();
    ::substrait::Expression* temp = root_type_.expression_;
    root_type_.expression_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_FieldReference::unsafe_arena_set_allocated_expression(::substrait::Expression* expression) {
  clear_root_type();
  if (expression) {
    set_has_expression();
    root_type_.expression_ = expression;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.FieldReference.expression)
}
inline ::substrait::Expression* Expression_FieldReference::_internal_mutable_expression() {
  if (!_internal_has_expression()) {
    clear_root_type();
    set_has_expression();
    root_type_.expression_ = CreateMaybeMessage< ::substrait::Expression >(GetArenaForAllocation());
  }
  return root_type_.expression_;
}
inline ::substrait::Expression* Expression_FieldReference::mutable_expression() {
  ::substrait::Expression* _msg = _internal_mutable_expression();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.FieldReference.expression)
  return _msg;
}

// .substrait.Expression.FieldReference.RootReference root_reference = 4 [json_name = "rootReference"];
inline bool Expression_FieldReference::_internal_has_root_reference() const {
  return root_type_case() == kRootReference;
}
inline bool Expression_FieldReference::has_root_reference() const {
  return _internal_has_root_reference();
}
inline void Expression_FieldReference::set_has_root_reference() {
  _oneof_case_[1] = kRootReference;
}
inline void Expression_FieldReference::clear_root_reference() {
  if (_internal_has_root_reference()) {
    if (GetArenaForAllocation() == nullptr) {
      delete root_type_.root_reference_;
    }
    clear_has_root_type();
  }
}
inline ::substrait::Expression_FieldReference_RootReference* Expression_FieldReference::release_root_reference() {
  // @@protoc_insertion_point(field_release:substrait.Expression.FieldReference.root_reference)
  if (_internal_has_root_reference()) {
    clear_has_root_type();
      ::substrait::Expression_FieldReference_RootReference* temp = root_type_.root_reference_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    root_type_.root_reference_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_FieldReference_RootReference& Expression_FieldReference::_internal_root_reference() const {
  return _internal_has_root_reference()
      ? *root_type_.root_reference_
      : reinterpret_cast< ::substrait::Expression_FieldReference_RootReference&>(::substrait::_Expression_FieldReference_RootReference_default_instance_);
}
inline const ::substrait::Expression_FieldReference_RootReference& Expression_FieldReference::root_reference() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.FieldReference.root_reference)
  return _internal_root_reference();
}
inline ::substrait::Expression_FieldReference_RootReference* Expression_FieldReference::unsafe_arena_release_root_reference() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.FieldReference.root_reference)
  if (_internal_has_root_reference()) {
    clear_has_root_type();
    ::substrait::Expression_FieldReference_RootReference* temp = root_type_.root_reference_;
    root_type_.root_reference_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_FieldReference::unsafe_arena_set_allocated_root_reference(::substrait::Expression_FieldReference_RootReference* root_reference) {
  clear_root_type();
  if (root_reference) {
    set_has_root_reference();
    root_type_.root_reference_ = root_reference;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.FieldReference.root_reference)
}
inline ::substrait::Expression_FieldReference_RootReference* Expression_FieldReference::_internal_mutable_root_reference() {
  if (!_internal_has_root_reference()) {
    clear_root_type();
    set_has_root_reference();
    root_type_.root_reference_ = CreateMaybeMessage< ::substrait::Expression_FieldReference_RootReference >(GetArenaForAllocation());
  }
  return root_type_.root_reference_;
}
inline ::substrait::Expression_FieldReference_RootReference* Expression_FieldReference::mutable_root_reference() {
  ::substrait::Expression_FieldReference_RootReference* _msg = _internal_mutable_root_reference();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.FieldReference.root_reference)
  return _msg;
}

// .substrait.Expression.FieldReference.OuterReference outer_reference = 5 [json_name = "outerReference"];
inline bool Expression_FieldReference::_internal_has_outer_reference() const {
  return root_type_case() == kOuterReference;
}
inline bool Expression_FieldReference::has_outer_reference() const {
  return _internal_has_outer_reference();
}
inline void Expression_FieldReference::set_has_outer_reference() {
  _oneof_case_[1] = kOuterReference;
}
inline void Expression_FieldReference::clear_outer_reference() {
  if (_internal_has_outer_reference()) {
    if (GetArenaForAllocation() == nullptr) {
      delete root_type_.outer_reference_;
    }
    clear_has_root_type();
  }
}
inline ::substrait::Expression_FieldReference_OuterReference* Expression_FieldReference::release_outer_reference() {
  // @@protoc_insertion_point(field_release:substrait.Expression.FieldReference.outer_reference)
  if (_internal_has_outer_reference()) {
    clear_has_root_type();
      ::substrait::Expression_FieldReference_OuterReference* temp = root_type_.outer_reference_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    root_type_.outer_reference_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_FieldReference_OuterReference& Expression_FieldReference::_internal_outer_reference() const {
  return _internal_has_outer_reference()
      ? *root_type_.outer_reference_
      : reinterpret_cast< ::substrait::Expression_FieldReference_OuterReference&>(::substrait::_Expression_FieldReference_OuterReference_default_instance_);
}
inline const ::substrait::Expression_FieldReference_OuterReference& Expression_FieldReference::outer_reference() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.FieldReference.outer_reference)
  return _internal_outer_reference();
}
inline ::substrait::Expression_FieldReference_OuterReference* Expression_FieldReference::unsafe_arena_release_outer_reference() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.FieldReference.outer_reference)
  if (_internal_has_outer_reference()) {
    clear_has_root_type();
    ::substrait::Expression_FieldReference_OuterReference* temp = root_type_.outer_reference_;
    root_type_.outer_reference_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_FieldReference::unsafe_arena_set_allocated_outer_reference(::substrait::Expression_FieldReference_OuterReference* outer_reference) {
  clear_root_type();
  if (outer_reference) {
    set_has_outer_reference();
    root_type_.outer_reference_ = outer_reference;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.FieldReference.outer_reference)
}
inline ::substrait::Expression_FieldReference_OuterReference* Expression_FieldReference::_internal_mutable_outer_reference() {
  if (!_internal_has_outer_reference()) {
    clear_root_type();
    set_has_outer_reference();
    root_type_.outer_reference_ = CreateMaybeMessage< ::substrait::Expression_FieldReference_OuterReference >(GetArenaForAllocation());
  }
  return root_type_.outer_reference_;
}
inline ::substrait::Expression_FieldReference_OuterReference* Expression_FieldReference::mutable_outer_reference() {
  ::substrait::Expression_FieldReference_OuterReference* _msg = _internal_mutable_outer_reference();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.FieldReference.outer_reference)
  return _msg;
}

inline bool Expression_FieldReference::has_reference_type() const {
  return reference_type_case() != REFERENCE_TYPE_NOT_SET;
}
inline void Expression_FieldReference::clear_has_reference_type() {
  _oneof_case_[0] = REFERENCE_TYPE_NOT_SET;
}
inline bool Expression_FieldReference::has_root_type() const {
  return root_type_case() != ROOT_TYPE_NOT_SET;
}
inline void Expression_FieldReference::clear_has_root_type() {
  _oneof_case_[1] = ROOT_TYPE_NOT_SET;
}
inline Expression_FieldReference::ReferenceTypeCase Expression_FieldReference::reference_type_case() const {
  return Expression_FieldReference::ReferenceTypeCase(_oneof_case_[0]);
}
inline Expression_FieldReference::RootTypeCase Expression_FieldReference::root_type_case() const {
  return Expression_FieldReference::RootTypeCase(_oneof_case_[1]);
}
// -------------------------------------------------------------------

// Expression_Subquery_Scalar

// .substrait.Rel input = 1 [json_name = "input"];
inline bool Expression_Subquery_Scalar::_internal_has_input() const {
  return this != internal_default_instance() && input_ != nullptr;
}
inline bool Expression_Subquery_Scalar::has_input() const {
  return _internal_has_input();
}
inline void Expression_Subquery_Scalar::clear_input() {
  if (GetArenaForAllocation() == nullptr && input_ != nullptr) {
    delete input_;
  }
  input_ = nullptr;
}
inline const ::substrait::Rel& Expression_Subquery_Scalar::_internal_input() const {
  const ::substrait::Rel* p = input_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Rel&>(
      ::substrait::_Rel_default_instance_);
}
inline const ::substrait::Rel& Expression_Subquery_Scalar::input() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Subquery.Scalar.input)
  return _internal_input();
}
inline void Expression_Subquery_Scalar::unsafe_arena_set_allocated_input(
    ::substrait::Rel* input) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(input_);
  }
  input_ = input;
  if (input) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.Subquery.Scalar.input)
}
inline ::substrait::Rel* Expression_Subquery_Scalar::release_input() {
  
  ::substrait::Rel* temp = input_;
  input_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Rel* Expression_Subquery_Scalar::unsafe_arena_release_input() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Subquery.Scalar.input)
  
  ::substrait::Rel* temp = input_;
  input_ = nullptr;
  return temp;
}
inline ::substrait::Rel* Expression_Subquery_Scalar::_internal_mutable_input() {
  
  if (input_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Rel>(GetArenaForAllocation());
    input_ = p;
  }
  return input_;
}
inline ::substrait::Rel* Expression_Subquery_Scalar::mutable_input() {
  ::substrait::Rel* _msg = _internal_mutable_input();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Subquery.Scalar.input)
  return _msg;
}
inline void Expression_Subquery_Scalar::set_allocated_input(::substrait::Rel* input) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete input_;
  }
  if (input) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Rel>::GetOwningArena(input);
    if (message_arena != submessage_arena) {
      input = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, input, submessage_arena);
    }
    
  } else {
    
  }
  input_ = input;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.Subquery.Scalar.input)
}

// -------------------------------------------------------------------

// Expression_Subquery_InPredicate

// repeated .substrait.Expression needles = 1 [json_name = "needles"];
inline int Expression_Subquery_InPredicate::_internal_needles_size() const {
  return needles_.size();
}
inline int Expression_Subquery_InPredicate::needles_size() const {
  return _internal_needles_size();
}
inline void Expression_Subquery_InPredicate::clear_needles() {
  needles_.Clear();
}
inline ::substrait::Expression* Expression_Subquery_InPredicate::mutable_needles(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Subquery.InPredicate.needles)
  return needles_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >*
Expression_Subquery_InPredicate::mutable_needles() {
  // @@protoc_insertion_point(field_mutable_list:substrait.Expression.Subquery.InPredicate.needles)
  return &needles_;
}
inline const ::substrait::Expression& Expression_Subquery_InPredicate::_internal_needles(int index) const {
  return needles_.Get(index);
}
inline const ::substrait::Expression& Expression_Subquery_InPredicate::needles(int index) const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Subquery.InPredicate.needles)
  return _internal_needles(index);
}
inline ::substrait::Expression* Expression_Subquery_InPredicate::_internal_add_needles() {
  return needles_.Add();
}
inline ::substrait::Expression* Expression_Subquery_InPredicate::add_needles() {
  ::substrait::Expression* _add = _internal_add_needles();
  // @@protoc_insertion_point(field_add:substrait.Expression.Subquery.InPredicate.needles)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >&
Expression_Subquery_InPredicate::needles() const {
  // @@protoc_insertion_point(field_list:substrait.Expression.Subquery.InPredicate.needles)
  return needles_;
}

// .substrait.Rel haystack = 2 [json_name = "haystack"];
inline bool Expression_Subquery_InPredicate::_internal_has_haystack() const {
  return this != internal_default_instance() && haystack_ != nullptr;
}
inline bool Expression_Subquery_InPredicate::has_haystack() const {
  return _internal_has_haystack();
}
inline void Expression_Subquery_InPredicate::clear_haystack() {
  if (GetArenaForAllocation() == nullptr && haystack_ != nullptr) {
    delete haystack_;
  }
  haystack_ = nullptr;
}
inline const ::substrait::Rel& Expression_Subquery_InPredicate::_internal_haystack() const {
  const ::substrait::Rel* p = haystack_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Rel&>(
      ::substrait::_Rel_default_instance_);
}
inline const ::substrait::Rel& Expression_Subquery_InPredicate::haystack() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Subquery.InPredicate.haystack)
  return _internal_haystack();
}
inline void Expression_Subquery_InPredicate::unsafe_arena_set_allocated_haystack(
    ::substrait::Rel* haystack) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(haystack_);
  }
  haystack_ = haystack;
  if (haystack) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.Subquery.InPredicate.haystack)
}
inline ::substrait::Rel* Expression_Subquery_InPredicate::release_haystack() {
  
  ::substrait::Rel* temp = haystack_;
  haystack_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Rel* Expression_Subquery_InPredicate::unsafe_arena_release_haystack() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Subquery.InPredicate.haystack)
  
  ::substrait::Rel* temp = haystack_;
  haystack_ = nullptr;
  return temp;
}
inline ::substrait::Rel* Expression_Subquery_InPredicate::_internal_mutable_haystack() {
  
  if (haystack_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Rel>(GetArenaForAllocation());
    haystack_ = p;
  }
  return haystack_;
}
inline ::substrait::Rel* Expression_Subquery_InPredicate::mutable_haystack() {
  ::substrait::Rel* _msg = _internal_mutable_haystack();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Subquery.InPredicate.haystack)
  return _msg;
}
inline void Expression_Subquery_InPredicate::set_allocated_haystack(::substrait::Rel* haystack) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete haystack_;
  }
  if (haystack) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Rel>::GetOwningArena(haystack);
    if (message_arena != submessage_arena) {
      haystack = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, haystack, submessage_arena);
    }
    
  } else {
    
  }
  haystack_ = haystack;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.Subquery.InPredicate.haystack)
}

// -------------------------------------------------------------------

// Expression_Subquery_SetPredicate

// .substrait.Expression.Subquery.SetPredicate.PredicateOp predicate_op = 1 [json_name = "predicateOp"];
inline void Expression_Subquery_SetPredicate::clear_predicate_op() {
  predicate_op_ = 0;
}
inline ::substrait::Expression_Subquery_SetPredicate_PredicateOp Expression_Subquery_SetPredicate::_internal_predicate_op() const {
  return static_cast< ::substrait::Expression_Subquery_SetPredicate_PredicateOp >(predicate_op_);
}
inline ::substrait::Expression_Subquery_SetPredicate_PredicateOp Expression_Subquery_SetPredicate::predicate_op() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Subquery.SetPredicate.predicate_op)
  return _internal_predicate_op();
}
inline void Expression_Subquery_SetPredicate::_internal_set_predicate_op(::substrait::Expression_Subquery_SetPredicate_PredicateOp value) {
  
  predicate_op_ = value;
}
inline void Expression_Subquery_SetPredicate::set_predicate_op(::substrait::Expression_Subquery_SetPredicate_PredicateOp value) {
  _internal_set_predicate_op(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.Subquery.SetPredicate.predicate_op)
}

// .substrait.Rel tuples = 2 [json_name = "tuples"];
inline bool Expression_Subquery_SetPredicate::_internal_has_tuples() const {
  return this != internal_default_instance() && tuples_ != nullptr;
}
inline bool Expression_Subquery_SetPredicate::has_tuples() const {
  return _internal_has_tuples();
}
inline void Expression_Subquery_SetPredicate::clear_tuples() {
  if (GetArenaForAllocation() == nullptr && tuples_ != nullptr) {
    delete tuples_;
  }
  tuples_ = nullptr;
}
inline const ::substrait::Rel& Expression_Subquery_SetPredicate::_internal_tuples() const {
  const ::substrait::Rel* p = tuples_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Rel&>(
      ::substrait::_Rel_default_instance_);
}
inline const ::substrait::Rel& Expression_Subquery_SetPredicate::tuples() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Subquery.SetPredicate.tuples)
  return _internal_tuples();
}
inline void Expression_Subquery_SetPredicate::unsafe_arena_set_allocated_tuples(
    ::substrait::Rel* tuples) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(tuples_);
  }
  tuples_ = tuples;
  if (tuples) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.Subquery.SetPredicate.tuples)
}
inline ::substrait::Rel* Expression_Subquery_SetPredicate::release_tuples() {
  
  ::substrait::Rel* temp = tuples_;
  tuples_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Rel* Expression_Subquery_SetPredicate::unsafe_arena_release_tuples() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Subquery.SetPredicate.tuples)
  
  ::substrait::Rel* temp = tuples_;
  tuples_ = nullptr;
  return temp;
}
inline ::substrait::Rel* Expression_Subquery_SetPredicate::_internal_mutable_tuples() {
  
  if (tuples_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Rel>(GetArenaForAllocation());
    tuples_ = p;
  }
  return tuples_;
}
inline ::substrait::Rel* Expression_Subquery_SetPredicate::mutable_tuples() {
  ::substrait::Rel* _msg = _internal_mutable_tuples();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Subquery.SetPredicate.tuples)
  return _msg;
}
inline void Expression_Subquery_SetPredicate::set_allocated_tuples(::substrait::Rel* tuples) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete tuples_;
  }
  if (tuples) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Rel>::GetOwningArena(tuples);
    if (message_arena != submessage_arena) {
      tuples = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, tuples, submessage_arena);
    }
    
  } else {
    
  }
  tuples_ = tuples;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.Subquery.SetPredicate.tuples)
}

// -------------------------------------------------------------------

// Expression_Subquery_SetComparison

// .substrait.Expression.Subquery.SetComparison.ReductionOp reduction_op = 1 [json_name = "reductionOp"];
inline void Expression_Subquery_SetComparison::clear_reduction_op() {
  reduction_op_ = 0;
}
inline ::substrait::Expression_Subquery_SetComparison_ReductionOp Expression_Subquery_SetComparison::_internal_reduction_op() const {
  return static_cast< ::substrait::Expression_Subquery_SetComparison_ReductionOp >(reduction_op_);
}
inline ::substrait::Expression_Subquery_SetComparison_ReductionOp Expression_Subquery_SetComparison::reduction_op() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Subquery.SetComparison.reduction_op)
  return _internal_reduction_op();
}
inline void Expression_Subquery_SetComparison::_internal_set_reduction_op(::substrait::Expression_Subquery_SetComparison_ReductionOp value) {
  
  reduction_op_ = value;
}
inline void Expression_Subquery_SetComparison::set_reduction_op(::substrait::Expression_Subquery_SetComparison_ReductionOp value) {
  _internal_set_reduction_op(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.Subquery.SetComparison.reduction_op)
}

// .substrait.Expression.Subquery.SetComparison.ComparisonOp comparison_op = 2 [json_name = "comparisonOp"];
inline void Expression_Subquery_SetComparison::clear_comparison_op() {
  comparison_op_ = 0;
}
inline ::substrait::Expression_Subquery_SetComparison_ComparisonOp Expression_Subquery_SetComparison::_internal_comparison_op() const {
  return static_cast< ::substrait::Expression_Subquery_SetComparison_ComparisonOp >(comparison_op_);
}
inline ::substrait::Expression_Subquery_SetComparison_ComparisonOp Expression_Subquery_SetComparison::comparison_op() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Subquery.SetComparison.comparison_op)
  return _internal_comparison_op();
}
inline void Expression_Subquery_SetComparison::_internal_set_comparison_op(::substrait::Expression_Subquery_SetComparison_ComparisonOp value) {
  
  comparison_op_ = value;
}
inline void Expression_Subquery_SetComparison::set_comparison_op(::substrait::Expression_Subquery_SetComparison_ComparisonOp value) {
  _internal_set_comparison_op(value);
  // @@protoc_insertion_point(field_set:substrait.Expression.Subquery.SetComparison.comparison_op)
}

// .substrait.Expression left = 3 [json_name = "left"];
inline bool Expression_Subquery_SetComparison::_internal_has_left() const {
  return this != internal_default_instance() && left_ != nullptr;
}
inline bool Expression_Subquery_SetComparison::has_left() const {
  return _internal_has_left();
}
inline void Expression_Subquery_SetComparison::clear_left() {
  if (GetArenaForAllocation() == nullptr && left_ != nullptr) {
    delete left_;
  }
  left_ = nullptr;
}
inline const ::substrait::Expression& Expression_Subquery_SetComparison::_internal_left() const {
  const ::substrait::Expression* p = left_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression&>(
      ::substrait::_Expression_default_instance_);
}
inline const ::substrait::Expression& Expression_Subquery_SetComparison::left() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Subquery.SetComparison.left)
  return _internal_left();
}
inline void Expression_Subquery_SetComparison::unsafe_arena_set_allocated_left(
    ::substrait::Expression* left) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(left_);
  }
  left_ = left;
  if (left) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.Subquery.SetComparison.left)
}
inline ::substrait::Expression* Expression_Subquery_SetComparison::release_left() {
  
  ::substrait::Expression* temp = left_;
  left_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression* Expression_Subquery_SetComparison::unsafe_arena_release_left() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Subquery.SetComparison.left)
  
  ::substrait::Expression* temp = left_;
  left_ = nullptr;
  return temp;
}
inline ::substrait::Expression* Expression_Subquery_SetComparison::_internal_mutable_left() {
  
  if (left_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression>(GetArenaForAllocation());
    left_ = p;
  }
  return left_;
}
inline ::substrait::Expression* Expression_Subquery_SetComparison::mutable_left() {
  ::substrait::Expression* _msg = _internal_mutable_left();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Subquery.SetComparison.left)
  return _msg;
}
inline void Expression_Subquery_SetComparison::set_allocated_left(::substrait::Expression* left) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete left_;
  }
  if (left) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression>::GetOwningArena(left);
    if (message_arena != submessage_arena) {
      left = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, left, submessage_arena);
    }
    
  } else {
    
  }
  left_ = left;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.Subquery.SetComparison.left)
}

// .substrait.Rel right = 4 [json_name = "right"];
inline bool Expression_Subquery_SetComparison::_internal_has_right() const {
  return this != internal_default_instance() && right_ != nullptr;
}
inline bool Expression_Subquery_SetComparison::has_right() const {
  return _internal_has_right();
}
inline void Expression_Subquery_SetComparison::clear_right() {
  if (GetArenaForAllocation() == nullptr && right_ != nullptr) {
    delete right_;
  }
  right_ = nullptr;
}
inline const ::substrait::Rel& Expression_Subquery_SetComparison::_internal_right() const {
  const ::substrait::Rel* p = right_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Rel&>(
      ::substrait::_Rel_default_instance_);
}
inline const ::substrait::Rel& Expression_Subquery_SetComparison::right() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Subquery.SetComparison.right)
  return _internal_right();
}
inline void Expression_Subquery_SetComparison::unsafe_arena_set_allocated_right(
    ::substrait::Rel* right) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(right_);
  }
  right_ = right;
  if (right) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.Subquery.SetComparison.right)
}
inline ::substrait::Rel* Expression_Subquery_SetComparison::release_right() {
  
  ::substrait::Rel* temp = right_;
  right_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Rel* Expression_Subquery_SetComparison::unsafe_arena_release_right() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Subquery.SetComparison.right)
  
  ::substrait::Rel* temp = right_;
  right_ = nullptr;
  return temp;
}
inline ::substrait::Rel* Expression_Subquery_SetComparison::_internal_mutable_right() {
  
  if (right_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Rel>(GetArenaForAllocation());
    right_ = p;
  }
  return right_;
}
inline ::substrait::Rel* Expression_Subquery_SetComparison::mutable_right() {
  ::substrait::Rel* _msg = _internal_mutable_right();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Subquery.SetComparison.right)
  return _msg;
}
inline void Expression_Subquery_SetComparison::set_allocated_right(::substrait::Rel* right) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete right_;
  }
  if (right) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Rel>::GetOwningArena(right);
    if (message_arena != submessage_arena) {
      right = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, right, submessage_arena);
    }
    
  } else {
    
  }
  right_ = right;
  // @@protoc_insertion_point(field_set_allocated:substrait.Expression.Subquery.SetComparison.right)
}

// -------------------------------------------------------------------

// Expression_Subquery

// .substrait.Expression.Subquery.Scalar scalar = 1 [json_name = "scalar"];
inline bool Expression_Subquery::_internal_has_scalar() const {
  return subquery_type_case() == kScalar;
}
inline bool Expression_Subquery::has_scalar() const {
  return _internal_has_scalar();
}
inline void Expression_Subquery::set_has_scalar() {
  _oneof_case_[0] = kScalar;
}
inline void Expression_Subquery::clear_scalar() {
  if (_internal_has_scalar()) {
    if (GetArenaForAllocation() == nullptr) {
      delete subquery_type_.scalar_;
    }
    clear_has_subquery_type();
  }
}
inline ::substrait::Expression_Subquery_Scalar* Expression_Subquery::release_scalar() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Subquery.scalar)
  if (_internal_has_scalar()) {
    clear_has_subquery_type();
      ::substrait::Expression_Subquery_Scalar* temp = subquery_type_.scalar_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    subquery_type_.scalar_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_Subquery_Scalar& Expression_Subquery::_internal_scalar() const {
  return _internal_has_scalar()
      ? *subquery_type_.scalar_
      : reinterpret_cast< ::substrait::Expression_Subquery_Scalar&>(::substrait::_Expression_Subquery_Scalar_default_instance_);
}
inline const ::substrait::Expression_Subquery_Scalar& Expression_Subquery::scalar() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Subquery.scalar)
  return _internal_scalar();
}
inline ::substrait::Expression_Subquery_Scalar* Expression_Subquery::unsafe_arena_release_scalar() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.Subquery.scalar)
  if (_internal_has_scalar()) {
    clear_has_subquery_type();
    ::substrait::Expression_Subquery_Scalar* temp = subquery_type_.scalar_;
    subquery_type_.scalar_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_Subquery::unsafe_arena_set_allocated_scalar(::substrait::Expression_Subquery_Scalar* scalar) {
  clear_subquery_type();
  if (scalar) {
    set_has_scalar();
    subquery_type_.scalar_ = scalar;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.Subquery.scalar)
}
inline ::substrait::Expression_Subquery_Scalar* Expression_Subquery::_internal_mutable_scalar() {
  if (!_internal_has_scalar()) {
    clear_subquery_type();
    set_has_scalar();
    subquery_type_.scalar_ = CreateMaybeMessage< ::substrait::Expression_Subquery_Scalar >(GetArenaForAllocation());
  }
  return subquery_type_.scalar_;
}
inline ::substrait::Expression_Subquery_Scalar* Expression_Subquery::mutable_scalar() {
  ::substrait::Expression_Subquery_Scalar* _msg = _internal_mutable_scalar();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Subquery.scalar)
  return _msg;
}

// .substrait.Expression.Subquery.InPredicate in_predicate = 2 [json_name = "inPredicate"];
inline bool Expression_Subquery::_internal_has_in_predicate() const {
  return subquery_type_case() == kInPredicate;
}
inline bool Expression_Subquery::has_in_predicate() const {
  return _internal_has_in_predicate();
}
inline void Expression_Subquery::set_has_in_predicate() {
  _oneof_case_[0] = kInPredicate;
}
inline void Expression_Subquery::clear_in_predicate() {
  if (_internal_has_in_predicate()) {
    if (GetArenaForAllocation() == nullptr) {
      delete subquery_type_.in_predicate_;
    }
    clear_has_subquery_type();
  }
}
inline ::substrait::Expression_Subquery_InPredicate* Expression_Subquery::release_in_predicate() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Subquery.in_predicate)
  if (_internal_has_in_predicate()) {
    clear_has_subquery_type();
      ::substrait::Expression_Subquery_InPredicate* temp = subquery_type_.in_predicate_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    subquery_type_.in_predicate_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_Subquery_InPredicate& Expression_Subquery::_internal_in_predicate() const {
  return _internal_has_in_predicate()
      ? *subquery_type_.in_predicate_
      : reinterpret_cast< ::substrait::Expression_Subquery_InPredicate&>(::substrait::_Expression_Subquery_InPredicate_default_instance_);
}
inline const ::substrait::Expression_Subquery_InPredicate& Expression_Subquery::in_predicate() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Subquery.in_predicate)
  return _internal_in_predicate();
}
inline ::substrait::Expression_Subquery_InPredicate* Expression_Subquery::unsafe_arena_release_in_predicate() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.Subquery.in_predicate)
  if (_internal_has_in_predicate()) {
    clear_has_subquery_type();
    ::substrait::Expression_Subquery_InPredicate* temp = subquery_type_.in_predicate_;
    subquery_type_.in_predicate_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_Subquery::unsafe_arena_set_allocated_in_predicate(::substrait::Expression_Subquery_InPredicate* in_predicate) {
  clear_subquery_type();
  if (in_predicate) {
    set_has_in_predicate();
    subquery_type_.in_predicate_ = in_predicate;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.Subquery.in_predicate)
}
inline ::substrait::Expression_Subquery_InPredicate* Expression_Subquery::_internal_mutable_in_predicate() {
  if (!_internal_has_in_predicate()) {
    clear_subquery_type();
    set_has_in_predicate();
    subquery_type_.in_predicate_ = CreateMaybeMessage< ::substrait::Expression_Subquery_InPredicate >(GetArenaForAllocation());
  }
  return subquery_type_.in_predicate_;
}
inline ::substrait::Expression_Subquery_InPredicate* Expression_Subquery::mutable_in_predicate() {
  ::substrait::Expression_Subquery_InPredicate* _msg = _internal_mutable_in_predicate();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Subquery.in_predicate)
  return _msg;
}

// .substrait.Expression.Subquery.SetPredicate set_predicate = 3 [json_name = "setPredicate"];
inline bool Expression_Subquery::_internal_has_set_predicate() const {
  return subquery_type_case() == kSetPredicate;
}
inline bool Expression_Subquery::has_set_predicate() const {
  return _internal_has_set_predicate();
}
inline void Expression_Subquery::set_has_set_predicate() {
  _oneof_case_[0] = kSetPredicate;
}
inline void Expression_Subquery::clear_set_predicate() {
  if (_internal_has_set_predicate()) {
    if (GetArenaForAllocation() == nullptr) {
      delete subquery_type_.set_predicate_;
    }
    clear_has_subquery_type();
  }
}
inline ::substrait::Expression_Subquery_SetPredicate* Expression_Subquery::release_set_predicate() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Subquery.set_predicate)
  if (_internal_has_set_predicate()) {
    clear_has_subquery_type();
      ::substrait::Expression_Subquery_SetPredicate* temp = subquery_type_.set_predicate_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    subquery_type_.set_predicate_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_Subquery_SetPredicate& Expression_Subquery::_internal_set_predicate() const {
  return _internal_has_set_predicate()
      ? *subquery_type_.set_predicate_
      : reinterpret_cast< ::substrait::Expression_Subquery_SetPredicate&>(::substrait::_Expression_Subquery_SetPredicate_default_instance_);
}
inline const ::substrait::Expression_Subquery_SetPredicate& Expression_Subquery::set_predicate() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Subquery.set_predicate)
  return _internal_set_predicate();
}
inline ::substrait::Expression_Subquery_SetPredicate* Expression_Subquery::unsafe_arena_release_set_predicate() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.Subquery.set_predicate)
  if (_internal_has_set_predicate()) {
    clear_has_subquery_type();
    ::substrait::Expression_Subquery_SetPredicate* temp = subquery_type_.set_predicate_;
    subquery_type_.set_predicate_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_Subquery::unsafe_arena_set_allocated_set_predicate(::substrait::Expression_Subquery_SetPredicate* set_predicate) {
  clear_subquery_type();
  if (set_predicate) {
    set_has_set_predicate();
    subquery_type_.set_predicate_ = set_predicate;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.Subquery.set_predicate)
}
inline ::substrait::Expression_Subquery_SetPredicate* Expression_Subquery::_internal_mutable_set_predicate() {
  if (!_internal_has_set_predicate()) {
    clear_subquery_type();
    set_has_set_predicate();
    subquery_type_.set_predicate_ = CreateMaybeMessage< ::substrait::Expression_Subquery_SetPredicate >(GetArenaForAllocation());
  }
  return subquery_type_.set_predicate_;
}
inline ::substrait::Expression_Subquery_SetPredicate* Expression_Subquery::mutable_set_predicate() {
  ::substrait::Expression_Subquery_SetPredicate* _msg = _internal_mutable_set_predicate();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Subquery.set_predicate)
  return _msg;
}

// .substrait.Expression.Subquery.SetComparison set_comparison = 4 [json_name = "setComparison"];
inline bool Expression_Subquery::_internal_has_set_comparison() const {
  return subquery_type_case() == kSetComparison;
}
inline bool Expression_Subquery::has_set_comparison() const {
  return _internal_has_set_comparison();
}
inline void Expression_Subquery::set_has_set_comparison() {
  _oneof_case_[0] = kSetComparison;
}
inline void Expression_Subquery::clear_set_comparison() {
  if (_internal_has_set_comparison()) {
    if (GetArenaForAllocation() == nullptr) {
      delete subquery_type_.set_comparison_;
    }
    clear_has_subquery_type();
  }
}
inline ::substrait::Expression_Subquery_SetComparison* Expression_Subquery::release_set_comparison() {
  // @@protoc_insertion_point(field_release:substrait.Expression.Subquery.set_comparison)
  if (_internal_has_set_comparison()) {
    clear_has_subquery_type();
      ::substrait::Expression_Subquery_SetComparison* temp = subquery_type_.set_comparison_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    subquery_type_.set_comparison_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_Subquery_SetComparison& Expression_Subquery::_internal_set_comparison() const {
  return _internal_has_set_comparison()
      ? *subquery_type_.set_comparison_
      : reinterpret_cast< ::substrait::Expression_Subquery_SetComparison&>(::substrait::_Expression_Subquery_SetComparison_default_instance_);
}
inline const ::substrait::Expression_Subquery_SetComparison& Expression_Subquery::set_comparison() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.Subquery.set_comparison)
  return _internal_set_comparison();
}
inline ::substrait::Expression_Subquery_SetComparison* Expression_Subquery::unsafe_arena_release_set_comparison() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.Subquery.set_comparison)
  if (_internal_has_set_comparison()) {
    clear_has_subquery_type();
    ::substrait::Expression_Subquery_SetComparison* temp = subquery_type_.set_comparison_;
    subquery_type_.set_comparison_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression_Subquery::unsafe_arena_set_allocated_set_comparison(::substrait::Expression_Subquery_SetComparison* set_comparison) {
  clear_subquery_type();
  if (set_comparison) {
    set_has_set_comparison();
    subquery_type_.set_comparison_ = set_comparison;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.Subquery.set_comparison)
}
inline ::substrait::Expression_Subquery_SetComparison* Expression_Subquery::_internal_mutable_set_comparison() {
  if (!_internal_has_set_comparison()) {
    clear_subquery_type();
    set_has_set_comparison();
    subquery_type_.set_comparison_ = CreateMaybeMessage< ::substrait::Expression_Subquery_SetComparison >(GetArenaForAllocation());
  }
  return subquery_type_.set_comparison_;
}
inline ::substrait::Expression_Subquery_SetComparison* Expression_Subquery::mutable_set_comparison() {
  ::substrait::Expression_Subquery_SetComparison* _msg = _internal_mutable_set_comparison();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.Subquery.set_comparison)
  return _msg;
}

inline bool Expression_Subquery::has_subquery_type() const {
  return subquery_type_case() != SUBQUERY_TYPE_NOT_SET;
}
inline void Expression_Subquery::clear_has_subquery_type() {
  _oneof_case_[0] = SUBQUERY_TYPE_NOT_SET;
}
inline Expression_Subquery::SubqueryTypeCase Expression_Subquery::subquery_type_case() const {
  return Expression_Subquery::SubqueryTypeCase(_oneof_case_[0]);
}
// -------------------------------------------------------------------

// Expression

// .substrait.Expression.Literal literal = 1 [json_name = "literal"];
inline bool Expression::_internal_has_literal() const {
  return rex_type_case() == kLiteral;
}
inline bool Expression::has_literal() const {
  return _internal_has_literal();
}
inline void Expression::set_has_literal() {
  _oneof_case_[0] = kLiteral;
}
inline void Expression::clear_literal() {
  if (_internal_has_literal()) {
    if (GetArenaForAllocation() == nullptr) {
      delete rex_type_.literal_;
    }
    clear_has_rex_type();
  }
}
inline ::substrait::Expression_Literal* Expression::release_literal() {
  // @@protoc_insertion_point(field_release:substrait.Expression.literal)
  if (_internal_has_literal()) {
    clear_has_rex_type();
      ::substrait::Expression_Literal* temp = rex_type_.literal_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    rex_type_.literal_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_Literal& Expression::_internal_literal() const {
  return _internal_has_literal()
      ? *rex_type_.literal_
      : reinterpret_cast< ::substrait::Expression_Literal&>(::substrait::_Expression_Literal_default_instance_);
}
inline const ::substrait::Expression_Literal& Expression::literal() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.literal)
  return _internal_literal();
}
inline ::substrait::Expression_Literal* Expression::unsafe_arena_release_literal() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.literal)
  if (_internal_has_literal()) {
    clear_has_rex_type();
    ::substrait::Expression_Literal* temp = rex_type_.literal_;
    rex_type_.literal_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression::unsafe_arena_set_allocated_literal(::substrait::Expression_Literal* literal) {
  clear_rex_type();
  if (literal) {
    set_has_literal();
    rex_type_.literal_ = literal;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.literal)
}
inline ::substrait::Expression_Literal* Expression::_internal_mutable_literal() {
  if (!_internal_has_literal()) {
    clear_rex_type();
    set_has_literal();
    rex_type_.literal_ = CreateMaybeMessage< ::substrait::Expression_Literal >(GetArenaForAllocation());
  }
  return rex_type_.literal_;
}
inline ::substrait::Expression_Literal* Expression::mutable_literal() {
  ::substrait::Expression_Literal* _msg = _internal_mutable_literal();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.literal)
  return _msg;
}

// .substrait.Expression.FieldReference selection = 2 [json_name = "selection"];
inline bool Expression::_internal_has_selection() const {
  return rex_type_case() == kSelection;
}
inline bool Expression::has_selection() const {
  return _internal_has_selection();
}
inline void Expression::set_has_selection() {
  _oneof_case_[0] = kSelection;
}
inline void Expression::clear_selection() {
  if (_internal_has_selection()) {
    if (GetArenaForAllocation() == nullptr) {
      delete rex_type_.selection_;
    }
    clear_has_rex_type();
  }
}
inline ::substrait::Expression_FieldReference* Expression::release_selection() {
  // @@protoc_insertion_point(field_release:substrait.Expression.selection)
  if (_internal_has_selection()) {
    clear_has_rex_type();
      ::substrait::Expression_FieldReference* temp = rex_type_.selection_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    rex_type_.selection_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_FieldReference& Expression::_internal_selection() const {
  return _internal_has_selection()
      ? *rex_type_.selection_
      : reinterpret_cast< ::substrait::Expression_FieldReference&>(::substrait::_Expression_FieldReference_default_instance_);
}
inline const ::substrait::Expression_FieldReference& Expression::selection() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.selection)
  return _internal_selection();
}
inline ::substrait::Expression_FieldReference* Expression::unsafe_arena_release_selection() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.selection)
  if (_internal_has_selection()) {
    clear_has_rex_type();
    ::substrait::Expression_FieldReference* temp = rex_type_.selection_;
    rex_type_.selection_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression::unsafe_arena_set_allocated_selection(::substrait::Expression_FieldReference* selection) {
  clear_rex_type();
  if (selection) {
    set_has_selection();
    rex_type_.selection_ = selection;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.selection)
}
inline ::substrait::Expression_FieldReference* Expression::_internal_mutable_selection() {
  if (!_internal_has_selection()) {
    clear_rex_type();
    set_has_selection();
    rex_type_.selection_ = CreateMaybeMessage< ::substrait::Expression_FieldReference >(GetArenaForAllocation());
  }
  return rex_type_.selection_;
}
inline ::substrait::Expression_FieldReference* Expression::mutable_selection() {
  ::substrait::Expression_FieldReference* _msg = _internal_mutable_selection();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.selection)
  return _msg;
}

// .substrait.Expression.ScalarFunction scalar_function = 3 [json_name = "scalarFunction"];
inline bool Expression::_internal_has_scalar_function() const {
  return rex_type_case() == kScalarFunction;
}
inline bool Expression::has_scalar_function() const {
  return _internal_has_scalar_function();
}
inline void Expression::set_has_scalar_function() {
  _oneof_case_[0] = kScalarFunction;
}
inline void Expression::clear_scalar_function() {
  if (_internal_has_scalar_function()) {
    if (GetArenaForAllocation() == nullptr) {
      delete rex_type_.scalar_function_;
    }
    clear_has_rex_type();
  }
}
inline ::substrait::Expression_ScalarFunction* Expression::release_scalar_function() {
  // @@protoc_insertion_point(field_release:substrait.Expression.scalar_function)
  if (_internal_has_scalar_function()) {
    clear_has_rex_type();
      ::substrait::Expression_ScalarFunction* temp = rex_type_.scalar_function_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    rex_type_.scalar_function_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_ScalarFunction& Expression::_internal_scalar_function() const {
  return _internal_has_scalar_function()
      ? *rex_type_.scalar_function_
      : reinterpret_cast< ::substrait::Expression_ScalarFunction&>(::substrait::_Expression_ScalarFunction_default_instance_);
}
inline const ::substrait::Expression_ScalarFunction& Expression::scalar_function() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.scalar_function)
  return _internal_scalar_function();
}
inline ::substrait::Expression_ScalarFunction* Expression::unsafe_arena_release_scalar_function() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.scalar_function)
  if (_internal_has_scalar_function()) {
    clear_has_rex_type();
    ::substrait::Expression_ScalarFunction* temp = rex_type_.scalar_function_;
    rex_type_.scalar_function_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression::unsafe_arena_set_allocated_scalar_function(::substrait::Expression_ScalarFunction* scalar_function) {
  clear_rex_type();
  if (scalar_function) {
    set_has_scalar_function();
    rex_type_.scalar_function_ = scalar_function;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.scalar_function)
}
inline ::substrait::Expression_ScalarFunction* Expression::_internal_mutable_scalar_function() {
  if (!_internal_has_scalar_function()) {
    clear_rex_type();
    set_has_scalar_function();
    rex_type_.scalar_function_ = CreateMaybeMessage< ::substrait::Expression_ScalarFunction >(GetArenaForAllocation());
  }
  return rex_type_.scalar_function_;
}
inline ::substrait::Expression_ScalarFunction* Expression::mutable_scalar_function() {
  ::substrait::Expression_ScalarFunction* _msg = _internal_mutable_scalar_function();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.scalar_function)
  return _msg;
}

// .substrait.Expression.WindowFunction window_function = 5 [json_name = "windowFunction"];
inline bool Expression::_internal_has_window_function() const {
  return rex_type_case() == kWindowFunction;
}
inline bool Expression::has_window_function() const {
  return _internal_has_window_function();
}
inline void Expression::set_has_window_function() {
  _oneof_case_[0] = kWindowFunction;
}
inline void Expression::clear_window_function() {
  if (_internal_has_window_function()) {
    if (GetArenaForAllocation() == nullptr) {
      delete rex_type_.window_function_;
    }
    clear_has_rex_type();
  }
}
inline ::substrait::Expression_WindowFunction* Expression::release_window_function() {
  // @@protoc_insertion_point(field_release:substrait.Expression.window_function)
  if (_internal_has_window_function()) {
    clear_has_rex_type();
      ::substrait::Expression_WindowFunction* temp = rex_type_.window_function_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    rex_type_.window_function_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_WindowFunction& Expression::_internal_window_function() const {
  return _internal_has_window_function()
      ? *rex_type_.window_function_
      : reinterpret_cast< ::substrait::Expression_WindowFunction&>(::substrait::_Expression_WindowFunction_default_instance_);
}
inline const ::substrait::Expression_WindowFunction& Expression::window_function() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.window_function)
  return _internal_window_function();
}
inline ::substrait::Expression_WindowFunction* Expression::unsafe_arena_release_window_function() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.window_function)
  if (_internal_has_window_function()) {
    clear_has_rex_type();
    ::substrait::Expression_WindowFunction* temp = rex_type_.window_function_;
    rex_type_.window_function_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression::unsafe_arena_set_allocated_window_function(::substrait::Expression_WindowFunction* window_function) {
  clear_rex_type();
  if (window_function) {
    set_has_window_function();
    rex_type_.window_function_ = window_function;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.window_function)
}
inline ::substrait::Expression_WindowFunction* Expression::_internal_mutable_window_function() {
  if (!_internal_has_window_function()) {
    clear_rex_type();
    set_has_window_function();
    rex_type_.window_function_ = CreateMaybeMessage< ::substrait::Expression_WindowFunction >(GetArenaForAllocation());
  }
  return rex_type_.window_function_;
}
inline ::substrait::Expression_WindowFunction* Expression::mutable_window_function() {
  ::substrait::Expression_WindowFunction* _msg = _internal_mutable_window_function();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.window_function)
  return _msg;
}

// .substrait.Expression.IfThen if_then = 6 [json_name = "ifThen"];
inline bool Expression::_internal_has_if_then() const {
  return rex_type_case() == kIfThen;
}
inline bool Expression::has_if_then() const {
  return _internal_has_if_then();
}
inline void Expression::set_has_if_then() {
  _oneof_case_[0] = kIfThen;
}
inline void Expression::clear_if_then() {
  if (_internal_has_if_then()) {
    if (GetArenaForAllocation() == nullptr) {
      delete rex_type_.if_then_;
    }
    clear_has_rex_type();
  }
}
inline ::substrait::Expression_IfThen* Expression::release_if_then() {
  // @@protoc_insertion_point(field_release:substrait.Expression.if_then)
  if (_internal_has_if_then()) {
    clear_has_rex_type();
      ::substrait::Expression_IfThen* temp = rex_type_.if_then_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    rex_type_.if_then_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_IfThen& Expression::_internal_if_then() const {
  return _internal_has_if_then()
      ? *rex_type_.if_then_
      : reinterpret_cast< ::substrait::Expression_IfThen&>(::substrait::_Expression_IfThen_default_instance_);
}
inline const ::substrait::Expression_IfThen& Expression::if_then() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.if_then)
  return _internal_if_then();
}
inline ::substrait::Expression_IfThen* Expression::unsafe_arena_release_if_then() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.if_then)
  if (_internal_has_if_then()) {
    clear_has_rex_type();
    ::substrait::Expression_IfThen* temp = rex_type_.if_then_;
    rex_type_.if_then_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression::unsafe_arena_set_allocated_if_then(::substrait::Expression_IfThen* if_then) {
  clear_rex_type();
  if (if_then) {
    set_has_if_then();
    rex_type_.if_then_ = if_then;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.if_then)
}
inline ::substrait::Expression_IfThen* Expression::_internal_mutable_if_then() {
  if (!_internal_has_if_then()) {
    clear_rex_type();
    set_has_if_then();
    rex_type_.if_then_ = CreateMaybeMessage< ::substrait::Expression_IfThen >(GetArenaForAllocation());
  }
  return rex_type_.if_then_;
}
inline ::substrait::Expression_IfThen* Expression::mutable_if_then() {
  ::substrait::Expression_IfThen* _msg = _internal_mutable_if_then();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.if_then)
  return _msg;
}

// .substrait.Expression.SwitchExpression switch_expression = 7 [json_name = "switchExpression"];
inline bool Expression::_internal_has_switch_expression() const {
  return rex_type_case() == kSwitchExpression;
}
inline bool Expression::has_switch_expression() const {
  return _internal_has_switch_expression();
}
inline void Expression::set_has_switch_expression() {
  _oneof_case_[0] = kSwitchExpression;
}
inline void Expression::clear_switch_expression() {
  if (_internal_has_switch_expression()) {
    if (GetArenaForAllocation() == nullptr) {
      delete rex_type_.switch_expression_;
    }
    clear_has_rex_type();
  }
}
inline ::substrait::Expression_SwitchExpression* Expression::release_switch_expression() {
  // @@protoc_insertion_point(field_release:substrait.Expression.switch_expression)
  if (_internal_has_switch_expression()) {
    clear_has_rex_type();
      ::substrait::Expression_SwitchExpression* temp = rex_type_.switch_expression_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    rex_type_.switch_expression_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_SwitchExpression& Expression::_internal_switch_expression() const {
  return _internal_has_switch_expression()
      ? *rex_type_.switch_expression_
      : reinterpret_cast< ::substrait::Expression_SwitchExpression&>(::substrait::_Expression_SwitchExpression_default_instance_);
}
inline const ::substrait::Expression_SwitchExpression& Expression::switch_expression() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.switch_expression)
  return _internal_switch_expression();
}
inline ::substrait::Expression_SwitchExpression* Expression::unsafe_arena_release_switch_expression() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.switch_expression)
  if (_internal_has_switch_expression()) {
    clear_has_rex_type();
    ::substrait::Expression_SwitchExpression* temp = rex_type_.switch_expression_;
    rex_type_.switch_expression_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression::unsafe_arena_set_allocated_switch_expression(::substrait::Expression_SwitchExpression* switch_expression) {
  clear_rex_type();
  if (switch_expression) {
    set_has_switch_expression();
    rex_type_.switch_expression_ = switch_expression;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.switch_expression)
}
inline ::substrait::Expression_SwitchExpression* Expression::_internal_mutable_switch_expression() {
  if (!_internal_has_switch_expression()) {
    clear_rex_type();
    set_has_switch_expression();
    rex_type_.switch_expression_ = CreateMaybeMessage< ::substrait::Expression_SwitchExpression >(GetArenaForAllocation());
  }
  return rex_type_.switch_expression_;
}
inline ::substrait::Expression_SwitchExpression* Expression::mutable_switch_expression() {
  ::substrait::Expression_SwitchExpression* _msg = _internal_mutable_switch_expression();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.switch_expression)
  return _msg;
}

// .substrait.Expression.SingularOrList singular_or_list = 8 [json_name = "singularOrList"];
inline bool Expression::_internal_has_singular_or_list() const {
  return rex_type_case() == kSingularOrList;
}
inline bool Expression::has_singular_or_list() const {
  return _internal_has_singular_or_list();
}
inline void Expression::set_has_singular_or_list() {
  _oneof_case_[0] = kSingularOrList;
}
inline void Expression::clear_singular_or_list() {
  if (_internal_has_singular_or_list()) {
    if (GetArenaForAllocation() == nullptr) {
      delete rex_type_.singular_or_list_;
    }
    clear_has_rex_type();
  }
}
inline ::substrait::Expression_SingularOrList* Expression::release_singular_or_list() {
  // @@protoc_insertion_point(field_release:substrait.Expression.singular_or_list)
  if (_internal_has_singular_or_list()) {
    clear_has_rex_type();
      ::substrait::Expression_SingularOrList* temp = rex_type_.singular_or_list_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    rex_type_.singular_or_list_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_SingularOrList& Expression::_internal_singular_or_list() const {
  return _internal_has_singular_or_list()
      ? *rex_type_.singular_or_list_
      : reinterpret_cast< ::substrait::Expression_SingularOrList&>(::substrait::_Expression_SingularOrList_default_instance_);
}
inline const ::substrait::Expression_SingularOrList& Expression::singular_or_list() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.singular_or_list)
  return _internal_singular_or_list();
}
inline ::substrait::Expression_SingularOrList* Expression::unsafe_arena_release_singular_or_list() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.singular_or_list)
  if (_internal_has_singular_or_list()) {
    clear_has_rex_type();
    ::substrait::Expression_SingularOrList* temp = rex_type_.singular_or_list_;
    rex_type_.singular_or_list_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression::unsafe_arena_set_allocated_singular_or_list(::substrait::Expression_SingularOrList* singular_or_list) {
  clear_rex_type();
  if (singular_or_list) {
    set_has_singular_or_list();
    rex_type_.singular_or_list_ = singular_or_list;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.singular_or_list)
}
inline ::substrait::Expression_SingularOrList* Expression::_internal_mutable_singular_or_list() {
  if (!_internal_has_singular_or_list()) {
    clear_rex_type();
    set_has_singular_or_list();
    rex_type_.singular_or_list_ = CreateMaybeMessage< ::substrait::Expression_SingularOrList >(GetArenaForAllocation());
  }
  return rex_type_.singular_or_list_;
}
inline ::substrait::Expression_SingularOrList* Expression::mutable_singular_or_list() {
  ::substrait::Expression_SingularOrList* _msg = _internal_mutable_singular_or_list();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.singular_or_list)
  return _msg;
}

// .substrait.Expression.MultiOrList multi_or_list = 9 [json_name = "multiOrList"];
inline bool Expression::_internal_has_multi_or_list() const {
  return rex_type_case() == kMultiOrList;
}
inline bool Expression::has_multi_or_list() const {
  return _internal_has_multi_or_list();
}
inline void Expression::set_has_multi_or_list() {
  _oneof_case_[0] = kMultiOrList;
}
inline void Expression::clear_multi_or_list() {
  if (_internal_has_multi_or_list()) {
    if (GetArenaForAllocation() == nullptr) {
      delete rex_type_.multi_or_list_;
    }
    clear_has_rex_type();
  }
}
inline ::substrait::Expression_MultiOrList* Expression::release_multi_or_list() {
  // @@protoc_insertion_point(field_release:substrait.Expression.multi_or_list)
  if (_internal_has_multi_or_list()) {
    clear_has_rex_type();
      ::substrait::Expression_MultiOrList* temp = rex_type_.multi_or_list_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    rex_type_.multi_or_list_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_MultiOrList& Expression::_internal_multi_or_list() const {
  return _internal_has_multi_or_list()
      ? *rex_type_.multi_or_list_
      : reinterpret_cast< ::substrait::Expression_MultiOrList&>(::substrait::_Expression_MultiOrList_default_instance_);
}
inline const ::substrait::Expression_MultiOrList& Expression::multi_or_list() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.multi_or_list)
  return _internal_multi_or_list();
}
inline ::substrait::Expression_MultiOrList* Expression::unsafe_arena_release_multi_or_list() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.multi_or_list)
  if (_internal_has_multi_or_list()) {
    clear_has_rex_type();
    ::substrait::Expression_MultiOrList* temp = rex_type_.multi_or_list_;
    rex_type_.multi_or_list_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression::unsafe_arena_set_allocated_multi_or_list(::substrait::Expression_MultiOrList* multi_or_list) {
  clear_rex_type();
  if (multi_or_list) {
    set_has_multi_or_list();
    rex_type_.multi_or_list_ = multi_or_list;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.multi_or_list)
}
inline ::substrait::Expression_MultiOrList* Expression::_internal_mutable_multi_or_list() {
  if (!_internal_has_multi_or_list()) {
    clear_rex_type();
    set_has_multi_or_list();
    rex_type_.multi_or_list_ = CreateMaybeMessage< ::substrait::Expression_MultiOrList >(GetArenaForAllocation());
  }
  return rex_type_.multi_or_list_;
}
inline ::substrait::Expression_MultiOrList* Expression::mutable_multi_or_list() {
  ::substrait::Expression_MultiOrList* _msg = _internal_mutable_multi_or_list();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.multi_or_list)
  return _msg;
}

// .substrait.Expression.Enum enum = 10 [json_name = "enum"];
inline bool Expression::_internal_has_enum_() const {
  return rex_type_case() == kEnum;
}
inline bool Expression::has_enum_() const {
  return _internal_has_enum_();
}
inline void Expression::set_has_enum_() {
  _oneof_case_[0] = kEnum;
}
inline void Expression::clear_enum_() {
  if (_internal_has_enum_()) {
    if (GetArenaForAllocation() == nullptr) {
      delete rex_type_.enum__;
    }
    clear_has_rex_type();
  }
}
inline ::substrait::Expression_Enum* Expression::release_enum_() {
  // @@protoc_insertion_point(field_release:substrait.Expression.enum)
  if (_internal_has_enum_()) {
    clear_has_rex_type();
      ::substrait::Expression_Enum* temp = rex_type_.enum__;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    rex_type_.enum__ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_Enum& Expression::_internal_enum_() const {
  return _internal_has_enum_()
      ? *rex_type_.enum__
      : reinterpret_cast< ::substrait::Expression_Enum&>(::substrait::_Expression_Enum_default_instance_);
}
inline const ::substrait::Expression_Enum& Expression::enum_() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.enum)
  return _internal_enum_();
}
inline ::substrait::Expression_Enum* Expression::unsafe_arena_release_enum_() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.enum)
  if (_internal_has_enum_()) {
    clear_has_rex_type();
    ::substrait::Expression_Enum* temp = rex_type_.enum__;
    rex_type_.enum__ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression::unsafe_arena_set_allocated_enum_(::substrait::Expression_Enum* enum_) {
  clear_rex_type();
  if (enum_) {
    set_has_enum_();
    rex_type_.enum__ = enum_;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.enum)
}
inline ::substrait::Expression_Enum* Expression::_internal_mutable_enum_() {
  if (!_internal_has_enum_()) {
    clear_rex_type();
    set_has_enum_();
    rex_type_.enum__ = CreateMaybeMessage< ::substrait::Expression_Enum >(GetArenaForAllocation());
  }
  return rex_type_.enum__;
}
inline ::substrait::Expression_Enum* Expression::mutable_enum_() {
  ::substrait::Expression_Enum* _msg = _internal_mutable_enum_();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.enum)
  return _msg;
}

// .substrait.Expression.Cast cast = 11 [json_name = "cast"];
inline bool Expression::_internal_has_cast() const {
  return rex_type_case() == kCast;
}
inline bool Expression::has_cast() const {
  return _internal_has_cast();
}
inline void Expression::set_has_cast() {
  _oneof_case_[0] = kCast;
}
inline void Expression::clear_cast() {
  if (_internal_has_cast()) {
    if (GetArenaForAllocation() == nullptr) {
      delete rex_type_.cast_;
    }
    clear_has_rex_type();
  }
}
inline ::substrait::Expression_Cast* Expression::release_cast() {
  // @@protoc_insertion_point(field_release:substrait.Expression.cast)
  if (_internal_has_cast()) {
    clear_has_rex_type();
      ::substrait::Expression_Cast* temp = rex_type_.cast_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    rex_type_.cast_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_Cast& Expression::_internal_cast() const {
  return _internal_has_cast()
      ? *rex_type_.cast_
      : reinterpret_cast< ::substrait::Expression_Cast&>(::substrait::_Expression_Cast_default_instance_);
}
inline const ::substrait::Expression_Cast& Expression::cast() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.cast)
  return _internal_cast();
}
inline ::substrait::Expression_Cast* Expression::unsafe_arena_release_cast() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.cast)
  if (_internal_has_cast()) {
    clear_has_rex_type();
    ::substrait::Expression_Cast* temp = rex_type_.cast_;
    rex_type_.cast_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression::unsafe_arena_set_allocated_cast(::substrait::Expression_Cast* cast) {
  clear_rex_type();
  if (cast) {
    set_has_cast();
    rex_type_.cast_ = cast;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.cast)
}
inline ::substrait::Expression_Cast* Expression::_internal_mutable_cast() {
  if (!_internal_has_cast()) {
    clear_rex_type();
    set_has_cast();
    rex_type_.cast_ = CreateMaybeMessage< ::substrait::Expression_Cast >(GetArenaForAllocation());
  }
  return rex_type_.cast_;
}
inline ::substrait::Expression_Cast* Expression::mutable_cast() {
  ::substrait::Expression_Cast* _msg = _internal_mutable_cast();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.cast)
  return _msg;
}

// .substrait.Expression.Subquery subquery = 12 [json_name = "subquery"];
inline bool Expression::_internal_has_subquery() const {
  return rex_type_case() == kSubquery;
}
inline bool Expression::has_subquery() const {
  return _internal_has_subquery();
}
inline void Expression::set_has_subquery() {
  _oneof_case_[0] = kSubquery;
}
inline void Expression::clear_subquery() {
  if (_internal_has_subquery()) {
    if (GetArenaForAllocation() == nullptr) {
      delete rex_type_.subquery_;
    }
    clear_has_rex_type();
  }
}
inline ::substrait::Expression_Subquery* Expression::release_subquery() {
  // @@protoc_insertion_point(field_release:substrait.Expression.subquery)
  if (_internal_has_subquery()) {
    clear_has_rex_type();
      ::substrait::Expression_Subquery* temp = rex_type_.subquery_;
    if (GetArenaForAllocation() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    rex_type_.subquery_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::substrait::Expression_Subquery& Expression::_internal_subquery() const {
  return _internal_has_subquery()
      ? *rex_type_.subquery_
      : reinterpret_cast< ::substrait::Expression_Subquery&>(::substrait::_Expression_Subquery_default_instance_);
}
inline const ::substrait::Expression_Subquery& Expression::subquery() const {
  // @@protoc_insertion_point(field_get:substrait.Expression.subquery)
  return _internal_subquery();
}
inline ::substrait::Expression_Subquery* Expression::unsafe_arena_release_subquery() {
  // @@protoc_insertion_point(field_unsafe_arena_release:substrait.Expression.subquery)
  if (_internal_has_subquery()) {
    clear_has_rex_type();
    ::substrait::Expression_Subquery* temp = rex_type_.subquery_;
    rex_type_.subquery_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void Expression::unsafe_arena_set_allocated_subquery(::substrait::Expression_Subquery* subquery) {
  clear_rex_type();
  if (subquery) {
    set_has_subquery();
    rex_type_.subquery_ = subquery;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.Expression.subquery)
}
inline ::substrait::Expression_Subquery* Expression::_internal_mutable_subquery() {
  if (!_internal_has_subquery()) {
    clear_rex_type();
    set_has_subquery();
    rex_type_.subquery_ = CreateMaybeMessage< ::substrait::Expression_Subquery >(GetArenaForAllocation());
  }
  return rex_type_.subquery_;
}
inline ::substrait::Expression_Subquery* Expression::mutable_subquery() {
  ::substrait::Expression_Subquery* _msg = _internal_mutable_subquery();
  // @@protoc_insertion_point(field_mutable:substrait.Expression.subquery)
  return _msg;
}

inline bool Expression::has_rex_type() const {
  return rex_type_case() != REX_TYPE_NOT_SET;
}
inline void Expression::clear_has_rex_type() {
  _oneof_case_[0] = REX_TYPE_NOT_SET;
}
inline Expression::RexTypeCase Expression::rex_type_case() const {
  return Expression::RexTypeCase(_oneof_case_[0]);
}
// -------------------------------------------------------------------

// SortField

// .substrait.Expression expr = 1 [json_name = "expr"];
inline bool SortField::_internal_has_expr() const {
  return this != internal_default_instance() && expr_ != nullptr;
}
inline bool SortField::has_expr() const {
  return _internal_has_expr();
}
inline void SortField::clear_expr() {
  if (GetArenaForAllocation() == nullptr && expr_ != nullptr) {
    delete expr_;
  }
  expr_ = nullptr;
}
inline const ::substrait::Expression& SortField::_internal_expr() const {
  const ::substrait::Expression* p = expr_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Expression&>(
      ::substrait::_Expression_default_instance_);
}
inline const ::substrait::Expression& SortField::expr() const {
  // @@protoc_insertion_point(field_get:substrait.SortField.expr)
  return _internal_expr();
}
inline void SortField::unsafe_arena_set_allocated_expr(
    ::substrait::Expression* expr) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(expr_);
  }
  expr_ = expr;
  if (expr) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.SortField.expr)
}
inline ::substrait::Expression* SortField::release_expr() {
  
  ::substrait::Expression* temp = expr_;
  expr_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Expression* SortField::unsafe_arena_release_expr() {
  // @@protoc_insertion_point(field_release:substrait.SortField.expr)
  
  ::substrait::Expression* temp = expr_;
  expr_ = nullptr;
  return temp;
}
inline ::substrait::Expression* SortField::_internal_mutable_expr() {
  
  if (expr_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Expression>(GetArenaForAllocation());
    expr_ = p;
  }
  return expr_;
}
inline ::substrait::Expression* SortField::mutable_expr() {
  ::substrait::Expression* _msg = _internal_mutable_expr();
  // @@protoc_insertion_point(field_mutable:substrait.SortField.expr)
  return _msg;
}
inline void SortField::set_allocated_expr(::substrait::Expression* expr) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete expr_;
  }
  if (expr) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::substrait::Expression>::GetOwningArena(expr);
    if (message_arena != submessage_arena) {
      expr = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, expr, submessage_arena);
    }
    
  } else {
    
  }
  expr_ = expr;
  // @@protoc_insertion_point(field_set_allocated:substrait.SortField.expr)
}

// .substrait.SortField.SortDirection direction = 2 [json_name = "direction"];
inline bool SortField::_internal_has_direction() const {
  return sort_kind_case() == kDirection;
}
inline bool SortField::has_direction() const {
  return _internal_has_direction();
}
inline void SortField::set_has_direction() {
  _oneof_case_[0] = kDirection;
}
inline void SortField::clear_direction() {
  if (_internal_has_direction()) {
    sort_kind_.direction_ = 0;
    clear_has_sort_kind();
  }
}
inline ::substrait::SortField_SortDirection SortField::_internal_direction() const {
  if (_internal_has_direction()) {
    return static_cast< ::substrait::SortField_SortDirection >(sort_kind_.direction_);
  }
  return static_cast< ::substrait::SortField_SortDirection >(0);
}
inline ::substrait::SortField_SortDirection SortField::direction() const {
  // @@protoc_insertion_point(field_get:substrait.SortField.direction)
  return _internal_direction();
}
inline void SortField::_internal_set_direction(::substrait::SortField_SortDirection value) {
  if (!_internal_has_direction()) {
    clear_sort_kind();
    set_has_direction();
  }
  sort_kind_.direction_ = value;
}
inline void SortField::set_direction(::substrait::SortField_SortDirection value) {
  _internal_set_direction(value);
  // @@protoc_insertion_point(field_set:substrait.SortField.direction)
}

// uint32 comparison_function_reference = 3 [json_name = "comparisonFunctionReference"];
inline bool SortField::_internal_has_comparison_function_reference() const {
  return sort_kind_case() == kComparisonFunctionReference;
}
inline bool SortField::has_comparison_function_reference() const {
  return _internal_has_comparison_function_reference();
}
inline void SortField::set_has_comparison_function_reference() {
  _oneof_case_[0] = kComparisonFunctionReference;
}
inline void SortField::clear_comparison_function_reference() {
  if (_internal_has_comparison_function_reference()) {
    sort_kind_.comparison_function_reference_ = 0u;
    clear_has_sort_kind();
  }
}
inline uint32_t SortField::_internal_comparison_function_reference() const {
  if (_internal_has_comparison_function_reference()) {
    return sort_kind_.comparison_function_reference_;
  }
  return 0u;
}
inline void SortField::_internal_set_comparison_function_reference(uint32_t value) {
  if (!_internal_has_comparison_function_reference()) {
    clear_sort_kind();
    set_has_comparison_function_reference();
  }
  sort_kind_.comparison_function_reference_ = value;
}
inline uint32_t SortField::comparison_function_reference() const {
  // @@protoc_insertion_point(field_get:substrait.SortField.comparison_function_reference)
  return _internal_comparison_function_reference();
}
inline void SortField::set_comparison_function_reference(uint32_t value) {
  _internal_set_comparison_function_reference(value);
  // @@protoc_insertion_point(field_set:substrait.SortField.comparison_function_reference)
}

inline bool SortField::has_sort_kind() const {
  return sort_kind_case() != SORT_KIND_NOT_SET;
}
inline void SortField::clear_has_sort_kind() {
  _oneof_case_[0] = SORT_KIND_NOT_SET;
}
inline SortField::SortKindCase SortField::sort_kind_case() const {
  return SortField::SortKindCase(_oneof_case_[0]);
}
// -------------------------------------------------------------------

// AggregateFunction

// uint32 function_reference = 1 [json_name = "functionReference"];
inline void AggregateFunction::clear_function_reference() {
  function_reference_ = 0u;
}
inline uint32_t AggregateFunction::_internal_function_reference() const {
  return function_reference_;
}
inline uint32_t AggregateFunction::function_reference() const {
  // @@protoc_insertion_point(field_get:substrait.AggregateFunction.function_reference)
  return _internal_function_reference();
}
inline void AggregateFunction::_internal_set_function_reference(uint32_t value) {
  
  function_reference_ = value;
}
inline void AggregateFunction::set_function_reference(uint32_t value) {
  _internal_set_function_reference(value);
  // @@protoc_insertion_point(field_set:substrait.AggregateFunction.function_reference)
}

// repeated .substrait.Expression args = 2 [json_name = "args"];
inline int AggregateFunction::_internal_args_size() const {
  return args_.size();
}
inline int AggregateFunction::args_size() const {
  return _internal_args_size();
}
inline void AggregateFunction::clear_args() {
  args_.Clear();
}
inline ::substrait::Expression* AggregateFunction::mutable_args(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.AggregateFunction.args)
  return args_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >*
AggregateFunction::mutable_args() {
  // @@protoc_insertion_point(field_mutable_list:substrait.AggregateFunction.args)
  return &args_;
}
inline const ::substrait::Expression& AggregateFunction::_internal_args(int index) const {
  return args_.Get(index);
}
inline const ::substrait::Expression& AggregateFunction::args(int index) const {
  // @@protoc_insertion_point(field_get:substrait.AggregateFunction.args)
  return _internal_args(index);
}
inline ::substrait::Expression* AggregateFunction::_internal_add_args() {
  return args_.Add();
}
inline ::substrait::Expression* AggregateFunction::add_args() {
  ::substrait::Expression* _add = _internal_add_args();
  // @@protoc_insertion_point(field_add:substrait.AggregateFunction.args)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::Expression >&
AggregateFunction::args() const {
  // @@protoc_insertion_point(field_list:substrait.AggregateFunction.args)
  return args_;
}

// repeated .substrait.SortField sorts = 3 [json_name = "sorts"];
inline int AggregateFunction::_internal_sorts_size() const {
  return sorts_.size();
}
inline int AggregateFunction::sorts_size() const {
  return _internal_sorts_size();
}
inline void AggregateFunction::clear_sorts() {
  sorts_.Clear();
}
inline ::substrait::SortField* AggregateFunction::mutable_sorts(int index) {
  // @@protoc_insertion_point(field_mutable:substrait.AggregateFunction.sorts)
  return sorts_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::SortField >*
AggregateFunction::mutable_sorts() {
  // @@protoc_insertion_point(field_mutable_list:substrait.AggregateFunction.sorts)
  return &sorts_;
}
inline const ::substrait::SortField& AggregateFunction::_internal_sorts(int index) const {
  return sorts_.Get(index);
}
inline const ::substrait::SortField& AggregateFunction::sorts(int index) const {
  // @@protoc_insertion_point(field_get:substrait.AggregateFunction.sorts)
  return _internal_sorts(index);
}
inline ::substrait::SortField* AggregateFunction::_internal_add_sorts() {
  return sorts_.Add();
}
inline ::substrait::SortField* AggregateFunction::add_sorts() {
  ::substrait::SortField* _add = _internal_add_sorts();
  // @@protoc_insertion_point(field_add:substrait.AggregateFunction.sorts)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::substrait::SortField >&
AggregateFunction::sorts() const {
  // @@protoc_insertion_point(field_list:substrait.AggregateFunction.sorts)
  return sorts_;
}

// .substrait.AggregationPhase phase = 4 [json_name = "phase"];
inline void AggregateFunction::clear_phase() {
  phase_ = 0;
}
inline ::substrait::AggregationPhase AggregateFunction::_internal_phase() const {
  return static_cast< ::substrait::AggregationPhase >(phase_);
}
inline ::substrait::AggregationPhase AggregateFunction::phase() const {
  // @@protoc_insertion_point(field_get:substrait.AggregateFunction.phase)
  return _internal_phase();
}
inline void AggregateFunction::_internal_set_phase(::substrait::AggregationPhase value) {
  
  phase_ = value;
}
inline void AggregateFunction::set_phase(::substrait::AggregationPhase value) {
  _internal_set_phase(value);
  // @@protoc_insertion_point(field_set:substrait.AggregateFunction.phase)
}

// .substrait.Type output_type = 5 [json_name = "outputType"];
inline bool AggregateFunction::_internal_has_output_type() const {
  return this != internal_default_instance() && output_type_ != nullptr;
}
inline bool AggregateFunction::has_output_type() const {
  return _internal_has_output_type();
}
inline const ::substrait::Type& AggregateFunction::_internal_output_type() const {
  const ::substrait::Type* p = output_type_;
  return p != nullptr ? *p : reinterpret_cast<const ::substrait::Type&>(
      ::substrait::_Type_default_instance_);
}
inline const ::substrait::Type& AggregateFunction::output_type() const {
  // @@protoc_insertion_point(field_get:substrait.AggregateFunction.output_type)
  return _internal_output_type();
}
inline void AggregateFunction::unsafe_arena_set_allocated_output_type(
    ::substrait::Type* output_type) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(output_type_);
  }
  output_type_ = output_type;
  if (output_type) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.AggregateFunction.output_type)
}
inline ::substrait::Type* AggregateFunction::release_output_type() {
  
  ::substrait::Type* temp = output_type_;
  output_type_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::substrait::Type* AggregateFunction::unsafe_arena_release_output_type() {
  // @@protoc_insertion_point(field_release:substrait.AggregateFunction.output_type)
  
  ::substrait::Type* temp = output_type_;
  output_type_ = nullptr;
  return temp;
}
inline ::substrait::Type* AggregateFunction::_internal_mutable_output_type() {
  
  if (output_type_ == nullptr) {
    auto* p = CreateMaybeMessage<::substrait::Type>(GetArenaForAllocation());
    output_type_ = p;
  }
  return output_type_;
}
inline ::substrait::Type* AggregateFunction::mutable_output_type() {
  ::substrait::Type* _msg = _internal_mutable_output_type();
  // @@protoc_insertion_point(field_mutable:substrait.AggregateFunction.output_type)
  return _msg;
}
inline void AggregateFunction::set_allocated_output_type(::substrait::Type* output_type) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(output_type_);
  }
  if (output_type) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(output_type));
    if (message_arena != submessage_arena) {
      output_type = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, output_type, submessage_arena);
    }
    
  } else {
    
  }
  output_type_ = output_type;
  // @@protoc_insertion_point(field_set_allocated:substrait.AggregateFunction.output_type)
}

#ifdef __GNUC__
  #pragma GCC diagnostic pop
#endif  // __GNUC__
// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------


// @@protoc_insertion_point(namespace_scope)

}  // namespace substrait

PROTOBUF_NAMESPACE_OPEN

template <> struct is_proto_enum< ::substrait::ReadRel_LocalFiles_FileOrFiles_FileFormat> : ::std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::substrait::ReadRel_LocalFiles_FileOrFiles_FileFormat>() {
  return ::substrait::ReadRel_LocalFiles_FileOrFiles_FileFormat_descriptor();
}
template <> struct is_proto_enum< ::substrait::JoinRel_JoinType> : ::std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::substrait::JoinRel_JoinType>() {
  return ::substrait::JoinRel_JoinType_descriptor();
}
template <> struct is_proto_enum< ::substrait::SetRel_SetOp> : ::std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::substrait::SetRel_SetOp>() {
  return ::substrait::SetRel_SetOp_descriptor();
}
template <> struct is_proto_enum< ::substrait::Expression_Subquery_SetPredicate_PredicateOp> : ::std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::substrait::Expression_Subquery_SetPredicate_PredicateOp>() {
  return ::substrait::Expression_Subquery_SetPredicate_PredicateOp_descriptor();
}
template <> struct is_proto_enum< ::substrait::Expression_Subquery_SetComparison_ComparisonOp> : ::std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::substrait::Expression_Subquery_SetComparison_ComparisonOp>() {
  return ::substrait::Expression_Subquery_SetComparison_ComparisonOp_descriptor();
}
template <> struct is_proto_enum< ::substrait::Expression_Subquery_SetComparison_ReductionOp> : ::std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::substrait::Expression_Subquery_SetComparison_ReductionOp>() {
  return ::substrait::Expression_Subquery_SetComparison_ReductionOp_descriptor();
}
template <> struct is_proto_enum< ::substrait::SortField_SortDirection> : ::std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::substrait::SortField_SortDirection>() {
  return ::substrait::SortField_SortDirection_descriptor();
}
template <> struct is_proto_enum< ::substrait::AggregationPhase> : ::std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::substrait::AggregationPhase>() {
  return ::substrait::AggregationPhase_descriptor();
}

PROTOBUF_NAMESPACE_CLOSE

// @@protoc_insertion_point(global_scope)

#include <google/protobuf/port_undef.inc>
#endif  // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_substrait_2falgebra_2eproto
