Browse Source
Fix error log when loading issues caused by a xorm bug (#7271)
Fix error log when loading issues caused by a xorm bug (#7271)
* fix error log when loading issues caused by a xorm bug * upgrade packages * fix fmt * fix Consistency * fix testsrelease/v1.9
committed by
Lauris BH
156 changed files with 1850 additions and 1829 deletions
-
17go.mod
-
26go.sum
-
2models/action.go
-
2models/consistency.go
-
3models/issue.go
-
2models/issue_comment.go
-
76models/issue_list.go
-
2models/issue_reaction.go
-
2models/issue_tracked_time.go
-
2models/log.go
-
2models/login_source.go
-
2models/migrations/v31.go
-
2models/migrations/v38.go
-
2models/migrations/v75.go
-
2models/migrations/v78.go
-
2models/migrations/v85.go
-
2models/models.go
-
2models/org.go
-
2models/release.go
-
2models/repo.go
-
2models/repo_list.go
-
2models/repo_unit.go
-
4models/review.go
-
2models/ssh_key.go
-
2models/topic.go
-
2models/unit_tests.go
-
4models/user.go
-
2routers/admin/auths.go
-
2vendor/github.com/go-sql-driver/mysql/.travis.yml
-
5vendor/github.com/go-sql-driver/mysql/AUTHORS
-
11vendor/github.com/go-sql-driver/mysql/CHANGELOG.md
-
6vendor/github.com/go-sql-driver/mysql/README.md
-
8vendor/github.com/go-sql-driver/mysql/auth.go
-
49vendor/github.com/go-sql-driver/mysql/buffer.go
-
210vendor/github.com/go-sql-driver/mysql/connection.go
-
207vendor/github.com/go-sql-driver/mysql/connection_go18.go
-
15vendor/github.com/go-sql-driver/mysql/driver.go
-
2vendor/github.com/go-sql-driver/mysql/dsn.go
-
60vendor/github.com/go-sql-driver/mysql/packets.go
-
31vendor/github.com/go-sql-driver/mysql/utils.go
-
40vendor/github.com/go-sql-driver/mysql/utils_go17.go
-
50vendor/github.com/go-sql-driver/mysql/utils_go18.go
-
1vendor/github.com/go-xorm/builder/go.mod
-
15vendor/github.com/go-xorm/core/circle.yml
-
401vendor/github.com/go-xorm/core/db.go
-
1vendor/github.com/go-xorm/core/go.mod
-
4vendor/github.com/go-xorm/xorm/.drone.yml
-
14vendor/github.com/go-xorm/xorm/README.md
-
10vendor/github.com/go-xorm/xorm/README_CN.md
-
2vendor/github.com/go-xorm/xorm/cache_lru.go
-
2vendor/github.com/go-xorm/xorm/cache_memory_store.go
-
41vendor/github.com/go-xorm/xorm/circle.yml
-
26vendor/github.com/go-xorm/xorm/dialect_mssql.go
-
5vendor/github.com/go-xorm/xorm/dialect_mysql.go
-
2vendor/github.com/go-xorm/xorm/dialect_oracle.go
-
18vendor/github.com/go-xorm/xorm/dialect_postgres.go
-
2vendor/github.com/go-xorm/xorm/dialect_sqlite3.go
-
24vendor/github.com/go-xorm/xorm/engine.go
-
13vendor/github.com/go-xorm/xorm/engine_cond.go
-
28vendor/github.com/go-xorm/xorm/engine_context.go
-
17vendor/github.com/go-xorm/xorm/engine_group.go
-
4vendor/github.com/go-xorm/xorm/engine_table.go
-
2vendor/github.com/go-xorm/xorm/error.go
-
22vendor/github.com/go-xorm/xorm/go.mod
-
50vendor/github.com/go-xorm/xorm/go.sum
-
2vendor/github.com/go-xorm/xorm/helpers.go
-
12vendor/github.com/go-xorm/xorm/interface.go
-
31vendor/github.com/go-xorm/xorm/json.go
-
2vendor/github.com/go-xorm/xorm/logger.go
-
37vendor/github.com/go-xorm/xorm/rows.go
-
36vendor/github.com/go-xorm/xorm/session.go
-
2vendor/github.com/go-xorm/xorm/session_cols.go
-
2vendor/github.com/go-xorm/xorm/session_cond.go
-
13vendor/github.com/go-xorm/xorm/session_context.go
-
23vendor/github.com/go-xorm/xorm/session_convert.go
-
6vendor/github.com/go-xorm/xorm/session_delete.go
-
18vendor/github.com/go-xorm/xorm/session_exist.go
-
8vendor/github.com/go-xorm/xorm/session_find.go
-
6vendor/github.com/go-xorm/xorm/session_get.go
-
175vendor/github.com/go-xorm/xorm/session_insert.go
-
4vendor/github.com/go-xorm/xorm/session_iterate.go
-
26vendor/github.com/go-xorm/xorm/session_query.go
-
34vendor/github.com/go-xorm/xorm/session_raw.go
-
4vendor/github.com/go-xorm/xorm/session_schema.go
-
2vendor/github.com/go-xorm/xorm/session_tx.go
-
54vendor/github.com/go-xorm/xorm/session_update.go
-
48vendor/github.com/go-xorm/xorm/statement.go
-
2vendor/github.com/go-xorm/xorm/syslogger.go
-
2vendor/github.com/go-xorm/xorm/tag.go
-
2vendor/github.com/go-xorm/xorm/test_mssql.sh
-
1vendor/github.com/go-xorm/xorm/test_tidb.sh
-
6vendor/github.com/go-xorm/xorm/types.go
-
20vendor/github.com/go-xorm/xorm/xorm.go
-
17vendor/google.golang.org/appengine/internal/api.go
-
682vendor/google.golang.org/appengine/internal/api_pre17.go
-
47vendor/google.golang.org/appengine/internal/identity.go
-
4vendor/google.golang.org/appengine/internal/identity_classic.go
-
11vendor/google.golang.org/appengine/internal/identity_flex.go
-
1vendor/google.golang.org/appengine/internal/main.go
-
7vendor/google.golang.org/appengine/internal/main_common.go
@ -0,0 +1,207 @@ |
|||
// Go MySQL Driver - A MySQL-Driver for Go's database/sql package
|
|||
//
|
|||
// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved.
|
|||
//
|
|||
// This Source Code Form is subject to the terms of the Mozilla Public
|
|||
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|||
// You can obtain one at http://mozilla.org/MPL/2.0/.
|
|||
|
|||
// +build go1.8
|
|||
|
|||
package mysql |
|||
|
|||
import ( |
|||
"context" |
|||
"database/sql" |
|||
"database/sql/driver" |
|||
) |
|||
|
|||
// Ping implements driver.Pinger interface
|
|||
func (mc *mysqlConn) Ping(ctx context.Context) (err error) { |
|||
if mc.closed.IsSet() { |
|||
errLog.Print(ErrInvalidConn) |
|||
return driver.ErrBadConn |
|||
} |
|||
|
|||
if err = mc.watchCancel(ctx); err != nil { |
|||
return |
|||
} |
|||
defer mc.finish() |
|||
|
|||
if err = mc.writeCommandPacket(comPing); err != nil { |
|||
return |
|||
} |
|||
|
|||
return mc.readResultOK() |
|||
} |
|||
|
|||
// BeginTx implements driver.ConnBeginTx interface
|
|||
func (mc *mysqlConn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, error) { |
|||
if err := mc.watchCancel(ctx); err != nil { |
|||
return nil, err |
|||
} |
|||
defer mc.finish() |
|||
|
|||
if sql.IsolationLevel(opts.Isolation) != sql.LevelDefault { |
|||
level, err := mapIsolationLevel(opts.Isolation) |
|||
if err != nil { |
|||
return nil, err |
|||
} |
|||
err = mc.exec("SET TRANSACTION ISOLATION LEVEL " + level) |
|||
if err != nil { |
|||
return nil, err |
|||
} |
|||
} |
|||
|
|||
return mc.begin(opts.ReadOnly) |
|||
} |
|||
|
|||
func (mc *mysqlConn) QueryContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Rows, error) { |
|||
dargs, err := namedValueToValue(args) |
|||
if err != nil { |
|||
return nil, err |
|||
} |
|||
|
|||
if err := mc.watchCancel(ctx); err != nil { |
|||
return nil, err |
|||
} |
|||
|
|||
rows, err := mc.query(query, dargs) |
|||
if err != nil { |
|||
mc.finish() |
|||
return nil, err |
|||
} |
|||
rows.finish = mc.finish |
|||
return rows, err |
|||
} |
|||
|
|||
func (mc *mysqlConn) ExecContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Result, error) { |
|||
dargs, err := namedValueToValue(args) |
|||
if err != nil { |
|||
return nil, err |
|||
} |
|||
|
|||
if err := mc.watchCancel(ctx); err != nil { |
|||
return nil, err |
|||
} |
|||
defer mc.finish() |
|||
|
|||
return mc.Exec(query, dargs) |
|||
} |
|||
|
|||
func (mc *mysqlConn) PrepareContext(ctx context.Context, query string) (driver.Stmt, error) { |
|||
if err := mc.watchCancel(ctx); err != nil { |
|||
return nil, err |
|||
} |
|||
|
|||
stmt, err := mc.Prepare(query) |
|||
mc.finish() |
|||
if err != nil { |
|||
return nil, err |
|||
} |
|||
|
|||
select { |
|||
default: |
|||
case <-ctx.Done(): |
|||
stmt.Close() |
|||
return nil, ctx.Err() |
|||
} |
|||
return stmt, nil |
|||
} |
|||
|
|||
func (stmt *mysqlStmt) QueryContext(ctx context.Context, args []driver.NamedValue) (driver.Rows, error) { |
|||
dargs, err := namedValueToValue(args) |
|||
if err != nil { |
|||
return nil, err |
|||
} |
|||
|
|||
if err := stmt.mc.watchCancel(ctx); err != nil { |
|||
return nil, err |
|||
} |
|||
|
|||
rows, err := stmt.query(dargs) |
|||
if err != nil { |
|||
stmt.mc.finish() |
|||
return nil, err |
|||
} |
|||
rows.finish = stmt.mc.finish |
|||
return rows, err |
|||
} |
|||
|
|||
func (stmt *mysqlStmt) ExecContext(ctx context.Context, args []driver.NamedValue) (driver.Result, error) { |
|||
dargs, err := namedValueToValue(args) |
|||
if err != nil { |
|||
return nil, err |
|||
} |
|||
|
|||
if err := stmt.mc.watchCancel(ctx); err != nil { |
|||
return nil, err |
|||
} |
|||
defer stmt.mc.finish() |
|||
|
|||
return stmt.Exec(dargs) |
|||
} |
|||
|
|||
func (mc *mysqlConn) watchCancel(ctx context.Context) error { |
|||
if mc.watching { |
|||
// Reach here if canceled,
|
|||
// so the connection is already invalid
|
|||
mc.cleanup() |
|||
return nil |
|||
} |
|||
// When ctx is already cancelled, don't watch it.
|
|||
if err := ctx.Err(); err != nil { |
|||
return err |
|||
} |
|||
// When ctx is not cancellable, don't watch it.
|
|||
if ctx.Done() == nil { |
|||
return nil |
|||
} |
|||
// When watcher is not alive, can't watch it.
|
|||
if mc.watcher == nil { |
|||
return nil |
|||
} |
|||
|
|||
mc.watching = true |
|||
mc.watcher <- ctx |
|||
return nil |
|||
} |
|||
|
|||
func (mc *mysqlConn) startWatcher() { |
|||
watcher := make(chan mysqlContext, 1) |
|||
mc.watcher = watcher |
|||
finished := make(chan struct{}) |
|||
mc.finished = finished |
|||
go func() { |
|||
for { |
|||
var ctx mysqlContext |
|||
select { |
|||
case ctx = <-watcher: |
|||
case <-mc.closech: |
|||
return |
|||
} |
|||
|
|||
select { |
|||
case <-ctx.Done(): |
|||
mc.cancel(ctx.Err()) |
|||
case <-finished: |
|||
case <-mc.closech: |
|||
return |
|||
} |
|||
} |
|||
}() |
|||
} |
|||
|
|||
func (mc *mysqlConn) CheckNamedValue(nv *driver.NamedValue) (err error) { |
|||
nv.Value, err = converter{}.ConvertValue(nv.Value) |
|||
return |
|||
} |
|||
|
|||
// ResetSession implements driver.SessionResetter.
|
|||
// (From Go 1.10)
|
|||
func (mc *mysqlConn) ResetSession(ctx context.Context) error { |
|||
if mc.closed.IsSet() { |
|||
return driver.ErrBadConn |
|||
} |
|||
return nil |
|||
} |