MCPcopy Create free account
hub / github.com/documentdb/documentdb / ParseRolesInfoSpec

Function ParseRolesInfoSpec

pg_documentdb/src/commands/roles.c:907–1017  ·  view source on GitHub ↗

* ParseRolesInfoSpec parses the rolesInfo command parameters */

Source from the content-addressed store, hash-verified

905 * ParseRolesInfoSpec parses the rolesInfo command parameters
906 */
907static void
908ParseRolesInfoSpec(pgbson *rolesInfoBson, RolesInfoSpec *rolesInfoSpec)
909{
910 bson_iter_t rolesInfoIter;
911 PgbsonInitIterator(rolesInfoBson, &rolesInfoIter);
912
913 rolesInfoSpec->roleNames = NIL;
914 rolesInfoSpec->showAllRoles = false;
915 rolesInfoSpec->showBuiltInRoles = false;
916 rolesInfoSpec->showPrivileges = false;
917 bool rolesInfoFound = false;
918 bool dbFound = false;
919 while (bson_iter_next(&rolesInfoIter))
920 {
921 const char *key = bson_iter_key(&rolesInfoIter);
922
923 if (strcmp(key, "rolesInfo") == 0)
924 {
925 rolesInfoFound = true;
926 if (bson_iter_type(&rolesInfoIter) == BSON_TYPE_INT32)
927 {
928 int32_t value = bson_iter_int32(&rolesInfoIter);
929 if (value == 1)
930 {
931 rolesInfoSpec->showAllRoles = true;
932 }
933 else
934 {
935 ereport(ERROR, (errcode(ERRCODE_DOCUMENTDB_BADVALUE),
936 errmsg(
937 "'rolesInfo' must be 1, a string, a document, or an array.")));
938 }
939 }
940 else if (bson_iter_type(&rolesInfoIter) == BSON_TYPE_ARRAY)
941 {
942 bson_iter_t rolesArrayIter;
943 bson_iter_recurse(&rolesInfoIter, &rolesArrayIter);
944
945 while (bson_iter_next(&rolesArrayIter))
946 {
947 ParseRoleDefinition(&rolesArrayIter, rolesInfoSpec);
948 }
949 }
950 else
951 {
952 ParseRoleDefinition(&rolesInfoIter, rolesInfoSpec);
953 }
954 }
955 else if (strcmp(key, "showBuiltInRoles") == 0)
956 {
957 if (BSON_ITER_HOLDS_BOOL(&rolesInfoIter))
958 {
959 rolesInfoSpec->showBuiltInRoles = bson_iter_as_bool(&rolesInfoIter);
960 }
961 else
962 {
963 ereport(ERROR, (errcode(ERRCODE_DOCUMENTDB_BADVALUE),
964 errmsg(

Callers 1

roles_infoFunction · 0.85

Calls 4

PgbsonInitIteratorFunction · 0.85
ParseRoleDefinitionFunction · 0.85
EnsureTopLevelFieldTypeFunction · 0.85
IsCommonSpecIgnoredFieldFunction · 0.85

Tested by

no test coverage detected