MCPcopy Create free account
hub / github.com/apache/impala / TPrivilegeFromObjectName

Function TPrivilegeFromObjectName

be/src/catalog/catalog-util.cc:318–374  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

316}
317
318Status TPrivilegeFromObjectName(const string& object_name, TPrivilege* privilege) {
319 DCHECK(privilege != nullptr);
320 // Format:
321 // server=val->action=val->grantoption=[true|false]
322 // server=val->uri=val->action=val->grantoption=[true|false]
323 // server=val->db=val->action=val->grantoption=[true|false]
324 // server=val->db=val->table=val->action=val->grantoption=[true|false]
325 // server=val->db=val->table=val->column=val->action=val->grantoption=[true|false]
326 vector<string> split;
327 boost::algorithm::split_regex(split, object_name, boost::regex("->"));
328 for (const auto& s: split) {
329 vector<string> key_value;
330 boost::split(key_value, s, [](char c){ return c == '='; });
331 if (key_value.size() != 2) {
332 stringstream error_msg;
333 error_msg << "Invalid field name/value format: " << s;
334 return Status(error_msg.str());
335 }
336
337 if (key_value[0] == "server") {
338 privilege->__set_server_name(key_value[1]);
339 privilege->__set_scope(TPrivilegeScope::SERVER);
340 } else if (key_value[0] == "uri") {
341 privilege->__set_uri(key_value[1]);
342 privilege->__set_scope(TPrivilegeScope::URI);
343 } else if (key_value[0] == "db") {
344 privilege->__set_db_name(key_value[1]);
345 privilege->__set_scope(TPrivilegeScope::DATABASE);
346 } else if (key_value[0] == "table") {
347 privilege->__set_table_name(key_value[1]);
348 privilege->__set_scope(TPrivilegeScope::TABLE);
349 } else if (key_value[0] == "column") {
350 privilege->__set_column_name(key_value[1]);
351 privilege->__set_scope(TPrivilegeScope::COLUMN);
352 } else if (key_value[0] == "action") {
353 TPrivilegeLevel::type privilege_level;
354 Status status = TPrivilegeLevelFromObjectName(key_value[1], &privilege_level);
355 if (!status.ok()) return status;
356 privilege->__set_privilege_level(privilege_level);
357 } else if (key_value[0] == "grantoption") {
358 if (key_value[1] == "true") {
359 privilege->__set_has_grant_opt(true);
360 } else if (key_value[1] == "false") {
361 privilege->__set_has_grant_opt(false);
362 } else {
363 stringstream error_msg;
364 error_msg << "Invalid grant option: " << key_value[1];
365 return Status(error_msg.str());
366 }
367 } else {
368 stringstream error_msg;
369 error_msg << "Invalid privilege field name: " << key_value[0];
370 return Status(error_msg.str());
371 }
372 }
373 return Status::OK();
374}
375

Callers 2

TESTFunction · 0.85

Calls 6

OKFunction · 0.85
StatusClass · 0.50
sizeMethod · 0.45
strMethod · 0.45
okMethod · 0.45

Tested by 1

TESTFunction · 0.68