* ParseRolesInfoSpec parses the rolesInfo command parameters */
| 905 | * ParseRolesInfoSpec parses the rolesInfo command parameters |
| 906 | */ |
| 907 | static void |
| 908 | ParseRolesInfoSpec(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( |
no test coverage detected