Hayden James <[EMAIL PROTECTED]> writes:
> If I create a normal table and a normal view that queries that table I get
> incorrect results when I query the view using the AS alias in the select
> statement.

Turns out it depends on the plan used for the view, but in the
particular case you were exercising there was indeed a problem.
Patch attached if you need it immediately.

                        regards, tom lane


*** src/backend/executor/execUtils.c.orig       Tue Nov 22 16:06:21 2005
--- src/backend/executor/execUtils.c    Wed Nov 23 14:06:10 2005
***************
*** 436,457 ****
  }
  
  /* ----------------
-  *            ExecAssignResultTypeFromOuterPlan
-  * ----------------
-  */
- void
- ExecAssignResultTypeFromOuterPlan(PlanState *planstate)
- {
-       PlanState  *outerPlan;
-       TupleDesc       tupDesc;
- 
-       outerPlan = outerPlanState(planstate);
-       tupDesc = ExecGetResultType(outerPlan);
- 
-       ExecAssignResultType(planstate, tupDesc, false);
- }
- 
- /* ----------------
   *            ExecAssignResultTypeFromTL
   * ----------------
   */
--- 436,441 ----
*** src/backend/executor/nodeHash.c.orig        Tue Nov 22 16:06:22 2005
--- src/backend/executor/nodeHash.c     Wed Nov 23 14:06:10 2005
***************
*** 164,170 ****
         * initialize tuple type. no need to initialize projection info because
         * this node doesn't do projections
         */
!       ExecAssignResultTypeFromOuterPlan(&hashstate->ps);
        hashstate->ps.ps_ProjInfo = NULL;
  
        return hashstate;
--- 164,170 ----
         * initialize tuple type. no need to initialize projection info because
         * this node doesn't do projections
         */
!       ExecAssignResultTypeFromTL(&hashstate->ps);
        hashstate->ps.ps_ProjInfo = NULL;
  
        return hashstate;
*** src/backend/executor/nodeLimit.c.orig       Fri Oct 14 22:59:44 2005
--- src/backend/executor/nodeLimit.c    Wed Nov 23 14:06:11 2005
***************
*** 327,333 ****
         * limit nodes do no projections, so initialize projection info for this
         * node appropriately
         */
!       ExecAssignResultTypeFromOuterPlan(&limitstate->ps);
        limitstate->ps.ps_ProjInfo = NULL;
  
        return limitstate;
--- 327,333 ----
         * limit nodes do no projections, so initialize projection info for this
         * node appropriately
         */
!       ExecAssignResultTypeFromTL(&limitstate->ps);
        limitstate->ps.ps_ProjInfo = NULL;
  
        return limitstate;
*** src/backend/executor/nodeMaterial.c.orig    Fri Oct 14 22:59:44 2005
--- src/backend/executor/nodeMaterial.c Wed Nov 23 14:06:11 2005
***************
*** 195,201 ****
         * initialize tuple type.  no need to initialize projection info because
         * this node doesn't do projections.
         */
!       ExecAssignResultTypeFromOuterPlan(&matstate->ss.ps);
        ExecAssignScanTypeFromOuterPlan(&matstate->ss);
        matstate->ss.ps.ps_ProjInfo = NULL;
  
--- 195,201 ----
         * initialize tuple type.  no need to initialize projection info because
         * this node doesn't do projections.
         */
!       ExecAssignResultTypeFromTL(&matstate->ss.ps);
        ExecAssignScanTypeFromOuterPlan(&matstate->ss);
        matstate->ss.ps.ps_ProjInfo = NULL;
  
*** src/backend/executor/nodeSetOp.c.orig       Fri Oct 14 22:59:45 2005
--- src/backend/executor/nodeSetOp.c    Wed Nov 23 14:06:11 2005
***************
*** 258,264 ****
         * setop nodes do no projections, so initialize projection info for this
         * node appropriately
         */
!       ExecAssignResultTypeFromOuterPlan(&setopstate->ps);
        setopstate->ps.ps_ProjInfo = NULL;
  
        /*
--- 258,264 ----
         * setop nodes do no projections, so initialize projection info for this
         * node appropriately
         */
!       ExecAssignResultTypeFromTL(&setopstate->ps);
        setopstate->ps.ps_ProjInfo = NULL;
  
        /*
*** src/backend/executor/nodeSort.c.orig        Fri Oct 14 22:59:45 2005
--- src/backend/executor/nodeSort.c     Wed Nov 23 14:06:12 2005
***************
*** 193,199 ****
         * initialize tuple type.  no need to initialize projection info because
         * this node doesn't do projections.
         */
!       ExecAssignResultTypeFromOuterPlan(&sortstate->ss.ps);
        ExecAssignScanTypeFromOuterPlan(&sortstate->ss);
        sortstate->ss.ps.ps_ProjInfo = NULL;
  
--- 193,199 ----
         * initialize tuple type.  no need to initialize projection info because
         * this node doesn't do projections.
         */
!       ExecAssignResultTypeFromTL(&sortstate->ss.ps);
        ExecAssignScanTypeFromOuterPlan(&sortstate->ss);
        sortstate->ss.ps.ps_ProjInfo = NULL;
  
*** src/backend/executor/nodeUnique.c.orig      Tue Nov 22 16:06:22 2005
--- src/backend/executor/nodeUnique.c   Wed Nov 23 14:06:12 2005
***************
*** 150,156 ****
         * unique nodes do no projections, so initialize projection info for 
this
         * node appropriately
         */
!       ExecAssignResultTypeFromOuterPlan(&uniquestate->ps);
        uniquestate->ps.ps_ProjInfo = NULL;
  
        /*
--- 150,156 ----
         * unique nodes do no projections, so initialize projection info for 
this
         * node appropriately
         */
!       ExecAssignResultTypeFromTL(&uniquestate->ps);
        uniquestate->ps.ps_ProjInfo = NULL;
  
        /*
*** src/include/executor/executor.h.orig        Fri Oct 14 23:00:27 2005
--- src/include/executor/executor.h     Wed Nov 23 14:06:04 2005
***************
*** 218,224 ****
  extern void ExecAssignExprContext(EState *estate, PlanState *planstate);
  extern void ExecAssignResultType(PlanState *planstate,
                                         TupleDesc tupDesc, bool shouldFree);
- extern void ExecAssignResultTypeFromOuterPlan(PlanState *planstate);
  extern void ExecAssignResultTypeFromTL(PlanState *planstate);
  extern TupleDesc ExecGetResultType(PlanState *planstate);
  extern ProjectionInfo *ExecBuildProjectionInfo(List *targetList,
--- 218,223 ----

---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
       choose an index scan if your joining column's datatypes do not
       match

Reply via email to