tessl install tessl/golang-cloud-google-com--go--spanner@1.87.2Official Google Cloud Spanner client library for Go providing comprehensive database operations, transactions, and admin functionality
Overview of protobuf packages and key message types for Spanner APIs.
The Spanner Go client includes several protobuf packages:
import "cloud.google.com/go/spanner/apiv1/spannerpb"type CreateSessionRequest struct {
Database string
Session *Session
}
type BatchCreateSessionsRequest struct {
Database string
SessionCount int32
SessionTemplate *Session
}
type GetSessionRequest struct {
Name string
}
type DeleteSessionRequest struct {
Name string
}
type ExecuteSqlRequest struct {
Session string
Transaction *TransactionSelector
Sql string
Params *Struct
ParamTypes map[string]*Type
ResumeToken []byte
QueryMode ExecuteSqlRequest_QueryMode
PartitionToken []byte
Seqno int64
QueryOptions *ExecuteSqlRequest_QueryOptions
RequestOptions *RequestOptions
DirectedReadOptions *DirectedReadOptions
DataBoostEnabled bool
}
type ReadRequest struct {
Session string
Transaction *TransactionSelector
Table string
Index string
Columns []string
KeySet *KeySet
Limit int64
ResumeToken []byte
PartitionToken []byte
RequestOptions *RequestOptions
DirectedReadOptions *DirectedReadOptions
DataBoostEnabled bool
OrderBy ReadRequest_OrderBy
LockHint ReadRequest_LockHint
}
type BeginTransactionRequest struct {
Session string
Options *TransactionOptions
RequestOptions *RequestOptions
MutationKey *RequestOptions_TransactionRoutingInfo
}
type CommitRequest struct {
Session string
Mutations []*Mutation
ReturnCommitStats bool
MaxCommitDelay *durationpb.Duration
RequestOptions *RequestOptions
PrecommitToken *MultiplexedSessionPrecommitToken
}
type RollbackRequest struct {
Session string
TransactionId []byte
}type ResultSet struct {
Metadata *ResultSetMetadata
Rows []*Struct
Stats *ResultSetStats
PrecommitToken *MultiplexedSessionPrecommitToken
}
type ResultSetMetadata struct {
RowType *StructType
Transaction *Transaction
UndeclaredParameters *StructType
}
type ResultSetStats struct {
QueryPlan *QueryPlan
QueryStats *Struct
RowCountExact int64
RowCountLowerBound int64
}
type CommitResponse struct {
CommitTimestamp *timestamppb.Timestamp
CommitStats *CommitResponse_CommitStats
PrecommitToken *MultiplexedSessionPrecommitToken
}type Type struct {
Code TypeCode
ArrayElementType *Type
StructType *StructType
TypeAnnotation TypeAnnotation
ProtoTypeFqn string
}
type TypeCode int32
const (
TYPE_CODE_UNSPECIFIED TypeCode = 0
BOOL TypeCode = 1
INT64 TypeCode = 2
FLOAT64 TypeCode = 3
FLOAT32 TypeCode = 4
TIMESTAMP TypeCode = 5
DATE TypeCode = 6
STRING TypeCode = 7
BYTES TypeCode = 8
ARRAY TypeCode = 9
STRUCT TypeCode = 10
NUMERIC TypeCode = 11
JSON TypeCode = 12
PROTO TypeCode = 13
ENUM TypeCode = 14
)
type Value struct {
// One of:
NullValue structpb.NullValue
BoolValue bool
StringValue string
NumberValue float64
ListValue *ListValue
StructValue *Struct
}
type KeySet struct {
Keys []*ListValue
Ranges []*KeyRange
All bool
}
type KeyRange struct {
StartKeyType isKeyRange_StartKeyType
EndKeyType isKeyRange_EndKeyType
}
type Mutation struct {
Operation isMutation_Operation
}type TransactionOptions struct {
Mode isTransactionOptions_Mode
ExcludeTxnFromChangeStreams bool
}
type TransactionOptions_ReadWrite struct {
ReadLockMode TransactionOptions_ReadWrite_ReadLockMode
Multiplexed bool
IsolationLevel TransactionOptions_IsolationLevel
}
type TransactionOptions_ReadOnly struct {
ReturnReadTimestamp bool
TimestampBound isTransactionOptions_ReadOnly_TimestampBound
IsolationLevel TransactionOptions_IsolationLevel
}
type TransactionOptions_PartitionedDml struct {}
type TransactionOptions_Batch struct {}
type TransactionSelector struct {
Selector isTransactionSelector_Selector
}
type Transaction struct {
Id []byte
ReadTimestamp *timestamppb.Timestamp
PrecommitToken *MultiplexedSessionPrecommitToken
}type Session struct {
Name string
Labels map[string]string
CreateTime *timestamppb.Timestamp
ApproximateLastUseTime *timestamppb.Timestamp
CreatorRole string
Multiplexed bool
}type RequestOptions struct {
Priority RequestOptions_Priority
RequestTag string
TransactionTag string
TransactionRoutingInfo *RequestOptions_TransactionRoutingInfo
}
type RequestOptions_Priority int32
const (
PRIORITY_UNSPECIFIED RequestOptions_Priority = 0
PRIORITY_LOW RequestOptions_Priority = 1
PRIORITY_MEDIUM RequestOptions_Priority = 2
PRIORITY_HIGH RequestOptions_Priority = 3
)type DirectedReadOptions struct {
Replicas isDirectedReadOptions_Replicas
}
type DirectedReadOptions_IncludeReplicas struct {
ReplicaSelections []*DirectedReadOptions_ReplicaSelection
AutoFailoverDisabled bool
}
type DirectedReadOptions_ReplicaSelection struct {
Location string
Type DirectedReadOptions_ReplicaSelection_Type
}import "cloud.google.com/go/spanner/admin/database/apiv1/databasepb"type Database struct {
Name string
State Database_State
CreateTime *timestamppb.Timestamp
RestoreInfo *RestoreInfo
EncryptionConfig *EncryptionConfig
EncryptionInfo []*EncryptionInfo
VersionRetentionPeriod string
EarliestVersionTime *timestamppb.Timestamp
DefaultLeader string
DatabaseDialect DatabaseDialect
EnableDropProtection bool
ReconciliationState Database_ReconciliationState
QuorumInfo *QuorumInfo
}
type CreateDatabaseRequest struct {
Parent string
CreateStatement string
ExtraStatements []string
EncryptionConfig *EncryptionConfig
DatabaseDialect DatabaseDialect
ProtoDescriptors []byte
}
type UpdateDatabaseDdlRequest struct {
Database string
Statements []string
OperationId string
ProtoDescriptors []byte
}
type GetDatabaseDdlRequest struct {
Database string
}
type GetDatabaseDdlResponse struct {
Statements []string
ProtoDescriptors []byte
}
type DropDatabaseRequest struct {
Database string
}type Backup struct {
Name string
Database string
VersionTime *timestamppb.Timestamp
ExpireTime *timestamppb.Timestamp
CreateTime *timestamppb.Timestamp
SizeBytes int64
State Backup_State
ReferencingDatabases []string
EncryptionInfo *EncryptionInfo
DatabaseDialect DatabaseDialect
ReferencingBackups []string
MaxExpireTime *timestamppb.Timestamp
BackupSchedules []string
IncrementalBackupChainId string
OldestVersionTime *timestamppb.Timestamp
ExclusiveSizeBytes int64
}
type CreateBackupRequest struct {
Parent string
BackupId string
Backup *Backup
EncryptionConfig *EncryptionConfig
}
type RestoreDatabaseRequest struct {
Parent string
DatabaseId string
Backup string
EncryptionConfig *EncryptionConfig
}
type CopyBackupRequest struct {
Parent string
BackupId string
SourceBackup string
ExpireTime *timestamppb.Timestamp
EncryptionConfig *EncryptionConfig
}type BackupSchedule struct {
Name string
Spec *BackupScheduleSpec
RetentionDuration *durationpb.Duration
EncryptionConfig *EncryptionConfig
FullBackupSpec *FullBackupSpec
IncrementalBackupSpec *IncrementalBackupSpec
UpdateTime *timestamppb.Timestamp
}
type CreateBackupScheduleRequest struct {
Parent string
BackupScheduleId string
BackupSchedule *BackupSchedule
}import "cloud.google.com/go/spanner/admin/instance/apiv1/instancepb"type Instance struct {
Name string
Config string
DisplayName string
NodeCount int32
ProcessingUnits int32
State Instance_State
Labels map[string]string
EndpointUris []string
CreateTime *timestamppb.Timestamp
UpdateTime *timestamppb.Timestamp
Autoscaling *Autoscaling
Edition Instance_Edition
FreeInstanceMetadata *FreeInstanceMetadata
}
type CreateInstanceRequest struct {
Parent string
InstanceId string
Instance *Instance
}
type UpdateInstanceRequest struct {
Instance *Instance
FieldMask *fieldmaskpb.FieldMask
}
type DeleteInstanceRequest struct {
Name string
}type InstanceConfig struct {
Name string
DisplayName string
ConfigType InstanceConfig_Type
Replicas []*ReplicaInfo
OptionalReplicas []*ReplicaInfo
BaseConfig string
Labels map[string]string
Etag string
LeaderOptions []string
Reconciling bool
State InstanceConfig_State
FreeInstanceAvailability []*FreeInstanceAvailability
QuorumInfo *QuorumInfo
}
type CreateInstanceConfigRequest struct {
Parent string
InstanceConfigId string
InstanceConfig *InstanceConfig
ValidateOnly bool
}import (
"cloud.google.com/go/spanner/apiv1/spannerpb"
"google.golang.org/protobuf/types/known/structpb"
)
// Create typed request
req := &spannerpb.ExecuteSqlRequest{
Session: sessionName,
Sql: "SELECT * FROM Users WHERE id = @id",
Params: &structpb.Struct{
Fields: map[string]*structpb.Value{
"id": structpb.NewNumberValue(123),
},
},
ParamTypes: map[string]*spannerpb.Type{
"id": {Code: spannerpb.TypeCode_INT64},
},
QueryOptions: &spannerpb.ExecuteSqlRequest_QueryOptions{
OptimizerVersion: "latest",
},
RequestOptions: &spannerpb.RequestOptions{
Priority: spannerpb.RequestOptions_PRIORITY_HIGH,
RequestTag: "user-query",
},
}// From high-level client RowIterator
iter := client.Single().Query(ctx, stmt)
defer iter.Stop()
// Access metadata
if iter.Metadata != nil {
fmt.Printf("Row type: %v\n", iter.Metadata.RowType)
if iter.Metadata.Transaction != nil {
fmt.Printf("Transaction ID: %x\n", iter.Metadata.Transaction.Id)
}
}
// Access query plan (after QueryWithStats)
if iter.QueryPlan != nil {
fmt.Printf("Query plan: %v\n", iter.QueryPlan)
}For exhaustive type definitions, see: