diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2003-03-11 19:40:24 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2003-03-11 19:40:24 +0000 |
commit | 6261c75014c9948837d9d025493ef18b8f833f70 (patch) | |
tree | f7d75ca8cfa6a093d0fde2f707ae48e90ced7771 /src/backend/executor/execMain.c | |
parent | e4704001ea4c3d63b53e8783859ff598ef2f69e5 (diff) | |
download | postgresql-6261c75014c9948837d9d025493ef18b8f833f70.tar.gz postgresql-6261c75014c9948837d9d025493ef18b8f833f70.zip |
Implement SQL92-compatible FIRST, LAST, ABSOLUTE n, RELATIVE n options
for FETCH and MOVE.
Diffstat (limited to 'src/backend/executor/execMain.c')
-rw-r--r-- | src/backend/executor/execMain.c | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index f037e72fd91..638cc61bef4 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -26,7 +26,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.201 2003/03/10 03:53:49 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.202 2003/03/11 19:40:22 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -287,6 +287,42 @@ ExecutorEnd(QueryDesc *queryDesc) queryDesc->planstate = NULL; } +/* ---------------------------------------------------------------- + * ExecutorRewind + * + * This routine may be called on an open queryDesc to rewind it + * to the start. + * ---------------------------------------------------------------- + */ +void +ExecutorRewind(QueryDesc *queryDesc) +{ + EState *estate; + MemoryContext oldcontext; + + /* sanity checks */ + Assert(queryDesc != NULL); + + estate = queryDesc->estate; + + Assert(estate != NULL); + + /* It's probably not sensible to rescan updating queries */ + Assert(queryDesc->operation == CMD_SELECT); + + /* + * Switch into per-query memory context + */ + oldcontext = MemoryContextSwitchTo(estate->es_query_cxt); + + /* + * rescan plan + */ + ExecReScan(queryDesc->planstate, NULL); + + MemoryContextSwitchTo(oldcontext); +} + /* * ExecCheckRTPerms |