# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: google/cloud/spanner_v1/proto/spanner.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.api import auth_pb2 as google_dot_api_dot_auth__pb2
from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2
from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
from google.cloud.spanner_v1.proto import keys_pb2 as google_dot_cloud_dot_spanner__v1_dot_proto_dot_keys__pb2
from google.cloud.spanner_v1.proto import mutation_pb2 as google_dot_cloud_dot_spanner__v1_dot_proto_dot_mutation__pb2
from google.cloud.spanner_v1.proto import result_set_pb2 as google_dot_cloud_dot_spanner__v1_dot_proto_dot_result__set__pb2
from google.cloud.spanner_v1.proto import transaction_pb2 as google_dot_cloud_dot_spanner__v1_dot_proto_dot_transaction__pb2
from google.cloud.spanner_v1.proto import type_pb2 as google_dot_cloud_dot_spanner__v1_dot_proto_dot_type__pb2


DESCRIPTOR = _descriptor.FileDescriptor(
  name='google/cloud/spanner_v1/proto/spanner.proto',
  package='google.spanner.v1',
  syntax='proto3',
  serialized_pb=_b('\n+google/cloud/spanner_v1/proto/spanner.proto\x12\x11google.spanner.v1\x1a\x1cgoogle/api/annotations.proto\x1a\x15google/api/auth.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a(google/cloud/spanner_v1/proto/keys.proto\x1a,google/cloud/spanner_v1/proto/mutation.proto\x1a.google/cloud/spanner_v1/proto/result_set.proto\x1a/google/cloud/spanner_v1/proto/transaction.proto\x1a(google/cloud/spanner_v1/proto/type.proto\"(\n\x14\x43reateSessionRequest\x12\x10\n\x08\x64\x61tabase\x18\x01 \x01(\t\"\x17\n\x07Session\x12\x0c\n\x04name\x18\x01 \x01(\t\"!\n\x11GetSessionRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"$\n\x14\x44\x65leteSessionRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\xb8\x03\n\x11\x45xecuteSqlRequest\x12\x0f\n\x07session\x18\x01 \x01(\t\x12;\n\x0btransaction\x18\x02 \x01(\x0b\x32&.google.spanner.v1.TransactionSelector\x12\x0b\n\x03sql\x18\x03 \x01(\t\x12\'\n\x06params\x18\x04 \x01(\x0b\x32\x17.google.protobuf.Struct\x12I\n\x0bparam_types\x18\x05 \x03(\x0b\x32\x34.google.spanner.v1.ExecuteSqlRequest.ParamTypesEntry\x12\x14\n\x0cresume_token\x18\x06 \x01(\x0c\x12\x42\n\nquery_mode\x18\x07 \x01(\x0e\x32..google.spanner.v1.ExecuteSqlRequest.QueryMode\x1aJ\n\x0fParamTypesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.google.spanner.v1.Type:\x02\x38\x01\".\n\tQueryMode\x12\n\n\x06NORMAL\x10\x00\x12\x08\n\x04PLAN\x10\x01\x12\x0b\n\x07PROFILE\x10\x02\"\xdb\x01\n\x0bReadRequest\x12\x0f\n\x07session\x18\x01 \x01(\t\x12;\n\x0btransaction\x18\x02 \x01(\x0b\x32&.google.spanner.v1.TransactionSelector\x12\r\n\x05table\x18\x03 \x01(\t\x12\r\n\x05index\x18\x04 \x01(\t\x12\x0f\n\x07\x63olumns\x18\x05 \x03(\t\x12*\n\x07key_set\x18\x06 \x01(\x0b\x32\x19.google.spanner.v1.KeySet\x12\r\n\x05limit\x18\x08 \x01(\x03\x12\x14\n\x0cresume_token\x18\t \x01(\x0c\"b\n\x17\x42\x65ginTransactionRequest\x12\x0f\n\x07session\x18\x01 \x01(\t\x12\x36\n\x07options\x18\x02 \x01(\x0b\x32%.google.spanner.v1.TransactionOptions\"\xc2\x01\n\rCommitRequest\x12\x0f\n\x07session\x18\x01 \x01(\t\x12\x18\n\x0etransaction_id\x18\x02 \x01(\x0cH\x00\x12G\n\x16single_use_transaction\x18\x03 \x01(\x0b\x32%.google.spanner.v1.TransactionOptionsH\x00\x12.\n\tmutations\x18\x04 \x03(\x0b\x32\x1b.google.spanner.v1.MutationB\r\n\x0btransaction\"F\n\x0e\x43ommitResponse\x12\x34\n\x10\x63ommit_timestamp\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\":\n\x0fRollbackRequest\x12\x0f\n\x07session\x18\x01 \x01(\t\x12\x16\n\x0etransaction_id\x18\x02 \x01(\x0c\x32\xe9\x0c\n\x07Spanner\x12\x98\x01\n\rCreateSession\x12\'.google.spanner.v1.CreateSessionRequest\x1a\x1a.google.spanner.v1.Session\"B\x82\xd3\xe4\x93\x02<\":/v1/{database=projects/*/instances/*/databases/*}/sessions\x12\x90\x01\n\nGetSession\x12$.google.spanner.v1.GetSessionRequest\x1a\x1a.google.spanner.v1.Session\"@\x82\xd3\xe4\x93\x02:\x12\x38/v1/{name=projects/*/instances/*/databases/*/sessions/*}\x12\x92\x01\n\rDeleteSession\x12\'.google.spanner.v1.DeleteSessionRequest\x1a\x16.google.protobuf.Empty\"@\x82\xd3\xe4\x93\x02:*8/v1/{name=projects/*/instances/*/databases/*/sessions/*}\x12\xa3\x01\n\nExecuteSql\x12$.google.spanner.v1.ExecuteSqlRequest\x1a\x1c.google.spanner.v1.ResultSet\"Q\x82\xd3\xe4\x93\x02K\"F/v1/{session=projects/*/instances/*/databases/*/sessions/*}:executeSql:\x01*\x12\xbe\x01\n\x13\x45xecuteStreamingSql\x12$.google.spanner.v1.ExecuteSqlRequest\x1a#.google.spanner.v1.PartialResultSet\"Z\x82\xd3\xe4\x93\x02T\"O/v1/{session=projects/*/instances/*/databases/*/sessions/*}:executeStreamingSql:\x01*0\x01\x12\x91\x01\n\x04Read\x12\x1e.google.spanner.v1.ReadRequest\x1a\x1c.google.spanner.v1.ResultSet\"K\x82\xd3\xe4\x93\x02\x45\"@/v1/{session=projects/*/instances/*/databases/*/sessions/*}:read:\x01*\x12\xac\x01\n\rStreamingRead\x12\x1e.google.spanner.v1.ReadRequest\x1a#.google.spanner.v1.PartialResultSet\"T\x82\xd3\xe4\x93\x02N\"I/v1/{session=projects/*/instances/*/databases/*/sessions/*}:streamingRead:\x01*0\x01\x12\xb7\x01\n\x10\x42\x65ginTransaction\x12*.google.spanner.v1.BeginTransactionRequest\x1a\x1e.google.spanner.v1.Transaction\"W\x82\xd3\xe4\x93\x02Q\"L/v1/{session=projects/*/instances/*/databases/*/sessions/*}:beginTransaction:\x01*\x12\x9c\x01\n\x06\x43ommit\x12 .google.spanner.v1.CommitRequest\x1a!.google.spanner.v1.CommitResponse\"M\x82\xd3\xe4\x93\x02G\"B/v1/{session=projects/*/instances/*/databases/*/sessions/*}:commit:\x01*\x12\x97\x01\n\x08Rollback\x12\".google.spanner.v1.RollbackRequest\x1a\x16.google.protobuf.Empty\"O\x82\xd3\xe4\x93\x02I\"D/v1/{session=projects/*/instances/*/databases/*/sessions/*}:rollback:\x01*B{\n\x15\x63om.google.spanner.v1B\x0cSpannerProtoP\x01Z8google.golang.org/genproto/googleapis/spanner/v1;spanner\xaa\x02\x17Google.Cloud.Spanner.V1b\x06proto3')
  ,
  dependencies=[google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_api_dot_auth__pb2.DESCRIPTOR,google_dot_protobuf_dot_empty__pb2.DESCRIPTOR,google_dot_protobuf_dot_struct__pb2.DESCRIPTOR,google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,google_dot_cloud_dot_spanner__v1_dot_proto_dot_keys__pb2.DESCRIPTOR,google_dot_cloud_dot_spanner__v1_dot_proto_dot_mutation__pb2.DESCRIPTOR,google_dot_cloud_dot_spanner__v1_dot_proto_dot_result__set__pb2.DESCRIPTOR,google_dot_cloud_dot_spanner__v1_dot_proto_dot_transaction__pb2.DESCRIPTOR,google_dot_cloud_dot_spanner__v1_dot_proto_dot_type__pb2.DESCRIPTOR,])
