Skip to content

Commit

Permalink
Improve allocation of request impure space, specially statements, to …
Browse files Browse the repository at this point in the history
…not waste alignment space (CORE-6330).
  • Loading branch information
asfernandes committed Jun 11, 2020
1 parent 98054a2 commit 1951362
Show file tree
Hide file tree
Showing 35 changed files with 119 additions and 120 deletions.
10 changes: 5 additions & 5 deletions src/dsql/AggNodes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,7 @@ AggNode* AggNode::pass2(thread_db* tdbb, CompilerScratch* csb)

dsc desc;
getDesc(tdbb, csb, &desc);
impureOffset = CMP_impure(csb, sizeof(impure_value_ex));
impureOffset = csb->allocImpure<impure_value_ex>();

return this;
}
Expand Down Expand Up @@ -653,7 +653,7 @@ AggNode* AvgAggNode::pass2(thread_db* tdbb, CompilerScratch* csb)
nodFlags |= FLAG_DOUBLE;

// We need a second descriptor in the impure area for AVG.
tempImpure = CMP_impure(csb, sizeof(impure_value_ex));
tempImpure = csb->allocImpure<impure_value_ex>();

return this;
}
Expand Down Expand Up @@ -1416,7 +1416,7 @@ AggNode* StdDevAggNode::pass2(thread_db* tdbb, CompilerScratch* csb)
{
AggNode::pass2(tdbb, csb);

impure2Offset = CMP_impure(csb, sizeof(StdDevImpure));
impure2Offset = csb->allocImpure<StdDevImpure>();

return this;
}
Expand Down Expand Up @@ -1625,7 +1625,7 @@ AggNode* CorrAggNode::pass2(thread_db* tdbb, CompilerScratch* csb)
{
AggNode::pass2(tdbb, csb);

impure2Offset = CMP_impure(csb, sizeof(CorrImpure));
impure2Offset = csb->allocImpure<CorrImpure>();

return this;
}
Expand Down Expand Up @@ -1901,7 +1901,7 @@ AggNode* RegrAggNode::pass2(thread_db* tdbb, CompilerScratch* csb)
{
AggNode::pass2(tdbb, csb);

impure2Offset = CMP_impure(csb, sizeof(RegrImpure));
impure2Offset = csb->allocImpure<RegrImpure>();

return this;
}
Expand Down
4 changes: 2 additions & 2 deletions src/dsql/BoolNodes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -636,7 +636,7 @@ void ComparativeBoolNode::pass2Boolean2(thread_db* tdbb, CompilerScratch* csb)
if (nodFlags & FLAG_INVARIANT)
{
// This may currently happen for nod_like, nod_contains and nod_similar
impureOffset = CMP_impure(csb, sizeof(impure_value));
impureOffset = csb->allocImpure<impure_value>();
}
}

Expand Down Expand Up @@ -1753,7 +1753,7 @@ void RseBoolNode::pass2Boolean1(thread_db* tdbb, CompilerScratch* csb)
void RseBoolNode::pass2Boolean2(thread_db* tdbb, CompilerScratch* csb)
{
if (nodFlags & FLAG_INVARIANT)
impureOffset = CMP_impure(csb, sizeof(impure_value));
impureOffset = csb->allocImpure<impure_value>();

RecordSource* const rsb = CMP_post_rse(tdbb, csb, rse);

Expand Down
69 changes: 38 additions & 31 deletions src/dsql/ExprNodes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1805,7 +1805,7 @@ ValueExprNode* ArithmeticNode::pass2(thread_db* tdbb, CompilerScratch* csb)

dsc desc;
getDesc(tdbb, csb, &desc);
impureOffset = CMP_impure(csb, sizeof(impure_value));
impureOffset = csb->allocImpure<impure_value>();

return this;
}
Expand Down Expand Up @@ -3181,7 +3181,7 @@ ValueExprNode* AtNode::pass2(thread_db* tdbb, CompilerScratch* csb)

