v0.0.351 sq value converter
All checks were successful
Build Docker and Deploy / Run goext test-suite (push) Successful in 2m30s

This commit is contained in:
2023-12-29 19:25:36 +01:00
parent 6e90239fef
commit f9ccafb976
12 changed files with 280 additions and 111 deletions

View File

@@ -4,16 +4,19 @@ import (
"context"
"database/sql"
"github.com/jmoiron/sqlx"
"gogs.mikescher.com/BlackForestBytes/goext/langext"
"sync"
)
type DB interface {
Exec(ctx context.Context, sql string, prep PP) (sql.Result, error)
Query(ctx context.Context, sql string, prep PP) (*sqlx.Rows, error)
Queryable
Ping(ctx context.Context) error
BeginTransaction(ctx context.Context, iso sql.IsolationLevel) (Tx, error)
AddListener(listener Listener)
Exit() error
RegisterConverter(DBTypeConverter)
RegisterDefaultConverter()
}
type database struct {
@@ -21,6 +24,7 @@ type database struct {
txctr uint16
lock sync.Mutex
lstr []Listener
conv []DBTypeConverter
}
func NewDB(db *sqlx.DB) DB {
@@ -120,9 +124,28 @@ func (db *database) BeginTransaction(ctx context.Context, iso sql.IsolationLevel
v.PostTxBegin(txid, err)
}
return NewTransaction(xtx, txid, db.lstr), nil
return NewTransaction(xtx, txid, db), nil
}
func (db *database) Exit() error {
return db.db.Close()
}
func (db *database) ListConverter() []DBTypeConverter {
return db.conv
}
func (db *database) RegisterConverter(conv DBTypeConverter) {
db.conv = langext.ArrFilter(db.conv, func(v DBTypeConverter) bool { return v.ModelTypeString() != conv.ModelTypeString() })
db.conv = append(db.conv, conv)
}
func (db *database) RegisterDefaultConverter() {
db.RegisterConverter(ConverterBoolToBit)
db.RegisterConverter(ConverterTimeToUnixMillis)
db.RegisterConverter(ConverterRFCUnixMilliTimeToUnixMillis)
db.RegisterConverter(ConverterRFCUnixNanoTimeToUnixNanos)
db.RegisterConverter(ConverterRFCUnixTimeToUnixSeconds)
db.RegisterConverter(ConverterRFC339TimeToString)
db.RegisterConverter(ConverterRFC339NanoTimeToString)
}