Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit34c9c53

Browse files
committed
Reduce code duplication for ExecJust*Var operations.
This is mainly in preparation for adding further fastpath evaluationroutines.Also reorder ExecJust*Var functions to be consistent with the order inwhich they're used.Author: Andres FreundDiscussion:https://postgr.es/m/CAE-ML+9OKSN71+mHtfMD-L24oDp8dGTfaVjDU6U+j+FNAW5kRQ@mail.gmail.com
1 parentd52eaa0 commit34c9c53

File tree

1 file changed

+35
-59
lines changed

1 file changed

+35
-59
lines changed

‎src/backend/executor/execExprInterp.c

Lines changed: 35 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -155,11 +155,11 @@ static void ExecEvalRowNullInt(ExprState *state, ExprEvalStep *op,
155155
staticDatumExecJustInnerVar(ExprState*state,ExprContext*econtext,bool*isnull);
156156
staticDatumExecJustOuterVar(ExprState*state,ExprContext*econtext,bool*isnull);
157157
staticDatumExecJustScanVar(ExprState*state,ExprContext*econtext,bool*isnull);
158-
staticDatumExecJustConst(ExprState*state,ExprContext*econtext,bool*isnull);
159158
staticDatumExecJustAssignInnerVar(ExprState*state,ExprContext*econtext,bool*isnull);
160159
staticDatumExecJustAssignOuterVar(ExprState*state,ExprContext*econtext,bool*isnull);
161160
staticDatumExecJustAssignScanVar(ExprState*state,ExprContext*econtext,bool*isnull);
162161
staticDatumExecJustApplyFuncToCase(ExprState*state,ExprContext*econtext,bool*isnull);
162+
staticDatumExecJustConst(ExprState*state,ExprContext*econtext,bool*isnull);
163163

164164

165165
/*
@@ -1966,13 +1966,12 @@ ShutdownTupleDescRef(Datum arg)
19661966
* Fast-path functions, for very simple expressions
19671967
*/
19681968

1969-
/*Simple reference to innerVar */
1970-
staticDatum
1971-
ExecJustInnerVar(ExprState*state,ExprContext*econtext,bool*isnull)
1969+
/*implementation of ExecJust(Inner|Outer|Scan)Var */
1970+
staticpg_attribute_always_inlineDatum
1971+
ExecJustVarImpl(ExprState*state,TupleTableSlot*slot,bool*isnull)
19721972
{
19731973
ExprEvalStep*op=&state->steps[1];
19741974
intattnum=op->d.var.attnum+1;
1975-
TupleTableSlot*slot=econtext->ecxt_innertuple;
19761975

19771976
CheckOpSlotCompatibility(&state->steps[0],slot);
19781977

@@ -1984,52 +1983,34 @@ ExecJustInnerVar(ExprState *state, ExprContext *econtext, bool *isnull)
19841983
returnslot_getattr(slot,attnum,isnull);
19851984
}
19861985

1987-
/* Simple reference toouter Var */
1986+
/* Simple reference toinner Var */
19881987
staticDatum
1989-
ExecJustOuterVar(ExprState*state,ExprContext*econtext,bool*isnull)
1988+
ExecJustInnerVar(ExprState*state,ExprContext*econtext,bool*isnull)
19901989
{
1991-
ExprEvalStep*op=&state->steps[1];
1992-
intattnum=op->d.var.attnum+1;
1993-
TupleTableSlot*slot=econtext->ecxt_outertuple;
1994-
1995-
CheckOpSlotCompatibility(&state->steps[0],slot);
1996-
1997-
/* See comments in ExecJustInnerVar */
1998-
returnslot_getattr(slot,attnum,isnull);
1990+
returnExecJustVarImpl(state,econtext->ecxt_innertuple,isnull);
19991991
}
20001992

2001-
/* Simple reference toscan Var */
1993+
/* Simple reference toouter Var */
20021994
staticDatum
2003-
ExecJustScanVar(ExprState*state,ExprContext*econtext,bool*isnull)
1995+
ExecJustOuterVar(ExprState*state,ExprContext*econtext,bool*isnull)
20041996
{
2005-
ExprEvalStep*op=&state->steps[1];
2006-
intattnum=op->d.var.attnum+1;
2007-
TupleTableSlot*slot=econtext->ecxt_scantuple;
2008-
2009-
CheckOpSlotCompatibility(&state->steps[0],slot);
2010-
2011-
/* See comments in ExecJustInnerVar */
2012-
returnslot_getattr(slot,attnum,isnull);
1997+
returnExecJustVarImpl(state,econtext->ecxt_outertuple,isnull);
20131998
}
20141999

2015-
/* SimpleConst expression */
2000+
/* Simplereference to scan Var */
20162001
staticDatum
2017-
ExecJustConst(ExprState*state,ExprContext*econtext,bool*isnull)
2002+
ExecJustScanVar(ExprState*state,ExprContext*econtext,bool*isnull)
20182003
{
2019-
ExprEvalStep*op=&state->steps[0];
2020-
2021-
*isnull=op->d.constval.isnull;
2022-
returnop->d.constval.value;
2004+
returnExecJustVarImpl(state,econtext->ecxt_scantuple,isnull);
20232005
}
20242006

2025-
/*Evaluate inner Var and assign to appropriate columnofresult tuple */
2026-
staticDatum
2027-
ExecJustAssignInnerVar(ExprState*state,ExprContext*econtext,bool*isnull)
2007+
/*implementationofExecJustAssign(Inner|Outer|Scan)Var */
2008+
staticpg_attribute_always_inlineDatum
2009+
ExecJustAssignVarImpl(ExprState*state,TupleTableSlot*inslot,bool*isnull)
20282010
{
20292011
ExprEvalStep*op=&state->steps[1];
20302012
intattnum=op->d.assign_var.attnum+1;
20312013
intresultnum=op->d.assign_var.resultnum;
2032-
TupleTableSlot*inslot=econtext->ecxt_innertuple;
20332014
TupleTableSlot*outslot=state->resultslot;
20342015

20352016
CheckOpSlotCompatibility(&state->steps[0],inslot);
@@ -2047,40 +2028,25 @@ ExecJustAssignInnerVar(ExprState *state, ExprContext *econtext, bool *isnull)
20472028
return0;
20482029
}
20492030

2031+
/* Evaluate inner Var and assign to appropriate column of result tuple */
2032+
staticDatum
2033+
ExecJustAssignInnerVar(ExprState*state,ExprContext*econtext,bool*isnull)
2034+
{
2035+
returnExecJustAssignVarImpl(state,econtext->ecxt_innertuple,isnull);
2036+
}
2037+
20502038
/* Evaluate outer Var and assign to appropriate column of result tuple */
20512039
staticDatum
20522040
ExecJustAssignOuterVar(ExprState*state,ExprContext*econtext,bool*isnull)
20532041
{
2054-
ExprEvalStep*op=&state->steps[1];
2055-
intattnum=op->d.assign_var.attnum+1;
2056-
intresultnum=op->d.assign_var.resultnum;
2057-
TupleTableSlot*inslot=econtext->ecxt_outertuple;
2058-
TupleTableSlot*outslot=state->resultslot;
2059-
2060-
CheckOpSlotCompatibility(&state->steps[0],inslot);
2061-
2062-
/* See comments in ExecJustAssignInnerVar */
2063-
outslot->tts_values[resultnum]=
2064-
slot_getattr(inslot,attnum,&outslot->tts_isnull[resultnum]);
2065-
return0;
2042+
returnExecJustAssignVarImpl(state,econtext->ecxt_outertuple,isnull);
20662043
}
20672044

20682045
/* Evaluate scan Var and assign to appropriate column of result tuple */
20692046
staticDatum
20702047
ExecJustAssignScanVar(ExprState*state,ExprContext*econtext,bool*isnull)
20712048
{
2072-
ExprEvalStep*op=&state->steps[1];
2073-
intattnum=op->d.assign_var.attnum+1;
2074-
intresultnum=op->d.assign_var.resultnum;
2075-
TupleTableSlot*inslot=econtext->ecxt_scantuple;
2076-
TupleTableSlot*outslot=state->resultslot;
2077-
2078-
CheckOpSlotCompatibility(&state->steps[0],inslot);
2079-
2080-
/* See comments in ExecJustAssignInnerVar */
2081-
outslot->tts_values[resultnum]=
2082-
slot_getattr(inslot,attnum,&outslot->tts_isnull[resultnum]);
2083-
return0;
2049+
returnExecJustAssignVarImpl(state,econtext->ecxt_scantuple,isnull);
20842050
}
20852051

20862052
/* Evaluate CASE_TESTVAL and apply a strict function to it */
@@ -2120,6 +2086,16 @@ ExecJustApplyFuncToCase(ExprState *state, ExprContext *econtext, bool *isnull)
21202086
returnd;
21212087
}
21222088

2089+
/* Simple Const expression */
2090+
staticDatum
2091+
ExecJustConst(ExprState*state,ExprContext*econtext,bool*isnull)
2092+
{
2093+
ExprEvalStep*op=&state->steps[0];
2094+
2095+
*isnull=op->d.constval.isnull;
2096+
returnop->d.constval.value;
2097+
}
2098+
21232099
#if defined(EEO_USE_COMPUTED_GOTO)
21242100
/*
21252101
* Comparator used when building address->opcode lookup table for

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp