text: // Generated by the protocol buffer compiler.  DO NOT EDIT!
  // source: substrait/extensions/extensions.proto
  
  #ifndef GOOGLE_PROTOBUF_INCLUDED_substrait_2fextensions_2fextensions_2eproto
  #define GOOGLE_PROTOBUF_INCLUDED_substrait_2fextensions_2fextensions_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 3019004 < 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_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/unknown_field_set.h>
  #include <google/protobuf/any.pb.h>
  // @@protoc_insertion_point(includes)
  #include <google/protobuf/port_def.inc>
  #define PROTOBUF_INTERNAL_EXPORT_substrait_2fextensions_2fextensions_2eproto
  PROTOBUF_NAMESPACE_OPEN
  namespace internal {
  class AnyMetadata;
  }  // namespace internal
  PROTOBUF_NAMESPACE_CLOSE
  
  // Internal implementation detail -- do not use these members.
  struct TableStruct_substrait_2fextensions_2fextensions_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[6]
      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_2fextensions_2fextensions_2eproto;
  namespace substrait {
  namespace extensions {
  class AdvancedExtension;
  struct AdvancedExtensionDefaultTypeInternal;
  extern AdvancedExtensionDefaultTypeInternal _AdvancedExtension_default_instance_;
  class SimpleExtensionDeclaration;
  struct SimpleExtensionDeclarationDefaultTypeInternal;
  extern SimpleExtensionDeclarationDefaultTypeInternal _SimpleExtensionDeclaration_default_instance_;
  class SimpleExtensionDeclaration_ExtensionFunction;
  struct SimpleExtensionDeclaration_ExtensionFunctionDefaultTypeInternal;
  extern SimpleExtensionDeclaration_ExtensionFunctionDefaultTypeInternal _SimpleExtensionDeclaration_ExtensionFunction_default_instance_;
  class SimpleExtensionDeclaration_ExtensionType;
  struct SimpleExtensionDeclaration_ExtensionTypeDefaultTypeInternal;
  extern SimpleExtensionDeclaration_ExtensionTypeDefaultTypeInternal _SimpleExtensionDeclaration_ExtensionType_default_instance_;
  class SimpleExtensionDeclaration_ExtensionTypeVariation;
  struct SimpleExtensionDeclaration_ExtensionTypeVariationDefaultTypeInternal;
  extern SimpleExtensionDeclaration_ExtensionTypeVariationDefaultTypeInternal _SimpleExtensionDeclaration_ExtensionTypeVariation_default_instance_;
  class SimpleExtensionURI;
  struct SimpleExtensionURIDefaultTypeInternal;
  extern SimpleExtensionURIDefaultTypeInternal _SimpleExtensionURI_default_instance_;
  }  // namespace extensions
  }  // namespace substrait
  PROTOBUF_NAMESPACE_OPEN
  template<> ::substrait::extensions::AdvancedExtension* Arena::CreateMaybeMessage<::substrait::extensions::AdvancedExtension>(Arena*);
  template<> ::substrait::extensions::SimpleExtensionDeclaration* Arena::CreateMaybeMessage<::substrait::extensions::SimpleExtensionDeclaration>(Arena*);
  template<> ::substrait::extensions::SimpleExtensionDeclaration_ExtensionFunction* Arena::CreateMaybeMessage<::substrait::extensions::SimpleExtensionDeclaration_ExtensionFunction>(Arena*);
  template<> ::substrait::extensions::SimpleExtensionDeclaration_ExtensionType* Arena::CreateMaybeMessage<::substrait::extensions::SimpleExtensionDeclaration_ExtensionType>(Arena*);
  template<> ::substrait::extensions::SimpleExtensionDeclaration_ExtensionTypeVariation* Arena::CreateMaybeMessage<::substrait::extensions::SimpleExtensionDeclaration_ExtensionTypeVariation>(Arena*);
  template<> ::substrait::extensions::SimpleExtensionURI* Arena::CreateMaybeMessage<::substrait::extensions::SimpleExtensionURI>(Arena*);
  PROTOBUF_NAMESPACE_CLOSE
  namespace substrait {
  namespace extensions {
  
  // ===================================================================
  
  class SimpleExtensionURI final :
      public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.extensions.SimpleExtensionURI) */ {
   public:
    inline SimpleExtensionURI() : SimpleExtensionURI(nullptr) {}
    ~SimpleExtensionURI() override;
    explicit constexpr SimpleExtensionURI(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
  
    SimpleExtensionURI(const SimpleExtensionURI& from);
    SimpleExtensionURI(SimpleExtensionURI&& from) noexcept
      : SimpleExtensionURI() {
      *this = ::std::move(from);
    }
  
    inline SimpleExtensionURI& operator=(const SimpleExtensionURI& from) {
      CopyFrom(from);
      return *this;
    }
    inline SimpleExtensionURI& operator=(SimpleExtensionURI&& 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 SimpleExtensionURI& default_instance() {
      return *internal_default_instance();
    }
    static inline const SimpleExtensionURI* internal_default_instance() {
      return reinterpret_cast<const SimpleExtensionURI*>(
                 &_SimpleExtensionURI_default_instance_);
    }
    static constexpr int kIndexInFileMessages =
      0;
  
    friend void swap(SimpleExtensionURI& a, SimpleExtensionURI& b) {
      a.Swap(&b);
    }
    inline void Swap(SimpleExtensionURI* 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(SimpleExtensionURI* other) {
      if (other == this) return;
      GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
      InternalSwap(other);
    }
  
    // implements Message ----------------------------------------------
  
    SimpleExtensionURI* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
      return CreateMaybeMessage<SimpleExtensionURI>(arena);
    }
    using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
    void CopyFrom(const SimpleExtensionURI& from);
    using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
    void MergeFrom(const SimpleExtensionURI& 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(SimpleExtensionURI* other);
  
    private:
    friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
    static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
      return "substrait.extensions.SimpleExtensionURI";
    }
    protected:
    explicit SimpleExtensionURI(::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 {
      kUriFieldNumber = 2,
      kExtensionUriAnchorFieldNumber = 1,
    };
    // string uri = 2;
    void clear_uri();
    const std::string& uri() const;
    template <typename ArgT0 = const std::string&, typename... ArgT>
    void set_uri(ArgT0&& arg0, ArgT... args);
    std::string* mutable_uri();
    PROTOBUF_NODISCARD std::string* release_uri();
    void set_allocated_uri(std::string* uri);
    private:
    const std::string& _internal_uri() const;
    inline PROTOBUF_ALWAYS_INLINE void _internal_set_uri(const std::string& value);
    std::string* _internal_mutable_uri();
    public:
  
    // uint32 extension_uri_anchor = 1;
    void clear_extension_uri_anchor();
    uint32_t extension_uri_anchor() const;
    void set_extension_uri_anchor(uint32_t value);
    private:
    uint32_t _internal_extension_uri_anchor() const;
    void _internal_set_extension_uri_anchor(uint32_t value);
    public:
  
    // @@protoc_insertion_point(class_scope:substrait.extensions.SimpleExtensionURI)
   private:
    class _Internal;
  
    template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
    typedef void InternalArenaConstructable_;
    typedef void DestructorSkippable_;
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr uri_;
    uint32_t extension_uri_anchor_;
    mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
    friend struct ::TableStruct_substrait_2fextensions_2fextensions_2eproto;
  };
  // -------------------------------------------------------------------
  
  class SimpleExtensionDeclaration_ExtensionType final :
      public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.extensions.SimpleExtensionDeclaration.ExtensionType) */ {
   public:
    inline SimpleExtensionDeclaration_ExtensionType() : SimpleExtensionDeclaration_ExtensionType(nullptr) {}
    ~SimpleExtensionDeclaration_ExtensionType() override;
    explicit constexpr SimpleExtensionDeclaration_ExtensionType(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
  
    SimpleExtensionDeclaration_ExtensionType(const SimpleExtensionDeclaration_ExtensionType& from);
    SimpleExtensionDeclaration_ExtensionType(SimpleExtensionDeclaration_ExtensionType&& from) noexcept
      : SimpleExtensionDeclaration_ExtensionType() {
      *this = ::std::move(from);
    }
  
    inline SimpleExtensionDeclaration_ExtensionType& operator=(const SimpleExtensionDeclaration_ExtensionType& from) {
      CopyFrom(from);
      return *this;
    }
    inline SimpleExtensionDeclaration_ExtensionType& operator=(SimpleExtensionDeclaration_ExtensionType&& 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 SimpleExtensionDeclaration_ExtensionType& default_instance() {
      return *internal_default_instance();
    }
    static inline const SimpleExtensionDeclaration_ExtensionType* internal_default_instance() {
      return reinterpret_cast<const SimpleExtensionDeclaration_ExtensionType*>(
                 &_SimpleExtensionDeclaration_ExtensionType_default_instance_);
    }
    static constexpr int kIndexInFileMessages =
      1;
  
    friend void swap(SimpleExtensionDeclaration_ExtensionType& a, SimpleExtensionDeclaration_ExtensionType& b) {
      a.Swap(&b);
    }
    inline void Swap(SimpleExtensionDeclaration_ExtensionType* 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(SimpleExtensionDeclaration_ExtensionType* other) {
      if (other == this) return;
      GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
      InternalSwap(other);
    }
  
    // implements Message ----------------------------------------------
  
    SimpleExtensionDeclaration_ExtensionType* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
      return CreateMaybeMessage<SimpleExtensionDeclaration_ExtensionType>(arena);
    }
    using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
    void CopyFrom(const SimpleExtensionDeclaration_ExtensionType& from);
    using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
    void MergeFrom(const SimpleExtensionDeclaration_ExtensionType& 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(SimpleExtensionDeclaration_ExtensionType* other);
  
    private:
    friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
    static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
      return "substrait.extensions.SimpleExtensionDeclaration.ExtensionType";
    }
    protected:
    explicit SimpleExtensionDeclaration_ExtensionType(::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 {
      kNameFieldNumber = 3,
      kExtensionUriReferenceFieldNumber = 1,
      kTypeAnchorFieldNumber = 2,
    };
    // string name = 3;
    void clear_name();
    const std::string& name() const;
    template <typename ArgT0 = const std::string&, typename... ArgT>
    void set_name(ArgT0&& arg0, ArgT... args);
    std::string* mutable_name();
    PROTOBUF_NODISCARD std::string* release_name();
    void set_allocated_name(std::string* name);
    private:
    const std::string& _internal_name() const;
    inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value);
    std::string* _internal_mutable_name();
    public:
  
    // uint32 extension_uri_reference = 1;
    void clear_extension_uri_reference();
    uint32_t extension_uri_reference() const;
    void set_extension_uri_reference(uint32_t value);
    private:
    uint32_t _internal_extension_uri_reference() const;
    void _internal_set_extension_uri_reference(uint32_t value);
    public:
  
    // uint32 type_anchor = 2;
    void clear_type_anchor();
    uint32_t type_anchor() const;
    void set_type_anchor(uint32_t value);
    private:
    uint32_t _internal_type_anchor() const;
    void _internal_set_type_anchor(uint32_t value);
    public:
  
    // @@protoc_insertion_point(class_scope:substrait.extensions.SimpleExtensionDeclaration.ExtensionType)
   private:
    class _Internal;
  
    template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
    typedef void InternalArenaConstructable_;
    typedef void DestructorSkippable_;
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_;
    uint32_t extension_uri_reference_;
    uint32_t type_anchor_;
    mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
    friend struct ::TableStruct_substrait_2fextensions_2fextensions_2eproto;
  };
  // -------------------------------------------------------------------
  
  class SimpleExtensionDeclaration_ExtensionTypeVariation final :
      public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.extensions.SimpleExtensionDeclaration.ExtensionTypeVariation) */ {
   public:
    inline SimpleExtensionDeclaration_ExtensionTypeVariation() : SimpleExtensionDeclaration_ExtensionTypeVariation(nullptr) {}
    ~SimpleExtensionDeclaration_ExtensionTypeVariation() override;
    explicit constexpr SimpleExtensionDeclaration_ExtensionTypeVariation(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
  
    SimpleExtensionDeclaration_ExtensionTypeVariation(const SimpleExtensionDeclaration_ExtensionTypeVariation& from);
    SimpleExtensionDeclaration_ExtensionTypeVariation(SimpleExtensionDeclaration_ExtensionTypeVariation&& from) noexcept
      : SimpleExtensionDeclaration_ExtensionTypeVariation() {
      *this = ::std::move(from);
    }
  
    inline SimpleExtensionDeclaration_ExtensionTypeVariation& operator=(const SimpleExtensionDeclaration_ExtensionTypeVariation& from) {
      CopyFrom(from);
      return *this;
    }
    inline SimpleExtensionDeclaration_ExtensionTypeVariation& operator=(SimpleExtensionDeclaration_ExtensionTypeVariation&& 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 SimpleExtensionDeclaration_ExtensionTypeVariation& default_instance() {
      return *internal_default_instance();
    }
    static inline const SimpleExtensionDeclaration_ExtensionTypeVariation* internal_default_instance() {
      return reinterpret_cast<const SimpleExtensionDeclaration_ExtensionTypeVariation*>(
                 &_SimpleExtensionDeclaration_ExtensionTypeVariation_default_instance_);
    }
    static constexpr int kIndexInFileMessages =
      2;
  
    friend void swap(SimpleExtensionDeclaration_ExtensionTypeVariation& a, SimpleExtensionDeclaration_ExtensionTypeVariation& b) {
      a.Swap(&b);
    }
    inline void Swap(SimpleExtensionDeclaration_ExtensionTypeVariation* 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(SimpleExtensionDeclaration_ExtensionTypeVariation* other) {
      if (other == this) return;
      GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
      InternalSwap(other);
    }
  
    // implements Message ----------------------------------------------
  
    SimpleExtensionDeclaration_ExtensionTypeVariation* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
      return CreateMaybeMessage<SimpleExtensionDeclaration_ExtensionTypeVariation>(arena);
    }
    using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
    void CopyFrom(const SimpleExtensionDeclaration_ExtensionTypeVariation& from);
    using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
    void MergeFrom(const SimpleExtensionDeclaration_ExtensionTypeVariation& 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(SimpleExtensionDeclaration_ExtensionTypeVariation* other);
  
    private:
    friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
    static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
      return "substrait.extensions.SimpleExtensionDeclaration.ExtensionTypeVariation";
    }
    protected:
    explicit SimpleExtensionDeclaration_ExtensionTypeVariation(::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 {
      kNameFieldNumber = 3,
      kExtensionUriReferenceFieldNumber = 1,
      kTypeVariationAnchorFieldNumber = 2,
    };
    // string name = 3;
    void clear_name();
    const std::string& name() const;
    template <typename ArgT0 = const std::string&, typename... ArgT>
    void set_name(ArgT0&& arg0, ArgT... args);
    std::string* mutable_name();
    PROTOBUF_NODISCARD std::string* release_name();
    void set_allocated_name(std::string* name);
    private:
    const std::string& _internal_name() const;
    inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value);
    std::string* _internal_mutable_name();
    public:
  
    // uint32 extension_uri_reference = 1;
    void clear_extension_uri_reference();
    uint32_t extension_uri_reference() const;
    void set_extension_uri_reference(uint32_t value);
    private:
    uint32_t _internal_extension_uri_reference() const;
    void _internal_set_extension_uri_reference(uint32_t value);
    public:
  
    // uint32 type_variation_anchor = 2;
    void clear_type_variation_anchor();
    uint32_t type_variation_anchor() const;
    void set_type_variation_anchor(uint32_t value);
    private:
    uint32_t _internal_type_variation_anchor() const;
    void _internal_set_type_variation_anchor(uint32_t value);
    public:
  
    // @@protoc_insertion_point(class_scope:substrait.extensions.SimpleExtensionDeclaration.ExtensionTypeVariation)
   private:
    class _Internal;
  
    template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
    typedef void InternalArenaConstructable_;
    typedef void DestructorSkippable_;
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_;
    uint32_t extension_uri_reference_;
    uint32_t type_variation_anchor_;
    mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
    friend struct ::TableStruct_substrait_2fextensions_2fextensions_2eproto;
  };
  // -------------------------------------------------------------------
  
  class SimpleExtensionDeclaration_ExtensionFunction final :
      public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.extensions.SimpleExtensionDeclaration.ExtensionFunction) */ {
   public:
    inline SimpleExtensionDeclaration_ExtensionFunction() : SimpleExtensionDeclaration_ExtensionFunction(nullptr) {}
    ~SimpleExtensionDeclaration_ExtensionFunction() override;
    explicit constexpr SimpleExtensionDeclaration_ExtensionFunction(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
  
    SimpleExtensionDeclaration_ExtensionFunction(const SimpleExtensionDeclaration_ExtensionFunction& from);
    SimpleExtensionDeclaration_ExtensionFunction(SimpleExtensionDeclaration_ExtensionFunction&& from) noexcept
      : SimpleExtensionDeclaration_ExtensionFunction() {
      *this = ::std::move(from);
    }
  
    inline SimpleExtensionDeclaration_ExtensionFunction& operator=(const SimpleExtensionDeclaration_ExtensionFunction& from) {
      CopyFrom(from);
      return *this;
    }
    inline SimpleExtensionDeclaration_ExtensionFunction& operator=(SimpleExtensionDeclaration_ExtensionFunction&& 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 SimpleExtensionDeclaration_ExtensionFunction& default_instance() {
      return *internal_default_instance();
    }
    static inline const SimpleExtensionDeclaration_ExtensionFunction* internal_default_instance() {
      return reinterpret_cast<const SimpleExtensionDeclaration_ExtensionFunction*>(
                 &_SimpleExtensionDeclaration_ExtensionFunction_default_instance_);
    }
    static constexpr int kIndexInFileMessages =
      3;
  
    friend void swap(SimpleExtensionDeclaration_ExtensionFunction& a, SimpleExtensionDeclaration_ExtensionFunction& b) {
      a.Swap(&b);
    }
    inline void Swap(SimpleExtensionDeclaration_ExtensionFunction* 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(SimpleExtensionDeclaration_ExtensionFunction* other) {
      if (other == this) return;
      GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
      InternalSwap(other);
    }
  
    // implements Message ----------------------------------------------
  
    SimpleExtensionDeclaration_ExtensionFunction* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
      return CreateMaybeMessage<SimpleExtensionDeclaration_ExtensionFunction>(arena);
    }
    using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
    void CopyFrom(const SimpleExtensionDeclaration_ExtensionFunction& from);
    using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
    void MergeFrom(const SimpleExtensionDeclaration_ExtensionFunction& 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(SimpleExtensionDeclaration_ExtensionFunction* other);
  
    private:
    friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
    static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
      return "substrait.extensions.SimpleExtensionDeclaration.ExtensionFunction";
    }
    protected:
    explicit SimpleExtensionDeclaration_ExtensionFunction(::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 {
      kNameFieldNumber = 3,
      kExtensionUriReferenceFieldNumber = 1,
      kFunctionAnchorFieldNumber = 2,
    };
    // string name = 3;
    void clear_name();
    const std::string& name() const;
    template <typename ArgT0 = const std::string&, typename... ArgT>
    void set_name(ArgT0&& arg0, ArgT... args);
    std::string* mutable_name();
    PROTOBUF_NODISCARD std::string* release_name();
    void set_allocated_name(std::string* name);
    private:
    const std::string& _internal_name() const;
    inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value);
    std::string* _internal_mutable_name();
    public:
  
    // uint32 extension_uri_reference = 1;
    void clear_extension_uri_reference();
    uint32_t extension_uri_reference() const;
    void set_extension_uri_reference(uint32_t value);
    private:
    uint32_t _internal_extension_uri_reference() const;
    void _internal_set_extension_uri_reference(uint32_t value);
    public:
  
    // uint32 function_anchor = 2;
    void clear_function_anchor();
    uint32_t function_anchor() const;
    void set_function_anchor(uint32_t value);
    private:
    uint32_t _internal_function_anchor() const;
    void _internal_set_function_anchor(uint32_t value);
    public:
  
    // @@protoc_insertion_point(class_scope:substrait.extensions.SimpleExtensionDeclaration.ExtensionFunction)
   private:
    class _Internal;
  
    template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
    typedef void InternalArenaConstructable_;
    typedef void DestructorSkippable_;
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_;
    uint32_t extension_uri_reference_;
    uint32_t function_anchor_;
    mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
    friend struct ::TableStruct_substrait_2fextensions_2fextensions_2eproto;
  };
  // -------------------------------------------------------------------
  
  class SimpleExtensionDeclaration final :
      public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.extensions.SimpleExtensionDeclaration) */ {
   public:
    inline SimpleExtensionDeclaration() : SimpleExtensionDeclaration(nullptr) {}
    ~SimpleExtensionDeclaration() override;
    explicit constexpr SimpleExtensionDeclaration(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
  
    SimpleExtensionDeclaration(const SimpleExtensionDeclaration& from);
    SimpleExtensionDeclaration(SimpleExtensionDeclaration&& from) noexcept
      : SimpleExtensionDeclaration() {
      *this = ::std::move(from);
    }
  
    inline SimpleExtensionDeclaration& operator=(const SimpleExtensionDeclaration& from) {
      CopyFrom(from);
      return *this;
    }
    inline SimpleExtensionDeclaration& operator=(SimpleExtensionDeclaration&& 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 SimpleExtensionDeclaration& default_instance() {
      return *internal_default_instance();
    }
    enum MappingTypeCase {
      kExtensionType = 1,
      kExtensionTypeVariation = 2,
      kExtensionFunction = 3,
      MAPPING_TYPE_NOT_SET = 0,
    };
  
    static inline const SimpleExtensionDeclaration* internal_default_instance() {
      return reinterpret_cast<const SimpleExtensionDeclaration*>(
                 &_SimpleExtensionDeclaration_default_instance_);
    }
    static constexpr int kIndexInFileMessages =
      4;
  
    friend void swap(SimpleExtensionDeclaration& a, SimpleExtensionDeclaration& b) {
      a.Swap(&b);
    }
    inline void Swap(SimpleExtensionDeclaration* 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(SimpleExtensionDeclaration* other) {
      if (other == this) return;
      GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
      InternalSwap(other);
    }
  
    // implements Message ----------------------------------------------
  
    SimpleExtensionDeclaration* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
      return CreateMaybeMessage<SimpleExtensionDeclaration>(arena);
    }
    using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
    void CopyFrom(const SimpleExtensionDeclaration& from);
    using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
    void MergeFrom(const SimpleExtensionDeclaration& 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(SimpleExtensionDeclaration* other);
  
    private:
    friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
    static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
      return "substrait.extensions.SimpleExtensionDeclaration";
    }
    protected:
    explicit SimpleExtensionDeclaration(::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 SimpleExtensionDeclaration_ExtensionType ExtensionType;
    typedef SimpleExtensionDeclaration_ExtensionTypeVariation ExtensionTypeVariation;
    typedef SimpleExtensionDeclaration_ExtensionFunction ExtensionFunction;
  
    // accessors -------------------------------------------------------
  
    enum : int {
      kExtensionTypeFieldNumber = 1,
      kExtensionTypeVariationFieldNumber = 2,
      kExtensionFunctionFieldNumber = 3,
    };
    // .substrait.extensions.SimpleExtensionDeclaration.ExtensionType extension_type = 1;
    bool has_extension_type() const;
    private:
    bool _internal_has_extension_type() const;
    public:
    void clear_extension_type();
    const ::substrait::extensions::SimpleExtensionDeclaration_ExtensionType& extension_type() const;
    PROTOBUF_NODISCARD ::substrait::extensions::SimpleExtensionDeclaration_ExtensionType* release_extension_type();
    ::substrait::extensions::SimpleExtensionDeclaration_ExtensionType* mutable_extension_type();
    void set_allocated_extension_type(::substrait::extensions::SimpleExtensionDeclaration_ExtensionType* extension_type);
    private:
    const ::substrait::extensions::SimpleExtensionDeclaration_ExtensionType& _internal_extension_type() const;
    ::substrait::extensions::SimpleExtensionDeclaration_ExtensionType* _internal_mutable_extension_type();
    public:
    void unsafe_arena_set_allocated_extension_type(
        ::substrait::extensions::SimpleExtensionDeclaration_ExtensionType* extension_type);
    ::substrait::extensions::SimpleExtensionDeclaration_ExtensionType* unsafe_arena_release_extension_type();
  
    // .substrait.extensions.SimpleExtensionDeclaration.ExtensionTypeVariation extension_type_variation = 2;
    bool has_extension_type_variation() const;
    private:
    bool _internal_has_extension_type_variation() const;
    public:
    void clear_extension_type_variation();
    const ::substrait::extensions::SimpleExtensionDeclaration_ExtensionTypeVariation& extension_type_variation() const;
    PROTOBUF_NODISCARD ::substrait::extensions::SimpleExtensionDeclaration_ExtensionTypeVariation* release_extension_type_variation();
    ::substrait::extensions::SimpleExtensionDeclaration_ExtensionTypeVariation* mutable_extension_type_variation();
    void set_allocated_extension_type_variation(::substrait::extensions::SimpleExtensionDeclaration_ExtensionTypeVariation* extension_type_variation);
    private:
    const ::substrait::extensions::SimpleExtensionDeclaration_ExtensionTypeVariation& _internal_extension_type_variation() const;
    ::substrait::extensions::SimpleExtensionDeclaration_ExtensionTypeVariation* _internal_mutable_extension_type_variation();
    public:
    void unsafe_arena_set_allocated_extension_type_variation(
        ::substrait::extensions::SimpleExtensionDeclaration_ExtensionTypeVariation* extension_type_variation);
    ::substrait::extensions::SimpleExtensionDeclaration_ExtensionTypeVariation* unsafe_arena_release_extension_type_variation();
  
    // .substrait.extensions.SimpleExtensionDeclaration.ExtensionFunction extension_function = 3;
    bool has_extension_function() const;
    private:
    bool _internal_has_extension_function() const;
    public:
    void clear_extension_function();
    const ::substrait::extensions::SimpleExtensionDeclaration_ExtensionFunction& extension_function() const;
    PROTOBUF_NODISCARD ::substrait::extensions::SimpleExtensionDeclaration_ExtensionFunction* release_extension_function();
    ::substrait::extensions::SimpleExtensionDeclaration_ExtensionFunction* mutable_extension_function();
    void set_allocated_extension_function(::substrait::extensions::SimpleExtensionDeclaration_ExtensionFunction* extension_function);
    private:
    const ::substrait::extensions::SimpleExtensionDeclaration_ExtensionFunction& _internal_extension_function() const;
    ::substrait::extensions::SimpleExtensionDeclaration_ExtensionFunction* _internal_mutable_extension_function();
    public:
    void unsafe_arena_set_allocated_extension_function(
        ::substrait::extensions::SimpleExtensionDeclaration_ExtensionFunction* extension_function);
    ::substrait::extensions::SimpleExtensionDeclaration_ExtensionFunction* unsafe_arena_release_extension_function();
  
    void clear_mapping_type();
    MappingTypeCase mapping_type_case() const;
    // @@protoc_insertion_point(class_scope:substrait.extensions.SimpleExtensionDeclaration)
   private:
    class _Internal;
    void set_has_extension_type();
    void set_has_extension_type_variation();
    void set_has_extension_function();
  
    inline bool has_mapping_type() const;
    inline void clear_has_mapping_type();
  
    template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
    typedef void InternalArenaConstructable_;
    typedef void DestructorSkippable_;
    union MappingTypeUnion {
      constexpr MappingTypeUnion() : _constinit_{} {}
        ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized _constinit_;
      ::substrait::extensions::SimpleExtensionDeclaration_ExtensionType* extension_type_;
      ::substrait::extensions::SimpleExtensionDeclaration_ExtensionTypeVariation* extension_type_variation_;
      ::substrait::extensions::SimpleExtensionDeclaration_ExtensionFunction* extension_function_;
    } mapping_type_;
    mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
    uint32_t _oneof_case_[1];
  
    friend struct ::TableStruct_substrait_2fextensions_2fextensions_2eproto;
  };
  // -------------------------------------------------------------------
  
  class AdvancedExtension final :
      public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:substrait.extensions.AdvancedExtension) */ {
   public:
    inline AdvancedExtension() : AdvancedExtension(nullptr) {}
    ~AdvancedExtension() override;
    explicit constexpr AdvancedExtension(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
  
    AdvancedExtension(const AdvancedExtension& from);
    AdvancedExtension(AdvancedExtension&& from) noexcept
      : AdvancedExtension() {
      *this = ::std::move(from);
    }
  
    inline AdvancedExtension& operator=(const AdvancedExtension& from) {
      CopyFrom(from);
      return *this;
    }
    inline AdvancedExtension& operator=(AdvancedExtension&& 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 AdvancedExtension& default_instance() {
      return *internal_default_instance();
    }
    static inline const AdvancedExtension* internal_default_instance() {
      return reinterpret_cast<const AdvancedExtension*>(
                 &_AdvancedExtension_default_instance_);
    }
    static constexpr int kIndexInFileMessages =
      5;
  
    friend void swap(AdvancedExtension& a, AdvancedExtension& b) {
      a.Swap(&b);
    }
    inline void Swap(AdvancedExtension* 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(AdvancedExtension* other) {
      if (other == this) return;
      GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
      InternalSwap(other);
    }
  
    // implements Message ----------------------------------------------
  
    AdvancedExtension* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
      return CreateMaybeMessage<AdvancedExtension>(arena);
    }
    using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
    void CopyFrom(const AdvancedExtension& from);
    using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
    void MergeFrom(const AdvancedExtension& 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(AdvancedExtension* other);
  
    private:
    friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
    static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
      return "substrait.extensions.AdvancedExtension";
    }
    protected:
    explicit AdvancedExtension(::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 {
      kOptimizationFieldNumber = 1,
      kEnhancementFieldNumber = 2,
    };
    // .google.protobuf.Any optimization = 1;
    bool has_optimization() const;
    private:
    bool _internal_has_optimization() const;
    public:
    void clear_optimization();
    const ::PROTOBUF_NAMESPACE_ID::Any& optimization() const;
    PROTOBUF_NODISCARD ::PROTOBUF_NAMESPACE_ID::Any* release_optimization();
    ::PROTOBUF_NAMESPACE_ID::Any* mutable_optimization();
    void set_allocated_optimization(::PROTOBUF_NAMESPACE_ID::Any* optimization);
    private:
    const ::PROTOBUF_NAMESPACE_ID::Any& _internal_optimization() const;
    ::PROTOBUF_NAMESPACE_ID::Any* _internal_mutable_optimization();
    public:
    void unsafe_arena_set_allocated_optimization(
        ::PROTOBUF_NAMESPACE_ID::Any* optimization);
    ::PROTOBUF_NAMESPACE_ID::Any* unsafe_arena_release_optimization();
  
    // .google.protobuf.Any enhancement = 2;
    bool has_enhancement() const;
    private:
    bool _internal_has_enhancement() const;
    public:
    void clear_enhancement();
    const ::PROTOBUF_NAMESPACE_ID::Any& enhancement() const;
    PROTOBUF_NODISCARD ::PROTOBUF_NAMESPACE_ID::Any* release_enhancement();
    ::PROTOBUF_NAMESPACE_ID::Any* mutable_enhancement();
    void set_allocated_enhancement(::PROTOBUF_NAMESPACE_ID::Any* enhancement);
    private:
    const ::PROTOBUF_NAMESPACE_ID::Any& _internal_enhancement() const;
    ::PROTOBUF_NAMESPACE_ID::Any* _internal_mutable_enhancement();
    public:
    void unsafe_arena_set_allocated_enhancement(
        ::PROTOBUF_NAMESPACE_ID::Any* enhancement);
    ::PROTOBUF_NAMESPACE_ID::Any* unsafe_arena_release_enhancement();
  
    // @@protoc_insertion_point(class_scope:substrait.extensions.AdvancedExtension)
   private:
    class _Internal;
  
    template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
    typedef void InternalArenaConstructable_;
    typedef void DestructorSkippable_;
    ::PROTOBUF_NAMESPACE_ID::Any* optimization_;
    ::PROTOBUF_NAMESPACE_ID::Any* enhancement_;
    mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
    friend struct ::TableStruct_substrait_2fextensions_2fextensions_2eproto;
  };
  // ===================================================================
  
  
  // ===================================================================
  
  #ifdef __GNUC__
    #pragma GCC diagnostic push
    #pragma GCC diagnostic ignored "-Wstrict-aliasing"
  #endif  // __GNUC__
  // SimpleExtensionURI
  
  // uint32 extension_uri_anchor = 1;
  inline void SimpleExtensionURI::clear_extension_uri_anchor() {
    extension_uri_anchor_ = 0u;
  }
  inline uint32_t SimpleExtensionURI::_internal_extension_uri_anchor() const {
    return extension_uri_anchor_;
  }
  inline uint32_t SimpleExtensionURI::extension_uri_anchor() const {
    // @@protoc_insertion_point(field_get:substrait.extensions.SimpleExtensionURI.extension_uri_anchor)
    return _internal_extension_uri_anchor();
  }
  inline void SimpleExtensionURI::_internal_set_extension_uri_anchor(uint32_t value) {
    
    extension_uri_anchor_ = value;
  }
  inline void SimpleExtensionURI::set_extension_uri_anchor(uint32_t value) {
    _internal_set_extension_uri_anchor(value);
    // @@protoc_insertion_point(field_set:substrait.extensions.SimpleExtensionURI.extension_uri_anchor)
  }
  
  // string uri = 2;
  inline void SimpleExtensionURI::clear_uri() {
    uri_.ClearToEmpty();
  }
  inline const std::string& SimpleExtensionURI::uri() const {
    // @@protoc_insertion_point(field_get:substrait.extensions.SimpleExtensionURI.uri)
    return _internal_uri();
  }
  template <typename ArgT0, typename... ArgT>
  inline PROTOBUF_ALWAYS_INLINE
  void SimpleExtensionURI::set_uri(ArgT0&& arg0, ArgT... args) {
   
   uri_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
    // @@protoc_insertion_point(field_set:substrait.extensions.SimpleExtensionURI.uri)
  }
  inline std::string* SimpleExtensionURI::mutable_uri() {
    std::string* _s = _internal_mutable_uri();
    // @@protoc_insertion_point(field_mutable:substrait.extensions.SimpleExtensionURI.uri)
    return _s;
  }
  inline const std::string& SimpleExtensionURI::_internal_uri() const {
    return uri_.Get();
  }
  inline void SimpleExtensionURI::_internal_set_uri(const std::string& value) {
    
    uri_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
  }
  inline std::string* SimpleExtensionURI::_internal_mutable_uri() {
    
    return uri_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
  }
  inline std::string* SimpleExtensionURI::release_uri() {
    // @@protoc_insertion_point(field_release:substrait.extensions.SimpleExtensionURI.uri)
    return uri_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
  }
  inline void SimpleExtensionURI::set_allocated_uri(std::string* uri) {
    if (uri != nullptr) {
      
    } else {
      
    }
    uri_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), uri,
        GetArenaForAllocation());
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    if (uri_.IsDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited())) {
      uri_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), "", GetArenaForAllocation());
    }
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
    // @@protoc_insertion_point(field_set_allocated:substrait.extensions.SimpleExtensionURI.uri)
  }
  
  // -------------------------------------------------------------------
  
  // SimpleExtensionDeclaration_ExtensionType
  
  // uint32 extension_uri_reference = 1;
  inline void SimpleExtensionDeclaration_ExtensionType::clear_extension_uri_reference() {
    extension_uri_reference_ = 0u;
  }
  inline uint32_t SimpleExtensionDeclaration_ExtensionType::_internal_extension_uri_reference() const {
    return extension_uri_reference_;
  }
  inline uint32_t SimpleExtensionDeclaration_ExtensionType::extension_uri_reference() const {
    // @@protoc_insertion_point(field_get:substrait.extensions.SimpleExtensionDeclaration.ExtensionType.extension_uri_reference)
    return _internal_extension_uri_reference();
  }
  inline void SimpleExtensionDeclaration_ExtensionType::_internal_set_extension_uri_reference(uint32_t value) {
    
    extension_uri_reference_ = value;
  }
  inline void SimpleExtensionDeclaration_ExtensionType::set_extension_uri_reference(uint32_t value) {
    _internal_set_extension_uri_reference(value);
    // @@protoc_insertion_point(field_set:substrait.extensions.SimpleExtensionDeclaration.ExtensionType.extension_uri_reference)
  }
  
  // uint32 type_anchor = 2;
  inline void SimpleExtensionDeclaration_ExtensionType::clear_type_anchor() {
    type_anchor_ = 0u;
  }
  inline uint32_t SimpleExtensionDeclaration_ExtensionType::_internal_type_anchor() const {
    return type_anchor_;
  }
  inline uint32_t SimpleExtensionDeclaration_ExtensionType::type_anchor() const {
    // @@protoc_insertion_point(field_get:substrait.extensions.SimpleExtensionDeclaration.ExtensionType.type_anchor)
    return _internal_type_anchor();
  }
  inline void SimpleExtensionDeclaration_ExtensionType::_internal_set_type_anchor(uint32_t value) {
    
    type_anchor_ = value;
  }
  inline void SimpleExtensionDeclaration_ExtensionType::set_type_anchor(uint32_t value) {
    _internal_set_type_anchor(value);
    // @@protoc_insertion_point(field_set:substrait.extensions.SimpleExtensionDeclaration.ExtensionType.type_anchor)
  }
  
  // string name = 3;
  inline void SimpleExtensionDeclaration_ExtensionType::clear_name() {
    name_.ClearToEmpty();
  }
  inline const std::string& SimpleExtensionDeclaration_ExtensionType::name() const {
    // @@protoc_insertion_point(field_get:substrait.extensions.SimpleExtensionDeclaration.ExtensionType.name)
    return _internal_name();
  }
  template <typename ArgT0, typename... ArgT>
  inline PROTOBUF_ALWAYS_INLINE
  void SimpleExtensionDeclaration_ExtensionType::set_name(ArgT0&& arg0, ArgT... args) {
   
   name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
    // @@protoc_insertion_point(field_set:substrait.extensions.SimpleExtensionDeclaration.ExtensionType.name)
  }
  inline std::string* SimpleExtensionDeclaration_ExtensionType::mutable_name() {
    std::string* _s = _internal_mutable_name();
    // @@protoc_insertion_point(field_mutable:substrait.extensions.SimpleExtensionDeclaration.ExtensionType.name)
    return _s;
  }
  inline const std::string& SimpleExtensionDeclaration_ExtensionType::_internal_name() const {
    return name_.Get();
  }
  inline void SimpleExtensionDeclaration_ExtensionType::_internal_set_name(const std::string& value) {
    
    name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
  }
  inline std::string* SimpleExtensionDeclaration_ExtensionType::_internal_mutable_name() {
    
    return name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
  }
  inline std::string* SimpleExtensionDeclaration_ExtensionType::release_name() {
    // @@protoc_insertion_point(field_release:substrait.extensions.SimpleExtensionDeclaration.ExtensionType.name)
    return name_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
  }
  inline void SimpleExtensionDeclaration_ExtensionType::set_allocated_name(std::string* name) {
    if (name != nullptr) {
      
    } else {
      
    }
    name_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), name,
        GetArenaForAllocation());
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    if (name_.IsDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited())) {
      name_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), "", GetArenaForAllocation());
    }
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
    // @@protoc_insertion_point(field_set_allocated:substrait.extensions.SimpleExtensionDeclaration.ExtensionType.name)
  }
  
  // -------------------------------------------------------------------
  
  // SimpleExtensionDeclaration_ExtensionTypeVariation
  
  // uint32 extension_uri_reference = 1;
  inline void SimpleExtensionDeclaration_ExtensionTypeVariation::clear_extension_uri_reference() {
    extension_uri_reference_ = 0u;
  }
  inline uint32_t SimpleExtensionDeclaration_ExtensionTypeVariation::_internal_extension_uri_reference() const {
    return extension_uri_reference_;
  }
  inline uint32_t SimpleExtensionDeclaration_ExtensionTypeVariation::extension_uri_reference() const {
    // @@protoc_insertion_point(field_get:substrait.extensions.SimpleExtensionDeclaration.ExtensionTypeVariation.extension_uri_reference)
    return _internal_extension_uri_reference();
  }
  inline void SimpleExtensionDeclaration_ExtensionTypeVariation::_internal_set_extension_uri_reference(uint32_t value) {
    
    extension_uri_reference_ = value;
  }
  inline void SimpleExtensionDeclaration_ExtensionTypeVariation::set_extension_uri_reference(uint32_t value) {
    _internal_set_extension_uri_reference(value);
    // @@protoc_insertion_point(field_set:substrait.extensions.SimpleExtensionDeclaration.ExtensionTypeVariation.extension_uri_reference)
  }
  
  // uint32 type_variation_anchor = 2;
  inline void SimpleExtensionDeclaration_ExtensionTypeVariation::clear_type_variation_anchor() {
    type_variation_anchor_ = 0u;
  }
  inline uint32_t SimpleExtensionDeclaration_ExtensionTypeVariation::_internal_type_variation_anchor() const {
    return type_variation_anchor_;
  }
  inline uint32_t SimpleExtensionDeclaration_ExtensionTypeVariation::type_variation_anchor() const {
    // @@protoc_insertion_point(field_get:substrait.extensions.SimpleExtensionDeclaration.ExtensionTypeVariation.type_variation_anchor)
    return _internal_type_variation_anchor();
  }
  inline void SimpleExtensionDeclaration_ExtensionTypeVariation::_internal_set_type_variation_anchor(uint32_t value) {
    
    type_variation_anchor_ = value;
  }
  inline void SimpleExtensionDeclaration_ExtensionTypeVariation::set_type_variation_anchor(uint32_t value) {
    _internal_set_type_variation_anchor(value);
    // @@protoc_insertion_point(field_set:substrait.extensions.SimpleExtensionDeclaration.ExtensionTypeVariation.type_variation_anchor)
  }
  
  // string name = 3;
  inline void SimpleExtensionDeclaration_ExtensionTypeVariation::clear_name() {
    name_.ClearToEmpty();
  }
  inline const std::string& SimpleExtensionDeclaration_ExtensionTypeVariation::name() const {
    // @@protoc_insertion_point(field_get:substrait.extensions.SimpleExtensionDeclaration.ExtensionTypeVariation.name)
    return _internal_name();
  }
  template <typename ArgT0, typename... ArgT>
  inline PROTOBUF_ALWAYS_INLINE
  void SimpleExtensionDeclaration_ExtensionTypeVariation::set_name(ArgT0&& arg0, ArgT... args) {
   
   name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
    // @@protoc_insertion_point(field_set:substrait.extensions.SimpleExtensionDeclaration.ExtensionTypeVariation.name)
  }
  inline std::string* SimpleExtensionDeclaration_ExtensionTypeVariation::mutable_name() {
    std::string* _s = _internal_mutable_name();
    // @@protoc_insertion_point(field_mutable:substrait.extensions.SimpleExtensionDeclaration.ExtensionTypeVariation.name)
    return _s;
  }
  inline const std::string& SimpleExtensionDeclaration_ExtensionTypeVariation::_internal_name() const {
    return name_.Get();
  }
  inline void SimpleExtensionDeclaration_ExtensionTypeVariation::_internal_set_name(const std::string& value) {
    
    name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
  }
  inline std::string* SimpleExtensionDeclaration_ExtensionTypeVariation::_internal_mutable_name() {
    
    return name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
  }
  inline std::string* SimpleExtensionDeclaration_ExtensionTypeVariation::release_name() {
    // @@protoc_insertion_point(field_release:substrait.extensions.SimpleExtensionDeclaration.ExtensionTypeVariation.name)
    return name_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
  }
  inline void SimpleExtensionDeclaration_ExtensionTypeVariation::set_allocated_name(std::string* name) {
    if (name != nullptr) {
      
    } else {
      
    }
    name_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), name,
        GetArenaForAllocation());
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    if (name_.IsDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited())) {
      name_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), "", GetArenaForAllocation());
    }
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
    // @@protoc_insertion_point(field_set_allocated:substrait.extensions.SimpleExtensionDeclaration.ExtensionTypeVariation.name)
  }
  
  // -------------------------------------------------------------------
  
  // SimpleExtensionDeclaration_ExtensionFunction
  
  // uint32 extension_uri_reference = 1;
  inline void SimpleExtensionDeclaration_ExtensionFunction::clear_extension_uri_reference() {
    extension_uri_reference_ = 0u;
  }
  inline uint32_t SimpleExtensionDeclaration_ExtensionFunction::_internal_extension_uri_reference() const {
    return extension_uri_reference_;
  }
  inline uint32_t SimpleExtensionDeclaration_ExtensionFunction::extension_uri_reference() const {
    // @@protoc_insertion_point(field_get:substrait.extensions.SimpleExtensionDeclaration.ExtensionFunction.extension_uri_reference)
    return _internal_extension_uri_reference();
  }
  inline void SimpleExtensionDeclaration_ExtensionFunction::_internal_set_extension_uri_reference(uint32_t value) {
    
    extension_uri_reference_ = value;
  }
  inline void SimpleExtensionDeclaration_ExtensionFunction::set_extension_uri_reference(uint32_t value) {
    _internal_set_extension_uri_reference(value);
    // @@protoc_insertion_point(field_set:substrait.extensions.SimpleExtensionDeclaration.ExtensionFunction.extension_uri_reference)
  }
  
  // uint32 function_anchor = 2;
  inline void SimpleExtensionDeclaration_ExtensionFunction::clear_function_anchor() {
    function_anchor_ = 0u;
  }
  inline uint32_t SimpleExtensionDeclaration_ExtensionFunction::_internal_function_anchor() const {
    return function_anchor_;
  }
  inline uint32_t SimpleExtensionDeclaration_ExtensionFunction::function_anchor() const {
    // @@protoc_insertion_point(field_get:substrait.extensions.SimpleExtensionDeclaration.ExtensionFunction.function_anchor)
    return _internal_function_anchor();
  }
  inline void SimpleExtensionDeclaration_ExtensionFunction::_internal_set_function_anchor(uint32_t value) {
    
    function_anchor_ = value;
  }
  inline void SimpleExtensionDeclaration_ExtensionFunction::set_function_anchor(uint32_t value) {
    _internal_set_function_anchor(value);
    // @@protoc_insertion_point(field_set:substrait.extensions.SimpleExtensionDeclaration.ExtensionFunction.function_anchor)
  }
  
  // string name = 3;
  inline void SimpleExtensionDeclaration_ExtensionFunction::clear_name() {
    name_.ClearToEmpty();
  }
  inline const std::string& SimpleExtensionDeclaration_ExtensionFunction::name() const {
    // @@protoc_insertion_point(field_get:substrait.extensions.SimpleExtensionDeclaration.ExtensionFunction.name)
    return _internal_name();
  }
  template <typename ArgT0, typename... ArgT>
  inline PROTOBUF_ALWAYS_INLINE
  void SimpleExtensionDeclaration_ExtensionFunction::set_name(ArgT0&& arg0, ArgT... args) {
   
   name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
    // @@protoc_insertion_point(field_set:substrait.extensions.SimpleExtensionDeclaration.ExtensionFunction.name)
  }
  inline std::string* SimpleExtensionDeclaration_ExtensionFunction::mutable_name() {
    std::string* _s = _internal_mutable_name();
    // @@protoc_insertion_point(field_mutable:substrait.extensions.SimpleExtensionDeclaration.ExtensionFunction.name)
    return _s;
  }
  inline const std::string& SimpleExtensionDeclaration_ExtensionFunction::_internal_name() const {
    return name_.Get();
  }
  inline void SimpleExtensionDeclaration_ExtensionFunction::_internal_set_name(const std::string& value) {
    
    name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
  }
  inline std::string* SimpleExtensionDeclaration_ExtensionFunction::_internal_mutable_name() {
    
    return name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
  }
  inline std::string* SimpleExtensionDeclaration_ExtensionFunction::release_name() {
    // @@protoc_insertion_point(field_release:substrait.extensions.SimpleExtensionDeclaration.ExtensionFunction.name)
    return name_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
  }
  inline void SimpleExtensionDeclaration_ExtensionFunction::set_allocated_name(std::string* name) {
    if (name != nullptr) {
      
    } else {
      
    }
    name_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), name,
        GetArenaForAllocation());
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    if (name_.IsDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited())) {
      name_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), "", GetArenaForAllocation());
    }
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
    // @@protoc_insertion_point(field_set_allocated:substrait.extensions.SimpleExtensionDeclaration.ExtensionFunction.name)
  }
  
  // -------------------------------------------------------------------
  
  // SimpleExtensionDeclaration
  
  // .substrait.extensions.SimpleExtensionDeclaration.ExtensionType extension_type = 1;
  inline bool SimpleExtensionDeclaration::_internal_has_extension_type() const {
    return mapping_type_case() == kExtensionType;
  }
  inline bool SimpleExtensionDeclaration::has_extension_type() const {
    return _internal_has_extension_type();
  }
  inline void SimpleExtensionDeclaration::set_has_extension_type() {
    _oneof_case_[0] = kExtensionType;
  }
  inline void SimpleExtensionDeclaration::clear_extension_type() {
    if (_internal_has_extension_type()) {
      if (GetArenaForAllocation() == nullptr) {
        delete mapping_type_.extension_type_;
      }
      clear_has_mapping_type();
    }
  }
  inline ::substrait::extensions::SimpleExtensionDeclaration_ExtensionType* SimpleExtensionDeclaration::release_extension_type() {
    // @@protoc_insertion_point(field_release:substrait.extensions.SimpleExtensionDeclaration.extension_type)
    if (_internal_has_extension_type()) {
      clear_has_mapping_type();
        ::substrait::extensions::SimpleExtensionDeclaration_ExtensionType* temp = mapping_type_.extension_type_;
      if (GetArenaForAllocation() != nullptr) {
        temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
      }
      mapping_type_.extension_type_ = nullptr;
      return temp;
    } else {
      return nullptr;
    }
  }
  inline const ::substrait::extensions::SimpleExtensionDeclaration_ExtensionType& SimpleExtensionDeclaration::_internal_extension_type() const {
    return _internal_has_extension_type()
        ? *mapping_type_.extension_type_
        : reinterpret_cast< ::substrait::extensions::SimpleExtensionDeclaration_ExtensionType&>(::substrait::extensions::_SimpleExtensionDeclaration_ExtensionType_default_instance_);
  }
  inline const ::substrait::extensions::SimpleExtensionDeclaration_ExtensionType& SimpleExtensionDeclaration::extension_type() const {
    // @@protoc_insertion_point(field_get:substrait.extensions.SimpleExtensionDeclaration.extension_type)
    return _internal_extension_type();
  }
  inline ::substrait::extensions::SimpleExtensionDeclaration_ExtensionType* SimpleExtensionDeclaration::unsafe_arena_release_extension_type() {
    // @@protoc_insertion_point(field_unsafe_arena_release:substrait.extensions.SimpleExtensionDeclaration.extension_type)
    if (_internal_has_extension_type()) {
      clear_has_mapping_type();
      ::substrait::extensions::SimpleExtensionDeclaration_ExtensionType* temp = mapping_type_.extension_type_;
      mapping_type_.extension_type_ = nullptr;
      return temp;
    } else {
      return nullptr;
    }
  }
  inline void SimpleExtensionDeclaration::unsafe_arena_set_allocated_extension_type(::substrait::extensions::SimpleExtensionDeclaration_ExtensionType* extension_type) {
    clear_mapping_type();
    if (extension_type) {
      set_has_extension_type();
      mapping_type_.extension_type_ = extension_type;
    }
    // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.extensions.SimpleExtensionDeclaration.extension_type)
  }
  inline ::substrait::extensions::SimpleExtensionDeclaration_ExtensionType* SimpleExtensionDeclaration::_internal_mutable_extension_type() {
    if (!_internal_has_extension_type()) {
      clear_mapping_type();
      set_has_extension_type();
      mapping_type_.extension_type_ = CreateMaybeMessage< ::substrait::extensions::SimpleExtensionDeclaration_ExtensionType >(GetArenaForAllocation());
    }
    return mapping_type_.extension_type_;
  }
  inline ::substrait::extensions::SimpleExtensionDeclaration_ExtensionType* SimpleExtensionDeclaration::mutable_extension_type() {
    ::substrait::extensions::SimpleExtensionDeclaration_ExtensionType* _msg = _internal_mutable_extension_type();
    // @@protoc_insertion_point(field_mutable:substrait.extensions.SimpleExtensionDeclaration.extension_type)
    return _msg;
  }
  
  // .substrait.extensions.SimpleExtensionDeclaration.ExtensionTypeVariation extension_type_variation = 2;
  inline bool SimpleExtensionDeclaration::_internal_has_extension_type_variation() const {
    return mapping_type_case() == kExtensionTypeVariation;
  }
  inline bool SimpleExtensionDeclaration::has_extension_type_variation() const {
    return _internal_has_extension_type_variation();
  }
  inline void SimpleExtensionDeclaration::set_has_extension_type_variation() {
    _oneof_case_[0] = kExtensionTypeVariation;
  }
  inline void SimpleExtensionDeclaration::clear_extension_type_variation() {
    if (_internal_has_extension_type_variation()) {
      if (GetArenaForAllocation() == nullptr) {
        delete mapping_type_.extension_type_variation_;
      }
      clear_has_mapping_type();
    }
  }
  inline ::substrait::extensions::SimpleExtensionDeclaration_ExtensionTypeVariation* SimpleExtensionDeclaration::release_extension_type_variation() {
    // @@protoc_insertion_point(field_release:substrait.extensions.SimpleExtensionDeclaration.extension_type_variation)
    if (_internal_has_extension_type_variation()) {
      clear_has_mapping_type();
        ::substrait::extensions::SimpleExtensionDeclaration_ExtensionTypeVariation* temp = mapping_type_.extension_type_variation_;
      if (GetArenaForAllocation() != nullptr) {
        temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
      }
      mapping_type_.extension_type_variation_ = nullptr;
      return temp;
    } else {
      return nullptr;
    }
  }
  inline const ::substrait::extensions::SimpleExtensionDeclaration_ExtensionTypeVariation& SimpleExtensionDeclaration::_internal_extension_type_variation() const {
    return _internal_has_extension_type_variation()
        ? *mapping_type_.extension_type_variation_
        : reinterpret_cast< ::substrait::extensions::SimpleExtensionDeclaration_ExtensionTypeVariation&>(::substrait::extensions::_SimpleExtensionDeclaration_ExtensionTypeVariation_default_instance_);
  }
  inline const ::substrait::extensions::SimpleExtensionDeclaration_ExtensionTypeVariation& SimpleExtensionDeclaration::extension_type_variation() const {
    // @@protoc_insertion_point(field_get:substrait.extensions.SimpleExtensionDeclaration.extension_type_variation)
    return _internal_extension_type_variation();
  }
  inline ::substrait::extensions::SimpleExtensionDeclaration_ExtensionTypeVariation* SimpleExtensionDeclaration::unsafe_arena_release_extension_type_variation() {
    // @@protoc_insertion_point(field_unsafe_arena_release:substrait.extensions.SimpleExtensionDeclaration.extension_type_variation)
    if (_internal_has_extension_type_variation()) {
      clear_has_mapping_type();
      ::substrait::extensions::SimpleExtensionDeclaration_ExtensionTypeVariation* temp = mapping_type_.extension_type_variation_;
      mapping_type_.extension_type_variation_ = nullptr;
      return temp;
    } else {
      return nullptr;
    }
  }
  inline void SimpleExtensionDeclaration::unsafe_arena_set_allocated_extension_type_variation(::substrait::extensions::SimpleExtensionDeclaration_ExtensionTypeVariation* extension_type_variation) {
    clear_mapping_type();
    if (extension_type_variation) {
      set_has_extension_type_variation();
      mapping_type_.extension_type_variation_ = extension_type_variation;
    }
    // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.extensions.SimpleExtensionDeclaration.extension_type_variation)
  }
  inline ::substrait::extensions::SimpleExtensionDeclaration_ExtensionTypeVariation* SimpleExtensionDeclaration::_internal_mutable_extension_type_variation() {
    if (!_internal_has_extension_type_variation()) {
      clear_mapping_type();
      set_has_extension_type_variation();
      mapping_type_.extension_type_variation_ = CreateMaybeMessage< ::substrait::extensions::SimpleExtensionDeclaration_ExtensionTypeVariation >(GetArenaForAllocation());
    }
    return mapping_type_.extension_type_variation_;
  }
  inline ::substrait::extensions::SimpleExtensionDeclaration_ExtensionTypeVariation* SimpleExtensionDeclaration::mutable_extension_type_variation() {
    ::substrait::extensions::SimpleExtensionDeclaration_ExtensionTypeVariation* _msg = _internal_mutable_extension_type_variation();
    // @@protoc_insertion_point(field_mutable:substrait.extensions.SimpleExtensionDeclaration.extension_type_variation)
    return _msg;
  }
  
  // .substrait.extensions.SimpleExtensionDeclaration.ExtensionFunction extension_function = 3;
  inline bool SimpleExtensionDeclaration::_internal_has_extension_function() const {
    return mapping_type_case() == kExtensionFunction;
  }
  inline bool SimpleExtensionDeclaration::has_extension_function() const {
    return _internal_has_extension_function();
  }
  inline void SimpleExtensionDeclaration::set_has_extension_function() {
    _oneof_case_[0] = kExtensionFunction;
  }
  inline void SimpleExtensionDeclaration::clear_extension_function() {
    if (_internal_has_extension_function()) {
      if (GetArenaForAllocation() == nullptr) {
        delete mapping_type_.extension_function_;
      }
      clear_has_mapping_type();
    }
  }
  inline ::substrait::extensions::SimpleExtensionDeclaration_ExtensionFunction* SimpleExtensionDeclaration::release_extension_function() {
    // @@protoc_insertion_point(field_release:substrait.extensions.SimpleExtensionDeclaration.extension_function)
    if (_internal_has_extension_function()) {
      clear_has_mapping_type();
        ::substrait::extensions::SimpleExtensionDeclaration_ExtensionFunction* temp = mapping_type_.extension_function_;
      if (GetArenaForAllocation() != nullptr) {
        temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
      }
      mapping_type_.extension_function_ = nullptr;
      return temp;
    } else {
      return nullptr;
    }
  }
  inline const ::substrait::extensions::SimpleExtensionDeclaration_ExtensionFunction& SimpleExtensionDeclaration::_internal_extension_function() const {
    return _internal_has_extension_function()
        ? *mapping_type_.extension_function_
        : reinterpret_cast< ::substrait::extensions::SimpleExtensionDeclaration_ExtensionFunction&>(::substrait::extensions::_SimpleExtensionDeclaration_ExtensionFunction_default_instance_);
  }
  inline const ::substrait::extensions::SimpleExtensionDeclaration_ExtensionFunction& SimpleExtensionDeclaration::extension_function() const {
    // @@protoc_insertion_point(field_get:substrait.extensions.SimpleExtensionDeclaration.extension_function)
    return _internal_extension_function();
  }
  inline ::substrait::extensions::SimpleExtensionDeclaration_ExtensionFunction* SimpleExtensionDeclaration::unsafe_arena_release_extension_function() {
    // @@protoc_insertion_point(field_unsafe_arena_release:substrait.extensions.SimpleExtensionDeclaration.extension_function)
    if (_internal_has_extension_function()) {
      clear_has_mapping_type();
      ::substrait::extensions::SimpleExtensionDeclaration_ExtensionFunction* temp = mapping_type_.extension_function_;
      mapping_type_.extension_function_ = nullptr;
      return temp;
    } else {
      return nullptr;
    }
  }
  inline void SimpleExtensionDeclaration::unsafe_arena_set_allocated_extension_function(::substrait::extensions::SimpleExtensionDeclaration_ExtensionFunction* extension_function) {
    clear_mapping_type();
    if (extension_function) {
      set_has_extension_function();
      mapping_type_.extension_function_ = extension_function;
    }
    // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.extensions.SimpleExtensionDeclaration.extension_function)
  }
  inline ::substrait::extensions::SimpleExtensionDeclaration_ExtensionFunction* SimpleExtensionDeclaration::_internal_mutable_extension_function() {
    if (!_internal_has_extension_function()) {
      clear_mapping_type();
      set_has_extension_function();
      mapping_type_.extension_function_ = CreateMaybeMessage< ::substrait::extensions::SimpleExtensionDeclaration_ExtensionFunction >(GetArenaForAllocation());
    }
    return mapping_type_.extension_function_;
  }
  inline ::substrait::extensions::SimpleExtensionDeclaration_ExtensionFunction* SimpleExtensionDeclaration::mutable_extension_function() {
    ::substrait::extensions::SimpleExtensionDeclaration_ExtensionFunction* _msg = _internal_mutable_extension_function();
    // @@protoc_insertion_point(field_mutable:substrait.extensions.SimpleExtensionDeclaration.extension_function)
    return _msg;
  }
  
  inline bool SimpleExtensionDeclaration::has_mapping_type() const {
    return mapping_type_case() != MAPPING_TYPE_NOT_SET;
  }
  inline void SimpleExtensionDeclaration::clear_has_mapping_type() {
    _oneof_case_[0] = MAPPING_TYPE_NOT_SET;
  }
  inline SimpleExtensionDeclaration::MappingTypeCase SimpleExtensionDeclaration::mapping_type_case() const {
    return SimpleExtensionDeclaration::MappingTypeCase(_oneof_case_[0]);
  }
  // -------------------------------------------------------------------
  
  // AdvancedExtension
  
  // .google.protobuf.Any optimization = 1;
  inline bool AdvancedExtension::_internal_has_optimization() const {
    return this != internal_default_instance() && optimization_ != nullptr;
  }
  inline bool AdvancedExtension::has_optimization() const {
    return _internal_has_optimization();
  }
  inline const ::PROTOBUF_NAMESPACE_ID::Any& AdvancedExtension::_internal_optimization() const {
    const ::PROTOBUF_NAMESPACE_ID::Any* p = optimization_;
    return p != nullptr ? *p : reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Any&>(
        ::PROTOBUF_NAMESPACE_ID::_Any_default_instance_);
  }
  inline const ::PROTOBUF_NAMESPACE_ID::Any& AdvancedExtension::optimization() const {
    // @@protoc_insertion_point(field_get:substrait.extensions.AdvancedExtension.optimization)
    return _internal_optimization();
  }
  inline void AdvancedExtension::unsafe_arena_set_allocated_optimization(
      ::PROTOBUF_NAMESPACE_ID::Any* optimization) {
    if (GetArenaForAllocation() == nullptr) {
      delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(optimization_);
    }
    optimization_ = optimization;
    if (optimization) {
      
    } else {
      
    }
    // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.extensions.AdvancedExtension.optimization)
  }
  inline ::PROTOBUF_NAMESPACE_ID::Any* AdvancedExtension::release_optimization() {
    
    ::PROTOBUF_NAMESPACE_ID::Any* temp = optimization_;
    optimization_ = 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* AdvancedExtension::unsafe_arena_release_optimization() {
    // @@protoc_insertion_point(field_release:substrait.extensions.AdvancedExtension.optimization)
    
    ::PROTOBUF_NAMESPACE_ID::Any* temp = optimization_;
    optimization_ = nullptr;
    return temp;
  }
  inline ::PROTOBUF_NAMESPACE_ID::Any* AdvancedExtension::_internal_mutable_optimization() {
    
    if (optimization_ == nullptr) {
      auto* p = CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Any>(GetArenaForAllocation());
      optimization_ = p;
    }
    return optimization_;
  }
  inline ::PROTOBUF_NAMESPACE_ID::Any* AdvancedExtension::mutable_optimization() {
    ::PROTOBUF_NAMESPACE_ID::Any* _msg = _internal_mutable_optimization();
    // @@protoc_insertion_point(field_mutable:substrait.extensions.AdvancedExtension.optimization)
    return _msg;
  }
  inline void AdvancedExtension::set_allocated_optimization(::PROTOBUF_NAMESPACE_ID::Any* optimization) {
    ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
    if (message_arena == nullptr) {
      delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(optimization_);
    }
    if (optimization) {
      ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
          ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
              ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(optimization));
      if (message_arena != submessage_arena) {
        optimization = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
            message_arena, optimization, submessage_arena);
      }
      
    } else {
      
    }
    optimization_ = optimization;
    // @@protoc_insertion_point(field_set_allocated:substrait.extensions.AdvancedExtension.optimization)
  }
  
  // .google.protobuf.Any enhancement = 2;
  inline bool AdvancedExtension::_internal_has_enhancement() const {
    return this != internal_default_instance() && enhancement_ != nullptr;
  }
  inline bool AdvancedExtension::has_enhancement() const {
    return _internal_has_enhancement();
  }
  inline const ::PROTOBUF_NAMESPACE_ID::Any& AdvancedExtension::_internal_enhancement() const {
    const ::PROTOBUF_NAMESPACE_ID::Any* p = enhancement_;
    return p != nullptr ? *p : reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Any&>(
        ::PROTOBUF_NAMESPACE_ID::_Any_default_instance_);
  }
  inline const ::PROTOBUF_NAMESPACE_ID::Any& AdvancedExtension::enhancement() const {
    // @@protoc_insertion_point(field_get:substrait.extensions.AdvancedExtension.enhancement)
    return _internal_enhancement();
  }
  inline void AdvancedExtension::unsafe_arena_set_allocated_enhancement(
      ::PROTOBUF_NAMESPACE_ID::Any* enhancement) {
    if (GetArenaForAllocation() == nullptr) {
      delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(enhancement_);
    }
    enhancement_ = enhancement;
    if (enhancement) {
      
    } else {
      
    }
    // @@protoc_insertion_point(field_unsafe_arena_set_allocated:substrait.extensions.AdvancedExtension.enhancement)
  }
  inline ::PROTOBUF_NAMESPACE_ID::Any* AdvancedExtension::release_enhancement() {
    
    ::PROTOBUF_NAMESPACE_ID::Any* temp = enhancement_;
    enhancement_ = 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* AdvancedExtension::unsafe_arena_release_enhancement() {
    // @@protoc_insertion_point(field_release:substrait.extensions.AdvancedExtension.enhancement)
    
    ::PROTOBUF_NAMESPACE_ID::Any* temp = enhancement_;
    enhancement_ = nullptr;
    return temp;
  }
  inline ::PROTOBUF_NAMESPACE_ID::Any* AdvancedExtension::_internal_mutable_enhancement() {
    
    if (enhancement_ == nullptr) {
      auto* p = CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Any>(GetArenaForAllocation());
      enhancement_ = p;
    }
    return enhancement_;
  }
  inline ::PROTOBUF_NAMESPACE_ID::Any* AdvancedExtension::mutable_enhancement() {
    ::PROTOBUF_NAMESPACE_ID::Any* _msg = _internal_mutable_enhancement();
    // @@protoc_insertion_point(field_mutable:substrait.extensions.AdvancedExtension.enhancement)
    return _msg;
  }
  inline void AdvancedExtension::set_allocated_enhancement(::PROTOBUF_NAMESPACE_ID::Any* enhancement) {
    ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
    if (message_arena == nullptr) {
      delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(enhancement_);
    }
    if (enhancement) {
      ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
          ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
              ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(enhancement));
      if (message_arena != submessage_arena) {
        enhancement = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
            message_arena, enhancement, submessage_arena);
      }
      
    } else {
      
    }
    enhancement_ = enhancement;
    // @@protoc_insertion_point(field_set_allocated:substrait.extensions.AdvancedExtension.enhancement)
  }
  
  #ifdef __GNUC__
    #pragma GCC diagnostic pop
  #endif  // __GNUC__
  // -------------------------------------------------------------------
  
  // -------------------------------------------------------------------
  
  // -------------------------------------------------------------------
  
  // -------------------------------------------------------------------
  
  // -------------------------------------------------------------------
  
  
  // @@protoc_insertion_point(namespace_scope)
  
  }  // namespace extensions
  }  // namespace substrait
  
  // @@protoc_insertion_point(global_scope)
  
  #include <google/protobuf/port_undef.inc>
  #endif  // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_substrait_2fextensions_2fextensions_2eproto
  