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

Function BuildBatchDeletionSpec

pg_documentdb/src/commands/delete.c:276–400  ·  view source on GitHub ↗

* BuildBatchDeletionSpec validates the delete command BSON and builds * a BatchDeletionSpec. */

Source from the content-addressed store, hash-verified

274 * a BatchDeletionSpec.
275 */
276static BatchDeletionSpec *
277BuildBatchDeletionSpec(bson_iter_t *deleteCommandIter, pgbsonsequence *deleteDocs,
278 Datum *databaseNameDatum)
279{
280 const char *collectionName = NULL;
281 bson_value_t deletions = { 0 };
282 bson_value_t let = { 0 };
283 bool isOrdered = true;
284 bool hasDeletes = false;
285
286 while (bson_iter_next(deleteCommandIter))
287 {
288 const char *field = bson_iter_key(deleteCommandIter);
289
290 if (strcmp(field, "delete") == 0)
291 {
292 if (!BSON_ITER_HOLDS_UTF8(deleteCommandIter))
293 {
294 ereport(ERROR, (errcode(ERRCODE_DOCUMENTDB_BADVALUE),
295 errmsg("Collection name contains an invalid data type %s",
296 BsonIterTypeName(deleteCommandIter))));
297 }
298
299 collectionName = bson_iter_utf8(deleteCommandIter, NULL);
300 }
301 else if (strcmp(field, "deletes") == 0)
302 {
303 EnsureTopLevelFieldType("delete.deletes", deleteCommandIter, BSON_TYPE_ARRAY);
304
305 if (deleteDocs != NULL)
306 {
307 ereport(ERROR, (errcode(ERRCODE_DOCUMENTDB_FAILEDTOPARSE),
308 errmsg("Unexpected extra delete operations")));
309 }
310
311 deletions = *bson_iter_value(deleteCommandIter);
312 hasDeletes = true;
313 }
314 else if (strcmp(field, "ordered") == 0)
315 {
316 EnsureTopLevelFieldType("delete.ordered", deleteCommandIter, BSON_TYPE_BOOL);
317
318 isOrdered = bson_iter_bool(deleteCommandIter);
319 }
320 else if (strcmp(field, "maxTimeMS") == 0)
321 {
322 EnsureTopLevelFieldIsNumberLike("delete.maxTimeMS", bson_iter_value(
323 deleteCommandIter));
324 SetExplicitStatementTimeout(BsonValueAsInt32(bson_iter_value(
325 deleteCommandIter)));
326 }
327 else if (strcmp(field, "let") == 0)
328 {
329 ReportFeatureUsage(FEATURE_LET_TOP_LEVEL);
330 bool hasValue = EnsureTopLevelFieldTypeNullOkUndefinedOK("let",
331 deleteCommandIter,
332 BSON_TYPE_DOCUMENT);
333 if (hasValue)

Callers 1

command_deleteFunction · 0.85

Tested by

no test coverage detected