|
|
|
@ -2,9 +2,8 @@ package dorm
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"errors"
|
|
|
|
|
"fmt"
|
|
|
|
|
"go.mongodb.org/mongo-driver/mongo"
|
|
|
|
|
"log"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type MongoSessionOptions struct {
|
|
|
|
@ -15,7 +14,7 @@ type MongoSessionOptions struct {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Begin 开始事务,会同时创建开始会话需要在退出时关闭会话
|
|
|
|
|
func (c *MongoClient) Begin() (*MongoSessionOptions, error) {
|
|
|
|
|
func (c *MongoClient) Begin() *MongoSessionOptions {
|
|
|
|
|
|
|
|
|
|
var ctx = context.TODO()
|
|
|
|
|
var err error
|
|
|
|
@ -27,7 +26,7 @@ func (c *MongoClient) Begin() (*MongoSessionOptions, error) {
|
|
|
|
|
// 开始会话
|
|
|
|
|
ms.session, err = ms.db.StartSession()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, errors.New(fmt.Sprintf("开始会话失败:%v", err))
|
|
|
|
|
log.Println("开始会话异常:", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 会话上下文
|
|
|
|
@ -36,23 +35,24 @@ func (c *MongoClient) Begin() (*MongoSessionOptions, error) {
|
|
|
|
|
// 会话开启事务
|
|
|
|
|
err = ms.session.StartTransaction()
|
|
|
|
|
|
|
|
|
|
return ms, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Close 关闭会话
|
|
|
|
|
func (cs *MongoSessionOptions) Close() {
|
|
|
|
|
var ctx = context.TODO()
|
|
|
|
|
cs.session.EndSession(ctx)
|
|
|
|
|
return ms
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Rollback 回滚事务
|
|
|
|
|
func (cs *MongoSessionOptions) Rollback() error {
|
|
|
|
|
func (cs *MongoSessionOptions) Rollback() {
|
|
|
|
|
var ctx = context.TODO()
|
|
|
|
|
return cs.session.AbortTransaction(ctx)
|
|
|
|
|
err := cs.session.AbortTransaction(ctx)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Println("回滚事务异常:", err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Commit 提交事务
|
|
|
|
|
func (cs *MongoSessionOptions) Commit() error {
|
|
|
|
|
func (cs *MongoSessionOptions) Commit() {
|
|
|
|
|
var ctx = context.TODO()
|
|
|
|
|
return cs.session.CommitTransaction(ctx)
|
|
|
|
|
err := cs.session.CommitTransaction(ctx)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Println("提交事务异常:", err)
|
|
|
|
|
}
|
|
|
|
|
cs.session.EndSession(ctx)
|
|
|
|
|
}
|
|
|
|
|