* ExplainPreScanNode - * Prescan the planstate tree to identify which RTEs are referenced * * Adds the relid of each referenced RTE to *rels_used. The result controls * which RTEs are assigned aliases by select_rtable_names_for_explain. * This ensures that we don't confusingly assign un-suffixed aliases to RTEs * that never appear in the EXPLAIN output (such as inheritance parents). */
| 1450 | * that never appear in the EXPLAIN output (such as inheritance parents). |
| 1451 | */ |
| 1452 | static bool |
| 1453 | ExplainPreScanNode(PlanState *planstate, Bitmapset **rels_used) |
| 1454 | { |
| 1455 | Plan *plan = planstate->plan; |
| 1456 | |
| 1457 | switch (nodeTag(plan)) |
| 1458 | { |
| 1459 | case T_SeqScan: |
| 1460 | case T_SampleScan: |
| 1461 | case T_IndexScan: |
| 1462 | case T_IndexOnlyScan: |
| 1463 | case T_BitmapHeapScan: |
| 1464 | case T_DynamicBitmapHeapScan: |
| 1465 | case T_TidScan: |
| 1466 | case T_TidRangeScan: |
| 1467 | case T_SubqueryScan: |
| 1468 | case T_FunctionScan: |
| 1469 | case T_TableFuncScan: |
| 1470 | case T_ValuesScan: |
| 1471 | case T_CteScan: |
| 1472 | case T_NamedTuplestoreScan: |
| 1473 | case T_WorkTableScan: |
| 1474 | case T_DynamicSeqScan: |
| 1475 | case T_DynamicIndexScan: |
| 1476 | case T_DynamicIndexOnlyScan: |
| 1477 | case T_ShareInputScan: |
| 1478 | *rels_used = bms_add_member(*rels_used, |
| 1479 | ((Scan *) plan)->scanrelid); |
| 1480 | break; |
| 1481 | case T_ForeignScan: |
| 1482 | case T_DynamicForeignScan: |
| 1483 | *rels_used = bms_add_members(*rels_used, |
| 1484 | ((ForeignScan *) plan)->fs_relids); |
| 1485 | break; |
| 1486 | case T_CustomScan: |
| 1487 | *rels_used = bms_add_members(*rels_used, |
| 1488 | ((CustomScan *) plan)->custom_relids); |
| 1489 | break; |
| 1490 | case T_ModifyTable: |
| 1491 | *rels_used = bms_add_member(*rels_used, |
| 1492 | ((ModifyTable *) plan)->nominalRelation); |
| 1493 | if (((ModifyTable *) plan)->exclRelRTI) |
| 1494 | *rels_used = bms_add_member(*rels_used, |
| 1495 | ((ModifyTable *) plan)->exclRelRTI); |
| 1496 | break; |
| 1497 | case T_Append: |
| 1498 | *rels_used = bms_add_members(*rels_used, |
| 1499 | ((Append *) plan)->apprelids); |
| 1500 | break; |
| 1501 | case T_MergeAppend: |
| 1502 | *rels_used = bms_add_members(*rels_used, |
| 1503 | ((MergeAppend *) plan)->apprelids); |
| 1504 | break; |
| 1505 | default: |
| 1506 | break; |
| 1507 | } |
| 1508 | |
| 1509 | return planstate_tree_walker(planstate, ExplainPreScanNode, rels_used); |
no test coverage detected