MCPcopy Create free account
hub / github.com/couchbase/sync_gateway / getRoleIDsUsingIndex

Method getRoleIDsUsingIndex

db/database.go:1356–1438  ·  view source on GitHub ↗

getRoleIDsUsingIndex returns names of all roles. includDeleted toggles whether or not to include deleted roles.

(ctx context.Context, includeDeleted bool)

Source from the content-addressed store, hash-verified

1354
1355// getRoleIDsUsingIndex returns names of all roles. includDeleted toggles whether or not to include deleted roles.
1356func (db *DatabaseContext) getRoleIDsUsingIndex(ctx context.Context, includeDeleted bool) (roles []string, err error) {
1357
1358 dbRoleIDPrefix := db.MetadataKeys.RoleKeyPrefix()
1359
1360 roleRe, err := regexp.Compile(`^` + dbRoleIDPrefix + `[^:]*$`)
1361 if err != nil {
1362 return nil, err
1363 }
1364 startKey := dbRoleIDPrefix
1365 limit := db.Options.QueryPaginationLimit
1366 if limit == 0 {
1367 limit = DefaultQueryPaginationLimit
1368 }
1369
1370 roles = []string{}
1371
1372outerLoop:
1373 for {
1374 var results sgbucket.QueryResultIterator
1375 var err error
1376 if includeDeleted {
1377 results, err = db.QueryAllRoles(ctx, startKey, limit)
1378 } else {
1379 results, err = db.QueryRoles(ctx, startKey, limit)
1380 }
1381 if err != nil {
1382 return nil, err
1383 }
1384
1385 var roleName string
1386 lenRoleKeyPrefix := len(dbRoleIDPrefix)
1387
1388 resultCount := 0
1389
1390 for {
1391 // startKey is inclusive for views, so need to skip first result if using non-empty startKey, as this results in an overlapping result
1392 var skipAddition bool
1393 if resultCount == 0 && startKey != dbRoleIDPrefix {
1394 skipAddition = true
1395 }
1396
1397 var queryRow principalRow
1398 found := results.Next(ctx, &queryRow)
1399 if !found {
1400 break
1401 }
1402 if len(queryRow.Id) < lenRoleKeyPrefix {
1403 continue
1404 }
1405 if !strings.HasPrefix(queryRow.Id, dbRoleIDPrefix) {
1406 break
1407 }
1408 if !db.UseViews() {
1409 roleName = queryRow.Name
1410 } else {
1411 roleName = queryRow.Id[lenRoleKeyPrefix:]
1412
1413 }

Callers 2

AllPrincipalIDsMethod · 0.95
GetRoleIDsMethod · 0.95

Calls 6

QueryAllRolesMethod · 0.95
QueryRolesMethod · 0.95
UseViewsMethod · 0.95
RoleKeyPrefixMethod · 0.80
CloseMethod · 0.65
NextMethod · 0.45

Tested by

no test coverage detected