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

Function TryCheckMetaScoreOrderBy

pg_documentdb/src/opclass/bson_text_gin.c:448–492  ·  view source on GitHub ↗

* Validates that the order by is for a text search * i.e. the document { "$meta": "textScore" } */

Source from the content-addressed store, hash-verified

446 * i.e. the document { "$meta": "textScore" }
447 */
448bool
449TryCheckMetaScoreOrderBy(const bson_value_t *value)
450{
451 pgbsonelement metaOrderingElement = { 0 };
452
453 if (value->value_type != BSON_TYPE_DOCUMENT)
454 {
455 return false;
456 }
457
458 if (TryGetBsonValueToPgbsonElement(value, &metaOrderingElement) &&
459 metaOrderingElement.pathLength == 5 &&
460 strncmp(metaOrderingElement.path, "$meta", 5) == 0)
461 {
462 if (metaOrderingElement.bsonValue.value_type != BSON_TYPE_UTF8)
463 {
464 ereport(ERROR, (errcode(ERRCODE_DOCUMENTDB_LOCATION31138),
465 errmsg("Invalid use of $meta sort: $meta: \"%s\"",
466 BsonValueToJsonForLogging(
467 &metaOrderingElement.bsonValue))));
468 }
469
470 if (metaOrderingElement.bsonValue.value.v_utf8.len != 9 ||
471 strncmp(metaOrderingElement.bsonValue.value.v_utf8.str, "textScore", 9) != 0)
472 {
473 ereport(ERROR, (errcode(ERRCODE_DOCUMENTDB_LOCATION31138),
474 errmsg("$meta for sort only allows textScore not %s",
475 metaOrderingElement.bsonValue.value.v_utf8.str)));
476 }
477
478 bson_iter_t documentIterator;
479 BsonValueInitIterator(value, &documentIterator);
480 if (!TryGetSinglePgbsonElementFromBsonIterator(&documentIterator,
481 &metaOrderingElement))
482 {
483 ereport(ERROR, (errcode(ERRCODE_DOCUMENTDB_FAILEDTOPARSE),
484 errmsg(
485 "Additional keys are not permitted within a $meta sort specification.")));
486 }
487
488 return true;
489 }
490
491 return false;
492}
493
494
495/*

Callers 2

BsonOrderbyCoreFunction · 0.85

Tested by

no test coverage detected