v5-0001-exposse_explained_stmt_location.no-cfbot

application/octet-stream

Filename: v5-0001-exposse_explained_stmt_location.no-cfbot
Type: application/octet-stream
Part: 0
Message: Re: Set query_id for query contained in utility statement
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c
index ca8e9201f7..7adf0d0975 100644
--- a/src/backend/parser/analyze.c
+++ b/src/backend/parser/analyze.c
@@ -3004,6 +3004,12 @@ transformExplainStmt(ParseState *pstate, ExplainStmt *stmt)
 			setup_parse_variable_parameters(pstate, &paramTypes, &numParams);
 	}
 
+	if (IsA(stmt->query, SelectStmt))
+	{
+		SelectStmt *sel_stmt = (SelectStmt *) stmt->query;
+		sel_stmt->location = stmt->location;
+	}
+
 	/* transform contained query, allowing SELECT INTO */
 	stmt->query = (Node *) transformOptionalSelectInto(pstate, stmt->query);
 
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 5a800f1e6b..7f6793f226 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -11978,6 +11978,7 @@ ExplainStmt:
 					ExplainStmt *n = makeNode(ExplainStmt);
 
 					n->query = $2;
+					n->location = @2;
 					n->options = NIL;;
 					$$ = (Node *) n;
 				}
@@ -11986,6 +11987,7 @@ ExplainStmt:
 					ExplainStmt *n = makeNode(ExplainStmt);
 
 					n->query = $4;
+					n->location = @4;
 					n->options = list_make1(makeDefElem("analyze", NULL, @2));
 					if ($3)
 						n->options = lappend(n->options,
@@ -11997,6 +11999,7 @@ ExplainStmt:
 					ExplainStmt *n = makeNode(ExplainStmt);
 
 					n->query = $3;
+					n->location = @3;
 					n->options = list_make1(makeDefElem("verbose", NULL, @2));
 					$$ = (Node *) n;
 				}
@@ -12005,6 +12008,7 @@ ExplainStmt:
 					ExplainStmt *n = makeNode(ExplainStmt);
 
 					n->query = $5;
+					n->location = @5;
 					n->options = $3;
 					$$ = (Node *) n;
 				}
diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h
index aa73e2b242..d30869595e 100644
--- a/src/include/nodes/parsenodes.h
+++ b/src/include/nodes/parsenodes.h
@@ -3893,6 +3893,7 @@ typedef struct ExplainStmt
 	NodeTag		type;
 	Node	   *query;			/* the query (see comments above) */
 	List	   *options;		/* list of DefElem nodes */
+	ParseLoc	location;		/* location of the statement being explained */
 } ExplainStmt;
 
 /* ----------------------