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

Method release

src/jrd/Statement.cpp:647–723  ·  view source on GitHub ↗

Release a statement.

Source from the content-addressed store, hash-verified

645
646// Release a statement.
647void Statement::release(thread_db* tdbb)
648{
649 SET_TDBB(tdbb);
650
651 // Release sub statements.
652 for (Statement** subStatement = subStatements.begin();
653 subStatement != subStatements.end();
654 ++subStatement)
655 {
656 (*subStatement)->release(tdbb);
657 }
658
659 // Release existence locks on references.
660
661 for (Resource* resource = resources.begin(); resource != resources.end(); ++resource)
662 {
663 switch (resource->rsc_type)
664 {
665 case Resource::rsc_relation:
666 {
667 jrd_rel* relation = resource->rsc_rel;
668 MET_release_existence(tdbb, relation);
669 break;
670 }
671
672 case Resource::rsc_index:
673 {
674 jrd_rel* relation = resource->rsc_rel;
675 IndexLock* index = CMP_get_index_lock(tdbb, relation, resource->rsc_id);
676 if (index && index->idl_count)
677 {
678 --index->idl_count;
679 if (!index->idl_count)
680 LCK_release(tdbb, index->idl_lock);
681 }
682 break;
683 }
684
685 case Resource::rsc_procedure:
686 case Resource::rsc_function:
687 resource->rsc_routine->release(tdbb);
688 break;
689
690 case Resource::rsc_collation:
691 {
692 Collation* coll = resource->rsc_coll;
693 coll->decUseCount(tdbb);
694 break;
695 }
696
697 default:
698 BUGCHECK(220); // msg 220 release of unknown resource
699 break;
700 }
701 }
702
703 for (Request** instance = requests.begin(); instance != requests.end(); ++instance)
704 {

Callers 2

StatementMethod · 0.45
makeStatementMethod · 0.45

Calls 10

SET_TDBBFunction · 0.85
CMP_get_index_lockFunction · 0.85
LCK_releaseFunction · 0.85
EXE_releaseFunction · 0.85
decUseCountMethod · 0.80
beginMethod · 0.45
endMethod · 0.45
getAttachmentMethod · 0.45
findAndRemoveMethod · 0.45
deletePoolMethod · 0.45

Tested by

no test coverage detected