Skip to content

Commit

Permalink
Session refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
emacsway committed Feb 18, 2024
1 parent e1f5b00 commit 91a3a53
Showing 1 changed file with 50 additions and 0 deletions.
50 changes: 50 additions & 0 deletions grade/internal/infrastructure/seedwork/session/deferred_result.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package session

import (
"errors"
)

type DeferredResultImp struct {
lastInsertId int64
rowsAffected int64
callbacks []DeferredResultCallback
isResolved bool
}

func (r *DeferredResultImp) Resolve(lastInsertId, rowsAffected int64) error {
r.lastInsertId = lastInsertId
r.rowsAffected = rowsAffected
r.isResolved = true
for i := range r.callbacks {
err := r.callbacks[i](r)
if err != nil {
return err
}
}
return nil
}

func (r *DeferredResultImp) AddCallback(callback DeferredResultCallback) error {
if r.isResolved {
return callback(r)
} else {
r.callbacks = append(r.callbacks, callback)
}
return nil
}

func (r DeferredResultImp) LastInsertId() (int64, error) {
if r.rowsAffected == 0 {
return r.lastInsertId, nil
} else {
return 0, errors.New("LastInsertId is not supported by this driver")
}
}

func (r DeferredResultImp) RowsAffected() (int64, error) {
if r.lastInsertId == 0 {
return r.rowsAffected, nil
} else {
return 0, errors.New("RowsAffected is not supported by INSERT command")
}
}

0 comments on commit 91a3a53

Please sign in to comment.