Improvements based on review

This commit is contained in:
Raúl Marín 2022-06-24 16:54:47 +02:00
parent 7f7d082fb3
commit 072f64c800

View File

@ -626,8 +626,10 @@ static std::tuple<ASTPtr, BlockIO> executeQueryImpl(
if (!table_id.empty()) if (!table_id.empty())
context->setInsertionTable(table_id); context->setInsertionTable(table_id);
if (context->getCurrentTransaction() && context->getSettingsRef().throw_on_unsupported_query_inside_transaction) if (context->getCurrentTransaction() && settings.throw_on_unsupported_query_inside_transaction)
throw Exception(ErrorCodes::NOT_IMPLEMENTED, "Async inserts inside transactions are not supported"); throw Exception(ErrorCodes::NOT_IMPLEMENTED, "Async inserts inside transactions are not supported");
if (settings.implicit_transaction && settings.throw_on_unsupported_query_inside_transaction)
throw Exception(ErrorCodes::NOT_IMPLEMENTED, "Async inserts with 'implicit_transaction' are not supported");
} }
else else
{ {
@ -636,6 +638,9 @@ static std::tuple<ASTPtr, BlockIO> executeQueryImpl(
{ {
try try
{ {
if (context->isGlobalContext())
throw Exception(ErrorCodes::LOGICAL_ERROR, "Global context cannot create transactions");
/// If there is no session (which is the default for the HTTP Handler), set up one just for this as it is necessary /// If there is no session (which is the default for the HTTP Handler), set up one just for this as it is necessary
/// to control the transaction lifetime /// to control the transaction lifetime
if (!context->hasSessionContext()) if (!context->hasSessionContext())
@ -972,8 +977,18 @@ static std::tuple<ASTPtr, BlockIO> executeQueryImpl(
if (implicit_txn_control) if (implicit_txn_control)
{ {
implicit_txn_control->executeCommit(context->getSessionContext()); try
implicit_txn_control.reset(); {
implicit_txn_control->executeCommit(context->getSessionContext());
implicit_txn_control.reset();
}
catch (const Exception &)
{
/// An exception might happen when trying to commit the transaction. For example we might get an immediate exception
/// because ZK is down and wait_changes_become_visible_after_commit_mode == WAIT_UNKNOWN
implicit_txn_control.reset();
throw;
}
} }
}; };