77 * Portions Copyright (c) 1994-5, Regents of the University of California
88 *
99 * IDENTIFICATION
10- * $PostgreSQL: pgsql/src/backend/commands/explain.c,v 1.146 2006/03/05 15:58:24 momjian Exp $
10+ * $PostgreSQL: pgsql/src/backend/commands/explain.c,v 1.147 2006/04/08 18:49:52 tgl Exp $
1111 *
1212 *-------------------------------------------------------------------------
1313 */
@@ -58,7 +58,7 @@ static void show_upper_qual(List *qual, const char *qlabel,
5858const char * outer_name ,int outer_varno ,Plan * outer_plan ,
5959const char * inner_name ,int inner_varno ,Plan * inner_plan ,
6060StringInfo str ,int indent ,ExplainState * es );
61- static void show_sort_keys (List * tlist ,int nkeys ,AttrNumber * keycols ,
61+ static void show_sort_keys (Plan * sortplan ,int nkeys ,AttrNumber * keycols ,
6262const char * qlabel ,
6363StringInfo str ,int indent ,ExplainState * es );
6464
@@ -815,7 +815,7 @@ explain_outNode(StringInfo str,
815815str ,indent ,es );
816816break ;
817817case T_Sort :
818- show_sort_keys (plan -> targetlist ,
818+ show_sort_keys (plan ,
819819 ((Sort * )plan )-> numCols ,
820820 ((Sort * )plan )-> sortColIdx ,
821821"Sort Key" ,
@@ -1030,8 +1030,6 @@ show_scan_qual(List *qual, const char *qlabel,
10301030int scanrelid ,Plan * outer_plan ,
10311031StringInfo str ,int indent ,ExplainState * es )
10321032{
1033- RangeTblEntry * rte ;
1034- Node * scancontext ;
10351033Node * outercontext ;
10361034List * context ;
10371035Node * node ;
@@ -1045,11 +1043,6 @@ show_scan_qual(List *qual, const char *qlabel,
10451043/* Convert AND list to explicit AND */
10461044node = (Node * )make_ands_explicit (qual );
10471045
1048- /* Generate deparse context */
1049- Assert (scanrelid > 0 && scanrelid <=list_length (es -> rtable ));
1050- rte = rt_fetch (scanrelid ,es -> rtable );
1051- scancontext = deparse_context_for_rte (rte );
1052-
10531046/*
10541047 * If we have an outer plan that is referenced by the qual, add it to the
10551048 * deparse context. If not, don't (so that we don't force prefixes
@@ -1061,18 +1054,17 @@ show_scan_qual(List *qual, const char *qlabel,
10611054
10621055if (bms_is_member (OUTER ,varnos ))
10631056outercontext = deparse_context_for_subplan ("outer" ,
1064- outer_plan -> targetlist ,
1065- es -> rtable );
1057+ (Node * )outer_plan );
10661058else
10671059outercontext = NULL ;
10681060bms_free (varnos );
10691061}
10701062else
10711063outercontext = NULL ;
10721064
1073- context = deparse_context_for_plan (scanrelid , scancontext ,
1074- OUTER , outercontext ,
1075- NIL );
1065+ context = deparse_context_for_plan (OUTER , outercontext ,
1066+ 0 , NULL ,
1067+ es -> rtable );
10761068
10771069/* Deparse the expression */
10781070exprstr = deparse_expression (node ,context , (outercontext != NULL ), false);
@@ -1106,19 +1098,17 @@ show_upper_qual(List *qual, const char *qlabel,
11061098/* Generate deparse context */
11071099if (outer_plan )
11081100outercontext = deparse_context_for_subplan (outer_name ,
1109- outer_plan -> targetlist ,
1110- es -> rtable );
1101+ (Node * )outer_plan );
11111102else
11121103outercontext = NULL ;
11131104if (inner_plan )
11141105innercontext = deparse_context_for_subplan (inner_name ,
1115- inner_plan -> targetlist ,
1116- es -> rtable );
1106+ (Node * )inner_plan );
11171107else
11181108innercontext = NULL ;
11191109context = deparse_context_for_plan (outer_varno ,outercontext ,
11201110inner_varno ,innercontext ,
1121- NIL );
1111+ es -> rtable );
11221112
11231113/* Deparse the expression */
11241114node = (Node * )make_ands_explicit (qual );
@@ -1134,7 +1124,7 @@ show_upper_qual(List *qual, const char *qlabel,
11341124 * Show the sort keys for a Sort node.
11351125 */
11361126static void
1137- show_sort_keys (List * tlist ,int nkeys ,AttrNumber * keycols ,
1127+ show_sort_keys (Plan * sortplan ,int nkeys ,AttrNumber * keycols ,
11381128const char * qlabel ,
11391129StringInfo str ,int indent ,ExplainState * es )
11401130{
@@ -1159,17 +1149,16 @@ show_sort_keys(List *tlist, int nkeys, AttrNumber *keycols,
11591149 * looking at a dummy tlist generated by prepunion.c; if there are Vars
11601150 * with zero varno, use the tlist itself to determine their names.
11611151 */
1162- varnos = pull_varnos ((Node * )tlist );
1152+ varnos = pull_varnos ((Node * )sortplan -> targetlist );
11631153if (bms_is_member (0 ,varnos ))
11641154{
11651155Node * outercontext ;
11661156
11671157outercontext = deparse_context_for_subplan ("sort" ,
1168- tlist ,
1169- es -> rtable );
1158+ (Node * )sortplan );
11701159context = deparse_context_for_plan (0 ,outercontext ,
117111600 ,NULL ,
1172- NIL );
1161+ es -> rtable );
11731162useprefix = false;
11741163}
11751164else
@@ -1185,7 +1174,7 @@ show_sort_keys(List *tlist, int nkeys, AttrNumber *keycols,
11851174{
11861175/* find key expression in tlist */
11871176AttrNumber keyresno = keycols [keyno ];
1188- TargetEntry * target = get_tle_by_resno (tlist ,keyresno );
1177+ TargetEntry * target = get_tle_by_resno (sortplan -> targetlist ,keyresno );
11891178
11901179if (!target )
11911180elog (ERROR ,"no tlist entry for key %d" ,keyresno );