Skip to content

features/sql: report integrity constraint violations as their own exception - #600

Open
cportele wants to merge 1 commit into
masterfrom
constraint-violation-exception
Open

features/sql: report integrity constraint violations as their own exception#600
cportele wants to merge 1 commit into
masterfrom
constraint-violation-exception

Conversation

@cportele

Copy link
Copy Markdown
Contributor

A mutation statement rejected by the database in SQLSTATE class 23 — a CHECK or foreign-key constraint, a unique index, or a trigger raising one — is caused by the data the client sent, not by a bug or an infrastructure problem. Every SQLException was wrapped in an IllegalStateException, so callers could not tell the two apart, report the rejection as a client error, or log it without a stack trace.

  • new FeatureMutationConstraintException, carrying the SQLSTATE
  • JdbcSqlSession.mutationFailed() picks the exception type from the SQLSTATE and replaces the four wrap sites; anything else stays an IllegalStateException and keeps its stack trace
  • the SQLSTATE is found by iterating the SQLException itself, which walks the next-exception chain as well as the causal one: executeBatch() reports a BatchUpdateException whose actual error is a next-exception, not a cause

…eption

A mutation statement rejected by the database in SQLSTATE class 23 — a CHECK or
foreign-key constraint, a unique index, or a trigger raising one — is caused by
the data the client sent, not by a bug or an infrastructure problem. Every
SQLException was wrapped in an IllegalStateException, so callers could not tell
the two apart, report the rejection as a client error, or log it without a
stack trace.

- new FeatureMutationConstraintException, carrying the SQLSTATE
- JdbcSqlSession.mutationFailed() picks the exception type from the SQLSTATE and
  replaces the four wrap sites; anything else stays an IllegalStateException and
  keeps its stack trace
- the SQLSTATE is found by iterating the SQLException itself, which walks the
  next-exception chain as well as the causal one: executeBatch() reports a
  BatchUpdateException whose actual error is a next-exception, not a cause
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant