Skip to content

Commit 1c3dc43

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

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

54715471

54725472
dsc* evlMaxMinValue(thread_db* tdbb, const SysFunction* function, const NestValueArray& args,
5473-
impure_value*)
5473+
impure_value* impure)
54745474
{
54755475
fb_assert(args.getCount() >= 1);
54765476
fb_assert(function->misc != NULL);
54775477

5478-
Request* request = tdbb->getRequest();
5479-
dsc* result = NULL;
5478+
const auto request = tdbb->getRequest();
5479+
HalfStaticArray<const dsc*, 2> argTypes(args.getCount());
5480+
dsc* result = nullptr;
54805481

54815482
for (FB_SIZE_T i = 0; i < args.getCount(); ++i)
54825483
{
5483-
dsc* value = EVL_expr(tdbb, request, args[i]);
5484+
const auto value = EVL_expr(tdbb, request, args[i]);
54845485
if (request->req_flags & req_null) // return NULL if value is NULL
5485-
return NULL;
5486+
return nullptr;
5487+
5488+
argTypes.add(value);
54865489

54875490
if (i == 0)
54885491
result = value;
@@ -5506,7 +5509,12 @@ dsc* evlMaxMinValue(thread_db* tdbb, const SysFunction* function, const NestValu
55065509
}
55075510
}
55085511

5509-
return result;
5512+
DataTypeUtil(tdbb).makeFromList(&impure->vlu_desc, function->name, argTypes.getCount(), argTypes.begin());
5513+
impure->vlu_desc.dsc_address = (UCHAR*) &impure->vlu_misc;
5514+
5515+
MOV_move(tdbb, result, &impure->vlu_desc);
5516+
5517+
return &impure->vlu_desc;
55105518
}
55115519

55125520

0 commit comments

Comments
 (0)