Skip to content

Commit f5e7c62

Browse files
committed
Fix issues with longish concatenated context aliases
1 parent 42f2ba0 commit f5e7c62

File tree

7 files changed

+26
-12
lines changed

7 files changed

+26
-12
lines changed

src/jrd/RecordSourceNodes.cpp

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,20 @@ static ValueExprNode* resolveUsingField(DsqlCompilerScratch* dsqlScratch, const
5454

5555
namespace
5656
{
57+
void appendContextAlias(DsqlCompilerScratch* dsqlScratch, const string& alias)
58+
{
59+
const auto len = alias.length();
60+
if (len <= MAX_UCHAR)
61+
dsqlScratch->appendMetaString(alias.c_str());
62+
else
63+
{
64+
string truncatedAlias(alias);
65+
truncatedAlias.resize(MAX_UCHAR - 3);
66+
truncatedAlias += "...";
67+
dsqlScratch->appendMetaString(truncatedAlias.c_str());
68+
}
69+
}
70+
5771
// Search through the list of ANDed booleans to find comparisons
5872
// referring streams of parent select expressions.
5973
// Extract those booleans and return them to the caller.
@@ -687,7 +701,7 @@ void LocalTableSourceNode::genBlr(DsqlCompilerScratch* dsqlScratch)
687701
{
688702
dsqlScratch->appendUChar(blr_local_table_id);
689703
dsqlScratch->appendUShort(tableNumber);
690-
dsqlScratch->appendMetaString(alias.c_str()); // dsqlContext->ctx_alias?
704+
appendContextAlias(dsqlScratch, alias); // dsqlContext->ctx_alias?
691705

692706
GEN_stuff_context(dsqlScratch, dsqlContext);
693707
}
@@ -885,7 +899,7 @@ void RelationSourceNode::genBlr(DsqlCompilerScratch* dsqlScratch)
885899
}
886900

887901
if (dsqlContext->ctx_alias.hasData())
888-
dsqlScratch->appendMetaString(dsqlContext->ctx_alias.c_str());
902+
appendContextAlias(dsqlScratch, dsqlContext->ctx_alias);
889903

890904
GEN_stuff_context(dsqlScratch, dsqlContext);
891905
}
@@ -1507,7 +1521,7 @@ void ProcedureSourceNode::genBlr(DsqlCompilerScratch* dsqlScratch)
15071521
if (dsqlContext->ctx_alias.hasData())
15081522
{
15091523
dsqlScratch->appendUChar(blr_invsel_procedure_alias);
1510-
dsqlScratch->appendMetaString(dsqlContext->ctx_alias.c_str());
1524+
appendContextAlias(dsqlScratch, dsqlContext->ctx_alias);
15111525
}
15121526

15131527
dsqlScratch->appendUChar(blr_end);
@@ -1519,7 +1533,7 @@ void ProcedureSourceNode::genBlr(DsqlCompilerScratch* dsqlScratch)
15191533
{
15201534
dsqlScratch->appendUChar(blr_subproc);
15211535
dsqlScratch->appendMetaString(dsqlProcedure->prc_name.identifier.c_str());
1522-
dsqlScratch->appendMetaString(dsqlContext->ctx_alias.c_str());
1536+
appendContextAlias(dsqlScratch, dsqlContext->ctx_alias);
15231537
}
15241538
else
15251539
{
@@ -1546,7 +1560,7 @@ void ProcedureSourceNode::genBlr(DsqlCompilerScratch* dsqlScratch)
15461560
}
15471561

15481562
if (dsqlContext->ctx_alias.hasData())
1549-
dsqlScratch->appendMetaString(dsqlContext->ctx_alias.c_str());
1563+
appendContextAlias(dsqlScratch, dsqlContext->ctx_alias);
15501564
}
15511565

15521566
GEN_stuff_context(dsqlScratch, dsqlContext);
@@ -4079,7 +4093,7 @@ void TableValueFunctionSourceNode::genBlr(DsqlCompilerScratch* dsqlScratch)
40794093

40804094
GEN_stuff_context(dsqlScratch, dsqlContext);
40814095

4082-
dsqlScratch->appendMetaString(dsqlContext->ctx_alias.c_str());
4096+
appendContextAlias(dsqlScratch, dsqlContext->ctx_alias);
40834097

40844098
dsqlScratch->appendUShort(dsqlContext->ctx_proc_inputs->items.getCount());
40854099
for (auto& arg : dsqlContext->ctx_proc_inputs->items)

src/jrd/recsrc/BitmapTableScan.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,6 @@ void BitmapTableScan::internalGetPlan(thread_db* tdbb, PlanEntry& planEntry, uns
148148
planEntry.objectType = m_relation->getObjectType();
149149
planEntry.objectName = m_relation->rel_name;
150150

151-
if (m_alias.hasData() && m_relation->rel_name != m_alias)
151+
if (m_alias.hasData() && m_alias != m_relation->rel_name.c_str())
152152
planEntry.alias = m_alias;
153153
}

src/jrd/recsrc/ExternalTableScan.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,6 @@ void ExternalTableScan::internalGetPlan(thread_db* tdbb, PlanEntry& planEntry, u
136136
planEntry.objectType = m_relation->getObjectType();
137137
planEntry.objectName = m_relation->rel_name;
138138

139-
if (m_alias.hasData() && m_relation->rel_name != m_alias)
139+
if (m_alias.hasData() && m_alias != m_relation->rel_name.c_str())
140140
planEntry.alias = m_alias;
141141
}

src/jrd/recsrc/FullTableScan.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,6 @@ void FullTableScan::internalGetPlan(thread_db* tdbb, PlanEntry& planEntry, unsig
197197
planEntry.objectType = m_relation->getObjectType();
198198
planEntry.objectName = m_relation->rel_name;
199199

200-
if (m_alias.hasData() && m_relation->rel_name != m_alias)
200+
if (m_alias.hasData() && m_alias != m_relation->rel_name.c_str())
201201
planEntry.alias = m_alias;
202202
}

src/jrd/recsrc/IndexTableScan.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ void IndexTableScan::internalGetPlan(thread_db* tdbb, PlanEntry& planEntry, unsi
403403
planEntry.objectType = m_relation->getObjectType();
404404
planEntry.objectName = m_relation->rel_name;
405405

406-
if (m_alias.hasData() && m_relation->rel_name != m_alias)
406+
if (m_alias.hasData() && m_alias != m_relation->rel_name.c_str())
407407
planEntry.alias = m_alias;
408408

409409
if (m_inversion)

src/jrd/recsrc/RecordSource.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ namespace Jrd
127127
std::optional<ObjectType> objectType;
128128
MetaName packageName;
129129
MetaName objectName;
130-
MetaName alias;
130+
Firebird::string alias{getPool()};
131131
const AccessPath* accessPath = nullptr;
132132
ULONG recordLength = 0;
133133
ULONG keyLength = 0;

src/jrd/recsrc/VirtualTableScan.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,6 @@ void VirtualTableScan::internalGetPlan(thread_db* tdbb, PlanEntry& planEntry, un
130130
planEntry.objectType = m_relation->getObjectType();
131131
planEntry.objectName = m_relation->rel_name;
132132

133-
if (m_alias.hasData() && m_relation->rel_name != m_alias)
133+
if (m_alias.hasData() && m_alias != m_relation->rel_name.c_str())
134134
planEntry.alias = m_alias;
135135
}

0 commit comments

Comments
 (0)