Skip to content

Commit 6d82b1f

Browse files
committed
Fix #8304 - Wrong results using minvalue/maxvalue in join condition.
1 parent b0c365a commit 6d82b1f

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
@@ -5369,19 +5369,22 @@ dsc* evlMakeDbkey(Jrd::thread_db* tdbb, const SysFunction* function, const NestV
53695369

53705370

53715371
dsc* evlMaxMinValue(thread_db* tdbb, const SysFunction* function, const NestValueArray& args,
5372-
impure_value*)
5372+
impure_value* impure)
53735373
{
53745374
fb_assert(args.getCount() >= 1);
53755375
fb_assert(function->misc != NULL);
53765376

5377-
jrd_req* request = tdbb->getRequest();
5378-
dsc* result = NULL;
5377+
const auto request = tdbb->getRequest();
5378+
HalfStaticArray<const dsc*, 2> argTypes(args.getCount());
5379+
dsc* result = nullptr;
53795380

53805381
for (FB_SIZE_T i = 0; i < args.getCount(); ++i)
53815382
{
5382-
dsc* value = EVL_expr(tdbb, request, args[i]);
5383+
const auto value = EVL_expr(tdbb, request, args[i]);
53835384
if (request->req_flags & req_null) // return NULL if value is NULL
5384-
return NULL;
5385+
return nullptr;
5386+
5387+
argTypes.add(value);
53855388

53865389
if (i == 0)
53875390
result = value;
@@ -5405,7 +5408,12 @@ dsc* evlMaxMinValue(thread_db* tdbb, const SysFunction* function, const NestValu
54055408
}
54065409
}
54075410

5408-
return result;
5411+
DataTypeUtil(tdbb).makeFromList(&impure->vlu_desc, function->name, argTypes.getCount(), argTypes.begin());
5412+
impure->vlu_desc.dsc_address = (UCHAR*) &impure->vlu_misc;
5413+
5414+
MOV_move(tdbb, result, &impure->vlu_desc);
5415+
5416+
return &impure->vlu_desc;
54095417
}
54105418

54115419

0 commit comments

Comments
 (0)