PostgreSQL Source Code: src/backend/executor/execProcnode.c File Reference (original) (raw)

Go to the source code of this file.

Functions
static TupleTableSlot * ExecProcNodeFirst (PlanState *node)
static TupleTableSlot * ExecProcNodeInstr (PlanState *node)
static bool ExecShutdownNode_walker (PlanState *node, void *context)
PlanState * ExecInitNode (Plan *node, EState *estate, int eflags)
void ExecSetExecProcNode (PlanState *node, ExecProcNodeMtd function)
Node * MultiExecProcNode (PlanState *node)
void ExecEndNode (PlanState *node)
void ExecShutdownNode (PlanState *node)
void ExecSetTupleBound (int64 tuples_needed, PlanState *child_node)

ExecEndNode()

Definition at line 562 of file execProcnode.c.

563{

564

565

566

567 if (node == NULL)

568 return;

569

570

571

572

573

574

576

578 {

581 }

582

584 {

585

586

587

588 case T_ResultState:

590 break;

591

592 case T_ProjectSetState:

594 break;

595

596 case T_ModifyTableState:

598 break;

599

600 case T_AppendState:

602 break;

603

604 case T_MergeAppendState:

606 break;

607

608 case T_RecursiveUnionState:

610 break;

611

612 case T_BitmapAndState:

614 break;

615

616 case T_BitmapOrState:

618 break;

619

620

621

622

623 case T_SeqScanState:

625 break;

626

627 case T_SampleScanState:

629 break;

630

631 case T_GatherState:

633 break;

634

635 case T_GatherMergeState:

637 break;

638

639 case T_IndexScanState:

641 break;

642

643 case T_IndexOnlyScanState:

645 break;

646

647 case T_BitmapIndexScanState:

649 break;

650

651 case T_BitmapHeapScanState:

653 break;

654

655 case T_TidScanState:

657 break;

658

659 case T_TidRangeScanState:

661 break;

662

663 case T_SubqueryScanState:

665 break;

666

667 case T_FunctionScanState:

669 break;

670

671 case T_TableFuncScanState:

673 break;

674

675 case T_CteScanState:

677 break;

678

679 case T_ForeignScanState:

681 break;

682

683 case T_CustomScanState:

685 break;

686

687

688

689

690 case T_NestLoopState:

692 break;

693

694 case T_MergeJoinState:

696 break;

697

698 case T_HashJoinState:

700 break;

701

702

703

704

705 case T_MaterialState:

707 break;

708

709 case T_SortState:

711 break;

712

713 case T_IncrementalSortState:

715 break;

716

717 case T_MemoizeState:

719 break;

720

721 case T_GroupState:

723 break;

724

725 case T_AggState:

727 break;

728

729 case T_WindowAggState:

731 break;

732

733 case T_UniqueState:

735 break;

736

737 case T_HashState:

739 break;

740

741 case T_SetOpState:

743 break;

744

745 case T_LockRowsState:

747 break;

748

749 case T_LimitState:

751 break;

752

753

754 case T_ValuesScanState:

755 case T_NamedTuplestoreScanState:

756 case T_WorkTableScanState:

757 break;

758

759 default:

760 elog(ERROR, "unrecognized node type: %d", (int) nodeTag(node));

761 break;

762 }

763}

void bms_free(Bitmapset *a)

void ExecEndAgg(AggState *node)

void ExecEndAppend(AppendState *node)

void ExecEndBitmapAnd(BitmapAndState *node)

void ExecEndBitmapHeapScan(BitmapHeapScanState *node)

void ExecEndBitmapIndexScan(BitmapIndexScanState *node)

void ExecEndBitmapOr(BitmapOrState *node)

void ExecEndCteScan(CteScanState *node)

void ExecEndCustomScan(CustomScanState *node)

void ExecEndForeignScan(ForeignScanState *node)

void ExecEndFunctionScan(FunctionScanState *node)

