# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: google/cloud/spanner_v1/proto/transaction.proto

import sys
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)

_sym_db = _symbol_database.Default()


from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2
from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2


DESCRIPTOR = _descriptor.FileDescriptor(
  name='google/cloud/spanner_v1/proto/transaction.proto',
  package='google.spanner.v1',
  syntax='proto3',
  serialized_pb=_b('\n/google/cloud/spanner_v1/proto/transaction.proto\x12\x11google.spanner.v1\x1a\x1cgoogle/api/annotations.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xe0\x03\n\x12TransactionOptions\x12\x45\n\nread_write\x18\x01 \x01(\x0b\x32/.google.spanner.v1.TransactionOptions.ReadWriteH\x00\x12\x43\n\tread_only\x18\x02 \x01(\x0b\x32..google.spanner.v1.TransactionOptions.ReadOnlyH\x00\x1a\x0b\n\tReadWrite\x1a\xa8\x02\n\x08ReadOnly\x12\x10\n\x06strong\x18\x01 \x01(\x08H\x00\x12\x38\n\x12min_read_timestamp\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x12\x32\n\rmax_staleness\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00\x12\x34\n\x0eread_timestamp\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x12\x34\n\x0f\x65xact_staleness\x18\x05 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00\x12\x1d\n\x15return_read_timestamp\x18\x06 \x01(\x08\x42\x11\n\x0ftimestamp_boundB\x06\n\x04mode\"M\n\x0bTransaction\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x32\n\x0eread_timestamp\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xa4\x01\n\x13TransactionSelector\x12;\n\nsingle_use\x18\x01 \x01(\x0b\x32%.google.spanner.v1.TransactionOptionsH\x00\x12\x0c\n\x02id\x18\x02 \x01(\x0cH\x00\x12\x36\n\x05\x62\x65gin\x18\x03 \x01(\x0b\x32%.google.spanner.v1.TransactionOptionsH\x00\x42\n\n\x08selectorB\x99\x01\n\x15\x63om.google.spanner.v1B\x10TransactionProtoP\x01Z8google.golang.org/genproto/googleapis/spanner/v1;spanner\xaa\x02\x17Google.Cloud.Spanner.V1\xca\x02\x17Google\\Cloud\\Spanner\\V1b\x06proto3')
  ,
  dependencies=[google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_protobuf_dot_duration__pb2.DESCRIPTOR,google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,])
_sym_db.RegisterFileDescriptor(DESCRIPTOR)




_TRANSACTIONOPTIONS_READWRITE = _descriptor.Descriptor(
  name='ReadWrite',
  full_name='google.spanner.v1.TransactionOptions.ReadWrite',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=328,
  serialized_end=339,
)

_TRANSACTIONOPTIONS_READONLY = _descriptor.Descriptor(
  name='ReadOnly',
  full_name='google.spanner.v1.TransactionOptions.ReadOnly',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='strong', full_name='google.spanner.v1.TransactionOptions.ReadOnly.strong', index=0,
      number=1, type=8, cpp_type=7, label=1,
      has_default_value=False, default_value=False,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='min_read_timestamp', full_name='google.spanner.v1.TransactionOptions.ReadOnly.min_read_timestamp', index=1,
      number=2, type=11, cpp_type=10, label=1,
      has_default_value=False, default_value=None,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='max_staleness', full_name='google.spanner.v1.TransactionOptions.ReadOnly.max_staleness', index=2,
      number=3, type=11, cpp_type=10, label=1,
      has_default_value=False, default_value=None,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='read_timestamp', full_name='google.spanner.v1.TransactionOptions.ReadOnly.read_timestamp', index=3,
      number=4, type=11, cpp_type=10, label=1,
      has_default_value=False, default_value=None,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='exact_staleness', full_name='google.spanner.v1.TransactionOptions.ReadOnly.exact_staleness', index=4,
      number=5, type=11, cpp_type=10, label=1,
      has_default_value=False, default_value=None,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='return_read_timestamp', full_name='google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp', index=5,
      number=6, type=8, cpp_type=7, label=1,
      has_default_value=False, default_value=False,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
    _descriptor.OneofDescriptor(
      name='timestamp_bound', full_name='google.spanner.v1.TransactionOptions.ReadOnly.timestamp_bound',
      index=0, containing_type=None, fields=[]),
  ],
  serialized_start=342,
  serialized_end=638,
)

_TRANSACTIONOPTIONS = _descriptor.Descriptor(
  name='TransactionOptions',
  full_name='google.spanner.v1.TransactionOptions',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='read_write', full_name='google.spanner.v1.TransactionOptions.read_write', index=0,
      number=1, type=11, cpp_type=10, label=1,
      has_default_value=False, default_value=None,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='read_only', full_name='google.spanner.v1.TransactionOptions.read_only', index=1,
      number=2, type=11, cpp_type=10, label=1,
      has_default_value=False, default_value=None,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
  ],
  extensions=[
  ],
  nested_types=[_TRANSACTIONOPTIONS_READWRITE, _TRANSACTIONOPTIONS_READONLY, ],
  enum_types=[
  ],
  options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
    _descriptor.OneofDescriptor(
      name='mode', full_name='google.spanner.v1.TransactionOptions.mode',
      index=0, containing_type=None, fields=[]),
  ],
  serialized_start=166,
  serialized_end=646,
)


_TRANSACTION = _descriptor.Descriptor(
  name='Transaction',
  full_name='google.spanner.v1.Transaction',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='id', full_name='google.spanner.v1.Transaction.id', index=0,
      number=1, type=12, cpp_type=9, label=1,
      has_default_value=False, default_value=_b(""),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='read_timestamp', full_name='google.spanner.v1.Transaction.read_timestamp', index=1,
      number=2, type=11, cpp_type=10, label=1,
      has_default_value=False, default_value=None,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=648,
  serialized_end=725,
)


_TRANSACTIONSELECTOR = _descriptor.Descriptor(
  name='TransactionSelector',
  full_name='google.spanner.v1.TransactionSelector',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='single_use', full_name='google.spanner.v1.TransactionSelector.single_use', index=0,
      number=1, type=11, cpp_type=10, label=1,
      has_default_value=False, default_value=None,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='id', full_name='google.spanner.v1.TransactionSelector.id', index=1,
      number=2, type=12, cpp_type=9, label=1,
      has_default_value=False, default_value=_b(""),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='begin', full_name='google.spanner.v1.TransactionSelector.begin', index=2,
      number=3, type=11, cpp_type=10, label=1,
      has_default_value=False, default_value=None,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
    _descriptor.OneofDescriptor(
      name='selector', full_name='google.spanner.v1.TransactionSelector.selector',
      index=0, containing_type=None, fields=[]),
  ],
  serialized_start=728,
  serialized_end=892,
)

