Documentation ¶
Overview ¶
Example (ExecuteScript) ¶
ctx := context.TODO() db, err := ydb.Open(ctx, "grpc://localhost:2136/local") if err != nil { panic(err) } defer db.Close(ctx) // cleanup resources op, err := db.Query().ExecuteScript(ctx, // context manage exiting from Do `SELECT CAST($id AS Uint64) AS id, CAST($myStr AS Text) AS myStr`, time.Hour, query.WithParameters( ydb.ParamsBuilder(). Param("$id").Uint64(123). Param("$myStr").Text("123"). Build(), ), query.WithIdempotent(), ) if err != nil { panic(err) } for { status, err := db.Operation().Get(ctx, op.ID) if err != nil { panic(err) } if status.Ready { break } time.Sleep(time.Second) } var nextToken string for { result, err := db.Query().FetchScriptResults(ctx, op.ID, query.WithResultSetIndex(0), query.WithRowsLimit(1000), query.WithFetchToken(nextToken), ) if err != nil { panic(err) } nextToken = result.NextToken for row, err := range result.ResultSet.Rows(ctx) { if err != nil { panic(err) } var ( id int64 myStr string ) err = row.Scan(&id, &myStr) if err != nil { panic(err) } fmt.Printf("id=%v, myStr='%s'\n", id, myStr) } if result.NextToken == "" { break } }
Output:
Example (Explain) ¶
ctx := context.TODO() db, err := ydb.Open(ctx, "grpc://localhost:2136/local") if err != nil { panic(err) } defer db.Close(ctx) // cleanup resources var ( ast string plan string ) err = db.Query().Exec(ctx, `SELECT CAST(42 AS Uint32);`, query.WithExecMode(query.ExecModeExplain), query.WithStatsMode(query.StatsModeNone, func(stats query.Stats) { ast = stats.QueryAST() plan = stats.QueryPlan() }), query.WithIdempotent(), ) if err != nil { panic(err) } fmt.Println(plan) fmt.Println(ast)
Output:
Example (QueryRow) ¶
ctx := context.TODO() db, err := ydb.Open(ctx, "grpc://localhost:2136/local") if err != nil { panic(err) } defer db.Close(ctx) // cleanup resources var ( id int32 // required value myStr string // optional value ) // Do retry operation on errors with best effort row, err := db.Query().QueryRow(ctx, // context manage exiting from Do `SELECT 42 as id, "my string" as myStr`, query.WithIdempotent(), ) if err != nil { panic(err) } err = row.ScanNamed( query.Named("id", &id), query.Named("myStr", &myStr), ) if err != nil { panic(err) } fmt.Printf("id=%v, myStr='%s'\n", id, myStr)
Output:
Example (QueryWithMaterializedResult) ¶
ctx := context.TODO() db, err := ydb.Open(ctx, "grpc://localhost:2136/local") if err != nil { panic(err) } defer db.Close(ctx) // cleanup resources var ( id int32 // required value myStr string // optional value ) // Do retry operation on errors with best effort materilizedResult, err := db.Query().Query(ctx, // context manage exiting from Do `SELECT 42 as id, "my string" as myStr`, query.WithIdempotent(), ) if err != nil { panic(err) } defer func() { _ = materilizedResult.Close(ctx) }() for rs, err := range materilizedResult.ResultSets(ctx) { if err != nil { panic(err) } for row, err := range rs.Rows(ctx) { if err != nil { panic(err) } err = row.ScanNamed( query.Named("id", &id), query.Named("myStr", &myStr), ) if err != nil { panic(err) } } } fmt.Printf("id=%v, myStr='%s'\n", id, myStr)
Output:
Example (QueryWithMaterializedResultSet) ¶
ctx := context.TODO() db, err := ydb.Open(ctx, "grpc://localhost:2136/local") if err != nil { panic(err) } defer db.Close(ctx) // cleanup resources var ( id int32 // required value myStr string // optional value ) // Do retry operation on errors with best effort materilizedResultSet, err := db.Query().QueryResultSet(ctx, // context manage exiting from Do `SELECT 42 as id, "my string" as myStr`, query.WithIdempotent(), ) if err != nil { panic(err) } for row, err := range materilizedResultSet.Rows(ctx) { if err != nil { panic(err) } err = row.ScanNamed( query.Named("id", &id), query.Named("myStr", &myStr), ) if err != nil { panic(err) } } fmt.Printf("id=%v, myStr='%s'\n", id, myStr)
Output:
Example (ResultStats) ¶
ctx := context.TODO() db, err := ydb.Open(ctx, "grpc://localhost:2136/local") if err != nil { panic(err) } defer db.Close(ctx) // cleanup resources var ( id int32 // required value myStr string // required value ) var stats query.Stats // Do retry operation on errors with best effort row, err := db.Query().QueryRow(ctx, // context manage exiting from Do `SELECT CAST($id AS Uint64) AS id, CAST($myStr AS Text) AS myStr`, query.WithParameters( ydb.ParamsBuilder(). Param("$id").Uint64(123). Param("$myStr").Text("123"). Build(), ), query.WithStatsMode(query.StatsModeFull, func(s query.Stats) { stats = s }), query.WithIdempotent(), ) if err != nil { panic(err) } err = row.ScanNamed( query.Named("id", &id), query.Named("myStr", &myStr), ) if err != nil { panic(err) } fmt.Printf("id=%v, myStr='%s'\n", id, myStr) fmt.Println("Stats:") fmt.Printf("- Compilation='%v'\n", stats.Compilation()) fmt.Printf("- TotalCPUTime='%v'\n", stats.TotalCPUTime()) fmt.Printf("- ProcessCPUTime='%v'\n", stats.ProcessCPUTime()) fmt.Printf("- QueryAST='%v'\n", stats.QueryAST()) fmt.Printf("- QueryPlan='%v'\n", stats.QueryPlan()) fmt.Println("- Phases:") for { phase, ok := stats.NextPhase() if !ok { break } fmt.Printf(" - CPUTime='%v'\n", phase.CPUTime()) fmt.Printf(" - Duration='%v'\n", phase.Duration()) fmt.Printf(" - IsLiteralPhase='%v'\n", phase.IsLiteralPhase()) fmt.Printf(" - AffectedShards='%v'\n", phase.AffectedShards()) fmt.Println(" - TableAccesses:") for { tableAccess, ok := phase.NextTableAccess() if !ok { break } fmt.Printf(" - %v\n", tableAccess) } }
Output:
Example (RetryWithLazyTx) ¶
ctx := context.TODO() db, err := ydb.Open(ctx, "grpc://localhost:2136/local", ydb.WithLazyTx(true), ) if err != nil { fmt.Printf("failed connect: %v", err) return } defer db.Close(ctx) // cleanup resources var ( id int32 // required value myStr string // optional value ) // Do retry operation on errors with best effort err = db.Query().DoTx(ctx, // context manage exiting from Do func(ctx context.Context, tx query.TxActor) (err error) { // retry operation res, err := tx.Query(ctx, `SELECT 42 as id, "my string" as myStr`, ) if err != nil { return err // for auto-retry with driver } fmt.Printf("txID: expected %q, actual %q", baseTx.LazyTxID, tx.ID()) defer func() { _ = res.Close(ctx) }() // cleanup resources // for loop with ResultSets available with Go version 1.23+ for rs, err := range res.ResultSets(ctx) { if err != nil { return err } // for loop with ResultSets available with Go version 1.23+ for row, err := range rs.Rows(ctx) { if err != nil { return err } if err = row.ScanNamed( query.Named("id", &id), query.Named("myStr", &myStr), ); err != nil { return err // generally scan error not retryable, return it for driver check error } } } return nil }, query.WithIdempotent(), query.WithTxSettings(query.TxSettings( query.WithSnapshotReadOnly(), )), ) if err != nil { fmt.Printf("unexpected error: %v", err) } fmt.Printf("id=%v, myStr='%s'\n", id, myStr)
Output:
Example (RetryWithSessions) ¶
ctx := context.TODO() db, err := ydb.Open(ctx, "grpc://localhost:2136/local") if err != nil { panic(err) } defer db.Close(ctx) // cleanup resources var ( id int32 // required value myStr string // required value ) // Do retry operation on errors with best effort err = db.Query().Do(ctx, func(ctx context.Context, s query.Session) error { streamResult, err := s.Query(ctx, // context manage exiting from Do `SELECT CAST($id AS Uint64) AS id, CAST($myStr AS Text) AS myStr`, query.WithParameters( ydb.ParamsBuilder(). Param("$id").Uint64(123). Param("$myStr").Text("123"). Build(), ), ) if err != nil { panic(err) } defer func() { _ = streamResult.Close(ctx) }() for rs, err := range streamResult.ResultSets(ctx) { if err != nil { return err } for row, err := range rs.Rows(ctx) { if err != nil { return err } err = row.ScanNamed( query.Named("id", &id), query.Named("myStr", &myStr), ) if err != nil { panic(err) } } } return nil }, query.WithIdempotent()) if err != nil { panic(err) } fmt.Printf("id=%v, myStr='%s'\n", id, myStr)
Output:
Example (RetryWithTx) ¶
ctx := context.TODO() db, err := ydb.Open(ctx, "grpc://localhost:2136/local") if err != nil { fmt.Printf("failed connect: %v", err) return } defer db.Close(ctx) // cleanup resources var ( id int32 // required value myStr string // optional value ) // Do retry operation on errors with best effort err = db.Query().DoTx(ctx, // context manage exiting from Do func(ctx context.Context, tx query.TxActor) (err error) { // retry operation res, err := tx.Query(ctx, `SELECT 42 as id, "my string" as myStr`, ) if err != nil { return err // for auto-retry with driver } defer func() { _ = res.Close(ctx) }() // cleanup resources // for loop with ResultSets available with Go version 1.23+ for rs, err := range res.ResultSets(ctx) { if err != nil { return err } // for loop with ResultSets available with Go version 1.23+ for row, err := range rs.Rows(ctx) { if err != nil { return err } if err = row.ScanNamed( query.Named("id", &id), query.Named("myStr", &myStr), ); err != nil { return err // generally scan error not retryable, return it for driver check error } } } return nil }, query.WithIdempotent(), query.WithTxSettings(query.TxSettings( query.WithSnapshotReadOnly(), )), ) if err != nil { fmt.Printf("unexpected error: %v", err) } fmt.Printf("id=%v, myStr='%s'\n", id, myStr)
Output:
Example (SelectWithParameters) ¶
ctx := context.TODO() db, err := ydb.Open(ctx, "grpc://localhost:2136/local") if err != nil { panic(err) } defer db.Close(ctx) // cleanup resources var ( id int32 // required value myStr string // required value ) // Do retry operation on errors with best effort row, err := db.Query().QueryRow(ctx, // context manage exiting from Do `SELECT CAST($id AS Uint64) AS id, CAST($myStr AS Text) AS myStr`, query.WithParameters( ydb.ParamsBuilder(). Param("$id").Uint64(123). Param("$myStr").Text("123"). Build(), ), query.WithIdempotent(), ) if err != nil { panic(err) } err = row.ScanNamed( query.Named("id", &id), query.Named("myStr", &myStr), ) if err != nil { panic(err) } fmt.Printf("id=%v, myStr='%s'\n", id, myStr)
Output:
Example (WithoutRangeIterators) ¶
ctx := context.TODO() db, err := ydb.Open(ctx, "grpc://localhost:2136/local") if err != nil { panic(err) } defer db.Close(ctx) // cleanup resources var ( id int32 // required value myStr string // optional value ) materializedResult, err := db.Query().Query(ctx, `SELECT 42 as id, "my string" as myStr`, query.WithIdempotent(), ) if err != nil { panic(err) } for { rs, err := materializedResult.NextResultSet(ctx) if err != nil { if errors.Is(err, io.EOF) { break } panic(err) } for { row, err := rs.NextRow(ctx) if err != nil { if errors.Is(err, io.EOF) { break } panic(err) } err = row.ScanNamed( query.Named("id", &id), query.Named("myStr", &myStr), ) if err != nil { panic(err) } fmt.Printf("id=%v, myStr='%s'\n", id, myStr) } }
Output:
Index ¶
- Constants
- func BeginTx(opts ...TransactionOption) internal.ControlOption
- func CommitTx() internal.ControlOption
- func WithFetchToken(fetchToken string) options.FetchScriptOption
- func WithIdempotent() options.RetryOptionsOption
- func WithInconsistentReads() internal.OnlineReadOnlyOption
- func WithLabel(lbl string) options.RetryOptionsOption
- func WithResultSetIndex(resultSetIndex int64) options.FetchScriptOption
- func WithRetryBudget(b budget.Budget) options.RetryOptionsOption
- func WithRowsLimit(rowsLimit int64) options.FetchScriptOption
- func WithTrace(t *trace.Query) options.TraceOption
- func WithTx(t tx.Identifier) internal.ControlOption
- func WithTxID(txID string) internal.ControlOption
- func WithTxSettings(txSettings tx.Settings) options.DoTxOption
- type Client
- type ClosableResultSet
- type ClosableSession
- type DoOption
- type DoTxOption
- type ExecuteOption
- func WithCallOptions(opts ...grpc.CallOption) ExecuteOption
- func WithCommit() ExecuteOption
- func WithExecMode(mode options.ExecMode) ExecuteOption
- func WithParameters(parameters params.Parameters) ExecuteOption
- func WithResourcePool(id string) ExecuteOption
- func WithResponsePartLimitSizeBytes(size int64) ExecuteOption
- func WithStatsMode(mode options.StatsMode, callback func(Stats)) ExecuteOption
- func WithSyntax(syntax options.Syntax) ExecuteOption
- func WithTxControl(txControl *tx.Control) ExecuteOption
- type Executor
- type NamedDestination
- type Operation
- type Result
- type ResultSet
- type Row
- type ScanStructOption
- type Session
- type SessionInfo
- type Stats
- type Transaction
- type TransactionControl
- func DefaultTxControl() *TransactionControl
- func NoTx() *TransactionControl
- func OnlineReadOnlyTxControl(opts ...internal.OnlineReadOnlyOption) *TransactionControl
- func SerializableReadWriteTxControl(opts ...internal.ControlOption) *TransactionControl
- func SnapshotReadOnlyTxControl() *TransactionControl
- func StaleReadOnlyTxControl() *TransactionControl
- func TxControl(opts ...internal.ControlOption) *TransactionControl
- type TransactionOption
- type TransactionSettings
- type TxActor
- type TxOperation
- type Type
Examples ¶
- Package (ExecuteScript)
- Package (Explain)
- Package (QueryRow)
- Package (QueryWithMaterializedResult)
- Package (QueryWithMaterializedResultSet)
- Package (ResultStats)
- Package (RetryWithLazyTx)
- Package (RetryWithSessions)
- Package (RetryWithTx)
- Package (SelectWithParameters)
- Package (WithoutRangeIterators)
Constants ¶
const ( SyntaxYQL = options.SyntaxYQL SyntaxPostgreSQL = options.SyntaxPostgreSQL )
const ( ExecModeParse = options.ExecModeParse ExecModeValidate = options.ExecModeValidate ExecModeExplain = options.ExecModeExplain ExecModeExecute = options.ExecModeExecute )
const ( StatsModeBasic = options.StatsModeBasic StatsModeNone = options.StatsModeNone StatsModeFull = options.StatsModeFull StatsModeProfile = options.StatsModeProfile )
Variables ¶
This section is empty.
Functions ¶
func BeginTx ¶
func BeginTx(opts ...TransactionOption) internal.ControlOption
BeginTx returns selector transaction control option
func CommitTx ¶
func CommitTx() internal.ControlOption
CommitTx returns commit transaction control option
func WithFetchToken ¶ added in v3.77.0
func WithFetchToken(fetchToken string) options.FetchScriptOption
func WithIdempotent ¶
func WithIdempotent() options.RetryOptionsOption
func WithInconsistentReads ¶
func WithInconsistentReads() internal.OnlineReadOnlyOption
func WithLabel ¶ added in v3.57.1
func WithLabel(lbl string) options.RetryOptionsOption
func WithResultSetIndex ¶ added in v3.77.0
func WithResultSetIndex(resultSetIndex int64) options.FetchScriptOption
func WithRetryBudget ¶ added in v3.66.0
func WithRetryBudget(b budget.Budget) options.RetryOptionsOption
WithRetryBudget creates option with external budget
func WithRowsLimit ¶ added in v3.77.0
func WithRowsLimit(rowsLimit int64) options.FetchScriptOption
func WithTx ¶
func WithTx(t tx.Identifier) internal.ControlOption
func WithTxID ¶
func WithTxID(txID string) internal.ControlOption
func WithTxSettings ¶
func WithTxSettings(txSettings tx.Settings) options.DoTxOption
Types ¶
type Client ¶
type Client interface { Executor // Do provide the best effort for execute operation. // // Do implements internal busy loop until one of the following conditions is met: // - deadline was canceled or deadlined // - retry operation returned nil as error // // Warning: if context without deadline or cancellation func than Do can run indefinitely. Do(ctx context.Context, op Operation, opts ...DoOption) error // DoTx provide the best effort for execute transaction. // // DoTx implements internal busy loop until one of the following conditions is met: // - deadline was canceled or deadlined // - retry operation returned nil as error // // DoTx makes auto selector (with TransactionSettings, by default - SerializableReadWrite), commit and // rollback (on error) of transaction. // // If op TxOperation returns nil - transaction will be committed // If op TxOperation return non nil - transaction will be rollback // Warning: if context without deadline or cancellation func than DoTx can run indefinitely DoTx(ctx context.Context, op TxOperation, opts ...DoTxOption) error // Exec execute query without result // // Exec used by default: // - DefaultTxControl Exec(ctx context.Context, sql string, opts ...ExecuteOption) error // Query execute query with materialized result // // Warning: the large result from query will be materialized and can happened to "OOM killed" problem // // Exec used by default: // - DefaultTxControl Query(ctx context.Context, sql string, opts ...ExecuteOption) (Result, error) // QueryResultSet is a helper which read all rows from first result set in result // // Warning: the large result set from query will be materialized and can happened to "OOM killed" problem QueryResultSet(ctx context.Context, sql string, opts ...ExecuteOption) (ClosableResultSet, error) // QueryRow is a helper which read only one row from first result set in result // // ReadRow returns error if result contains more than one result set or more than one row QueryRow(ctx context.Context, sql string, opts ...ExecuteOption) (Row, error) // ExecuteScript starts long executing script with polling results later // // Experimental: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#experimental ExecuteScript( ctx context.Context, sql string, ttl time.Duration, ops ...ExecuteOption, ) (*options.ExecuteScriptOperation, error) // FetchScriptResults fetching the script results // // Experimental: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#experimental FetchScriptResults( ctx context.Context, opID string, opts ...options.FetchScriptOption, ) (*options.FetchScriptResult, error) }
Client defines API of query client
type ClosableResultSet ¶ added in v3.78.0
type ClosableResultSet = result.ClosableResultSet
type ClosableSession ¶
type DoTxOption ¶
type DoTxOption = options.DoTxOption
type ExecuteOption ¶
func WithCallOptions ¶
func WithCallOptions(opts ...grpc.CallOption) ExecuteOption
func WithCommit ¶
func WithCommit() ExecuteOption
func WithExecMode ¶
func WithExecMode(mode options.ExecMode) ExecuteOption
func WithParameters ¶
func WithParameters(parameters params.Parameters) ExecuteOption
func WithResourcePool ¶ added in v3.85.3
func WithResourcePool(id string) ExecuteOption
WithResourcePool is an option for define resource pool for execute query
Read more https://ydb.tech/docs/ru/dev/resource-consumption-management
func WithResponsePartLimitSizeBytes ¶ added in v3.92.3
func WithResponsePartLimitSizeBytes(size int64) ExecuteOption
WithResponsePartLimitSizeBytes limit size of each part (data portion) in stream for query service resoponse it isn't limit total size of answer
func WithStatsMode ¶
func WithStatsMode(mode options.StatsMode, callback func(Stats)) ExecuteOption
func WithSyntax ¶
func WithSyntax(syntax options.Syntax) ExecuteOption
func WithTxControl ¶
func WithTxControl(txControl *tx.Control) ExecuteOption
type Executor ¶ added in v3.77.0
type Executor interface { // Exec execute query without result // // Exec used by default: // - DefaultTxControl Exec(ctx context.Context, sql string, opts ...ExecuteOption) error // Query execute query with result // // Exec used by default: // - DefaultTxControl Query(ctx context.Context, sql string, opts ...ExecuteOption) (Result, error) // QueryResultSet execute query and take the exactly single materialized result set from result // // Exec used by default: // - DefaultTxControl QueryResultSet(ctx context.Context, sql string, opts ...ExecuteOption) (ClosableResultSet, error) // QueryRow execute query and take the exactly single row from exactly single result set from result // // Exec used by default: // - DefaultTxControl QueryRow(ctx context.Context, sql string, opts ...ExecuteOption) (Row, error) }
Executor is an interface for execute queries
type NamedDestination ¶ added in v3.73.0
type NamedDestination = scanner.NamedDestination
func Named ¶
func Named(columnName string, destinationValueReference interface{}) (dst NamedDestination)
type Operation ¶
Operation is the interface that holds an operation for retry. if Operation returns not nil - operation will retry if Operation returns nil - retry loop will break
type ScanStructOption ¶ added in v3.73.0
type ScanStructOption = scanner.ScanStructOption
func WithScanStructAllowMissingColumnsFromSelect ¶
func WithScanStructAllowMissingColumnsFromSelect() ScanStructOption
func WithScanStructAllowMissingFieldsInStruct ¶
func WithScanStructAllowMissingFieldsInStruct() ScanStructOption
func WithScanStructTagName ¶
func WithScanStructTagName(name string) ScanStructOption
type Session ¶
type Session interface { SessionInfo Executor Begin(ctx context.Context, txSettings TransactionSettings) (Transaction, error) }
type SessionInfo ¶
type Stats ¶ added in v3.59.0
type Stats = stats.QueryStats
type Transaction ¶
type TransactionControl ¶
func DefaultTxControl ¶
func DefaultTxControl() *TransactionControl
DefaultTxControl returns default transaction control for use default tx control on server-side
func NoTx ¶
func NoTx() *TransactionControl
func OnlineReadOnlyTxControl ¶
func OnlineReadOnlyTxControl(opts ...internal.OnlineReadOnlyOption) *TransactionControl
OnlineReadOnlyTxControl returns online read-only transaction control
func SerializableReadWriteTxControl ¶
func SerializableReadWriteTxControl(opts ...internal.ControlOption) *TransactionControl
SerializableReadWriteTxControl returns transaction control with serializable read-write isolation mode
func SnapshotReadOnlyTxControl ¶
func SnapshotReadOnlyTxControl() *TransactionControl
SnapshotReadOnlyTxControl returns snapshot read-only transaction control
func StaleReadOnlyTxControl ¶
func StaleReadOnlyTxControl() *TransactionControl
StaleReadOnlyTxControl returns stale read-only transaction control
func TxControl ¶
func TxControl(opts ...internal.ControlOption) *TransactionControl
TxControl makes transaction control from given options
type TransactionOption ¶ added in v3.74.0
func WithDefaultTxMode ¶
func WithDefaultTxMode() TransactionOption
func WithOnlineReadOnly ¶
func WithOnlineReadOnly(opts ...internal.OnlineReadOnlyOption) TransactionOption
func WithSerializableReadWrite ¶
func WithSerializableReadWrite() TransactionOption
func WithSnapshotReadOnly ¶
func WithSnapshotReadOnly() TransactionOption
func WithStaleReadOnly ¶
func WithStaleReadOnly() TransactionOption
type TransactionSettings ¶
func TxSettings ¶
func TxSettings(opts ...internal.Option) TransactionSettings
TxSettings returns transaction settings
type TxActor ¶
type TxActor interface { tx.Identifier Executor }
type TxOperation ¶
TxOperation is the interface that holds an operation for retry. if TxOperation returns not nil - operation will retry if TxOperation returns nil - retry loop will break