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.
This PR attempts to improve ExecuteInTx in following ways:
Previously it required call-site to provide
Tx
, but imposed restriction that caller must open, but don't useTx
prior to calling ExecuteInTx. This change now enforces this contract by creatingTx
internally, caller provides*sql.DB
instead.ExecuteInTx was optimized for CockroachDB. Every transaction in addition to standard
BEGIN
/COMMIT
hadSAVEPOINT
andRELEASE SAVEPOINT
commands as the very first and very last commands in transaction. These are unnecessary in PG and add 2 additional round-trips to the database. For small and quick inserts additional round-trips are comparable to the query itself. There is now separate version ofExecuteInTx
for Cockroach and regular PosgreSQL. CockroachDB version is enabled at connection time based on result fromversion()
SQL function.ExecuteInTx used to ignore
COMMIT
operation result. It wasn't a problem with CockroachDB, because commit actually happened onRELEASE SAVEPOINT
andCOMMIT
couldn't fail. On PostgreSQLCOMMIT
can fail and ignoring possible errors is undesirable.