Section 12.3 |
Encoding of plus character in URLs |
485 |
@@ -2759,6 +2764,7 @@ Core.ContentID
term defined in OData-VocCore. Services that respond with 200 OK
SHOULD annotate the entities in the response using the same Core.ContentID
value as specified in the request.
Services SHOULD advertise support for updating a collection using a delta payload through the DeltaUpdateSupported
property of the Capabilities.UpdateRestrictions
term, and SHOULD advertise support for returning the Core.ContentID
through the ContentIDSupported
property of the Capabilities.DeepUpdateSupport
term, both defined in OData-VocCap.
For each entity being updated or removed, clients MAY specify an ETag value obtained from a previous request. If an ETag is provided that does not match the ETag value of the entity being updated or removed, or if an ETag is provided when adding or updating an entity that does not currently exist, then services that support ETags MUST NOT apply the change and instead report a 412 Precondition Failed
error. The special value *
can be used to match any existing entity but fail if the entity does not already exist.
+Added/changed entities that specify format-specific control information equivalent to an If-Match-None: *
header OData-JSON, section 4.6.10 MUST NOT be treated as an update.
The response, if requested, is a delta payload, in the same structure and order as the request payload, representing the applied changes.
diff --git a/docs/odata-protocol/odata-protocol.md b/docs/odata-protocol/odata-protocol.md
index 42bd081a..9ec59e66 100644
--- a/docs/odata-protocol/odata-protocol.md
+++ b/docs/odata-protocol/odata-protocol.md
@@ -358,10 +358,11 @@ Section | Feature / Change | Issue
[Section 10.2](#CollectionofEntities)| Context URLs use parentheses-style keys without percent-encoding| [368](https://github.com/oasis-tcs/odata-specs/issues/368)
[Section 11.4](#DataModification)| Response code `204 No Content` after successful data modification if requested response could not be constructed| [443](https://github.com/oasis-tcs/odata-specs/issues/443)
[Section 11.4.2](#CreateanEntity)| Services can validate non-insertable property values in insert payloads| [356](https://github.com/oasis-tcs/odata-specs/issues/356)
-|Section 11.4.2.2](#CreateRelatedEntitiesWhenCreatinganEntity) Deep-insert response includes at least the properties present in the request| [363](https://github.com/oasis-tcs/odata-specs/issues/363)
+[Section 11.4.2.2](#CreateRelatedEntitiesWhenCreatinganEntity)| Deep-insert response includes at least the properties present in the request| [363](https://github.com/oasis-tcs/odata-specs/issues/363)
[Section 11.4.3](#UpdateanEntity)| Services can validate non-updatable property values in update payloads| [356](https://github.com/oasis-tcs/odata-specs/issues/356)
[Section 11.4.4](#UpsertanEntity)| Upserts to single-valued non-containment navigation properties| [455](https://github.com/oasis-tcs/odata-specs/issues/455)
[Section 11.4.9.3](#UpdateaComplexProperty)| Setting a complex property to a different type| [534](https://github.com/oasis-tcs/odata-specs/issues/534)
+[Section 11.4.12](#UpdateaCollectionofEntities)| Control information to prevent updates| [2021](https://github.com/oasis-tcs/odata-specs/issues/2021)
[Section 11.4.13](#ReplaceaCollectionofEntities)| Semantics of `continue-on-error` when replacing a collection of entities | [358](https://github.com/oasis-tcs/odata-specs/issues/358)
[Section 12](#Conformance) | Allow `400 Bad Request` in addition to `501 Not Implemented` for unsupported functionality| [391](https://github.com/oasis-tcs/odata-specs/issues/391)
[Section 12.3](#InteroperableODataClients) | Encoding of plus character in URLs | [485](https://github.com/oasis-tcs/odata-specs/issues/485)
@@ -5182,6 +5183,10 @@ then services that support ETags MUST NOT apply the change and instead
[report](#ErrorHandlingwhenUpdatingaCollectionofEntities) a `412 Precondition Failed` error.
The special value `*` can be used to match any existing entity but fail if the entity does not already exist.
+Added/changed entities that specify format-specific control information
+equivalent to an `If-Match-None: *` header [OData-JSON, section 4.6.10](https://docs.oasis-open.org/odata/odata-json-format/v4.02/odata-json-format-v4.02.html#ControlInformationetagodataetag)
+MUST NOT be treated as an update.
+
The response, if requested, is a delta payload, in the same structure
and order as the request payload, representing the applied changes.
diff --git a/odata-json-format/1 Introduction.md b/odata-json-format/1 Introduction.md
index 9d8e31c5..fe81cf42 100644
--- a/odata-json-format/1 Introduction.md
+++ b/odata-json-format/1 Introduction.md
@@ -27,14 +27,17 @@ Fragment portion of Context URL is not percent-encoded|
[Section ##ControlInformationidodataid]|
Transient entities can be identifiable|
[1928](https://github.com/oasis-tcs/odata-specs/issues/1928)
+[Section ##ControlInformationetagodataetag]|
+Control information `"@etag": ""` to prevent updates|
+[2021](https://github.com/oasis-tcs/odata-specs/issues/2021)
[Section ##ControlInformationmediaodatamedia]|
`mediaContentType` can be `null`|
[536](https://github.com/oasis-tcs/odata-specs/issues/536)
[Section ##StructuralProperty], [Section ##InformativeReferences]|
Removed reference to obsolete version of GeoJSON|
[456](https://github.com/oasis-tcs/odata-specs/issues/456)
-[Section ##DeletedEntity] |
-`type` control information, if present, must come immediately after `removed` |
+[Section ##DeletedEntity]|
+`type` control information, if present, must come immediately after `removed`|
[1985](https://github.com/oasis-tcs/odata-specs/issues/1985)
[Section ##ActionInvocation]|
Allow common expressions in action payloads|
diff --git a/odata-json-format/4 Common Characteristics.md b/odata-json-format/4 Common Characteristics.md
index b09a8501..268816ac 100644
--- a/odata-json-format/4 Common Characteristics.md
+++ b/odata-json-format/4 Common Characteristics.md
@@ -499,6 +499,9 @@ opaque string value that can be used in a subsequent request to
determine if the value of the entity or collection has changed.
For details on how ETags are used, see [#OData-Protocol#UseofETagsforAvoidingUpdateConflicts].
+The special value `"@etag": "*"` is equivalent to the header `If-Match: *`,
+and the special value `"@etag": ""` is equivalent to the header `If-None-Match: *`,
+see [#OData-Protocol#UpdateaCollectionofEntities].
The `etag` control information is ignored in request payloads for
single entities and not written in responses if
diff --git a/odata-protocol/1 Introduction.md b/odata-protocol/1 Introduction.md
index f1dc9565..91a8b640 100644
--- a/odata-protocol/1 Introduction.md
+++ b/odata-protocol/1 Introduction.md
@@ -36,7 +36,7 @@ Response code `204 No Content` after successful data modification if requested r
[Section ##CreateanEntity]|
Services can validate non-insertable property values in insert payloads|
[356](https://github.com/oasis-tcs/odata-specs/issues/356)
-|Section ##CreateRelatedEntitiesWhenCreatinganEntity]
+[Section ##CreateRelatedEntitiesWhenCreatinganEntity]|
Deep-insert response includes at least the properties present in the request|
[363](https://github.com/oasis-tcs/odata-specs/issues/363)
[Section ##UpdateanEntity]|
@@ -48,6 +48,9 @@ Upserts to single-valued non-containment navigation properties|
[Section ##UpdateaComplexProperty]|
Setting a complex property to a different type|
[534](https://github.com/oasis-tcs/odata-specs/issues/534)
+[Section ##UpdateaCollectionofEntities]|
+Control information to prevent updates|
+[2021](https://github.com/oasis-tcs/odata-specs/issues/2021)
[Section ##ReplaceaCollectionofEntities]| Semantics of `continue-on-error` when replacing a collection of entities | [358](https://github.com/oasis-tcs/odata-specs/issues/358)
[Section ##Conformance] | Allow `400 Bad Request` in addition to `501 Not Implemented` for unsupported functionality| [391](https://github.com/oasis-tcs/odata-specs/issues/391)
[Section ##InteroperableODataClients] | Encoding of plus character in URLs | [485](https://github.com/oasis-tcs/odata-specs/issues/485)
diff --git a/odata-protocol/11.4 Data Modification.md b/odata-protocol/11.4 Data Modification.md
index 8ee964bd..47fcdd5c 100644
--- a/odata-protocol/11.4 Data Modification.md
+++ b/odata-protocol/11.4 Data Modification.md
@@ -1167,6 +1167,10 @@ then services that support ETags MUST NOT apply the change and instead
[report](#ErrorHandlingwhenUpdatingaCollectionofEntities) a `412 Precondition Failed` error.
The special value `*` can be used to match any existing entity but fail if the entity does not already exist.
+Added/changed entities that specify format-specific control information
+equivalent to an `If-Match-None: *` header [#OData-JSON#ControlInformationetagodataetag]
+MUST NOT be treated as an update.
+
The response, if requested, is a delta payload, in the same structure
and order as the request payload, representing the applied changes.