diff --git a/src/backend/nodes/queryjumblefuncs.c b/src/backend/nodes/queryjumblefuncs.c index 16084842a3..c66090bde3 100644 --- a/src/backend/nodes/queryjumblefuncs.c +++ b/src/backend/nodes/queryjumblefuncs.c @@ -101,10 +101,14 @@ CleanQuerytext(const char *query, int *location, int *len) JumbleState * JumbleQuery(Query *query, const char *querytext) { +#define MAX_QUERY_COMPUTE 50000000 + JumbleState *jstate = NULL; Assert(IsQueryIdEnabled()); + elog(WARNING, "start JumbleQuery"); + if (query->utilityStmt) { query->queryId = compute_utility_query_id(querytext, @@ -114,18 +118,26 @@ JumbleQuery(Query *query, const char *querytext) else { jstate = (JumbleState *) palloc(sizeof(JumbleState)); - - /* Set up workspace for query jumbling */ jstate->jumble = (unsigned char *) palloc(JUMBLE_SIZE); - jstate->jumble_len = 0; jstate->clocations_buf_size = 32; jstate->clocations = (LocationLen *) palloc(jstate->clocations_buf_size * sizeof(LocationLen)); - jstate->clocations_count = 0; - jstate->highest_extern_param_id = 0; - /* Compute query ID and mark the Query node with it */ - JumbleQueryInternal(jstate, query); + for (int i = 0; i < MAX_QUERY_COMPUTE ; i++) + { + /* Set up workspace for query jumbling */ + memset(jstate->jumble, 0, sizeof(JUMBLE_SIZE)); + jstate->jumble_len = 0; + jstate->clocations_buf_size = 32; + memset(jstate->clocations, 0, + jstate->clocations_buf_size * sizeof(LocationLen)); + + jstate->clocations_count = 0; + jstate->highest_extern_param_id = 0; + + /* Compute query ID and mark the Query node with it */ + JumbleQueryInternal(jstate, query); + } query->queryId = DatumGetUInt64(hash_any_extended(jstate->jumble, jstate->jumble_len, 0)); @@ -138,6 +150,8 @@ JumbleQuery(Query *query, const char *querytext) query->queryId = UINT64CONST(1); } + elog(WARNING, "end JumbleQuery"); + return jstate; }