feat: SELECT non-deterministic transaction-time rewrites - #1713
Merged
Merged
Conversation
Codecov Report❌ Patch coverage is 📢 Thoughts on this report? Let us know! |
levkk
reviewed
Oct 1, 2026
| if nd_function_rewrite { | ||
| match stmt.stmt_mut() { | ||
| NodeMut::InsertStmt(_) => { | ||
| // TODO: we could also support UPDATE / etc |
Collaborator
There was a problem hiding this comment.
nit: UPDATE would be good - similar mechanics to SELECT: find and replace calls to now() and current_timestamp(). Totally fine to do as a follow up.
github-merge-queue Bot
pushed a commit
that referenced
this pull request
Oct 2, 2026
Follow-up to #1713 to also handle re-writing UPDATE statements when a date-time function based on the transaction start time is present. Re-uses the same transform code as SELECT.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
#1541 + #1568 introduced support to re-write date-time functions, which are inconsistent when executed multiple times. This included maintaining a consistent now() start time in a transaction for INSERT statements.
This extends on that support by now also re-writing SELECT statements that include these transaction start-time based functions.
This includes handling an interesting case, where if a
SELECT now()query is sent, and we re-write it before sending to Postgres, the client still must receive the response under the correct column name (in that case, the column name would benow). To handle that, this checks if there's aResTargetnode that has no name withFuncCallinner-value (that's transaction time based). If there is, it sets theResTargetname to the column name that would've been returned as part of the re-write.This also includes some light refactoring to split transaction-time SELECT re-writes vs. INSERT re-writes into two files.
This does not address coverage for UPDATE / DELETE / etc.
Fixes #1624.