113 *hasRowSecurity =
false;
148 *hasRowSecurity =
true;
164 commandType = rt_index ==
root->resultRelation ?
529 *hasRowSecurity =
true;
557 if (
policy->polcmd ==
'*')
589 elog(
ERROR,
"unrecognized policy command type %d",
622 (*row_security_policy_hook_restrictive) (cmd, relation);
644 (*row_security_policy_hook_permissive) (cmd, relation);
680 if (
pa->policy_name ==
NULL)
682 if (
pb->policy_name ==
NULL)
685 return strcmp(
pa->policy_name,
pb->policy_name);
808#define QUAL_FOR_WCO(policy) \
810 (policy)->with_check_qual != NULL ? \
811 (policy)->with_check_qual : (policy)->qual )
851 wco->cascaded =
false;
883 wco->cascaded =
false;
905 wco->cascaded =
false;
bool has_privs_of_role(Oid member, Oid role)
#define Assert(condition)
#define OidIsValid(objectId)
List * lappend(List *list, void *datum)
void list_sort(List *list, list_sort_comparator cmp)
List * list_append_unique(List *list, void *datum)
Expr * makeBoolExpr(BoolExprType boolop, List *args, int location)
Const * makeConst(Oid consttype, int32 consttypmod, Oid constcollid, int constlen, Datum constvalue, bool constisnull, bool constbyval)
char * pstrdup(const char *in)
RTEPermissionInfo * getRTEPermissionInfo(List *rteperminfos, RangeTblEntry *rte)
@ WCO_RLS_MERGE_UPDATE_CHECK
@ WCO_RLS_MERGE_DELETE_CHECK
static int list_length(const List *l)
static Datum BoolGetDatum(bool X)
#define RelationGetRelationName(relation)
void setRuleCheckAsUser(Node *node, Oid userid)
void ChangeVarNodes(Node *node, int rt_index, int new_index, int sublevels_up)
int check_enable_rls(Oid relid, Oid checkAsUser, bool noError)
row_security_policy_hook_type row_security_policy_hook_permissive
void get_row_security_policies(Query *root, RangeTblEntry *rte, int rt_index, List **securityQuals, List **withCheckOptions, bool *hasRowSecurity, bool *hasSubLinks)
static bool check_role_for_policy(ArrayType *policy_roles, Oid user_id)
row_security_policy_hook_type row_security_policy_hook_restrictive
#define QUAL_FOR_WCO(policy)
static void sort_policies_by_name(List *policies)
static void add_with_check_options(Relation rel, int rt_index, WCOKind kind, List *permissive_policies, List *restrictive_policies, List **withCheckOptions, bool *hasSubLinks, bool force_using)
static void get_policies_for_relation(Relation relation, CmdType cmd, Oid user_id, List **permissive_policies, List **restrictive_policies)
static int row_security_policy_cmp(const ListCell *a, const ListCell *b)
static void add_security_quals(int rt_index, List *permissive_policies, List *restrictive_policies, List **securityQuals, bool *hasSubLinks)
List *(* row_security_policy_hook_type)(CmdType cmdtype, Relation relation)
struct RowSecurityDesc * rd_rsdesc
void table_close(Relation relation, LOCKMODE lockmode)
Relation table_open(Oid relationId, LOCKMODE lockmode)