Skip to content

Commit 90fdb97

Browse files
committed
Fix #8304 - Wrong results using minvalue/maxvalue in join condition.
1 parent 53a92cc commit 90fdb97

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

src/jrd/SysFunction.cpp

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5454,19 +5454,22 @@ dsc* evlMakeDbkey(Jrd::thread_db* tdbb, const SysFunction* function, const NestV
54545454

54555455

54565456
dsc* evlMaxMinValue(thread_db* tdbb, const SysFunction* function, const NestValueArray& args,
5457-
impure_value*)
5457+
impure_value* impure)
54585458
{
54595459
fb_assert(args.getCount() >= 1);
54605460
fb_assert(function->misc != NULL);
54615461

5462-
Request* request = tdbb->getRequest();
5463-
dsc* result = NULL;
5462+
const auto request = tdbb->getRequest();
5463+
HalfStaticArray<const dsc*, 2> argTypes(args.getCount());
5464+
dsc* result = nullptr;
54645465

54655466
for (FB_SIZE_T i = 0; i < args.getCount(); ++i)
54665467
{
5467-
dsc* value = EVL_expr(tdbb, request, args[i]);
5468+
const auto value = EVL_expr(tdbb, request, args[i]);
54685469
if (request->req_flags & req_null) // return NULL if value is NULL
5469-
return NULL;
5470+
return nullptr;
5471+
5472+
argTypes.add(value);
54705473

54715474
if (i == 0)
54725475
result = value;
@@ -5490,7 +5493,12 @@ dsc* evlMaxMinValue(thread_db* tdbb, const SysFunction* function, const NestValu
54905493
}
54915494
}
54925495

5493-
return result;
5496+
DataTypeUtil(tdbb).makeFromList(&impure->vlu_desc, function->name, argTypes.getCount(), argTypes.begin());
5497+
impure->vlu_desc.dsc_address = (UCHAR*) &impure->vlu_misc;
5498+
5499+
MOV_move(tdbb, result, &impure->vlu_desc);
5500+
5501+
return &impure->vlu_desc;
54945502
}
54955503

54965504

0 commit comments

Comments
 (0)