* GetSingleUserInfo queries and processes user role information for a given user. * Returns the user info datum containing the query result. */
| 1631 | * Returns the user info datum containing the query result. |
| 1632 | */ |
| 1633 | static Datum |
| 1634 | GetSingleUserInfo(const char *userName, bool returnDocuments) |
| 1635 | { |
| 1636 | if (userName == NULL) |
| 1637 | { |
| 1638 | ereport(ERROR, (errcode(ERRCODE_DOCUMENTDB_INTERNALERROR), |
| 1639 | errmsg("Username is null"))); |
| 1640 | } |
| 1641 | |
| 1642 | const char *cmdStr; |
| 1643 | |
| 1644 | if (returnDocuments) |
| 1645 | { |
| 1646 | cmdStr = FormatSqlQuery( |
| 1647 | "WITH r AS (" |
| 1648 | " SELECT child.rolname::text AS child_role, " |
| 1649 | " CASE WHEN parent.rolname = '%s' " |
| 1650 | " THEN '%s' " |
| 1651 | " ELSE parent.rolname::text " |
| 1652 | " END AS parent_role " |
| 1653 | " FROM pg_roles parent " |
| 1654 | " JOIN pg_auth_members am ON parent.oid = am.roleid " |
| 1655 | " JOIN pg_roles child ON am.member = child.oid " |
| 1656 | " WHERE child.rolcanlogin = true " |
| 1657 | " AND child.rolname = $1" |
| 1658 | " AND child.rolname NOT IN ('%s', '%s', '%s', '%s', '%s') " |
| 1659 | ") " |
| 1660 | "SELECT ARRAY_AGG(%s.row_get_bson(r) ORDER BY r.parent_role) " |
| 1661 | "FROM r;", |
| 1662 | ApiRootInternalRole, ApiRootRole, |
| 1663 | ApiAdminRole, ApiAdminRoleV2, ApiBgWorkerRole, ApiReplicationRole, |
| 1664 | ApiSettingsManagerRole, |
| 1665 | CoreSchemaName); |
| 1666 | } |
| 1667 | else |
| 1668 | { |
| 1669 | cmdStr = FormatSqlQuery( |
| 1670 | "SELECT CASE WHEN parent.rolname = '%s' " |
| 1671 | " THEN '%s' " |
| 1672 | " ELSE parent.rolname::text " |
| 1673 | " END " |
| 1674 | "FROM pg_roles parent " |
| 1675 | "JOIN pg_auth_members am ON parent.oid = am.roleid " |
| 1676 | "JOIN pg_roles child ON am.member = child.oid " |
| 1677 | "WHERE child.rolcanlogin = true " |
| 1678 | " AND child.rolname = $1 " |
| 1679 | " AND child.rolname NOT IN ('%s', '%s', '%s', '%s', '%s') " |
| 1680 | "ORDER BY parent.rolname " |
| 1681 | "LIMIT 1;", |
| 1682 | ApiRootInternalRole, ApiRootRole, |
| 1683 | ApiAdminRole, ApiAdminRoleV2, ApiBgWorkerRole, ApiReplicationRole, |
| 1684 | ApiSettingsManagerRole); |
| 1685 | } |
| 1686 | |
| 1687 | int argCount = 1; |
| 1688 | Oid argTypes[1]; |
| 1689 | Datum argValues[1]; |
| 1690 |
no test coverage detected