PostgreSQL Source Code: src/backend/executor/execProcnode.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

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

74

121

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

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

418

419 return result;

420}

421

422

423

424

425

426

427

428

429void

431{

432

433

434

435

436

437

440}

441

442

443

444

445

446

449{

450

451

452

453

454

455

456

458

459

460

461

462

463

466 else

468

470}

471

472

473

474

475

476

477

480{

482

484

486

488

489 return result;

490}

491

492

493

494

495

496

497

498

499

500

501

502

503

504

505

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}

548

549

550

551

552

553

554

555

556

557

558

559

560

561void

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}

764

765

766

767

768

769

770

771void

773{

775}

776

777static bool

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}

830

831

832

833

834

835

836

837

838

839

840

841

842

843

844

845

846

847void

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 bms_free(Bitmapset *a)

void ExecReScan(PlanState *node)

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

Node * MultiExecProcNode(PlanState *node)

void ExecSetTupleBound(int64 tuples_needed, PlanState *child_node)

void ExecEndNode(PlanState *node)

PlanState * ExecInitNode(Plan *node, EState *estate, int eflags)

void ExecShutdownNode(PlanState *node)

static TupleTableSlot * ExecProcNodeInstr(PlanState *node)

static TupleTableSlot * ExecProcNodeFirst(PlanState *node)

void ExecSetExecProcNode(PlanState *node, ExecProcNodeMtd function)

TupleTableSlot *(* ExecProcNodeMtd)(struct PlanState *pstate)

#define outerPlanState(node)

Assert(PointerIsAligned(start, uint64))

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

void InstrStartNode(Instrumentation *instr)

void InstrStopNode(Instrumentation *instr, double nTuples)

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

#define CHECK_FOR_INTERRUPTS()

void ExecEndAgg(AggState *node)

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

void ExecEndAppend(AppendState *node)

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

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

Node * MultiExecBitmapAnd(BitmapAndState *node)

void ExecEndBitmapAnd(BitmapAndState *node)

void ExecEndBitmapHeapScan(BitmapHeapScanState *node)

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

Node * MultiExecBitmapIndexScan(BitmapIndexScanState *node)

void ExecEndBitmapIndexScan(BitmapIndexScanState *node)

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

void ExecEndBitmapOr(BitmapOrState *node)

Node * MultiExecBitmapOr(BitmapOrState *node)

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

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

void ExecEndCteScan(CteScanState *node)

void ExecShutdownCustomScan(CustomScanState *node)

void ExecEndCustomScan(CustomScanState *node)

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

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

void ExecShutdownForeignScan(ForeignScanState *node)

void ExecEndForeignScan(ForeignScanState *node)

#define planstate_tree_walker(ps, w, c)

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

void ExecEndFunctionScan(FunctionScanState *node)

void ExecShutdownGatherMerge(GatherMergeState *node)

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

void ExecEndGatherMerge(GatherMergeState *node)

void ExecEndGather(GatherState *node)

void ExecShutdownGather(GatherState *node)

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

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

void ExecEndGroup(GroupState *node)

Node * MultiExecHash(HashState *node)

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

void ExecEndHash(HashState *node)

void ExecShutdownHash(HashState *node)

void ExecEndHashJoin(HashJoinState *node)

void ExecShutdownHashJoin(HashJoinState *node)

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

void ExecEndIncrementalSort(IncrementalSortState *node)

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

void ExecEndIndexOnlyScan(IndexOnlyScanState *node)

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

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

void ExecEndIndexScan(IndexScanState *node)

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

void ExecEndLimit(LimitState *node)

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

void ExecEndLockRows(LockRowsState *node)

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

void ExecEndMaterial(MaterialState *node)

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

void ExecEndMemoize(MemoizeState *node)

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

void ExecEndMergeAppend(MergeAppendState *node)

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

void ExecEndMergeJoin(MergeJoinState *node)

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

void ExecEndModifyTable(ModifyTableState *node)

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

void ExecEndNestLoop(NestLoopState *node)

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

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

void ExecEndProjectSet(ProjectSetState *node)

void ExecEndRecursiveUnion(RecursiveUnionState *node)

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

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

void ExecEndResult(ResultState *node)

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

void ExecEndSampleScan(SampleScanState *node)

void ExecEndSeqScan(SeqScanState *node)

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

void ExecEndSetOp(SetOpState *node)

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

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

void ExecEndSort(SortState *node)

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

void ExecEndSubqueryScan(SubqueryScanState *node)

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

void ExecEndTableFuncScan(TableFuncScanState *node)

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

void ExecEndTidRangeScan(TidRangeScanState *node)

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

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

void ExecEndTidScan(TidScanState *node)

void ExecEndUnique(UniqueState *node)

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

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

void ExecEndWindowAgg(WindowAggState *node)

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

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

#define IsA(nodeptr, _type_)

on_exit_nicely_callback function

void check_stack_depth(void)

Instrumentation * instrument

ExecProcNodeMtd ExecProcNodeReal

ExecProcNodeMtd ExecProcNode