8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-24 03:23:03 +01:00

Fixed CORE-2176 - Unexpected (wrong) results with COALESCE and GROUP BY

This commit is contained in:
asfernandes 2008-11-08 17:59:06 +00:00
parent 5f04e5080b
commit dcfdeca45c
2 changed files with 13 additions and 1 deletions

View File

@ -9975,7 +9975,6 @@ static dsql_nod* remap_field(CompiledStatement* statement, dsql_nod* field,
current_level--;
return field;
case nod_coalesce:
case nod_simple_case:
case nod_searched_case:
{
@ -9988,6 +9987,16 @@ static dsql_nod* remap_field(CompiledStatement* statement, dsql_nod* field,
return field;
}
case nod_coalesce:
{
// ASF: We have deliberately change nod_count to 1, to not process the second list.
// But we should remap its fields. CORE-2176
dsql_nod** ptr = field->nod_arg;
for (const dsql_nod* const* const end = ptr + 2; ptr < end; ptr++)
*ptr = remap_field(statement, *ptr, context, current_level);
return field;
}
case nod_aggregate:
field->nod_arg[e_agg_rse] =
remap_field(statement, field->nod_arg[e_agg_rse], context, current_level);

View File

@ -3101,7 +3101,10 @@ jrd_nod* PAR_parse_node(thread_db* tdbb, CompilerScratch* csb, USHORT expected,
const UCHAR streamCount = BLR_BYTE;
USHORT* streamList = FB_NEW(*tdbb->getDefaultPool()) USHORT[streamCount];
for (UCHAR i = 0; i < streamCount; ++i)
{
streamList[i] = BLR_BYTE;
streamList[i] = csb->csb_rpt[streamList[i]].csb_stream;
}
node->nod_arg[e_derived_expr_stream_list] = (jrd_nod*) streamList;
node->nod_arg[e_derived_expr_stream_count] = (jrd_nod*)(IPTR) streamCount;