Skip to content

Commit

Permalink
error: add SQLState
Browse files Browse the repository at this point in the history
SQLState is also implemented in pgx.
This change allow to get the SQL state without importing lib/pq, see
for example here

https://github.com/cockroachdb/cockroach-go/blob/e1659d1d3580897bce4cea1181724872d792ce53/crdb/tx.go#L232
  • Loading branch information
drakkan committed May 6, 2022
1 parent 006a3f4 commit ef3111e
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 0 deletions.
5 changes: 5 additions & 0 deletions error.go
Original file line number Diff line number Diff line change
Expand Up @@ -402,6 +402,11 @@ func (err *Error) Fatal() bool {
return err.Severity == Efatal
}

// SQLState returns the SQLState of the error.
func (err *Error) SQLState() string {
return string(err.Code)
}

// Get implements the legacy PGError interface. New code should use the fields
// of the Error struct directly.
func (err *Error) Get(k byte) (v string) {
Expand Down
16 changes: 16 additions & 0 deletions go18_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -334,3 +334,19 @@ func TestTxOptions(t *testing.T) {
t.Errorf("Expected error to mention isolation level, got %q", err)
}
}

func TestErrorSQLState(t *testing.T) {
r := readBuf([]byte{67, 52, 48, 48, 48, 49, 0, 0}) // 40001
err := parseError(&r)
var sqlErr errWithSQLState
if !errors.As(err, &sqlErr) {
t.Fatal("SQLState interface not satisfied")
}
if state := err.SQLState(); state != "40001" {
t.Fatalf("unexpected SQL state %v", state)
}
}

type errWithSQLState interface {
SQLState() string
}

0 comments on commit ef3111e

Please sign in to comment.