diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2003-01-23 05:10:41 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2003-01-23 05:10:41 +0000 |
commit | 790d5bc9922d515f04b83182b1767a4eaa37cdb7 (patch) | |
tree | 0848e2f31ddfc2c4cb03b8344405f15d110343f5 /src/backend/executor/execUtils.c | |
parent | 742403bdad1884c95c2ad673d6b9e7c341b31a56 (diff) | |
download | postgresql-790d5bc9922d515f04b83182b1767a4eaa37cdb7.tar.gz postgresql-790d5bc9922d515f04b83182b1767a4eaa37cdb7.zip |
Change CREATE TABLE AS / SELECT INTO to create the new table with OIDs,
for backwards compatibility with pre-7.3 behavior. Per discussion on
pgsql-general and pgsql-hackers.
Diffstat (limited to 'src/backend/executor/execUtils.c')
-rw-r--r-- | src/backend/executor/execUtils.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/src/backend/executor/execUtils.c b/src/backend/executor/execUtils.c index 63eede22802..90bd8adf1ae 100644 --- a/src/backend/executor/execUtils.c +++ b/src/backend/executor/execUtils.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.95 2003/01/12 04:03:34 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.96 2003/01/23 05:10:39 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -199,6 +199,7 @@ CreateExecutorState(void) estate->es_rowMark = NIL; estate->es_instrument = false; + estate->es_force_oids = false; estate->es_exprcontexts = NIL; @@ -424,7 +425,6 @@ ExecAssignResultTypeFromOuterPlan(PlanState *planstate) void ExecAssignResultTypeFromTL(PlanState *planstate) { - ResultRelInfo *ri; bool hasoid = false; TupleDesc tupDesc; @@ -444,14 +444,24 @@ ExecAssignResultTypeFromTL(PlanState *planstate) * have to make the decision on a per-relation basis as we initialize * each of the child plans of the topmost Append plan. So, this is * ugly but it works, for now ... + * + * SELECT INTO is also pretty grotty, because we don't yet have the + * INTO relation's descriptor at this point; we have to look aside + * at a flag set by InitPlan(). */ - ri = planstate->state->es_result_relation_info; - if (ri != NULL) + if (planstate->state->es_force_oids) + hasoid = true; + else { - Relation rel = ri->ri_RelationDesc; + ResultRelInfo *ri = planstate->state->es_result_relation_info; - if (rel != NULL) - hasoid = rel->rd_rel->relhasoids; + if (ri != NULL) + { + Relation rel = ri->ri_RelationDesc; + + if (rel != NULL) + hasoid = rel->rd_rel->relhasoids; + } } /* |