MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / act_grant_revoke

Function act_grant_revoke

src/gpre/sql.cpp:3142–3363  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3140//
3141
3142static act* act_grant_revoke(act_t type)
3143{
3144 gpre_req* request = MSC_request(REQ_ddl);
3145 PRV priv_block = MSC_privilege_block();
3146
3147 // if it is revoke action, parse the optional grant option for
3148
3149 if (type == ACT_dyn_revoke)
3150 {
3151 if (MSC_match(KW_GRANT))
3152 {
3153 if (!MSC_match(KW_OPTION))
3154 CPR_s_error("OPTION");
3155 if (!MSC_match(KW_FOR))
3156 CPR_s_error("FOR");
3157 priv_block->prv_privileges |= PRV_grant_option;
3158 }
3159 }
3160
3161 bool execute_priv = false;
3162
3163 if (MSC_match(KW_ALL))
3164 {
3165 MSC_match(KW_PRIVILEGES); // Keyword 'privileges' is optional
3166 priv_block->prv_privileges = PRV_all;
3167 }
3168 else if (MSC_match(KW_EXECUTE))
3169 {
3170 priv_block->prv_privileges |= PRV_execute;
3171 execute_priv = true;
3172 }
3173 else
3174 {
3175 gpre_lls** fields = &priv_block->prv_fields;
3176 while (true)
3177 {
3178 if (MSC_match(KW_SELECT))
3179 priv_block->prv_privileges |= PRV_select;
3180 else if (MSC_match(KW_INSERT))
3181 priv_block->prv_privileges |= PRV_insert;
3182 else if (MSC_match(KW_DELETE))
3183 priv_block->prv_privileges |= PRV_delete;
3184 else if (MSC_match(KW_UPDATE))
3185 {
3186 priv_block->prv_privileges |= PRV_update;
3187 if (MSC_match(KW_LEFT_PAREN))
3188 {
3189 SCHAR col_name[NAME_SIZE + 1];
3190 do {
3191 SQL_resolve_identifier("<column name>", col_name, NAME_SIZE + 1);
3192 if (gpreGlob.token_global.tok_length >= NAME_SIZE)
3193 PAR_error("Field name too long");
3194
3195 STR field_name = (STR) MSC_string(col_name);
3196 MSC_push((gpre_nod*) field_name, fields);
3197 fields = &(*fields)->lls_next;
3198 CPR_token();
3199 } while (MSC_match(KW_COMMA));

Callers 1

SQL_actionFunction · 0.85

Calls 15

MSC_requestFunction · 0.85
MSC_privilege_blockFunction · 0.85
MSC_matchFunction · 0.85
CPR_s_errorFunction · 0.85
SQL_resolve_identifierFunction · 0.85
MSC_stringFunction · 0.85
MSC_pushFunction · 0.85
CPR_tokenFunction · 0.85
SQL_relation_nameFunction · 0.85
SQL_procedureFunction · 0.85
SQL_relationFunction · 0.85
MET_trigger_existsFunction · 0.85

Tested by

no test coverage detected