aboutsummaryrefslogtreecommitdiff
path: root/src/backend/optimizer/plan/createplan.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2003-05-12 00:17:03 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2003-05-12 00:17:03 +0000
commitd97c9b366273a49f0469184df9dfb3a312b2f3ff (patch)
tree38e38e6c1d443aa69fb7418a2b0685e10f52de36 /src/backend/optimizer/plan/createplan.c
parenta7c50cd92b17885d926fdf4f0df084849f285d58 (diff)
downloadpostgresql-d97c9b366273a49f0469184df9dfb3a312b2f3ff.tar.gz
postgresql-d97c9b366273a49f0469184df9dfb3a312b2f3ff.zip
Apply fixes for problems with dropped columns whose types have also been
dropped. The simplest fix for INSERT/UPDATE cases turns out to be for preptlist.c to insert NULLs of a known-good type (I used INT4) rather than making them match the deleted column's type. Since the representation of NULL is actually datatype-independent, this should work fine. I also re-reverted the patch to disable the use_physical_tlist optimization in the presence of dropped columns. It still doesn't look worth the trouble to be smarter, if there are no other bugs to fix. Added a regression test to catch future problems in this area.
Diffstat (limited to 'src/backend/optimizer/plan/createplan.c')
-rw-r--r--src/backend/optimizer/plan/createplan.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c
index e9dd994cd21..f50eb792811 100644
--- a/src/backend/optimizer/plan/createplan.c
+++ b/src/backend/optimizer/plan/createplan.c
@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.141 2003/05/11 20:25:50 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.142 2003/05/12 00:17:03 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -296,6 +296,12 @@ use_physical_tlist(RelOptInfo *rel)
if (rel->reloptkind != RELOPT_BASEREL)
return false;
/*
+ * Can't do it if relation contains dropped columns. This is detected
+ * in plancat.c, see notes there.
+ */
+ if (rel->varlist == NIL)
+ return false;
+ /*
* Can't do it if any system columns are requested, either. (This could
* possibly be fixed but would take some fragile assumptions in setrefs.c,
* I think.)