]> 127.0.0.1 Git - bili_danmu/.git/commitdiff
Improve 保存至db使用格式化输入
authorqydysky <qydysky@foxmail.com>
Tue, 2 May 2023 09:42:53 +0000 (17:42 +0800)
committerqydysky <qydysky@foxmail.com>
Tue, 2 May 2023 09:42:53 +0000 (17:42 +0800)
README.md
Reply/F.go
Reply/F_test.go
go.mod
go.sum

index 21aca046a049133f4587c867c9b60bcd362e1f28..1487a37c7d2ca8f5a1049ff0dd41e5819319f519 100644 (file)
--- a/README.md
+++ b/README.md
@@ -84,7 +84,7 @@ mysql:
       "url":"root:root@(192.168.31.103:10836)/test",
       "字段help":"time.Now().Format(time.DateTime), time.Now().Unix(), item.msg, item.color, item.auth, item.uid, item.roomid",
       "create":"create table danmu (created varchar(20), createdunix varchar(20), msg varchar(100), color varchar(20), auth varchar(50), uid varchar(30), roomid varchar(30))",
-      "insert":"insert into danmu (created, createdunix, msg, color, auth, uid, roomid) values (?,?,?,?,?,?,?)"
+      "insert":"insert into danmu (created, createdunix, msg, color, auth, uid, roomid) values ({Date},{Unix},{Msg},{Color},{Auth},{Uid},{Roomid})"
   }
 }
 ```
@@ -99,7 +99,7 @@ sqlite3:
       "url":"danmu.sqlite3",
       "字段help":"time.Now().Format(time.DateTime), time.Now().Unix(), item.msg, item.color, item.auth, item.uid, item.roomid",
       "create":"create table danmu (created text, createdunix text, msg text, color text, auth text, uid text, roomid text)",
-      "insert":"insert into danmu  values (?,?,?,?,?,?,?)"
+      "insert":"insert into danmu  values ({Date},{Unix},{Msg},{Color},{Auth},{Uid},{Roomid})"
   }
 }
 ```
