| /*------------------------------------------------------------------------- |
| * |
| * parallel_slot.h |
| * Parallel support for bin/scripts/ |
| * |
| * Copyright (c) 2003-2021, PostgreSQL Global Development Group |
| * |
| * src/include/fe_utils/parallel_slot.h |
| * |
| *------------------------------------------------------------------------- |
| */ |
| #ifndef PARALLEL_SLOT_H |
| #define PARALLEL_SLOT_H |
| |
| #include "fe_utils/connect_utils.h" |
| #include "libpq-fe.h" |
| |
| typedef bool (*ParallelSlotResultHandler) (PGresult *res, PGconn *conn, |
| void *context); |
| |
| typedef struct ParallelSlot |
| { |
| PGconn *connection; /* One connection */ |
| bool inUse; /* Is the slot being used? */ |
| |
| /* |
| * Prior to issuing a command or query on 'connection', a handler callback |
| * function may optionally be registered to be invoked to process the |
| * results, and context information may optionally be registered for use |
| * by the handler. If unset, these fields should be NULL. |
| */ |
| ParallelSlotResultHandler handler; |
| void *handler_context; |
| } ParallelSlot; |
| |
| typedef struct ParallelSlotArray |
| { |
| int numslots; |
| ConnParams *cparams; |
| const char *progname; |
| bool echo; |
| const char *initcmd; |
| ParallelSlot slots[FLEXIBLE_ARRAY_MEMBER]; |
| } ParallelSlotArray; |
| |
| static inline void |
| ParallelSlotSetHandler(ParallelSlot *slot, ParallelSlotResultHandler handler, |
| void *context) |
| { |
| slot->handler = handler; |
| slot->handler_context = context; |
| } |
| |
| static inline void |
| ParallelSlotClearHandler(ParallelSlot *slot) |
| { |
| slot->handler = NULL; |
| slot->handler_context = NULL; |
| } |
| |
| extern ParallelSlot *ParallelSlotsGetIdle(ParallelSlotArray *slots, |
| const char *dbname); |
| |
| extern ParallelSlotArray *ParallelSlotsSetup(int numslots, ConnParams *cparams, |
| const char *progname, bool echo, |
| const char *initcmd); |
| |
| extern void ParallelSlotsAdoptConn(ParallelSlotArray *sa, PGconn *conn); |
| |
| extern void ParallelSlotsTerminate(ParallelSlotArray *sa); |
| |
| extern bool ParallelSlotsWaitCompletion(ParallelSlotArray *sa); |
| |
| extern bool TableCommandResultHandler(PGresult *res, PGconn *conn, |
| void *context); |
| |
| #endif /* PARALLEL_SLOT_H */ |