void ExecEndGatherMerge(GatherMergeState *node)

void ExecEndGather(GatherState *node)

void ExecEndGroup(GroupState *node)

void ExecEndHash(HashState *node)

void ExecEndHashJoin(HashJoinState *node)

void ExecEndIncrementalSort(IncrementalSortState *node)

void ExecEndIndexOnlyScan(IndexOnlyScanState *node)

void ExecEndIndexScan(IndexScanState *node)

void ExecEndLimit(LimitState *node)

void ExecEndLockRows(LockRowsState *node)

void ExecEndMaterial(MaterialState *node)

void ExecEndMemoize(MemoizeState *node)

void ExecEndMergeAppend(MergeAppendState *node)

void ExecEndMergeJoin(MergeJoinState *node)

void ExecEndModifyTable(ModifyTableState *node)

void ExecEndNestLoop(NestLoopState *node)

void ExecEndProjectSet(ProjectSetState *node)

void ExecEndRecursiveUnion(RecursiveUnionState *node)

void ExecEndResult(ResultState *node)

void ExecEndSampleScan(SampleScanState *node)

void ExecEndSeqScan(SeqScanState *node)

void ExecEndSetOp(SetOpState *node)

void ExecEndSort(SortState *node)

void ExecEndSubqueryScan(SubqueryScanState *node)

void ExecEndTableFuncScan(TableFuncScanState *node)

void ExecEndTidRangeScan(TidRangeScanState *node)

void ExecEndTidScan(TidScanState *node)

void ExecEndUnique(UniqueState *node)

void ExecEndWindowAgg(WindowAggState *node)

void check_stack_depth(void)

References bms_free(), check_stack_depth(), PlanState::chgParam, elog, ERROR, ExecEndAgg(), ExecEndAppend(), ExecEndBitmapAnd(), ExecEndBitmapHeapScan(), ExecEndBitmapIndexScan(), ExecEndBitmapOr(), ExecEndCteScan(), ExecEndCustomScan(), ExecEndForeignScan(), ExecEndFunctionScan(), ExecEndGather(), ExecEndGatherMerge(), ExecEndGroup(), ExecEndHash(), ExecEndHashJoin(), ExecEndIncrementalSort(), ExecEndIndexOnlyScan(), ExecEndIndexScan(), ExecEndLimit(), ExecEndLockRows(), ExecEndMaterial(), ExecEndMemoize(), ExecEndMergeAppend(), ExecEndMergeJoin(), ExecEndModifyTable(), ExecEndNestLoop(), ExecEndProjectSet(), ExecEndRecursiveUnion(), ExecEndResult(), ExecEndSampleScan(), ExecEndSeqScan(), ExecEndSetOp(), ExecEndSort(), ExecEndSubqueryScan(), ExecEndTableFuncScan(), ExecEndTidRangeScan(), ExecEndTidScan(), ExecEndUnique(), ExecEndWindowAgg(), and nodeTag.

Referenced by EvalPlanQualEnd(), ExecEndAgg(), ExecEndAppend(), ExecEndBitmapAnd(), ExecEndBitmapHeapScan(), ExecEndBitmapOr(), ExecEndForeignScan(), ExecEndGather(), ExecEndGatherMerge(), ExecEndGroup(), ExecEndHash(), ExecEndHashJoin(), ExecEndIncrementalSort(), ExecEndLimit(), ExecEndLockRows(), ExecEndMaterial(), ExecEndMemoize(), ExecEndMergeAppend(), ExecEndMergeJoin(), ExecEndModifyTable(), ExecEndNestLoop(), ExecEndPlan(), ExecEndProjectSet(), ExecEndRecursiveUnion(), ExecEndResult(), ExecEndSetOp(), ExecEndSort(), ExecEndSubqueryScan(), ExecEndUnique(), and ExecEndWindowAgg().

ExecInitNode()

Definition at line 142 of file execProcnode.c.

