Documentation ¶
Overview ¶
Package ydb-go-sdk - native Go's driver for YDB.
Supports table, discovery, coordination, ratelimiter, scheme and scripting clients for YDB. YDB is an open-source Distributed SQL Database that combines high availability and scalability with strict consistency and ACID transactions.
Example (TableBulkUpsert) ¶
ctx := context.Background() db, err := ydb.Open(ctx, "grpcs://localhost:2135/?database=/local", ydb.WithAnonymousCredentials(), ) if err != nil { log.Fatal(err) } defer func() { _ = db.Close(ctx) }() type logMessage struct { App string Host string Timestamp time.Time HTTPCode uint32 Message string } // prepare native go data const batchSize = 10000 logs := make([]logMessage, 0, batchSize) for i := 0; i < batchSize; i++ { message := logMessage{ App: fmt.Sprintf("App_%d", i/256), Host: fmt.Sprintf("192.168.0.%d", i%256), Timestamp: time.Now().Add(time.Millisecond * time.Duration(i%1000)), HTTPCode: 200, } if i%2 == 0 { message.Message = "GET / HTTP/1.1" } else { message.Message = "GET /images/logo.png HTTP/1.1" } logs = append(logs, message) } // execute bulk upsert with native ydb data err = db.Table().Do( // Do retry operation on errors with best effort ctx, // context manage exiting from Do func(ctx context.Context, s table.Session) (err error) { // retry operation rows := make([]types.Value, 0, len(logs)) for _, msg := range logs { rows = append(rows, types.StructValue( types.StructFieldValue("App", types.UTF8Value(msg.App)), types.StructFieldValue("Host", types.UTF8Value(msg.Host)), types.StructFieldValue("Timestamp", types.TimestampValueFromTime(msg.Timestamp)), types.StructFieldValue("HTTPCode", types.Uint32Value(msg.HTTPCode)), types.StructFieldValue("Message", types.UTF8Value(msg.Message)), )) } return s.BulkUpsert(ctx, "/local/bulk_upsert_example", types.ListValue(rows...)) }, ) if err != nil { log.Printf("unexpected error: %v", err) }
Output:
Example (TableCreateTable) ¶
ctx := context.Background() db, err := ydb.Open(ctx, "grpcs://localhost:2135/?database=/local", ydb.WithAnonymousCredentials(), ) if err != nil { log.Fatal(err) } defer func() { _ = db.Close(ctx) }() err = db.Table().Do( ctx, func(ctx context.Context, s table.Session) (err error) { return s.CreateTable(ctx, path.Join(db.Name(), "series"), options.WithColumn("series_id", types.Optional(types.TypeUint64)), options.WithColumn("title", types.Optional(types.TypeUTF8)), options.WithColumn("series_info", types.Optional(types.TypeUTF8)), options.WithColumn("release_date", types.Optional(types.TypeDate)), options.WithColumn("comment", types.Optional(types.TypeUTF8)), options.WithPrimaryKeyColumn("series_id"), ) }, ) if err != nil { log.Printf("unexpected error: %v", err) }
Output:
Example (TableSelect) ¶
ctx := context.Background() db, err := ydb.Open(ctx, "grpcs://localhost:2135/?database=/local", ydb.WithAnonymousCredentials(), ) if err != nil { log.Fatal(err) } defer func() { _ = db.Close(ctx) }() var ( query = `SELECT 42 as id, "my string" as myStr` id int32 // required value myStr string // optional value ) err = db.Table().Do( // Do retry operation on errors with best effort ctx, // context manage exiting from Do func(ctx context.Context, s table.Session) (err error) { // retry operation _, res, err := s.Execute(ctx, table.DefaultTxControl(), query, nil) if err != nil { return err // for driver retry } defer func() { _ = res.Close() // must close always }() if err = res.NextResultSetErr(ctx); err != nil { // check single result set and switch to it return err // for driver retry } for res.NextRow() { // iterate over rows err = res.ScanNamed( named.Required("id", &id), named.OptionalWithDefault("myStr", &myStr), ) if err != nil { return err } log.Printf("id=%v, myStr='%s'\n", id, myStr) } return res.Err() // for driver retry if not nil }, ) if err != nil { log.Printf("unexpected error: %v", err) }
Output:
Index ¶
- Constants
- func IsOperationError(err error, codes ...Ydb.StatusIds_StatusCode) bool
- func IsOperationErrorAlreadyExistsError(err error) bool
- func IsOperationErrorNotFoundError(err error) bool
- func IsOperationErrorOverloaded(err error) bool
- func IsOperationErrorSchemeError(err error) bool
- func IsOperationErrorUnavailable(err error) bool
- func IsRatelimiterAcquireError(err error) bool
- func IsTimeoutError(err error) bool
- func IsTransportError(err error, codes ...grpcCodes.Code) bool
- func IsYdbError(err error) bool
- func IterateByIssues(err error, ...)
- func ToRatelimiterAcquireError(err error) ratelimiter.AcquireError
- func WithOperationCancelAfter(ctx context.Context, operationCancelAfter time.Duration) context.Context
- func WithOperationTimeout(ctx context.Context, operationTimeout time.Duration) context.Context
- func WithRequestType(ctx context.Context, requestType string) context.Context
- func WithTraceID(ctx context.Context, traceID string) context.Context
- type Connection
- type Error
- type LoggerOption
- type Option
- func MergeOptions(opts ...Option) Option
- func With(options ...config.Option) Option
- func WithAccessTokenCredentials(accessToken string) Option
- func WithAnonymousCredentials() Option
- func WithBalancer(balancer balancer.Balancer) Option
- func WithCertificate(cert *x509.Certificate) Option
- func WithCertificatesFromFile(caFile string) Option
- func WithCertificatesFromPem(bytes []byte) Option
- func WithConnectionString(connectionString string) Option
- func WithConnectionTTL(ttl time.Duration) Option
- func WithCreateCredentialsFunc(createCredentials func(ctx context.Context) (credentials.Credentials, error)) Option
- func WithCredentials(c credentials.Credentials) Option
- func WithDatabase(database string) Option
- func WithDialTimeout(timeout time.Duration) Option
- func WithDiscoveryInterval(discoveryInterval time.Duration) Option
- func WithEndpoint(endpoint string) Option
- func WithInsecure() Option
- func WithLogger(details trace.Details, opts ...LoggerOption) Option
- func WithMinTLSVersion(minVersion uint16) Option
- func WithPanicCallback(panicCallback func(e interface{})) Option
- func WithRatelimiterOptions(opts ...ratelimiterConfig.Option) Option
- func WithRequestsType(requestsType string) Option
- func WithSecure(secure bool) Option
- func WithSessionPoolCreateSessionTimeout(createSessionTimeout time.Duration) Option
- func WithSessionPoolDeleteTimeout(deleteTimeout time.Duration) Option
- func WithSessionPoolIdleThreshold(idleThreshold time.Duration) Option
- func WithSessionPoolKeepAliveMinSize(keepAliveMinSize int) Option
- func WithSessionPoolKeepAliveTimeout(keepAliveTimeout time.Duration) Option
- func WithSessionPoolSizeLimit(sizeLimit int) Option
- func WithTLSSInsecureSkipVerify() Option
- func WithTableConfigOption(option tableConfig.Option) Option
- func WithTraceCoordination(t trace.Coordination, opts ...trace.CoordinationComposeOption) Option
- func WithTraceDiscovery(t trace.Discovery, opts ...trace.DiscoveryComposeOption) Option
- func WithTraceDriver(trace trace.Driver, opts ...trace.DriverComposeOption) Option
- func WithTraceRatelimiter(t trace.Ratelimiter, opts ...trace.RatelimiterComposeOption) Option
- func WithTraceScheme(t trace.Scheme, opts ...trace.SchemeComposeOption) Option
- func WithTraceScripting(t trace.Scripting, opts ...trace.ScriptingComposeOption) Option
- func WithTraceTable(t trace.Table, opts ...trace.TableComposeOption) Option
- func WithUserAgent(userAgent string) Option
Examples ¶
Constants ¶
const Version = meta.Version
Version reports current version of sdk
Variables ¶
This section is empty.
Functions ¶
func IsOperationError ¶
func IsOperationError(err error, codes ...Ydb.StatusIds_StatusCode) bool
IsOperationError reports whether any error is an operation error with one of passed codes. If codes not defined IsOperationError returns true on error is an operation error.
func IsOperationErrorAlreadyExistsError ¶ added in v3.5.0
IsOperationErrorAlreadyExistsError checks whether given err is an operation error with code AlreadyExistsError
func IsOperationErrorNotFoundError ¶ added in v3.5.0
IsOperationErrorNotFoundError checks whether given err is an operation error with code NotFoundError
func IsOperationErrorOverloaded ¶ added in v3.5.0
IsOperationErrorOverloaded checks whether given err is an operation error with code Overloaded
func IsOperationErrorSchemeError ¶ added in v3.5.0
IsOperationErrorSchemeError checks whether given err is an operation error with code SchemeError
func IsOperationErrorUnavailable ¶ added in v3.5.0
IsOperationErrorUnavailable checks whether given err is an operation error with code Unavailable
func IsRatelimiterAcquireError ¶ added in v3.11.0
IsRatelimiterAcquireError checks whether given err is an ratelimiter acquire error
func IsTimeoutError ¶
IsTimeoutError checks whether given err is a some timeout error (context, transport or operation).
func IsTransportError ¶
IsTransportError checks whether given err is a transport (grpc) error.
func IsYdbError ¶ added in v3.4.2
IsYdbError reports when given error is and ydb error (transport, operation or internal driver error)
func IterateByIssues ¶
func IterateByIssues(err error, it func(message string, code Ydb.StatusIds_StatusCode, severity uint32))
IterateByIssues helps to iterate over internal issues of operation error.
func ToRatelimiterAcquireError ¶ added in v3.11.0
func ToRatelimiterAcquireError(err error) ratelimiter.AcquireError
ToRatelimiterAcquireError casts given err to ratelimiter.AcquireError. If given err is not ratelimiter acquire error - returns nil
func WithOperationCancelAfter ¶ added in v3.18.0
func WithOperationCancelAfter(ctx context.Context, operationCancelAfter time.Duration) context.Context
WithOperationCancelAfter returns a copy of parent context in which YDB operation cancel after parameter is set to d. If parent context cancellation timeout is smaller than d, parent context is returned.
func WithOperationTimeout ¶ added in v3.18.0
WithOperationTimeout returns a copy of parent context in which YDB operation timeout parameter is set to d. If parent context timeout is smaller than d, parent context is returned.
func WithRequestType ¶ added in v3.13.0
WithRequestType returns a copy of parent context with custom request type
Types ¶
type Connection ¶
type Connection interface { closer.Closer database.Info grpc.ClientConnInterface // Table returns table client Table() table.Client // Scheme returns scheme client Scheme() scheme.Client // Coordination returns coordination client Coordination() coordination.Client // Ratelimiter returns rate limiter client Ratelimiter() ratelimiter.Client // Discovery returns discovery client Discovery() discovery.Client // Scripting returns scripting client Scripting() scripting.Client // With returns Connection specified with custom options // Options provide options replacement for all clients taked from new Connection With(ctx context.Context, opts ...Option) (Connection, error) }
Connection interface provide access to YDB service clients Interface and list of clients may be changed in the future
type Error ¶ added in v3.4.2
type Error interface { error // Code reports the error code Code() int32 // Name reports the short name of error Name() string }
Error is an interface of error which reports about error code and error name.
func OperationError ¶ added in v3.16.9
OperationError returns operation error description. If given err is not an operation error - returns nil.
func TransportError ¶ added in v3.16.9
TransportError checks when given error is a transport error and returns description of transport error.
type LoggerOption ¶ added in v3.5.3
func WithErrWriter ¶ added in v3.5.0
func WithErrWriter(err io.Writer) LoggerOption
func WithExternalLogger ¶ added in v3.5.0
func WithExternalLogger(external log.Logger) LoggerOption
func WithMinLevel ¶ added in v3.3.0
func WithMinLevel(minLevel log.Level) LoggerOption
func WithNamespace ¶ added in v3.3.0
func WithNamespace(namespace string) LoggerOption
func WithNoColor ¶ added in v3.3.0
func WithNoColor(b bool) LoggerOption
func WithOutWriter ¶ added in v3.5.0
func WithOutWriter(out io.Writer) LoggerOption
type Option ¶
func MergeOptions ¶ added in v3.5.1
func WithAnonymousCredentials ¶
func WithAnonymousCredentials() Option
func WithBalancer ¶ added in v3.6.0
func WithCertificate ¶
func WithCertificate(cert *x509.Certificate) Option
func WithCertificatesFromPem ¶
func WithConnectionString ¶
WithConnectionString accept connection string like
grpc[s]://{endpoint}/?database={database}
Warning: WithConnectionString will be removed at next major release (connection string will be required string param of ydb.Open)
func WithConnectionTTL ¶ added in v3.7.0
WithConnectionTTL defines duration for parking idle connections Warning: if defined WithSessionPoolIdleThreshold - idleThreshold must be less than connectionTTL
func WithCreateCredentialsFunc ¶
func WithCreateCredentialsFunc(createCredentials func(ctx context.Context) (credentials.Credentials, error)) Option
func WithCredentials ¶
func WithCredentials(c credentials.Credentials) Option
WithCredentials in conjunction with Connection.With function prohibit reuse of conn pool. Thus, Connection.With will effectively create totally separate Connection.
func WithDatabase ¶ added in v3.2.1
WithDatabase defines database option Deprecated: use WithConnectionString or dsn package instead
func WithDialTimeout ¶
func WithDiscoveryInterval ¶
func WithEndpoint ¶ added in v3.2.1
WithEndpoint defines endpoint option Deprecated: use WithConnectionString or dsn package instead
func WithInsecure ¶ added in v3.8.6
func WithInsecure() Option
WithInsecure defines secure option Deprecated: use WithConnectionString or dsn package instead
func WithLogger ¶ added in v3.3.0
func WithLogger(details trace.Details, opts ...LoggerOption) Option
func WithMinTLSVersion ¶ added in v3.9.1
func WithPanicCallback ¶ added in v3.17.0
func WithPanicCallback(panicCallback func(e interface{})) Option
WithPanicCallback specified behavior on panic Warning: WithPanicCallback must be defined on start of all options (before `WithTrace{Driver,Table,Scheme,Scripting,Coordination,Ratelimiter}` and other options) If not defined - panic would not intercept with driver
func WithRatelimiterOptions ¶ added in v3.11.0
func WithRatelimiterOptions(opts ...ratelimiterConfig.Option) Option
func WithRequestsType ¶ added in v3.13.0
func WithSecure ¶ added in v3.7.0
WithSecure defines secure option Deprecated: use WithConnectionString or dsn package instead
func WithSessionPoolIdleThreshold ¶
WithSessionPoolIdleThreshold defines keep-alive interval for idle sessions Warning: if defined WithConnectionTTL - idleThreshold must be less than connectionTTL
func WithTLSSInsecureSkipVerify ¶ added in v3.11.0
func WithTLSSInsecureSkipVerify() Option
func WithTableConfigOption ¶
func WithTableConfigOption(option tableConfig.Option) Option
func WithTraceCoordination ¶ added in v3.10.0
func WithTraceCoordination(t trace.Coordination, opts ...trace.CoordinationComposeOption) Option
WithTraceCoordination returns coordination trace option
func WithTraceDiscovery ¶ added in v3.10.0
func WithTraceDiscovery(t trace.Discovery, opts ...trace.DiscoveryComposeOption) Option
WithTraceDiscovery returns discovery trace option
func WithTraceDriver ¶
func WithTraceDriver(trace trace.Driver, opts ...trace.DriverComposeOption) Option
WithTraceDriver returns deadline which has associated Driver with it.
func WithTraceRatelimiter ¶ added in v3.10.0
func WithTraceRatelimiter(t trace.Ratelimiter, opts ...trace.RatelimiterComposeOption) Option
WithTraceRatelimiter returns ratelimiter trace option
func WithTraceScheme ¶ added in v3.10.0
func WithTraceScheme(t trace.Scheme, opts ...trace.SchemeComposeOption) Option
WithTraceScheme returns scheme trace option
func WithTraceScripting ¶ added in v3.10.0
func WithTraceScripting(t trace.Scripting, opts ...trace.ScriptingComposeOption) Option
WithTraceScripting scripting trace option
func WithTraceTable ¶
func WithTraceTable(t trace.Table, opts ...trace.TableComposeOption) Option
WithTraceTable returns table trace option