_TRANSACTIONOPTIONS_READWRITE.containing_type = _TRANSACTIONOPTIONS
_TRANSACTIONOPTIONS_READONLY.fields_by_name['min_read_timestamp'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
_TRANSACTIONOPTIONS_READONLY.fields_by_name['max_staleness'].message_type = google_dot_protobuf_dot_duration__pb2._DURATION
_TRANSACTIONOPTIONS_READONLY.fields_by_name['read_timestamp'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
_TRANSACTIONOPTIONS_READONLY.fields_by_name['exact_staleness'].message_type = google_dot_protobuf_dot_duration__pb2._DURATION
_TRANSACTIONOPTIONS_READONLY.containing_type = _TRANSACTIONOPTIONS
_TRANSACTIONOPTIONS_READONLY.oneofs_by_name['timestamp_bound'].fields.append(
  _TRANSACTIONOPTIONS_READONLY.fields_by_name['strong'])
_TRANSACTIONOPTIONS_READONLY.fields_by_name['strong'].containing_oneof = _TRANSACTIONOPTIONS_READONLY.oneofs_by_name['timestamp_bound']
_TRANSACTIONOPTIONS_READONLY.oneofs_by_name['timestamp_bound'].fields.append(
  _TRANSACTIONOPTIONS_READONLY.fields_by_name['min_read_timestamp'])
_TRANSACTIONOPTIONS_READONLY.fields_by_name['min_read_timestamp'].containing_oneof = _TRANSACTIONOPTIONS_READONLY.oneofs_by_name['timestamp_bound']
_TRANSACTIONOPTIONS_READONLY.oneofs_by_name['timestamp_bound'].fields.append(
  _TRANSACTIONOPTIONS_READONLY.fields_by_name['max_staleness'])
_TRANSACTIONOPTIONS_READONLY.fields_by_name['max_staleness'].containing_oneof = _TRANSACTIONOPTIONS_READONLY.oneofs_by_name['timestamp_bound']
_TRANSACTIONOPTIONS_READONLY.oneofs_by_name['timestamp_bound'].fields.append(
  _TRANSACTIONOPTIONS_READONLY.fields_by_name['read_timestamp'])
_TRANSACTIONOPTIONS_READONLY.fields_by_name['read_timestamp'].containing_oneof = _TRANSACTIONOPTIONS_READONLY.oneofs_by_name['timestamp_bound']
_TRANSACTIONOPTIONS_READONLY.oneofs_by_name['timestamp_bound'].fields.append(
  _TRANSACTIONOPTIONS_READONLY.fields_by_name['exact_staleness'])
_TRANSACTIONOPTIONS_READONLY.fields_by_name['exact_staleness'].containing_oneof = _TRANSACTIONOPTIONS_READONLY.oneofs_by_name['timestamp_bound']
_TRANSACTIONOPTIONS.fields_by_name['read_write'].message_type = _TRANSACTIONOPTIONS_READWRITE
_TRANSACTIONOPTIONS.fields_by_name['read_only'].message_type = _TRANSACTIONOPTIONS_READONLY
_TRANSACTIONOPTIONS.oneofs_by_name['mode'].fields.append(
  _TRANSACTIONOPTIONS.fields_by_name['read_write'])
_TRANSACTIONOPTIONS.fields_by_name['read_write'].containing_oneof = _TRANSACTIONOPTIONS.oneofs_by_name['mode']
_TRANSACTIONOPTIONS.oneofs_by_name['mode'].fields.append(
  _TRANSACTIONOPTIONS.fields_by_name['read_only'])
_TRANSACTIONOPTIONS.fields_by_name['read_only'].containing_oneof = _TRANSACTIONOPTIONS.oneofs_by_name['mode']
_TRANSACTION.fields_by_name['read_timestamp'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
_TRANSACTIONSELECTOR.fields_by_name['single_use'].message_type = _TRANSACTIONOPTIONS
_TRANSACTIONSELECTOR.fields_by_name['begin'].message_type = _TRANSACTIONOPTIONS
_TRANSACTIONSELECTOR.oneofs_by_name['selector'].fields.append(
  _TRANSACTIONSELECTOR.fields_by_name['single_use'])
_TRANSACTIONSELECTOR.fields_by_name['single_use'].containing_oneof = _TRANSACTIONSELECTOR.oneofs_by_name['selector']
_TRANSACTIONSELECTOR.oneofs_by_name['selector'].fields.append(
  _TRANSACTIONSELECTOR.fields_by_name['id'])
_TRANSACTIONSELECTOR.fields_by_name['id'].containing_oneof = _TRANSACTIONSELECTOR.oneofs_by_name['selector']
_TRANSACTIONSELECTOR.oneofs_by_name['selector'].fields.append(
  _TRANSACTIONSELECTOR.fields_by_name['begin'])
_TRANSACTIONSELECTOR.fields_by_name['begin'].containing_oneof = _TRANSACTIONSELECTOR.oneofs_by_name['selector']
DESCRIPTOR.message_types_by_name['TransactionOptions'] = _TRANSACTIONOPTIONS
DESCRIPTOR.message_types_by_name['Transaction'] = _TRANSACTION
DESCRIPTOR.message_types_by_name['TransactionSelector'] = _TRANSACTIONSELECTOR

TransactionOptions = _reflection.GeneratedProtocolMessageType('TransactionOptions', (_message.Message,), dict(

  ReadWrite = _reflection.GeneratedProtocolMessageType('ReadWrite', (_message.Message,), dict(
    DESCRIPTOR = _TRANSACTIONOPTIONS_READWRITE,
    __module__ = 'google.cloud.spanner_v1.proto.transaction_pb2'
    ,
    __doc__ = """Message type to initiate a read-write transaction. Currently this
    transaction type has no options.
    """,
    # @@protoc_insertion_point(class_scope:google.spanner.v1.TransactionOptions.ReadWrite)
    ))
  ,

  ReadOnly = _reflection.GeneratedProtocolMessageType('ReadOnly', (_message.Message,), dict(
    DESCRIPTOR = _TRANSACTIONOPTIONS_READONLY,
    __module__ = 'google.cloud.spanner_v1.proto.transaction_pb2'
    ,
    __doc__ = """Message type to initiate a read-only transaction.


    Attributes:
        timestamp_bound:
            How to choose the timestamp for the read-only transaction.
        strong:
            Read at a timestamp where all previously committed
            transactions are visible.
        min_read_timestamp:
            Executes all reads at a timestamp >= ``min_read_timestamp``.
            This is useful for requesting fresher data than some previous
            read, or data that is fresh enough to observe the effects of
            some previously committed transaction whose timestamp is
            known.  Note that this option can only be used in single-use
            transactions.  A timestamp in RFC3339 UTC "Zulu" format,
            accurate to nanoseconds. Example:
            ``"2014-10-02T15:01:23.045123456Z"``.
        max_staleness:
            Read data at a timestamp >= ``NOW - max_staleness`` seconds.
            Guarantees that all writes that have committed more than the
            specified number of seconds ago are visible. Because Cloud
            Spanner chooses the exact timestamp, this mode works even if
            the client's local clock is substantially skewed from Cloud
            Spanner commit timestamps.  Useful for reading the freshest
            data available at a nearby replica, while bounding the
            possible staleness if the local replica has fallen behind.
            Note that this option can only be used in single-use
            transactions.
        read_timestamp:
            Executes all reads at the given timestamp. Unlike other modes,
            reads at a specific timestamp are repeatable; the same read at
            the same timestamp always returns the same data. If the
            timestamp is in the future, the read will block until the
            specified timestamp, modulo the read's deadline.  Useful for
            large scale consistent reads such as mapreduces, or for
            coordinating many reads against a consistent snapshot of the
            data.  A timestamp in RFC3339 UTC "Zulu" format, accurate to
            nanoseconds. Example: ``"2014-10-02T15:01:23.045123456Z"``.
        exact_staleness:
            Executes all reads at a timestamp that is ``exact_staleness``
            old. The timestamp is chosen soon after the read is started.
            Guarantees that all writes that have committed more than the
            specified number of seconds ago are visible. Because Cloud
            Spanner chooses the exact timestamp, this mode works even if
            the client's local clock is substantially skewed from Cloud
            Spanner commit timestamps.  Useful for reading at nearby
            replicas without the distributed timestamp negotiation
            overhead of ``max_staleness``.
        return_read_timestamp:
            If true, the Cloud Spanner-selected read timestamp is included
            in the [Transaction][google.spanner.v1.Transaction] message
            that describes the transaction.
    """,
    # @@protoc_insertion_point(class_scope:google.spanner.v1.TransactionOptions.ReadOnly)
    ))
  ,
  DESCRIPTOR = _TRANSACTIONOPTIONS,
  __module__ = 'google.cloud.spanner_v1.proto.transaction_pb2'
  ,
  __doc__ = """


  Attributes:
      mode:
          Required. The type of transaction.
      read_write:
          Transaction may write.  Authorization to begin a read-write
          transaction requires
          ``spanner.databases.beginOrRollbackReadWriteTransaction``
          permission on the ``session`` resource.
      read_only:
          Transaction will not write.  Authorization to begin a read-
          only transaction requires
          ``spanner.databases.beginReadOnlyTransaction`` permission on
          the ``session`` resource.
  """,
  # @@protoc_insertion_point(class_scope:google.spanner.v1.TransactionOptions)
  ))
_sym_db.RegisterMessage(TransactionOptions)
_sym_db.RegisterMessage(TransactionOptions.ReadWrite)
_sym_db.RegisterMessage(TransactionOptions.ReadOnly)

Transaction = _reflection.GeneratedProtocolMessageType('Transaction', (_message.Message,), dict(
  DESCRIPTOR = _TRANSACTION,
  __module__ = 'google.cloud.spanner_v1.proto.transaction_pb2'
  ,
  __doc__ = """A transaction. See :ref:`spanner-txn` for more information.


  Attributes:
      id:
          ``id`` may be used to identify the transaction in subsequent
          [Read][google.spanner.v1.Spanner.Read],
          [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql],
          [Commit][google.spanner.v1.Spanner.Commit], or
          [Rollback][google.spanner.v1.Spanner.Rollback] calls.  Single-
          use read-only transactions do not have IDs, because single-use
          transactions do not support multiple requests.
      read_timestamp:
          For snapshot read-only transactions, the read timestamp chosen
          for the transaction. Not returned by default: see [Transaction
          Options.ReadOnly.return\_read\_timestamp][google.spanner.v1.Tr
          ansactionOptions.ReadOnly.return\_read\_timestamp].  A
          timestamp in RFC3339 UTC "Zulu" format, accurate to
          nanoseconds. Example: ``"2014-10-02T15:01:23.045123456Z"``.
  """,
  # @@protoc_insertion_point(class_scope:google.spanner.v1.Transaction)
  ))
_sym_db.RegisterMessage(Transaction)

TransactionSelector = _reflection.GeneratedProtocolMessageType('TransactionSelector', (_message.Message,), dict(
  DESCRIPTOR = _TRANSACTIONSELECTOR,
  __module__ = 'google.cloud.spanner_v1.proto.transaction_pb2'
  ,
  __doc__ = """This message is used to select the transaction in which a
  [Read][google.spanner.v1.Spanner.Read] or
  [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] call runs.

  See [TransactionOptions][google.spanner.v1.TransactionOptions] for more
  information about transactions.


  Attributes:
      selector:
          If no fields are set, the default is a single use transaction
          with strong concurrency.
      single_use:
          Execute the read or SQL query in a temporary transaction. This
          is the most efficient way to execute a transaction that
          consists of a single SQL query.
      id:
          Execute the read or SQL query in a previously-started
          transaction.
      begin:
          Begin a new transaction and execute this read or SQL query in
          it. The transaction ID of the new transaction is returned in [
          ResultSetMetadata.transaction][google.spanner.v1.ResultSetMeta
          data.transaction], which is a
          [Transaction][google.spanner.v1.Transaction].
  """,
  # @@protoc_insertion_point(class_scope:google.spanner.v1.TransactionSelector)
  ))
_sym_db.RegisterMessage(TransactionSelector)


DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\025com.google.spanner.v1B\020TransactionProtoP\001Z8google.golang.org/genproto/googleapis/spanner/v1;spanner\252\002\027Google.Cloud.Spanner.V1\312\002\027Google\\Cloud\\Spanner\\V1'))
try:
  # THESE ELEMENTS WILL BE DEPRECATED.
  # Please use the generated *_pb2_grpc.py files instead.
  import grpc
  from grpc.beta import implementations as beta_implementations
  from grpc.beta import interfaces as beta_interfaces
  from grpc.framework.common import cardinality
  from grpc.framework.interfaces.face import utilities as face_utilities
except ImportError:
  pass
# @@protoc_insertion_point(module_scope)
