jumble-benchmark.txt

text/plain

Filename: jumble-benchmark.txt
Type: text/plain
Part: 0
Message: Re: Generating code for query jumbling through gen_node_support.pl
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;
 }