_sym_db.RegisterFileDescriptor(DESCRIPTOR)



_EXECUTESQLREQUEST_QUERYMODE = _descriptor.EnumDescriptor(
  name='QueryMode',
  full_name='google.spanner.v1.ExecuteSqlRequest.QueryMode',
  filename=None,
  file=DESCRIPTOR,
  values=[
    _descriptor.EnumValueDescriptor(
      name='NORMAL', index=0, number=0,
      options=None,
      type=None),
    _descriptor.EnumValueDescriptor(
      name='PLAN', index=1, number=1,
      options=None,
      type=None),
    _descriptor.EnumValueDescriptor(
      name='PROFILE', index=2, number=2,
      options=None,
      type=None),
  ],
  containing_type=None,
  options=None,
  serialized_start=973,
  serialized_end=1019,
)
_sym_db.RegisterEnumDescriptor(_EXECUTESQLREQUEST_QUERYMODE)


_CREATESESSIONREQUEST = _descriptor.Descriptor(
  name='CreateSessionRequest',
  full_name='google.spanner.v1.CreateSessionRequest',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='database', full_name='google.spanner.v1.CreateSessionRequest.database', index=0,
      number=1, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      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=438,
  serialized_end=478,
)


_SESSION = _descriptor.Descriptor(
  name='Session',
  full_name='google.spanner.v1.Session',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='name', full_name='google.spanner.v1.Session.name', index=0,
      number=1, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      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=480,
  serialized_end=503,
)


_GETSESSIONREQUEST = _descriptor.Descriptor(
  name='GetSessionRequest',
  full_name='google.spanner.v1.GetSessionRequest',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='name', full_name='google.spanner.v1.GetSessionRequest.name', index=0,
      number=1, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      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=505,
  serialized_end=538,
)


_DELETESESSIONREQUEST = _descriptor.Descriptor(
  name='DeleteSessionRequest',
  full_name='google.spanner.v1.DeleteSessionRequest',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='name', full_name='google.spanner.v1.DeleteSessionRequest.name', index=0,
      number=1, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      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=540,
  serialized_end=576,
)


_EXECUTESQLREQUEST_PARAMTYPESENTRY = _descriptor.Descriptor(
  name='ParamTypesEntry',
  full_name='google.spanner.v1.ExecuteSqlRequest.ParamTypesEntry',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='key', full_name='google.spanner.v1.ExecuteSqlRequest.ParamTypesEntry.key', index=0,
      number=1, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='value', full_name='google.spanner.v1.ExecuteSqlRequest.ParamTypesEntry.value', 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=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')),
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=897,
  serialized_end=971,
)

_EXECUTESQLREQUEST = _descriptor.Descriptor(
  name='ExecuteSqlRequest',
  full_name='google.spanner.v1.ExecuteSqlRequest',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='session', full_name='google.spanner.v1.ExecuteSqlRequest.session', index=0,
      number=1, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='transaction', full_name='google.spanner.v1.ExecuteSqlRequest.transaction', 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='sql', full_name='google.spanner.v1.ExecuteSqlRequest.sql', index=2,
      number=3, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='params', full_name='google.spanner.v1.ExecuteSqlRequest.params', 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='param_types', full_name='google.spanner.v1.ExecuteSqlRequest.param_types', index=4,
      number=5, type=11, cpp_type=10, label=3,
      has_default_value=False, default_value=[],
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='resume_token', full_name='google.spanner.v1.ExecuteSqlRequest.resume_token', index=5,
      number=6, 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='query_mode', full_name='google.spanner.v1.ExecuteSqlRequest.query_mode', index=6,
      number=7, type=14, cpp_type=8, label=1,
      has_default_value=False, default_value=0,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
  ],
  extensions=[
  ],
  nested_types=[_EXECUTESQLREQUEST_PARAMTYPESENTRY, ],
  enum_types=[
    _EXECUTESQLREQUEST_QUERYMODE,
  ],
  options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=579,
  serialized_end=1019,
)


_READREQUEST = _descriptor.Descriptor(
  name='ReadRequest',
  full_name='google.spanner.v1.ReadRequest',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='session', full_name='google.spanner.v1.ReadRequest.session', index=0,
      number=1, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='transaction', full_name='google.spanner.v1.ReadRequest.transaction', 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='table', full_name='google.spanner.v1.ReadRequest.table', index=2,
      number=3, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='index', full_name='google.spanner.v1.ReadRequest.index', index=3,
      number=4, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='columns', full_name='google.spanner.v1.ReadRequest.columns', index=4,
      number=5, type=9, cpp_type=9, label=3,
      has_default_value=False, default_value=[],
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='key_set', full_name='google.spanner.v1.ReadRequest.key_set', index=5,
      number=6, 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='limit', full_name='google.spanner.v1.ReadRequest.limit', index=6,
      number=8, type=3, cpp_type=2, label=1,
      has_default_value=False, default_value=0,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='resume_token', full_name='google.spanner.v1.ReadRequest.resume_token', index=7,
      number=9, 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),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=1022,
  serialized_end=1241,
)


_BEGINTRANSACTIONREQUEST = _descriptor.Descriptor(
  name='BeginTransactionRequest',
  full_name='google.spanner.v1.BeginTransactionRequest',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='session', full_name='google.spanner.v1.BeginTransactionRequest.session', index=0,
      number=1, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='options', full_name='google.spanner.v1.BeginTransactionRequest.options', 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=1243,
  serialized_end=1341,
)


_COMMITREQUEST = _descriptor.Descriptor(
  name='CommitRequest',
  full_name='google.spanner.v1.CommitRequest',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='session', full_name='google.spanner.v1.CommitRequest.session', index=0,
      number=1, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='transaction_id', full_name='google.spanner.v1.CommitRequest.transaction_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='single_use_transaction', full_name='google.spanner.v1.CommitRequest.single_use_transaction', 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='mutations', full_name='google.spanner.v1.CommitRequest.mutations', index=3,
      number=4, type=11, cpp_type=10, label=3,
      has_default_value=False, default_value=[],
      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='transaction', full_name='google.spanner.v1.CommitRequest.transaction',
      index=0, containing_type=None, fields=[]),
  ],
  serialized_start=1344,
  serialized_end=1538,
)


