mirror of
https://github.com/postgres/postgres.git
synced 2025-06-13 07:41:39 +03:00
Do execGrouping.c via expression eval machinery.
This has a performance benefit on own, although not hugely so. The primary benefit is that it will allow for to JIT tuple deforming and comparator invocations. Author: Andres Freund Discussion: https://postgr.es/m/20171129080934.amqqkke2zjtekd4t@alap3.anarazel.de
This commit is contained in:
@ -355,6 +355,7 @@ ExecInterpExpr(ExprState *state, ExprContext *econtext, bool *isnull)
|
||||
&&CASE_EEOP_MAKE_READONLY,
|
||||
&&CASE_EEOP_IOCOERCE,
|
||||
&&CASE_EEOP_DISTINCT,
|
||||
&&CASE_EEOP_NOT_DISTINCT,
|
||||
&&CASE_EEOP_NULLIF,
|
||||
&&CASE_EEOP_SQLVALUEFUNCTION,
|
||||
&&CASE_EEOP_CURRENTOFEXPR,
|
||||
@ -1198,6 +1199,34 @@ ExecInterpExpr(ExprState *state, ExprContext *econtext, bool *isnull)
|
||||
EEO_NEXT();
|
||||
}
|
||||
|
||||
/* see EEOP_DISTINCT for comments, this is just inverted */
|
||||
EEO_CASE(EEOP_NOT_DISTINCT)
|
||||
{
|
||||
FunctionCallInfo fcinfo = op->d.func.fcinfo_data;
|
||||
|
||||
if (fcinfo->argnull[0] && fcinfo->argnull[1])
|
||||
{
|
||||
*op->resvalue = BoolGetDatum(true);
|
||||
*op->resnull = false;
|
||||
}
|
||||
else if (fcinfo->argnull[0] || fcinfo->argnull[1])
|
||||
{
|
||||
*op->resvalue = BoolGetDatum(false);
|
||||
*op->resnull = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
Datum eqresult;
|
||||
|
||||
fcinfo->isnull = false;
|
||||
eqresult = op->d.func.fn_addr(fcinfo);
|
||||
*op->resvalue = eqresult;
|
||||
*op->resnull = fcinfo->isnull;
|
||||
}
|
||||
|
||||
EEO_NEXT();
|
||||
}
|
||||
|
||||
EEO_CASE(EEOP_NULLIF)
|
||||
{
|
||||
/*
|
||||
|
Reference in New Issue
Block a user