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

Function ParseGetUserSpec

pg_documentdb/src/commands/users.c:1010–1120  ·  view source on GitHub ↗

* ParseGetUserSpec parses the wire * protocol message getUser() which gets user info */

Source from the content-addressed store, hash-verified

1008 * protocol message getUser() which gets user info
1009 */
1010static void
1011ParseGetUserSpec(pgbson *getSpec, GetUserSpec *spec)
1012{
1013 bson_iter_t getIter;
1014 PgbsonInitIterator(getSpec, &getIter);
1015
1016 spec->user = (StringView) {
1017 0
1018 };
1019 spec->showAllUsers = false;
1020 spec->showPrivileges = false;
1021 bool getUsersFieldFound = false;
1022 bool dbFound = false;
1023 while (bson_iter_next(&getIter))
1024 {
1025 const char *key = bson_iter_key(&getIter);
1026 if (strcmp(key, "usersInfo") == 0)
1027 {
1028 getUsersFieldFound = true;
1029 if (bson_iter_type(&getIter) == BSON_TYPE_INT32)
1030 {
1031 if (bson_iter_as_int64(&getIter) != 1)
1032 {
1033 ereport(ERROR, (errcode(ERRCODE_DOCUMENTDB_BADVALUE),
1034 errmsg(
1035 "The 'usersInfo' field contains an unsupported value.")));
1036 }
1037
1038 spec->showAllUsers = true;
1039 }
1040 else if (bson_iter_type(&getIter) == BSON_TYPE_UTF8)
1041 {
1042 uint32_t strLength = 0;
1043 const char *userString = bson_iter_utf8(&getIter, &strLength);
1044 spec->user = (StringView) {
1045 .string = userString,
1046 .length = strLength
1047 };
1048 }
1049 else if (BSON_ITER_HOLDS_DOCUMENT(&getIter))
1050 {
1051 const bson_value_t usersInfoBson = *bson_iter_value(&getIter);
1052 ParseUsersInfoDocument(&usersInfoBson, spec);
1053 }
1054 else
1055 {
1056 ereport(ERROR, (errcode(ERRCODE_DOCUMENTDB_BADVALUE),
1057 errmsg("Unsupported value specified for 'usersInfo'.")));
1058 }
1059 }
1060 else if (strcmp(key, "getUser") == 0)
1061 {
1062 getUsersFieldFound = true;
1063 EnsureTopLevelFieldType(key, &getIter, BSON_TYPE_UTF8);
1064 uint32_t strLength = 0;
1065 const char *userString = bson_iter_utf8(&getIter, &strLength);
1066 spec->user = (StringView) {
1067 .string = userString,

Callers 1

Calls 4

PgbsonInitIteratorFunction · 0.85
ParseUsersInfoDocumentFunction · 0.85
EnsureTopLevelFieldTypeFunction · 0.85
IsCommonSpecIgnoredFieldFunction · 0.85

Tested by

no test coverage detected