143{

147

148

149

150

151 if (node == NULL)

152 return NULL;

153

154

155

156

157

158

160

162 {

163

164

165

166 case T_Result:

168 estate, eflags);

169 break;

170

171 case T_ProjectSet:

173 estate, eflags);

174 break;

175

176 case T_ModifyTable:

178 estate, eflags);

179 break;

180

181 case T_Append:

183 estate, eflags);

184 break;

185

186 case T_MergeAppend:

188 estate, eflags);

189 break;

190

191 case T_RecursiveUnion:

193 estate, eflags);

194 break;

195

196 case T_BitmapAnd:

198 estate, eflags);

199 break;

200

201 case T_BitmapOr:

203 estate, eflags);

204 break;

205

206

207

208

209 case T_SeqScan:

211 estate, eflags);

212 break;

213

214 case T_SampleScan:

216 estate, eflags);

217 break;

218

219 case T_IndexScan:

221 estate, eflags);

222 break;

223

224 case T_IndexOnlyScan:

226 estate, eflags);

227 break;

228

229 case T_BitmapIndexScan:

231 estate, eflags);

232 break;

233

234 case T_BitmapHeapScan:

236 estate, eflags);

237 break;

238

239 case T_TidScan:

241 estate, eflags);

242 break;

243

244 case T_TidRangeScan:

246 estate, eflags);

247 break;

248

249 case T_SubqueryScan:

251 estate, eflags);

252 break;

253

254 case T_FunctionScan:

256 estate, eflags);

257 break;

258

259 case T_TableFuncScan:

261 estate, eflags);

262 break;

263

264 case T_ValuesScan:

266 estate, eflags);

267 break;

268

269 case T_CteScan:

271 estate, eflags);

272 break;

273

274 case T_NamedTuplestoreScan:

276 estate, eflags);

277 break;

278

279 case T_WorkTableScan:

281 estate, eflags);

282 break;

283

284 case T_ForeignScan:

286 estate, eflags);

287 break;

288

289 case T_CustomScan:

291 estate, eflags);

292 break;

293

294

295

296

297 case T_NestLoop:

299 estate, eflags);

300 break;

301

302 case T_MergeJoin:

304 estate, eflags);

305 break;

306

307 case T_HashJoin:

309 estate, eflags);

310 break;

311

312

313

314

315 case T_Material:

317 estate, eflags);

318 break;

319

320 case T_Sort:

322 estate, eflags);

323 break;

324

325 case T_IncrementalSort:

327 estate, eflags);

328 break;

329

330 case T_Memoize:

332 eflags);

333 break;

334

335 case T_Group:

337 estate, eflags);

338 break;

339

340 case T_Agg:

342 estate, eflags);

343 break;

344

345 case T_WindowAgg:

347 estate, eflags);

348 break;

349

350 case T_Unique:

352 estate, eflags);

353 break;

354

355 case T_Gather:

357 estate, eflags);

358 break;

359

360 case T_GatherMerge:

362 estate, eflags);

363 break;

364

365 case T_Hash:

367 estate, eflags);

368 break;

369

370 case T_SetOp:

372 estate, eflags);

373 break;

374

375 case T_LockRows:

377 estate, eflags);

378 break;

379

380 case T_Limit:

382 estate, eflags);

383 break;

384

385 default:

386 elog(ERROR, "unrecognized node type: %d", (int) nodeTag(node));

387 result = NULL;

388 break;

389 }

390

392

393

394

395

396

397

398

399

400

401 subps = NIL;

403 {

406

410 subps = lappend(subps, sstate);

411 }

413

414

415 if (estate->es_instrument)

418

419 return result;

420}

void ExecSetExecProcNode(PlanState *node, ExecProcNodeMtd function)

Assert(PointerIsAligned(start, uint64))

Instrumentation * InstrAlloc(int n, int instrument_options, bool async_mode)

List * lappend(List *list, void *datum)