dsc desc;
getDesc(tdbb, csb, &desc);
impureOffset = CMP_impure(csb, sizeof(impure_value));
impureOffset = csb->allocImpure<impure_value>();

return this;
}
Expand Down Expand Up @@ -3299,7 +3299,7 @@ ValueExprNode* BoolAsValueNode::pass2(thread_db* tdbb, CompilerScratch* csb)

dsc desc;
getDesc(tdbb, csb, &desc);
impureOffset = CMP_impure(csb, sizeof(impure_value));
impureOffset = csb->allocImpure<impure_value>();

return this;
}
Expand Down Expand Up @@ -3518,7 +3518,7 @@ ValueExprNode* CastNode::pass2(thread_db* tdbb, CompilerScratch* csb)

dsc desc;
getDesc(tdbb, csb, &desc);
impureOffset = CMP_impure(csb, sizeof(impure_value));
impureOffset = csb->allocImpure<impure_value>();

return this;
}
Expand Down Expand Up @@ -3890,7 +3890,7 @@ ValueExprNode* ConcatenateNode::pass2(thread_db* tdbb, CompilerScratch* csb)

dsc desc;
getDesc(tdbb, csb, &desc);
impureOffset = CMP_impure(csb, sizeof(impure_value));
impureOffset = csb->allocImpure<impure_value>();

return this;
}
Expand Down Expand Up @@ -4123,7 +4123,7 @@ ValueExprNode* CurrentDateNode::pass2(thread_db* tdbb, CompilerScratch* csb)

dsc desc;
getDesc(tdbb, csb, &desc);
impureOffset = CMP_impure(csb, sizeof(impure_value));
impureOffset = csb->allocImpure<impure_value>();

return this;
}
Expand Down Expand Up @@ -4228,7 +4228,7 @@ ValueExprNode* CurrentTimeNode::pass2(thread_db* tdbb, CompilerScratch* csb)

dsc desc;
getDesc(tdbb, csb, &desc);
impureOffset = CMP_impure(csb, sizeof(impure_value));
impureOffset = csb->allocImpure<impure_value>();

return this;
}
Expand Down Expand Up @@ -4343,7 +4343,7 @@ ValueExprNode* CurrentTimeStampNode::pass2(thread_db* tdbb, CompilerScratch* csb

dsc desc;
getDesc(tdbb, csb, &desc);
impureOffset = CMP_impure(csb, sizeof(impure_value));
impureOffset = csb->allocImpure<impure_value>();

return this;
}
Expand Down Expand Up @@ -4437,7 +4437,7 @@ ValueExprNode* CurrentRoleNode::pass2(thread_db* tdbb, CompilerScratch* csb)

dsc desc;
getDesc(tdbb, csb, &desc);
impureOffset = CMP_impure(csb, sizeof(impure_value));
impureOffset = csb->allocImpure<impure_value>();

return this;
}
Expand Down Expand Up @@ -4531,7 +4531,7 @@ ValueExprNode* CurrentUserNode::pass2(thread_db* tdbb, CompilerScratch* csb)

dsc desc;
getDesc(tdbb, csb, &desc);
impureOffset = CMP_impure(csb, sizeof(impure_value));
impureOffset = csb->allocImpure<impure_value>();

return this;
}
Expand Down Expand Up @@ -5411,7 +5411,7 @@ ValueExprNode* ExtractNode::pass2(thread_db* tdbb, CompilerScratch* csb)

dsc desc;
getDesc(tdbb, csb, &desc);
impureOffset = CMP_impure(csb, sizeof(impure_value));
impureOffset = csb->allocImpure<impure_value>();

return this;
}
Expand Down Expand Up @@ -6771,7 +6771,7 @@ ValueExprNode* FieldNode::pass2(thread_db* tdbb, CompilerScratch* csb)
if (csb->csb_rpt[fieldStream].csb_relation || csb->csb_rpt[fieldStream].csb_procedure)
format = CMP_format(tdbb, csb, fieldStream);

