| 866 | } |
| 867 | |
| 868 | static void |
| 869 | setRuleCheckAsUser_Query(Query *qry, Oid userid) |
| 870 | { |
| 871 | ListCell *l; |
| 872 | |
| 873 | /* Set all the RTEs in this query node */ |
| 874 | foreach(l, qry->rtable) |
| 875 | { |
| 876 | RangeTblEntry *rte = (RangeTblEntry *) lfirst(l); |
| 877 | |
| 878 | if (rte->rtekind == RTE_SUBQUERY) |
| 879 | { |
| 880 | /* Recurse into subquery in FROM */ |
| 881 | setRuleCheckAsUser_Query(rte->subquery, userid); |
| 882 | } |
| 883 | else |
| 884 | rte->checkAsUser = userid; |
| 885 | } |
| 886 | |
| 887 | /* Recurse into subquery-in-WITH */ |
| 888 | foreach(l, qry->cteList) |
| 889 | { |
| 890 | CommonTableExpr *cte = (CommonTableExpr *) lfirst(l); |
| 891 | |
| 892 | setRuleCheckAsUser_Query(castNode(Query, cte->ctequery), userid); |
| 893 | } |
| 894 | |
| 895 | /* If there are sublinks, search for them and process their RTEs */ |
| 896 | if (qry->hasSubLinks) |
| 897 | query_tree_walker(qry, setRuleCheckAsUser_walker, (void *) &userid, |
| 898 | QTW_IGNORE_RC_SUBQUERIES); |
| 899 | } |
| 900 | |
| 901 | |
| 902 | /* |
no test coverage detected