@@ -44,6 +44,7 @@ void _PG_init(void);
44
44
static bool shmem_initialized = false;
45
45
46
46
/* Hooks */
47
+ static ExecutorStart_hook_type prev_ExecutorStart = NULL ;
47
48
static ExecutorEnd_hook_type prev_ExecutorEnd = NULL ;
48
49
static planner_hook_type planner_hook_next = NULL ;
49
50
@@ -67,6 +68,7 @@ static PlannedStmt *pgws_planner_hook(Query *parse,
67
68
const char * query_string ,
68
69
#endif
69
70
int cursorOptions , ParamListInfo boundParams );
71
+ static void pgws_ExecutorStart (QueryDesc * queryDesc , int eflags );
70
72
static void pgws_ExecutorEnd (QueryDesc * queryDesc );
71
73
72
74
/*
@@ -402,6 +404,8 @@ _PG_init(void)
402
404
shmem_startup_hook = pgws_shmem_startup ;
403
405
planner_hook_next = planner_hook ;
404
406
planner_hook = pgws_planner_hook ;
407
+ prev_ExecutorStart = ExecutorStart_hook ;
408
+ ExecutorStart_hook = pgws_ExecutorStart ;
405
409
prev_ExecutorEnd = ExecutorEnd_hook ;
406
410
ExecutorEnd_hook = pgws_ExecutorEnd ;
407
411
}
@@ -906,6 +910,38 @@ pgws_planner_hook(Query *parse,
906
910
cursorOptions , boundParams );
907
911
}
908
912
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
+
909
945
/*
910
946
* ExecutorEnd hook: clear queryId
911
947
*/
0 commit comments