AggState * ExecInitAgg(Agg *node, EState *estate, int eflags)

AppendState * ExecInitAppend(Append *node, EState *estate, int eflags)

BitmapAndState * ExecInitBitmapAnd(BitmapAnd *node, EState *estate, int eflags)

BitmapHeapScanState * ExecInitBitmapHeapScan(BitmapHeapScan *node, EState *estate, int eflags)

BitmapIndexScanState * ExecInitBitmapIndexScan(BitmapIndexScan *node, EState *estate, int eflags)

BitmapOrState * ExecInitBitmapOr(BitmapOr *node, EState *estate, int eflags)

CteScanState * ExecInitCteScan(CteScan *node, EState *estate, int eflags)

CustomScanState * ExecInitCustomScan(CustomScan *cscan, EState *estate, int eflags)

ForeignScanState * ExecInitForeignScan(ForeignScan *node, EState *estate, int eflags)

FunctionScanState * ExecInitFunctionScan(FunctionScan *node, EState *estate, int eflags)

GatherMergeState * ExecInitGatherMerge(GatherMerge *node, EState *estate, int eflags)

GatherState * ExecInitGather(Gather *node, EState *estate, int eflags)

GroupState * ExecInitGroup(Group *node, EState *estate, int eflags)

HashState * ExecInitHash(Hash *node, EState *estate, int eflags)

HashJoinState * ExecInitHashJoin(HashJoin *node, EState *estate, int eflags)

IncrementalSortState * ExecInitIncrementalSort(IncrementalSort *node, EState *estate, int eflags)

IndexOnlyScanState * ExecInitIndexOnlyScan(IndexOnlyScan *node, EState *estate, int eflags)

IndexScanState * ExecInitIndexScan(IndexScan *node, EState *estate, int eflags)

LimitState * ExecInitLimit(Limit *node, EState *estate, int eflags)

LockRowsState * ExecInitLockRows(LockRows *node, EState *estate, int eflags)

MaterialState * ExecInitMaterial(Material *node, EState *estate, int eflags)

MemoizeState * ExecInitMemoize(Memoize *node, EState *estate, int eflags)

MergeAppendState * ExecInitMergeAppend(MergeAppend *node, EState *estate, int eflags)

MergeJoinState * ExecInitMergeJoin(MergeJoin *node, EState *estate, int eflags)

ModifyTableState * ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags)

NamedTuplestoreScanState * ExecInitNamedTuplestoreScan(NamedTuplestoreScan *node, EState *estate, int eflags)

NestLoopState * ExecInitNestLoop(NestLoop *node, EState *estate, int eflags)

ProjectSetState * ExecInitProjectSet(ProjectSet *node, EState *estate, int eflags)

RecursiveUnionState * ExecInitRecursiveUnion(RecursiveUnion *node, EState *estate, int eflags)

ResultState * ExecInitResult(Result *node, EState *estate, int eflags)

SampleScanState * ExecInitSampleScan(SampleScan *node, EState *estate, int eflags)

SeqScanState * ExecInitSeqScan(SeqScan *node, EState *estate, int eflags)

SetOpState * ExecInitSetOp(SetOp *node, EState *estate, int eflags)

SortState * ExecInitSort(Sort *node, EState *estate, int eflags)

SubPlanState * ExecInitSubPlan(SubPlan *subplan, PlanState *parent)

SubqueryScanState * ExecInitSubqueryScan(SubqueryScan *node, EState *estate, int eflags)

TableFuncScanState * ExecInitTableFuncScan(TableFuncScan *node, EState *estate, int eflags)

TidRangeScanState * ExecInitTidRangeScan(TidRangeScan *node, EState *estate, int eflags)

TidScanState * ExecInitTidScan(TidScan *node, EState *estate, int eflags)

UniqueState * ExecInitUnique(Unique *node, EState *estate, int eflags)

ValuesScanState * ExecInitValuesScan(ValuesScan *node, EState *estate, int eflags)

