PG-300: Fix potential duplicate queryid issue. (#262)

There is some potential problem where there is a chance
that we got a duplicate queryid. This patch will eliminate
that problem.
pull/265/head
Ibrar Ahmed 2022-06-17 16:32:55 +05:00 committed by GitHub
parent 454b35e6e1
commit 1f9b1feff6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 18 additions and 5 deletions

View File

@ -181,7 +181,7 @@ static void pg_stat_monitor_internal(FunctionCallInfo fcinfo,
static void AppendJumble(JumbleState *jstate,
const unsigned char *item, Size size);
static void JumbleQuery(JumbleState *jstate, Query *query);
static void JumbleRangeTable(JumbleState *jstate, List *rtable);
static void JumbleRangeTable(JumbleState *jstate, List *rtable, CmdType cmd_type);
static void JumbleExpr(JumbleState *jstate, Node *node);
static void RecordConstLocation(JumbleState *jstate, int location);
/*
@ -2233,9 +2233,19 @@ JumbleQuery(JumbleState *jstate, Query *query)
APP_JUMB(query->commandType);
/* resultRelation is usually predictable from commandType */
JumbleExpr(jstate, (Node *) query->cteList);
JumbleRangeTable(jstate, query->rtable);
JumbleExpr(jstate, (Node *) query->jointree);
JumbleExpr(jstate, (Node *) query->targetList);
JumbleRangeTable(jstate, query->rtable, query->commandType);
/*
* Skip jointree and targetlist in case of insert statment
* to avoid queryid duplication problem.
*/
if (query->commandType != CMD_INSERT)
{
JumbleExpr(jstate, (Node *) query->jointree);
JumbleExpr(jstate, (Node *) query->targetList);
}
JumbleExpr(jstate, (Node *) query->onConflict);
JumbleExpr(jstate, (Node *) query->returningList);
JumbleExpr(jstate, (Node *) query->groupClause);
@ -2254,7 +2264,7 @@ JumbleQuery(JumbleState *jstate, Query *query)
* Jumble a range table
*/
static void
JumbleRangeTable(JumbleState *jstate, List *rtable)
JumbleRangeTable(JumbleState *jstate, List *rtable, CmdType cmd_type)
{
ListCell *lc = NULL;
@ -2262,6 +2272,9 @@ JumbleRangeTable(JumbleState *jstate, List *rtable)
{
RangeTblEntry *rte = lfirst_node(RangeTblEntry, lc);
if (rte->rtekind != RTE_RELATION && cmd_type == CMD_INSERT)
continue;
APP_JUMB(rte->rtekind);
switch (rte->rtekind)
{