Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
61801ff20d
|
|||
361dca5c85
|
@@ -20,6 +20,7 @@ Potentially needs `export GOPRIVATE="gogs.mikescher.com"`
|
||||
| zipext | Mike | Utility for zip/gzip/tar etc |
|
||||
| reflectext | Mike | Utility for golang reflection |
|
||||
| fsext | Mike | Utility for filesytem access |
|
||||
| ctxext | Mike | Utility for context.Context |
|
||||
| | | |
|
||||
| mongoext | Mike | Utility/Helper functions for mongodb (kinda abandoned) |
|
||||
| cursortoken | Mike | MongoDB cursortoken implementation |
|
||||
|
27
ctxext/getter.go
Normal file
27
ctxext/getter.go
Normal file
@@ -0,0 +1,27 @@
|
||||
package ctxext
|
||||
|
||||
import "context"
|
||||
|
||||
func Value[T any](ctx context.Context, key any) (T, bool) {
|
||||
v := ctx.Value(key)
|
||||
if v == nil {
|
||||
return *new(T), false
|
||||
}
|
||||
if tv, ok := v.(T); !ok {
|
||||
return *new(T), false
|
||||
} else {
|
||||
return tv, true
|
||||
}
|
||||
}
|
||||
|
||||
func ValueOrDefault[T any](ctx context.Context, key any, def T) T {
|
||||
v := ctx.Value(key)
|
||||
if v == nil {
|
||||
return def
|
||||
}
|
||||
if tv, ok := v.(T); !ok {
|
||||
return def
|
||||
} else {
|
||||
return tv
|
||||
}
|
||||
}
|
@@ -1,5 +1,5 @@
|
||||
package goext
|
||||
|
||||
const GoextVersion = "0.0.520"
|
||||
const GoextVersion = "0.0.522"
|
||||
|
||||
const GoextVersionTimestamp = "2024-10-05T01:02:25+0200"
|
||||
const GoextVersionTimestamp = "2024-10-05T01:12:00+0200"
|
||||
|
@@ -75,7 +75,7 @@ func (db *database) Exec(ctx context.Context, sqlstr string, prep PP) (sql.Resul
|
||||
|
||||
postMeta := PostExecMeta{Context: ctx, TransactionConstructorContext: nil, Init: t0, Start: t1, End: time.Now()}
|
||||
for _, v := range db.lstr {
|
||||
v.PostExec(nil, origsql, sqlstr, prep, postMeta)
|
||||
v.PostExec(nil, origsql, sqlstr, prep, err, postMeta)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
@@ -104,7 +104,7 @@ func (db *database) Query(ctx context.Context, sqlstr string, prep PP) (*sqlx.Ro
|
||||
|
||||
postMeta := PostQueryMeta{Context: ctx, TransactionConstructorContext: nil, Init: t0, Start: t1, End: time.Now()}
|
||||
for _, v := range db.lstr {
|
||||
v.PostQuery(nil, origsql, sqlstr, prep, postMeta)
|
||||
v.PostQuery(nil, origsql, sqlstr, prep, err, postMeta)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
|
@@ -92,8 +92,8 @@ type Listener interface {
|
||||
PostTxBegin(txid uint16, result error, meta PostTxBeginMeta)
|
||||
PostTxCommit(txid uint16, result error, meta PostTxCommitMeta)
|
||||
PostTxRollback(txid uint16, result error, meta PostTxRollbackMeta)
|
||||
PostQuery(txID *uint16, sqlOriginal string, sqlReal string, params PP, meta PostQueryMeta)
|
||||
PostExec(txID *uint16, sqlOriginal string, sqlReal string, params PP, meta PostExecMeta)
|
||||
PostQuery(txID *uint16, sqlOriginal string, sqlReal string, params PP, result error, meta PostQueryMeta)
|
||||
PostExec(txID *uint16, sqlOriginal string, sqlReal string, params PP, result error, meta PostExecMeta)
|
||||
}
|
||||
|
||||
type genListener struct {
|
||||
@@ -107,8 +107,8 @@ type genListener struct {
|
||||
postTxBegin func(txid uint16, result error, meta PostTxBeginMeta)
|
||||
postTxCommit func(txid uint16, result error, meta PostTxCommitMeta)
|
||||
postTxRollback func(txid uint16, result error, meta PostTxRollbackMeta)
|
||||
postQuery func(txID *uint16, sqlOriginal string, sqlReal string, params PP, meta PostQueryMeta)
|
||||
postExec func(txID *uint16, sqlOriginal string, sqlReal string, params PP, meta PostExecMeta)
|
||||
postQuery func(txID *uint16, sqlOriginal string, sqlReal string, params PP, result error, meta PostQueryMeta)
|
||||
postExec func(txID *uint16, sqlOriginal string, sqlReal string, params PP, result error, meta PostExecMeta)
|
||||
}
|
||||
|
||||
func (g genListener) PrePing(ctx context.Context, meta PrePingMeta) error {
|
||||
@@ -183,15 +183,15 @@ func (g genListener) PostTxRollback(txid uint16, result error, meta PostTxRollba
|
||||
}
|
||||
}
|
||||
|
||||
func (g genListener) PostQuery(txID *uint16, sqlOriginal string, sqlReal string, params PP, meta PostQueryMeta) {
|
||||
func (g genListener) PostQuery(txID *uint16, sqlOriginal string, sqlReal string, params PP, result error, meta PostQueryMeta) {
|
||||
if g.postQuery != nil {
|
||||
g.postQuery(txID, sqlOriginal, sqlReal, params, meta)
|
||||
g.postQuery(txID, sqlOriginal, sqlReal, params, result, meta)
|
||||
}
|
||||
}
|
||||
|
||||
func (g genListener) PostExec(txID *uint16, sqlOriginal string, sqlReal string, params PP, meta PostExecMeta) {
|
||||
func (g genListener) PostExec(txID *uint16, sqlOriginal string, sqlReal string, params PP, result error, meta PostExecMeta) {
|
||||
if g.postExec != nil {
|
||||
g.postExec(txID, sqlOriginal, sqlReal, params, meta)
|
||||
g.postExec(txID, sqlOriginal, sqlReal, params, result, meta)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -246,21 +246,21 @@ func NewPostTxRollbackListener(f func(txid uint16, result error, meta PostTxRoll
|
||||
return genListener{postTxRollback: f}
|
||||
}
|
||||
|
||||
func NewPostQueryListener(f func(txID *uint16, sqlOriginal string, sqlReal string, params PP, meta PostQueryMeta)) Listener {
|
||||
func NewPostQueryListener(f func(txID *uint16, sqlOriginal string, sqlReal string, params PP, result error, meta PostQueryMeta)) Listener {
|
||||
return genListener{postQuery: f}
|
||||
}
|
||||
|
||||
func NewPostExecListener(f func(txID *uint16, sqlOriginal string, sqlReal string, params PP, meta PostExecMeta)) Listener {
|
||||
func NewPostExecListener(f func(txID *uint16, sqlOriginal string, sqlReal string, params PP, result error, meta PostExecMeta)) Listener {
|
||||
return genListener{postExec: f}
|
||||
}
|
||||
|
||||
func NewPostListener(f func(cmdtype string, txID *uint16, sqlOriginal string, sqlReal string, params PP)) Listener {
|
||||
func NewPostListener(f func(cmdtype string, txID *uint16, sqlOriginal string, sqlReal string, result error, params PP)) Listener {
|
||||
return genListener{
|
||||
postExec: func(txID *uint16, sqlOriginal string, sqlReal string, params PP, meta PostExecMeta) {
|
||||
f("EXEC", txID, sqlOriginal, sqlReal, params)
|
||||
postExec: func(txID *uint16, sqlOriginal string, sqlReal string, params PP, result error, meta PostExecMeta) {
|
||||
f("EXEC", txID, sqlOriginal, sqlReal, result, params)
|
||||
},
|
||||
postQuery: func(txID *uint16, sqlOriginal string, sqlReal string, params PP, meta PostQueryMeta) {
|
||||
f("QUERY", txID, sqlOriginal, sqlReal, params)
|
||||
postQuery: func(txID *uint16, sqlOriginal string, sqlReal string, params PP, result error, meta PostQueryMeta) {
|
||||
f("QUERY", txID, sqlOriginal, sqlReal, result, params)
|
||||
},
|
||||
}
|
||||
}
|
||||
|
@@ -128,7 +128,7 @@ func (tx *transaction) Exec(ctx context.Context, sqlstr string, prep PP) (sql.Re
|
||||
|
||||
postMeta := PostExecMeta{Context: ctx, TransactionConstructorContext: tx.constructorContext, Init: t0, Start: t1, End: time.Now()}
|
||||
for _, v := range tx.db.lstr {
|
||||
v.PostExec(langext.Ptr(tx.id), origsql, sqlstr, prep, postMeta)
|
||||
v.PostExec(langext.Ptr(tx.id), origsql, sqlstr, prep, err, postMeta)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
@@ -161,7 +161,7 @@ func (tx *transaction) Query(ctx context.Context, sqlstr string, prep PP) (*sqlx
|
||||
|
||||
postMeta := PostQueryMeta{Context: ctx, TransactionConstructorContext: tx.constructorContext, Init: t0, Start: t1, End: time.Now()}
|
||||
for _, v := range tx.db.lstr {
|
||||
v.PostQuery(langext.Ptr(tx.id), origsql, sqlstr, prep, postMeta)
|
||||
v.PostQuery(langext.Ptr(tx.id), origsql, sqlstr, prep, err, postMeta)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
|
Reference in New Issue
Block a user