1 // Code generated by protoc-gen-go. DO NOT EDIT.
2 // source: google/spanner/v1/spanner.proto
6 import proto "github.com/golang/protobuf/proto"
9 import _ "google.golang.org/genproto/googleapis/api/annotations"
10 import _ "google.golang.org/genproto/googleapis/api/serviceconfig"
11 import google_protobuf4 "github.com/golang/protobuf/ptypes/empty"
12 import google_protobuf1 "github.com/golang/protobuf/ptypes/struct"
13 import google_protobuf3 "github.com/golang/protobuf/ptypes/timestamp"
16 context "golang.org/x/net/context"
17 grpc "google.golang.org/grpc"
20 // Reference imports to suppress errors if they are not otherwise used.
25 // Mode in which the query must be processed.
26 type ExecuteSqlRequest_QueryMode int32
29 // The default mode where only the query result, without any information
30 // about the query plan is returned.
31 ExecuteSqlRequest_NORMAL ExecuteSqlRequest_QueryMode = 0
32 // This mode returns only the query plan, without any result rows or
33 // execution statistics information.
34 ExecuteSqlRequest_PLAN ExecuteSqlRequest_QueryMode = 1
35 // This mode returns both the query plan and the execution statistics along
36 // with the result rows.
37 ExecuteSqlRequest_PROFILE ExecuteSqlRequest_QueryMode = 2
40 var ExecuteSqlRequest_QueryMode_name = map[int32]string{
45 var ExecuteSqlRequest_QueryMode_value = map[string]int32{
51 func (x ExecuteSqlRequest_QueryMode) String() string {
52 return proto.EnumName(ExecuteSqlRequest_QueryMode_name, int32(x))
54 func (ExecuteSqlRequest_QueryMode) EnumDescriptor() ([]byte, []int) {
55 return fileDescriptor4, []int{4, 0}
58 // The request for [CreateSession][google.spanner.v1.Spanner.CreateSession].
59 type CreateSessionRequest struct {
60 // Required. The database in which the new session is created.
61 Database string `protobuf:"bytes,1,opt,name=database" json:"database,omitempty"`
64 func (m *CreateSessionRequest) Reset() { *m = CreateSessionRequest{} }
65 func (m *CreateSessionRequest) String() string { return proto.CompactTextString(m) }
66 func (*CreateSessionRequest) ProtoMessage() {}
67 func (*CreateSessionRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{0} }
69 func (m *CreateSessionRequest) GetDatabase() string {
76 // A session in the Cloud Spanner API.
78 // Required. The name of the session.
79 Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
82 func (m *Session) Reset() { *m = Session{} }
83 func (m *Session) String() string { return proto.CompactTextString(m) }
84 func (*Session) ProtoMessage() {}
85 func (*Session) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{1} }
87 func (m *Session) GetName() string {
94 // The request for [GetSession][google.spanner.v1.Spanner.GetSession].
95 type GetSessionRequest struct {
96 // Required. The name of the session to retrieve.
97 Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
100 func (m *GetSessionRequest) Reset() { *m = GetSessionRequest{} }
101 func (m *GetSessionRequest) String() string { return proto.CompactTextString(m) }
102 func (*GetSessionRequest) ProtoMessage() {}
103 func (*GetSessionRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{2} }
105 func (m *GetSessionRequest) GetName() string {
112 // The request for [DeleteSession][google.spanner.v1.Spanner.DeleteSession].
113 type DeleteSessionRequest struct {
114 // Required. The name of the session to delete.
115 Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
118 func (m *DeleteSessionRequest) Reset() { *m = DeleteSessionRequest{} }
119 func (m *DeleteSessionRequest) String() string { return proto.CompactTextString(m) }
120 func (*DeleteSessionRequest) ProtoMessage() {}
121 func (*DeleteSessionRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{3} }
123 func (m *DeleteSessionRequest) GetName() string {
130 // The request for [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] and
131 // [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql].
132 type ExecuteSqlRequest struct {
133 // Required. The session in which the SQL query should be performed.
134 Session string `protobuf:"bytes,1,opt,name=session" json:"session,omitempty"`
135 // The transaction to use. If none is provided, the default is a
136 // temporary read-only transaction with strong concurrency.
137 Transaction *TransactionSelector `protobuf:"bytes,2,opt,name=transaction" json:"transaction,omitempty"`
138 // Required. The SQL query string.
139 Sql string `protobuf:"bytes,3,opt,name=sql" json:"sql,omitempty"`
140 // The SQL query string can contain parameter placeholders. A parameter
141 // placeholder consists of `'@'` followed by the parameter
142 // name. Parameter names consist of any combination of letters,
143 // numbers, and underscores.
145 // Parameters can appear anywhere that a literal value is expected. The same
146 // parameter name can be used more than once, for example:
147 // `"WHERE id > @msg_id AND id < @msg_id + 100"`
149 // It is an error to execute an SQL query with unbound parameters.
151 // Parameter values are specified using `params`, which is a JSON
152 // object whose keys are parameter names, and whose values are the
153 // corresponding parameter values.
154 Params *google_protobuf1.Struct `protobuf:"bytes,4,opt,name=params" json:"params,omitempty"`
155 // It is not always possible for Cloud Spanner to infer the right SQL type
156 // from a JSON value. For example, values of type `BYTES` and values
157 // of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings.
159 // In these cases, `param_types` can be used to specify the exact
160 // SQL type for some or all of the SQL query parameters. See the
161 // definition of [Type][google.spanner.v1.Type] for more information
163 ParamTypes map[string]*Type `protobuf:"bytes,5,rep,name=param_types,json=paramTypes" json:"param_types,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
164 // If this request is resuming a previously interrupted SQL query
165 // execution, `resume_token` should be copied from the last
166 // [PartialResultSet][google.spanner.v1.PartialResultSet] yielded before the interruption. Doing this
167 // enables the new SQL query execution to resume where the last one left
168 // off. The rest of the request parameters must exactly match the
169 // request that yielded this token.
170 ResumeToken []byte `protobuf:"bytes,6,opt,name=resume_token,json=resumeToken,proto3" json:"resume_token,omitempty"`
171 // Used to control the amount of debugging information returned in
172 // [ResultSetStats][google.spanner.v1.ResultSetStats].
173 QueryMode ExecuteSqlRequest_QueryMode `protobuf:"varint,7,opt,name=query_mode,json=queryMode,enum=google.spanner.v1.ExecuteSqlRequest_QueryMode" json:"query_mode,omitempty"`
176 func (m *ExecuteSqlRequest) Reset() { *m = ExecuteSqlRequest{} }
177 func (m *ExecuteSqlRequest) String() string { return proto.CompactTextString(m) }
178 func (*ExecuteSqlRequest) ProtoMessage() {}
179 func (*ExecuteSqlRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{4} }
181 func (m *ExecuteSqlRequest) GetSession() string {
188 func (m *ExecuteSqlRequest) GetTransaction() *TransactionSelector {
195 func (m *ExecuteSqlRequest) GetSql() string {
202 func (m *ExecuteSqlRequest) GetParams() *google_protobuf1.Struct {
209 func (m *ExecuteSqlRequest) GetParamTypes() map[string]*Type {
216 func (m *ExecuteSqlRequest) GetResumeToken() []byte {
223 func (m *ExecuteSqlRequest) GetQueryMode() ExecuteSqlRequest_QueryMode {
227 return ExecuteSqlRequest_NORMAL
230 // The request for [Read][google.spanner.v1.Spanner.Read] and
231 // [StreamingRead][google.spanner.v1.Spanner.StreamingRead].
232 type ReadRequest struct {
233 // Required. The session in which the read should be performed.
234 Session string `protobuf:"bytes,1,opt,name=session" json:"session,omitempty"`
235 // The transaction to use. If none is provided, the default is a
236 // temporary read-only transaction with strong concurrency.
237 Transaction *TransactionSelector `protobuf:"bytes,2,opt,name=transaction" json:"transaction,omitempty"`
238 // Required. The name of the table in the database to be read.
239 Table string `protobuf:"bytes,3,opt,name=table" json:"table,omitempty"`
240 // If non-empty, the name of an index on [table][google.spanner.v1.ReadRequest.table]. This index is
241 // used instead of the table primary key when interpreting [key_set][google.spanner.v1.ReadRequest.key_set]
242 // and sorting result rows. See [key_set][google.spanner.v1.ReadRequest.key_set] for further information.
243 Index string `protobuf:"bytes,4,opt,name=index" json:"index,omitempty"`
244 // The columns of [table][google.spanner.v1.ReadRequest.table] to be returned for each row matching
246 Columns []string `protobuf:"bytes,5,rep,name=columns" json:"columns,omitempty"`
247 // Required. `key_set` identifies the rows to be yielded. `key_set` names the
248 // primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index]
249 // is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names
250 // index keys in [index][google.spanner.v1.ReadRequest.index].
252 // Rows are yielded in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty)
253 // or index key order (if [index][google.spanner.v1.ReadRequest.index] is non-empty).
255 // It is not an error for the `key_set` to name rows that do not
256 // exist in the database. Read yields nothing for nonexistent rows.
257 KeySet *KeySet `protobuf:"bytes,6,opt,name=key_set,json=keySet" json:"key_set,omitempty"`
258 // If greater than zero, only the first `limit` rows are yielded. If `limit`
259 // is zero, the default is no limit.
260 Limit int64 `protobuf:"varint,8,opt,name=limit" json:"limit,omitempty"`
261 // If this request is resuming a previously interrupted read,
262 // `resume_token` should be copied from the last
263 // [PartialResultSet][google.spanner.v1.PartialResultSet] yielded before the interruption. Doing this
264 // enables the new read to resume where the last read left off. The
265 // rest of the request parameters must exactly match the request
266 // that yielded this token.
267 ResumeToken []byte `protobuf:"bytes,9,opt,name=resume_token,json=resumeToken,proto3" json:"resume_token,omitempty"`
270 func (m *ReadRequest) Reset() { *m = ReadRequest{} }
271 func (m *ReadRequest) String() string { return proto.CompactTextString(m) }
272 func (*ReadRequest) ProtoMessage() {}
273 func (*ReadRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{5} }
275 func (m *ReadRequest) GetSession() string {
282 func (m *ReadRequest) GetTransaction() *TransactionSelector {
289 func (m *ReadRequest) GetTable() string {
296 func (m *ReadRequest) GetIndex() string {
303 func (m *ReadRequest) GetColumns() []string {
310 func (m *ReadRequest) GetKeySet() *KeySet {
317 func (m *ReadRequest) GetLimit() int64 {
324 func (m *ReadRequest) GetResumeToken() []byte {
331 // The request for [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction].
332 type BeginTransactionRequest struct {
333 // Required. The session in which the transaction runs.
334 Session string `protobuf:"bytes,1,opt,name=session" json:"session,omitempty"`
335 // Required. Options for the new transaction.
336 Options *TransactionOptions `protobuf:"bytes,2,opt,name=options" json:"options,omitempty"`
339 func (m *BeginTransactionRequest) Reset() { *m = BeginTransactionRequest{} }
340 func (m *BeginTransactionRequest) String() string { return proto.CompactTextString(m) }
341 func (*BeginTransactionRequest) ProtoMessage() {}
342 func (*BeginTransactionRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{6} }
344 func (m *BeginTransactionRequest) GetSession() string {
351 func (m *BeginTransactionRequest) GetOptions() *TransactionOptions {
358 // The request for [Commit][google.spanner.v1.Spanner.Commit].
359 type CommitRequest struct {
360 // Required. The session in which the transaction to be committed is running.
361 Session string `protobuf:"bytes,1,opt,name=session" json:"session,omitempty"`
362 // Required. The transaction in which to commit.
364 // Types that are valid to be assigned to Transaction:
365 // *CommitRequest_TransactionId
366 // *CommitRequest_SingleUseTransaction
367 Transaction isCommitRequest_Transaction `protobuf_oneof:"transaction"`
368 // The mutations to be executed when this transaction commits. All
369 // mutations are applied atomically, in the order they appear in
371 Mutations []*Mutation `protobuf:"bytes,4,rep,name=mutations" json:"mutations,omitempty"`
374 func (m *CommitRequest) Reset() { *m = CommitRequest{} }
375 func (m *CommitRequest) String() string { return proto.CompactTextString(m) }
376 func (*CommitRequest) ProtoMessage() {}
377 func (*CommitRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{7} }
379 type isCommitRequest_Transaction interface {
380 isCommitRequest_Transaction()
383 type CommitRequest_TransactionId struct {
384 TransactionId []byte `protobuf:"bytes,2,opt,name=transaction_id,json=transactionId,proto3,oneof"`
386 type CommitRequest_SingleUseTransaction struct {
387 SingleUseTransaction *TransactionOptions `protobuf:"bytes,3,opt,name=single_use_transaction,json=singleUseTransaction,oneof"`
390 func (*CommitRequest_TransactionId) isCommitRequest_Transaction() {}
391 func (*CommitRequest_SingleUseTransaction) isCommitRequest_Transaction() {}
393 func (m *CommitRequest) GetTransaction() isCommitRequest_Transaction {
400 func (m *CommitRequest) GetSession() string {
407 func (m *CommitRequest) GetTransactionId() []byte {
408 if x, ok := m.GetTransaction().(*CommitRequest_TransactionId); ok {
409 return x.TransactionId
414 func (m *CommitRequest) GetSingleUseTransaction() *TransactionOptions {
415 if x, ok := m.GetTransaction().(*CommitRequest_SingleUseTransaction); ok {
416 return x.SingleUseTransaction
421 func (m *CommitRequest) GetMutations() []*Mutation {
428 // XXX_OneofFuncs is for the internal use of the proto package.
429 func (*CommitRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
430 return _CommitRequest_OneofMarshaler, _CommitRequest_OneofUnmarshaler, _CommitRequest_OneofSizer, []interface{}{
431 (*CommitRequest_TransactionId)(nil),
432 (*CommitRequest_SingleUseTransaction)(nil),
436 func _CommitRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
437 m := msg.(*CommitRequest)
439 switch x := m.Transaction.(type) {
440 case *CommitRequest_TransactionId:
441 b.EncodeVarint(2<<3 | proto.WireBytes)
442 b.EncodeRawBytes(x.TransactionId)
443 case *CommitRequest_SingleUseTransaction:
444 b.EncodeVarint(3<<3 | proto.WireBytes)
445 if err := b.EncodeMessage(x.SingleUseTransaction); err != nil {
450 return fmt.Errorf("CommitRequest.Transaction has unexpected type %T", x)
455 func _CommitRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
456 m := msg.(*CommitRequest)
458 case 2: // transaction.transaction_id
459 if wire != proto.WireBytes {
460 return true, proto.ErrInternalBadWireType
462 x, err := b.DecodeRawBytes(true)
463 m.Transaction = &CommitRequest_TransactionId{x}
465 case 3: // transaction.single_use_transaction
466 if wire != proto.WireBytes {
467 return true, proto.ErrInternalBadWireType
469 msg := new(TransactionOptions)
470 err := b.DecodeMessage(msg)
471 m.Transaction = &CommitRequest_SingleUseTransaction{msg}
478 func _CommitRequest_OneofSizer(msg proto.Message) (n int) {
479 m := msg.(*CommitRequest)
481 switch x := m.Transaction.(type) {
482 case *CommitRequest_TransactionId:
483 n += proto.SizeVarint(2<<3 | proto.WireBytes)
484 n += proto.SizeVarint(uint64(len(x.TransactionId)))
485 n += len(x.TransactionId)
486 case *CommitRequest_SingleUseTransaction:
487 s := proto.Size(x.SingleUseTransaction)
488 n += proto.SizeVarint(3<<3 | proto.WireBytes)
489 n += proto.SizeVarint(uint64(s))
493 panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
498 // The response for [Commit][google.spanner.v1.Spanner.Commit].
499 type CommitResponse struct {
500 // The Cloud Spanner timestamp at which the transaction committed.
501 CommitTimestamp *google_protobuf3.Timestamp `protobuf:"bytes,1,opt,name=commit_timestamp,json=commitTimestamp" json:"commit_timestamp,omitempty"`
504 func (m *CommitResponse) Reset() { *m = CommitResponse{} }
505 func (m *CommitResponse) String() string { return proto.CompactTextString(m) }
506 func (*CommitResponse) ProtoMessage() {}
507 func (*CommitResponse) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{8} }
509 func (m *CommitResponse) GetCommitTimestamp() *google_protobuf3.Timestamp {
511 return m.CommitTimestamp
516 // The request for [Rollback][google.spanner.v1.Spanner.Rollback].
517 type RollbackRequest struct {
518 // Required. The session in which the transaction to roll back is running.
519 Session string `protobuf:"bytes,1,opt,name=session" json:"session,omitempty"`
520 // Required. The transaction to roll back.
521 TransactionId []byte `protobuf:"bytes,2,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"`
524 func (m *RollbackRequest) Reset() { *m = RollbackRequest{} }
525 func (m *RollbackRequest) String() string { return proto.CompactTextString(m) }
526 func (*RollbackRequest) ProtoMessage() {}
527 func (*RollbackRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{9} }
529 func (m *RollbackRequest) GetSession() string {
536 func (m *RollbackRequest) GetTransactionId() []byte {
538 return m.TransactionId
544 proto.RegisterType((*CreateSessionRequest)(nil), "google.spanner.v1.CreateSessionRequest")
545 proto.RegisterType((*Session)(nil), "google.spanner.v1.Session")
546 proto.RegisterType((*GetSessionRequest)(nil), "google.spanner.v1.GetSessionRequest")
547 proto.RegisterType((*DeleteSessionRequest)(nil), "google.spanner.v1.DeleteSessionRequest")
548 proto.RegisterType((*ExecuteSqlRequest)(nil), "google.spanner.v1.ExecuteSqlRequest")
549 proto.RegisterType((*ReadRequest)(nil), "google.spanner.v1.ReadRequest")
550 proto.RegisterType((*BeginTransactionRequest)(nil), "google.spanner.v1.BeginTransactionRequest")
551 proto.RegisterType((*CommitRequest)(nil), "google.spanner.v1.CommitRequest")
552 proto.RegisterType((*CommitResponse)(nil), "google.spanner.v1.CommitResponse")
553 proto.RegisterType((*RollbackRequest)(nil), "google.spanner.v1.RollbackRequest")
554 proto.RegisterEnum("google.spanner.v1.ExecuteSqlRequest_QueryMode", ExecuteSqlRequest_QueryMode_name, ExecuteSqlRequest_QueryMode_value)
557 // Reference imports to suppress errors if they are not otherwise used.
558 var _ context.Context
559 var _ grpc.ClientConn
561 // This is a compile-time assertion to ensure that this generated file
562 // is compatible with the grpc package it is being compiled against.
563 const _ = grpc.SupportPackageIsVersion4
565 // Client API for Spanner service
567 type SpannerClient interface {
568 // Creates a new session. A session can be used to perform
569 // transactions that read and/or modify data in a Cloud Spanner database.
570 // Sessions are meant to be reused for many consecutive
573 // Sessions can only execute one transaction at a time. To execute
574 // multiple concurrent read-write/write-only transactions, create
575 // multiple sessions. Note that standalone reads and queries use a
576 // transaction internally, and count toward the one transaction
579 // Cloud Spanner limits the number of sessions that can exist at any given
580 // time; thus, it is a good idea to delete idle and/or unneeded sessions.
581 // Aside from explicit deletes, Cloud Spanner can delete sessions for which no
582 // operations are sent for more than an hour. If a session is deleted,
583 // requests to it return `NOT_FOUND`.
585 // Idle sessions can be kept alive by sending a trivial SQL query
586 // periodically, e.g., `"SELECT 1"`.
587 CreateSession(ctx context.Context, in *CreateSessionRequest, opts ...grpc.CallOption) (*Session, error)
588 // Gets a session. Returns `NOT_FOUND` if the session does not exist.
589 // This is mainly useful for determining whether a session is still
591 GetSession(ctx context.Context, in *GetSessionRequest, opts ...grpc.CallOption) (*Session, error)
592 // Ends a session, releasing server resources associated with it.
593 DeleteSession(ctx context.Context, in *DeleteSessionRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error)
594 // Executes an SQL query, returning all rows in a single reply. This
595 // method cannot be used to return a result set larger than 10 MiB;
596 // if the query yields more data than that, the query fails with
597 // a `FAILED_PRECONDITION` error.
599 // Queries inside read-write transactions might return `ABORTED`. If
600 // this occurs, the application should restart the transaction from
601 // the beginning. See [Transaction][google.spanner.v1.Transaction] for more details.
603 // Larger result sets can be fetched in streaming fashion by calling
604 // [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] instead.
605 ExecuteSql(ctx context.Context, in *ExecuteSqlRequest, opts ...grpc.CallOption) (*ResultSet, error)
606 // Like [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], except returns the result
607 // set as a stream. Unlike [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], there
608 // is no limit on the size of the returned result set. However, no
609 // individual row in the result set can exceed 100 MiB, and no
610 // column value can exceed 10 MiB.
611 ExecuteStreamingSql(ctx context.Context, in *ExecuteSqlRequest, opts ...grpc.CallOption) (Spanner_ExecuteStreamingSqlClient, error)
612 // Reads rows from the database using key lookups and scans, as a
613 // simple key/value style alternative to
614 // [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql]. This method cannot be used to
615 // return a result set larger than 10 MiB; if the read matches more
616 // data than that, the read fails with a `FAILED_PRECONDITION`
619 // Reads inside read-write transactions might return `ABORTED`. If
620 // this occurs, the application should restart the transaction from
621 // the beginning. See [Transaction][google.spanner.v1.Transaction] for more details.
623 // Larger result sets can be yielded in streaming fashion by calling
624 // [StreamingRead][google.spanner.v1.Spanner.StreamingRead] instead.
625 Read(ctx context.Context, in *ReadRequest, opts ...grpc.CallOption) (*ResultSet, error)
626 // Like [Read][google.spanner.v1.Spanner.Read], except returns the result set as a
627 // stream. Unlike [Read][google.spanner.v1.Spanner.Read], there is no limit on the
628 // size of the returned result set. However, no individual row in
629 // the result set can exceed 100 MiB, and no column value can exceed
631 StreamingRead(ctx context.Context, in *ReadRequest, opts ...grpc.CallOption) (Spanner_StreamingReadClient, error)
632 // Begins a new transaction. This step can often be skipped:
633 // [Read][google.spanner.v1.Spanner.Read], [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] and
634 // [Commit][google.spanner.v1.Spanner.Commit] can begin a new transaction as a
636 BeginTransaction(ctx context.Context, in *BeginTransactionRequest, opts ...grpc.CallOption) (*Transaction, error)
637 // Commits a transaction. The request includes the mutations to be
638 // applied to rows in the database.
640 // `Commit` might return an `ABORTED` error. This can occur at any time;
641 // commonly, the cause is conflicts with concurrent
642 // transactions. However, it can also happen for a variety of other
643 // reasons. If `Commit` returns `ABORTED`, the caller should re-attempt
644 // the transaction from the beginning, re-using the same session.
645 Commit(ctx context.Context, in *CommitRequest, opts ...grpc.CallOption) (*CommitResponse, error)
646 // Rolls back a transaction, releasing any locks it holds. It is a good
647 // idea to call this for any transaction that includes one or more
648 // [Read][google.spanner.v1.Spanner.Read] or [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] requests and
649 // ultimately decides not to commit.
651 // `Rollback` returns `OK` if it successfully aborts the transaction, the
652 // transaction was already aborted, or the transaction is not
653 // found. `Rollback` never returns `ABORTED`.
654 Rollback(ctx context.Context, in *RollbackRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error)
657 type spannerClient struct {
661 func NewSpannerClient(cc *grpc.ClientConn) SpannerClient {
662 return &spannerClient{cc}
665 func (c *spannerClient) CreateSession(ctx context.Context, in *CreateSessionRequest, opts ...grpc.CallOption) (*Session, error) {
667 err := grpc.Invoke(ctx, "/google.spanner.v1.Spanner/CreateSession", in, out, c.cc, opts...)
674 func (c *spannerClient) GetSession(ctx context.Context, in *GetSessionRequest, opts ...grpc.CallOption) (*Session, error) {
676 err := grpc.Invoke(ctx, "/google.spanner.v1.Spanner/GetSession", in, out, c.cc, opts...)
683 func (c *spannerClient) DeleteSession(ctx context.Context, in *DeleteSessionRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) {
684 out := new(google_protobuf4.Empty)
685 err := grpc.Invoke(ctx, "/google.spanner.v1.Spanner/DeleteSession", in, out, c.cc, opts...)
692 func (c *spannerClient) ExecuteSql(ctx context.Context, in *ExecuteSqlRequest, opts ...grpc.CallOption) (*ResultSet, error) {
693 out := new(ResultSet)
694 err := grpc.Invoke(ctx, "/google.spanner.v1.Spanner/ExecuteSql", in, out, c.cc, opts...)
701 func (c *spannerClient) ExecuteStreamingSql(ctx context.Context, in *ExecuteSqlRequest, opts ...grpc.CallOption) (Spanner_ExecuteStreamingSqlClient, error) {
702 stream, err := grpc.NewClientStream(ctx, &_Spanner_serviceDesc.Streams[0], c.cc, "/google.spanner.v1.Spanner/ExecuteStreamingSql", opts...)
706 x := &spannerExecuteStreamingSqlClient{stream}
707 if err := x.ClientStream.SendMsg(in); err != nil {
710 if err := x.ClientStream.CloseSend(); err != nil {
716 type Spanner_ExecuteStreamingSqlClient interface {
717 Recv() (*PartialResultSet, error)
721 type spannerExecuteStreamingSqlClient struct {
725 func (x *spannerExecuteStreamingSqlClient) Recv() (*PartialResultSet, error) {
726 m := new(PartialResultSet)
727 if err := x.ClientStream.RecvMsg(m); err != nil {
733 func (c *spannerClient) Read(ctx context.Context, in *ReadRequest, opts ...grpc.CallOption) (*ResultSet, error) {
734 out := new(ResultSet)
735 err := grpc.Invoke(ctx, "/google.spanner.v1.Spanner/Read", in, out, c.cc, opts...)
742 func (c *spannerClient) StreamingRead(ctx context.Context, in *ReadRequest, opts ...grpc.CallOption) (Spanner_StreamingReadClient, error) {
743 stream, err := grpc.NewClientStream(ctx, &_Spanner_serviceDesc.Streams[1], c.cc, "/google.spanner.v1.Spanner/StreamingRead", opts...)
747 x := &spannerStreamingReadClient{stream}
748 if err := x.ClientStream.SendMsg(in); err != nil {
751 if err := x.ClientStream.CloseSend(); err != nil {
757 type Spanner_StreamingReadClient interface {
758 Recv() (*PartialResultSet, error)
762 type spannerStreamingReadClient struct {
766 func (x *spannerStreamingReadClient) Recv() (*PartialResultSet, error) {
767 m := new(PartialResultSet)
768 if err := x.ClientStream.RecvMsg(m); err != nil {
774 func (c *spannerClient) BeginTransaction(ctx context.Context, in *BeginTransactionRequest, opts ...grpc.CallOption) (*Transaction, error) {
775 out := new(Transaction)
776 err := grpc.Invoke(ctx, "/google.spanner.v1.Spanner/BeginTransaction", in, out, c.cc, opts...)
783 func (c *spannerClient) Commit(ctx context.Context, in *CommitRequest, opts ...grpc.CallOption) (*CommitResponse, error) {
784 out := new(CommitResponse)
785 err := grpc.Invoke(ctx, "/google.spanner.v1.Spanner/Commit", in, out, c.cc, opts...)
792 func (c *spannerClient) Rollback(ctx context.Context, in *RollbackRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) {
793 out := new(google_protobuf4.Empty)
794 err := grpc.Invoke(ctx, "/google.spanner.v1.Spanner/Rollback", in, out, c.cc, opts...)
801 // Server API for Spanner service
803 type SpannerServer interface {
804 // Creates a new session. A session can be used to perform
805 // transactions that read and/or modify data in a Cloud Spanner database.
806 // Sessions are meant to be reused for many consecutive
809 // Sessions can only execute one transaction at a time. To execute
810 // multiple concurrent read-write/write-only transactions, create
811 // multiple sessions. Note that standalone reads and queries use a
812 // transaction internally, and count toward the one transaction
815 // Cloud Spanner limits the number of sessions that can exist at any given
816 // time; thus, it is a good idea to delete idle and/or unneeded sessions.
817 // Aside from explicit deletes, Cloud Spanner can delete sessions for which no
818 // operations are sent for more than an hour. If a session is deleted,
819 // requests to it return `NOT_FOUND`.
821 // Idle sessions can be kept alive by sending a trivial SQL query
822 // periodically, e.g., `"SELECT 1"`.
823 CreateSession(context.Context, *CreateSessionRequest) (*Session, error)
824 // Gets a session. Returns `NOT_FOUND` if the session does not exist.
825 // This is mainly useful for determining whether a session is still
827 GetSession(context.Context, *GetSessionRequest) (*Session, error)
828 // Ends a session, releasing server resources associated with it.
829 DeleteSession(context.Context, *DeleteSessionRequest) (*google_protobuf4.Empty, error)
830 // Executes an SQL query, returning all rows in a single reply. This
831 // method cannot be used to return a result set larger than 10 MiB;
832 // if the query yields more data than that, the query fails with
833 // a `FAILED_PRECONDITION` error.
835 // Queries inside read-write transactions might return `ABORTED`. If
836 // this occurs, the application should restart the transaction from
837 // the beginning. See [Transaction][google.spanner.v1.Transaction] for more details.
839 // Larger result sets can be fetched in streaming fashion by calling
840 // [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] instead.
841 ExecuteSql(context.Context, *ExecuteSqlRequest) (*ResultSet, error)
842 // Like [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], except returns the result
843 // set as a stream. Unlike [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], there
844 // is no limit on the size of the returned result set. However, no
845 // individual row in the result set can exceed 100 MiB, and no
846 // column value can exceed 10 MiB.
847 ExecuteStreamingSql(*ExecuteSqlRequest, Spanner_ExecuteStreamingSqlServer) error
848 // Reads rows from the database using key lookups and scans, as a
849 // simple key/value style alternative to
850 // [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql]. This method cannot be used to
851 // return a result set larger than 10 MiB; if the read matches more
852 // data than that, the read fails with a `FAILED_PRECONDITION`
855 // Reads inside read-write transactions might return `ABORTED`. If
856 // this occurs, the application should restart the transaction from
857 // the beginning. See [Transaction][google.spanner.v1.Transaction] for more details.
859 // Larger result sets can be yielded in streaming fashion by calling
860 // [StreamingRead][google.spanner.v1.Spanner.StreamingRead] instead.
861 Read(context.Context, *ReadRequest) (*ResultSet, error)
862 // Like [Read][google.spanner.v1.Spanner.Read], except returns the result set as a
863 // stream. Unlike [Read][google.spanner.v1.Spanner.Read], there is no limit on the
864 // size of the returned result set. However, no individual row in
865 // the result set can exceed 100 MiB, and no column value can exceed
867 StreamingRead(*ReadRequest, Spanner_StreamingReadServer) error
868 // Begins a new transaction. This step can often be skipped:
869 // [Read][google.spanner.v1.Spanner.Read], [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] and
870 // [Commit][google.spanner.v1.Spanner.Commit] can begin a new transaction as a
872 BeginTransaction(context.Context, *BeginTransactionRequest) (*Transaction, error)
873 // Commits a transaction. The request includes the mutations to be
874 // applied to rows in the database.
876 // `Commit` might return an `ABORTED` error. This can occur at any time;
877 // commonly, the cause is conflicts with concurrent
878 // transactions. However, it can also happen for a variety of other
879 // reasons. If `Commit` returns `ABORTED`, the caller should re-attempt
880 // the transaction from the beginning, re-using the same session.
881 Commit(context.Context, *CommitRequest) (*CommitResponse, error)
882 // Rolls back a transaction, releasing any locks it holds. It is a good
883 // idea to call this for any transaction that includes one or more
884 // [Read][google.spanner.v1.Spanner.Read] or [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] requests and
885 // ultimately decides not to commit.
887 // `Rollback` returns `OK` if it successfully aborts the transaction, the
888 // transaction was already aborted, or the transaction is not
889 // found. `Rollback` never returns `ABORTED`.
890 Rollback(context.Context, *RollbackRequest) (*google_protobuf4.Empty, error)
893 func RegisterSpannerServer(s *grpc.Server, srv SpannerServer) {
894 s.RegisterService(&_Spanner_serviceDesc, srv)
897 func _Spanner_CreateSession_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
898 in := new(CreateSessionRequest)
899 if err := dec(in); err != nil {
902 if interceptor == nil {
903 return srv.(SpannerServer).CreateSession(ctx, in)
905 info := &grpc.UnaryServerInfo{
907 FullMethod: "/google.spanner.v1.Spanner/CreateSession",
909 handler := func(ctx context.Context, req interface{}) (interface{}, error) {
910 return srv.(SpannerServer).CreateSession(ctx, req.(*CreateSessionRequest))
912 return interceptor(ctx, in, info, handler)
915 func _Spanner_GetSession_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
916 in := new(GetSessionRequest)
917 if err := dec(in); err != nil {
920 if interceptor == nil {
921 return srv.(SpannerServer).GetSession(ctx, in)
923 info := &grpc.UnaryServerInfo{
925 FullMethod: "/google.spanner.v1.Spanner/GetSession",
927 handler := func(ctx context.Context, req interface{}) (interface{}, error) {
928 return srv.(SpannerServer).GetSession(ctx, req.(*GetSessionRequest))
930 return interceptor(ctx, in, info, handler)
933 func _Spanner_DeleteSession_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
934 in := new(DeleteSessionRequest)
935 if err := dec(in); err != nil {
938 if interceptor == nil {
939 return srv.(SpannerServer).DeleteSession(ctx, in)
941 info := &grpc.UnaryServerInfo{
943 FullMethod: "/google.spanner.v1.Spanner/DeleteSession",
945 handler := func(ctx context.Context, req interface{}) (interface{}, error) {
946 return srv.(SpannerServer).DeleteSession(ctx, req.(*DeleteSessionRequest))
948 return interceptor(ctx, in, info, handler)
951 func _Spanner_ExecuteSql_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
952 in := new(ExecuteSqlRequest)
953 if err := dec(in); err != nil {
956 if interceptor == nil {
957 return srv.(SpannerServer).ExecuteSql(ctx, in)
959 info := &grpc.UnaryServerInfo{
961 FullMethod: "/google.spanner.v1.Spanner/ExecuteSql",
963 handler := func(ctx context.Context, req interface{}) (interface{}, error) {
964 return srv.(SpannerServer).ExecuteSql(ctx, req.(*ExecuteSqlRequest))
966 return interceptor(ctx, in, info, handler)
969 func _Spanner_ExecuteStreamingSql_Handler(srv interface{}, stream grpc.ServerStream) error {
970 m := new(ExecuteSqlRequest)
971 if err := stream.RecvMsg(m); err != nil {
974 return srv.(SpannerServer).ExecuteStreamingSql(m, &spannerExecuteStreamingSqlServer{stream})
977 type Spanner_ExecuteStreamingSqlServer interface {
978 Send(*PartialResultSet) error
982 type spannerExecuteStreamingSqlServer struct {
986 func (x *spannerExecuteStreamingSqlServer) Send(m *PartialResultSet) error {
987 return x.ServerStream.SendMsg(m)
990 func _Spanner_Read_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
991 in := new(ReadRequest)
992 if err := dec(in); err != nil {
995 if interceptor == nil {
996 return srv.(SpannerServer).Read(ctx, in)
998 info := &grpc.UnaryServerInfo{
1000 FullMethod: "/google.spanner.v1.Spanner/Read",
1002 handler := func(ctx context.Context, req interface{}) (interface{}, error) {
1003 return srv.(SpannerServer).Read(ctx, req.(*ReadRequest))
1005 return interceptor(ctx, in, info, handler)
1008 func _Spanner_StreamingRead_Handler(srv interface{}, stream grpc.ServerStream) error {
1009 m := new(ReadRequest)
1010 if err := stream.RecvMsg(m); err != nil {
1013 return srv.(SpannerServer).StreamingRead(m, &spannerStreamingReadServer{stream})
1016 type Spanner_StreamingReadServer interface {
1017 Send(*PartialResultSet) error
1021 type spannerStreamingReadServer struct {
1025 func (x *spannerStreamingReadServer) Send(m *PartialResultSet) error {
1026 return x.ServerStream.SendMsg(m)
1029 func _Spanner_BeginTransaction_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
1030 in := new(BeginTransactionRequest)
1031 if err := dec(in); err != nil {
1034 if interceptor == nil {
1035 return srv.(SpannerServer).BeginTransaction(ctx, in)
1037 info := &grpc.UnaryServerInfo{
1039 FullMethod: "/google.spanner.v1.Spanner/BeginTransaction",
1041 handler := func(ctx context.Context, req interface{}) (interface{}, error) {
1042 return srv.(SpannerServer).BeginTransaction(ctx, req.(*BeginTransactionRequest))
1044 return interceptor(ctx, in, info, handler)
1047 func _Spanner_Commit_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
1048 in := new(CommitRequest)
1049 if err := dec(in); err != nil {
1052 if interceptor == nil {
1053 return srv.(SpannerServer).Commit(ctx, in)
1055 info := &grpc.UnaryServerInfo{
1057 FullMethod: "/google.spanner.v1.Spanner/Commit",
1059 handler := func(ctx context.Context, req interface{}) (interface{}, error) {
1060 return srv.(SpannerServer).Commit(ctx, req.(*CommitRequest))
1062 return interceptor(ctx, in, info, handler)
1065 func _Spanner_Rollback_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
1066 in := new(RollbackRequest)
1067 if err := dec(in); err != nil {
1070 if interceptor == nil {
1071 return srv.(SpannerServer).Rollback(ctx, in)
1073 info := &grpc.UnaryServerInfo{
1075 FullMethod: "/google.spanner.v1.Spanner/Rollback",
1077 handler := func(ctx context.Context, req interface{}) (interface{}, error) {
1078 return srv.(SpannerServer).Rollback(ctx, req.(*RollbackRequest))
1080 return interceptor(ctx, in, info, handler)
1083 var _Spanner_serviceDesc = grpc.ServiceDesc{
1084 ServiceName: "google.spanner.v1.Spanner",
1085 HandlerType: (*SpannerServer)(nil),
1086 Methods: []grpc.MethodDesc{
1088 MethodName: "CreateSession",
1089 Handler: _Spanner_CreateSession_Handler,
1092 MethodName: "GetSession",
1093 Handler: _Spanner_GetSession_Handler,
1096 MethodName: "DeleteSession",
1097 Handler: _Spanner_DeleteSession_Handler,
1100 MethodName: "ExecuteSql",
1101 Handler: _Spanner_ExecuteSql_Handler,
1105 Handler: _Spanner_Read_Handler,
1108 MethodName: "BeginTransaction",
1109 Handler: _Spanner_BeginTransaction_Handler,
1112 MethodName: "Commit",
1113 Handler: _Spanner_Commit_Handler,
1116 MethodName: "Rollback",
1117 Handler: _Spanner_Rollback_Handler,
1120 Streams: []grpc.StreamDesc{
1122 StreamName: "ExecuteStreamingSql",
1123 Handler: _Spanner_ExecuteStreamingSql_Handler,
1124 ServerStreams: true,
1127 StreamName: "StreamingRead",
1128 Handler: _Spanner_StreamingRead_Handler,
1129 ServerStreams: true,
1132 Metadata: "google/spanner/v1/spanner.proto",
1135 func init() { proto.RegisterFile("google/spanner/v1/spanner.proto", fileDescriptor4) }
1137 var fileDescriptor4 = []byte{
1138 // 1202 bytes of a gzipped FileDescriptorProto
1139 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x97, 0xcd, 0x6f, 0x1b, 0xc5,
1140 0x1b, 0xc7, 0xbb, 0x4e, 0x6a, 0xc7, 0x8f, 0x93, 0xd6, 0x9d, 0x5f, 0xda, 0xf8, 0xe7, 0x96, 0xd6,
1141 0xdd, 0x52, 0x6a, 0x59, 0xc2, 0x4b, 0x0d, 0x87, 0x62, 0x40, 0xb4, 0x6e, 0xdd, 0x36, 0x6a, 0x5e,
1142 0x9c, 0xb5, 0xdb, 0x4a, 0x95, 0x90, 0x35, 0xb6, 0x1f, 0xcc, 0xe2, 0x7d, 0xcb, 0xce, 0x6c, 0x54,
1143 0xab, 0xea, 0x85, 0x2b, 0x17, 0x5e, 0x0e, 0x70, 0xe0, 0x06, 0x27, 0xc4, 0x9d, 0x1b, 0xff, 0x04,
1144 0xff, 0x02, 0x17, 0xfe, 0x06, 0x2e, 0x68, 0x66, 0x77, 0x9d, 0x8d, 0x77, 0x9b, 0xa4, 0x04, 0x71,
1145 0xca, 0xbc, 0x7c, 0x9f, 0x79, 0x3e, 0xf3, 0x9d, 0xd9, 0x79, 0x1c, 0xb8, 0x32, 0x76, 0x9c, 0xb1,
1146 0x89, 0x1a, 0x73, 0xa9, 0x6d, 0xa3, 0xa7, 0xed, 0xdd, 0x8c, 0x9a, 0x75, 0xd7, 0x73, 0xb8, 0x43,
1147 0xce, 0x05, 0x82, 0x7a, 0x34, 0xba, 0x77, 0xb3, 0x7c, 0x29, 0x8c, 0xa1, 0xae, 0xa1, 0x51, 0xdb,
1148 0x76, 0x38, 0xe5, 0x86, 0x63, 0xb3, 0x20, 0xa0, 0x7c, 0x3e, 0x3e, 0xeb, 0xf3, 0xcf, 0xc2, 0xe1,
1149 0x8b, 0xe1, 0xb0, 0xec, 0x0d, 0xfc, 0x4f, 0x35, 0xb4, 0x5c, 0x3e, 0x0d, 0x27, 0x2f, 0xcd, 0x4f,
1150 0x32, 0xee, 0xf9, 0x43, 0x1e, 0xce, 0x5e, 0x99, 0x9f, 0xe5, 0x86, 0x85, 0x8c, 0x53, 0xcb, 0x9d,
1151 0x0b, 0x8f, 0x6d, 0x62, 0x82, 0xd3, 0x08, 0xa8, 0x92, 0x9c, 0xb5, 0xfc, 0x80, 0x39, 0x54, 0xa8,
1152 0x49, 0x85, 0x87, 0xcc, 0x37, 0x79, 0x9f, 0x61, 0x04, 0x71, 0x2d, 0xa9, 0xe1, 0x1e, 0xb5, 0x19,
1153 0x1d, 0xc6, 0x16, 0x4a, 0x01, 0xe1, 0x53, 0x17, 0x83, 0x59, 0xb5, 0x01, 0xab, 0x77, 0x3d, 0xa4,
1154 0x1c, 0xbb, 0xc8, 0x98, 0xe1, 0xd8, 0x3a, 0xee, 0xfa, 0xc8, 0x38, 0x29, 0xc3, 0xd2, 0x88, 0x72,
1155 0x3a, 0xa0, 0x0c, 0x4b, 0x4a, 0x45, 0xa9, 0xe6, 0xf5, 0x59, 0x5f, 0x7d, 0x03, 0x72, 0xa1, 0x9a,
1156 0x10, 0x58, 0xb4, 0xa9, 0x15, 0x49, 0x64, 0x5b, 0xbd, 0x01, 0xe7, 0x1e, 0x20, 0x9f, 0x5b, 0x2f,
1157 0x4d, 0x58, 0x83, 0xd5, 0x7b, 0x68, 0x62, 0x22, 0x77, 0x9a, 0xf6, 0xcb, 0x45, 0x38, 0xd7, 0x7e,
1158 0x8e, 0x43, 0x9f, 0x63, 0x77, 0xd7, 0x8c, 0x94, 0x25, 0xc8, 0xb1, 0x20, 0x36, 0x14, 0x47, 0x5d,
1159 0xf2, 0x10, 0x0a, 0x31, 0x2b, 0x4a, 0x99, 0x8a, 0x52, 0x2d, 0x34, 0xde, 0xaa, 0x27, 0x2e, 0x4e,
1160 0xbd, 0xb7, 0xaf, 0xea, 0xa2, 0x89, 0x43, 0xee, 0x78, 0x7a, 0x3c, 0x94, 0x14, 0x61, 0x81, 0xed,
1161 0x9a, 0xa5, 0x05, 0xb9, 0xbe, 0x68, 0x12, 0x0d, 0xb2, 0x2e, 0xf5, 0xa8, 0xc5, 0x4a, 0x8b, 0x72,
1162 0xd9, 0xb5, 0x68, 0xd9, 0xe8, 0x32, 0xd4, 0xbb, 0xf2, 0xaa, 0xe8, 0xa1, 0x8c, 0x3c, 0x86, 0x82,
1163 0x6c, 0xf5, 0x85, 0xf1, 0xac, 0x74, 0xba, 0xb2, 0x50, 0x2d, 0x34, 0xde, 0x4b, 0x81, 0x49, 0xec,
1164 0xb0, 0xde, 0x11, 0x71, 0x3d, 0x11, 0xd6, 0xb6, 0xb9, 0x37, 0xd5, 0xc1, 0x9d, 0x0d, 0x90, 0xab,
1165 0xb0, 0x2c, 0xae, 0x84, 0x85, 0x7d, 0xee, 0x4c, 0xd0, 0x2e, 0x65, 0x2b, 0x4a, 0x75, 0x59, 0x2f,
1166 0x04, 0x63, 0x3d, 0x31, 0x44, 0x36, 0x01, 0x76, 0x7d, 0xf4, 0xa6, 0x7d, 0xcb, 0x19, 0x61, 0x29,
1167 0x57, 0x51, 0xaa, 0x67, 0x1a, 0xf5, 0x63, 0x25, 0xde, 0x11, 0x61, 0x9b, 0xce, 0x08, 0xf5, 0xfc,
1168 0x6e, 0xd4, 0x2c, 0x3f, 0x81, 0xb3, 0x73, 0x40, 0xc2, 0x9e, 0x09, 0x4e, 0x43, 0xfb, 0x45, 0x93,
1169 0xbc, 0x0d, 0xa7, 0xf7, 0xa8, 0xe9, 0x63, 0x68, 0xfa, 0x5a, 0x9a, 0xe9, 0x53, 0x17, 0xf5, 0x40,
1170 0xd5, 0xcc, 0xdc, 0x52, 0xd4, 0x3a, 0xe4, 0x67, 0xf9, 0x08, 0x40, 0x76, 0x6b, 0x5b, 0xdf, 0xbc,
1171 0xb3, 0x51, 0x3c, 0x45, 0x96, 0x60, 0xb1, 0xb3, 0x71, 0x67, 0xab, 0xa8, 0x90, 0x02, 0xe4, 0x3a,
1172 0xfa, 0xf6, 0xfd, 0xf5, 0x8d, 0x76, 0x31, 0xa3, 0xfe, 0x94, 0x81, 0x82, 0x8e, 0x74, 0xf4, 0x5f,
1173 0xde, 0x83, 0x55, 0x38, 0xcd, 0xe9, 0xc0, 0xc4, 0xf0, 0x26, 0x04, 0x1d, 0x31, 0x6a, 0xd8, 0x23,
1174 0x7c, 0x2e, 0xaf, 0x42, 0x5e, 0x0f, 0x3a, 0x82, 0x67, 0xe8, 0x98, 0xbe, 0x65, 0x07, 0x87, 0x9d,
1175 0xd7, 0xa3, 0x2e, 0x69, 0x40, 0x6e, 0x82, 0x53, 0xf1, 0x0d, 0xcb, 0xe3, 0x2a, 0x34, 0xfe, 0x9f,
1176 0xc2, 0xf2, 0x08, 0xa7, 0x5d, 0xe4, 0x7a, 0x76, 0x22, 0xff, 0x8a, 0x1c, 0xa6, 0x61, 0x19, 0xbc,
1177 0xb4, 0x54, 0x51, 0xaa, 0x0b, 0x7a, 0xd0, 0x49, 0x9c, 0x7e, 0x3e, 0x71, 0xfa, 0x2a, 0x87, 0xb5,
1178 0x16, 0x8e, 0x0d, 0x3b, 0xb6, 0xb7, 0xa3, 0x1d, 0xfb, 0x18, 0x72, 0x8e, 0x2b, 0x1f, 0xcf, 0xd0,
1179 0xad, 0xeb, 0x87, 0xbb, 0xb5, 0x1d, 0x88, 0xf5, 0x28, 0x4a, 0xfd, 0x4b, 0x81, 0x95, 0xbb, 0x8e,
1180 0x65, 0x19, 0xfc, 0xe8, 0x64, 0x37, 0xe0, 0x4c, 0xcc, 0xe3, 0xbe, 0x31, 0x92, 0x39, 0x97, 0x1f,
1181 0x9e, 0xd2, 0x57, 0x62, 0xe3, 0xeb, 0x23, 0xf2, 0x09, 0x5c, 0x60, 0x86, 0x3d, 0x36, 0xb1, 0xef,
1182 0x33, 0xec, 0xc7, 0x8f, 0x74, 0xe1, 0x35, 0x20, 0x1f, 0x9e, 0xd2, 0x57, 0x83, 0x65, 0x1e, 0x33,
1183 0x8c, 0x4d, 0x93, 0xf7, 0x21, 0x1f, 0xbd, 0xbf, 0xe2, 0xab, 0x16, 0xdf, 0xe7, 0xc5, 0x94, 0x15,
1184 0x37, 0x43, 0x8d, 0xbe, 0xaf, 0x6e, 0xad, 0x1c, 0xb8, 0x61, 0xea, 0x53, 0x38, 0x13, 0x6d, 0x9e,
1185 0xb9, 0x8e, 0xcd, 0x90, 0xb4, 0xa1, 0x38, 0x94, 0x23, 0xfd, 0x59, 0x8d, 0x90, 0x36, 0x14, 0x1a,
1186 0xe5, 0xc4, 0xc3, 0xd1, 0x8b, 0x14, 0xfa, 0xd9, 0x20, 0x66, 0x36, 0xa0, 0xea, 0x70, 0x56, 0x77,
1187 0x4c, 0x73, 0x40, 0x87, 0x93, 0xa3, 0x7d, 0xbd, 0x9e, 0xee, 0xeb, 0x9c, 0xab, 0x8d, 0x3f, 0x97,
1188 0x21, 0xd7, 0x0d, 0xb6, 0x47, 0xbe, 0x17, 0xc7, 0x16, 0x2f, 0x05, 0xe4, 0x46, 0x8a, 0x03, 0x69,
1189 0xc5, 0xa2, 0x5c, 0x4e, 0x11, 0x86, 0x12, 0xb5, 0xf5, 0xc5, 0xef, 0x7f, 0x7c, 0x9b, 0xf9, 0x50,
1190 0x6d, 0x8a, 0xc2, 0xf3, 0x22, 0xaa, 0x21, 0x1f, 0xb9, 0x9e, 0xf3, 0x39, 0x0e, 0x39, 0xd3, 0x6a,
1191 0x9a, 0x61, 0x33, 0x4e, 0xed, 0x21, 0x8a, 0x76, 0x34, 0xcf, 0xb4, 0xda, 0x4b, 0x2d, 0xdc, 0x0c,
1192 0x23, 0x5f, 0x29, 0x00, 0xfb, 0x25, 0x85, 0xbc, 0x99, 0x92, 0x2e, 0x51, 0x71, 0x0e, 0x85, 0xba,
1193 0x2d, 0xa1, 0x9a, 0xe4, 0x96, 0x84, 0x12, 0x05, 0xe6, 0x18, 0x40, 0x33, 0x1e, 0xad, 0xf6, 0x92,
1194 0x7c, 0xa3, 0xc0, 0xca, 0x81, 0xe2, 0x95, 0xea, 0x56, 0x5a, 0x79, 0x2b, 0x5f, 0x48, 0x9c, 0x7a,
1195 0x5b, 0xfc, 0xec, 0x88, 0xa0, 0x6a, 0xff, 0x1c, 0xea, 0x47, 0x05, 0x60, 0xff, 0x25, 0x4f, 0xf5,
1196 0x29, 0xf1, 0xd0, 0x97, 0x2f, 0xa5, 0xa8, 0x74, 0xf9, 0x4b, 0xa3, 0x8b, 0x5c, 0xdd, 0x91, 0x50,
1197 0x8f, 0xd4, 0xfb, 0x12, 0x2a, 0x4c, 0xf6, 0x9a, 0x5c, 0x4d, 0x9c, 0x25, 0x6d, 0x2a, 0x35, 0xf2,
1198 0x9b, 0x02, 0xff, 0x8b, 0x30, 0xb8, 0x87, 0xd4, 0x32, 0xec, 0xf1, 0xf1, 0x71, 0xaf, 0xa5, 0xa8,
1199 0x3a, 0xd4, 0xe3, 0x06, 0x35, 0xf7, 0xa9, 0x9f, 0x49, 0xea, 0x9e, 0xba, 0xfd, 0x6f, 0x50, 0xc7,
1200 0x18, 0x9b, 0x4a, 0xed, 0x1d, 0x85, 0x7c, 0xad, 0xc0, 0xa2, 0xa8, 0x3e, 0xe4, 0x72, 0xaa, 0x75,
1201 0xb3, 0xb2, 0x74, 0x84, 0xb5, 0x8f, 0x24, 0x64, 0x5b, 0xbd, 0x7d, 0x12, 0x48, 0x0f, 0xe9, 0x48,
1202 0x98, 0xfa, 0x8b, 0x02, 0x2b, 0x33, 0xd2, 0x63, 0xc1, 0x1d, 0xcb, 0xc8, 0x9e, 0x64, 0xdc, 0x52,
1203 0xd7, 0x4f, 0xc2, 0xc8, 0xe2, 0x5c, 0x81, 0x85, 0xbf, 0x2a, 0x50, 0x9c, 0x2f, 0x4d, 0xa4, 0x96,
1204 0x42, 0xf4, 0x8a, 0xfa, 0x55, 0xbe, 0x7c, 0xf8, 0x7b, 0xaf, 0x3e, 0x95, 0xe0, 0x3b, 0xea, 0xc6,
1205 0x49, 0xc0, 0x07, 0x73, 0xc9, 0x85, 0xd1, 0x3f, 0x28, 0x90, 0x0d, 0x1e, 0x78, 0x52, 0x49, 0x7b,
1206 0x1f, 0xe3, 0x85, 0xaf, 0x7c, 0xf5, 0x10, 0x45, 0x50, 0x1d, 0xd4, 0x4d, 0x09, 0xfa, 0x40, 0x6d,
1207 0x9d, 0x04, 0x34, 0xa8, 0x15, 0x02, 0xef, 0x3b, 0x05, 0x96, 0xa2, 0x32, 0x41, 0xd4, 0xb4, 0x2b,
1208 0x70, 0xb0, 0x86, 0xbc, 0xf2, 0x35, 0xda, 0x96, 0x5c, 0xeb, 0xea, 0xbd, 0x13, 0xdd, 0xce, 0x30,
1209 0x59, 0x53, 0xa9, 0xb5, 0x5e, 0xc0, 0xf9, 0xa1, 0x63, 0x25, 0x89, 0x5a, 0xcb, 0x61, 0x05, 0xea,
1210 0x08, 0x80, 0x8e, 0xf2, 0xec, 0x56, 0x28, 0x19, 0x3b, 0x26, 0xb5, 0xc7, 0x75, 0xc7, 0x1b, 0x6b,
1211 0x63, 0xb4, 0x25, 0x9e, 0x16, 0x4c, 0x51, 0xd7, 0x60, 0xb1, 0xff, 0x67, 0x3e, 0x08, 0x9b, 0x3f,
1212 0x67, 0xd6, 0x1e, 0x04, 0xa1, 0x77, 0x4d, 0xc7, 0x1f, 0xd5, 0xc3, 0x75, 0xeb, 0x4f, 0x6e, 0x0e,
1213 0xb2, 0x32, 0xfc, 0xdd, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x1c, 0x21, 0x25, 0x65, 0x5b, 0x0e,