From ed1b4adb7226d9551ba8d13d7581316d106e6f27 Mon Sep 17 00:00:00 2001 From: sage Date: Sat, 19 Feb 2022 20:52:12 +0800 Subject: [PATCH] optimize search --- src/v1/clients/dbs/db_mysql.go | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/v1/clients/dbs/db_mysql.go b/src/v1/clients/dbs/db_mysql.go index 7c4fd0a..c0b8654 100644 --- a/src/v1/clients/dbs/db_mysql.go +++ b/src/v1/clients/dbs/db_mysql.go @@ -15,7 +15,7 @@ type IDBMysql interface { DB() *sql.DB TX() *sql.Tx - ExecuteSearch(tableName string, fields []string, whereArr []string, whereArgs []interface{}, orderBy []string, pageNum, pageSize int64) (*sql.Rows, int64, error) + ExecuteSearch(tableName string, fields []string, whereArr []string, whereArgs []interface{}, orderBy []string, pageNum, pageSize int64, rowsHandler SearchRowsHandler) (int64, int64, error) ExecuteQuery(tableName string, fields map[string]interface{}, whereArr []string, whereArgs []interface{}, orderBy []string) (bool, error) ExecuteCreate(tableName string, fields map[string]interface{}) (int64, error) ExecuteUpdate(tableName string, fields map[string]interface{}, whereArr []string, whereArgs []interface{}) (int64, error) @@ -79,7 +79,9 @@ func NewDBMysql(c v1config.DBConfig) (*DBMysql, error) { }, nil } -func (d *DBMysql) ExecuteSearch(tableName string, fields []string, whereArr []string, whereArgs []interface{}, orderBy []string, pageNum, pageSize int64) (*sql.Rows, int64, error) { +type SearchRowsHandler func(*sql.Rows) error + +func (d *DBMysql) ExecuteSearch(tableName string, fields []string, whereArr []string, whereArgs []interface{}, orderBy []string, pageNum, pageSize int64, rowsHandler SearchRowsHandler) (int64, int64, error) { var err error var total int64 @@ -111,18 +113,16 @@ func (d *DBMysql) ExecuteSearch(tableName string, fields []string, whereArr []st stmt, err = db.Prepare(countSql) } if err != nil { - return nil, total, err + return 0, total, err } + defer stmt.Close() row := stmt.QueryRow(whereArgs...) err = row.Scan(&total) if err == sql.ErrNoRows { - return nil, 0, nil + return 0, 0, nil } else if err != nil { - return nil, total, err - } - if err:=stmt.Close();err!=nil{ - return nil,0,err + return 0, total, err } if len(fields) <= 0 { @@ -144,18 +144,25 @@ func (d *DBMysql) ExecuteSearch(tableName string, fields []string, whereArr []st stmt1, err = db.Prepare(searchSql) } if err != nil { - return nil, total, err + return 0, total, err } + defer stmt1.Close() whereArgs = append(whereArgs, pageSize) whereArgs = append(whereArgs, pageSize*(pageNum-1)) rows, err := stmt1.Query(whereArgs...) if err != nil { - return nil, total, err + return 0, total, err + } + + //处理rows + err = rowsHandler(rows) + if err != nil { + return 0, total, err } - return rows, total, nil + return 0, total, nil } func (d *DBMysql) ExecuteQuery(tableName string, fields map[string]interface{}, whereArr []string, whereArgs []interface{}, orderBy []string) (bool, error) { -- Gitee