Skip to content

Commit b691650

Browse files
committed
As suggested by Adriano & Vlad
1 parent 0f9d237 commit b691650

2 files changed

Lines changed: 132 additions & 50 deletions

File tree

src/dsql/DdlNodes.epp

Lines changed: 131 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -5356,7 +5356,7 @@ void AlterDomainNode::modifyLocalFieldIndex(thread_db* tdbb, jrd_tra* transactio
53565356
const QualifiedName& relationName, const MetaName& fieldName, const MetaName& newFieldName,
53575357
ModifyIndexList& indexList)
53585358
{
5359-
AutoRequest request, rq2;
5359+
AutoRequest request;
53605360

53615361
FOR(REQUEST_HANDLE request TRANSACTION_HANDLE transaction)
53625362
IDX IN RDB$INDICES
@@ -5378,60 +5378,142 @@ void AlterDomainNode::modifyLocalFieldIndex(thread_db* tdbb, jrd_tra* transactio
53785378
node->drop(tdbb, nullptr, transaction, indexList, false); // keep segments
53795379
auto* rel = node->getRelation();
53805380

5381+
AutoRequest request2;
5382+
53815383
// Add record for new index
5382-
STORE(REQUEST_HANDLE rq2 TRANSACTION_HANDLE transaction)
5384+
STORE(REQUEST_HANDLE request2 TRANSACTION_HANDLE transaction)
53835385
INEW IN RDB$INDICES
53845386
{
53855387
INEW.RDB$INDEX_ID.NULL = TRUE;
53865388
INEW.RDB$FORMAT.NULL = TRUE; // Leave it till DFW_update_index()
53875389

5388-
if (IDX.RDB$INDEX_NAME.NULL) INEW.RDB$INDEX_NAME.NULL = TRUE;
5389-
else {INEW.RDB$INDEX_NAME.NULL = FALSE; strcpy(INEW.RDB$INDEX_NAME, IDX.RDB$INDEX_NAME);};
5390-
5391-
if (IDX.RDB$RELATION_NAME.NULL) INEW.RDB$RELATION_NAME.NULL = TRUE;
5392-
else {INEW.RDB$RELATION_NAME.NULL = FALSE; strcpy(INEW.RDB$RELATION_NAME, IDX.RDB$RELATION_NAME);};
5393-
5394-
if (IDX.RDB$UNIQUE_FLAG.NULL) INEW.RDB$UNIQUE_FLAG.NULL = TRUE;
5395-
else {INEW.RDB$UNIQUE_FLAG.NULL = FALSE; INEW.RDB$UNIQUE_FLAG = IDX.RDB$UNIQUE_FLAG;};
5396-
5397-
if (IDX.RDB$DESCRIPTION.NULL) INEW.RDB$DESCRIPTION.NULL = TRUE;
5398-
else {INEW.RDB$DESCRIPTION.NULL = FALSE; INEW.RDB$DESCRIPTION = IDX.RDB$DESCRIPTION;};
5399-
5400-
if (IDX.RDB$SEGMENT_COUNT.NULL) INEW.RDB$SEGMENT_COUNT.NULL = TRUE;
5401-
else {INEW.RDB$SEGMENT_COUNT.NULL = FALSE; INEW.RDB$SEGMENT_COUNT = IDX.RDB$SEGMENT_COUNT;};
5402-
5403-
if (IDX.RDB$INDEX_INACTIVE.NULL) INEW.RDB$INDEX_INACTIVE.NULL = TRUE;
5404-
else {INEW.RDB$INDEX_INACTIVE.NULL = FALSE; INEW.RDB$INDEX_INACTIVE = IDX.RDB$INDEX_INACTIVE;};
5405-
5406-
if (IDX.RDB$INDEX_TYPE.NULL) INEW.RDB$INDEX_TYPE.NULL = TRUE;
5407-
else {INEW.RDB$INDEX_TYPE.NULL = FALSE; INEW.RDB$INDEX_TYPE = IDX.RDB$INDEX_TYPE;};
5408-
5409-
if (IDX.RDB$FOREIGN_KEY.NULL) INEW.RDB$FOREIGN_KEY.NULL = TRUE;
5410-
else {INEW.RDB$FOREIGN_KEY.NULL = FALSE; strcpy(INEW.RDB$FOREIGN_KEY, IDX.RDB$FOREIGN_KEY);};
5411-
5412-
if (IDX.RDB$SYSTEM_FLAG.NULL) INEW.RDB$SYSTEM_FLAG.NULL = TRUE;
5413-
else {INEW.RDB$SYSTEM_FLAG.NULL = FALSE; INEW.RDB$SYSTEM_FLAG = IDX.RDB$SYSTEM_FLAG;};
5414-
5415-
if (IDX.RDB$EXPRESSION_BLR.NULL) INEW.RDB$EXPRESSION_BLR.NULL = TRUE;
5416-
else {INEW.RDB$EXPRESSION_BLR.NULL = FALSE; INEW.RDB$EXPRESSION_BLR = IDX.RDB$EXPRESSION_BLR;};
5417-
5418-
if (IDX.RDB$EXPRESSION_SOURCE.NULL) INEW.RDB$EXPRESSION_SOURCE.NULL = TRUE;
5419-
else {INEW.RDB$EXPRESSION_SOURCE.NULL = FALSE; INEW.RDB$EXPRESSION_SOURCE = IDX.RDB$EXPRESSION_SOURCE;};
5420-
5421-
if (IDX.RDB$STATISTICS.NULL) INEW.RDB$STATISTICS.NULL = TRUE;
5422-
else {INEW.RDB$STATISTICS.NULL = FALSE; INEW.RDB$STATISTICS = IDX.RDB$STATISTICS;};
5423-
5424-
if (IDX.RDB$CONDITION_BLR.NULL) INEW.RDB$CONDITION_BLR.NULL = TRUE;
5425-
else {INEW.RDB$CONDITION_BLR.NULL = FALSE; INEW.RDB$CONDITION_BLR = IDX.RDB$CONDITION_BLR;};
5426-
5427-
if (IDX.RDB$CONDITION_SOURCE.NULL) INEW.RDB$CONDITION_SOURCE.NULL = TRUE;
5428-
else {INEW.RDB$CONDITION_SOURCE.NULL = FALSE; INEW.RDB$CONDITION_SOURCE = IDX.RDB$CONDITION_SOURCE;};
5429-
5430-
if (IDX.RDB$SCHEMA_NAME.NULL) INEW.RDB$SCHEMA_NAME.NULL = TRUE;
5431-
else {INEW.RDB$SCHEMA_NAME.NULL = FALSE; strcpy(INEW.RDB$SCHEMA_NAME, IDX.RDB$SCHEMA_NAME);};
5432-
5433-
if (IDX.RDB$FOREIGN_KEY_SCHEMA_NAME.NULL) INEW.RDB$FOREIGN_KEY_SCHEMA_NAME.NULL = TRUE;
5434-
else {INEW.RDB$FOREIGN_KEY_SCHEMA_NAME.NULL = FALSE; strcpy(INEW.RDB$FOREIGN_KEY_SCHEMA_NAME, IDX.RDB$FOREIGN_KEY_SCHEMA_NAME);};
5390+
if (IDX.RDB$INDEX_NAME.NULL)
5391+
INEW.RDB$INDEX_NAME.NULL = TRUE;
5392+
else
5393+
{
5394+
INEW.RDB$INDEX_NAME.NULL = FALSE;
5395+
strcpy(INEW.RDB$INDEX_NAME, IDX.RDB$INDEX_NAME);
5396+
}
5397+
5398+
if (IDX.RDB$RELATION_NAME.NULL)
5399+
INEW.RDB$RELATION_NAME.NULL = TRUE;
5400+
else
5401+
{
5402+
INEW.RDB$RELATION_NAME.NULL = FALSE;
5403+
strcpy(INEW.RDB$RELATION_NAME, IDX.RDB$RELATION_NAME);
5404+
}
5405+
5406+
if (IDX.RDB$UNIQUE_FLAG.NULL)
5407+
INEW.RDB$UNIQUE_FLAG.NULL = TRUE;
5408+
else
5409+
{
5410+
INEW.RDB$UNIQUE_FLAG.NULL = FALSE;
5411+
INEW.RDB$UNIQUE_FLAG = IDX.RDB$UNIQUE_FLAG;
5412+
}
5413+
5414+
if (IDX.RDB$DESCRIPTION.NULL)
5415+
INEW.RDB$DESCRIPTION.NULL = TRUE;
5416+
else
5417+
{
5418+
INEW.RDB$DESCRIPTION.NULL = FALSE;
5419+
INEW.RDB$DESCRIPTION = IDX.RDB$DESCRIPTION;
5420+
}
5421+
5422+
if (IDX.RDB$SEGMENT_COUNT.NULL)
5423+
INEW.RDB$SEGMENT_COUNT.NULL = TRUE;
5424+
else
5425+
{
5426+
INEW.RDB$SEGMENT_COUNT.NULL = FALSE;
5427+
INEW.RDB$SEGMENT_COUNT = IDX.RDB$SEGMENT_COUNT;
5428+
}
5429+
5430+
if (IDX.RDB$INDEX_INACTIVE.NULL)
5431+
INEW.RDB$INDEX_INACTIVE.NULL = TRUE;
5432+
else
5433+
{
5434+
INEW.RDB$INDEX_INACTIVE.NULL = FALSE;
5435+
INEW.RDB$INDEX_INACTIVE = IDX.RDB$INDEX_INACTIVE;
5436+
}
5437+
5438+
if (IDX.RDB$INDEX_TYPE.NULL)
5439+
INEW.RDB$INDEX_TYPE.NULL = TRUE;
5440+
else
5441+
{
5442+
INEW.RDB$INDEX_TYPE.NULL = FALSE;
5443+
INEW.RDB$INDEX_TYPE = IDX.RDB$INDEX_TYPE;
5444+
}
5445+
5446+
if (IDX.RDB$FOREIGN_KEY.NULL)
5447+
INEW.RDB$FOREIGN_KEY.NULL = TRUE;
5448+
else
5449+
{
5450+
INEW.RDB$FOREIGN_KEY.NULL = FALSE;
5451+
strcpy(INEW.RDB$FOREIGN_KEY, IDX.RDB$FOREIGN_KEY);
5452+
}
5453+
5454+
if (IDX.RDB$SYSTEM_FLAG.NULL)
5455+
INEW.RDB$SYSTEM_FLAG.NULL = TRUE;
5456+
else
5457+
{
5458+
INEW.RDB$SYSTEM_FLAG.NULL = FALSE;
5459+
INEW.RDB$SYSTEM_FLAG = IDX.RDB$SYSTEM_FLAG;
5460+
}
5461+
5462+
if (IDX.RDB$EXPRESSION_BLR.NULL)
5463+
INEW.RDB$EXPRESSION_BLR.NULL = TRUE;
5464+
else
5465+
{
5466+
INEW.RDB$EXPRESSION_BLR.NULL = FALSE;
5467+
INEW.RDB$EXPRESSION_BLR = IDX.RDB$EXPRESSION_BLR;
5468+
}
5469+
5470+
if (IDX.RDB$EXPRESSION_SOURCE.NULL)
5471+
INEW.RDB$EXPRESSION_SOURCE.NULL = TRUE;
5472+
else
5473+
{
5474+
INEW.RDB$EXPRESSION_SOURCE.NULL = FALSE;
5475+
INEW.RDB$EXPRESSION_SOURCE = IDX.RDB$EXPRESSION_SOURCE;
5476+
}
5477+
5478+
if (IDX.RDB$STATISTICS.NULL)
5479+
INEW.RDB$STATISTICS.NULL = TRUE;
5480+
else
5481+
{
5482+
INEW.RDB$STATISTICS.NULL = FALSE;
5483+
INEW.RDB$STATISTICS = IDX.RDB$STATISTICS;
5484+
}
5485+
5486+
if (IDX.RDB$CONDITION_BLR.NULL)
5487+
INEW.RDB$CONDITION_BLR.NULL = TRUE;
5488+
else
5489+
{
5490+
INEW.RDB$CONDITION_BLR.NULL = FALSE;
5491+
INEW.RDB$CONDITION_BLR = IDX.RDB$CONDITION_BLR;
5492+
}
5493+
5494+
if (IDX.RDB$CONDITION_SOURCE.NULL)
5495+
INEW.RDB$CONDITION_SOURCE.NULL = TRUE;
5496+
else
5497+
{
5498+
INEW.RDB$CONDITION_SOURCE.NULL = FALSE;
5499+
INEW.RDB$CONDITION_SOURCE = IDX.RDB$CONDITION_SOURCE;
5500+
}
5501+
5502+
if (IDX.RDB$SCHEMA_NAME.NULL)
5503+
INEW.RDB$SCHEMA_NAME.NULL = TRUE;
5504+
else
5505+
{
5506+
INEW.RDB$SCHEMA_NAME.NULL = FALSE;
5507+
strcpy(INEW.RDB$SCHEMA_NAME, IDX.RDB$SCHEMA_NAME);
5508+
}
5509+
5510+
if (IDX.RDB$FOREIGN_KEY_SCHEMA_NAME.NULL)
5511+
INEW.RDB$FOREIGN_KEY_SCHEMA_NAME.NULL = TRUE;
5512+
else
5513+
{
5514+
INEW.RDB$FOREIGN_KEY_SCHEMA_NAME.NULL = FALSE;
5515+
strcpy(INEW.RDB$FOREIGN_KEY_SCHEMA_NAME, IDX.RDB$FOREIGN_KEY_SCHEMA_NAME);
5516+
}
54355517
}
54365518
END_STORE
54375519

src/jrd/btr.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,7 @@ void IndexErrorContext::raise(thread_db* tdbb, idx_e result, Record* record)
464464

465465
case idx_e_skip:
466466
fb_assert(false);
467-
fatal_exception::raise("Sorry, such error should not take place");
467+
fatal_exception::raise("Internal error: idx_e_skip error is not expected");
468468
break;
469469

470470
default:

0 commit comments

Comments
 (0)