@@ -44,6 +44,7 @@ void_PG_init(void);
4444static bool shmem_initialized = false;
4545
4646/* Hooks */
47+ static ExecutorStart_hook_type prev_ExecutorStart = NULL ;
4748static ExecutorEnd_hook_type prev_ExecutorEnd = NULL ;
4849static planner_hook_type planner_hook_next = NULL ;
4950
@@ -67,6 +68,7 @@ static PlannedStmt *pgws_planner_hook(Query *parse,
6768const char * query_string ,
6869#endif
6970int cursorOptions ,ParamListInfo boundParams );
71+ static void pgws_ExecutorStart (QueryDesc * queryDesc ,int eflags );
7072static void pgws_ExecutorEnd (QueryDesc * queryDesc );
7173
7274/*
@@ -402,6 +404,8 @@ _PG_init(void)
402404shmem_startup_hook = pgws_shmem_startup ;
403405planner_hook_next = planner_hook ;
404406planner_hook = pgws_planner_hook ;
407+ prev_ExecutorStart = ExecutorStart_hook ;
408+ ExecutorStart_hook = pgws_ExecutorStart ;
405409prev_ExecutorEnd = ExecutorEnd_hook ;
406410ExecutorEnd_hook = pgws_ExecutorEnd ;
407411}
@@ -906,6 +910,38 @@ pgws_planner_hook(Query *parse,
906910cursorOptions ,boundParams );
907911}
908912
913+ /*
914+ * ExecutorStart hook: save queryId for collector
915+ */
916+ static void
917+ pgws_ExecutorStart (QueryDesc * queryDesc ,int eflags )
918+ {
919+ int i ;
920+
921+ if (MyProc )
922+ {
923+ i = MyProc - ProcGlobal -> allProcs ;
924+ #if PG_VERSION_NUM >=110000
925+ /*
926+ * since we depend on queryId we need to check that its size
927+ * is uint64 as we coded in pg_wait_sampling
928+ */
929+ StaticAssertExpr (sizeof (queryDesc -> plannedstmt -> queryId )== sizeof (uint64 ),
930+ "queryId size is not uint64" );
931+ #else
932+ StaticAssertExpr (sizeof (queryDesc -> plannedstmt -> queryId )== sizeof (uint32 ),
933+ "queryId size is not uint32" );
934+ #endif
935+ if (!pgws_proc_queryids [i ])
936+ pgws_proc_queryids [i ]= queryDesc -> plannedstmt -> queryId ;
937+ }
938+
939+ if (prev_ExecutorStart )
940+ prev_ExecutorStart (queryDesc ,eflags );
941+ else
942+ standard_ExecutorStart (queryDesc ,eflags );
943+ }
944+
909945/*
910946 * ExecutorEnd hook: clear queryId
911947 */