diff options
| author | Tom Lane | 2006-12-04 02:06:55 +0000 |
|---|---|---|
| committer | Tom Lane | 2006-12-04 02:06:55 +0000 |
| commit | 8dcc8e376149adcfba012a9e9b7b0692bcbff9a2 (patch) | |
| tree | be2c6c7978e6a041ee7a0b70bbd833d391108500 /src/include | |
| parent | 406d028a9bb1a531d8e413918709f8d99f5c7783 (diff) | |
Refactor ExecGetJunkAttribute to avoid searching for junk attributes
by name on each and every row processed. Profiling suggests this may
buy a percent or two for simple UPDATE scenarios, which isn't huge,
but when it's so easy to get ...
Diffstat (limited to 'src/include')
| -rw-r--r-- | src/include/executor/executor.h | 8 | ||||
| -rw-r--r-- | src/include/nodes/execnodes.h | 11 |
2 files changed, 13 insertions, 6 deletions
diff --git a/src/include/executor/executor.h b/src/include/executor/executor.h index d030b4deea4..beb103c88e3 100644 --- a/src/include/executor/executor.h +++ b/src/include/executor/executor.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/executor/executor.h,v 1.130 2006/10/04 00:30:08 momjian Exp $ + * $PostgreSQL: pgsql/src/include/executor/executor.h,v 1.131 2006/12/04 02:06:55 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -110,8 +110,10 @@ extern JunkFilter *ExecInitJunkFilter(List *targetList, bool hasoid, extern JunkFilter *ExecInitJunkFilterConversion(List *targetList, TupleDesc cleanTupType, TupleTableSlot *slot); -extern bool ExecGetJunkAttribute(JunkFilter *junkfilter, TupleTableSlot *slot, - char *attrName, Datum *value, bool *isNull); +extern AttrNumber ExecFindJunkAttribute(JunkFilter *junkfilter, + const char *attrName); +extern Datum ExecGetJunkAttribute(TupleTableSlot *slot, AttrNumber attno, + bool *isNull); extern TupleTableSlot *ExecFilterJunk(JunkFilter *junkfilter, TupleTableSlot *slot); extern HeapTuple ExecRemoveJunk(JunkFilter *junkfilter, TupleTableSlot *slot); diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h index 5cbe5a54287..273d5c33261 100644 --- a/src/include/nodes/execnodes.h +++ b/src/include/nodes/execnodes.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/nodes/execnodes.h,v 1.161 2006/09/28 20:51:42 tgl Exp $ + * $PostgreSQL: pgsql/src/include/nodes/execnodes.h,v 1.162 2006/12/04 02:06:55 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -226,7 +226,8 @@ typedef struct ProjectionInfo * the tuple to be updated. This is needed to do the update, but we * don't want the ctid to be part of the stored new tuple! So, we * apply a "junk filter" to remove the junk attributes and form the - * real output tuple. + * real output tuple. The junkfilter code also provides routines to + * extract the values of the junk attribute(s) from the input tuple. * * targetList: the original target list (including junk attributes). * cleanTupType: the tuple descriptor for the "clean" tuple (with @@ -235,6 +236,9 @@ typedef struct ProjectionInfo * attribute numbers of the "original" tuple and the * attribute numbers of the "clean" tuple. * resultSlot: tuple slot used to hold cleaned tuple. + * junkAttNo: not used by junkfilter code. Can be used by caller + * to remember the attno of a specific junk attribute + * (execMain.c stores the "ctid" attno here). * ---------------- */ typedef struct JunkFilter @@ -244,6 +248,7 @@ typedef struct JunkFilter TupleDesc jf_cleanTupType; AttrNumber *jf_cleanMap; TupleTableSlot *jf_resultSlot; + AttrNumber jf_junkAttNo; } JunkFilter; /* ---------------- @@ -352,7 +357,7 @@ typedef struct ExecRowMark Index rti; /* its range table index */ bool forUpdate; /* true = FOR UPDATE, false = FOR SHARE */ bool noWait; /* NOWAIT option */ - char resname[32]; /* name for its ctid junk attribute */ + AttrNumber ctidAttNo; /* resno of its ctid junk attribute */ } ExecRowMark; |