impureOffset = CMP_impure(csb, sizeof(impure_value_ex));
impureOffset = csb->allocImpure<impure_value_ex>();
cursorNumber = csb->csb_rpt[fieldStream].csb_cursor_number;

return this;
Expand Down Expand Up @@ -7023,7 +7023,7 @@ ValueExprNode* GenIdNode::pass2(thread_db* tdbb, CompilerScratch* csb)

dsc desc;
getDesc(tdbb, csb, &desc);
impureOffset = CMP_impure(csb, sizeof(impure_value));
impureOffset = csb->allocImpure<impure_value>();

return this;
}
Expand Down Expand Up @@ -7217,7 +7217,7 @@ ValueExprNode* InternalInfoNode::pass2(thread_db* tdbb, CompilerScratch* csb)

dsc desc;
getDesc(tdbb, csb, &desc);
impureOffset = CMP_impure(csb, sizeof(impure_value));
impureOffset = csb->allocImpure<impure_value>();

return this;
}
Expand Down Expand Up @@ -8025,7 +8025,7 @@ ValueExprNode* LocalTimeNode::pass2(thread_db* tdbb, CompilerScratch* csb)

dsc desc;
getDesc(tdbb, csb, &desc);
impureOffset = CMP_impure(csb, sizeof(impure_value));
impureOffset = csb->allocImpure<impure_value>();

return this;
}
Expand Down Expand Up @@ -8128,7 +8128,7 @@ ValueExprNode* LocalTimeStampNode::pass2(thread_db* tdbb, CompilerScratch* csb)

dsc desc;
getDesc(tdbb, csb, &desc);
impureOffset = CMP_impure(csb, sizeof(impure_value));
impureOffset = csb->allocImpure<impure_value>();

return this;
}
Expand Down Expand Up @@ -8735,7 +8735,7 @@ ValueExprNode* NegateNode::pass2(thread_db* tdbb, CompilerScratch* csb)

dsc desc;
getDesc(tdbb, csb, &desc);
impureOffset = CMP_impure(csb, sizeof(impure_value));
impureOffset = csb->allocImpure<impure_value>();

return this;
}
Expand Down Expand Up @@ -9608,7 +9608,11 @@ ValueExprNode* ParameterNode::pass2(thread_db* tdbb, CompilerScratch* csb)

dsc desc;
getDesc(tdbb, csb, &desc);
impureOffset = CMP_impure(csb, (nodFlags & FLAG_VALUE) ? sizeof(impure_value_ex) : sizeof(dsc));

if (nodFlags & FLAG_VALUE)
impureOffset = csb->allocImpure<impure_value_ex>();
else
impureOffset = csb->allocImpure<dsc>();

return this;
}
Expand Down Expand Up @@ -10146,7 +10150,7 @@ ValueExprNode* RecordKeyNode::pass2(thread_db* tdbb, CompilerScratch* csb)

dsc desc;
getDesc(tdbb, csb, &desc);
impureOffset = CMP_impure(csb, sizeof(impure_value));
impureOffset = csb->allocImpure<impure_value>();

return this;
}
Expand Down Expand Up @@ -10333,7 +10337,7 @@ ValueExprNode* ScalarNode::pass2(thread_db* tdbb, CompilerScratch* csb)

dsc desc;
getDesc(tdbb, csb, &desc);
impureOffset = CMP_impure(csb, sizeof(impure_value));
impureOffset = csb->allocImpure<impure_value>();

return this;
}
Expand Down Expand Up @@ -10547,7 +10551,7 @@ ValueExprNode* StrCaseNode::pass2(thread_db* tdbb, CompilerScratch* csb)

dsc desc;
getDesc(tdbb, csb, &desc);
impureOffset = CMP_impure(csb, sizeof(impure_value));
impureOffset = csb->allocImpure<impure_value>();

