Skip to content

Commit

Permalink
Respect other extensions' ExecutorStart hooks
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
zilder committed Feb 16, 2025
1 parent 9b499aa commit 0fc733e
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 4 deletions.
1 change: 1 addition & 0 deletions .unreleased/pr_7712
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fixes: #7712 Respect other extensions' ExecutorStart hooks
24 changes: 20 additions & 4 deletions tsl/src/hypercore/attr_capture.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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;
}
}

0 comments on commit 0fc733e

Please sign in to comment.