Skip to content

Commit adc49ed

Browse files
committed
Postfix for #8304: Wrong results using minvalue/maxvalue in join condition. It should fix regression #8440: Firebird 5.0.2 - wrong result for MINVALUE/MAXVALUE with string arguments.
1 parent 29b2499 commit adc49ed

File tree

1 file changed

+28
-1
lines changed

1 file changed

+28
-1
lines changed

src/jrd/SysFunction.cpp

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5494,10 +5494,37 @@ dsc* evlMaxMinValue(thread_db* tdbb, const SysFunction* function, const NestValu
54945494
}
54955495

54965496
DataTypeUtil(tdbb).makeFromList(&impure->vlu_desc, function->name, argTypes.getCount(), argTypes.begin());
5497-
impure->vlu_desc.dsc_address = (UCHAR*) &impure->vlu_misc;
5497+
5498+
if (impure->vlu_desc.isText())
5499+
{
5500+
const USHORT length = impure->vlu_desc.dsc_length;
5501+
5502+
// Allocate a string block of sufficient size
5503+
5504+
auto string = impure->vlu_string;
5505+
5506+
if (string && string->str_length < length)
5507+
{
5508+
delete string;
5509+
string = nullptr;
5510+
}
5511+
5512+
if (!string)
5513+
{
5514+
string = impure->vlu_string = FB_NEW_RPT(*tdbb->getDefaultPool(), length) VaryingString();
5515+
string->str_length = length;
5516+
}
5517+
5518+
impure->vlu_desc.dsc_address = string->str_data;
5519+
}
5520+
else
5521+
impure->vlu_desc.dsc_address = (UCHAR*) &impure->vlu_misc;
54985522

54995523
MOV_move(tdbb, result, &impure->vlu_desc);
55005524

5525+
if (impure->vlu_desc.dsc_dtype == dtype_text)
5526+
INTL_adjust_text_descriptor(tdbb, &impure->vlu_desc);
5527+
55015528
return &impure->vlu_desc;
55025529
}
55035530

0 commit comments

Comments
 (0)