mirror of
https://github.com/hanzo-ds/go.git
synced 2026-10-30 19:45:01 +00:00
Feature-complete v2.44.0 (lib/churl, lib/col, BFloat16, QBit, scanTypeDuration, Options.Logger *slog.Logger) — fixes the [email protected].0 downgrade RED caught. Package datastore, module github.com/hanzo-ds/go, depends only on hanzo-ds/native. Wire strings preserved VERBATIM (X-ClickHouse-* headers, sql.Register("clickhouse"), clickhouse:// DSN, ClientName="clickhouse-go") — consistent with native.
65 lines
1.3 KiB
Go
65 lines
1.3 KiB
Go
package proto
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/hanzo-ds/native/proto"
|
|
)
|
|
|
|
type Exception struct {
|
|
Code int32
|
|
Name string
|
|
Message string
|
|
StackTrace string
|
|
Nested []Exception
|
|
nested bool
|
|
}
|
|
|
|
func (e *Exception) Error() string {
|
|
return fmt.Sprintf("code: %d, message: %s", e.Code, e.Message)
|
|
}
|
|
|
|
func (e *Exception) Decode(reader *proto.Reader) (err error) {
|
|
var exceptions []Exception
|
|
for {
|
|
var ex Exception
|
|
if err := ex.decode(reader); err != nil {
|
|
return err
|
|
}
|
|
if exceptions = append(exceptions, ex); !ex.nested {
|
|
break
|
|
}
|
|
}
|
|
if len(exceptions) != 0 {
|
|
e.Code = exceptions[0].Code
|
|
e.Name = exceptions[0].Name
|
|
e.Message = exceptions[0].Message
|
|
e.StackTrace = exceptions[0].StackTrace
|
|
if exceptions[0].nested {
|
|
e.Nested = exceptions[1:]
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (e *Exception) decode(reader *proto.Reader) (err error) {
|
|
if e.Code, err = reader.Int32(); err != nil {
|
|
return err
|
|
}
|
|
if e.Name, err = reader.Str(); err != nil {
|
|
return err
|
|
}
|
|
if e.Message, err = reader.Str(); err != nil {
|
|
return err
|
|
}
|
|
e.Message = strings.TrimSpace(strings.TrimPrefix(e.Message, e.Name+":"))
|
|
if e.StackTrace, err = reader.Str(); err != nil {
|
|
return err
|
|
}
|
|
if e.nested, err = reader.Bool(); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|