wecisecode 4 روز پیش
والد
کامیت
19a2f80e45
1فایلهای تغییر یافته به همراه62 افزوده شده و 0 حذف شده
  1. 62 0
      sqlite/sqlite_test.go

+ 62 - 0
sqlite/sqlite_test.go

@@ -191,11 +191,13 @@ func TestSQLiteProfmance(t *testing.T) {
 	if err != nil {
 		println("err", fmt.Sprint(err))
 	}
+	updatefields := "name=?,value=?,desc=?"
 	fields := "id,name,value,desc"
 	askmarks := "?,?,?,?"
 	for i := 1; i <= varfieldscount; i++ {
 		fields += ",var" + strconv.Itoa(i)
 		askmarks += ",?"
+		updatefields += ",var" + strconv.Itoa(i) + "=?"
 	}
 	allfields := fields
 	for i := varfieldscount + 1; i <= varfieldscount+emptyfieldscount; i++ {
@@ -343,6 +345,7 @@ func TestSQLiteProfmance(t *testing.T) {
 	}
 	tx.Commit()
 	println("sqlite insert with transaction ", len(data), " use time ", time.Since(st).String())
+
 	st = time.Now()
 	stmt, err = mdb.Prepare("insert into test(" + fields + ") values(" + askmarks + ")")
 	if err != nil {
@@ -404,6 +407,65 @@ func TestSQLiteProfmance(t *testing.T) {
 		// }
 	}
 	println("sqlite insert immediately ", len(data), " use time ", time.Since(st).String())
+
+	st = time.Now()
+	upsertSql := `BEGIN TRANSACTION;
+DELETE FROM test WHERE id=?;
+INSERT INTO test (` + fields + `) VALUES (` + askmarks + `);
+COMMIT;`
+	upsertstmt, err := mdb.Prepare(upsertSql)
+	if err != nil {
+		println("err", fmt.Sprint(err))
+	}
+
+	for _, d := range data {
+		args := []interface{}{
+			d["id"],
+			d["id"],
+			d["name"],
+			d["value"],
+			d["desc"]}
+		for vi := 1; vi <= varfieldscount; vi++ {
+			args = append(args, d["var"+strconv.Itoa(vi)])
+		}
+		rslt, err = upsertstmt.Exec(args...)
+		if err != nil {
+			println("err", fmt.Sprint(err))
+		}
+		// println("rslt", fmt.Sprint(rslt.LastInsertId()), fmt.Sprint(rslt.RowsAffected()))
+		// if (i+1)%10000 == 0 {
+		// 	println("sqlite insert ", (i + 1), " use time ", time.Since(st).String())
+		// }
+	}
+	println("sqlite upsert(del+insert) immediately prepare ", len(data), " use time ", time.Since(st).String())
+
+	st = time.Now()
+	updateSql := `UPDATE test SET ` + updatefields + ` WHERE id=?`
+	updatestmt, err := mdb.Prepare(updateSql)
+	if err != nil {
+		println("err", fmt.Sprint(err))
+	}
+
+	for _, d := range data {
+		args := []interface{}{
+			d["name"],
+			d["value"],
+			d["desc"]}
+		for vi := 1; vi <= varfieldscount; vi++ {
+			args = append(args, d["var"+strconv.Itoa(vi)])
+		}
+		args = append(args, d["id"])
+		rslt, err = updatestmt.Exec(args...)
+		if err != nil {
+			println("err", fmt.Sprint(err))
+		}
+		// println("rslt", fmt.Sprint(rslt.LastInsertId()), fmt.Sprint(rslt.RowsAffected()))
+		// if (i+1)%10000 == 0 {
+		// 	println("sqlite insert ", (i + 1), " use time ", time.Since(st).String())
+		// }
+	}
+	println("sqlite update immediately prepare ", len(data), " use time ", time.Since(st).String())
+
 	st = time.Now()
 	stmt, err = mdb.Prepare("select * from test")
 	if err != nil {