MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / EXE_unwind

Function EXE_unwind

src/jrd/exe.cpp:916–1001  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

914
915
916void EXE_unwind(thread_db* tdbb, Request* request)
917{
918/**************************************
919 *
920 * E X E _ u n w i n d
921 *
922 **************************************
923 *
924 * Functional description
925 * Unwind a request, maybe active, maybe not.
926 *
927 **************************************/
928 DEV_BLKCHK(request, type_req);
929
930 SET_TDBB(tdbb);
931
932 if (request->req_flags & req_active)
933 {
934 const Statement* statement = request->getStatement();
935
936 if (statement->fors.hasData() || request->req_ext_resultset || request->req_ext_stmt)
937 {
938 Jrd::ContextPoolHolder context(tdbb, request->req_pool);
939 Request* old_request = tdbb->getRequest();
940 jrd_tra* old_transaction = tdbb->getTransaction();
941
942 try
943 {
944 tdbb->setRequest(request);
945 tdbb->setTransaction(request->req_transaction);
946
947 for (const auto select : statement->fors)
948 select->close(tdbb);
949
950 if (request->req_ext_resultset)
951 {
952 delete request->req_ext_resultset;
953 request->req_ext_resultset = nullptr;
954 }
955
956 while (request->req_ext_stmt)
957 request->req_ext_stmt->close(tdbb);
958 }
959 catch (const Exception&)
960 {
961 tdbb->setRequest(old_request);
962 tdbb->setTransaction(old_transaction);
963 throw;
964 }
965
966 tdbb->setRequest(old_request);
967 tdbb->setTransaction(old_transaction);
968 }
969
970 for (auto localTable : statement->localTables)
971 {
972 if (!localTable)
973 continue;

Callers 14

executeMethod · 0.85
executeMethod · 0.85
executeProcedureMethod · 0.85
releaseMethod · 0.85
JRD_startFunction · 0.85
JRD_start_and_sendFunction · 0.85
JRD_unwind_requestFunction · 0.85
EXE_releaseFunction · 0.85
EXE_execute_triggersFunction · 0.85
destroyMethod · 0.85
restart_requestsFunction · 0.85
~IndexConditionMethod · 0.85

Calls 15

SET_TDBBFunction · 0.85
release_blobsFunction · 0.85
TRA_detach_requestFunction · 0.85
setRequestMethod · 0.80
isProfilerActiveMethod · 0.80
hasInternalStatementMethod · 0.80
getProfilerManagerMethod · 0.80
unlinkAllMethod · 0.80
invalidateTimeStampMethod · 0.80
getStatementMethod · 0.45
hasDataMethod · 0.45

Tested by

no test coverage detected