_COMMITRESPONSE = _descriptor.Descriptor(
  name='CommitResponse',
  full_name='google.spanner.v1.CommitResponse',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='commit_timestamp', full_name='google.spanner.v1.CommitResponse.commit_timestamp', 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),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=1540,
  serialized_end=1610,
)


_ROLLBACKREQUEST = _descriptor.Descriptor(
  name='RollbackRequest',
  full_name='google.spanner.v1.RollbackRequest',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='session', full_name='google.spanner.v1.RollbackRequest.session', index=0,
      number=1, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='transaction_id', full_name='google.spanner.v1.RollbackRequest.transaction_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),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=1612,
  serialized_end=1670,
)

_EXECUTESQLREQUEST_PARAMTYPESENTRY.fields_by_name['value'].message_type = google_dot_cloud_dot_spanner__v1_dot_proto_dot_type__pb2._TYPE
_EXECUTESQLREQUEST_PARAMTYPESENTRY.containing_type = _EXECUTESQLREQUEST
_EXECUTESQLREQUEST.fields_by_name['transaction'].message_type = google_dot_cloud_dot_spanner__v1_dot_proto_dot_transaction__pb2._TRANSACTIONSELECTOR
_EXECUTESQLREQUEST.fields_by_name['params'].message_type = google_dot_protobuf_dot_struct__pb2._STRUCT
_EXECUTESQLREQUEST.fields_by_name['param_types'].message_type = _EXECUTESQLREQUEST_PARAMTYPESENTRY
_EXECUTESQLREQUEST.fields_by_name['query_mode'].enum_type = _EXECUTESQLREQUEST_QUERYMODE
_EXECUTESQLREQUEST_QUERYMODE.containing_type = _EXECUTESQLREQUEST
_READREQUEST.fields_by_name['transaction'].message_type = google_dot_cloud_dot_spanner__v1_dot_proto_dot_transaction__pb2._TRANSACTIONSELECTOR
_READREQUEST.fields_by_name['key_set'].message_type = google_dot_cloud_dot_spanner__v1_dot_proto_dot_keys__pb2._KEYSET
_BEGINTRANSACTIONREQUEST.fields_by_name['options'].message_type = google_dot_cloud_dot_spanner__v1_dot_proto_dot_transaction__pb2._TRANSACTIONOPTIONS
_COMMITREQUEST.fields_by_name['single_use_transaction'].message_type = google_dot_cloud_dot_spanner__v1_dot_proto_dot_transaction__pb2._TRANSACTIONOPTIONS
_COMMITREQUEST.fields_by_name['mutations'].message_type = google_dot_cloud_dot_spanner__v1_dot_proto_dot_mutation__pb2._MUTATION
_COMMITREQUEST.oneofs_by_name['transaction'].fields.append(
  _COMMITREQUEST.fields_by_name['transaction_id'])
_COMMITREQUEST.fields_by_name['transaction_id'].containing_oneof = _COMMITREQUEST.oneofs_by_name['transaction']
_COMMITREQUEST.oneofs_by_name['transaction'].fields.append(
  _COMMITREQUEST.fields_by_name['single_use_transaction'])
_COMMITREQUEST.fields_by_name['single_use_transaction'].containing_oneof = _COMMITREQUEST.oneofs_by_name['transaction']
_COMMITRESPONSE.fields_by_name['commit_timestamp'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
DESCRIPTOR.message_types_by_name['CreateSessionRequest'] = _CREATESESSIONREQUEST
DESCRIPTOR.message_types_by_name['Session'] = _SESSION
DESCRIPTOR.message_types_by_name['GetSessionRequest'] = _GETSESSIONREQUEST
DESCRIPTOR.message_types_by_name['DeleteSessionRequest'] = _DELETESESSIONREQUEST
DESCRIPTOR.message_types_by_name['ExecuteSqlRequest'] = _EXECUTESQLREQUEST
DESCRIPTOR.message_types_by_name['ReadRequest'] = _READREQUEST
DESCRIPTOR.message_types_by_name['BeginTransactionRequest'] = _BEGINTRANSACTIONREQUEST
DESCRIPTOR.message_types_by_name['CommitRequest'] = _COMMITREQUEST
DESCRIPTOR.message_types_by_name['CommitResponse'] = _COMMITRESPONSE
DESCRIPTOR.message_types_by_name['RollbackRequest'] = _ROLLBACKREQUEST

CreateSessionRequest = _reflection.GeneratedProtocolMessageType('CreateSessionRequest', (_message.Message,), dict(
  DESCRIPTOR = _CREATESESSIONREQUEST,
  __module__ = 'google.cloud.spanner_v1.proto.spanner_pb2'
  ,
  __doc__ = """The request for
  [CreateSession][google.spanner.v1.Spanner.CreateSession].
  
  
  Attributes:
      database:
          Required. The database in which the new session is created.
  """,
  # @@protoc_insertion_point(class_scope:google.spanner.v1.CreateSessionRequest)
  ))
_sym_db.RegisterMessage(CreateSessionRequest)

Session = _reflection.GeneratedProtocolMessageType('Session', (_message.Message,), dict(
  DESCRIPTOR = _SESSION,
  __module__ = 'google.cloud.spanner_v1.proto.spanner_pb2'
  ,
  __doc__ = """A session in the Cloud Spanner API.
  
  
  Attributes:
      name:
          Required. The name of the session.
  """,
  # @@protoc_insertion_point(class_scope:google.spanner.v1.Session)
  ))
_sym_db.RegisterMessage(Session)

GetSessionRequest = _reflection.GeneratedProtocolMessageType('GetSessionRequest', (_message.Message,), dict(
  DESCRIPTOR = _GETSESSIONREQUEST,
  __module__ = 'google.cloud.spanner_v1.proto.spanner_pb2'
  ,
  __doc__ = """The request for [GetSession][google.spanner.v1.Spanner.GetSession].
  
  
  Attributes:
      name:
          Required. The name of the session to retrieve.
  """,
  # @@protoc_insertion_point(class_scope:google.spanner.v1.GetSessionRequest)
  ))
_sym_db.RegisterMessage(GetSessionRequest)

DeleteSessionRequest = _reflection.GeneratedProtocolMessageType('DeleteSessionRequest', (_message.Message,), dict(
  DESCRIPTOR = _DELETESESSIONREQUEST,
  __module__ = 'google.cloud.spanner_v1.proto.spanner_pb2'
  ,
  __doc__ = """The request for
  [DeleteSession][google.spanner.v1.Spanner.DeleteSession].
  
  
  Attributes:
      name:
          Required. The name of the session to delete.
  """,
  # @@protoc_insertion_point(class_scope:google.spanner.v1.DeleteSessionRequest)
  ))
_sym_db.RegisterMessage(DeleteSessionRequest)

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

  ParamTypesEntry = _reflection.GeneratedProtocolMessageType('ParamTypesEntry', (_message.Message,), dict(
    DESCRIPTOR = _EXECUTESQLREQUEST_PARAMTYPESENTRY,
    __module__ = 'google.cloud.spanner_v1.proto.spanner_pb2'
    # @@protoc_insertion_point(class_scope:google.spanner.v1.ExecuteSqlRequest.ParamTypesEntry)
    ))
  ,
  DESCRIPTOR = _EXECUTESQLREQUEST,
  __module__ = 'google.cloud.spanner_v1.proto.spanner_pb2'
  ,
  __doc__ = """The request for [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] and
  [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql].
  
  
  Attributes:
      session:
          Required. The session in which the SQL query should be
          performed.
      transaction:
          The transaction to use. If none is provided, the default is a
          temporary read-only transaction with strong concurrency.
      sql:
          Required. The SQL query string.
      params:
          The SQL query string can contain parameter placeholders. A
          parameter placeholder consists of ``'@'`` followed by the
          parameter name. Parameter names consist of any combination of
          letters, numbers, and underscores.  Parameters can appear
          anywhere that a literal value is expected. The same parameter
          name can be used more than once, for example: ``"WHERE id >
          @msg_id AND id < @msg_id + 100"``  It is an error to execute
          an SQL query with unbound parameters.  Parameter values are
          specified using ``params``, which is a JSON object whose keys
          are parameter names, and whose values are the corresponding
          parameter values.
      param_types:
          It is not always possible for Cloud Spanner to infer the right
          SQL type from a JSON value. For example, values of type
          ``BYTES`` and values of type ``STRING`` both appear in
          [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON
          strings.  In these cases, ``param_types`` can be used to
          specify the exact SQL type for some or all of the SQL query
          parameters. See the definition of
          [Type][google.spanner.v1.Type] for more information about SQL
          types.
      resume_token:
          If this request is resuming a previously interrupted SQL query
          execution, ``resume_token`` should be copied from the last
          [PartialResultSet][google.spanner.v1.PartialResultSet] yielded
          before the interruption. Doing this enables the new SQL query
          execution to resume where the last one left off. The rest of
          the request parameters must exactly match the request that
          yielded this token.
      query_mode:
          Used to control the amount of debugging information returned
          in [ResultSetStats][google.spanner.v1.ResultSetStats].
  """,
  # @@protoc_insertion_point(class_scope:google.spanner.v1.ExecuteSqlRequest)
  ))
