@@ -634,10 +634,18 @@ void Applier::insertRecord(thread_db* tdbb, TraNumber traNum,
634634 fb_assert (error[2 ] == isc_arg_string);
635635 fb_assert (error[3 ] != 0 );
636636
637- const char * idxName = reinterpret_cast <const char *>(error[3 ]);
637+ const MetaName nameFromErr (reinterpret_cast <const char *>(error[3 ]));
638+ MetaName idxName;
639+ if (error[1 ] == isc_no_dup)
640+ idxName = nameFromErr;
641+ else if (!m_constraintIndexMap.get (nameFromErr, idxName))
642+ {
643+ MET_lookup_index_for_cnstrt (tdbb, idxName, nameFromErr);
644+ m_constraintIndexMap.put (nameFromErr, idxName);
645+ }
638646
639647 index_desc idx;
640- const auto indexed = lookupRecord (tdbb, relation, record, idx, idxName);
648+ const auto indexed = lookupRecord (tdbb, relation, record, idx, & idxName);
641649
642650 AutoPtr<Record> cleanup;
643651
@@ -1087,7 +1095,7 @@ bool Applier::compareKey(thread_db* tdbb, jrd_rel* relation, const index_desc& i
10871095
10881096bool Applier::lookupRecord (thread_db* tdbb,
10891097 jrd_rel* relation, Record* record,
1090- index_desc& idx, const char * idxName)
1098+ index_desc& idx, const MetaName * idxName)
10911099{
10921100 RecordBitmap::reset (m_bitmap);
10931101
@@ -1099,16 +1107,16 @@ bool Applier::lookupRecord(thread_db* tdbb,
10991107 }
11001108
11011109 bool haveIdx = false ;
1102- if (idxName)
1110+ if (idxName && idxName-> hasData () )
11031111 {
11041112 SLONG foundRelId;
11051113 IndexStatus idxStatus;
1106- SLONG idx_id = MET_lookup_index_name (tdbb, idxName, &foundRelId, &idxStatus);
1114+ SLONG idx_id = MET_lookup_index_name (tdbb, * idxName, &foundRelId, &idxStatus);
11071115
11081116 fb_assert (idxStatus == MET_object_active);
11091117 fb_assert (foundRelId == relation->rel_id );
11101118
1111- haveIdx = (idxStatus == MET_object_active) && (foundRelId == relation->rel_id ) &&
1119+ haveIdx = (idx_id >= 0 ) && ( idxStatus == MET_object_active) && (foundRelId == relation->rel_id ) &&
11121120 BTR_lookup (tdbb, relation, idx_id, &idx, relation->getPages (tdbb));
11131121 }
11141122
0 commit comments