PostgreSQL Source Code git master
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
execAsync.c File Reference
Include dependency graph for execAsync.c:

Go to the source code of this file.

Functions

void ExecAsyncRequest (AsyncRequest *areq)
 
void ExecAsyncConfigureWait (AsyncRequest *areq)
 
void ExecAsyncNotify (AsyncRequest *areq)
 
void ExecAsyncResponse (AsyncRequest *areq)
 
void ExecAsyncRequestDone (AsyncRequest *areq, TupleTableSlot *result)
 
void ExecAsyncRequestPending (AsyncRequest *areq)
 

Function Documentation

◆ ExecAsyncConfigureWait()

void ExecAsyncConfigureWait ( AsyncRequest areq)

Definition at line 62 of file execAsync.c.

63{
64 /* must provide our own instrumentation support */
65 if (areq->requestee->instrument)
67
68 switch (nodeTag(areq->requestee))
69 {
70 case T_ForeignScanState:
72 break;
73 default:
74 /* If the node doesn't support async, caller messed up. */
75 elog(ERROR, "unrecognized node type: %d",
76 (int) nodeTag(areq->requestee));
77 }
78
79 /* must provide our own instrumentation support */
80 if (areq->requestee->instrument)
82}
#define ERROR
Definition: elog.h:39
#define elog(elevel,...)
Definition: elog.h:225
void InstrStartNode(Instrumentation *instr)
Definition: instrument.c:68
void InstrStopNode(Instrumentation *instr, double nTuples)
Definition: instrument.c:84
void ExecAsyncForeignScanConfigureWait(AsyncRequest *areq)
#define nodeTag(nodeptr)
Definition: nodes.h:133
struct PlanState * requestee
Definition: execnodes.h:612
Instrumentation * instrument
Definition: execnodes.h:1136

References elog, ERROR, ExecAsyncForeignScanConfigureWait(), InstrStartNode(), InstrStopNode(), PlanState::instrument, nodeTag, and AsyncRequest::requestee.

Referenced by ExecAppendAsyncEventWait().

◆ ExecAsyncNotify()

void ExecAsyncNotify ( AsyncRequest areq)

Definition at line 88 of file execAsync.c.

89{
90 /* must provide our own instrumentation support */
91 if (areq->requestee->instrument)
93
94 switch (nodeTag(areq->requestee))
95 {
96 case T_ForeignScanState:
98 break;
99 default:
100 /* If the node doesn't support async, caller messed up. */
101 elog(ERROR, "unrecognized node type: %d",
102 (int) nodeTag(areq->requestee));
103 }
104
105 ExecAsyncResponse(areq);
106
107 /* must provide our own instrumentation support */
108 if (areq->requestee->instrument)
110 TupIsNull(areq->result) ? 0.0 : 1.0);
111}
void ExecAsyncResponse(AsyncRequest *areq)
Definition: execAsync.c:117
void ExecAsyncForeignScanNotify(AsyncRequest *areq)
TupleTableSlot * result
Definition: execnodes.h:616
#define TupIsNull(slot)
Definition: tuptable.h:306

References elog, ERROR, ExecAsyncForeignScanNotify(), ExecAsyncResponse(), InstrStartNode(), InstrStopNode(), PlanState::instrument, nodeTag, AsyncRequest::requestee, AsyncRequest::result, and TupIsNull.

Referenced by ExecAppendAsyncEventWait().

◆ ExecAsyncRequest()

void ExecAsyncRequest ( AsyncRequest areq)

Definition at line 26 of file execAsync.c.

27{
28 if (areq->requestee->chgParam != NULL) /* something changed? */
29 ExecReScan(areq->requestee); /* let ReScan handle this */
30
31 /* must provide our own instrumentation support */
32 if (areq->requestee->instrument)
34
35 switch (nodeTag(areq->requestee))
36 {
37 case T_ForeignScanState:
39 break;
40 default:
41 /* If the node doesn't support async, caller messed up. */
42 elog(ERROR, "unrecognized node type: %d",
43 (int) nodeTag(areq->requestee));
44 }
45
47
48 /* must provide our own instrumentation support */
49 if (areq->requestee->instrument)
51 TupIsNull(areq->result) ? 0.0 : 1.0);
52}
void ExecReScan(PlanState *node)
Definition: execAmi.c:76
void ExecAsyncForeignScanRequest(AsyncRequest *areq)
Bitmapset * chgParam
Definition: execnodes.h:1158

References PlanState::chgParam, elog, ERROR, ExecAsyncForeignScanRequest(), ExecAsyncResponse(), ExecReScan(), InstrStartNode(), InstrStopNode(), PlanState::instrument, nodeTag, AsyncRequest::requestee, AsyncRequest::result, and TupIsNull.

Referenced by ExecAppendAsyncBegin(), and ExecAppendAsyncRequest().

◆ ExecAsyncRequestDone()

void ExecAsyncRequestDone ( AsyncRequest areq,
TupleTableSlot result 
)

Definition at line 137 of file execAsync.c.

138{
139 areq->request_complete = true;
140 areq->result = result;
141}
bool request_complete
Definition: execnodes.h:615

References AsyncRequest::request_complete, and AsyncRequest::result.

Referenced by process_pending_request(), and produce_tuple_asynchronously().

◆ ExecAsyncRequestPending()

void ExecAsyncRequestPending ( AsyncRequest areq)

Definition at line 149 of file execAsync.c.

150{
151 areq->callback_pending = true;
152 areq->request_complete = false;
153 areq->result = NULL;
154}
bool callback_pending
Definition: execnodes.h:614

References AsyncRequest::callback_pending, AsyncRequest::request_complete, and AsyncRequest::result.

Referenced by produce_tuple_asynchronously().

◆ ExecAsyncResponse()

void ExecAsyncResponse ( AsyncRequest areq)

Definition at line 117 of file execAsync.c.

118{
119 switch (nodeTag(areq->requestor))
120 {
121 case T_AppendState:
123 break;
124 default:
125 /* If the node doesn't support async, caller messed up. */
126 elog(ERROR, "unrecognized node type: %d",
127 (int) nodeTag(areq->requestor));
128 }
129}
void ExecAsyncAppendResponse(AsyncRequest *areq)
Definition: nodeAppend.c:1119
struct PlanState * requestor
Definition: execnodes.h:611

References elog, ERROR, ExecAsyncAppendResponse(), nodeTag, and AsyncRequest::requestor.

Referenced by complete_pending_request(), ExecAsyncNotify(), ExecAsyncRequest(), and process_pending_request().