7
7
* Portions Copyright (c) 1994-5, Regents of the University of California
8
8
*
9
9
* 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 $
11
11
*
12
12
*-------------------------------------------------------------------------
13
13
*/
@@ -58,7 +58,7 @@ static void show_upper_qual(List *qual, const char *qlabel,
58
58
const char * outer_name , int outer_varno , Plan * outer_plan ,
59
59
const char * inner_name , int inner_varno , Plan * inner_plan ,
60
60
StringInfo 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 ,
62
62
const char * qlabel ,
63
63
StringInfo str , int indent , ExplainState * es );
64
64
@@ -815,7 +815,7 @@ explain_outNode(StringInfo str,
815
815
str , indent , es );
816
816
break ;
817
817
case T_Sort :
818
- show_sort_keys (plan -> targetlist ,
818
+ show_sort_keys (plan ,
819
819
((Sort * ) plan )-> numCols ,
820
820
((Sort * ) plan )-> sortColIdx ,
821
821
"Sort Key" ,
@@ -1030,8 +1030,6 @@ show_scan_qual(List *qual, const char *qlabel,
1030
1030
int scanrelid , Plan * outer_plan ,
1031
1031
StringInfo str , int indent , ExplainState * es )
1032
1032
{
1033
- RangeTblEntry * rte ;
1034
- Node * scancontext ;
1035
1033
Node * outercontext ;
1036
1034
List * context ;
1037
1035
Node * node ;
@@ -1045,11 +1043,6 @@ show_scan_qual(List *qual, const char *qlabel,
1045
1043
/* Convert AND list to explicit AND */
1046
1044
node = (Node * ) make_ands_explicit (qual );
1047
1045
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
-
1053
1046
/*
1054
1047
* If we have an outer plan that is referenced by the qual, add it to the
1055
1048
* 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,
1061
1054
1062
1055
if (bms_is_member (OUTER , varnos ))
1063
1056
outercontext = deparse_context_for_subplan ("outer" ,
1064
- outer_plan -> targetlist ,
1065
- es -> rtable );
1057
+ (Node * ) outer_plan );
1066
1058
else
1067
1059
outercontext = NULL ;
1068
1060
bms_free (varnos );
1069
1061
}
1070
1062
else
1071
1063
outercontext = NULL ;
1072
1064
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 );
1076
1068
1077
1069
/* Deparse the expression */
1078
1070
exprstr = deparse_expression (node , context , (outercontext != NULL ), false);
@@ -1106,19 +1098,17 @@ show_upper_qual(List *qual, const char *qlabel,
1106
1098
/* Generate deparse context */
1107
1099
if (outer_plan )
1108
1100
outercontext = deparse_context_for_subplan (outer_name ,
1109
- outer_plan -> targetlist ,
1110
- es -> rtable );
1101
+ (Node * ) outer_plan );
1111
1102
else
1112
1103
outercontext = NULL ;
1113
1104
if (inner_plan )
1114
1105
innercontext = deparse_context_for_subplan (inner_name ,
1115
- inner_plan -> targetlist ,
1116
- es -> rtable );
1106
+ (Node * ) inner_plan );
1117
1107
else
1118
1108
innercontext = NULL ;
1119
1109
context = deparse_context_for_plan (outer_varno , outercontext ,
1120
1110
inner_varno , innercontext ,
1121
- NIL );
1111
+ es -> rtable );
1122
1112
1123
1113
/* Deparse the expression */
1124
1114
node = (Node * ) make_ands_explicit (qual );
@@ -1134,7 +1124,7 @@ show_upper_qual(List *qual, const char *qlabel,
1134
1124
* Show the sort keys for a Sort node.
1135
1125
*/
1136
1126
static void
1137
- show_sort_keys (List * tlist , int nkeys , AttrNumber * keycols ,
1127
+ show_sort_keys (Plan * sortplan , int nkeys , AttrNumber * keycols ,
1138
1128
const char * qlabel ,
1139
1129
StringInfo str , int indent , ExplainState * es )
1140
1130
{
@@ -1159,17 +1149,16 @@ show_sort_keys(List *tlist, int nkeys, AttrNumber *keycols,
1159
1149
* looking at a dummy tlist generated by prepunion.c; if there are Vars
1160
1150
* with zero varno, use the tlist itself to determine their names.
1161
1151
*/
1162
- varnos = pull_varnos ((Node * ) tlist );
1152
+ varnos = pull_varnos ((Node * ) sortplan -> targetlist );
1163
1153
if (bms_is_member (0 , varnos ))
1164
1154
{
1165
1155
Node * outercontext ;
1166
1156
1167
1157
outercontext = deparse_context_for_subplan ("sort" ,
1168
- tlist ,
1169
- es -> rtable );
1158
+ (Node * ) sortplan );
1170
1159
context = deparse_context_for_plan (0 , outercontext ,
1171
1160
0 , NULL ,
1172
- NIL );
1161
+ es -> rtable );
1173
1162
useprefix = false;
1174
1163
}
1175
1164
else
@@ -1185,7 +1174,7 @@ show_sort_keys(List *tlist, int nkeys, AttrNumber *keycols,
1185
1174
{
1186
1175
/* find key expression in tlist */
1187
1176
AttrNumber keyresno = keycols [keyno ];
1188
- TargetEntry * target = get_tle_by_resno (tlist , keyresno );
1177
+ TargetEntry * target = get_tle_by_resno (sortplan -> targetlist , keyresno );
1189
1178
1190
1179
if (!target )
1191
1180
elog (ERROR , "no tlist entry for key %d" , keyresno );
0 commit comments