|
@@ -410,9 +410,15 @@ func (c *Connection) handleQuery(msg *Message) error {
|
|
|
code := ErrCodeInternalError
|
|
code := ErrCodeInternalError
|
|
|
message := fmt.Sprintf("Execution error: %v", err)
|
|
message := fmt.Sprintf("Execution error: %v", err)
|
|
|
var uniqueErr *storage.UniqueViolationError
|
|
var uniqueErr *storage.UniqueViolationError
|
|
|
|
|
+ var notNullErr *storage.NotNullViolationError
|
|
|
if errors.Is(err, storage.ErrSerialization) {
|
|
if errors.Is(err, storage.ErrSerialization) {
|
|
|
code = ErrCodeSerializationFailure
|
|
code = ErrCodeSerializationFailure
|
|
|
c.txStatus = TxStatusIdle
|
|
c.txStatus = TxStatusIdle
|
|
|
|
|
+ } else if errors.As(err, ¬NullErr) {
|
|
|
|
|
+ code = "23502"
|
|
|
|
|
+ if c.txStatus == TxStatusInBlock {
|
|
|
|
|
+ c.txStatus = TxStatusFailed
|
|
|
|
|
+ }
|
|
|
} else if errors.As(err, &uniqueErr) {
|
|
} else if errors.As(err, &uniqueErr) {
|
|
|
code = ErrCodeUniqueViolation
|
|
code = ErrCodeUniqueViolation
|
|
|
message = fmt.Sprintf("Execution error: UNIQUE constraint failed: %s", uniqueErr.Constraint)
|
|
message = fmt.Sprintf("Execution error: UNIQUE constraint failed: %s", uniqueErr.Constraint)
|
|
@@ -610,9 +616,15 @@ func (c *Connection) handleExecute(msg *Message) error {
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
code := ErrCodeInternalError
|
|
code := ErrCodeInternalError
|
|
|
var uniqueErr *storage.UniqueViolationError
|
|
var uniqueErr *storage.UniqueViolationError
|
|
|
|
|
+ var notNullErr *storage.NotNullViolationError
|
|
|
if errors.Is(err, storage.ErrSerialization) {
|
|
if errors.Is(err, storage.ErrSerialization) {
|
|
|
code = ErrCodeSerializationFailure
|
|
code = ErrCodeSerializationFailure
|
|
|
c.txStatus = TxStatusIdle
|
|
c.txStatus = TxStatusIdle
|
|
|
|
|
+ } else if errors.As(err, ¬NullErr) {
|
|
|
|
|
+ code = "23502"
|
|
|
|
|
+ if c.txStatus == TxStatusInBlock {
|
|
|
|
|
+ c.txStatus = TxStatusFailed
|
|
|
|
|
+ }
|
|
|
} else if errors.As(err, &uniqueErr) {
|
|
} else if errors.As(err, &uniqueErr) {
|
|
|
code = ErrCodeUniqueViolation
|
|
code = ErrCodeUniqueViolation
|
|
|
if _, commit := stmt.(*parser.CommitStmt); commit {
|
|
if _, commit := stmt.(*parser.CommitStmt); commit {
|