return this;
}
Expand Down Expand Up @@ -10762,7 +10766,7 @@ ValueExprNode* StrLenNode::pass2(thread_db* tdbb, CompilerScratch* csb)

dsc desc;
getDesc(tdbb, csb, &desc);
impureOffset = CMP_impure(csb, sizeof(impure_value));
impureOffset = csb->allocImpure<impure_value>();

return this;
}
Expand Down Expand Up @@ -11187,7 +11191,7 @@ ValueExprNode* SubQueryNode::pass2(thread_db* tdbb, CompilerScratch* csb)

ValueExprNode::pass2(tdbb, csb);

impureOffset = CMP_impure(csb, sizeof(impure_value_ex));
impureOffset = csb->allocImpure<impure_value_ex>();

{
dsc desc;
Expand Down Expand Up @@ -11539,7 +11543,7 @@ ValueExprNode* SubstringNode::pass2(thread_db* tdbb, CompilerScratch* csb)

dsc desc;
getDesc(tdbb, csb, &desc);
impureOffset = CMP_impure(csb, sizeof(impure_value));
impureOffset = csb->allocImpure<impure_value>();

return this;
}
Expand Down Expand Up @@ -11843,7 +11847,7 @@ ValueExprNode* SubstringSimilarNode::pass2(thread_db* tdbb, CompilerScratch* csb

dsc desc;
getDesc(tdbb, csb, &desc);
impureOffset = CMP_impure(csb, sizeof(impure_value));
impureOffset = csb->allocImpure<impure_value>();

return this;
}
Expand Down Expand Up @@ -12100,7 +12104,7 @@ ValueExprNode* SysFuncCallNode::pass2(thread_db* tdbb, CompilerScratch* csb)

dsc desc;
getDesc(tdbb, csb, &desc);
impureOffset = CMP_impure(csb, sizeof(impure_value));
impureOffset = csb->allocImpure<impure_value>();

return this;
}
Expand Down Expand Up @@ -12356,7 +12360,7 @@ ValueExprNode* TrimNode::pass2(thread_db* tdbb, CompilerScratch* csb)

dsc desc;
getDesc(tdbb, csb, &desc);
impureOffset = CMP_impure(csb, sizeof(impure_value));
impureOffset = csb->allocImpure<impure_value>();

return this;
}
Expand Down Expand Up @@ -12771,20 +12775,20 @@ ValueExprNode* UdfCallNode::pass2(thread_db* tdbb, CompilerScratch* csb)
dsc desc;
getDesc(tdbb, csb, &desc);

impureOffset = CMP_impure(csb, sizeof(Impure));
impureOffset = csb->allocImpure<Impure>();

if (function->isDefined() && !function->fun_entrypoint)
{
if (function->getInputFormat() && function->getInputFormat()->fmt_count)
{
fb_assert(function->getInputFormat()->fmt_length);
CMP_impure(csb, function->getInputFormat()->fmt_length);
csb->allocImpure(FB_ALIGNMENT, function->getInputFormat()->fmt_length);
}

fb_assert(function->getOutputFormat()->fmt_count == 3);

fb_assert(function->getOutputFormat()->fmt_length);
CMP_impure(csb, function->getOutputFormat()->fmt_length);
csb->allocImpure(FB_ALIGNMENT, function->getOutputFormat()->fmt_length);
}

return this;
Expand Down Expand Up @@ -13438,7 +13442,10 @@ ValueExprNode* VariableNode::pass2(thread_db* tdbb, CompilerScratch* csb)

ValueExprNode::pass2(tdbb, csb);

impureOffset = CMP_impure(csb, (nodFlags & FLAG_VALUE) ? sizeof(impure_value_ex) : sizeof(dsc));
if (nodFlags & FLAG_VALUE)
impureOffset = csb->allocImpure<impure_value_ex>();
else
impureOffset = csb->allocImpure<dsc>();

return this;
}
Expand Down
Loading

0 comments on commit 1951362

Please sign in to comment.