mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-16 02:23:49 +08:00
Respect other extensions' ExecutorStart hooks
When we override ExecutorStart hook that has been set by another extension we have to chain-call it not to disrupt other extension's integrity.
This commit is contained in:
parent
9b499aac1a
commit
0fc733e00e
1
.unreleased/pr_7712
Normal file
1
.unreleased/pr_7712
Normal file
@ -0,0 +1 @@
|
||||
Fixes: #7712 Respect other extensions' ExecutorStart hooks
|
@ -32,6 +32,7 @@ struct CaptureAttributesContext
|
||||
};
|
||||
|
||||
static ExecutorStart_hook_type prev_ExecutorStart = NULL;
|
||||
static bool ExecutorStart_hook_initialized = false;
|
||||
|
||||
static void
|
||||
capture_var(Var *node, struct CaptureAttributesContext *context)
|
||||
@ -216,8 +217,15 @@ capture_ExecutorStart(QueryDesc *queryDesc, int eflags)
|
||||
ListCell *cell;
|
||||
#endif
|
||||
|
||||
/* Call the standard executor start function to set up plan states. */
|
||||
standard_ExecutorStart(queryDesc, eflags);
|
||||
if (prev_ExecutorStart)
|
||||
{
|
||||
prev_ExecutorStart(queryDesc, eflags);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Call the standard executor start function to set up plan states. */
|
||||
standard_ExecutorStart(queryDesc, eflags);
|
||||
}
|
||||
|
||||
struct CaptureAttributesContext context = {
|
||||
.rtable = queryDesc->plannedstmt->rtable,
|
||||
@ -245,6 +253,14 @@ capture_ExecutorStart(QueryDesc *queryDesc, int eflags)
|
||||
void
|
||||
_attr_capture_init(void)
|
||||
{
|
||||
prev_ExecutorStart = ExecutorStart_hook;
|
||||
ExecutorStart_hook = capture_ExecutorStart;
|
||||
/*
|
||||
* TSL init might be reexecuted so we need to make
|
||||
* sure to not initialize hook multiple times
|
||||
*/
|
||||
if (!ExecutorStart_hook_initialized)
|
||||
{
|
||||
ExecutorStart_hook_initialized = true;
|
||||
prev_ExecutorStart = ExecutorStart_hook;
|
||||
ExecutorStart_hook = capture_ExecutorStart;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user