* feat:add more linter * feat:change golangclilint version to 1.57.x to support more linter * feat:adjust lint conf and adjust the code to pass the check * style: format some code; fix: some sql statement or rows was not been closed --------- Co-authored-by: JayLiu <38887641+luky116@users.noreply.github.com>tags/v2.0.0
| @@ -56,15 +56,12 @@ linters: | |||||
| - staticcheck | - staticcheck | ||||
| - ineffassign | - ineffassign | ||||
| - misspell | - misspell | ||||
| # - errcheck | |||||
| - asciicheck | - asciicheck | ||||
| - bodyclose | - bodyclose | ||||
| - rowserrcheck | - rowserrcheck | ||||
| #- makezero | |||||
| - gofmt | |||||
| - durationcheck | - durationcheck | ||||
| # - prealloc | |||||
| # - predeclared | |||||
| - sqlclosecheck | |||||
| run: | run: | ||||
| @@ -93,6 +93,7 @@ func (m *mysqlTrigger) getColumnMetas(ctx context.Context, dbName string, table | |||||
| if err != nil { | if err != nil { | ||||
| return nil, err | return nil, err | ||||
| } | } | ||||
| defer stmt.Close() | |||||
| rows, err := stmt.Query(dbName, table) | rows, err := stmt.Query(dbName, table) | ||||
| if err != nil { | if err != nil { | ||||
| @@ -164,7 +165,7 @@ func (m *mysqlTrigger) getIndexes(ctx context.Context, dbName string, tableName | |||||
| if err != nil { | if err != nil { | ||||
| return nil, err | return nil, err | ||||
| } | } | ||||
| defer stmt.Close() | |||||
| rows, err := stmt.Query(dbName, tableName) | rows, err := stmt.Query(dbName, tableName) | ||||
| if err != nil { | if err != nil { | ||||
| return nil, err | return nil, err | ||||
| @@ -142,7 +142,7 @@ func addEscape(colName string, dbType types.DBType, escape string) string { | |||||
| buf := make([]byte, len(colName)+2) | buf := make([]byte, len(colName)+2) | ||||
| buf[0], buf[len(buf)-1] = escape[0], escape[0] | buf[0], buf[len(buf)-1] = escape[0], escape[0] | ||||
| for key, _ := range colName { | |||||
| for key := range colName { | |||||
| buf[key+1] = colName[key] | buf[key+1] = colName[key] | ||||
| } | } | ||||
| @@ -166,7 +166,7 @@ func (tx *Tx) register(ctx *types.TransactionContext) error { | |||||
| if !ctx.HasUndoLog() || !ctx.HasLockKey() { | if !ctx.HasUndoLog() || !ctx.HasLockKey() { | ||||
| return nil | return nil | ||||
| } | } | ||||
| for k, _ := range ctx.LockKeys { | |||||
| for k := range ctx.LockKeys { | |||||
| lockKey += k + ";" | lockKey += k + ";" | ||||
| } | } | ||||
| request.LockKeys = lockKey | request.LockKeys = lockKey | ||||
| @@ -146,7 +146,7 @@ func (r *RowImage) GetColumnMap() map[string]*ColumnImage { | |||||
| // PrimaryKeys Primary keys list. | // PrimaryKeys Primary keys list. | ||||
| func (r *RowImage) PrimaryKeys(cols []ColumnImage) []ColumnImage { | func (r *RowImage) PrimaryKeys(cols []ColumnImage) []ColumnImage { | ||||
| var pkFields []ColumnImage | var pkFields []ColumnImage | ||||
| for key, _ := range cols { | |||||
| for key := range cols { | |||||
| if cols[key].KeyType == PrimaryKey.Number() { | if cols[key].KeyType == PrimaryKey.Number() { | ||||
| pkFields = append(pkFields, cols[key]) | pkFields = append(pkFields, cols[key]) | ||||
| } | } | ||||
| @@ -158,7 +158,7 @@ func (r *RowImage) PrimaryKeys(cols []ColumnImage) []ColumnImage { | |||||
| // NonPrimaryKeys get non-primary keys | // NonPrimaryKeys get non-primary keys | ||||
| func (r *RowImage) NonPrimaryKeys(cols []ColumnImage) []ColumnImage { | func (r *RowImage) NonPrimaryKeys(cols []ColumnImage) []ColumnImage { | ||||
| var nonPkFields []ColumnImage | var nonPkFields []ColumnImage | ||||
| for key, _ := range cols { | |||||
| for key := range cols { | |||||
| if cols[key].KeyType != PrimaryKey.Number() { | if cols[key].KeyType != PrimaryKey.Number() { | ||||
| nonPkFields = append(nonPkFields, cols[key]) | nonPkFields = append(nonPkFields, cols[key]) | ||||
| } | } | ||||
| @@ -106,6 +106,8 @@ func (m *BaseUndoLogManager) InsertUndoLogWithSqlConn(ctx context.Context, recor | |||||
| if err != nil { | if err != nil { | ||||
| return err | return err | ||||
| } | } | ||||
| defer stmt.Close() | |||||
| _, err = stmt.Exec(record.BranchID, record.XID, record.Context, record.RollbackInfo, int64(record.LogStatus)) | _, err = stmt.Exec(record.BranchID, record.XID, record.Context, record.RollbackInfo, int64(record.LogStatus)) | ||||
| if err != nil { | if err != nil { | ||||
| return err | return err | ||||
| @@ -120,7 +122,7 @@ func (m *BaseUndoLogManager) DeleteUndoLog(ctx context.Context, xid string, bran | |||||
| log.Errorf("[DeleteUndoLog] prepare sql fail, err: %v", err) | log.Errorf("[DeleteUndoLog] prepare sql fail, err: %v", err) | ||||
| return err | return err | ||||
| } | } | ||||
| defer stmt.Close() | |||||
| if _, err = stmt.Exec(branchID, xid); err != nil { | if _, err = stmt.Exec(branchID, xid); err != nil { | ||||
| log.Errorf("[DeleteUndoLog] exec delete undo log fail, err: %v", err) | log.Errorf("[DeleteUndoLog] exec delete undo log fail, err: %v", err) | ||||
| return err | return err | ||||
| @@ -146,6 +148,7 @@ func (m *BaseUndoLogManager) BatchDeleteUndoLog(xid []string, branchID []int64, | |||||
| log.Errorf("prepare sql fail, err: %v", err) | log.Errorf("prepare sql fail, err: %v", err) | ||||
| return err | return err | ||||
| } | } | ||||
| defer stmt.Close() | |||||
| branchIDStr, err := Int64Slice2Str(branchID, ",") | branchIDStr, err := Int64Slice2Str(branchID, ",") | ||||
| if err != nil { | if err != nil { | ||||
| @@ -413,7 +416,7 @@ func (m *BaseUndoLogManager) DBType() types.DBType { | |||||
| // HasUndoLogTable check undo log table if exist | // HasUndoLogTable check undo log table if exist | ||||
| func (m *BaseUndoLogManager) HasUndoLogTable(ctx context.Context, conn *sql.Conn) (res bool, err error) { | func (m *BaseUndoLogManager) HasUndoLogTable(ctx context.Context, conn *sql.Conn) (res bool, err error) { | ||||
| if _, err = conn.QueryContext(ctx, getCheckUndoLogTableExistSql()); err != nil { //nolint:rowserrcheck | |||||
| if _, err = conn.QueryContext(ctx, getCheckUndoLogTableExistSql()); err != nil { //nolint:rowserrcheck,sqlclosecheck | |||||
| // 1146 mysql table not exist fault code | // 1146 mysql table not exist fault code | ||||
| if e, ok := err.(*mysql.SQLError); ok && e.Code == mysql.ErrNoSuchTable { | if e, ok := err.(*mysql.SQLError); ok && e.Code == mysql.ErrNoSuchTable { | ||||
| return false, nil | return false, nil | ||||
| @@ -124,7 +124,7 @@ func (b *BaseExecutor) queryCurrentRecords(ctx context.Context, conn *sql.Conn) | |||||
| if err != nil { | if err != nil { | ||||
| return nil, err | return nil, err | ||||
| } | } | ||||
| defer rows.Close() | |||||
| image := types.RecordImage{ | image := types.RecordImage{ | ||||
| TableName: b.undoImage.TableName, | TableName: b.undoImage.TableName, | ||||
| TableMeta: tableMeta, | TableMeta: tableMeta, | ||||
| @@ -48,7 +48,7 @@ func (m *mySQLUndoDeleteExecutor) ExecuteOn(ctx context.Context, dbType types.DB | |||||
| if err != nil { | if err != nil { | ||||
| return err | return err | ||||
| } | } | ||||
| defer stmt.Close() | |||||
| beforeImage := m.sqlUndoLog.BeforeImage | beforeImage := m.sqlUndoLog.BeforeImage | ||||
| for _, row := range beforeImage.Rows { | for _, row := range beforeImage.Rows { | ||||
| @@ -97,7 +97,7 @@ func (m *mySQLUndoDeleteExecutor) buildUndoSQL(dbType types.DBType) (string, err | |||||
| insertColumnSlice, insertValueSlice []string | insertColumnSlice, insertValueSlice []string | ||||
| ) | ) | ||||
| for key, _ := range fields { | |||||
| for key := range fields { | |||||
| insertColumnSlice = append(insertColumnSlice, AddEscape(fields[key].ColumnName, dbType)) | insertColumnSlice = append(insertColumnSlice, AddEscape(fields[key].ColumnName, dbType)) | ||||
| insertValueSlice = append(insertValueSlice, "?") | insertValueSlice = append(insertValueSlice, "?") | ||||
| } | } | ||||
| @@ -50,7 +50,7 @@ func (m *mySQLUndoInsertExecutor) ExecuteOn(ctx context.Context, dbType types.DB | |||||
| if err != nil { | if err != nil { | ||||
| return err | return err | ||||
| } | } | ||||
| defer stmt.Close() | |||||
| afterImage := m.sqlUndoLog.AfterImage | afterImage := m.sqlUndoLog.AfterImage | ||||
| for _, row := range afterImage.Rows { | for _, row := range afterImage.Rows { | ||||
| pkValueList := make([]interface{}, 0) | pkValueList := make([]interface{}, 0) | ||||
| @@ -96,7 +96,7 @@ func (m *mySQLUndoInsertExecutor) generateDeleteSql( | |||||
| } | } | ||||
| var pkList []string | var pkList []string | ||||
| for key, _ := range colImages { | |||||
| for key := range colImages { | |||||
| pkList = append(pkList, colImages[key].ColumnName) | pkList = append(pkList, colImages[key].ColumnName) | ||||
| } | } | ||||
| @@ -54,6 +54,7 @@ func (m *mySQLUndoUpdateExecutor) ExecuteOn(ctx context.Context, dbType types.DB | |||||
| if err != nil { | if err != nil { | ||||
| return err | return err | ||||
| } | } | ||||
| defer stmt.Close() | |||||
| beforeImage := m.sqlUndoLog.BeforeImage | beforeImage := m.sqlUndoLog.BeforeImage | ||||
| for _, row := range beforeImage.Rows { | for _, row := range beforeImage.Rows { | ||||
| @@ -93,7 +94,7 @@ func (m *mySQLUndoUpdateExecutor) buildUndoSQL(dbType types.DBType) (string, err | |||||
| ) | ) | ||||
| nonPkFields := row.NonPrimaryKeys(row.Columns) | nonPkFields := row.NonPrimaryKeys(row.Columns) | ||||
| for key, _ := range nonPkFields { | |||||
| for key := range nonPkFields { | |||||
| updateColumnSlice = append(updateColumnSlice, AddEscape(nonPkFields[key].ColumnName, dbType)+" = ? ") | updateColumnSlice = append(updateColumnSlice, AddEscape(nonPkFields[key].ColumnName, dbType)+" = ? ") | ||||
| } | } | ||||
| @@ -103,7 +104,7 @@ func (m *mySQLUndoUpdateExecutor) buildUndoSQL(dbType types.DBType) (string, err | |||||
| return "", err | return "", err | ||||
| } | } | ||||
| for key, _ := range pkList { | |||||
| for key := range pkList { | |||||
| pkNameList = append(pkNameList, pkList[key].ColumnName) | pkNameList = append(pkNameList, pkList[key].ColumnName) | ||||
| } | } | ||||
| @@ -142,7 +142,7 @@ func addEscape(colName string, dbType types.DBType, escape string) string { | |||||
| buf := make([]byte, len(colName)+2) | buf := make([]byte, len(colName)+2) | ||||
| buf[0], buf[len(buf)-1] = escape[0], escape[0] | buf[0], buf[len(buf)-1] = escape[0], escape[0] | ||||
| for key, _ := range colName { | |||||
| for key := range colName { | |||||
| buf[key+1] = colName[key] | buf[key+1] = colName[key] | ||||
| } | } | ||||
| @@ -58,9 +58,9 @@ var ( | |||||
| var ( | var ( | ||||
| ErrNotEnoughStream = errors.New("packet stream is not enough") | ErrNotEnoughStream = errors.New("packet stream is not enough") | ||||
| ErrTooLargePackage = errors.New("package length is exceed the getty package's legal maximum length.") | |||||
| ErrTooLargePackage = errors.New("package length is exceed the getty package's legal maximum length") | |||||
| ErrInvalidPackage = errors.New("invalid rpc package") | ErrInvalidPackage = errors.New("invalid rpc package") | ||||
| ErrIllegalMagic = errors.New("package magic is not right.") | |||||
| ErrIllegalMagic = errors.New("package magic is not right") | |||||
| ) | ) | ||||
| type RpcPackageHandler struct{} | type RpcPackageHandler struct{} | ||||
| @@ -141,7 +141,7 @@ func (p *RpcPackageHandler) Write(ss getty.Session, pkg interface{}) ([]byte, er | |||||
| headLength := message.V1HeadLength | headLength := message.V1HeadLength | ||||
| var headMapBytes []byte | var headMapBytes []byte | ||||
| if msg.HeadMap != nil && len(msg.HeadMap) > 0 { | |||||
| if len(msg.HeadMap) > 0 { | |||||
| hb, headMapLength := encodeHeapMap(msg.HeadMap) | hb, headMapLength := encodeHeapMap(msg.HeadMap) | ||||
| headMapBytes = hb | headMapBytes = hb | ||||
| headLength += headMapLength | headLength += headMapLength | ||||
| @@ -40,7 +40,7 @@ func Select(loadBalanceType string, sessions *sync.Map, xid string) getty.Sessio | |||||
| case consistentHashLoadBalance: | case consistentHashLoadBalance: | ||||
| return ConsistentHashLoadBalance(sessions, xid) | return ConsistentHashLoadBalance(sessions, xid) | ||||
| case leastActiveLoadBalance: | case leastActiveLoadBalance: | ||||
| return LeastActiveLoadBalance(sessions, xid) | |||||
| return LeastActiveLoadBalance(sessions, xid) | |||||
| case roundRobinLoadBalance: | case roundRobinLoadBalance: | ||||
| return RoundRobinLoadBalance(sessions, xid) | return RoundRobinLoadBalance(sessions, xid) | ||||
| default: | default: | ||||