@@ -66,7 +66,7 @@ Statement::Statement(thread_db* tdbb, MemoryPool* p, CompilerScratch* csb)
6666 requests(*p),
6767 externalList(*p),
6868 accessList(*p),
69- resources(*p),
69+ resources(*p, false ),
7070 triggerName(*p),
7171 triggerInvoker(NULL ),
7272 parentStatement(NULL ),
@@ -89,71 +89,15 @@ Statement::Statement(thread_db* tdbb, MemoryPool* p, CompilerScratch* csb)
8989 accessList = csb->csb_access ;
9090 externalList = csb->csb_external ;
9191 mapFieldInfo.takeOwnership (csb->csb_map_field_info );
92+
93+ // Take out existence locks on resources used in statement.
9294 resources.transferResources (tdbb, csb->csb_resources );
9395 impureSize = csb->csb_impure ;
9496
9597 // if (csb->csb_g_flags & csb_blr_version4)
9698 // flags |= FLAG_VERSION4;
9799 blrVersion = csb->blrVersion ;
98100
99- // Take out existence locks on resources used in statement. This is
100- // a little complicated since relation locks MUST be taken before
101- // index locks.
102- /* to be moved to transferResources()
103- for (Resource* resource = resources.begin(); resource != resources.end(); ++resource)
104- {
105- switch (resource->rsc_type)
106- {
107- case Resource::rsc_relation:
108- {
109- jrd_rel* relation = resource->rsc_rel;
110- MetadataCache::post_existence(tdbb, relation);
111- break;
112- }
113-
114- case Resource::rsc_index:
115- {
116- jrd_rel* relation = resource->rsc_rel;
117- IndexLock* index = CMP_get_index_lock(tdbb, relation, resource->rsc_id);
118- if (index)
119- {
120- ++index->idl_count;
121- if (index->idl_count == 1) {
122- LCK_lock(tdbb, index->idl_lock, LCK_SR, LCK_WAIT);
123- }
124- }
125- break;
126- }
127-
128- case Resource::rsc_procedure:
129- case Resource::rsc_function:
130- {
131- Routine* routine = resource->rsc_routine;
132- routine->addRef();
133-
134- #ifdef DEBUG_PROCS
135- string buffer;
136- buffer.printf(
137- "Called from Statement::makeRequest:\n\t Incrementing use count of %s\n",
138- routine->getName()->toString().c_str());
139- JRD_print_procedure_info(tdbb, buffer.c_str());
140- #endif
141-
142- break;
143- }
144-
145- case Resource::rsc_collation:
146- {
147- Collation* coll = resource->rsc_coll;
148- coll->incUseCount(tdbb);
149- break;
150- }
151-
152- default:
153- BUGCHECK(219); // msg 219 request of unknown resource
154- }
155- }
156- */
157101 // make a vector of all used RSEs
158102 fors = csb->csb_fors ;
159103
@@ -610,50 +554,6 @@ void Statement::release(thread_db* tdbb)
610554
611555 resources.releaseResources (tdbb);
612556
613- /* move to releaseResources()
614- for (Resource* resource = resources.begin(); resource != resources.end(); ++resource)
615- {
616- switch (resource->rsc_type)
617- {
618- case Resource::rsc_relation:
619- {
620- jrd_rel* relation = resource->rsc_rel;
621- MET_release_existence(tdbb, relation);
622- break;
623- }
624-
625- case Resource::rsc_index:
626- {
627- jrd_rel* relation = resource->rsc_rel;
628- IndexLock* index = CMP_get_index_lock(tdbb, relation, resource->rsc_id);
629- if (index && index->idl_count)
630- {
631- --index->idl_count;
632- if (!index->idl_count)
633- LCK_release(tdbb, index->idl_lock);
634- }
635- break;
636- }
637-
638- case Resource::rsc_procedure:
639- case Resource::rsc_function:
640- resource->rsc_routine->release(tdbb);
641- break;
642-
643- case Resource::rsc_collation:
644- {
645- Collation* coll = resource->rsc_coll;
646- coll->decUseCount(tdbb);
647- break;
648- }
649-
650- default:
651- BUGCHECK(220); // msg 220 release of unknown resource
652- break;
653- }
654- }
655- */
656-
657557 for (Request** instance = requests.begin (); instance != requests.end (); ++instance)
658558 EXE_release (tdbb, *instance);
659559
0 commit comments