|
- // Copyright (C) MongoDB, Inc. 2017-present.
- //
- // Licensed under the Apache License, Version 2.0 (the "License"); you may
- // not use this file except in compliance with the License. You may obtain
- // a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
-
- package options
-
- import (
- "time"
-
- "go.mongodb.org/mongo-driver/mongo/readconcern"
- "go.mongodb.org/mongo-driver/mongo/readpref"
- "go.mongodb.org/mongo-driver/mongo/writeconcern"
- )
-
- // TransactionOptions represents all possible options for starting a transaction.
- type TransactionOptions struct {
- ReadConcern *readconcern.ReadConcern // The read concern for the transaction. Defaults to the session's read concern.
- ReadPreference *readpref.ReadPref // The read preference for the transaction. Defaults to the session's read preference.
- WriteConcern *writeconcern.WriteConcern // The write concern for the transaction. Defaults to the session's write concern.
- MaxCommitTime *time.Duration // The maximum amount of time to allow a single commitTransaction command to run.
- }
-
- // Transaction creates a new *TransactionOptions
- func Transaction() *TransactionOptions {
- return &TransactionOptions{}
- }
-
- // SetReadConcern sets the read concern for the transaction.
- func (t *TransactionOptions) SetReadConcern(rc *readconcern.ReadConcern) *TransactionOptions {
- t.ReadConcern = rc
- return t
- }
-
- // SetReadPreference sets the read preference for the transaction.
- func (t *TransactionOptions) SetReadPreference(rp *readpref.ReadPref) *TransactionOptions {
- t.ReadPreference = rp
- return t
- }
-
- // SetWriteConcern sets the write concern for the transaction.
- func (t *TransactionOptions) SetWriteConcern(wc *writeconcern.WriteConcern) *TransactionOptions {
- t.WriteConcern = wc
- return t
- }
-
- // SetMaxCommitTime sets the max commit time for the transaction.
- func (t *TransactionOptions) SetMaxCommitTime(mct *time.Duration) *TransactionOptions {
- t.MaxCommitTime = mct
- return t
- }
-
- // MergeTransactionOptions combines the given *TransactionOptions into a single *TransactionOptions in a last one wins
- // fashion.
- func MergeTransactionOptions(opts ...*TransactionOptions) *TransactionOptions {
- t := Transaction()
- for _, opt := range opts {
- if opt == nil {
- continue
- }
- if opt.ReadConcern != nil {
- t.ReadConcern = opt.ReadConcern
- }
- if opt.ReadPreference != nil {
- t.ReadPreference = opt.ReadPreference
- }
- if opt.WriteConcern != nil {
- t.WriteConcern = opt.WriteConcern
- }
- if opt.MaxCommitTime != nil {
- t.MaxCommitTime = opt.MaxCommitTime
- }
- }
-
- return t
- }
|