// 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 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_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 [json_name = "uri"];
  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 [json_name = "extensionUriAnchor"];
  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 [json_name = "name"];
  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 [json_name = "extensionUriReference"];
  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 [json_name = "typeAnchor"];
  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 [json_name = "name"];
  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 [json_name = "extensionUriReference"];
  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 [json_name = "typeVariationAnchor"];
  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 [json_name = "name"];
  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 [json_name = "extensionUriReference"];
  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 [json_name = "functionAnchor"];
  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 [json_name = "extensionType"];
  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 [json_name = "extensionTypeVariation"];
  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 [json_name = "extensionFunction"];
  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 [json_name = "optimization"];
  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 [json_name = "enhancement"];
  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 [json_name = "extensionUriAnchor"];
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 [json_name = "uri"];
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 [json_name = "extensionUriReference"];
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 [json_name = "typeAnchor"];
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 [json_name = "name"];
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 [json_name = "extensionUriReference"];
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 [json_name = "typeVariationAnchor"];
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 [json_name = "name"];
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 [json_name = "extensionUriReference"];
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 [json_name = "functionAnchor"];
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 [json_name = "name"];
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 [json_name = "extensionType"];
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 [json_name = "extensionTypeVariation"];
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 [json_name = "extensionFunction"];
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 [json_name = "optimization"];
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 [json_name = "enhancement"];
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
