PostgreSQL Source Code: src/backend/executor/nodeMergeAppend.c Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
40
46
47
48
49
50
51
53
56
57
58
59
60
61
62
63
66{
71 int nplans;
72 int i,
73 j;
74
75
77
78
79
80
82 mergestate->ps.state = estate;
84
85
87 {
89
90
91
92
93
94
99 &validsubplans);
102
103
104
105
106
107
110 }
111 else
112 {
114
115
116
117
118
123 }
124
126 mergestate->mergeplans = mergeplanstates;
128
131 mergestate);
132
133
134
135
136
137 j = 0;
138 i = -1;
140 {
142
143 mergeplanstates[j++] = ExecInitNode(initNode, estate, eflags);
144 }
145
146
147
148
149
150
151
152
153
154
156 if (mergeops != NULL)
157 {
159 }
160 else
161 {
163
166 }
167
168
169
170
172
173
174
175
178
180 {
182
186 sortKey->ssup_attno = node->sortColIdx[i];
187
188
189
190
191
192
193
194
196
198 }
199
200
201
202
204
205 return mergestate;
206}
207
208
209
210
211
212
213
216{
220
222
224 {
225
228
229
230
231
232
233
237
238
239
240
241
242 i = -1;
244 {
248 }
251 }
252 else
253 {
254
255
256
257
258
259
260
261
266 else
268 }
269
271 {
272
274 }
275 else
276 {
279 }
280
281 return result;
282}
283
284
285
286
289{
293
296 int nkey;
297
300
301 for (nkey = 0; nkey < node->ms_nkeys; nkey++)
302 {
306 datum2;
307 bool isNull1,
308 isNull2;
310
313
315 datum2, isNull2,
316 sortKey);
318 {
321 }
322 }
323 return 0;
324}
325
326
327
328
329
330
331
332
333
334void
336{
338 int nplans;
339 int i;
340
341
342
343
346
347
348
349
350 for (i = 0; i < nplans; i++)
352}
353
354void
356{
357 int i;
358
359
360
361
362
363
367 {
370 }
371
373 {
375
376
377
378
379
382
383
384
385
386
387 if (subnode->chgParam == NULL)
389 }
392}
void binaryheap_build(binaryheap *heap)
void binaryheap_replace_first(binaryheap *heap, bh_node_type d)
void binaryheap_reset(binaryheap *heap)
bh_node_type binaryheap_first(binaryheap *heap)
bh_node_type binaryheap_remove_first(binaryheap *heap)
void binaryheap_add_unordered(binaryheap *heap, bh_node_type d)
binaryheap * binaryheap_allocate(int capacity, binaryheap_comparator compare, void *arg)
#define binaryheap_empty(h)
int bms_next_member(const Bitmapset *a, int prevbit)
Bitmapset * bms_add_range(Bitmapset *a, int lower, int upper)
void bms_free(Bitmapset *a)
int bms_num_members(const Bitmapset *a)
bool bms_overlap(const Bitmapset *a, const Bitmapset *b)
#define INVERT_COMPARE_RESULT(var)
void ExecReScan(PlanState *node)
PartitionPruneState * ExecInitPartitionExecPruning(PlanState *planstate, int n_total_subplans, int part_prune_index, Bitmapset *relids, Bitmapset **initially_valid_subplans)
Bitmapset * ExecFindMatchingSubPlans(PartitionPruneState *prunestate, bool initial_prune, Bitmapset **validsubplan_rtis)
void ExecEndNode(PlanState *node)
PlanState * ExecInitNode(Plan *node, EState *estate, int eflags)
const TupleTableSlotOps TTSOpsVirtual
void ExecInitResultTupleSlotTL(PlanState *planstate, const TupleTableSlotOps *tts_ops)
const TupleTableSlotOps * ExecGetCommonSlotOps(PlanState **planstates, int nplans)
void UpdateChangedParamSet(PlanState *node, Bitmapset *newchg)
#define EXEC_FLAG_BACKWARD
static TupleTableSlot * ExecProcNode(PlanState *node)
static int compare(const void *arg1, const void *arg2)
Assert(PointerIsAligned(start, uint64))
void * palloc0(Size size)
MemoryContext CurrentMemoryContext
#define CHECK_FOR_INTERRUPTS()
static int heap_compare_slots(Datum a, Datum b, void *arg)
static TupleTableSlot * ExecMergeAppend(PlanState *pstate)
void ExecReScanMergeAppend(MergeAppendState *node)
MergeAppendState * ExecInitMergeAppend(MergeAppend *node, EState *estate, int eflags)
void ExecEndMergeAppend(MergeAppendState *node)
#define castNode(_type_, nodeptr)
static int list_length(const List *l)
static void * list_nth(const List *list, int n)
static Datum Int32GetDatum(int32 X)
static int32 DatumGetInt32(Datum X)
void PrepareSortSupportFromOrderingOp(Oid orderingOp, SortSupport ssup)
static int ApplySortComparator(Datum datum1, bool isNull1, Datum datum2, bool isNull2, SortSupport ssup)
Bitmapset * ms_valid_subplans
struct binaryheap * ms_heap
TupleTableSlot ** ms_slots
struct PartitionPruneState * ms_prune_state
TupleTableSlot * ps_ResultTupleSlot
ProjectionInfo * ps_ProjInfo
ExecProcNodeMtd ExecProcNode
static Datum slot_getattr(TupleTableSlot *slot, int attnum, bool *isnull)
static TupleTableSlot * ExecClearTuple(TupleTableSlot *slot)