github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/query/transaction.go (about) 1 package query 2 3 import ( 4 "context" 5 6 internal "github.com/ydb-platform/ydb-go-sdk/v3/internal/query/tx" 7 "github.com/ydb-platform/ydb-go-sdk/v3/internal/tx" 8 ) 9 10 type ( 11 TxActor interface { 12 tx.Identifier 13 Executor 14 } 15 Transaction interface { 16 TxActor 17 18 CommitTx(ctx context.Context) (err error) 19 Rollback(ctx context.Context) (err error) 20 } 21 TransactionControl = internal.Control 22 TransactionSettings = internal.Settings 23 TransactionOption = internal.Option 24 ) 25 26 // BeginTx returns selector transaction control option 27 func BeginTx(opts ...TransactionOption) internal.ControlOption { 28 return internal.BeginTx(opts...) 29 } 30 31 func WithTx(t tx.Identifier) internal.ControlOption { 32 return internal.WithTx(t) 33 } 34 35 func WithTxID(txID string) internal.ControlOption { 36 return internal.WithTxID(txID) 37 } 38 39 // CommitTx returns commit transaction control option 40 func CommitTx() internal.ControlOption { 41 return internal.CommitTx() 42 } 43 44 // TxControl makes transaction control from given options 45 func TxControl(opts ...internal.ControlOption) *TransactionControl { 46 return internal.NewControl(opts...) 47 } 48 49 func NoTx() *TransactionControl { 50 return nil 51 } 52 53 // DefaultTxControl returns default transaction control for use default tx control on server-side 54 func DefaultTxControl() *TransactionControl { 55 return NoTx() 56 } 57 58 // SerializableReadWriteTxControl returns transaction control with serializable read-write isolation mode 59 func SerializableReadWriteTxControl(opts ...internal.ControlOption) *TransactionControl { 60 return internal.SerializableReadWriteTxControl(opts...) 61 } 62 63 // OnlineReadOnlyTxControl returns online read-only transaction control 64 func OnlineReadOnlyTxControl(opts ...internal.OnlineReadOnlyOption) *TransactionControl { 65 return TxControl( 66 BeginTx(WithOnlineReadOnly(opts...)), 67 CommitTx(), // open transactions not supported for OnlineReadOnly 68 ) 69 } 70 71 // StaleReadOnlyTxControl returns stale read-only transaction control 72 func StaleReadOnlyTxControl() *TransactionControl { 73 return TxControl( 74 BeginTx(WithStaleReadOnly()), 75 CommitTx(), // open transactions not supported for StaleReadOnly 76 ) 77 } 78 79 // SnapshotReadOnlyTxControl returns snapshot read-only transaction control 80 func SnapshotReadOnlyTxControl() *TransactionControl { 81 return TxControl( 82 BeginTx(WithSnapshotReadOnly()), 83 CommitTx(), // open transactions not supported for StaleReadOnly 84 ) 85 } 86 87 // TxSettings returns transaction settings 88 func TxSettings(opts ...internal.Option) TransactionSettings { 89 return opts 90 } 91 92 func WithDefaultTxMode() TransactionOption { 93 return internal.WithDefaultTxMode() 94 } 95 96 func WithSerializableReadWrite() TransactionOption { 97 return internal.WithSerializableReadWrite() 98 } 99 100 func WithSnapshotReadOnly() TransactionOption { 101 return internal.WithSnapshotReadOnly() 102 } 103 104 func WithStaleReadOnly() TransactionOption { 105 return internal.WithStaleReadOnly() 106 } 107 108 func WithInconsistentReads() internal.OnlineReadOnlyOption { 109 return internal.WithInconsistentReads() 110 } 111 112 func WithOnlineReadOnly(opts ...internal.OnlineReadOnlyOption) TransactionOption { 113 return internal.WithOnlineReadOnly(opts...) 114 }