WindowAggState * ExecInitWindowAgg(WindowAgg *node, EState *estate, int eflags)

WorkTableScanState * ExecInitWorkTableScan(WorkTableScan *node, EState *estate, int eflags)

#define IsA(nodeptr, _type_)

Instrumentation * instrument

ExecProcNodeMtd ExecProcNode

References SubPlan::args, Assert(), PlanState::async_capable, check_stack_depth(), elog, ERROR, EState::es_instrument, ExecInitAgg(), ExecInitAppend(), ExecInitBitmapAnd(), ExecInitBitmapHeapScan(), ExecInitBitmapIndexScan(), ExecInitBitmapOr(), ExecInitCteScan(), ExecInitCustomScan(), ExecInitForeignScan(), ExecInitFunctionScan(), ExecInitGather(), ExecInitGatherMerge(), ExecInitGroup(), ExecInitHash(), ExecInitHashJoin(), ExecInitIncrementalSort(), ExecInitIndexOnlyScan(), ExecInitIndexScan(), ExecInitLimit(), ExecInitLockRows(), ExecInitMaterial(), ExecInitMemoize(), ExecInitMergeAppend(), ExecInitMergeJoin(), ExecInitModifyTable(), ExecInitNamedTuplestoreScan(), ExecInitNestLoop(), ExecInitProjectSet(), ExecInitRecursiveUnion(), ExecInitResult(), ExecInitSampleScan(), ExecInitSeqScan(), ExecInitSetOp(), ExecInitSort(), ExecInitSubPlan(), ExecInitSubqueryScan(), ExecInitTableFuncScan(), ExecInitTidRangeScan(), ExecInitTidScan(), ExecInitUnique(), ExecInitValuesScan(), ExecInitWindowAgg(), ExecInitWorkTableScan(), PlanState::ExecProcNode, ExecSetExecProcNode(), PlanState::initPlan, Plan::initPlan, InstrAlloc(), PlanState::instrument, IsA, lappend(), lfirst, NIL, and nodeTag.

Referenced by EvalPlanQualStart(), ExecInitAgg(), ExecInitAppend(), ExecInitBitmapAnd(), ExecInitBitmapHeapScan(), ExecInitBitmapOr(), ExecInitForeignScan(), ExecInitGather(), ExecInitGatherMerge(), ExecInitGroup(), ExecInitHash(), ExecInitHashJoin(), ExecInitIncrementalSort(), ExecInitLimit(), ExecInitLockRows(), ExecInitMaterial(), ExecInitMemoize(), ExecInitMergeAppend(), ExecInitMergeJoin(), ExecInitModifyTable(), ExecInitNestLoop(), ExecInitProjectSet(), ExecInitRecursiveUnion(), ExecInitResult(), ExecInitSetOp(), ExecInitSort(), ExecInitSubqueryScan(), ExecInitUnique(), ExecInitWindowAgg(), and InitPlan().

ExecProcNodeFirst()

ExecProcNodeInstr()

ExecSetExecProcNode()

ExecSetTupleBound()

void ExecSetTupleBound ( int64 tuples_needed,
PlanState * child_node
)

Definition at line 848 of file execProcnode.c.

849{

850

851

852

853

854

855

857 {

858

859

860

861

862

863

864

865

867

868 if (tuples_needed < 0)

869 {

870

871 sortState->bounded = false;

872 }

873 else

874 {

875 sortState->bounded = true;

876 sortState->bound = tuples_needed;

877 }

878 }

880 {

881

882

883

884

885

886

887

888

889

891

892 if (tuples_needed < 0)

893 {

894

895 sortState->bounded = false;

896 }

897 else

898 {

899 sortState->bounded = true;

900 sortState->bound = tuples_needed;

901 }

902 }

904 {

905

906

907

908

909

911 int i;

912

915 }

917 {

918

919

920

921

922

924 int i;

925

928 }

930 {

931

932

933

934

935

936

937

938

939

942 }

944 {

945

946

947

948

950

951 if (subqueryState->ss.ps.qual == NULL)

953 }

955 {

956

957

958

959

960

961

962

963

965

967

968

970 }

972 {

973

975

977

979 }

980

981

982

983

984

985

986

987}

