Age Owner Branch data TLA Line data Source code
1 : : /*-------------------------------------------------------------------------
2 : : *
3 : : * parallel_slot.h
4 : : * Parallel support for bin/scripts/
5 : : *
6 : : * Copyright (c) 2003-2024, PostgreSQL Global Development Group
7 : : *
8 : : * src/include/fe_utils/parallel_slot.h
9 : : *
10 : : *-------------------------------------------------------------------------
11 : : */
12 : : #ifndef PARALLEL_SLOT_H
13 : : #define PARALLEL_SLOT_H
14 : :
15 : : #include "fe_utils/connect_utils.h"
16 : : #include "libpq-fe.h"
17 : :
18 : : typedef bool (*ParallelSlotResultHandler) (PGresult *res, PGconn *conn,
19 : : void *context);
20 : :
21 : : typedef struct ParallelSlot
22 : : {
23 : : PGconn *connection; /* One connection */
24 : : bool inUse; /* Is the slot being used? */
25 : :
26 : : /*
27 : : * Prior to issuing a command or query on 'connection', a handler callback
28 : : * function may optionally be registered to be invoked to process the
29 : : * results, and context information may optionally be registered for use
30 : : * by the handler. If unset, these fields should be NULL.
31 : : */
32 : : ParallelSlotResultHandler handler;
33 : : void *handler_context;
34 : : } ParallelSlot;
35 : :
36 : : typedef struct ParallelSlotArray
37 : : {
38 : : int numslots;
39 : : ConnParams *cparams;
40 : : const char *progname;
41 : : bool echo;
42 : : const char *initcmd;
43 : : ParallelSlot slots[FLEXIBLE_ARRAY_MEMBER];
44 : : } ParallelSlotArray;
45 : :
46 : : static inline void
1164 rhaas@postgresql.org 47 :CBC 11318 : ParallelSlotSetHandler(ParallelSlot *slot, ParallelSlotResultHandler handler,
48 : : void *context)
49 : : {
50 : 11318 : slot->handler = handler;
51 : 11318 : slot->handler_context = context;
52 : 11318 : }
53 : :
54 : : static inline void
55 : 11313 : ParallelSlotClearHandler(ParallelSlot *slot)
56 : : {
57 : 11313 : slot->handler = NULL;
58 : 11313 : slot->handler_context = NULL;
59 : 11313 : }
60 : :
61 : : extern ParallelSlot *ParallelSlotsGetIdle(ParallelSlotArray *sa,
62 : : const char *dbname);
63 : :
64 : : extern ParallelSlotArray *ParallelSlotsSetup(int numslots, ConnParams *cparams,
65 : : const char *progname, bool echo,
66 : : const char *initcmd);
67 : :
68 : : extern void ParallelSlotsAdoptConn(ParallelSlotArray *sa, PGconn *conn);
69 : :
70 : : extern void ParallelSlotsTerminate(ParallelSlotArray *sa);
71 : :
72 : : extern bool ParallelSlotsWaitCompletion(ParallelSlotArray *sa);
73 : :
74 : : extern bool TableCommandResultHandler(PGresult *res, PGconn *conn,
75 : : void *context);
76 : :
77 : : #endif /* PARALLEL_SLOT_H */
|