public StreamDocumentActions(BlittableJsonTextWriter writer, DocumentsOperationContext context, DatabaseSource source, string propertyName, IMetadataModifier modifier = null)
     : base(writer, propertyName)
 {
     _context  = context;
     _source   = source;
     _modifier = modifier;
 }
Exemple #2
0
        public void EnsureMetadata(IMetadataModifier modifier = null)
        {
            if (_metadataEnsured)
            {
                return;
            }

            _metadataEnsured = true;
            DynamicJsonValue mutatedMetadata = null;

            if (Data.TryGet(Constants.Documents.Metadata.Key, out BlittableJsonReaderObject metadata))
            {
                if (metadata.Modifications == null)
                {
                    metadata.Modifications = new DynamicJsonValue(metadata);
                }

                mutatedMetadata = metadata.Modifications;
            }

            Data.Modifications = new DynamicJsonValue(Data)
            {
                [Constants.Documents.Metadata.Key] = (object)metadata ?? (mutatedMetadata = new DynamicJsonValue())
            };

            mutatedMetadata[Constants.Documents.Metadata.Id] = Id;

            modifier?.ModifyMetadata(metadata, ref mutatedMetadata);

            if (ChangeVector != null)
            {
                mutatedMetadata[Constants.Documents.Metadata.ChangeVector] = ChangeVector;
            }
            if (Flags != DocumentFlags.None)
            {
                mutatedMetadata[Constants.Documents.Metadata.Flags] = Flags.ToString();
            }
            if (LastModified != DateTime.MinValue)
            {
                mutatedMetadata[Constants.Documents.Metadata.LastModified] = LastModified;
            }
            if (IndexScore.HasValue)
            {
                mutatedMetadata[Constants.Documents.Metadata.IndexScore] = IndexScore;
            }

            _hash = null;
        }