exe.cpp (Firebird-3.0.2.32703-0.tar.bz2) | : | exe.cpp (Firebird-3.0.4.33054-0.tar.bz2) | ||
---|---|---|---|---|
skipping to change at line 372 | skipping to change at line 372 | |||
default: | default: | |||
fb_assert(false); | fb_assert(false); | |||
} | } | |||
} | } | |||
if (DTYPE_IS_BLOB_OR_QUAD(from_desc->dsc_dtype) || DTYPE_IS_BLOB_ OR_QUAD(to_desc->dsc_dtype)) | if (DTYPE_IS_BLOB_OR_QUAD(from_desc->dsc_dtype) || DTYPE_IS_BLOB_ OR_QUAD(to_desc->dsc_dtype)) | |||
{ | { | |||
// ASF: Don't let MOV_move call blb::move because MOV | // ASF: Don't let MOV_move call blb::move because MOV | |||
// will not pass the destination field to blb::_move. | // will not pass the destination field to blb::_move. | |||
blb::move(tdbb, from_desc, to_desc, to); | ||||
record_param* rpb = NULL; | ||||
USHORT fieldId = 0; | ||||
if (to) | ||||
{ | ||||
const FieldNode* toField = ExprNode::as<FieldNode | ||||
>(to); | ||||
if (toField) | ||||
{ | ||||
fieldId = toField->fieldId; | ||||
rpb = &request->req_rpb[toField->fieldStr | ||||
eam]; | ||||
} | ||||
else if (!(ExprNode::is<ParameterNode>(to) || Exp | ||||
rNode::is<VariableNode>(to))) | ||||
BUGCHECK(199); // msg 199 expected field | ||||
node | ||||
} | ||||
blb::move(tdbb, from_desc, to_desc, rpb, fieldId); | ||||
} | } | |||
else if (!DSC_EQUIV(from_desc, to_desc, false)) | else if (!DSC_EQUIV(from_desc, to_desc, false)) | |||
{ | { | |||
MOV_move(tdbb, from_desc, to_desc); | MOV_move(tdbb, from_desc, to_desc); | |||
} | } | |||
else if (from_desc->dsc_dtype == dtype_short) | else if (from_desc->dsc_dtype == dtype_short) | |||
{ | { | |||
*((SSHORT*) to_desc->dsc_address) = *((SSHORT*) from_desc ->dsc_address); | *((SSHORT*) to_desc->dsc_address) = *((SSHORT*) from_desc ->dsc_address); | |||
} | } | |||
else if (from_desc->dsc_dtype == dtype_long) | else if (from_desc->dsc_dtype == dtype_long) | |||
skipping to change at line 664 | skipping to change at line 679 | |||
{ | { | |||
BlobIndex* current = &transaction->tra_bl obs->current(); | BlobIndex* current = &transaction->tra_bl obs->current(); | |||
if (current->bli_request && | if (current->bli_request && | |||
current->bli_request->req_blobs.l ocate(id->bid_temp_id())) | current->bli_request->req_blobs.l ocate(id->bid_temp_id())) | |||
{ | { | |||
current->bli_request->req_blobs.f astRemove(); | current->bli_request->req_blobs.f astRemove(); | |||
current->bli_request = NULL; | current->bli_request = NULL; | |||
} | } | |||
} | } | |||
else | ||||
{ | ||||
transaction->checkBlob(tdbb, id, false); | ||||
} | ||||
} | } | |||
} | } | |||
} | } | |||
execute_looper(tdbb, request, transaction, request->req_next, jrd_req::re q_proceed); | execute_looper(tdbb, request, transaction, request->req_next, jrd_req::re q_proceed); | |||
} //try | } //try | |||
catch (const Firebird::Exception&) | catch (const Firebird::Exception&) | |||
{ | { | |||
if (request->req_flags & req_proc_fetch) | if (request->req_flags & req_proc_fetch) | |||
skipping to change at line 873 | skipping to change at line 892 | |||
* | * | |||
**************************************/ | **************************************/ | |||
DEV_BLKCHK(request, type_req); | DEV_BLKCHK(request, type_req); | |||
SET_TDBB(tdbb); | SET_TDBB(tdbb); | |||
if (request->req_flags & req_active) | if (request->req_flags & req_active) | |||
{ | { | |||
const JrdStatement* statement = request->getStatement(); | const JrdStatement* statement = request->getStatement(); | |||
if (statement->fors.getCount() || request->req_ext_stmt) | if (statement->fors.getCount() || request->req_ext_resultset || r equest->req_ext_stmt) | |||
{ | { | |||
Jrd::ContextPoolHolder context(tdbb, request->req_pool); | Jrd::ContextPoolHolder context(tdbb, request->req_pool); | |||
jrd_req* old_request = tdbb->getRequest(); | jrd_req* old_request = tdbb->getRequest(); | |||
jrd_tra* old_transaction = tdbb->getTransaction(); | jrd_tra* old_transaction = tdbb->getTransaction(); | |||
try { | try { | |||
tdbb->setRequest(request); | tdbb->setRequest(request); | |||
tdbb->setTransaction(request->req_transaction); | tdbb->setTransaction(request->req_transaction); | |||
for (const RecordSource* const* ptr = statement-> fors.begin(); | for (const RecordSource* const* ptr = statement-> fors.begin(); | |||
ptr != statement->fors.end(); ++ptr) | ptr != statement->fors.end(); ++ptr) | |||
{ | { | |||
(*ptr)->close(tdbb); | (*ptr)->close(tdbb); | |||
} | } | |||
if (request->req_ext_resultset) | if (request->req_ext_resultset) | |||
{ | ||||
delete request->req_ext_resultset; | delete request->req_ext_resultset; | |||
request->req_ext_resultset = NULL; | ||||
} | ||||
while (request->req_ext_stmt) | while (request->req_ext_stmt) | |||
request->req_ext_stmt->close(tdbb); | request->req_ext_stmt->close(tdbb); | |||
} | } | |||
catch (const Firebird::Exception&) | catch (const Firebird::Exception&) | |||
{ | { | |||
tdbb->setRequest(old_request); | tdbb->setRequest(old_request); | |||
tdbb->setTransaction(old_transaction); | tdbb->setTransaction(old_transaction); | |||
throw; | throw; | |||
} | } | |||
End of changes. 5 change blocks. | ||||
2 lines changed or deleted | 28 lines changed or added |