代码拉取完成,页面将自动刷新
同步操作将从 unsafe-rust/sq 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
package sq
import (
"fmt"
"log"
"os"
"regexp"
"strings"
"time"
)
const (
fmtLogQuery = `Sql: %s`
fmtLogArgs = `Args: %#v`
fmtLogError = `Error: %v`
fmtLogTimeTaken = `Time: %0.5fs`
)
var (
reInvisibleChars = regexp.MustCompile(`[\s\r\n\t]+`)
)
// QueryStatus 表示查询执行后的状态。
type QueryStatus struct {
Sql string
Args interface{}
Start time.Time
End time.Time
Err error
}
// String 返回格式化的日志消息。
func (q *QueryStatus) String() string {
lines := make([]string, 0, 8)
if query := q.Sql; query != "" {
query = reInvisibleChars.ReplaceAllString(query, ` `)
query = strings.TrimSpace(query)
lines = append(lines, fmt.Sprintf(fmtLogQuery, query))
}
if args, ok := q.Args.([]interface{}); ok && len(args) == 0 {
q.Args = nil
}
if q.Args != nil {
lines = append(lines, fmt.Sprintf(fmtLogArgs, q.Args))
}
if q.Err != nil {
lines = append(lines, fmt.Sprintf(fmtLogError, q.Err))
}
lines = append(lines, fmt.Sprintf(fmtLogTimeTaken, float64(q.End.UnixNano()-q.Start.UnixNano())/float64(1e9)))
return strings.Join(lines, "\n")
}
// ILogger 表示一个日志收集器.
// 您可以将日志收集器传递给 sq.SetLogger(myCollector),以使其在执行查询后收集QueryStatus消息。
type ILogger interface {
Printf(format string, v ...interface{})
}
type defaultLogger struct {
logging bool
log ILogger
}
func (d *defaultLogger) Log(m *QueryStatus, show bool) {
if d.logging || show {
d.log.Printf("\n\t%s\n\n", strings.Replace(m.String(), "\n", "\n\t", -1))
}
}
func (d *defaultLogger) SetLogging(logging bool) {
d.logging = logging
}
var logger = &defaultLogger{log: log.New(os.Stderr, "", log.LstdFlags)}
// SetLogger 设置日志器。
func SetLogger(l ILogger) {
logger.log = l
}
// SetLogging 是否打印日志,<print>为true,则打印日志。
func SetLogging(print bool) {
logger.logging = print
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。