Actually ... it's pretty silly that parse_oper.c doesn't set up the
opfuncid of an OpExpr initially, considering that it has the information at hand already. We'll still treat opfuncid as a cache rather than a guaranteed-valid value, but this change saves one more syscache lookup in the normal code path.
This commit is contained in:
parent
6342f36d87
commit
ef48ed4c86
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/parser/parse_oper.c,v 1.97 2007/11/15 21:14:37 momjian Exp $
|
* $PostgreSQL: pgsql/src/backend/parser/parse_oper.c,v 1.98 2007/11/22 19:40:25 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -939,7 +939,7 @@ make_scalar_array_op(ParseState *pstate, List *opname,
|
|||||||
/* and build the expression node */
|
/* and build the expression node */
|
||||||
result = makeNode(ScalarArrayOpExpr);
|
result = makeNode(ScalarArrayOpExpr);
|
||||||
result->opno = oprid(tup);
|
result->opno = oprid(tup);
|
||||||
result->opfuncid = InvalidOid;
|
result->opfuncid = opform->oprcode;
|
||||||
result->useOr = useOr;
|
result->useOr = useOr;
|
||||||
result->args = args;
|
result->args = args;
|
||||||
|
|
||||||
@ -1011,7 +1011,7 @@ make_op_expr(ParseState *pstate, Operator op,
|
|||||||
/* and build the expression node */
|
/* and build the expression node */
|
||||||
result = makeNode(OpExpr);
|
result = makeNode(OpExpr);
|
||||||
result->opno = oprid(op);
|
result->opno = oprid(op);
|
||||||
result->opfuncid = InvalidOid;
|
result->opfuncid = opform->oprcode;
|
||||||
result->opresulttype = rettype;
|
result->opresulttype = rettype;
|
||||||
result->opretset = get_func_retset(opform->oprcode);
|
result->opretset = get_func_retset(opform->oprcode);
|
||||||
result->args = args;
|
result->args = args;
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
* Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/include/nodes/primnodes.h,v 1.135 2007/11/15 22:25:17 momjian Exp $
|
* $PostgreSQL: pgsql/src/include/nodes/primnodes.h,v 1.136 2007/11/22 19:40:25 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -302,7 +302,7 @@ typedef struct FuncExpr
|
|||||||
*
|
*
|
||||||
* Note that opfuncid is not necessarily filled in immediately on creation
|
* Note that opfuncid is not necessarily filled in immediately on creation
|
||||||
* of the node. The planner makes sure it is valid before passing the node
|
* of the node. The planner makes sure it is valid before passing the node
|
||||||
* tree to the executor, but during parsing/planning opfuncid is typically 0.
|
* tree to the executor, but during parsing/planning opfuncid can be 0.
|
||||||
*/
|
*/
|
||||||
typedef struct OpExpr
|
typedef struct OpExpr
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user