// static Status ListFilters::list(const QuerySettings& querySettings, BSONObjBuilder* bob) { invariant(bob); // Format of BSON result: // // { // hints: [ // { // query: <query>, // sort: <sort>, // projection: <projection>, // indexes: [<index1>, <index2>, <index3>, ...] // } // } BSONArrayBuilder hintsBuilder(bob->subarrayStart("filters")); std::vector<AllowedIndexEntry> entries = querySettings.getAllAllowedIndices(); for (vector<AllowedIndexEntry>::const_iterator i = entries.begin(); i != entries.end(); ++i) { AllowedIndexEntry entry = *i; BSONObjBuilder hintBob(hintsBuilder.subobjStart()); hintBob.append("query", entry.query); hintBob.append("sort", entry.sort); hintBob.append("projection", entry.projection); if (!entry.collation.isEmpty()) { hintBob.append("collation", entry.collation); } BSONArrayBuilder indexesBuilder(hintBob.subarrayStart("indexes")); for (BSONObjSet::const_iterator j = entry.indexKeyPatterns.begin(); j != entry.indexKeyPatterns.end(); ++j) { const BSONObj& index = *j; indexesBuilder.append(index); } for (const auto& indexEntry : entry.indexNames) { indexesBuilder.append(indexEntry); } indexesBuilder.doneFast(); } hintsBuilder.doneFast(); return Status::OK(); }
// static Status ListFilters::list(const QuerySettings& querySettings, BSONObjBuilder* bob) { invariant(bob); // Format of BSON result: // // { // hints: [ // { // query: <query>, // sort: <sort>, // projection: <projection>, // indexes: [<index1>, <index2>, <index3>, ...] // } // } BSONArrayBuilder hintsBuilder(bob->subarrayStart("filters")); OwnedPointerVector<AllowedIndexEntry> entries; entries.mutableVector() = querySettings.getAllAllowedIndices(); for (vector<AllowedIndexEntry*>::const_iterator i = entries.begin(); i != entries.end(); ++i) { AllowedIndexEntry* entry = *i; invariant(entry); BSONObjBuilder hintBob(hintsBuilder.subobjStart()); hintBob.append("query", entry->query); hintBob.append("sort", entry->sort); hintBob.append("projection", entry->projection); BSONArrayBuilder indexesBuilder(hintBob.subarrayStart("indexes")); for (vector<BSONObj>::const_iterator j = entry->indexKeyPatterns.begin(); j != entry->indexKeyPatterns.end(); ++j) { const BSONObj& index = *j; indexesBuilder.append(index); } indexesBuilder.doneFast(); } hintsBuilder.doneFast(); return Status::OK(); }