| 1764 | } |
| 1765 | |
| 1766 | static Node * |
| 1767 | transformSubLink(ParseState *pstate, SubLink *sublink) |
| 1768 | { |
| 1769 | Node *result = (Node *) sublink; |
| 1770 | Query *qtree; |
| 1771 | const char *err; |
| 1772 | |
| 1773 | /* |
| 1774 | * Check to see if the sublink is in an invalid place within the query. We |
| 1775 | * allow sublinks everywhere in SELECT/INSERT/UPDATE/DELETE, but generally |
| 1776 | * not in utility statements. |
| 1777 | */ |
| 1778 | err = NULL; |
| 1779 | switch (pstate->p_expr_kind) |
| 1780 | { |
| 1781 | case EXPR_KIND_NONE: |
| 1782 | Assert(false); /* can't happen */ |
| 1783 | break; |
| 1784 | case EXPR_KIND_OTHER: |
| 1785 | /* Accept sublink here; caller must throw error if wanted */ |
| 1786 | break; |
| 1787 | case EXPR_KIND_JOIN_ON: |
| 1788 | case EXPR_KIND_JOIN_USING: |
| 1789 | case EXPR_KIND_FROM_SUBSELECT: |
| 1790 | case EXPR_KIND_FROM_FUNCTION: |
| 1791 | case EXPR_KIND_WHERE: |
| 1792 | case EXPR_KIND_POLICY: |
| 1793 | case EXPR_KIND_HAVING: |
| 1794 | case EXPR_KIND_FILTER: |
| 1795 | case EXPR_KIND_WINDOW_PARTITION: |
| 1796 | case EXPR_KIND_WINDOW_ORDER: |
| 1797 | case EXPR_KIND_WINDOW_FRAME_RANGE: |
| 1798 | case EXPR_KIND_WINDOW_FRAME_ROWS: |
| 1799 | case EXPR_KIND_WINDOW_FRAME_GROUPS: |
| 1800 | case EXPR_KIND_SELECT_TARGET: |
| 1801 | case EXPR_KIND_INSERT_TARGET: |
| 1802 | case EXPR_KIND_UPDATE_SOURCE: |
| 1803 | case EXPR_KIND_UPDATE_TARGET: |
| 1804 | case EXPR_KIND_GROUP_BY: |
| 1805 | case EXPR_KIND_ORDER_BY: |
| 1806 | case EXPR_KIND_DISTINCT_ON: |
| 1807 | case EXPR_KIND_LIMIT: |
| 1808 | case EXPR_KIND_OFFSET: |
| 1809 | case EXPR_KIND_RETURNING: |
| 1810 | case EXPR_KIND_VALUES: |
| 1811 | case EXPR_KIND_VALUES_SINGLE: |
| 1812 | case EXPR_KIND_CYCLE_MARK: |
| 1813 | /* okay */ |
| 1814 | break; |
| 1815 | case EXPR_KIND_CHECK_CONSTRAINT: |
| 1816 | case EXPR_KIND_DOMAIN_CHECK: |
| 1817 | err = _("cannot use subquery in check constraint"); |
| 1818 | break; |
| 1819 | case EXPR_KIND_COLUMN_DEFAULT: |
| 1820 | case EXPR_KIND_FUNCTION_DEFAULT: |
| 1821 | err = _("cannot use subquery in DEFAULT expression"); |
| 1822 | break; |
| 1823 | case EXPR_KIND_INDEX_EXPRESSION: |
no test coverage detected