From 267c2dbc23495f47a5f92d8baa47d492379d9097 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 22 Aug 2017 14:27:38 +0800 Subject: [PATCH 1/4] refactor query functions --- engine.go | 15 --- rows.go | 41 +------- session.go | 8 -- session_delete.go | 2 +- session_exist.go | 15 +-- session_find.go | 24 ++--- session_get.go | 30 +++--- session_insert.go | 4 +- session_raw.go | 238 +++++++++++++++++++++++----------------------- session_schema.go | 7 +- session_stats.go | 26 +---- 11 files changed, 155 insertions(+), 255 deletions(-) diff --git a/engine.go b/engine.go index cfa0933e..654051f1 100644 --- a/engine.go +++ b/engine.go @@ -273,21 +273,6 @@ func (engine *Engine) logSQL(sqlStr string, sqlArgs ...interface{}) { } } -func (engine *Engine) logSQLQueryTime(sqlStr string, args []interface{}, executionBlock func() (*core.Stmt, *core.Rows, error)) (*core.Stmt, *core.Rows, error) { - if engine.showSQL && engine.showExecTime { - b4ExecTime := time.Now() - stmt, res, err := executionBlock() - execDuration := time.Since(b4ExecTime) - if len(args) > 0 { - engine.logger.Infof("[SQL] %s %v - took: %v", sqlStr, args, execDuration) - } else { - engine.logger.Infof("[SQL] %s - took: %v", sqlStr, execDuration) - } - return stmt, res, err - } - return executionBlock() -} - func (engine *Engine) logSQLExecutionTime(sqlStr string, args []interface{}, executionBlock func() (sql.Result, error)) (sql.Result, error) { if engine.showSQL && engine.showExecTime { b4ExecTime := time.Now() diff --git a/rows.go b/rows.go index 444e3d43..258d9f27 100644 --- a/rows.go +++ b/rows.go @@ -17,7 +17,6 @@ type Rows struct { NoTypeCheck bool session *Session - stmt *core.Stmt rows *core.Rows fields []string beanType reflect.Type @@ -29,8 +28,6 @@ func newRows(session *Session, bean interface{}) (*Rows, error) { rows.session = session rows.beanType = reflect.Indirect(reflect.ValueOf(bean)).Type() - defer rows.session.resetStatement() - var sqlStr string var args []interface{} var err error @@ -53,32 +50,11 @@ func newRows(session *Session, bean interface{}) (*Rows, error) { args = rows.session.statement.RawParams } - for _, filter := range rows.session.engine.dialect.Filters() { - sqlStr = filter.Do(sqlStr, session.engine.dialect, rows.session.statement.RefTable) - } - - rows.session.saveLastSQL(sqlStr, args...) - if rows.session.prepareStmt { - rows.stmt, err = rows.session.DB().Prepare(sqlStr) - if err != nil { - rows.lastError = err - rows.Close() - return nil, err - } - - rows.rows, err = rows.stmt.Query(args...) - if err != nil { - rows.lastError = err - rows.Close() - return nil, err - } - } else { - rows.rows, err = rows.session.DB().Query(sqlStr, args...) - if err != nil { - rows.lastError = err - rows.Close() - return nil, err - } + rows.rows, err = rows.session.queryRows(sqlStr, args...) + if err != nil { + rows.lastError = err + rows.Close() + return nil, err } rows.fields, err = rows.rows.Columns() @@ -142,17 +118,10 @@ func (rows *Rows) Close() error { if rows.rows != nil { rows.lastError = rows.rows.Close() if rows.lastError != nil { - defer rows.stmt.Close() return rows.lastError } } - if rows.stmt != nil { - rows.lastError = rows.stmt.Close() - } } else { - if rows.stmt != nil { - defer rows.stmt.Close() - } if rows.rows != nil { defer rows.rows.Close() } diff --git a/session.go b/session.go index 9d041402..6f7aca32 100644 --- a/session.go +++ b/session.go @@ -777,14 +777,6 @@ func (session *Session) slice2Bean(scanResults []interface{}, fields []string, f return pk, nil } -func (session *Session) queryPreprocess(sqlStr *string, paramStr ...interface{}) { - for _, filter := range session.engine.dialect.Filters() { - *sqlStr = filter.Do(*sqlStr, session.engine.dialect, session.statement.RefTable) - } - - session.saveLastSQL(*sqlStr, paramStr...) -} - // saveLastSQL stores executed query information func (session *Session) saveLastSQL(sql string, args ...interface{}) { session.lastSQL = sql diff --git a/session_delete.go b/session_delete.go index 9fd7b8af..324cfba3 100644 --- a/session_delete.go +++ b/session_delete.go @@ -31,7 +31,7 @@ func (session *Session) cacheDelete(sqlStr string, args ...interface{}) error { tableName := session.statement.TableName() ids, err := core.GetCacheSql(cacher, tableName, newsql, args) if err != nil { - resultsSlice, err := session.query(newsql, args...) + resultsSlice, err := session.queryBytes(newsql, args...) if err != nil { return err } diff --git a/session_exist.go b/session_exist.go index 91d1cd60..e24ee121 100644 --- a/session_exist.go +++ b/session_exist.go @@ -10,7 +10,6 @@ import ( "reflect" "github.com/go-xorm/builder" - "github.com/go-xorm/core" ) // Exist returns true if the record exist otherwise return false @@ -69,19 +68,11 @@ func (session *Session) Exist(bean ...interface{}) (bool, error) { args = session.statement.RawParams } - session.queryPreprocess(&sqlStr, args...) - - var rawRows *core.Rows - if session.isAutoCommit { - _, rawRows, err = session.innerQuery(sqlStr, args...) - } else { - rawRows, err = session.tx.Query(sqlStr, args...) - } + rows, err := session.queryRows(sqlStr, args...) if err != nil { return false, err } + defer rows.Close() - defer rawRows.Close() - - return rawRows.Next(), nil + return rows.Next(), nil } diff --git a/session_find.go b/session_find.go index 42b3506e..8115928d 100644 --- a/session_find.go +++ b/session_find.go @@ -157,21 +157,13 @@ func (session *Session) Find(rowsSlicePtr interface{}, condiBean ...interface{}) } func (session *Session) noCacheFind(table *core.Table, containerValue reflect.Value, sqlStr string, args ...interface{}) error { - var rawRows *core.Rows - var err error - - session.queryPreprocess(&sqlStr, args...) - if session.isAutoCommit { - _, rawRows, err = session.innerQuery(sqlStr, args...) - } else { - rawRows, err = session.tx.Query(sqlStr, args...) - } + rows, err := session.queryRows(sqlStr, args...) if err != nil { return err } - defer rawRows.Close() + defer rows.Close() - fields, err := rawRows.Columns() + fields, err := rows.Columns() if err != nil { return err } @@ -245,20 +237,20 @@ func (session *Session) noCacheFind(table *core.Table, containerValue reflect.Va if err != nil { return err } - return session.rows2Beans(rawRows, fields, len(fields), tb, newElemFunc, containerValueSetFunc) + return session.rows2Beans(rows, fields, len(fields), tb, newElemFunc, containerValueSetFunc) } - for rawRows.Next() { + for rows.Next() { var newValue = newElemFunc(fields) bean := newValue.Interface() switch elemType.Kind() { case reflect.Slice: - err = rawRows.ScanSlice(bean) + err = rows.ScanSlice(bean) case reflect.Map: - err = rawRows.ScanMap(bean) + err = rows.ScanMap(bean) default: - err = rawRows.Scan(bean) + err = rows.Scan(bean) } if err != nil { diff --git a/session_get.go b/session_get.go index d5f768c6..e5c67d4b 100644 --- a/session_get.go +++ b/session_get.go @@ -65,30 +65,21 @@ func (session *Session) Get(bean interface{}) (bool, error) { } func (session *Session) nocacheGet(beanKind reflect.Kind, bean interface{}, sqlStr string, args ...interface{}) (bool, error) { - session.queryPreprocess(&sqlStr, args...) - - var rawRows *core.Rows - var err error - if session.isAutoCommit { - _, rawRows, err = session.innerQuery(sqlStr, args...) - } else { - rawRows, err = session.tx.Query(sqlStr, args...) - } + rows, err := session.queryRows(sqlStr, args...) if err != nil { return false, err } + defer rows.Close() - defer rawRows.Close() - - if !rawRows.Next() { + if !rows.Next() { return false, nil } switch beanKind { case reflect.Struct: - fields, err := rawRows.Columns() + fields, err := rows.Columns() if err != nil { - // WARN: Alougth rawRows return true, but get fields failed + // WARN: Alougth rows return true, but get fields failed return true, err } dataStruct := rValue(bean) @@ -96,19 +87,20 @@ func (session *Session) nocacheGet(beanKind reflect.Kind, bean interface{}, sqlS return false, err } - scanResults, err := session.row2Slice(rawRows, fields, len(fields), bean) + scanResults, err := session.row2Slice(rows, fields, len(fields), bean) if err != nil { return false, err } - rawRows.Close() + // close it before covert data + rows.Close() _, err = session.slice2Bean(scanResults, fields, len(fields), bean, &dataStruct, session.statement.RefTable) case reflect.Slice: - err = rawRows.ScanSlice(bean) + err = rows.ScanSlice(bean) case reflect.Map: - err = rawRows.ScanMap(bean) + err = rows.ScanMap(bean) default: - err = rawRows.Scan(bean) + err = rows.Scan(bean) } return true, err diff --git a/session_insert.go b/session_insert.go index 02edf574..350242bc 100644 --- a/session_insert.go +++ b/session_insert.go @@ -395,7 +395,7 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) { // for postgres, many of them didn't implement lastInsertId, so we should // implemented it ourself. if session.engine.dialect.DBType() == core.ORACLE && len(table.AutoIncrement) > 0 { - res, err := session.query("select seq_atable.currval from dual", args...) + res, err := session.queryBytes("select seq_atable.currval from dual", args...) if err != nil { return 0, err } @@ -440,7 +440,7 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) { } else if session.engine.dialect.DBType() == core.POSTGRES && len(table.AutoIncrement) > 0 { //assert table.AutoIncrement != "" sqlStr = sqlStr + " RETURNING " + session.engine.Quote(table.AutoIncrement) - res, err := session.query(sqlStr, args...) + res, err := session.queryBytes(sqlStr, args...) if err != nil { return 0, err diff --git a/session_raw.go b/session_raw.go index 6225fed2..67f042fd 100644 --- a/session_raw.go +++ b/session_raw.go @@ -14,55 +14,6 @@ import ( "github.com/go-xorm/core" ) -func (session *Session) query(sqlStr string, paramStr ...interface{}) ([]map[string][]byte, error) { - session.queryPreprocess(&sqlStr, paramStr...) - - if session.isAutoCommit { - return session.innerQuery2(sqlStr, paramStr...) - } - return session.txQuery(session.tx, sqlStr, paramStr...) -} - -func (session *Session) txQuery(tx *core.Tx, sqlStr string, params ...interface{}) ([]map[string][]byte, error) { - rows, err := tx.Query(sqlStr, params...) - if err != nil { - return nil, err - } - defer rows.Close() - - return rows2maps(rows) -} - -func (session *Session) innerQuery(sqlStr string, params ...interface{}) (*core.Stmt, *core.Rows, error) { - var callback func() (*core.Stmt, *core.Rows, error) - if session.prepareStmt { - callback = func() (*core.Stmt, *core.Rows, error) { - stmt, err := session.doPrepare(sqlStr) - if err != nil { - return nil, nil, err - } - rows, err := stmt.Query(params...) - if err != nil { - return nil, nil, err - } - return stmt, rows, nil - } - } else { - callback = func() (*core.Stmt, *core.Rows, error) { - rows, err := session.DB().Query(sqlStr, params...) - if err != nil { - return nil, nil, err - } - return nil, rows, err - } - } - stmt, rows, err := session.engine.logSQLQueryTime(sqlStr, params, callback) - if err != nil { - return nil, nil, err - } - return stmt, rows, nil -} - func rows2maps(rows *core.Rows) (resultsSlice []map[string][]byte, err error) { fields, err := rows.Columns() if err != nil { @@ -117,27 +68,6 @@ func row2map(rows *core.Rows, fields []string) (resultsMap map[string][]byte, er return result, nil } -func (session *Session) innerQuery2(sqlStr string, params ...interface{}) ([]map[string][]byte, error) { - _, rows, err := session.innerQuery(sqlStr, params...) - if rows != nil { - defer rows.Close() - } - if err != nil { - return nil, err - } - return rows2maps(rows) -} - -// Query runs a raw sql and return records as []map[string][]byte -func (session *Session) Query(sqlStr string, paramStr ...interface{}) ([]map[string][]byte, error) { - defer session.resetStatement() - if session.isAutoClose { - defer session.Close() - } - - return session.query(sqlStr, paramStr...) -} - func rows2Strings(rows *core.Rows) (resultsSlice []map[string]string, err error) { fields, err := rows.Columns() if err != nil { @@ -234,42 +164,136 @@ func row2mapStr(rows *core.Rows, fields []string) (resultsMap map[string]string, return result, nil } -func txQuery2(tx *core.Tx, sqlStr string, params ...interface{}) ([]map[string]string, error) { - rows, err := tx.Query(sqlStr, params...) - if err != nil { - return nil, err +func (session *Session) queryPreprocess(sqlStr *string, paramStr ...interface{}) { + for _, filter := range session.engine.dialect.Filters() { + *sqlStr = filter.Do(*sqlStr, session.engine.dialect, session.statement.RefTable) } - defer rows.Close() - return rows2Strings(rows) + session.lastSQL = *sqlStr + session.lastSQLArgs = paramStr } -func query2(db *core.DB, sqlStr string, params ...interface{}) ([]map[string]string, error) { - rows, err := db.Query(sqlStr, params...) - if err != nil { - return nil, err - } - defer rows.Close() - return rows2Strings(rows) -} - -// QueryString runs a raw sql and return records as []map[string]string -func (session *Session) QueryString(sqlStr string, args ...interface{}) ([]map[string]string, error) { +func (session *Session) queryRows(sqlStr string, args ...interface{}) (*core.Rows, error) { defer session.resetStatement() + + session.queryPreprocess(&sqlStr, args...) + + if session.engine.showSQL { + if session.engine.showExecTime { + b4ExecTime := time.Now() + defer func() { + execDuration := time.Since(b4ExecTime) + if len(args) > 0 { + session.engine.logger.Infof("[SQL] %s %#v - took: %v", sqlStr, args, execDuration) + } else { + session.engine.logger.Infof("[SQL] %s - took: %v", sqlStr, execDuration) + } + }() + } else { + if len(args) > 0 { + session.engine.logger.Infof("[SQL] %v %#v", sqlStr, args) + } else { + session.engine.logger.Infof("[SQL] %v", sqlStr) + } + } + } + + if session.isAutoCommit { + if session.prepareStmt { + // don't clear stmt since session will cache them + stmt, err := session.doPrepare(sqlStr) + if err != nil { + return nil, err + } + + rows, err := stmt.Query(args...) + if err != nil { + return nil, err + } + return rows, nil + } + + rows, err := session.DB().Query(sqlStr, args...) + if err != nil { + return nil, err + } + return rows, nil + } + + rows, err := session.tx.Query(sqlStr, args...) + if err != nil { + return nil, err + } + return rows, nil +} + +func (session *Session) queryRow(sqlStr string, args ...interface{}) *core.Row { + return core.NewRow(session.queryRows(sqlStr, args...)) +} + +func (session *Session) queryBytes(sqlStr string, args ...interface{}) ([]map[string][]byte, error) { + rows, err := session.queryRows(sqlStr, args...) + if err != nil { + return nil, err + } + defer rows.Close() + + return rows2maps(rows) +} + +// Query runs a raw sql and return records as []map[string][]byte +func (session *Session) Query(sqlStr string, args ...interface{}) ([]map[string][]byte, error) { if session.isAutoClose { defer session.Close() } - session.queryPreprocess(&sqlStr, args...) - - if session.isAutoCommit { - return query2(session.DB(), sqlStr, args...) - } - return txQuery2(session.tx, sqlStr, args...) + return session.queryBytes(sqlStr, args...) } -// Execute sql -func (session *Session) innerExec(sqlStr string, args ...interface{}) (sql.Result, error) { +// QueryString runs a raw sql and return records as []map[string]string +func (session *Session) QueryString(sqlStr string, args ...interface{}) ([]map[string]string, error) { + if session.isAutoClose { + defer session.Close() + } + + rows, err := session.queryRows(sqlStr, args...) + if err != nil { + return nil, err + } + defer rows.Close() + + return rows2Strings(rows) +} + +func (session *Session) exec(sqlStr string, args ...interface{}) (sql.Result, error) { + defer session.resetStatement() + + session.queryPreprocess(&sqlStr, args...) + + if session.engine.showSQL { + if session.engine.showExecTime { + b4ExecTime := time.Now() + defer func() { + execDuration := time.Since(b4ExecTime) + if len(args) > 0 { + session.engine.logger.Infof("[SQL] %s %#v - took: %v", sqlStr, args, execDuration) + } else { + session.engine.logger.Infof("[SQL] %s - took: %v", sqlStr, execDuration) + } + }() + } else { + if len(args) > 0 { + session.engine.logger.Infof("[SQL] %v %#v", sqlStr, args) + } else { + session.engine.logger.Infof("[SQL] %v", sqlStr) + } + } + } + + if !session.isAutoCommit { + return session.tx.Exec(sqlStr, args...) + } + if session.prepareStmt { stmt, err := session.doPrepare(sqlStr) if err != nil { @@ -286,32 +310,8 @@ func (session *Session) innerExec(sqlStr string, args ...interface{}) (sql.Resul return session.DB().Exec(sqlStr, args...) } -func (session *Session) exec(sqlStr string, args ...interface{}) (sql.Result, error) { - for _, filter := range session.engine.dialect.Filters() { - // TODO: for table name, it's no need to RefTable - sqlStr = filter.Do(sqlStr, session.engine.dialect, session.statement.RefTable) - } - - session.saveLastSQL(sqlStr, args...) - - return session.engine.logSQLExecutionTime(sqlStr, args, func() (sql.Result, error) { - if session.isAutoCommit { - // FIXME: oci8 can not auto commit (github.com/mattn/go-oci8) - if session.engine.dialect.DBType() == core.ORACLE { - session.Begin() - r, err := session.tx.Exec(sqlStr, args...) - session.Commit() - return r, err - } - return session.innerExec(sqlStr, args...) - } - return session.tx.Exec(sqlStr, args...) - }) -} - // Exec raw sql func (session *Session) Exec(sqlStr string, args ...interface{}) (sql.Result, error) { - defer session.resetStatement() if session.isAutoClose { defer session.Close() } diff --git a/session_schema.go b/session_schema.go index c1d5088d..9442715a 100644 --- a/session_schema.go +++ b/session_schema.go @@ -142,7 +142,7 @@ func (session *Session) dropTable(beanOrTableName interface{}) error { var needDrop = true if !session.engine.dialect.SupportDropIfExists() { sqlStr, args := session.engine.dialect.TableCheckSql(tableName) - results, err := session.query(sqlStr, args...) + results, err := session.queryBytes(sqlStr, args...) if err != nil { return err } @@ -174,7 +174,7 @@ func (session *Session) IsTableExist(beanOrTableName interface{}) (bool, error) func (session *Session) isTableExist(tableName string) (bool, error) { defer session.resetStatement() sqlStr, args := session.engine.dialect.TableCheckSql(tableName) - results, err := session.query(sqlStr, args...) + results, err := session.queryBytes(sqlStr, args...) return len(results) > 0, err } @@ -200,8 +200,7 @@ func (session *Session) isTableEmpty(tableName string) (bool, error) { var total int64 sqlStr := fmt.Sprintf("select count(*) from %s", session.engine.Quote(tableName)) - err := session.DB().QueryRow(sqlStr).Scan(&total) - session.saveLastSQL(sqlStr) + err := session.queryRow(sqlStr).Scan(&total) if err != nil { if err == sql.ErrNoRows { err = nil diff --git a/session_stats.go b/session_stats.go index df02e95a..c2cac830 100644 --- a/session_stats.go +++ b/session_stats.go @@ -13,7 +13,6 @@ import ( // Count counts the records. bean's non-empty fields // are conditions. func (session *Session) Count(bean ...interface{}) (int64, error) { - defer session.resetStatement() if session.isAutoClose { defer session.Close() } @@ -31,15 +30,8 @@ func (session *Session) Count(bean ...interface{}) (int64, error) { args = session.statement.RawParams } - session.queryPreprocess(&sqlStr, args...) - var total int64 - if session.isAutoCommit { - err = session.DB().QueryRow(sqlStr, args...).Scan(&total) - } else { - err = session.tx.QueryRow(sqlStr, args...).Scan(&total) - } - + err = session.queryRow(sqlStr, args...).Scan(&total) if err == sql.ErrNoRows || err == nil { return total, nil } @@ -49,7 +41,6 @@ func (session *Session) Count(bean ...interface{}) (int64, error) { // sum call sum some column. bean's non-empty fields are conditions. func (session *Session) sum(res interface{}, bean interface{}, columnNames ...string) error { - defer session.resetStatement() if session.isAutoClose { defer session.Close() } @@ -73,22 +64,11 @@ func (session *Session) sum(res interface{}, bean interface{}, columnNames ...st args = session.statement.RawParams } - session.queryPreprocess(&sqlStr, args...) - if isSlice { - if session.isAutoCommit { - err = session.DB().QueryRow(sqlStr, args...).ScanSlice(res) - } else { - err = session.tx.QueryRow(sqlStr, args...).ScanSlice(res) - } + err = session.queryRow(sqlStr, args...).ScanSlice(res) } else { - if session.isAutoCommit { - err = session.DB().QueryRow(sqlStr, args...).Scan(res) - } else { - err = session.tx.QueryRow(sqlStr, args...).Scan(res) - } + err = session.queryRow(sqlStr, args...).Scan(res) } - if err == sql.ErrNoRows || err == nil { return nil } -- 2.40.1 From 12a20c56b9f44e02c80482095ded5cc6f5ced6de Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 22 Aug 2017 14:30:39 +0800 Subject: [PATCH 2/4] remove unused function --- engine.go | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/engine.go b/engine.go index 654051f1..eababd40 100644 --- a/engine.go +++ b/engine.go @@ -273,21 +273,6 @@ func (engine *Engine) logSQL(sqlStr string, sqlArgs ...interface{}) { } } -func (engine *Engine) logSQLExecutionTime(sqlStr string, args []interface{}, executionBlock func() (sql.Result, error)) (sql.Result, error) { - if engine.showSQL && engine.showExecTime { - b4ExecTime := time.Now() - res, err := executionBlock() - execDuration := time.Since(b4ExecTime) - if len(args) > 0 { - engine.logger.Infof("[sql] %s [args] %v - took: %v", sqlStr, args, execDuration) - } else { - engine.logger.Infof("[sql] %s - took: %v", sqlStr, execDuration) - } - return res, err - } - return executionBlock() -} - // Sql provides raw sql input parameter. When you have a complex SQL statement // and cannot use Where, Id, In and etc. Methods to describe, you can use SQL. // -- 2.40.1 From 6c62e95ed6b830bc2d5ed28aa1a0855e7fa2f813 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sun, 27 Aug 2017 11:48:56 +0800 Subject: [PATCH 3/4] remove unnecessary resetStatement and some improvements --- session_delete.go | 1 - session_exist.go | 1 - session_find.go | 15 +++++++-------- session_get.go | 3 +-- session_insert.go | 3 --- session_iterate.go | 4 ++++ session_schema.go | 18 ------------------ session_update.go | 6 ++---- 8 files changed, 14 insertions(+), 37 deletions(-) diff --git a/session_delete.go b/session_delete.go index 324cfba3..f8a4c665 100644 --- a/session_delete.go +++ b/session_delete.go @@ -78,7 +78,6 @@ func (session *Session) cacheDelete(sqlStr string, args ...interface{}) error { // Delete records, bean's non-empty fields are conditions func (session *Session) Delete(bean interface{}) (int64, error) { - defer session.resetStatement() if session.isAutoClose { defer session.Close() } diff --git a/session_exist.go b/session_exist.go index e24ee121..049c1ddf 100644 --- a/session_exist.go +++ b/session_exist.go @@ -14,7 +14,6 @@ import ( // Exist returns true if the record exist otherwise return false func (session *Session) Exist(bean ...interface{}) (bool, error) { - defer session.resetStatement() if session.isAutoClose { defer session.Close() } diff --git a/session_find.go b/session_find.go index 8115928d..b7cc446a 100644 --- a/session_find.go +++ b/session_find.go @@ -23,11 +23,13 @@ const ( // are conditions. beans could be []Struct, []*Struct, map[int64]Struct // map[int64]*Struct func (session *Session) Find(rowsSlicePtr interface{}, condiBean ...interface{}) error { - defer session.resetStatement() if session.isAutoClose { defer session.Close() } + return session.find(rowsSlicePtr, condiBean...) +} +func (session *Session) find(rowsSlicePtr interface{}, condiBean ...interface{}) error { sliceValue := reflect.Indirect(reflect.ValueOf(rowsSlicePtr)) if sliceValue.Kind() != reflect.Slice && sliceValue.Kind() != reflect.Map { return errors.New("needs a pointer to a slice or a map") @@ -296,7 +298,7 @@ func (session *Session) cacheFind(t reflect.Type, sqlStr string, rowsSlicePtr in cacher := session.engine.getCacher2(table) ids, err := core.GetCacheSql(cacher, tableName, newsql, args) if err != nil { - rows, err := session.DB().Query(newsql, args...) + rows, err := session.NoCache().queryRows(newsql, args...) if err != nil { return err } @@ -368,9 +370,6 @@ func (session *Session) cacheFind(t reflect.Type, sqlStr string, rowsSlicePtr in } if len(ides) > 0 { - newSession := session.engine.NewSession() - defer newSession.Close() - slices := reflect.New(reflect.SliceOf(t)) beans := slices.Interface() @@ -380,18 +379,18 @@ func (session *Session) cacheFind(t reflect.Type, sqlStr string, rowsSlicePtr in ff = append(ff, ie[0]) } - newSession.In("`"+table.PrimaryKeys[0]+"`", ff...) + session.In("`"+table.PrimaryKeys[0]+"`", ff...) } else { for _, ie := range ides { cond := builder.NewCond() for i, name := range table.PrimaryKeys { cond = cond.And(builder.Eq{"`" + name + "`": ie[i]}) } - newSession.Or(cond) + session.Or(cond) } } - err = newSession.NoCache().Find(beans) + err = session.NoCache().find(beans) if err != nil { return err } diff --git a/session_get.go b/session_get.go index e5c67d4b..a697ec5e 100644 --- a/session_get.go +++ b/session_get.go @@ -15,7 +15,6 @@ import ( // Get retrieve one record from database, bean's non-empty fields // will be as conditions func (session *Session) Get(bean interface{}) (bool, error) { - defer session.resetStatement() if session.isAutoClose { defer session.Close() } @@ -127,7 +126,7 @@ func (session *Session) cacheGet(bean interface{}, sqlStr string, args ...interf table := session.statement.RefTable if err != nil { var res = make([]string, len(table.PrimaryKeys)) - rows, err := session.DB().Query(newsql, args...) + rows, err := session.NoCache().queryRows(newsql, args...) if err != nil { return false, err } diff --git a/session_insert.go b/session_insert.go index 350242bc..cafac151 100644 --- a/session_insert.go +++ b/session_insert.go @@ -22,7 +22,6 @@ func (session *Session) Insert(beans ...interface{}) (int64, error) { if session.isAutoClose { defer session.Close() } - defer session.resetStatement() for _, bean := range beans { sliceValue := reflect.Indirect(reflect.ValueOf(bean)) @@ -280,7 +279,6 @@ func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (int64, error // InsertMulti insert multiple records func (session *Session) InsertMulti(rowsSlicePtr interface{}) (int64, error) { - defer session.resetStatement() if session.isAutoClose { defer session.Close() } @@ -532,7 +530,6 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) { // The in parameter bean must a struct or a point to struct. The return // parameter is inserted and error func (session *Session) InsertOne(bean interface{}) (int64, error) { - defer session.resetStatement() if session.isAutoClose { defer session.Close() } diff --git a/session_iterate.go b/session_iterate.go index 7c148095..a2f957a2 100644 --- a/session_iterate.go +++ b/session_iterate.go @@ -19,6 +19,10 @@ func (session *Session) Rows(bean interface{}) (*Rows, error) { // are conditions. beans could be []Struct, []*Struct, map[int64]Struct // map[int64]*Struct func (session *Session) Iterate(bean interface{}, fun IterFunc) error { + if session.isAutoClose { + defer session.Close() + } + rows, err := session.Rows(bean) if err != nil { return err diff --git a/session_schema.go b/session_schema.go index 9442715a..a2708b73 100644 --- a/session_schema.go +++ b/session_schema.go @@ -16,7 +16,6 @@ import ( // Ping test if database is ok func (session *Session) Ping() error { - defer session.resetStatement() if session.isAutoClose { defer session.Close() } @@ -35,7 +34,6 @@ func (session *Session) CreateTable(bean interface{}) error { } func (session *Session) createTable(bean interface{}) error { - defer session.resetStatement() v := rValue(bean) if err := session.statement.setRefValue(v); err != nil { return err @@ -56,7 +54,6 @@ func (session *Session) CreateIndexes(bean interface{}) error { } func (session *Session) createIndexes(bean interface{}) error { - defer session.resetStatement() v := rValue(bean) if err := session.statement.setRefValue(v); err != nil { return err @@ -81,7 +78,6 @@ func (session *Session) CreateUniques(bean interface{}) error { } func (session *Session) createUniques(bean interface{}) error { - defer session.resetStatement() v := rValue(bean) if err := session.statement.setRefValue(v); err != nil { return err @@ -107,7 +103,6 @@ func (session *Session) DropIndexes(bean interface{}) error { } func (session *Session) dropIndexes(bean interface{}) error { - defer session.resetStatement() v := rValue(bean) if err := session.statement.setRefValue(v); err != nil { return err @@ -133,7 +128,6 @@ func (session *Session) DropTable(beanOrTableName interface{}) error { } func (session *Session) dropTable(beanOrTableName interface{}) error { - defer session.resetStatement() tableName, err := session.engine.tableName(beanOrTableName) if err != nil { return err @@ -172,7 +166,6 @@ func (session *Session) IsTableExist(beanOrTableName interface{}) (bool, error) } func (session *Session) isTableExist(tableName string) (bool, error) { - defer session.resetStatement() sqlStr, args := session.engine.dialect.TableCheckSql(tableName) results, err := session.queryBytes(sqlStr, args...) return len(results) > 0, err @@ -196,8 +189,6 @@ func (session *Session) IsTableEmpty(bean interface{}) (bool, error) { } func (session *Session) isTableEmpty(tableName string) (bool, error) { - defer session.resetStatement() - var total int64 sqlStr := fmt.Sprintf("select count(*) from %s", session.engine.Quote(tableName)) err := session.queryRow(sqlStr).Scan(&total) @@ -213,8 +204,6 @@ func (session *Session) isTableEmpty(tableName string) (bool, error) { // find if index is exist according cols func (session *Session) isIndexExist2(tableName string, cols []string, unique bool) (bool, error) { - defer session.resetStatement() - indexes, err := session.engine.dialect.GetIndexes(tableName) if err != nil { return false, err @@ -232,8 +221,6 @@ func (session *Session) isIndexExist2(tableName string, cols []string, unique bo } func (session *Session) addColumn(colName string) error { - defer session.resetStatement() - col := session.statement.RefTable.GetColumn(colName) sql, args := session.statement.genAddColumnStr(col) _, err := session.exec(sql, args...) @@ -241,18 +228,13 @@ func (session *Session) addColumn(colName string) error { } func (session *Session) addIndex(tableName, idxName string) error { - defer session.resetStatement() - index := session.statement.RefTable.Indexes[idxName] sqlStr := session.engine.dialect.CreateIndexSql(tableName, index) - _, err := session.exec(sqlStr) return err } func (session *Session) addUnique(tableName, uqeName string) error { - defer session.resetStatement() - index := session.statement.RefTable.Indexes[uqeName] sqlStr := session.engine.dialect.CreateIndexSql(tableName, index) _, err := session.exec(sqlStr) diff --git a/session_update.go b/session_update.go index e80cd0b5..ee0066ce 100644 --- a/session_update.go +++ b/session_update.go @@ -45,7 +45,7 @@ func (session *Session) cacheUpdate(sqlStr string, args ...interface{}) error { session.engine.logger.Debug("[cacheUpdate] get cache sql", newsql, args[nStart:]) ids, err := core.GetCacheSql(cacher, tableName, newsql, args[nStart:]) if err != nil { - rows, err := session.DB().Query(newsql, args[nStart:]...) + rows, err := session.NoCache().queryRows(newsql, args[nStart:]...) if err != nil { return err } @@ -144,7 +144,6 @@ func (session *Session) cacheUpdate(sqlStr string, args ...interface{}) error { // You should call UseBool if you have bool to use. // 2.float32 & float64 may be not inexact as conditions func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int64, error) { - defer session.resetStatement() if session.isAutoClose { defer session.Close() } @@ -249,8 +248,7 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6 } } - st := session.statement - defer session.resetStatement() + st := &session.statement var sqlStr string var condArgs []interface{} -- 2.40.1 From 80094c0ec3ccc792d22c321ce79740d27ef5ec48 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sun, 27 Aug 2017 12:08:08 +0800 Subject: [PATCH 4/4] rename all Id to ID --- doc.go | 2 +- examples/cache.go | 10 +++--- examples/cachegoroutine.go | 2 +- examples/derive.go | 2 +- examples/goroutine.go | 2 +- examples/maxconnect.go | 2 +- examples/singlemapping.go | 2 +- processors_test.go | 24 ++++++------- session.go | 4 +-- session_cols_test.go | 2 +- session_cond_test.go | 2 +- session_convert.go | 8 ++--- session_delete_test.go | 18 +++++----- session_get.go | 3 ++ session_pk_test.go | 44 +++++++++++------------ session_update_test.go | 72 +++++++++++++++++++------------------- tag_extends_test.go | 6 ++-- tag_test.go | 6 ++-- tag_version_test.go | 6 ++-- types_null_test.go | 10 +++--- types_test.go | 4 +-- 21 files changed, 114 insertions(+), 117 deletions(-) diff --git a/doc.go b/doc.go index bf412bda..a687e694 100644 --- a/doc.go +++ b/doc.go @@ -90,7 +90,7 @@ another is Rows 5. Update one or more records - affected, err := engine.Id(...).Update(&user) + affected, err := engine.ID(...).Update(&user) // UPDATE user SET ... 6. Delete one or more records, Delete MUST has condition diff --git a/examples/cache.go b/examples/cache.go index 72d987df..0c680d23 100644 --- a/examples/cache.go +++ b/examples/cache.go @@ -67,7 +67,7 @@ func main() { fmt.Println("users3:", users3) user4 := new(User) - has, err := Orm.Id(1).Get(user4) + has, err := Orm.ID(1).Get(user4) if err != nil { fmt.Println(err) return @@ -76,7 +76,7 @@ func main() { fmt.Println("user4:", has, user4) user4.Name = "xiaolunwen" - _, err = Orm.Id(1).Update(user4) + _, err = Orm.ID(1).Update(user4) if err != nil { fmt.Println(err) return @@ -84,14 +84,14 @@ func main() { fmt.Println("user4:", user4) user5 := new(User) - has, err = Orm.Id(1).Get(user5) + has, err = Orm.ID(1).Get(user5) if err != nil { fmt.Println(err) return } fmt.Println("user5:", has, user5) - _, err = Orm.Id(1).Delete(new(User)) + _, err = Orm.ID(1).Delete(new(User)) if err != nil { fmt.Println(err) return @@ -99,7 +99,7 @@ func main() { for { user6 := new(User) - has, err = Orm.Id(1).Get(user6) + has, err = Orm.ID(1).Get(user6) if err != nil { fmt.Println(err) return diff --git a/examples/cachegoroutine.go b/examples/cachegoroutine.go index 815e0ad1..e5b2b9d7 100644 --- a/examples/cachegoroutine.go +++ b/examples/cachegoroutine.go @@ -55,7 +55,7 @@ func test(engine *xorm.Engine) { } else if x+j < 16 { _, err = engine.Insert(&User{Name: "xlw"}) } else if x+j < 32 { - //_, err = engine.Id(1).Delete(u) + //_, err = engine.ID(1).Delete(u) _, err = engine.Delete(u) } if err != nil { diff --git a/examples/derive.go b/examples/derive.go index 86529eea..90561514 100644 --- a/examples/derive.go +++ b/examples/derive.go @@ -51,7 +51,7 @@ func main() { } info := LoginInfo{} - _, err = orm.Id(1).Get(&info) + _, err = orm.ID(1).Get(&info) if err != nil { fmt.Println(err) return diff --git a/examples/goroutine.go b/examples/goroutine.go index 629ea9ac..59e56d10 100644 --- a/examples/goroutine.go +++ b/examples/goroutine.go @@ -59,7 +59,7 @@ func test(engine *xorm.Engine) { } else if x+j < 16 { _, err = engine.Insert(&User{Name: "xlw"}) } else if x+j < 32 { - _, err = engine.Id(1).Delete(u) + _, err = engine.ID(1).Delete(u) } if err != nil { fmt.Println(err) diff --git a/examples/maxconnect.go b/examples/maxconnect.go index 507cbc3c..72d0a503 100644 --- a/examples/maxconnect.go +++ b/examples/maxconnect.go @@ -62,7 +62,7 @@ func test(engine *xorm.Engine) { } else if x+j < 16 { _, err = engine.Insert(&User{Name: "xlw"}) } else if x+j < 32 { - _, err = engine.Id(1).Delete(u) + _, err = engine.ID(1).Delete(u) } if err != nil { fmt.Println(err) diff --git a/examples/singlemapping.go b/examples/singlemapping.go index 3ae0fd1a..86e5d1d7 100644 --- a/examples/singlemapping.go +++ b/examples/singlemapping.go @@ -48,7 +48,7 @@ func main() { } info := LoginInfo{} - _, err = orm.Id(1).Get(&info) + _, err = orm.ID(1).Get(&info) if err != nil { fmt.Println(err) return diff --git a/processors_test.go b/processors_test.go index 6c22af0a..5fc2170d 100644 --- a/processors_test.go +++ b/processors_test.go @@ -173,7 +173,7 @@ func TestProcessors(t *testing.T) { } p2 := &ProcessorsStruct{} - _, err = testEngine.Id(p.Id).Get(p2) + _, err = testEngine.ID(p.Id).Get(p2) if err != nil { t.Error(err) panic(err) @@ -308,7 +308,7 @@ func TestProcessors(t *testing.T) { } p2 = &ProcessorsStruct{} - _, err = testEngine.Id(p.Id).Get(p2) + _, err = testEngine.ID(p.Id).Get(p2) if err != nil { t.Error(err) panic(err) @@ -402,7 +402,7 @@ func TestProcessors(t *testing.T) { for _, elem := range pslice { p = &ProcessorsStruct{} - _, err = testEngine.Id(elem.Id).Get(p) + _, err = testEngine.ID(elem.Id).Get(p) if err != nil { t.Error(err) panic(err) @@ -508,7 +508,7 @@ func TestProcessorsTx(t *testing.T) { } session.Close() p2 := &ProcessorsStruct{} - _, err = testEngine.Id(p.Id).Get(p2) + _, err = testEngine.ID(p.Id).Get(p2) if err != nil { t.Error(err) panic(err) @@ -569,7 +569,7 @@ func TestProcessorsTx(t *testing.T) { } session.Close() p2 = &ProcessorsStruct{} - _, err = testEngine.Id(p.Id).Get(p2) + _, err = testEngine.ID(p.Id).Get(p2) if err != nil { t.Error(err) panic(err) @@ -616,7 +616,7 @@ func TestProcessorsTx(t *testing.T) { p = p2 // reset - _, err = session.Id(insertedId).Before(b4UpdateFunc).After(afterUpdateFunc).Update(p) + _, err = session.ID(insertedId).Before(b4UpdateFunc).After(afterUpdateFunc).Update(p) if err != nil { t.Error(err) panic(err) @@ -656,7 +656,7 @@ func TestProcessorsTx(t *testing.T) { session.Close() p2 = &ProcessorsStruct{} - _, err = testEngine.Id(insertedId).Get(p2) + _, err = testEngine.ID(insertedId).Get(p2) if err != nil { t.Error(err) panic(err) @@ -729,7 +729,7 @@ func TestProcessorsTx(t *testing.T) { p = &ProcessorsStruct{} - _, err = session.Id(insertedId).Before(b4UpdateFunc).After(afterUpdateFunc).Update(p) + _, err = session.ID(insertedId).Before(b4UpdateFunc).After(afterUpdateFunc).Update(p) if err != nil { t.Error(err) panic(err) @@ -767,7 +767,7 @@ func TestProcessorsTx(t *testing.T) { } session.Close() p2 = &ProcessorsStruct{} - _, err = testEngine.Id(insertedId).Get(p2) + _, err = testEngine.ID(insertedId).Get(p2) if err != nil { t.Error(err) panic(err) @@ -813,7 +813,7 @@ func TestProcessorsTx(t *testing.T) { p = &ProcessorsStruct{} // reset - _, err = session.Id(insertedId).Before(b4DeleteFunc).After(afterDeleteFunc).Delete(p) + _, err = session.ID(insertedId).Before(b4DeleteFunc).After(afterDeleteFunc).Delete(p) if err != nil { t.Error(err) panic(err) @@ -852,7 +852,7 @@ func TestProcessorsTx(t *testing.T) { session.Close() p2 = &ProcessorsStruct{} - _, err = testEngine.Id(insertedId).Get(p2) + _, err = testEngine.ID(insertedId).Get(p2) if err != nil { t.Error(err) panic(err) @@ -882,7 +882,7 @@ func TestProcessorsTx(t *testing.T) { p = &ProcessorsStruct{} - _, err = session.Id(insertedId).Before(b4DeleteFunc).After(afterDeleteFunc).Delete(p) + _, err = session.ID(insertedId).Before(b4DeleteFunc).After(afterDeleteFunc).Delete(p) if err != nil { t.Error(err) panic(err) diff --git a/session.go b/session.go index 6f7aca32..8a8d5af6 100644 --- a/session.go +++ b/session.go @@ -631,9 +631,7 @@ func (session *Session) slice2Bean(scanResults []interface{}, fields []string, f // however, also need to consider adding a 'lazy' attribute to xorm tag which allow hasOne // property to be fetched lazily structInter := reflect.New(fieldValue.Type()) - newsession := session.engine.NewSession() - defer newsession.Close() - has, err := newsession.ID(pk).NoCascade().Get(structInter.Interface()) + has, err := session.ID(pk).NoCascade().get(structInter.Interface()) if err != nil { return nil, err } diff --git a/session_cols_test.go b/session_cols_test.go index f742a86a..2a292bd3 100644 --- a/session_cols_test.go +++ b/session_cols_test.go @@ -31,7 +31,7 @@ func TestSetExpr(t *testing.T) { if testEngine.dialect.DBType() == core.MSSQL { not = "~" } - cnt, err = testEngine.SetExpr("show", not+" `show`").Id(1).Update(new(User)) + cnt, err = testEngine.SetExpr("show", not+" `show`").ID(1).Update(new(User)) assert.NoError(t, err) assert.EqualValues(t, 1, cnt) } diff --git a/session_cond_test.go b/session_cond_test.go index e144a0a3..5f8716f0 100644 --- a/session_cond_test.go +++ b/session_cond_test.go @@ -227,7 +227,7 @@ func TestIn(t *testing.T) { } user := new(Userinfo) - has, err := testEngine.Id(ids[0]).Get(user) + has, err := testEngine.ID(ids[0]).Get(user) if err != nil { t.Error(err) panic(err) diff --git a/session_convert.go b/session_convert.go index 85002d27..fc244e60 100644 --- a/session_convert.go +++ b/session_convert.go @@ -227,9 +227,7 @@ func (session *Session) bytes2Value(col *core.Column, fieldValue *reflect.Value, // however, also need to consider adding a 'lazy' attribute to xorm tag which allow hasOne // property to be fetched lazily structInter := reflect.New(fieldValue.Type()) - newsession := session.engine.NewSession() - defer newsession.Close() - has, err := newsession.Id(pk).NoCascade().Get(structInter.Interface()) + has, err := session.ID(pk).NoCascade().get(structInter.Interface()) if err != nil { return err } @@ -510,9 +508,7 @@ func (session *Session) bytes2Value(col *core.Column, fieldValue *reflect.Value, // !nashtsai! TODO for hasOne relationship, it's preferred to use join query for eager fetch // however, also need to consider adding a 'lazy' attribute to xorm tag which allow hasOne // property to be fetched lazily - newsession := session.engine.NewSession() - defer newsession.Close() - has, err := newsession.Id(pk).NoCascade().Get(structInter.Interface()) + has, err := session.ID(pk).NoCascade().get(structInter.Interface()) if err != nil { return err } diff --git a/session_delete_test.go b/session_delete_test.go index ad817bd1..7eddd4cd 100644 --- a/session_delete_test.go +++ b/session_delete_test.go @@ -32,7 +32,7 @@ func TestDelete(t *testing.T) { user.Uid = 0 user.IsMan = true - has, err := testEngine.Id(1).Get(&user) + has, err := testEngine.ID(1).Get(&user) assert.NoError(t, err) assert.False(t, has) @@ -46,7 +46,7 @@ func TestDelete(t *testing.T) { user.Uid = 0 user.IsMan = true - has, err = testEngine.Id(2).Get(&user) + has, err = testEngine.ID(2).Get(&user) assert.NoError(t, err) assert.False(t, has) } @@ -82,16 +82,16 @@ func TestDeleted(t *testing.T) { // Test normal Get() record1 := &Deleted{} - has, err := testEngine.Id(1).Get(record1) + has, err := testEngine.ID(1).Get(record1) assert.NoError(t, err) assert.True(t, has) // Test Delete() with deleted - affected, err := testEngine.Id(1).Delete(&Deleted{}) + affected, err := testEngine.ID(1).Delete(&Deleted{}) assert.NoError(t, err) assert.EqualValues(t, 1, affected) - has, err = testEngine.Id(1).Get(&Deleted{}) + has, err = testEngine.ID(1).Get(&Deleted{}) assert.NoError(t, err) assert.False(t, has) @@ -101,17 +101,17 @@ func TestDeleted(t *testing.T) { assert.EqualValues(t, 2, len(records2)) // Test no rows affected after Delete() again. - affected, err = testEngine.Id(1).Delete(&Deleted{}) + affected, err = testEngine.ID(1).Delete(&Deleted{}) assert.NoError(t, err) assert.EqualValues(t, 0, affected) // Deleted.DeletedAt must not be updated. - affected, err = testEngine.Id(2).Update(&Deleted{Name: "2", DeletedAt: time.Now()}) + affected, err = testEngine.ID(2).Update(&Deleted{Name: "2", DeletedAt: time.Now()}) assert.NoError(t, err) assert.EqualValues(t, 1, affected) record2 := &Deleted{} - has, err = testEngine.Id(2).Get(record2) + has, err = testEngine.ID(2).Get(record2) assert.NoError(t, err) assert.True(t, record2.DeletedAt.IsZero()) @@ -122,7 +122,7 @@ func TestDeleted(t *testing.T) { assert.EqualValues(t, 3, len(unscopedRecords1)) // Delete() must really delete a record with Unscoped() - affected, err = testEngine.Unscoped().Id(1).Delete(&Deleted{}) + affected, err = testEngine.Unscoped().ID(1).Delete(&Deleted{}) assert.NoError(t, err) assert.EqualValues(t, 1, affected) diff --git a/session_get.go b/session_get.go index a697ec5e..4d33a201 100644 --- a/session_get.go +++ b/session_get.go @@ -18,7 +18,10 @@ func (session *Session) Get(bean interface{}) (bool, error) { if session.isAutoClose { defer session.Close() } + return session.get(bean) +} +func (session *Session) get(bean interface{}) (bool, error) { beanValue := reflect.ValueOf(bean) if beanValue.Kind() != reflect.Ptr { return false, errors.New("needs a pointer to a value") diff --git a/session_pk_test.go b/session_pk_test.go index 0e17352c..c919cd4f 100644 --- a/session_pk_test.go +++ b/session_pk_test.go @@ -127,7 +127,7 @@ func TestIntId(t *testing.T) { panic(err) } - cnt, err = testEngine.Id(bean.Id).Delete(&IntId{}) + cnt, err = testEngine.ID(bean.Id).Delete(&IntId{}) if err != nil { t.Error(err) panic(err) @@ -202,7 +202,7 @@ func TestInt16Id(t *testing.T) { panic(err) } - cnt, err = testEngine.Id(bean.Id).Delete(&Int16Id{}) + cnt, err = testEngine.ID(bean.Id).Delete(&Int16Id{}) if err != nil { t.Error(err) panic(err) @@ -277,7 +277,7 @@ func TestInt32Id(t *testing.T) { panic(err) } - cnt, err = testEngine.Id(bean.Id).Delete(&Int32Id{}) + cnt, err = testEngine.ID(bean.Id).Delete(&Int32Id{}) if err != nil { t.Error(err) panic(err) @@ -366,7 +366,7 @@ func TestUintId(t *testing.T) { panic(err) } - cnt, err = testEngine.Id(bean.Id).Delete(&UintId{}) + cnt, err = testEngine.ID(bean.Id).Delete(&UintId{}) if err != nil { t.Error(err) panic(err) @@ -441,7 +441,7 @@ func TestUint16Id(t *testing.T) { panic(err) } - cnt, err = testEngine.Id(bean.Id).Delete(&Uint16Id{}) + cnt, err = testEngine.ID(bean.Id).Delete(&Uint16Id{}) if err != nil { t.Error(err) panic(err) @@ -516,7 +516,7 @@ func TestUint32Id(t *testing.T) { panic(err) } - cnt, err = testEngine.Id(bean.Id).Delete(&Uint32Id{}) + cnt, err = testEngine.ID(bean.Id).Delete(&Uint32Id{}) if err != nil { t.Error(err) panic(err) @@ -604,7 +604,7 @@ func TestUint64Id(t *testing.T) { panic(errors.New("should be equal")) } - cnt, err = testEngine.Id(bean.Id).Delete(&Uint64Id{}) + cnt, err = testEngine.ID(bean.Id).Delete(&Uint64Id{}) if err != nil { t.Error(err) panic(err) @@ -679,7 +679,7 @@ func TestStringPK(t *testing.T) { panic(err) } - cnt, err = testEngine.Id(bean.Id).Delete(&StringPK{}) + cnt, err = testEngine.ID(bean.Id).Delete(&StringPK{}) if err != nil { t.Error(err) panic(err) @@ -725,7 +725,7 @@ func TestCompositeKey(t *testing.T) { } var compositeKeyVal CompositeKey - has, err := testEngine.Id(core.PK{11, 22}).Get(&compositeKeyVal) + has, err := testEngine.ID(core.PK{11, 22}).Get(&compositeKeyVal) if err != nil { t.Error(err) } else if !has { @@ -734,7 +734,7 @@ func TestCompositeKey(t *testing.T) { var compositeKeyVal2 CompositeKey // test passing PK ptr, this test seem failed withCache - has, err = testEngine.Id(&core.PK{11, 22}).Get(&compositeKeyVal2) + has, err = testEngine.ID(&core.PK{11, 22}).Get(&compositeKeyVal2) if err != nil { t.Error(err) } else if !has { @@ -781,14 +781,14 @@ func TestCompositeKey(t *testing.T) { } compositeKeyVal = CompositeKey{UpdateStr: "test1"} - cnt, err = testEngine.Id(core.PK{11, 22}).Update(&compositeKeyVal) + cnt, err = testEngine.ID(core.PK{11, 22}).Update(&compositeKeyVal) if err != nil { t.Error(err) } else if cnt != 1 { t.Error(errors.New("can't update CompositeKey{11, 22}")) } - cnt, err = testEngine.Id(core.PK{11, 22}).Delete(&CompositeKey{}) + cnt, err = testEngine.ID(core.PK{11, 22}).Delete(&CompositeKey{}) if err != nil { t.Error(err) } else if cnt != 1 { @@ -832,7 +832,7 @@ func TestCompositeKey2(t *testing.T) { } var user User - has, err := testEngine.Id(core.PK{"11", 22}).Get(&user) + has, err := testEngine.ID(core.PK{"11", 22}).Get(&user) if err != nil { t.Error(err) } else if !has { @@ -840,7 +840,7 @@ func TestCompositeKey2(t *testing.T) { } // test passing PK ptr, this test seem failed withCache - has, err = testEngine.Id(&core.PK{"11", 22}).Get(&user) + has, err = testEngine.ID(&core.PK{"11", 22}).Get(&user) if err != nil { t.Error(err) } else if !has { @@ -848,14 +848,14 @@ func TestCompositeKey2(t *testing.T) { } user = User{NickName: "test1"} - cnt, err = testEngine.Id(core.PK{"11", 22}).Update(&user) + cnt, err = testEngine.ID(core.PK{"11", 22}).Update(&user) if err != nil { t.Error(err) } else if cnt != 1 { t.Error(errors.New("can't update User{11, 22}")) } - cnt, err = testEngine.Id(core.PK{"11", 22}).Delete(&User{}) + cnt, err = testEngine.ID(core.PK{"11", 22}).Delete(&User{}) if err != nil { t.Error(err) } else if cnt != 1 { @@ -900,7 +900,7 @@ func TestCompositeKey3(t *testing.T) { } var user UserPK2 - has, err := testEngine.Id(core.PK{"11", 22}).Get(&user) + has, err := testEngine.ID(core.PK{"11", 22}).Get(&user) if err != nil { t.Error(err) } else if !has { @@ -908,7 +908,7 @@ func TestCompositeKey3(t *testing.T) { } // test passing PK ptr, this test seem failed withCache - has, err = testEngine.Id(&core.PK{"11", 22}).Get(&user) + has, err = testEngine.ID(&core.PK{"11", 22}).Get(&user) if err != nil { t.Error(err) } else if !has { @@ -916,14 +916,14 @@ func TestCompositeKey3(t *testing.T) { } user = UserPK2{NickName: "test1"} - cnt, err = testEngine.Id(core.PK{"11", 22}).Update(&user) + cnt, err = testEngine.ID(core.PK{"11", 22}).Update(&user) if err != nil { t.Error(err) } else if cnt != 1 { t.Error(errors.New("can't update User{11, 22}")) } - cnt, err = testEngine.Id(core.PK{"11", 22}).Delete(&UserPK2{}) + cnt, err = testEngine.ID(core.PK{"11", 22}).Delete(&UserPK2{}) if err != nil { t.Error(err) } else if cnt != 1 { @@ -1007,7 +1007,7 @@ func TestMyIntId(t *testing.T) { panic(errors.New("should be equal")) } - cnt, err = testEngine.Id(bean.ID).Delete(&MyIntPK{}) + cnt, err = testEngine.ID(bean.ID).Delete(&MyIntPK{}) if err != nil { t.Error(err) panic(err) @@ -1095,7 +1095,7 @@ func TestMyStringId(t *testing.T) { panic(errors.New("should be equal")) } - cnt, err = testEngine.Id(bean.ID).Delete(&MyStringPK{}) + cnt, err = testEngine.ID(bean.ID).Delete(&MyStringPK{}) if err != nil { t.Error(err) panic(err) diff --git a/session_update_test.go b/session_update_test.go index 70582551..ccd713ae 100644 --- a/session_update_test.go +++ b/session_update_test.go @@ -298,7 +298,7 @@ func TestUpdate1(t *testing.T) { // update by id user := Userinfo{Username: "xxx", Height: 1.2} - cnt, err := testEngine.Id(ori.Uid).Update(&user) + cnt, err := testEngine.ID(ori.Uid).Update(&user) if err != nil { t.Error(err) panic(err) @@ -311,7 +311,7 @@ func TestUpdate1(t *testing.T) { } condi := Condi{"username": "zzz", "departname": ""} - cnt, err = testEngine.Table(&user).Id(ori.Uid).Update(&condi) + cnt, err = testEngine.Table(&user).ID(ori.Uid).Update(&condi) if err != nil { t.Error(err) panic(err) @@ -351,7 +351,7 @@ func TestUpdate1(t *testing.T) { } userID := user.Uid - has, err := testEngine.Id(userID). + has, err := testEngine.ID(userID). And("username = ?", user.Username). And("height = ?", user.Height). And("departname = ?", ""). @@ -369,7 +369,7 @@ func TestUpdate1(t *testing.T) { } updatedUser := &Userinfo{Username: "null data"} - cnt, err = testEngine.Id(userID). + cnt, err = testEngine.ID(userID). Nullable("height", "departname", "is_man", "created"). Update(updatedUser) if err != nil { @@ -382,7 +382,7 @@ func TestUpdate1(t *testing.T) { panic(err) } - has, err = testEngine.Id(userID). + has, err = testEngine.ID(userID). And("username = ?", updatedUser.Username). And("height IS NULL"). And("departname IS NULL"). @@ -400,7 +400,7 @@ func TestUpdate1(t *testing.T) { panic(err) } - cnt, err = testEngine.Id(userID).Delete(&Userinfo{}) + cnt, err = testEngine.ID(userID).Delete(&Userinfo{}) if err != nil { t.Error(err) panic(err) @@ -445,7 +445,7 @@ func TestUpdate1(t *testing.T) { panic(err) } - cnt, err = testEngine.Id(a.Id).Update(&Article{Name: "6"}) + cnt, err = testEngine.ID(a.Id).Update(&Article{Name: "6"}) if err != nil { t.Error(err) panic(err) @@ -474,14 +474,14 @@ func TestUpdate1(t *testing.T) { } col2 := &UpdateAllCols{col1.Id, true, "", nil} - _, err = testEngine.Id(col2.Id).AllCols().Update(col2) + _, err = testEngine.ID(col2.Id).AllCols().Update(col2) if err != nil { t.Error(err) panic(err) } col3 := &UpdateAllCols{} - has, err = testEngine.Id(col2.Id).Get(col3) + has, err = testEngine.ID(col2.Id).Get(col3) if err != nil { t.Error(err) panic(err) @@ -519,14 +519,14 @@ func TestUpdate1(t *testing.T) { col2 := &UpdateMustCols{col1.Id, true, ""} boolStr := testEngine.ColumnMapper.Obj2Table("Bool") stringStr := testEngine.ColumnMapper.Obj2Table("String") - _, err = testEngine.Id(col2.Id).MustCols(boolStr, stringStr).Update(col2) + _, err = testEngine.ID(col2.Id).MustCols(boolStr, stringStr).Update(col2) if err != nil { t.Error(err) panic(err) } col3 := &UpdateMustCols{} - has, err := testEngine.Id(col2.Id).Get(col3) + has, err := testEngine.ID(col2.Id).Get(col3) if err != nil { t.Error(err) panic(err) @@ -561,27 +561,27 @@ func TestUpdateIncrDecr(t *testing.T) { colName := testEngine.ColumnMapper.Obj2Table("Cnt") - cnt, err := testEngine.Id(col1.Id).Incr(colName).Update(col1) + cnt, err := testEngine.ID(col1.Id).Incr(colName).Update(col1) assert.NoError(t, err) assert.EqualValues(t, 1, cnt) newCol := new(UpdateIncr) - has, err := testEngine.Id(col1.Id).Get(newCol) + has, err := testEngine.ID(col1.Id).Get(newCol) assert.NoError(t, err) assert.True(t, has) assert.EqualValues(t, 1, newCol.Cnt) - cnt, err = testEngine.Id(col1.Id).Decr(colName).Update(col1) + cnt, err = testEngine.ID(col1.Id).Decr(colName).Update(col1) assert.NoError(t, err) assert.EqualValues(t, 1, cnt) newCol = new(UpdateIncr) - has, err = testEngine.Id(col1.Id).Get(newCol) + has, err = testEngine.ID(col1.Id).Get(newCol) assert.NoError(t, err) assert.True(t, has) assert.EqualValues(t, 0, newCol.Cnt) - cnt, err = testEngine.Id(col1.Id).Cols(colName).Incr(colName).Update(col1) + cnt, err = testEngine.ID(col1.Id).Cols(colName).Incr(colName).Update(col1) assert.NoError(t, err) assert.EqualValues(t, 1, cnt) } @@ -626,12 +626,12 @@ func TestUpdateUpdated(t *testing.T) { } ci := &UpdatedUpdate{} - _, err = testEngine.Id(1).Update(ci) + _, err = testEngine.ID(1).Update(ci) if err != nil { t.Fatal(err) } - has, err := testEngine.Id(1).Get(di) + has, err := testEngine.ID(1).Get(di) if err != nil { t.Fatal(err) } @@ -654,11 +654,11 @@ func TestUpdateUpdated(t *testing.T) { t.Fatal(err) } ci2 := &UpdatedUpdate2{} - _, err = testEngine.Id(1).Update(ci2) + _, err = testEngine.ID(1).Update(ci2) if err != nil { t.Fatal(err) } - has, err = testEngine.Id(1).Get(di2) + has, err = testEngine.ID(1).Get(di2) if err != nil { t.Fatal(err) } @@ -681,12 +681,12 @@ func TestUpdateUpdated(t *testing.T) { t.Fatal(err) } ci3 := &UpdatedUpdate3{} - _, err = testEngine.Id(1).Update(ci3) + _, err = testEngine.ID(1).Update(ci3) if err != nil { t.Fatal(err) } - has, err = testEngine.Id(1).Get(di3) + has, err = testEngine.ID(1).Get(di3) if err != nil { t.Fatal(err) } @@ -710,12 +710,12 @@ func TestUpdateUpdated(t *testing.T) { } ci4 := &UpdatedUpdate4{} - _, err = testEngine.Id(1).Update(ci4) + _, err = testEngine.ID(1).Update(ci4) if err != nil { t.Fatal(err) } - has, err = testEngine.Id(1).Get(di4) + has, err = testEngine.ID(1).Get(di4) if err != nil { t.Fatal(err) } @@ -738,12 +738,12 @@ func TestUpdateUpdated(t *testing.T) { t.Fatal(err) } ci5 := &UpdatedUpdate5{} - _, err = testEngine.Id(1).Update(ci5) + _, err = testEngine.ID(1).Update(ci5) if err != nil { t.Fatal(err) } - has, err = testEngine.Id(1).Get(di5) + has, err = testEngine.ID(1).Get(di5) if err != nil { t.Fatal(err) } @@ -796,7 +796,7 @@ func TestUpdateSameMapper(t *testing.T) { } // update by id user := Userinfo{Username: "xxx", Height: 1.2} - cnt, err := testEngine.Id(ori.Uid).Update(&user) + cnt, err := testEngine.ID(ori.Uid).Update(&user) if err != nil { t.Error(err) panic(err) @@ -809,7 +809,7 @@ func TestUpdateSameMapper(t *testing.T) { } condi := Condi{"Username": "zzz", "Departname": ""} - cnt, err = testEngine.Table(&user).Id(ori.Uid).Update(&condi) + cnt, err = testEngine.Table(&user).ID(ori.Uid).Update(&condi) if err != nil { t.Error(err) panic(err) @@ -874,7 +874,7 @@ func TestUpdateSameMapper(t *testing.T) { panic(err) } - cnt, err = testEngine.Id(a.Id).Update(&Article{Name: "6"}) + cnt, err = testEngine.ID(a.Id).Update(&Article{Name: "6"}) if err != nil { t.Error(err) panic(err) @@ -901,14 +901,14 @@ func TestUpdateSameMapper(t *testing.T) { } col2 := &UpdateAllCols{col1.Id, true, "", nil} - _, err = testEngine.Id(col2.Id).AllCols().Update(col2) + _, err = testEngine.ID(col2.Id).AllCols().Update(col2) if err != nil { t.Error(err) panic(err) } col3 := &UpdateAllCols{} - has, err = testEngine.Id(col2.Id).Get(col3) + has, err = testEngine.ID(col2.Id).Get(col3) if err != nil { t.Error(err) panic(err) @@ -945,14 +945,14 @@ func TestUpdateSameMapper(t *testing.T) { col2 := &UpdateMustCols{col1.Id, true, ""} boolStr := testEngine.ColumnMapper.Obj2Table("Bool") stringStr := testEngine.ColumnMapper.Obj2Table("String") - _, err = testEngine.Id(col2.Id).MustCols(boolStr, stringStr).Update(col2) + _, err = testEngine.ID(col2.Id).MustCols(boolStr, stringStr).Update(col2) if err != nil { t.Error(err) panic(err) } col3 := &UpdateMustCols{} - has, err := testEngine.Id(col2.Id).Get(col3) + has, err := testEngine.ID(col2.Id).Get(col3) if err != nil { t.Error(err) panic(err) @@ -988,7 +988,7 @@ func TestUpdateSameMapper(t *testing.T) { panic(err) } - cnt, err := testEngine.Id(col1.Id).Incr("`Cnt`").Update(col1) + cnt, err := testEngine.ID(col1.Id).Incr("`Cnt`").Update(col1) if err != nil { t.Error(err) panic(err) @@ -1000,7 +1000,7 @@ func TestUpdateSameMapper(t *testing.T) { } newCol := new(UpdateIncr) - has, err := testEngine.Id(col1.Id).Get(newCol) + has, err := testEngine.ID(col1.Id).Get(newCol) if err != nil { t.Error(err) panic(err) @@ -1119,7 +1119,7 @@ func TestNoUpdate(t *testing.T) { }) assert.NoError(t, err) - _, err = testEngine.Id(1).Update(&NoUpdate{}) + _, err = testEngine.ID(1).Update(&NoUpdate{}) assert.Error(t, err) assert.EqualValues(t, "No content found to be updated", err.Error()) } diff --git a/tag_extends_test.go b/tag_extends_test.go index 4b94fd4b..61a61e9e 100644 --- a/tag_extends_test.go +++ b/tag_extends_test.go @@ -86,7 +86,7 @@ func TestExtends(t *testing.T) { } tu3 := &tempUser2{tempUser{0, "extends update"}, ""} - _, err = testEngine.Id(tu2.TempUser.Id).Update(tu3) + _, err = testEngine.ID(tu2.TempUser.Id).Update(tu3) if err != nil { t.Error(err) panic(err) @@ -124,7 +124,7 @@ func TestExtends(t *testing.T) { } tu10 := &tempUser4{tempUser2{tempUser{0, "extends update"}, ""}} - _, err = testEngine.Id(tu9.TempUser2.TempUser.Id).Update(tu10) + _, err = testEngine.ID(tu9.TempUser2.TempUser.Id).Update(tu10) if err != nil { t.Error(err) panic(err) @@ -168,7 +168,7 @@ func TestExtends(t *testing.T) { } tu6 := &tempUser3{&tempUser{0, "extends update"}, ""} - _, err = testEngine.Id(tu5.Temp.Id).Update(tu6) + _, err = testEngine.ID(tu5.Temp.Id).Update(tu6) if err != nil { t.Error(err) panic(err) diff --git a/tag_test.go b/tag_test.go index edb18506..dc7ff2fa 100644 --- a/tag_test.go +++ b/tag_test.go @@ -51,7 +51,7 @@ func TestCreatedAndUpdated(t *testing.T) { } u.Name = "xxx" - cnt, err = testEngine.Id(u.Id).Update(u) + cnt, err = testEngine.ID(u.Id).Update(u) if err != nil { t.Error(err) panic(err) @@ -130,13 +130,13 @@ func TestCreatedUpdated(t *testing.T) { assert.NoError(t, err) c2 := new(CreatedUpdated) - has, err := testEngine.Id(c.Id).Get(c2) + has, err := testEngine.ID(c.Id).Get(c2) assert.NoError(t, err) assert.True(t, has) c2.Value -= 1 - _, err = testEngine.Id(c2.Id).Update(c2) + _, err = testEngine.ID(c2.Id).Update(c2) assert.NoError(t, err) } diff --git a/tag_version_test.go b/tag_version_test.go index 1aeabcaa..570a6754 100644 --- a/tag_version_test.go +++ b/tag_version_test.go @@ -49,7 +49,7 @@ func TestVersion1(t *testing.T) { } newVer := new(VersionS) - has, err := testEngine.Id(ver.Id).Get(newVer) + has, err := testEngine.ID(ver.Id).Get(newVer) if err != nil { t.Error(err) panic(err) @@ -67,7 +67,7 @@ func TestVersion1(t *testing.T) { } newVer.Name = "-------" - _, err = testEngine.Id(ver.Id).Update(newVer) + _, err = testEngine.ID(ver.Id).Update(newVer) if err != nil { t.Error(err) panic(err) @@ -78,7 +78,7 @@ func TestVersion1(t *testing.T) { } newVer = new(VersionS) - has, err = testEngine.Id(ver.Id).Get(newVer) + has, err = testEngine.ID(ver.Id).Get(newVer) if err != nil { t.Error(err) panic(err) diff --git a/types_null_test.go b/types_null_test.go index 776b2e6e..22fc1024 100644 --- a/types_null_test.go +++ b/types_null_test.go @@ -176,7 +176,7 @@ func TestNullStructUpdate(t *testing.T) { item.Age = sql.NullInt64{23, true} item.Height = sql.NullFloat64{0, false} // update to NULL - affected, err := testEngine.Id(2).Cols("age", "height", "is_man").Update(item) + affected, err := testEngine.ID(2).Cols("age", "height", "is_man").Update(item) if err != nil { t.Error(err) panic(err) @@ -224,7 +224,7 @@ func TestNullStructUpdate(t *testing.T) { // IsMan: sql.NullBool{true, true}, } - _, err := testEngine.AllCols().Id(6).Update(item) + _, err := testEngine.AllCols().ID(6).Update(item) if err != nil { t.Error(err) panic(err) @@ -268,7 +268,7 @@ func TestNullStructFind(t *testing.T) { if true { item := new(NullType) - has, err := testEngine.Id(1).Get(item) + has, err := testEngine.ID(1).Get(item) if err != nil { t.Error(err) panic(err) @@ -305,7 +305,7 @@ func TestNullStructFind(t *testing.T) { if true { item := make([]NullType, 0) - err := testEngine.Id(2).Find(&item) + err := testEngine.ID(2).Find(&item) if err != nil { t.Error(err) panic(err) @@ -390,7 +390,7 @@ func TestNullStructDelete(t *testing.T) { item := new(NullType) - _, err := testEngine.Id(1).Delete(item) + _, err := testEngine.ID(1).Delete(item) if err != nil { t.Error(err) panic(err) diff --git a/types_test.go b/types_test.go index aadf5f69..df4ee70e 100644 --- a/types_test.go +++ b/types_test.go @@ -37,7 +37,7 @@ func TestArrayField(t *testing.T) { assert.EqualValues(t, 1, cnt) var arr ArrayStruct - has, err := testEngine.Id(1).Get(&arr) + has, err := testEngine.ID(1).Get(&arr) assert.NoError(t, err) assert.Equal(t, true, has) assert.Equal(t, as.Name, arr.Name) @@ -320,7 +320,7 @@ func TestCustomType2(t *testing.T) { assert.NoError(t, err) user := UserCus{} - exist, err := testEngine.Id(1).Get(&user) + exist, err := testEngine.ID(1).Get(&user) assert.NoError(t, err) assert.True(t, exist) -- 2.40.1