index d9f6da00b403d5f7f77ab1de558f35e449b10e2e..ab059dd948f85ae90b6ab2554716dff4887dc67d 100644 (file)
@@ -1581,13 +1581,12 @@ func (t *SaveDanmuToDB) init(c *c.Common) {
                                db.SetConnMaxLifetime(time.Minute * 3)
                                db.SetMaxOpenConns(10)
                                db.SetMaxIdleConns(10)
-                               if e := psql.BeginTx[any](db, context.Background(), &sql.TxOptions{}).Do(psql.SqlFunc[any]{
-                                       Ty:         psql.Execf,
-                                       Query:      create,
-                                       SkipSqlErr: true,
-                               }).Fin(); e != nil {
+                               tx := psql.BeginTx[any](db, context.Background())
+                               tx.Do(psql.SqlFunc[any]{Query: create, SkipSqlErr: true})
+                               if _, e := tx.Fin(); e != nil {
                                        c.Log.Base_add("保存弹幕至db").L(`E: `, e)
                                } else {
+                                       c.Log.Base_add("保存弹幕至db").L(`I: `, dbname)
                                        t.db = db
                                }
                        }
@@ -1600,19 +1599,35 @@ func (t *SaveDanmuToDB) danmu(item Danmu_item) {
                return
        }
        if e := t.db.Ping(); e == nil {
-               if e := psql.BeginTx[any](t.db, context.Background(), &sql.TxOptions{}).Do(psql.SqlFunc[any]{
-                       Ty:    psql.Execf,
-                       Query: t.insert,
-                       Args:  []any{time.Now().Format(time.DateTime), time.Now().Unix(), item.msg, item.color, item.auth, item.uid, item.roomid},
-                       AfterEF: func(_ *any, result sql.Result, txE error) (_ *any, stopErr error) {
-                               if v, e := result.RowsAffected(); e != nil {
-                                       return nil, e
-                               } else if v != 1 {
-                                       return nil, errors.New("插入数量错误")
-                               }
-                               return nil, nil
-                       },
-               }).Fin(); e != nil {
+               type DanmuI struct {
+                       Date   string
+                       Unix   int64
+                       Msg    string
+                       Color  string
+                       Auth   any
+                       Uid    string
+                       Roomid int64
+               }
+
+               tx := psql.BeginTx[any](t.db, context.Background())
+               tx.DoPlaceHolder(psql.SqlFunc[any]{Query: t.insert}, &DanmuI{
+                       Date:   time.Now().Format(time.DateTime),
+                       Unix:   time.Now().Unix(),
+                       Msg:    item.msg,
+                       Color:  item.color,
+                       Auth:   item.auth,
+                       Uid:    item.uid,
+                       Roomid: int64(item.roomid),
+               })
+               tx.AfterEF(func(_ *any, result sql.Result, txE error) (_ *any, stopErr error) {
+                       if v, e := result.RowsAffected(); e != nil {
+                               return nil, e
+                       } else if v != 1 {
+                               return nil, errors.New("插入数量错误")
+                       }
+                       return nil, nil
+               })
+               if _, e := tx.Fin(); e != nil {
                        c.C.Log.Base_add("保存弹幕至db").L(`E: `, e)
                }
        }
index cf34800268c750353224833e7f5966796cf38dda..3f0fe3a3007936e863bb65edbca62082205e9c59 100644 (file)
@@ -32,24 +32,23 @@ func TestSaveDanmuToDB(t *testing.T) {
        if db, e := sql.Open("sqlite", "danmu.sqlite3"); e != nil {
                t.Fatal(e)
        } else {
-               if e := psql.BeginTx[any](db, context.Background(), &sql.TxOptions{}).Do(psql.SqlFunc[any]{
-                       Ty:    psql.Queryf,
-                       Query: "select msg as Msg from danmu",
-                       AfterQF: func(_ *any, rows *sql.Rows, txE error) (_ *any, stopErr error) {
-                               type row struct {
-                                       Msg string
-                               }
+               tx := psql.BeginTx[any](db, context.Background())
+               tx.Do(psql.SqlFunc[any]{Query: "select msg as Msg from danmu"})
+               tx.AfterQF(func(_ *any, rows *sql.Rows, txE error) (_ *any, stopErr error) {
+                       type row struct {
+                               Msg string
+                       }
 
-                               v, err := psql.DealRows(rows, func() row { return row{} })
-                               if err != nil {
-                                       return nil, err
-                               }
-                               if len(v) != 1 || v[0].Msg != "可能走位配合了他的压枪" {
-                                       return nil, errors.New("no msg")
-                               }
-                               return nil, nil
-                       },
-               }).Fin(); e != nil {
+                       v, err := psql.DealRows(rows, func() row { return row{} })
+                       if err != nil {
+                               return nil, err
+                       }
+                       if len(*v) != 1 || (*v)[0].Msg != "可能走位配合了他的压枪" {
+                               return nil, errors.New("no msg")
+                       }
+                       return nil, nil
+               })
+               if _, e := tx.Fin(); e != nil {
                        t.Fatal(e)
                }
                db.Close()
diff --git a/go.mod b/go.mod
index df39d970e0f005804a0b8144d7470d87d947b3dd..9e8a7621d3488386c3c5fc83075b379c1935932b 100644 (file)
--- a/go.mod
+++ b/go.mod
@@ -3,9 +3,9 @@ module github.com/qydysky/bili_danmu
 go 1.20
 
 require (
-       github.com/gotk3/gotk3 v0.6.1
+       github.com/gotk3/gotk3 v0.6.2
        github.com/mdp/qrterminal/v3 v3.0.0
-       github.com/qydysky/part v0.25.1
+       github.com/qydysky/part v0.25.2
        github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
        github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966
        golang.org/x/text v0.9.0
@@ -39,7 +39,7 @@ require (
        github.com/go-sql-driver/mysql v1.7.1
        github.com/gorilla/websocket v1.5.0 // indirect
        github.com/klauspost/compress v1.16.5 // indirect
-       github.com/miekg/dns v1.1.53 // indirect
+       github.com/miekg/dns v1.1.54 // indirect
        github.com/shirou/gopsutil v3.21.11+incompatible // indirect
        github.com/thedevsaddam/gojsonq/v2 v2.5.2 // indirect
        github.com/tklauser/go-sysconf v0.3.11 // indirect
@@ -50,6 +50,6 @@ require (
        golang.org/x/sys v0.7.0 // indirect
        golang.org/x/tools v0.8.0 // indirect
        gopkg.in/yaml.v3 v3.0.1 // indirect
-       modernc.org/sqlite v1.22.0
+       modernc.org/sqlite v1.22.1
        rsc.io/qr v0.2.0 // indirect
 )
diff --git a/go.sum b/go.sum
index 0eba9d5762e58535c6b6d3a6038429b5a2b62e0d..21f30b4f97e6a902112971e93f52cf3ab14de9b2 100644 (file)
--- a/go.sum
+++ b/go.sum
@@ -16,6 +16,8 @@ github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWm
 github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
 github.com/gotk3/gotk3 v0.6.1 h1:GJ400a0ecEEWrzjBvzBzH+pB/esEMIGdB9zPSmBdoeo=
 github.com/gotk3/gotk3 v0.6.1/go.mod h1:/hqFpkNa9T3JgNAE2fLvCdov7c5bw//FHNZrZ3Uv9/Q=
+github.com/gotk3/gotk3 v0.6.2 h1:sx/PjaKfKULJPTPq8p2kn2ZbcNFxpOJqi4VLzMbEOO8=
+github.com/gotk3/gotk3 v0.6.2/go.mod h1:/hqFpkNa9T3JgNAE2fLvCdov7c5bw//FHNZrZ3Uv9/Q=
 github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
 github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
 github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI=
@@ -25,14 +27,19 @@ github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd
 github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98=
 github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
 github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y=
+github.com/mdp/qrterminal v1.0.1 h1:07+fzVDlPuBlXS8tB0ktTAyf+Lp1j2+2zK3fBOL5b7c=
 github.com/mdp/qrterminal v1.0.1/go.mod h1:Z33WhxQe9B6CdW37HaVqcRKzP+kByF3q/qLxOGe12xQ=
 github.com/mdp/qrterminal/v3 v3.0.0 h1:ywQqLRBXWTktytQNDKFjhAvoGkLVN3J2tAFZ0kMd9xQ=
 github.com/mdp/qrterminal/v3 v3.0.0/go.mod h1:NJpfAs7OAm77Dy8EkWrtE4aq+cE6McoLXlBqXQEwvE0=
 github.com/miekg/dns v1.1.53 h1:ZBkuHr5dxHtB1caEOlZTLPo7D3L3TWckgUUs/RHfDxw=
 github.com/miekg/dns v1.1.53/go.mod h1:uInx36IzPl7FYnDcMeVWxj9byh7DutNykX4G9Sj60FY=
+github.com/miekg/dns v1.1.54 h1:5jon9mWcb0sFJGpnI99tOMhCPyJ+RPVz5b63MQG0VWI=
+github.com/miekg/dns v1.1.54/go.mod h1:uInx36IzPl7FYnDcMeVWxj9byh7DutNykX4G9Sj60FY=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/qydysky/part v0.25.1 h1:/Y+ywM79DIVhhd6pYSdHVvZRz641eJvnpqL317DheDE=
 github.com/qydysky/part v0.25.1/go.mod h1:8Rn6RC+170YRrtgssAumk8/r68+YH3F45J4l6F6+Fl4=
+github.com/qydysky/part v0.25.2 h1:kyLm5pqy9IrQqjEKj3xtyr97lfDtRJSyO+Pbd1sq+eI=
+github.com/qydysky/part v0.25.2/go.mod h1:IEMpGB0NBl6MklZmoenSpS5ChhaIL79JYFo6mF1UkAU=
 github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
 github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
 github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
@@ -89,6 +96,8 @@ modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4=
 modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
 modernc.org/sqlite v1.22.0 h1:Uo+wEWePCspy4SAu0w2VbzUHEftOs7yoaWX/cYjsq84=
 modernc.org/sqlite v1.22.0/go.mod h1:cxbLkB5WS32DnQqeH4h4o1B0eMr8W/y8/RGuxQ3JsC0=
+modernc.org/sqlite v1.22.1 h1:P2+Dhp5FR1RlVRkQ3dDfCiv3Ok8XPxqpe70IjYVA9oE=
+modernc.org/sqlite v1.22.1/go.mod h1:OrDj17Mggn6MhE+iPbBNf7RGKODDE9NFT0f3EwDzJqk=
 modernc.org/strutil v1.1.3 h1:fNMm+oJklMGYfU9Ylcywl0CO5O6nTfaowNsh2wpPjzY=
 modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw=
 modernc.org/tcl v1.15.1 h1:mOQwiEK4p7HruMZcwKTZPw/aqtGM4aY00uzWhlKKYws=