_sym_db.RegisterMessage(ExecuteSqlRequest)
_sym_db.RegisterMessage(ExecuteSqlRequest.ParamTypesEntry)

ReadRequest = _reflection.GeneratedProtocolMessageType('ReadRequest', (_message.Message,), dict(
  DESCRIPTOR = _READREQUEST,
  __module__ = 'google.cloud.spanner_v1.proto.spanner_pb2'
  ,
  __doc__ = """The request for [Read][google.spanner.v1.Spanner.Read] and
  [StreamingRead][google.spanner.v1.Spanner.StreamingRead].
  
  
  Attributes:
      session:
          Required. The session in which the read should be performed.
      transaction:
          The transaction to use. If none is provided, the default is a
          temporary read-only transaction with strong concurrency.
      table:
          Required. The name of the table in the database to be read.
      index:
          If non-empty, the name of an index on
          [table][google.spanner.v1.ReadRequest.table]. This index is
          used instead of the table primary key when interpreting
          [key\_set][google.spanner.v1.ReadRequest.key\_set] and sorting
          result rows. See
          [key\_set][google.spanner.v1.ReadRequest.key\_set] for further
          information.
      columns:
          The columns of [table][google.spanner.v1.ReadRequest.table] to
          be returned for each row matching this request.
      key_set:
          Required. ``key_set`` identifies the rows to be yielded.
          ``key_set`` names the primary keys of the rows in
          [table][google.spanner.v1.ReadRequest.table] to be yielded,
          unless [index][google.spanner.v1.ReadRequest.index] is
          present. If [index][google.spanner.v1.ReadRequest.index] is
          present, then
          [key\_set][google.spanner.v1.ReadRequest.key\_set] instead
          names index keys in
          [index][google.spanner.v1.ReadRequest.index].  Rows are
          yielded in table primary key order (if
          [index][google.spanner.v1.ReadRequest.index] is empty) or
          index key order (if
          [index][google.spanner.v1.ReadRequest.index] is non-empty).
          It is not an error for the ``key_set`` to name rows that do
          not exist in the database. Read yields nothing for nonexistent
          rows.
      limit:
          If greater than zero, only the first ``limit`` rows are
          yielded. If ``limit`` is zero, the default is no limit.
      resume_token:
          If this request is resuming a previously interrupted read,
          ``resume_token`` should be copied from the last
          [PartialResultSet][google.spanner.v1.PartialResultSet] yielded
          before the interruption. Doing this enables the new read to
          resume where the last read left off. The rest of the request
          parameters must exactly match the request that yielded this
          token.
  """,
  # @@protoc_insertion_point(class_scope:google.spanner.v1.ReadRequest)
  ))
_sym_db.RegisterMessage(ReadRequest)

BeginTransactionRequest = _reflection.GeneratedProtocolMessageType('BeginTransactionRequest', (_message.Message,), dict(
  DESCRIPTOR = _BEGINTRANSACTIONREQUEST,
  __module__ = 'google.cloud.spanner_v1.proto.spanner_pb2'
  ,
  __doc__ = """The request for
  [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction].
  
  
  Attributes:
      session:
          Required. The session in which the transaction runs.
      options:
          Required. Options for the new transaction.
  """,
  # @@protoc_insertion_point(class_scope:google.spanner.v1.BeginTransactionRequest)
  ))
_sym_db.RegisterMessage(BeginTransactionRequest)

CommitRequest = _reflection.GeneratedProtocolMessageType('CommitRequest', (_message.Message,), dict(
  DESCRIPTOR = _COMMITREQUEST,
  __module__ = 'google.cloud.spanner_v1.proto.spanner_pb2'
  ,
  __doc__ = """The request for [Commit][google.spanner.v1.Spanner.Commit].
  
  
  Attributes:
      session:
          Required. The session in which the transaction to be committed
          is running.
      transaction:
          Required. The transaction in which to commit.
      transaction_id:
          Commit a previously-started transaction.
      single_use_transaction:
          Execute mutations in a temporary transaction. Note that unlike
          commit of a previously-started transaction, commit with a
          temporary transaction is non-idempotent. That is, if the
          ``CommitRequest`` is sent to Cloud Spanner more than once (for
          instance, due to retries in the application, or in the
          transport library), it is possible that the mutations are
          executed more than once. If this is undesirable, use
          [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction]
          and [Commit][google.spanner.v1.Spanner.Commit] instead.
      mutations:
          The mutations to be executed when this transaction commits.
          All mutations are applied atomically, in the order they appear
          in this list.
  """,
  # @@protoc_insertion_point(class_scope:google.spanner.v1.CommitRequest)
  ))
_sym_db.RegisterMessage(CommitRequest)

CommitResponse = _reflection.GeneratedProtocolMessageType('CommitResponse', (_message.Message,), dict(
  DESCRIPTOR = _COMMITRESPONSE,
  __module__ = 'google.cloud.spanner_v1.proto.spanner_pb2'
  ,
  __doc__ = """The response for [Commit][google.spanner.v1.Spanner.Commit].
  
  
  Attributes:
      commit_timestamp:
          The Cloud Spanner timestamp at which the transaction
          committed.
  """,
  # @@protoc_insertion_point(class_scope:google.spanner.v1.CommitResponse)
  ))
_sym_db.RegisterMessage(CommitResponse)

