mirror of
https://github.com/Li4n0/revsuit.git
synced 2026-09-21 22:30:46 +08:00
75 lines
1.9 KiB
Go
75 lines
1.9 KiB
Go
/*
|
|
Copyright 2017 Google Inc.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
package vmysql
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
|
|
"vitess.io/vitess/go/vt/sqlparser"
|
|
)
|
|
|
|
// SQLError is the error structure returned from calling a db library function
|
|
type SQLError struct {
|
|
Num int
|
|
State string
|
|
Message string
|
|
Query string
|
|
}
|
|
|
|
// NewSQLError creates a new SQLError.
|
|
// If sqlState is left empty, it will default to "HY000" (general error).
|
|
// TODO: Should be aligned with vterrors, stack traces and wrapping
|
|
func NewSQLError(number int, sqlState string, format string, args ...interface{}) *SQLError {
|
|
if sqlState == "" {
|
|
sqlState = SSUnknownSQLState
|
|
}
|
|
return &SQLError{
|
|
Num: number,
|
|
State: sqlState,
|
|
Message: fmt.Sprintf(format, args...),
|
|
}
|
|
}
|
|
|
|
// Error implements the error interface
|
|
func (se *SQLError) Error() string {
|
|
buf := &bytes.Buffer{}
|
|
buf.WriteString(se.Message)
|
|
|
|
// Add MySQL errno and SQLSTATE in a format that we can later parse.
|
|
// There's no avoiding string parsing because all errors
|
|
// are converted to strings anyway at RPC boundaries.
|
|
// See NewSQLErrorFromError.
|
|
fmt.Fprintf(buf, " (errno %v) (sqlstate %v)", se.Num, se.State)
|
|
|
|
if se.Query != "" {
|
|
fmt.Fprintf(buf, " during query: %s", sqlparser.TruncateForLog(se.Query))
|
|
}
|
|
|
|
return buf.String()
|
|
}
|
|
|
|
// Number returns the internal MySQL error code.
|
|
func (se *SQLError) Number() int {
|
|
return se.Num
|
|
}
|
|
|
|
// SQLState returns the SQLSTATE value.
|
|
func (se *SQLError) SQLState() string {
|
|
return se.State
|
|
}
|