* PlanCacheComputeResultDesc: given a list of analyzed-and-rewritten Queries, * determine the result tupledesc it will produce. Returns NULL if the * execution will not return tuples. * * Note: the result is created or copied into current memory context. */
| 2017 | * Note: the result is created or copied into current memory context. |
| 2018 | */ |
| 2019 | static TupleDesc |
| 2020 | PlanCacheComputeResultDesc(List *stmt_list) |
| 2021 | { |
| 2022 | Query *query; |
| 2023 | |
| 2024 | switch (ChoosePortalStrategy(stmt_list)) |
| 2025 | { |
| 2026 | case PORTAL_ONE_SELECT: |
| 2027 | case PORTAL_ONE_MOD_WITH: |
| 2028 | query = linitial_node(Query, stmt_list); |
| 2029 | return ExecCleanTypeFromTL(query->targetList); |
| 2030 | |
| 2031 | case PORTAL_ONE_RETURNING: |
| 2032 | query = QueryListGetPrimaryStmt(stmt_list); |
| 2033 | Assert(query->returningList); |
| 2034 | return ExecCleanTypeFromTL(query->returningList); |
| 2035 | |
| 2036 | case PORTAL_UTIL_SELECT: |
| 2037 | query = linitial_node(Query, stmt_list); |
| 2038 | Assert(query->utilityStmt); |
| 2039 | return UtilityTupleDescriptor(query->utilityStmt); |
| 2040 | |
| 2041 | case PORTAL_MULTI_QUERY: |
| 2042 | /* will not return tuples */ |
| 2043 | break; |
| 2044 | } |
| 2045 | return NULL; |
| 2046 | } |
| 2047 | |
| 2048 | /* |
| 2049 | * PlanCacheRelCallback |
no test coverage detected