Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

## [Unreleased]

### Security

- **DDL now updates encryption metadata transactionally**: Proxy applies schema changes only after PostgreSQL confirms execution, keeps successful changes connection-local until commit, and atomically publishes schema and EQL domain metadata before reporting idle readiness. Extended-protocol DDL, explicit transactions, savepoints, rollbacks, one-`Sync` pipelining, and already-open connections now observe the correct schema generation. Unmodelled DDL, simple-query batches whose DDL may change encryption metadata before a dependent statement, and failed catalog publication fail closed instead of risking plaintext writes through stale metadata; encryption-neutral DDL and native temporary-table batches remain compatible.

## [3.0.1] - 2026-08-05

### Added
Expand Down
89 changes: 87 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

32 changes: 32 additions & 0 deletions docs/errors.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
- [Invalid SQL statement](#mapping-invalid-sql-statement)
- [Unsupported parameter type](#mapping-unsupported-parameter-type)
- [Statement could not be type checked](#mapping-statement-could-not-be-type-checked)
- [Dependent statement after DDL](#mapping-dependent-statement-after-ddl)
- [Unmodelled DDL](#mapping-unmodelled-ddl)
- [Unmappable encrypted column](#mapping-unmappable-encrypted-column)
- [Internal Error](#mapping-internal-error)

Expand Down Expand Up @@ -249,6 +251,36 @@ If the error persists, please contact CipherStash [support](https://cipherstash.



<!-- ---------------------------------------------------------------------------------------------------- -->


## Dependent statement after DDL <a id='mapping-dependent-statement-after-ddl'></a>

A simple-query batch contains a schema-dependent statement after DDL. Proxy cannot observe the
DDL execution result between statements in one simple-query message, so it refuses the complete
batch before PostgreSQL executes any part of it.

### How to fix

Send the DDL and the dependent statement as separate queries. Extended-protocol clients may
pipeline them; Proxy defers dependent mapping until PostgreSQL reports the DDL outcome.


<!-- ---------------------------------------------------------------------------------------------------- -->


## Unmodelled DDL <a id='mapping-unmodelled-ddl'></a>

PostgreSQL successfully executed a schema change whose connection-local effect Proxy cannot model
safely, such as conditional or cascading DDL. Schema-dependent statements are refused for the
rest of that transaction.

### How to fix

Roll back the transaction, or commit it and wait for Proxy to publish an authoritative catalog
snapshot before issuing schema-dependent statements.


<!-- ---------------------------------------------------------------------------------------------------- -->


Expand Down
1 change: 1 addition & 0 deletions packages/cipherstash-proxy-integration/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ mod multitenant;
mod ore_order_helpers;
mod passthrough;
mod pipeline;
/// Database-backed transaction-aware schema middleware regressions.
mod schema_change;
mod select;
mod set_keyset_error;
Expand Down
Loading
Loading