]> 127.0.0.1 Git - part/.git/commitdiff
1 (#9) v0.28.20250114181028
authorqydysky <qydysky@foxmail.com>
Tue, 14 Jan 2025 18:03:37 +0000 (02:03 +0800)
committerGitHub <noreply@github.com>
Tue, 14 Jan 2025 18:03:37 +0000 (02:03 +0800)
log/Log.go
sql/Sql.go
sql/Sql_test.go

index c23460c53293adf564194ba41204e983b1075f3f..5ec5487a363ebe283bfb760fe6a05d39e07bbf9a 100644 (file)
@@ -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)
index a1bae5888112fdc55e16407578220ec0db70416a..f5b84c2a41298e3b739093757db7279763a6a76f 100644 (file)
@@ -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())
                        }
                }
index 38c9e78c11809d6292d1fe7e8eb1d42a34737864..70e82523a822512fe4131aee1d1bd05fff731b25 100644 (file)
@@ -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)
        }