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

Function PopulateDensifyArgs

pg_documentdb/src/aggregation/bson_densify.c:1086–1347  ·  view source on GitHub ↗

* Parses the densifySpec and populates the values in DensifyArguments structure */

Source from the content-addressed store, hash-verified

1084 * Parses the densifySpec and populates the values in DensifyArguments structure
1085 */
1086static void
1087PopulateDensifyArgs(DensifyArguments *arguments, const pgbson *densifySpec)
1088{
1089 Assert(arguments != NULL);
1090 bson_iter_t iter;
1091 PgbsonInitIterator(densifySpec, &iter);
1092 bson_value_t fieldValue = { 0 };
1093 bson_value_t rangeValue = { 0 };
1094 bson_value_t partitionByFieldsValue = { 0 };
1095
1096 while (bson_iter_next(&iter))
1097 {
1098 pgbsonelement element;
1099 BsonIterToPgbsonElement(&iter, &element);
1100
1101 if (strcmp(element.path, "field") == 0)
1102 {
1103 fieldValue = element.bsonValue;
1104 }
1105 else if (strcmp(element.path, "range") == 0)
1106 {
1107 rangeValue = element.bsonValue;
1108 }
1109 else if (strcmp(element.path, "partitionByFields") == 0)
1110 {
1111 partitionByFieldsValue = element.bsonValue;
1112 }
1113 }
1114
1115 /* Parse required field */
1116 if (fieldValue.value_type != BSON_TYPE_EOD)
1117 {
1118 EnsureTopLevelFieldValueType("$densify.field", &fieldValue, BSON_TYPE_UTF8);
1119 EnsureStringValueNotDollarPrefixed(fieldValue.value.v_utf8.str,
1120 fieldValue.value.v_utf8.len);
1121
1122 arguments->field = CreateStringViewFromString(fieldValue.value.v_utf8.str);
1123 }
1124 else
1125 {
1126 ThrowTopLevelMissingFieldErrorWithCode("$densify.field",
1127 ERRCODE_DOCUMENTDB_LOCATION40414);
1128 }
1129
1130 /* Parse required range */
1131 if (rangeValue.value_type != BSON_TYPE_EOD)
1132 {
1133 EnsureTopLevelFieldValueType("$densify.range", &rangeValue, BSON_TYPE_DOCUMENT);
1134
1135 bson_iter_t rangeIter;
1136 BsonValueInitIterator(&rangeValue, &rangeIter);
1137 while (bson_iter_next(&rangeIter))
1138 {
1139 pgbsonelement rangeElement;
1140 BsonIterToPgbsonElement(&rangeIter, &rangeElement);
1141
1142 if (strcmp(rangeElement.path, "bounds") == 0)
1143 {

Callers 2

HandleDensifyFunction · 0.85

Tested by

no test coverage detected