diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2006-08-12 02:52:06 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2006-08-12 02:52:06 +0000 |
commit | 7a3e30e608a25800a1f7fdfaaca4da3f0ac0fb07 (patch) | |
tree | 215adabe95d76123f6120fc22e4b51b5a1baf4cd /src/backend/commands/prepare.c | |
parent | 5c9e9c0c42904648af5a03fe90db8050e31d603f (diff) | |
download | postgresql-7a3e30e608a25800a1f7fdfaaca4da3f0ac0fb07.tar.gz postgresql-7a3e30e608a25800a1f7fdfaaca4da3f0ac0fb07.zip |
Add INSERT/UPDATE/DELETE RETURNING, with basic docs and regression tests.
plpgsql support to come later. Along the way, convert execMain's
SELECT INTO support into a DestReceiver, in order to eliminate some ugly
special cases.
Jonah Harris and Tom Lane
Diffstat (limited to 'src/backend/commands/prepare.c')
-rw-r--r-- | src/backend/commands/prepare.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/backend/commands/prepare.c b/src/backend/commands/prepare.c index b49069dc2a2..b96426856cd 100644 --- a/src/backend/commands/prepare.c +++ b/src/backend/commands/prepare.c @@ -10,7 +10,7 @@ * Copyright (c) 2002-2006, PostgreSQL Global Development Group * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/commands/prepare.c,v 1.59 2006/08/08 01:23:15 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/commands/prepare.c,v 1.60 2006/08/12 02:52:04 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -447,6 +447,10 @@ FetchPreparedStatementResultDesc(PreparedStatement *stmt) query = (Query *) linitial(stmt->query_list); return ExecCleanTypeFromTL(query->targetList, false); + case PORTAL_ONE_RETURNING: + query = (Query *) linitial(stmt->query_list); + return ExecCleanTypeFromTL(query->returningList, false); + case PORTAL_UTIL_SELECT: query = (Query *) linitial(stmt->query_list); return UtilityTupleDescriptor(query->utilityStmt); @@ -472,6 +476,7 @@ PreparedStatementReturnsTuples(PreparedStatement *stmt) switch (ChoosePortalStrategy(stmt->query_list)) { case PORTAL_ONE_SELECT: + case PORTAL_ONE_RETURNING: case PORTAL_UTIL_SELECT: return true; @@ -499,6 +504,8 @@ FetchPreparedStatementTargetList(PreparedStatement *stmt) if (strategy == PORTAL_ONE_SELECT) return ((Query *) linitial(stmt->query_list))->targetList; + if (strategy == PORTAL_ONE_RETURNING) + return ((Query *) linitial(stmt->query_list))->returningList; if (strategy == PORTAL_UTIL_SELECT) { Node *utilityStmt; |