void ExecSetTupleBound(int64 tuples_needed, PlanState *child_node)

#define outerPlanState(node)

References AppendState::appendplans, AppendState::as_nplans, SortState::bound, IncrementalSortState::bound, SortState::bounded, IncrementalSortState::bounded, ExecSetTupleBound(), i, IsA, MergeAppendState::mergeplans, MergeAppendState::ms_nplans, outerPlanState, ScanState::ps, PlanState::qual, SubqueryScanState::ss, SubqueryScanState::subplan, GatherState::tuples_needed, and GatherMergeState::tuples_needed.

Referenced by ExecSetTupleBound(), ParallelQueryMain(), and recompute_limits().

ExecShutdownNode()

ExecShutdownNode_walker()

static bool ExecShutdownNode_walker ( PlanState * node, void * context ) static

Definition at line 778 of file execProcnode.c.

779{

780 if (node == NULL)

781 return false;

782

784

785

786

787

788

789

790

791

792

793

794

797

799

801 {

802 case T_GatherState:

804 break;

805 case T_ForeignScanState:

807 break;

808 case T_CustomScanState:

810 break;

811 case T_GatherMergeState:

813 break;

814 case T_HashState:

816 break;

817 case T_HashJoinState:

819 break;

820 default:

821 break;

822 }

823

824

827

828 return false;

829}

void ExecShutdownCustomScan(CustomScanState *node)

void ExecShutdownForeignScan(ForeignScanState *node)

#define planstate_tree_walker(ps, w, c)

void ExecShutdownGatherMerge(GatherMergeState *node)

void ExecShutdownGather(GatherState *node)

void ExecShutdownHash(HashState *node)

void ExecShutdownHashJoin(HashJoinState *node)

References check_stack_depth(), ExecShutdownCustomScan(), ExecShutdownForeignScan(), ExecShutdownGather(), ExecShutdownGatherMerge(), ExecShutdownHash(), ExecShutdownHashJoin(), ExecShutdownNode_walker(), InstrStartNode(), InstrStopNode(), PlanState::instrument, nodeTag, planstate_tree_walker, and Instrumentation::running.

Referenced by ExecShutdownNode(), and ExecShutdownNode_walker().

MultiExecProcNode()

Definition at line 507 of file execProcnode.c.

508{

509 Node *result;

510

512

514

515 if (node->chgParam != NULL)

516 ExecReScan(node);

517

519 {

520

521

522

523

524 case T_HashState:

526 break;

527

528 case T_BitmapIndexScanState:

530 break;

531

532 case T_BitmapAndState:

534 break;

535

536 case T_BitmapOrState:

538 break;

539

540 default:

541 elog(ERROR, "unrecognized node type: %d", (int) nodeTag(node));

542 result = NULL;

543 break;

544 }

545

546 return result;

547}

void ExecReScan(PlanState *node)

#define CHECK_FOR_INTERRUPTS()

Node * MultiExecBitmapAnd(BitmapAndState *node)

Node * MultiExecBitmapIndexScan(BitmapIndexScanState *node)

Node * MultiExecBitmapOr(BitmapOrState *node)

Node * MultiExecHash(HashState *node)

References CHECK_FOR_INTERRUPTS, check_stack_depth(), PlanState::chgParam, elog, ERROR, ExecReScan(), MultiExecBitmapAnd(), MultiExecBitmapIndexScan(), MultiExecBitmapOr(), MultiExecHash(), and nodeTag.

Referenced by BitmapTableScanSetup(), ExecHashJoinImpl(), MultiExecBitmapAnd(), and MultiExecBitmapOr().