RollbackRequest = _reflection.GeneratedProtocolMessageType('RollbackRequest', (_message.Message,), dict(
  DESCRIPTOR = _ROLLBACKREQUEST,
  __module__ = 'google.cloud.spanner_v1.proto.spanner_pb2'
  ,
  __doc__ = """The request for [Rollback][google.spanner.v1.Spanner.Rollback].
  
  
  Attributes:
      session:
          Required. The session in which the transaction to roll back is
          running.
      transaction_id:
          Required. The transaction to roll back.
  """,
  # @@protoc_insertion_point(class_scope:google.spanner.v1.RollbackRequest)
  ))
_sym_db.RegisterMessage(RollbackRequest)


DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\025com.google.spanner.v1B\014SpannerProtoP\001Z8google.golang.org/genproto/googleapis/spanner/v1;spanner\252\002\027Google.Cloud.Spanner.V1'))
_EXECUTESQLREQUEST_PARAMTYPESENTRY.has_options = True
_EXECUTESQLREQUEST_PARAMTYPESENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001'))
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


  class SpannerStub(object):
    """Cloud Spanner API

    The Cloud Spanner API can be used to manage sessions and execute
    transactions on data stored in Cloud Spanner databases.
    """

    def __init__(self, channel):
      """Constructor.

      Args:
        channel: A grpc.Channel.
      """
      self.CreateSession = channel.unary_unary(
          '/google.spanner.v1.Spanner/CreateSession',
          request_serializer=CreateSessionRequest.SerializeToString,
          response_deserializer=Session.FromString,
          )
      self.GetSession = channel.unary_unary(
          '/google.spanner.v1.Spanner/GetSession',
          request_serializer=GetSessionRequest.SerializeToString,
          response_deserializer=Session.FromString,
          )
      self.DeleteSession = channel.unary_unary(
          '/google.spanner.v1.Spanner/DeleteSession',
          request_serializer=DeleteSessionRequest.SerializeToString,
          response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
          )
      self.ExecuteSql = channel.unary_unary(
          '/google.spanner.v1.Spanner/ExecuteSql',
          request_serializer=ExecuteSqlRequest.SerializeToString,
          response_deserializer=google_dot_cloud_dot_spanner__v1_dot_proto_dot_result__set__pb2.ResultSet.FromString,
          )
      self.ExecuteStreamingSql = channel.unary_stream(
          '/google.spanner.v1.Spanner/ExecuteStreamingSql',
          request_serializer=ExecuteSqlRequest.SerializeToString,
          response_deserializer=google_dot_cloud_dot_spanner__v1_dot_proto_dot_result__set__pb2.PartialResultSet.FromString,
          )
      self.Read = channel.unary_unary(
          '/google.spanner.v1.Spanner/Read',
          request_serializer=ReadRequest.SerializeToString,
          response_deserializer=google_dot_cloud_dot_spanner__v1_dot_proto_dot_result__set__pb2.ResultSet.FromString,
          )
      self.StreamingRead = channel.unary_stream(
          '/google.spanner.v1.Spanner/StreamingRead',
          request_serializer=ReadRequest.SerializeToString,
          response_deserializer=google_dot_cloud_dot_spanner__v1_dot_proto_dot_result__set__pb2.PartialResultSet.FromString,
          )
      self.BeginTransaction = channel.unary_unary(
          '/google.spanner.v1.Spanner/BeginTransaction',
          request_serializer=BeginTransactionRequest.SerializeToString,
          response_deserializer=google_dot_cloud_dot_spanner__v1_dot_proto_dot_transaction__pb2.Transaction.FromString,
          )
      self.Commit = channel.unary_unary(
          '/google.spanner.v1.Spanner/Commit',
          request_serializer=CommitRequest.SerializeToString,
          response_deserializer=CommitResponse.FromString,
          )
      self.Rollback = channel.unary_unary(
          '/google.spanner.v1.Spanner/Rollback',
          request_serializer=RollbackRequest.SerializeToString,
          response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
          )


  class SpannerServicer(object):
    """Cloud Spanner API

    The Cloud Spanner API can be used to manage sessions and execute
    transactions on data stored in Cloud Spanner databases.
    """

    def CreateSession(self, request, context):
      """Creates a new session. A session can be used to perform
      transactions that read and/or modify data in a Cloud Spanner database.
      Sessions are meant to be reused for many consecutive
      transactions.

      Sessions can only execute one transaction at a time. To execute
      multiple concurrent read-write/write-only transactions, create
      multiple sessions. Note that standalone reads and queries use a
      transaction internally, and count toward the one transaction
      limit.

      Cloud Spanner limits the number of sessions that can exist at any given
      time; thus, it is a good idea to delete idle and/or unneeded sessions.
      Aside from explicit deletes, Cloud Spanner can delete sessions for which no
      operations are sent for more than an hour. If a session is deleted,
      requests to it return `NOT_FOUND`.

      Idle sessions can be kept alive by sending a trivial SQL query
      periodically, e.g., `"SELECT 1"`.
      """
      context.set_code(grpc.StatusCode.UNIMPLEMENTED)
      context.set_details('Method not implemented!')
      raise NotImplementedError('Method not implemented!')

    def GetSession(self, request, context):
      """Gets a session. Returns `NOT_FOUND` if the session does not exist.
      This is mainly useful for determining whether a session is still
      alive.
      """
      context.set_code(grpc.StatusCode.UNIMPLEMENTED)
      context.set_details('Method not implemented!')
      raise NotImplementedError('Method not implemented!')

    def DeleteSession(self, request, context):
      """Ends a session, releasing server resources associated with it.
      """
      context.set_code(grpc.StatusCode.UNIMPLEMENTED)
      context.set_details('Method not implemented!')
      raise NotImplementedError('Method not implemented!')

    def ExecuteSql(self, request, context):
      """Executes an SQL query, returning all rows in a single reply. This
      method cannot be used to return a result set larger than 10 MiB;
      if the query yields more data than that, the query fails with
      a `FAILED_PRECONDITION` error.

      Queries inside read-write transactions might return `ABORTED`. If
      this occurs, the application should restart the transaction from
      the beginning. See [Transaction][google.spanner.v1.Transaction] for more details.

      Larger result sets can be fetched in streaming fashion by calling
      [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] instead.
      """
      context.set_code(grpc.StatusCode.UNIMPLEMENTED)
      context.set_details('Method not implemented!')
      raise NotImplementedError('Method not implemented!')

    def ExecuteStreamingSql(self, request, context):
      """Like [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], except returns the result
      set as a stream. Unlike [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], there
      is no limit on the size of the returned result set. However, no
      individual row in the result set can exceed 100 MiB, and no
      column value can exceed 10 MiB.
      """
      context.set_code(grpc.StatusCode.UNIMPLEMENTED)
      context.set_details('Method not implemented!')
      raise NotImplementedError('Method not implemented!')

    def Read(self, request, context):
      """Reads rows from the database using key lookups and scans, as a
      simple key/value style alternative to
      [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql].  This method cannot be used to
      return a result set larger than 10 MiB; if the read matches more
      data than that, the read fails with a `FAILED_PRECONDITION`
      error.

      Reads inside read-write transactions might return `ABORTED`. If
      this occurs, the application should restart the transaction from
      the beginning. See [Transaction][google.spanner.v1.Transaction] for more details.

      Larger result sets can be yielded in streaming fashion by calling
      [StreamingRead][google.spanner.v1.Spanner.StreamingRead] instead.
      """
      context.set_code(grpc.StatusCode.UNIMPLEMENTED)
      context.set_details('Method not implemented!')
      raise NotImplementedError('Method not implemented!')

    def StreamingRead(self, request, context):
      """Like [Read][google.spanner.v1.Spanner.Read], except returns the result set as a
      stream. Unlike [Read][google.spanner.v1.Spanner.Read], there is no limit on the
      size of the returned result set. However, no individual row in
      the result set can exceed 100 MiB, and no column value can exceed
      10 MiB.
      """
      context.set_code(grpc.StatusCode.UNIMPLEMENTED)
      context.set_details('Method not implemented!')
      raise NotImplementedError('Method not implemented!')

    def BeginTransaction(self, request, context):
      """Begins a new transaction. This step can often be skipped:
      [Read][google.spanner.v1.Spanner.Read], [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] and
      [Commit][google.spanner.v1.Spanner.Commit] can begin a new transaction as a
      side-effect.
      """
      context.set_code(grpc.StatusCode.UNIMPLEMENTED)
      context.set_details('Method not implemented!')
      raise NotImplementedError('Method not implemented!')

    def Commit(self, request, context):
      """Commits a transaction. The request includes the mutations to be
      applied to rows in the database.

      `Commit` might return an `ABORTED` error. This can occur at any time;
      commonly, the cause is conflicts with concurrent
      transactions. However, it can also happen for a variety of other
      reasons. If `Commit` returns `ABORTED`, the caller should re-attempt
      the transaction from the beginning, re-using the same session.
      """
      context.set_code(grpc.StatusCode.UNIMPLEMENTED)
      context.set_details('Method not implemented!')
      raise NotImplementedError('Method not implemented!')

    def Rollback(self, request, context):
      """Rolls back a transaction, releasing any locks it holds. It is a good
      idea to call this for any transaction that includes one or more
      [Read][google.spanner.v1.Spanner.Read] or [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] requests and
      ultimately decides not to commit.

      `Rollback` returns `OK` if it successfully aborts the transaction, the
      transaction was already aborted, or the transaction is not
      found. `Rollback` never returns `ABORTED`.
      """
      context.set_code(grpc.StatusCode.UNIMPLEMENTED)
      context.set_details('Method not implemented!')
      raise NotImplementedError('Method not implemented!')


  def add_SpannerServicer_to_server(servicer, server):
    rpc_method_handlers = {
        'CreateSession': grpc.unary_unary_rpc_method_handler(
            servicer.CreateSession,
            request_deserializer=CreateSessionRequest.FromString,
            response_serializer=Session.SerializeToString,
        ),
        'GetSession': grpc.unary_unary_rpc_method_handler(
            servicer.GetSession,
            request_deserializer=GetSessionRequest.FromString,
            response_serializer=Session.SerializeToString,
        ),
        'DeleteSession': grpc.unary_unary_rpc_method_handler(
            servicer.DeleteSession,
            request_deserializer=DeleteSessionRequest.FromString,
            response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
        ),
        'ExecuteSql': grpc.unary_unary_rpc_method_handler(
            servicer.ExecuteSql,
            request_deserializer=ExecuteSqlRequest.FromString,
            response_serializer=google_dot_cloud_dot_spanner__v1_dot_proto_dot_result__set__pb2.ResultSet.SerializeToString,
        ),
        'ExecuteStreamingSql': grpc.unary_stream_rpc_method_handler(
            servicer.ExecuteStreamingSql,
            request_deserializer=ExecuteSqlRequest.FromString,
            response_serializer=google_dot_cloud_dot_spanner__v1_dot_proto_dot_result__set__pb2.PartialResultSet.SerializeToString,
        ),
        'Read': grpc.unary_unary_rpc_method_handler(
            servicer.Read,
            request_deserializer=ReadRequest.FromString,
            response_serializer=google_dot_cloud_dot_spanner__v1_dot_proto_dot_result__set__pb2.ResultSet.SerializeToString,
        ),
        'StreamingRead': grpc.unary_stream_rpc_method_handler(
            servicer.StreamingRead,
            request_deserializer=ReadRequest.FromString,
            response_serializer=google_dot_cloud_dot_spanner__v1_dot_proto_dot_result__set__pb2.PartialResultSet.SerializeToString,
        ),
        'BeginTransaction': grpc.unary_unary_rpc_method_handler(
            servicer.BeginTransaction,
            request_deserializer=BeginTransactionRequest.FromString,
            response_serializer=google_dot_cloud_dot_spanner__v1_dot_proto_dot_transaction__pb2.Transaction.SerializeToString,
        ),
        'Commit': grpc.unary_unary_rpc_method_handler(
            servicer.Commit,
            request_deserializer=CommitRequest.FromString,
            response_serializer=CommitResponse.SerializeToString,
        ),
        'Rollback': grpc.unary_unary_rpc_method_handler(
            servicer.Rollback,
            request_deserializer=RollbackRequest.FromString,
            response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
        ),
    }
    generic_handler = grpc.method_handlers_generic_handler(
        'google.spanner.v1.Spanner', rpc_method_handlers)
    server.add_generic_rpc_handlers((generic_handler,))


  class BetaSpannerServicer(object):
    """The Beta API is deprecated for 0.15.0 and later.

    It is recommended to use the GA API (classes and functions in this
    file not marked beta) for all further purposes. This class was generated
    only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0."""
    """Cloud Spanner API

    The Cloud Spanner API can be used to manage sessions and execute
    transactions on data stored in Cloud Spanner databases.
    """
    def CreateSession(self, request, context):
      """Creates a new session. A session can be used to perform
      transactions that read and/or modify data in a Cloud Spanner database.
      Sessions are meant to be reused for many consecutive
      transactions.

      Sessions can only execute one transaction at a time. To execute
      multiple concurrent read-write/write-only transactions, create
      multiple sessions. Note that standalone reads and queries use a
      transaction internally, and count toward the one transaction
      limit.

      Cloud Spanner limits the number of sessions that can exist at any given
      time; thus, it is a good idea to delete idle and/or unneeded sessions.
      Aside from explicit deletes, Cloud Spanner can delete sessions for which no
      operations are sent for more than an hour. If a session is deleted,
      requests to it return `NOT_FOUND`.

      Idle sessions can be kept alive by sending a trivial SQL query
      periodically, e.g., `"SELECT 1"`.
      """
      context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
    def GetSession(self, request, context):
      """Gets a session. Returns `NOT_FOUND` if the session does not exist.
      This is mainly useful for determining whether a session is still
      alive.
      """
      context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
    def DeleteSession(self, request, context):
      """Ends a session, releasing server resources associated with it.
      """
      context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
    def ExecuteSql(self, request, context):
      """Executes an SQL query, returning all rows in a single reply. This
      method cannot be used to return a result set larger than 10 MiB;
      if the query yields more data than that, the query fails with
      a `FAILED_PRECONDITION` error.

      Queries inside read-write transactions might return `ABORTED`. If
      this occurs, the application should restart the transaction from
      the beginning. See [Transaction][google.spanner.v1.Transaction] for more details.

      Larger result sets can be fetched in streaming fashion by calling
      [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] instead.
      """
      context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
    def ExecuteStreamingSql(self, request, context):
      """Like [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], except returns the result
      set as a stream. Unlike [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], there
      is no limit on the size of the returned result set. However, no
      individual row in the result set can exceed 100 MiB, and no
      column value can exceed 10 MiB.
      """
      context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
    def Read(self, request, context):
      """Reads rows from the database using key lookups and scans, as a
      simple key/value style alternative to
      [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql].  This method cannot be used to
      return a result set larger than 10 MiB; if the read matches more
      data than that, the read fails with a `FAILED_PRECONDITION`
      error.

      Reads inside read-write transactions might return `ABORTED`. If
      this occurs, the application should restart the transaction from
      the beginning. See [Transaction][google.spanner.v1.Transaction] for more details.

      Larger result sets can be yielded in streaming fashion by calling
      [StreamingRead][google.spanner.v1.Spanner.StreamingRead] instead.
      """
      context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
    def StreamingRead(self, request, context):
      """Like [Read][google.spanner.v1.Spanner.Read], except returns the result set as a
      stream. Unlike [Read][google.spanner.v1.Spanner.Read], there is no limit on the
      size of the returned result set. However, no individual row in
      the result set can exceed 100 MiB, and no column value can exceed
      10 MiB.
      """
      context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
    def BeginTransaction(self, request, context):
      """Begins a new transaction. This step can often be skipped:
      [Read][google.spanner.v1.Spanner.Read], [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] and
      [Commit][google.spanner.v1.Spanner.Commit] can begin a new transaction as a
      side-effect.
      """
      context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
    def Commit(self, request, context):
      """Commits a transaction. The request includes the mutations to be
      applied to rows in the database.

      `Commit` might return an `ABORTED` error. This can occur at any time;
      commonly, the cause is conflicts with concurrent
      transactions. However, it can also happen for a variety of other
      reasons. If `Commit` returns `ABORTED`, the caller should re-attempt
      the transaction from the beginning, re-using the same session.
      """
      context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
    def Rollback(self, request, context):
      """Rolls back a transaction, releasing any locks it holds. It is a good
      idea to call this for any transaction that includes one or more
      [Read][google.spanner.v1.Spanner.Read] or [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] requests and
      ultimately decides not to commit.

      `Rollback` returns `OK` if it successfully aborts the transaction, the
      transaction was already aborted, or the transaction is not
      found. `Rollback` never returns `ABORTED`.
      """
      context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)


  class BetaSpannerStub(object):
    """The Beta API is deprecated for 0.15.0 and later.

    It is recommended to use the GA API (classes and functions in this
    file not marked beta) for all further purposes. This class was generated
    only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0."""
    """Cloud Spanner API

    The Cloud Spanner API can be used to manage sessions and execute
    transactions on data stored in Cloud Spanner databases.
    """
    def CreateSession(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
      """Creates a new session. A session can be used to perform
      transactions that read and/or modify data in a Cloud Spanner database.
      Sessions are meant to be reused for many consecutive
      transactions.

      Sessions can only execute one transaction at a time. To execute
      multiple concurrent read-write/write-only transactions, create
      multiple sessions. Note that standalone reads and queries use a
      transaction internally, and count toward the one transaction
      limit.

      Cloud Spanner limits the number of sessions that can exist at any given
      time; thus, it is a good idea to delete idle and/or unneeded sessions.
      Aside from explicit deletes, Cloud Spanner can delete sessions for which no
      operations are sent for more than an hour. If a session is deleted,
      requests to it return `NOT_FOUND`.

      Idle sessions can be kept alive by sending a trivial SQL query
      periodically, e.g., `"SELECT 1"`.
      """
      raise NotImplementedError()
    CreateSession.future = None
    def GetSession(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
      """Gets a session. Returns `NOT_FOUND` if the session does not exist.
      This is mainly useful for determining whether a session is still
      alive.
      """
      raise NotImplementedError()
    GetSession.future = None
    def DeleteSession(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
      """Ends a session, releasing server resources associated with it.
      """
      raise NotImplementedError()
    DeleteSession.future = None
    def ExecuteSql(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
      """Executes an SQL query, returning all rows in a single reply. This
      method cannot be used to return a result set larger than 10 MiB;
      if the query yields more data than that, the query fails with
      a `FAILED_PRECONDITION` error.

      Queries inside read-write transactions might return `ABORTED`. If
      this occurs, the application should restart the transaction from
      the beginning. See [Transaction][google.spanner.v1.Transaction] for more details.

      Larger result sets can be fetched in streaming fashion by calling
      [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] instead.
      """
      raise NotImplementedError()
    ExecuteSql.future = None
    def ExecuteStreamingSql(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
      """Like [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], except returns the result
      set as a stream. Unlike [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], there
      is no limit on the size of the returned result set. However, no
      individual row in the result set can exceed 100 MiB, and no
      column value can exceed 10 MiB.
      """
      raise NotImplementedError()
    def Read(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
      """Reads rows from the database using key lookups and scans, as a
      simple key/value style alternative to
      [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql].  This method cannot be used to
      return a result set larger than 10 MiB; if the read matches more
      data than that, the read fails with a `FAILED_PRECONDITION`
      error.

      Reads inside read-write transactions might return `ABORTED`. If
      this occurs, the application should restart the transaction from
      the beginning. See [Transaction][google.spanner.v1.Transaction] for more details.

      Larger result sets can be yielded in streaming fashion by calling
      [StreamingRead][google.spanner.v1.Spanner.StreamingRead] instead.
      """
      raise NotImplementedError()
    Read.future = None
    def StreamingRead(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
      """Like [Read][google.spanner.v1.Spanner.Read], except returns the result set as a
      stream. Unlike [Read][google.spanner.v1.Spanner.Read], there is no limit on the
      size of the returned result set. However, no individual row in
      the result set can exceed 100 MiB, and no column value can exceed
      10 MiB.
      """
      raise NotImplementedError()
    def BeginTransaction(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
      """Begins a new transaction. This step can often be skipped:
      [Read][google.spanner.v1.Spanner.Read], [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] and
      [Commit][google.spanner.v1.Spanner.Commit] can begin a new transaction as a
      side-effect.
      """
      raise NotImplementedError()
    BeginTransaction.future = None
    def Commit(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
      """Commits a transaction. The request includes the mutations to be
      applied to rows in the database.

      `Commit` might return an `ABORTED` error. This can occur at any time;
      commonly, the cause is conflicts with concurrent
      transactions. However, it can also happen for a variety of other
      reasons. If `Commit` returns `ABORTED`, the caller should re-attempt
      the transaction from the beginning, re-using the same session.
      """
      raise NotImplementedError()
    Commit.future = None
    def Rollback(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
      """Rolls back a transaction, releasing any locks it holds. It is a good
      idea to call this for any transaction that includes one or more
      [Read][google.spanner.v1.Spanner.Read] or [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] requests and
      ultimately decides not to commit.

      `Rollback` returns `OK` if it successfully aborts the transaction, the
      transaction was already aborted, or the transaction is not
      found. `Rollback` never returns `ABORTED`.
      """
      raise NotImplementedError()
    Rollback.future = None


  def beta_create_Spanner_server(servicer, pool=None, pool_size=None, default_timeout=None, maximum_timeout=None):
    """The Beta API is deprecated for 0.15.0 and later.

    It is recommended to use the GA API (classes and functions in this
    file not marked beta) for all further purposes. This function was
    generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0"""
    request_deserializers = {
      ('google.spanner.v1.Spanner', 'BeginTransaction'): BeginTransactionRequest.FromString,
      ('google.spanner.v1.Spanner', 'Commit'): CommitRequest.FromString,
      ('google.spanner.v1.Spanner', 'CreateSession'): CreateSessionRequest.FromString,
      ('google.spanner.v1.Spanner', 'DeleteSession'): DeleteSessionRequest.FromString,
      ('google.spanner.v1.Spanner', 'ExecuteSql'): ExecuteSqlRequest.FromString,
      ('google.spanner.v1.Spanner', 'ExecuteStreamingSql'): ExecuteSqlRequest.FromString,
      ('google.spanner.v1.Spanner', 'GetSession'): GetSessionRequest.FromString,
      ('google.spanner.v1.Spanner', 'Read'): ReadRequest.FromString,
      ('google.spanner.v1.Spanner', 'Rollback'): RollbackRequest.FromString,
      ('google.spanner.v1.Spanner', 'StreamingRead'): ReadRequest.FromString,
    }
    response_serializers = {
      ('google.spanner.v1.Spanner', 'BeginTransaction'): google_dot_cloud_dot_spanner__v1_dot_proto_dot_transaction__pb2.Transaction.SerializeToString,
      ('google.spanner.v1.Spanner', 'Commit'): CommitResponse.SerializeToString,
      ('google.spanner.v1.Spanner', 'CreateSession'): Session.SerializeToString,
      ('google.spanner.v1.Spanner', 'DeleteSession'): google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
      ('google.spanner.v1.Spanner', 'ExecuteSql'): google_dot_cloud_dot_spanner__v1_dot_proto_dot_result__set__pb2.ResultSet.SerializeToString,
      ('google.spanner.v1.Spanner', 'ExecuteStreamingSql'): google_dot_cloud_dot_spanner__v1_dot_proto_dot_result__set__pb2.PartialResultSet.SerializeToString,
      ('google.spanner.v1.Spanner', 'GetSession'): Session.SerializeToString,
      ('google.spanner.v1.Spanner', 'Read'): google_dot_cloud_dot_spanner__v1_dot_proto_dot_result__set__pb2.ResultSet.SerializeToString,
      ('google.spanner.v1.Spanner', 'Rollback'): google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
      ('google.spanner.v1.Spanner', 'StreamingRead'): google_dot_cloud_dot_spanner__v1_dot_proto_dot_result__set__pb2.PartialResultSet.SerializeToString,
    }
    method_implementations = {
      ('google.spanner.v1.Spanner', 'BeginTransaction'): face_utilities.unary_unary_inline(servicer.BeginTransaction),
      ('google.spanner.v1.Spanner', 'Commit'): face_utilities.unary_unary_inline(servicer.Commit),
      ('google.spanner.v1.Spanner', 'CreateSession'): face_utilities.unary_unary_inline(servicer.CreateSession),
      ('google.spanner.v1.Spanner', 'DeleteSession'): face_utilities.unary_unary_inline(servicer.DeleteSession),
      ('google.spanner.v1.Spanner', 'ExecuteSql'): face_utilities.unary_unary_inline(servicer.ExecuteSql),
      ('google.spanner.v1.Spanner', 'ExecuteStreamingSql'): face_utilities.unary_stream_inline(servicer.ExecuteStreamingSql),
      ('google.spanner.v1.Spanner', 'GetSession'): face_utilities.unary_unary_inline(servicer.GetSession),
      ('google.spanner.v1.Spanner', 'Read'): face_utilities.unary_unary_inline(servicer.Read),
      ('google.spanner.v1.Spanner', 'Rollback'): face_utilities.unary_unary_inline(servicer.Rollback),
      ('google.spanner.v1.Spanner', 'StreamingRead'): face_utilities.unary_stream_inline(servicer.StreamingRead),
    }
    server_options = beta_implementations.server_options(request_deserializers=request_deserializers, response_serializers=response_serializers, thread_pool=pool, thread_pool_size=pool_size, default_timeout=default_timeout, maximum_timeout=maximum_timeout)
    return beta_implementations.server(method_implementations, options=server_options)


  def beta_create_Spanner_stub(channel, host=None, metadata_transformer=None, pool=None, pool_size=None):
    """The Beta API is deprecated for 0.15.0 and later.

    It is recommended to use the GA API (classes and functions in this
    file not marked beta) for all further purposes. This function was
    generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0"""
    request_serializers = {
      ('google.spanner.v1.Spanner', 'BeginTransaction'): BeginTransactionRequest.SerializeToString,
      ('google.spanner.v1.Spanner', 'Commit'): CommitRequest.SerializeToString,
      ('google.spanner.v1.Spanner', 'CreateSession'): CreateSessionRequest.SerializeToString,
      ('google.spanner.v1.Spanner', 'DeleteSession'): DeleteSessionRequest.SerializeToString,
      ('google.spanner.v1.Spanner', 'ExecuteSql'): ExecuteSqlRequest.SerializeToString,
      ('google.spanner.v1.Spanner', 'ExecuteStreamingSql'): ExecuteSqlRequest.SerializeToString,
      ('google.spanner.v1.Spanner', 'GetSession'): GetSessionRequest.SerializeToString,
      ('google.spanner.v1.Spanner', 'Read'): ReadRequest.SerializeToString,
      ('google.spanner.v1.Spanner', 'Rollback'): RollbackRequest.SerializeToString,
      ('google.spanner.v1.Spanner', 'StreamingRead'): ReadRequest.SerializeToString,
    }
    response_deserializers = {
      ('google.spanner.v1.Spanner', 'BeginTransaction'): google_dot_cloud_dot_spanner__v1_dot_proto_dot_transaction__pb2.Transaction.FromString,
      ('google.spanner.v1.Spanner', 'Commit'): CommitResponse.FromString,
      ('google.spanner.v1.Spanner', 'CreateSession'): Session.FromString,
      ('google.spanner.v1.Spanner', 'DeleteSession'): google_dot_protobuf_dot_empty__pb2.Empty.FromString,
      ('google.spanner.v1.Spanner', 'ExecuteSql'): google_dot_cloud_dot_spanner__v1_dot_proto_dot_result__set__pb2.ResultSet.FromString,
      ('google.spanner.v1.Spanner', 'ExecuteStreamingSql'): google_dot_cloud_dot_spanner__v1_dot_proto_dot_result__set__pb2.PartialResultSet.FromString,
      ('google.spanner.v1.Spanner', 'GetSession'): Session.FromString,
      ('google.spanner.v1.Spanner', 'Read'): google_dot_cloud_dot_spanner__v1_dot_proto_dot_result__set__pb2.ResultSet.FromString,
      ('google.spanner.v1.Spanner', 'Rollback'): google_dot_protobuf_dot_empty__pb2.Empty.FromString,
      ('google.spanner.v1.Spanner', 'StreamingRead'): google_dot_cloud_dot_spanner__v1_dot_proto_dot_result__set__pb2.PartialResultSet.FromString,
    }
    cardinalities = {
      'BeginTransaction': cardinality.Cardinality.UNARY_UNARY,
      'Commit': cardinality.Cardinality.UNARY_UNARY,
      'CreateSession': cardinality.Cardinality.UNARY_UNARY,
      'DeleteSession': cardinality.Cardinality.UNARY_UNARY,
      'ExecuteSql': cardinality.Cardinality.UNARY_UNARY,
      'ExecuteStreamingSql': cardinality.Cardinality.UNARY_STREAM,
      'GetSession': cardinality.Cardinality.UNARY_UNARY,
      'Read': cardinality.Cardinality.UNARY_UNARY,
      'Rollback': cardinality.Cardinality.UNARY_UNARY,
      'StreamingRead': cardinality.Cardinality.UNARY_STREAM,
    }
    stub_options = beta_implementations.stub_options(host=host, metadata_transformer=metadata_transformer, request_serializers=request_serializers, response_deserializers=response_deserializers, thread_pool=pool, thread_pool_size=pool_size)
    return beta_implementations.dynamic_stub(channel, 'google.spanner.v1.Spanner', cardinalities, options=stub_options)
except ImportError:
  pass
# @@protoc_insertion_point(module_scope)
