private void OnAfterSaveChangesEvent(object sender, AfterSaveChangesEventArgs args) { if (Log.IsInfoEnabled) { Log.Info($"Document '{args.DocumentId}' was saved."); } }
private void HandleForceRevisionCreation(BlittableJsonReaderObject batchResult) { // When forcing a revision for a document that does Not have any revisions yet then the HasRevisions flag is added to the document. // In this case we need to update the tracked entities in the session with the document new change-vector. if (GetBooleanField(batchResult, CommandType.ForceRevisionCreation, "RevisionCreated") == false) { // no forced revision was created...nothing to update. return; } var id = GetLazyStringField(batchResult, CommandType.ForceRevisionCreation, Constants.Documents.Metadata.Id); var changeVector = GetLazyStringField(batchResult, CommandType.ForceRevisionCreation, Constants.Documents.Metadata.ChangeVector); if (_session.DocumentsById.TryGetValue(id, out var documentInfo) == false) { return; } documentInfo.ChangeVector = changeVector; HandleMetadataModifications(documentInfo, batchResult, id, changeVector); var afterSaveChangesEventArgs = new AfterSaveChangesEventArgs(_session, documentInfo.Id, documentInfo.Entity); _session.OnAfterSaveChangesInvoke(afterSaveChangesEventArgs); }
private void HandlePatch(BlittableJsonReaderObject batchResult) { if (batchResult.TryGet(nameof(PatchStatus), out string statusAsString) == false) { ThrowMissingField(CommandType.PATCH, nameof(PatchStatus)); } if (Enum.TryParse(statusAsString, ignoreCase: true, out PatchStatus status) == false) { ThrowMissingField(CommandType.PATCH, nameof(PatchStatus)); } switch (status) { case PatchStatus.Created: case PatchStatus.Patched: if (batchResult.TryGet(nameof(PatchResult.ModifiedDocument), out BlittableJsonReaderObject document) == false) { return; } var id = GetLazyStringField(batchResult, CommandType.PATCH, nameof(ICommandData.Id)); if (_session.DocumentsById.TryGetValue(id, out var sessionDocumentInfo) == false) { return; } var documentInfo = GetOrAddModifications(id, sessionDocumentInfo, applyModifications: true); var changeVector = GetLazyStringField(batchResult, CommandType.PATCH, nameof(Constants.Documents.Metadata.ChangeVector)); var lastModified = GetLazyStringField(batchResult, CommandType.PATCH, nameof(Constants.Documents.Metadata.LastModified)); documentInfo.ChangeVector = changeVector; documentInfo.Metadata.Modifications = new DynamicJsonValue(documentInfo.Metadata) { [Constants.Documents.Metadata.Id] = id, [Constants.Documents.Metadata.ChangeVector] = changeVector, [Constants.Documents.Metadata.LastModified] = lastModified }; using (var old = documentInfo.Document) { documentInfo.Document = document; ApplyMetadataModifications(id, documentInfo); } if (documentInfo.Entity != null) { _session.EntityToBlittable.PopulateEntity(documentInfo.Entity, id, documentInfo.Document, _session.JsonSerializer); var afterSaveChangesEventArgs = new AfterSaveChangesEventArgs(_session, documentInfo.Id, documentInfo.Entity); _session.OnAfterSaveChangesInvoke(afterSaveChangesEventArgs); } break; } }
private void HandlePut(int index, BlittableJsonReaderObject batchResult, bool isDeferred) { object entity = null; DocumentInfo documentInfo = null; if (isDeferred == false) { entity = _entities[index]; if (_session.DocumentsByEntity.TryGetValue(entity, out documentInfo) == false) { return; } } var id = GetLazyStringField(batchResult, CommandType.PUT, Constants.Documents.Metadata.Id); var changeVector = GetLazyStringField(batchResult, CommandType.PUT, Constants.Documents.Metadata.ChangeVector); if (isDeferred) { if (_session.DocumentsById.TryGetValue(id, out var sessionDocumentInfo) == false) { return; } documentInfo = GetOrAddModifications(id, sessionDocumentInfo, applyModifications: true); entity = documentInfo.Entity; } documentInfo.Metadata.Modifications = new DynamicJsonValue(documentInfo.Metadata); foreach (var propertyName in batchResult.GetPropertyNames()) { if (propertyName == nameof(ICommandData.Type)) { continue; } documentInfo.Metadata.Modifications[propertyName] = batchResult[propertyName]; } documentInfo.Id = id; documentInfo.ChangeVector = changeVector; ApplyMetadataModifications(id, documentInfo); _session.DocumentsById.Add(documentInfo); if (entity != null) { _session.GenerateEntityIdOnTheClient.TrySetIdentity(entity, id); } var afterSaveChangesEventArgs = new AfterSaveChangesEventArgs(_session, documentInfo.Id, documentInfo.Entity); _session.OnAfterSaveChangesInvoke(afterSaveChangesEventArgs); }
private void HandlePut(int index, BlittableJsonReaderObject batchResult, bool isDeferred) { object entity = null; DocumentInfo documentInfo = null; if (isDeferred == false) { entity = _entities[index]; if (_session.DocumentsByEntity.TryGetValue(entity, out documentInfo) == false) { return; } } var id = GetLazyStringField(batchResult, CommandType.PUT, Constants.Documents.Metadata.Id); var changeVector = GetLazyStringField(batchResult, CommandType.PUT, Constants.Documents.Metadata.ChangeVector); if (isDeferred) { if (_session.DocumentsById.TryGetValue(id, out var sessionDocumentInfo) == false) { return; } documentInfo = GetOrAddModifications(id, sessionDocumentInfo, applyModifications: true); entity = documentInfo.Entity; } HandleMetadataModifications(documentInfo, batchResult, id, changeVector); _session.DocumentsById.Add(documentInfo); if (entity != null) { _session.GenerateEntityIdOnTheClient.TrySetIdentity(entity, id); } var afterSaveChangesEventArgs = new AfterSaveChangesEventArgs(_session, documentInfo.Id, documentInfo.Entity); _session.OnAfterSaveChangesInvoke(afterSaveChangesEventArgs); }
public void SetResult(BlittableArrayResult result) { if (result.Results == null) //precaution { ThrowOnNullResults(); return; } for (var i = 0; i < _sessionCommandsCount; i++) { var batchResult = result.Results[i] as BlittableJsonReaderObject; if (batchResult == null) { throw new ArgumentNullException(); } batchResult.TryGet("Type", out string type); if (type != "PUT") { continue; } var entity = _entities[i]; if (_session.DocumentsByEntity.TryGetValue(entity, out DocumentInfo documentInfo) == false) { continue; } if (batchResult.TryGet(Constants.Documents.Metadata.ChangeVector, out string changeVector) == false || changeVector == null) { throw new InvalidOperationException("PUT response is invalid. @change-vector is missing on " + documentInfo.Id); } if (batchResult.TryGet(Constants.Documents.Metadata.Id, out string id) == false || id == null) { throw new InvalidOperationException("PUT response is invalid. @id is missing on " + documentInfo.Id); } documentInfo.Metadata.Modifications = null; documentInfo.Metadata.Modifications = new DynamicJsonValue(documentInfo.Metadata); foreach (var propertyName in batchResult.GetPropertyNames()) { if (propertyName == "Type") { continue; } documentInfo.Metadata.Modifications[propertyName] = batchResult[propertyName]; } documentInfo.Id = id; documentInfo.ChangeVector = changeVector; documentInfo.Metadata = _session.Context.ReadObject(documentInfo.Metadata, id); documentInfo.Document.Modifications = null; documentInfo.Document.Modifications = new DynamicJsonValue(documentInfo.Document) { [Constants.Documents.Metadata.Key] = documentInfo.Metadata }; documentInfo.Document = _session.Context.ReadObject(documentInfo.Document, id); documentInfo.MetadataInstance = null; _session.DocumentsById.Add(documentInfo); _session.GenerateEntityIdOnTheClient.TrySetIdentity(entity, id); var afterSaveChangesEventArgs = new AfterSaveChangesEventArgs(_session, documentInfo.Id, documentInfo.Entity); _session.OnAfterSaveChangesInvoke(afterSaveChangesEventArgs); } }