From 8539a01c339fad16afc21f6c8c188cd8b1eeffc4 Mon Sep 17 00:00:00 2001 From: qydysky Date: Wed, 15 Jan 2025 02:03:37 +0800 Subject: [PATCH] 1 (#9) --- log/Log.go | 13 +++++++------ sql/Sql.go | 33 ++++++++++++++++++--------------- sql/Sql_test.go | 11 ++++------- 3 files changed, 29 insertions(+), 28 deletions(-) diff --git a/log/Log.go b/log/Log.go index c23460c..5ec5487 100644 --- a/log/Log.go +++ b/log/Log.go @@ -92,11 +92,12 @@ func New(c Config) (o *Log_interface) { sqlTx = psql.BeginTx[any](msg.DBConn, pctx.GenTOCtx(o.DBConnTo)) } - var replaceF []func(index int, holder string) (replaceTo string) - if c.DBDriverName == "postgres" { - replaceF = append(replaceF, func(index int, holder string) (replaceTo string) { - return fmt.Sprintf("$%d", index+1) - }) + var replaceF psql.ReplaceF + switch msg.DBDriverName { + case "postgres": + replaceF = psql.PlaceHolderB + default: + replaceF = psql.PlaceHolderA } sqlTx.DoPlaceHolder(psql.SqlFunc[any]{Sql: msg.DBInsert}, &LogI{ @@ -105,7 +106,7 @@ func New(c Config) (o *Log_interface) { Prefix: strings.TrimSpace(msg.Prefix), Base: strings.TrimSpace(fmt.Sprintln(msg.Base_string...)), Msgs: strings.TrimSpace(fmt.Sprintln(msg.Msgs...)), - }, replaceF...) + }, replaceF) if _, err := sqlTx.Fin(); err != nil { log.Println(err) diff --git a/sql/Sql.go b/sql/Sql.go index a1bae58..f5b84c2 100644 --- a/sql/Sql.go +++ b/sql/Sql.go @@ -74,21 +74,28 @@ func (t *SqlTx[T]) Do(sqlf SqlFunc[T]) *SqlTx[T] { // PlaceHolder will replaced by ? func (t *SqlTx[T]) SimplePlaceHolderA(sql string, ptr any) *SqlTx[T] { - return t.DoPlaceHolder(SqlFunc[T]{ - Sql: sql, - }, ptr) + return t.DoPlaceHolder(SqlFunc[T]{Sql: sql}, ptr, PlaceHolderA) } // PlaceHolder will replaced by $%d func (t *SqlTx[T]) SimplePlaceHolderB(sql string, ptr any) *SqlTx[T] { - return t.DoPlaceHolder(SqlFunc[T]{ - Sql: sql, - }, ptr, func(index int, holder string) (replaceTo string) { - return fmt.Sprintf("$%d", index+1) - }) + return t.DoPlaceHolder(SqlFunc[T]{Sql: sql}, ptr, PlaceHolderB) } -func (t *SqlTx[T]) DoPlaceHolder(sqlf SqlFunc[T], ptr any, replaceF ...func(index int, holder string) (replaceTo string)) *SqlTx[T] { +type ReplaceF func(index int, holder string) (replaceTo string) + +var ( + // "?" + PlaceHolderA ReplaceF = func(index int, holder string) (replaceTo string) { + return "?" + } + // "$%d" + PlaceHolderB ReplaceF = func(index int, holder string) (replaceTo string) { + return fmt.Sprintf("$%d", index+1) + } +) + +func (t *SqlTx[T]) DoPlaceHolder(sqlf SqlFunc[T], ptr any, replaceF ReplaceF) *SqlTx[T] { dataR := reflect.ValueOf(ptr).Elem() index := 0 for i := 0; i < dataR.NumField(); i++ { @@ -96,12 +103,8 @@ func (t *SqlTx[T]) DoPlaceHolder(sqlf SqlFunc[T], ptr any, replaceF ...func(inde if field.IsValid() && field.CanSet() { replaceS := "{" + dataR.Type().Field(i).Name + "}" if strings.Contains(sqlf.Sql, replaceS) { - if len(replaceF) == 0 { - sqlf.Sql = strings.ReplaceAll(sqlf.Sql, replaceS, "?") - } else { - sqlf.Sql = strings.ReplaceAll(sqlf.Sql, replaceS, replaceF[0](index, replaceS)) - index += 1 - } + sqlf.Sql = strings.ReplaceAll(sqlf.Sql, replaceS, replaceF(index, replaceS)) + index += 1 sqlf.Args = append(sqlf.Args, field.Interface()) } } diff --git a/sql/Sql_test.go b/sql/Sql_test.go index 38c9e78..70e8252 100644 --- a/sql/Sql_test.go +++ b/sql/Sql_test.go @@ -4,7 +4,6 @@ import ( "context" "database/sql" "errors" - "fmt" "sync" "testing" "time" @@ -181,8 +180,8 @@ func TestMain3(t *testing.T) { insertLog123 := SqlFunc[any]{Sql: "insert into log123 values ({Msg},{Msg2})"} { tx := BeginTx[any](db, context.Background()) - tx.DoPlaceHolder(insertLog123, &logg{Msg: 1, Msg2: "a"}) - tx.DoPlaceHolder(insertLog123, &logg{Msg: 2, Msg2: "b"}) + tx.DoPlaceHolder(insertLog123, &logg{Msg: 1, Msg2: "a"}, PlaceHolderA) + tx.DoPlaceHolder(insertLog123, &logg{Msg: 2, Msg2: "b"}, PlaceHolderA) if _, e := tx.Fin(); e != nil { t.Log(e) } @@ -194,7 +193,7 @@ func TestMain3(t *testing.T) { { selectLog123 := SqlFunc[[]logg]{Sql: "select msg as Msg, msg2 as Msg2 from log123 where msg = {Msg}"} tx := BeginTx[[]logg](db, context.Background()) - tx.DoPlaceHolder(selectLog123, &logg{Msg: 2, Msg2: "b"}) + tx.DoPlaceHolder(selectLog123, &logg{Msg: 2, Msg2: "b"}, PlaceHolderA) tx.AfterQF(func(ctxVP *[]logg, rows *sql.Rows, txE *error) { *ctxVP, *txE = DealRows(rows, func() logg { return logg{} }) }) @@ -285,9 +284,7 @@ func Local_TestPostgresql(t *testing.T) { if _, e := BeginTx[any](db, context.Background(), &sql.TxOptions{}).DoPlaceHolder(SqlFunc[any]{ Sql: "insert into test (created) values ({Created})", - }, &test1{"1"}, func(index int, holder string) (replaceTo string) { - return fmt.Sprintf("$%d", index+1) - }).Fin(); e != nil { + }, &test1{"1"}, PlaceHolderB).Fin(); e != nil { t.Fatal(e) } -- 2.39.2