public Task GetSetupParameters() { AssertOnlyInSetupMode(); var setupParameters = SetupParameters.Get(ServerStore); using (ServerStore.ContextPool.AllocateOperationContext(out TransactionOperationContext context)) using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream())) { writer.WriteStartObject(); writer.WritePropertyName(nameof(SetupParameters.FixedServerPortNumber)); if (setupParameters.FixedServerPortNumber.HasValue) { writer.WriteInteger(setupParameters.FixedServerPortNumber.Value); } else { writer.WriteNull(); } writer.WriteComma(); writer.WritePropertyName(nameof(SetupParameters.IsDocker)); writer.WriteBool(setupParameters.IsDocker); writer.WriteComma(); writer.WritePropertyName(nameof(SetupParameters.RunningOnMacOsx)); writer.WriteBool(setupParameters.RunningOnMacOsx); writer.WriteEndObject(); } return(Task.CompletedTask); }
protected void PersistGroupByFields(JsonOperationContext context, BlittableJsonTextWriter writer) { writer.WritePropertyName((nameof(GroupByFields))); writer.WriteStartArray(); var first = true; foreach (var field in GroupByFields.Values) { if (first == false) { writer.WriteComma(); } writer.WriteStartObject(); writer.WritePropertyName((nameof(field.Name))); writer.WriteString((field.Name)); writer.WriteComma(); writer.WritePropertyName((nameof(field.Highlighted))); writer.WriteBool(field.Highlighted); writer.WriteComma(); writer.WritePropertyName((nameof(field.SortOption))); writer.WriteInteger((int)(field.SortOption ?? SortOptions.None)); writer.WriteEndObject(); first = false; } writer.WriteEndArray(); }
public static void WriteSuggestionQueryResult(this BlittableJsonTextWriter writer, JsonOperationContext context, SuggestionQueryResultServerSide result) { writer.WriteStartObject(); writer.WritePropertyName(nameof(result.DurationInMs)); writer.WriteInteger(result.DurationInMs); writer.WriteComma(); writer.WritePropertyName(nameof(result.IndexName)); writer.WriteString(result.IndexName); writer.WriteComma(); writer.WriteArray(nameof(result.Suggestions), result.Suggestions); writer.WriteComma(); writer.WritePropertyName(nameof(result.IndexTimestamp)); writer.WriteString(result.IndexTimestamp.ToString(Default.DateTimeFormatsToWrite)); writer.WriteComma(); writer.WritePropertyName(nameof(result.LastQueryTime)); writer.WriteString(result.LastQueryTime.ToString(Default.DateTimeFormatsToWrite)); writer.WriteComma(); writer.WritePropertyName(nameof(result.IsStale)); writer.WriteBool(result.IsStale); writer.WriteComma(); writer.WritePropertyName(nameof(result.ResultEtag)); writer.WriteInteger(result.ResultEtag); writer.WriteEndObject(); }
public Task HasChanged() { using (Database.DocumentsStorage.ContextPool.AllocateOperationContext(out JsonOperationContext context)) using (var json = context.ReadForMemory(RequestBodyStream(), "index/definition")) { var indexDefinition = JsonDeserializationServer.IndexDefinition(json); if (indexDefinition?.Name == null || indexDefinition.Maps.Count == 0) { throw new BadRequestException("Index definition must contain name and at least one map."); } var changed = Database.IndexStore.HasChanged(indexDefinition); using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream())) { writer.WriteStartObject(); writer.WritePropertyName("Changed"); writer.WriteBool(changed); writer.WriteEndObject(); } } return(NoContent()); }
public Task Stale() { var name = GetQueryStringValueAndAssertIfSingleAndNotEmpty("name"); using (ContextPool.AllocateOperationContext(out DocumentsOperationContext context)) using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream())) using (context.OpenReadTransaction()) { var index = Database.IndexStore.GetIndex(name); if (index == null) { IndexDoesNotExistException.ThrowFor(name); } var stalenessReasons = new List <string>(); var isStale = index.IsStale(context, stalenessReasons: stalenessReasons); writer.WriteStartObject(); writer.WritePropertyName("IsStale"); writer.WriteBool(isStale); writer.WriteComma(); writer.WriteArray("StalenessReasons", stalenessReasons); writer.WriteEndObject(); } return(Task.CompletedTask); }
public override HttpRequestMessage CreateRequest(JsonOperationContext ctx, ServerNode node, out string url) { url = $"{node.Url}/admin/certificates/replace-cluster-cert"; var request = new HttpRequestMessage { Method = HttpMethod.Post, Content = new BlittableJsonContent(stream => { using (var writer = new BlittableJsonTextWriter(ctx, stream)) { writer.WriteStartObject(); writer.WritePropertyName(nameof(CertificateDefinition.Name)); writer.WriteString(_name.ToString()); writer.WriteComma(); writer.WritePropertyName(nameof(CertificateDefinition.Certificate)); writer.WriteString(Convert.ToBase64String(_certificate.Export(X509ContentType.Pfx))); // keep the private key -> this is a server cert writer.WriteComma(); writer.WritePropertyName("replaceImmediately"); writer.WriteBool(_replaceImmediately); writer.WriteEndObject(); } }) }; return(request); }
public Task ForceRenew() { if (ServerStore.Configuration.Core.SetupMode != SetupMode.LetsEncrypt) { throw new InvalidOperationException("Cannot force renew for this server certificate. This server wasn't set up using the Let's Encrypt setup mode."); } if (Server.Certificate.Certificate == null) { throw new InvalidOperationException("Cannot force renew this Let's Encrypt server certificate. The server certificate is not loaded."); } try { var success = Server.RefreshClusterCertificate(true); using (ServerStore.ContextPool.AllocateOperationContext(out TransactionOperationContext context)) using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream())) { writer.WriteStartObject(); writer.WritePropertyName(nameof(ForceRenewResult.Success)); writer.WriteBool(success); writer.WriteEndObject(); } return(Task.CompletedTask); } catch (Exception e) { throw new InvalidOperationException($"Failed to force renew the Let's Encrypt server certificate for domain: {Server.Certificate.Certificate.GetNameInfo(X509NameType.SimpleName, false)}", e); } }
public override HttpRequestMessage CreateRequest(JsonOperationContext ctx, ServerNode node, out string url) { url = $"{node.Url}/databases/{node.Database}/admin/sql-migration/import"; var request = new HttpRequestMessage { Method = HttpMethods.Post, Content = new BlittableJsonContent(stream => { using (var writer = new BlittableJsonTextWriter(ctx, stream)) { writer.WriteStartObject(); writer.WritePropertyName(nameof(ConnectionStringName)); writer.WriteString(ConnectionStringName); writer.WriteComma(); writer.WritePropertyName(nameof(BinaryToAttachment)); writer.WriteBool(BinaryToAttachment); writer.WriteComma(); writer.WritePropertyName(nameof(TrimStrings)); writer.WriteBool(TrimStrings); writer.WriteComma(); writer.WritePropertyName(nameof(SkipUnsupportedTypes)); writer.WriteBool(SkipUnsupportedTypes); writer.WriteComma(); writer.WritePropertyName(nameof(BatchSize)); writer.WriteInteger(BatchSize); writer.WriteComma(); WriteTablesArray(nameof(Tables), Tables, writer); writer.WriteEndObject(); } }) }; return(request); }
public void WriteDatabaseRecord(DatabaseRecord databaseRecord, SmugglerProgressBase.DatabaseRecordProgress progress, AuthorizationStatus authorizationStatus) { _writer.WritePropertyName(nameof(databaseRecord.DatabaseName)); _writer.WriteString(databaseRecord.DatabaseName); _writer.WriteComma(); _writer.WritePropertyName(nameof(databaseRecord.Encrypted)); _writer.WriteBool(databaseRecord.Encrypted); _writer.WriteComma(); _writer.WritePropertyName(nameof(databaseRecord.Revisions)); WriteRevisions(databaseRecord.Revisions); _writer.WriteComma(); _writer.WritePropertyName(nameof(databaseRecord.Expiration)); WriteExpiration(databaseRecord.Expiration); _writer.WriteComma(); if (authorizationStatus == AuthorizationStatus.DatabaseAdmin) { _writer.WritePropertyName(nameof(databaseRecord.RavenConnectionStrings)); WriteRavenConnectionStrings(databaseRecord.RavenConnectionStrings); _writer.WriteComma(); _writer.WritePropertyName(nameof(databaseRecord.SqlConnectionStrings)); WriteSqlConnectionStrings(databaseRecord.SqlConnectionStrings); _writer.WriteComma(); } _writer.WritePropertyName(nameof(databaseRecord.Client)); WriteClientConfiguration(databaseRecord.Client); }
public Task GetNextCronExpressionOccurrence() { var expression = GetQueryStringValueAndAssertIfSingleAndNotEmpty("expression"); CrontabSchedule crontabSchedule; try { // will throw if the cron expression is invalid crontabSchedule = CrontabSchedule.Parse(expression); } catch (Exception e) { using (ServerStore.ContextPool.AllocateOperationContext(out TransactionOperationContext context)) using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream())) { writer.WriteStartObject(); writer.WritePropertyName(nameof(NextCronExpressionOccurrence.IsValid)); writer.WriteBool(false); writer.WriteComma(); writer.WritePropertyName(nameof(NextCronExpressionOccurrence.ErrorMessage)); writer.WriteString(e.Message); writer.WriteEndObject(); writer.Flush(); } return(Task.CompletedTask); } var nextOccurrence = crontabSchedule.GetNextOccurrence(SystemTime.UtcNow.ToLocalTime()); using (ServerStore.ContextPool.AllocateOperationContext(out TransactionOperationContext context)) using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream())) { writer.WriteStartObject(); writer.WritePropertyName(nameof(NextCronExpressionOccurrence.IsValid)); writer.WriteBool(true); writer.WriteComma(); writer.WritePropertyName(nameof(NextCronExpressionOccurrence.Utc)); writer.WriteDateTime(nextOccurrence.ToUniversalTime(), true); writer.WriteComma(); writer.WritePropertyName(nameof(NextCronExpressionOccurrence.ServerTime)); writer.WriteDateTime(nextOccurrence, false); writer.WriteEndObject(); writer.Flush(); } return(Task.CompletedTask); }
public static void WriteSuggestionQuery(this BlittableJsonTextWriter writer, DocumentConventions conventions, JsonOperationContext context, SuggestionQuery query) { writer.WriteStartObject(); writer.WritePropertyName(nameof(query.IndexName)); writer.WriteString(query.IndexName); writer.WriteComma(); if (query.Popularity) { writer.WritePropertyName(nameof(query.Popularity)); writer.WriteBool(query.Popularity); writer.WriteComma(); } if (query.Accuracy.HasValue) { writer.WritePropertyName(nameof(query.Accuracy)); writer.WriteDouble(query.Accuracy.Value); writer.WriteComma(); } if (query.Distance.HasValue) { writer.WritePropertyName(nameof(query.Distance)); writer.WriteString(query.Distance.Value.ToString()); writer.WriteComma(); } if (string.IsNullOrEmpty(query.Field) == false) { writer.WritePropertyName(nameof(query.Field)); writer.WriteString(query.Field); writer.WriteComma(); } if (string.IsNullOrEmpty(query.Term) == false) { writer.WritePropertyName(nameof(query.Term)); writer.WriteString(query.Term); writer.WriteComma(); } writer.WritePropertyName(nameof(query.MaxSuggestions)); writer.WriteInteger(query.MaxSuggestions); writer.WriteEndObject(); }
protected override void PersistMapFields(JsonOperationContext context, BlittableJsonTextWriter writer) { writer.WritePropertyName(nameof(MapFields)); writer.WriteStartArray(); var first = true; foreach (var field in MapFields.Values.Select(x => x.As <AutoIndexField>())) { if (first == false) { writer.WriteComma(); } writer.WriteStartObject(); writer.WritePropertyName(nameof(field.Name)); writer.WriteString(field.Name); writer.WriteComma(); writer.WritePropertyName(nameof(field.Indexing)); writer.WriteString(field.Indexing.ToString()); writer.WriteComma(); writer.WritePropertyName(nameof(field.Aggregation)); writer.WriteInteger((int)field.Aggregation); writer.WriteComma(); writer.WritePropertyName(nameof(field.Spatial)); if (field.Spatial == null) { writer.WriteNull(); } else { writer.WriteObject(DocumentConventions.DefaultForServer.Serialization.DefaultConverter.ToBlittable(field.Spatial, context)); } writer.WriteComma(); writer.WritePropertyName(nameof(field.HasSuggestions)); writer.WriteBool(field.HasSuggestions); writer.WriteEndObject(); first = false; } writer.WriteEndArray(); }
public static string ConvertResultToString(ScriptRunnerResult result) { var ms = new MemoryStream(); using (var ctx = JsonOperationContext.ShortTermSingleUse()) using (var writer = new BlittableJsonTextWriter(ctx, ms)) { writer.WriteStartObject(); writer.WritePropertyName("Result"); if (result.IsNull) { writer.WriteNull(); } else if (result.RawJsValue.IsBoolean()) { writer.WriteBool(result.RawJsValue.AsBoolean()); } else if (result.RawJsValue.IsString()) { writer.WriteString(result.RawJsValue.AsString()); } else if (result.RawJsValue.IsDate()) { var date = result.RawJsValue.AsDate(); writer.WriteString(date.ToDateTime().ToString("O")); } else if (result.RawJsValue.IsNumber()) { writer.WriteDouble(result.RawJsValue.AsNumber()); } else { writer.WriteObject(result.TranslateToObject(ctx)); } writer.WriteEndObject(); writer.Flush(); } var str = Encoding.UTF8.GetString(ms.ToArray()); return(str); }
private void WriteImportResponse(DocumentsOperationContext context, params SqlMigrationImportResult.Error[] Errors) { using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream())) { writer.WriteStartObject(); WriteErrorsArray(nameof(Errors), Errors, writer); writer.WriteComma(); var Success = Errors.Length == 0; writer.WritePropertyName(nameof(Success)); writer.WriteBool(Success); writer.WriteEndObject(); } }
public static void WriteFacetedQueryResult(this BlittableJsonTextWriter writer, JsonOperationContext context, FacetedQueryResult result) { writer.WriteStartObject(); writer.WritePropertyName(nameof(result.IndexName)); writer.WriteString(result.IndexName); writer.WriteComma(); writer.WritePropertyName(nameof(result.Results)); writer.WriteStartObject(); var isFirstInternal = true; foreach (var kvp in result.Results) { if (isFirstInternal == false) { writer.WriteComma(); } isFirstInternal = false; writer.WritePropertyName(kvp.Key); writer.WriteFacetResult(context, kvp.Value); } writer.WriteEndObject(); writer.WriteComma(); writer.WritePropertyName(nameof(result.IndexTimestamp)); writer.WriteString(result.IndexTimestamp.ToString(Default.DateTimeFormatsToWrite)); writer.WriteComma(); writer.WritePropertyName(nameof(result.LastQueryTime)); writer.WriteString(result.LastQueryTime.ToString(Default.DateTimeFormatsToWrite)); writer.WriteComma(); writer.WritePropertyName(nameof(result.IsStale)); writer.WriteBool(result.IsStale); writer.WriteComma(); writer.WritePropertyName(nameof(result.ResultEtag)); writer.WriteInteger(result.ResultEtag); writer.WriteEndObject(); }
private void WriteSchemaResponse(DocumentsOperationContext context, SqlSchemaResultTable[] Tables = null, string Error = null) { using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream())) { writer.WriteStartObject(); WriteTablesArray(nameof(Tables), Tables, writer); writer.WriteComma(); writer.WritePropertyName(nameof(Error)); writer.WriteString(Error); writer.WriteComma(); var Success = Error == null; writer.WritePropertyName(nameof(Success)); writer.WriteBool(Success); writer.WriteEndObject(); } }
public void WriteQueryStatistics(long resultEtag, bool isStale, string indexName, long totalResults, DateTime timestamp) { _writer.WritePropertyName(nameof(StreamQueryStatistics.ResultEtag)); _writer.WriteInteger(resultEtag); _writer.WriteComma(); _writer.WritePropertyName(nameof(StreamQueryStatistics.IsStale)); _writer.WriteBool(isStale); _writer.WriteComma(); _writer.WritePropertyName(nameof(StreamQueryStatistics.IndexName)); _writer.WriteString(indexName); _writer.WriteComma(); _writer.WritePropertyName(nameof(StreamQueryStatistics.TotalResults)); _writer.WriteInteger(totalResults); _writer.WriteComma(); _writer.WritePropertyName(nameof(StreamQueryStatistics.IndexTimestamp)); _writer.WriteString(timestamp.GetDefaultRavenFormat(isUtc: true)); _writer.WriteComma(); }
private void WriteStreamQueryStatistics() { _writer.WritePropertyName(nameof(StreamQueryStatistics.ResultEtag)); _writer.WriteInteger(ResultEtag); _writer.WriteComma(); _writer.WritePropertyName(nameof(StreamQueryStatistics.IsStale)); _writer.WriteBool(IsStale); _writer.WriteComma(); _writer.WritePropertyName(nameof(StreamQueryStatistics.IndexName)); _writer.WriteString(IndexName); _writer.WriteComma(); _writer.WritePropertyName(nameof(StreamQueryStatistics.TotalResults)); _writer.WriteInteger(TotalResults); _writer.WriteComma(); _writer.WritePropertyName(nameof(StreamQueryStatistics.IndexTimestamp)); _writer.WriteString(IndexTimestamp.GetDefaultRavenFormat(isUtc: true)); _writer.WriteComma(); }
private static void WriteConflict(BlittableJsonTextWriter writer, IncludeDocumentsCommand.ConflictDocument conflict) { writer.WriteStartObject(); writer.WritePropertyName(Constants.Documents.Metadata.Key); writer.WriteStartObject(); writer.WritePropertyName(Constants.Documents.Metadata.Id); writer.WriteString(conflict.Id); writer.WriteComma(); writer.WritePropertyName(Constants.Documents.Metadata.ChangeVector); writer.WriteString(string.Empty); writer.WriteComma(); writer.WritePropertyName(Constants.Documents.Metadata.Conflict); writer.WriteBool(true); writer.WriteEndObject(); writer.WriteEndObject(); }
public static void WriteIndexQuery(this BlittableJsonTextWriter writer, DocumentConventions conventions, JsonOperationContext context, IndexQuery query) { writer.WriteStartObject(); writer.WritePropertyName(nameof(query.Query)); writer.WriteString(query.Query); writer.WriteComma(); #pragma warning disable 618 if (query.PageSizeSet && query.PageSize >= 0) { writer.WritePropertyName(nameof(query.PageSize)); writer.WriteInteger(query.PageSize); writer.WriteComma(); } #pragma warning restore 618 if (query.WaitForNonStaleResults) { writer.WritePropertyName(nameof(query.WaitForNonStaleResults)); writer.WriteBool(query.WaitForNonStaleResults); writer.WriteComma(); } #pragma warning disable 618 if (query.Start > 0) { writer.WritePropertyName(nameof(query.Start)); writer.WriteInteger(query.Start); writer.WriteComma(); } #pragma warning restore 618 if (query.WaitForNonStaleResultsTimeout.HasValue) { writer.WritePropertyName(nameof(query.WaitForNonStaleResultsTimeout)); writer.WriteString(query.WaitForNonStaleResultsTimeout.Value.ToInvariantString()); writer.WriteComma(); } if (query.DisableCaching) { writer.WritePropertyName(nameof(query.DisableCaching)); writer.WriteBool(query.DisableCaching); writer.WriteComma(); } if (query.SkipDuplicateChecking) { writer.WritePropertyName(nameof(query.SkipDuplicateChecking)); writer.WriteBool(query.SkipDuplicateChecking); writer.WriteComma(); } writer.WritePropertyName(nameof(query.QueryParameters)); if (query.QueryParameters != null) { writer.WriteObject(conventions.Serialization.DefaultConverter.ToBlittable(query.QueryParameters, context)); } else { writer.WriteNull(); } writer.WriteEndObject(); }
private static void WriteIndexFieldOptions(this BlittableJsonTextWriter writer, JsonOperationContext context, IndexFieldOptions options, bool removeAnalyzers) { writer.WriteStartObject(); writer.WritePropertyName(nameof(options.Analyzer)); if (string.IsNullOrWhiteSpace(options.Analyzer) == false && !removeAnalyzers) { writer.WriteString(options.Analyzer); } else { writer.WriteNull(); } writer.WriteComma(); writer.WritePropertyName(nameof(options.Indexing)); if (options.Indexing.HasValue) { writer.WriteString(options.Indexing.ToString()); } else { writer.WriteNull(); } writer.WriteComma(); writer.WritePropertyName(nameof(options.Storage)); if (options.Storage.HasValue) { writer.WriteString(options.Storage.ToString()); } else { writer.WriteNull(); } writer.WriteComma(); writer.WritePropertyName(nameof(options.Suggestions)); if (options.Suggestions.HasValue) { writer.WriteBool(options.Suggestions.Value); } else { writer.WriteNull(); } writer.WriteComma(); writer.WritePropertyName(nameof(options.TermVector)); if (options.TermVector.HasValue) { writer.WriteString(options.TermVector.ToString()); } else { writer.WriteNull(); } writer.WriteComma(); writer.WritePropertyName(nameof(options.Spatial)); if (options.Spatial != null) { writer.WriteStartObject(); writer.WritePropertyName(nameof(options.Spatial.Type)); writer.WriteString(options.Spatial.Type.ToString()); writer.WriteComma(); writer.WritePropertyName(nameof(options.Spatial.MaxTreeLevel)); writer.WriteInteger(options.Spatial.MaxTreeLevel); writer.WriteComma(); writer.WritePropertyName(nameof(options.Spatial.MaxX)); LazyStringValue lazyStringValue; using (lazyStringValue = context.GetLazyString(CharExtensions.ToInvariantString(options.Spatial.MaxX))) writer.WriteDouble(new LazyNumberValue(lazyStringValue)); writer.WriteComma(); writer.WritePropertyName(nameof(options.Spatial.MaxY)); using (lazyStringValue = context.GetLazyString(CharExtensions.ToInvariantString(options.Spatial.MaxY))) writer.WriteDouble(new LazyNumberValue(lazyStringValue)); writer.WriteComma(); writer.WritePropertyName(nameof(options.Spatial.MinX)); using (lazyStringValue = context.GetLazyString(CharExtensions.ToInvariantString(options.Spatial.MinX))) writer.WriteDouble(new LazyNumberValue(lazyStringValue)); writer.WriteComma(); writer.WritePropertyName(nameof(options.Spatial.MinY)); using (lazyStringValue = context.GetLazyString(CharExtensions.ToInvariantString(options.Spatial.MinY))) writer.WriteDouble(new LazyNumberValue(lazyStringValue)); writer.WriteComma(); writer.WritePropertyName(nameof(options.Spatial.Strategy)); writer.WriteString(options.Spatial.Strategy.ToString()); writer.WriteComma(); writer.WritePropertyName(nameof(options.Spatial.Units)); writer.WriteString(options.Spatial.Units.ToString()); writer.WriteEndObject(); } else { writer.WriteNull(); } writer.WriteEndObject(); }
public static void WriteIndexProgress(this BlittableJsonTextWriter writer, JsonOperationContext context, IndexProgress progress) { writer.WriteStartObject(); writer.WritePropertyName(nameof(progress.IsStale)); writer.WriteBool(progress.IsStale); writer.WriteComma(); writer.WritePropertyName(nameof(progress.Collections)); if (progress.Collections != null) { writer.WriteStartObject(); var isFirst = true; foreach (var kvp in progress.Collections) { if (isFirst == false) { writer.WriteComma(); } isFirst = false; writer.WritePropertyName(kvp.Key); writer.WriteStartObject(); writer.WritePropertyName(nameof(kvp.Value.LastProcessedDocumentEtag)); writer.WriteInteger(kvp.Value.LastProcessedDocumentEtag); writer.WriteComma(); writer.WritePropertyName(nameof(kvp.Value.LastProcessedTombstoneEtag)); writer.WriteInteger(kvp.Value.LastProcessedTombstoneEtag); writer.WriteComma(); writer.WritePropertyName(nameof(kvp.Value.NumberOfDocumentsToProcess)); writer.WriteInteger(kvp.Value.NumberOfDocumentsToProcess); writer.WriteComma(); writer.WritePropertyName(nameof(kvp.Value.NumberOfTombstonesToProcess)); writer.WriteInteger(kvp.Value.NumberOfTombstonesToProcess); writer.WriteComma(); writer.WritePropertyName(nameof(kvp.Value.TotalNumberOfDocuments)); writer.WriteInteger(kvp.Value.TotalNumberOfDocuments); writer.WriteComma(); writer.WritePropertyName(nameof(kvp.Value.TotalNumberOfTombstones)); writer.WriteInteger(kvp.Value.TotalNumberOfTombstones); writer.WriteEndObject(); } writer.WriteEndObject(); } else { writer.WriteNull(); } writer.WriteComma(); writer.WritePropertyName(nameof(progress.Name)); writer.WriteString(progress.Name); writer.WriteComma(); writer.WritePropertyName(nameof(progress.Type)); writer.WriteString(progress.Type.ToString()); writer.WriteComma(); writer.WritePropertyName(nameof(progress.Etag)); writer.WriteInteger(progress.Etag); writer.WriteEndObject(); }
public static void WriteIndexDefinition(this BlittableJsonTextWriter writer, JsonOperationContext context, IndexDefinition indexDefinition, bool removeAnalyzers = false) { writer.WriteStartObject(); writer.WritePropertyName(nameof(indexDefinition.Name)); writer.WriteString(indexDefinition.Name); writer.WriteComma(); writer.WritePropertyName(nameof(indexDefinition.Etag)); writer.WriteInteger(indexDefinition.Etag); writer.WriteComma(); writer.WritePropertyName(nameof(indexDefinition.Type)); writer.WriteString(indexDefinition.Type.ToString()); writer.WriteComma(); writer.WritePropertyName(nameof(indexDefinition.LockMode)); if (indexDefinition.LockMode.HasValue) { writer.WriteString(indexDefinition.LockMode.ToString()); } else { writer.WriteNull(); } writer.WriteComma(); writer.WritePropertyName(nameof(indexDefinition.Priority)); if (indexDefinition.Priority.HasValue) { writer.WriteString(indexDefinition.Priority.ToString()); } else { writer.WriteNull(); } writer.WriteComma(); writer.WritePropertyName(nameof(indexDefinition.OutputReduceToCollection)); writer.WriteString(indexDefinition.OutputReduceToCollection); writer.WriteComma(); writer.WritePropertyName(nameof(indexDefinition.Configuration)); writer.WriteStartObject(); var isFirstInternal = true; foreach (var kvp in indexDefinition.Configuration) { if (isFirstInternal == false) { writer.WriteComma(); } isFirstInternal = false; writer.WritePropertyName(kvp.Key); writer.WriteString(kvp.Value); } writer.WriteEndObject(); writer.WriteComma(); writer.WritePropertyName(nameof(indexDefinition.AdditionalSources)); writer.WriteStartObject(); isFirstInternal = true; foreach (var kvp in indexDefinition.AdditionalSources) { if (isFirstInternal == false) { writer.WriteComma(); } isFirstInternal = false; writer.WritePropertyName(kvp.Key); writer.WriteString(kvp.Value); } writer.WriteEndObject(); writer.WriteComma(); writer.WritePropertyName(nameof(indexDefinition.IsTestIndex)); writer.WriteBool(indexDefinition.IsTestIndex); writer.WriteComma(); writer.WritePropertyName(nameof(indexDefinition.Reduce)); if (string.IsNullOrWhiteSpace(indexDefinition.Reduce) == false) { writer.WriteString(indexDefinition.Reduce); } else { writer.WriteNull(); } writer.WriteComma(); writer.WritePropertyName(nameof(indexDefinition.Maps)); writer.WriteStartArray(); isFirstInternal = true; foreach (var map in indexDefinition.Maps) { if (isFirstInternal == false) { writer.WriteComma(); } isFirstInternal = false; writer.WriteString(map); } writer.WriteEndArray(); writer.WriteComma(); writer.WritePropertyName(nameof(indexDefinition.Fields)); writer.WriteStartObject(); isFirstInternal = true; foreach (var kvp in indexDefinition.Fields) { if (isFirstInternal == false) { writer.WriteComma(); } isFirstInternal = false; writer.WritePropertyName(kvp.Key); if (kvp.Value != null) { writer.WriteIndexFieldOptions(context, kvp.Value, removeAnalyzers); } else { writer.WriteNull(); } } writer.WriteEndObject(); writer.WriteEndObject(); }
public static void WriteDatabaseStatistics(this BlittableJsonTextWriter writer, JsonOperationContext context, DatabaseStatistics statistics) { writer.WriteStartObject(); writer.WritePropertyName(nameof(statistics.CountOfIndexes)); writer.WriteInteger(statistics.CountOfIndexes); writer.WriteComma(); writer.WritePropertyName(nameof(statistics.CountOfDocuments)); writer.WriteInteger(statistics.CountOfDocuments); writer.WriteComma(); if (statistics.CountOfRevisionDocuments > 0) { writer.WritePropertyName(nameof(statistics.CountOfRevisionDocuments)); writer.WriteInteger(statistics.CountOfRevisionDocuments); writer.WriteComma(); } writer.WritePropertyName(nameof(statistics.CountOfAttachments)); writer.WriteInteger(statistics.CountOfAttachments); writer.WriteComma(); writer.WritePropertyName(nameof(statistics.CountOfUniqueAttachments)); writer.WriteInteger(statistics.CountOfUniqueAttachments); writer.WriteComma(); writer.WritePropertyName(nameof(statistics.DatabaseChangeVector)); writer.WriteString(statistics.DatabaseChangeVector); writer.WriteComma(); writer.WritePropertyName(nameof(statistics.DatabaseId)); writer.WriteString(statistics.DatabaseId); writer.WriteComma(); writer.WritePropertyName(nameof(statistics.Is64Bit)); writer.WriteBool(statistics.Is64Bit); writer.WriteComma(); writer.WritePropertyName(nameof(statistics.Pager)); writer.WriteString(statistics.Pager); writer.WriteComma(); writer.WritePropertyName(nameof(statistics.LastDocEtag)); if (statistics.LastDocEtag.HasValue) { writer.WriteInteger(statistics.LastDocEtag.Value); } else { writer.WriteNull(); } writer.WriteComma(); writer.WritePropertyName((nameof(statistics.DatabaseChangeVector))); writer.WriteString(statistics.DatabaseChangeVector); writer.WriteComma(); writer.WritePropertyName(nameof(statistics.LastIndexingTime)); if (statistics.LastIndexingTime.HasValue) { writer.WriteDateTime(statistics.LastIndexingTime.Value, isUtc: true); } else { writer.WriteNull(); } writer.WriteComma(); writer.WritePropertyName(nameof(statistics.Indexes)); writer.WriteStartArray(); var isFirstInternal = true; foreach (var index in statistics.Indexes) { if (isFirstInternal == false) { writer.WriteComma(); } isFirstInternal = false; writer.WriteStartObject(); writer.WritePropertyName(nameof(index.IsStale)); writer.WriteBool(index.IsStale); writer.WriteComma(); writer.WritePropertyName(nameof(index.Name)); writer.WriteString(index.Name); writer.WriteComma(); writer.WritePropertyName(nameof(index.Etag)); writer.WriteInteger(index.Etag); writer.WriteComma(); writer.WritePropertyName(nameof(index.LockMode)); writer.WriteString(index.LockMode.ToString()); writer.WriteComma(); writer.WritePropertyName(nameof(index.Priority)); writer.WriteString(index.Priority.ToString()); writer.WriteComma(); writer.WritePropertyName(nameof(index.State)); writer.WriteString(index.State.ToString()); writer.WriteComma(); writer.WritePropertyName(nameof(index.Type)); writer.WriteString(index.Type.ToString()); writer.WriteComma(); writer.WritePropertyName(nameof(index.LastIndexingTime)); if (index.LastIndexingTime.HasValue) { writer.WriteDateTime(index.LastIndexingTime.Value, isUtc: true); } else { writer.WriteNull(); } writer.WriteEndObject(); } writer.WriteEndArray(); writer.WriteEndObject(); }
public static void WriteIndexQuery(this BlittableJsonTextWriter writer, JsonOperationContext context, IndexQueryServerSide query) { writer.WriteStartObject(); writer.WritePropertyName(nameof(query.CutoffEtag)); if (query.CutoffEtag.HasValue) { writer.WriteInteger(query.CutoffEtag.Value); } else { writer.WriteNull(); } writer.WriteComma(); writer.WritePropertyName(nameof(query.ExplainScores)); writer.WriteBool(query.ExplainScores); writer.WriteComma(); writer.WritePropertyName(nameof(query.PageSize)); writer.WriteInteger(query.PageSize); writer.WriteComma(); writer.WritePropertyName(nameof(query.Query)); if (query.Query != null) { writer.WriteString(query.Query); } else { writer.WriteNull(); } writer.WriteComma(); writer.WritePropertyName(nameof(query.ShowTimings)); writer.WriteBool(query.ShowTimings); writer.WriteComma(); writer.WritePropertyName(nameof(query.SkipDuplicateChecking)); writer.WriteBool(query.SkipDuplicateChecking); writer.WriteComma(); writer.WritePropertyName(nameof(query.Start)); writer.WriteInteger(query.Start); writer.WriteComma(); writer.WritePropertyName(nameof(query.WaitForNonStaleResults)); writer.WriteBool(query.WaitForNonStaleResults); writer.WriteComma(); writer.WritePropertyName(nameof(query.WaitForNonStaleResultsTimeout)); if (query.WaitForNonStaleResultsTimeout.HasValue) { writer.WriteString(query.WaitForNonStaleResultsTimeout.Value.ToString()); } else { writer.WriteNull(); } writer.WriteEndObject(); }
public static void WriteQueryResult <TResult, TInclude>(this BlittableJsonTextWriter writer, JsonOperationContext context, QueryResultBase <TResult, TInclude> result, bool metadataOnly, out int numberOfResults, bool partial = false) { if (partial == false) { writer.WriteStartObject(); } writer.WritePropertyName(nameof(result.IndexName)); writer.WriteString(result.IndexName); writer.WriteComma(); var results = (object)result.Results; if (results is List <Document> documents) { writer.WritePropertyName(nameof(result.Results)); writer.WriteDocuments(context, documents, metadataOnly, out numberOfResults); writer.WriteComma(); } else if (results is List <BlittableJsonReaderObject> objects) { writer.WritePropertyName(nameof(result.Results)); writer.WriteObjects(context, objects, out numberOfResults); writer.WriteComma(); } else { throw new NotSupportedException($"Cannot write query result of '{typeof(TResult)}' type in '{result.GetType()}'."); } var includes = (object)result.Includes; if (includes is List <Document> includeDocuments) { writer.WritePropertyName(nameof(result.Includes)); writer.WriteIncludes(context, includeDocuments); writer.WriteComma(); } else if (includes is List <BlittableJsonReaderObject> includeObjects) { if (includeObjects.Count != 0) { throw new NotSupportedException("Cannot write query includes of List<BlittableJsonReaderObject>, but got non zero response"); } writer.WritePropertyName(nameof(result.Includes)); writer.WriteStartObject(); writer.WriteEndObject(); writer.WriteComma(); } else { throw new NotSupportedException($"Cannot write query includes of '{typeof(TInclude)}' type in '{result.GetType()}'."); } writer.WritePropertyName(nameof(result.IndexTimestamp)); writer.WriteString(result.IndexTimestamp.ToString(Default.DateTimeFormatsToWrite)); writer.WriteComma(); writer.WritePropertyName(nameof(result.LastQueryTime)); writer.WriteString(result.LastQueryTime.ToString(Default.DateTimeFormatsToWrite)); writer.WriteComma(); writer.WritePropertyName(nameof(result.IsStale)); writer.WriteBool(result.IsStale); writer.WriteComma(); writer.WritePropertyName(nameof(result.ResultEtag)); writer.WriteInteger(result.ResultEtag); if (partial == false) { writer.WriteEndObject(); } }
public static void WriteMoreLikeThisQuery(this BlittableJsonTextWriter writer, DocumentConventions conventions, JsonOperationContext context, MoreLikeThisQuery query) { writer.WriteStartObject(); writer.WritePropertyName(nameof(query.DocumentId)); writer.WriteString(query.DocumentId); writer.WriteComma(); if (query.PageSizeSet && query.PageSize >= 0) { writer.WritePropertyName(nameof(query.PageSize)); writer.WriteInteger(query.PageSize); writer.WriteComma(); } if (query.Boost.HasValue) { writer.WritePropertyName(nameof(query.Boost)); writer.WriteBool(query.Boost.Value); writer.WriteComma(); } if (query.BoostFactor.HasValue) { writer.WritePropertyName(nameof(query.BoostFactor)); writer.WriteDouble(query.BoostFactor.Value); writer.WriteComma(); } if (string.IsNullOrEmpty(query.StopWordsDocumentId) == false) { writer.WritePropertyName(nameof(query.StopWordsDocumentId)); writer.WriteString(query.StopWordsDocumentId); writer.WriteComma(); } if (query.Fields != null && query.Fields.Length > 0) { writer.WriteArray(nameof(query.Fields), query.Fields); writer.WriteComma(); } if (query.Includes != null && query.Includes.Length > 0) { writer.WriteArray(nameof(query.Includes), query.Includes); writer.WriteComma(); } if (query.MaximumDocumentFrequency.HasValue) { writer.WritePropertyName(nameof(query.MaximumDocumentFrequency)); writer.WriteInteger(query.MaximumDocumentFrequency.Value); writer.WriteComma(); } if (query.MaximumDocumentFrequencyPercentage.HasValue) { writer.WritePropertyName(nameof(query.MaximumDocumentFrequencyPercentage)); writer.WriteInteger(query.MaximumDocumentFrequencyPercentage.Value); writer.WriteComma(); } if (query.MaximumNumberOfTokensParsed.HasValue) { writer.WritePropertyName(nameof(query.MaximumNumberOfTokensParsed)); writer.WriteInteger(query.MaximumNumberOfTokensParsed.Value); writer.WriteComma(); } if (query.MaximumQueryTerms.HasValue) { writer.WritePropertyName(nameof(query.MaximumQueryTerms)); writer.WriteInteger(query.MaximumQueryTerms.Value); writer.WriteComma(); } if (query.MaximumWordLength.HasValue) { writer.WritePropertyName(nameof(query.MaximumWordLength)); writer.WriteInteger(query.MaximumWordLength.Value); writer.WriteComma(); } if (query.MinimumDocumentFrequency.HasValue) { writer.WritePropertyName(nameof(query.MinimumDocumentFrequency)); writer.WriteInteger(query.MinimumDocumentFrequency.Value); writer.WriteComma(); } if (query.MinimumTermFrequency.HasValue) { writer.WritePropertyName(nameof(query.MinimumTermFrequency)); writer.WriteInteger(query.MinimumTermFrequency.Value); writer.WriteComma(); } if (query.MinimumWordLength.HasValue) { writer.WritePropertyName(nameof(query.MinimumWordLength)); writer.WriteInteger(query.MinimumWordLength.Value); writer.WriteComma(); } if (string.IsNullOrEmpty(query.Document) == false) { writer.WritePropertyName(nameof(query.Document)); writer.WriteString(query.Document); writer.WriteComma(); } writer.WritePropertyName(nameof(query.Query)); writer.WriteString(query.Query); writer.WriteEndObject(); }
public void WriteDatabaseRecord(DatabaseRecord databaseRecord, SmugglerProgressBase.DatabaseRecordProgress progress, AuthorizationStatus authorizationStatus, DatabaseRecordItemType databaseRecordItemType) { _writer.WritePropertyName(nameof(databaseRecord.DatabaseName)); _writer.WriteString(databaseRecord.DatabaseName); _writer.WriteComma(); _writer.WritePropertyName(nameof(databaseRecord.Encrypted)); _writer.WriteBool(databaseRecord.Encrypted); if (databaseRecordItemType.Contain(DatabaseRecordItemType.ConflictSolverConfig)) { _writer.WriteComma(); _writer.WritePropertyName(nameof(databaseRecord.ConflictSolverConfig)); WriteConflictSolver(databaseRecord.ConflictSolverConfig); } if (databaseRecordItemType.Contain(DatabaseRecordItemType.Settings)) { _writer.WriteComma(); _writer.WritePropertyName(nameof(databaseRecord.Settings)); WriteSettings(databaseRecord.Settings); } if (databaseRecordItemType.Contain(DatabaseRecordItemType.Revisions)) { _writer.WriteComma(); _writer.WritePropertyName(nameof(databaseRecord.Revisions)); WriteRevisions(databaseRecord.Revisions); } if (databaseRecordItemType.Contain(DatabaseRecordItemType.Expiration)) { _writer.WriteComma(); _writer.WritePropertyName(nameof(databaseRecord.Expiration)); WriteExpiration(databaseRecord.Expiration); } if (databaseRecordItemType.Contain(DatabaseRecordItemType.Client)) { _writer.WriteComma(); _writer.WritePropertyName(nameof(databaseRecord.Client)); WriteClientConfiguration(databaseRecord.Client); } if (databaseRecordItemType.Contain(DatabaseRecordItemType.Sorters)) { _writer.WriteComma(); _writer.WritePropertyName(nameof(databaseRecord.Sorters)); WriteSorters(databaseRecord.Sorters); } switch (authorizationStatus) { case AuthorizationStatus.DatabaseAdmin: case AuthorizationStatus.Operator: case AuthorizationStatus.ClusterAdmin: if (databaseRecordItemType.Contain(DatabaseRecordItemType.RavenConnectionStrings)) { _writer.WriteComma(); _writer.WritePropertyName(nameof(databaseRecord.RavenConnectionStrings)); WriteRavenConnectionStrings(databaseRecord.RavenConnectionStrings); } if (databaseRecordItemType.Contain(DatabaseRecordItemType.SqlConnectionStrings)) { _writer.WriteComma(); _writer.WritePropertyName(nameof(databaseRecord.SqlConnectionStrings)); WriteSqlConnectionStrings(databaseRecord.SqlConnectionStrings); } if (databaseRecordItemType.Contain(DatabaseRecordItemType.PeriodicBackups)) { _writer.WriteComma(); _writer.WritePropertyName(nameof(databaseRecord.PeriodicBackups)); WritePeriodicBackups(databaseRecord.PeriodicBackups); } if (databaseRecordItemType.Contain(DatabaseRecordItemType.ExternalReplications)) { _writer.WriteComma(); _writer.WritePropertyName(nameof(databaseRecord.ExternalReplications)); WriteExternalReplications(databaseRecord.ExternalReplications); } if (databaseRecordItemType.Contain(DatabaseRecordItemType.RavenEtls)) { _writer.WriteComma(); _writer.WritePropertyName(nameof(databaseRecord.RavenEtls)); WriteRavenEtls(databaseRecord.RavenEtls); } if (databaseRecordItemType.Contain(DatabaseRecordItemType.SqlEtls)) { _writer.WriteComma(); _writer.WritePropertyName(nameof(databaseRecord.SqlEtls)); WriteSqlEtls(databaseRecord.SqlEtls); } if (databaseRecordItemType.Contain(DatabaseRecordItemType.HubPullReplications)) { _writer.WriteComma(); _writer.WritePropertyName(nameof(databaseRecord.HubPullReplications)); WriteHubPullReplications(databaseRecord.HubPullReplications); } if (databaseRecordItemType.Contain(DatabaseRecordItemType.SinkPullReplications)) { _writer.WriteComma(); _writer.WritePropertyName(nameof(databaseRecord.SinkPullReplications)); WriteSinkPullReplications(databaseRecord.SinkPullReplications); } break; } }
public static void WriteIndexQuery(this BlittableJsonTextWriter writer, DocumentConventions conventions, JsonOperationContext context, IndexQuery query) { writer.WriteStartObject(); writer.WritePropertyName(nameof(query.Query)); writer.WriteString(query.Query); writer.WriteComma(); if (query.PageSizeSet && query.PageSize >= 0) { writer.WritePropertyName(nameof(query.PageSize)); writer.WriteInteger(query.PageSize); writer.WriteComma(); } if (query.WaitForNonStaleResults) { writer.WritePropertyName(nameof(query.WaitForNonStaleResults)); writer.WriteBool(query.WaitForNonStaleResults); writer.WriteComma(); } if (query.Start > 0) { writer.WritePropertyName(nameof(query.Start)); writer.WriteInteger(query.Start); writer.WriteComma(); } if (query.WaitForNonStaleResultsTimeout.HasValue) { writer.WritePropertyName(nameof(query.WaitForNonStaleResultsTimeout)); writer.WriteString(query.WaitForNonStaleResultsTimeout.Value.ToInvariantString()); writer.WriteComma(); } if (query.DisableCaching) { writer.WritePropertyName(nameof(query.DisableCaching)); writer.WriteBool(query.DisableCaching); writer.WriteComma(); } #if FEATURE_EXPLAIN_SCORES if (query.ExplainScores) { writer.WritePropertyName(nameof(query.ExplainScores)); writer.WriteBool(query.ExplainScores); writer.WriteComma(); } #endif #if FEATURE_SHOW_TIMINGS if (query.ShowTimings) { writer.WritePropertyName(nameof(query.ShowTimings)); writer.WriteBool(query.ShowTimings); writer.WriteComma(); } #endif if (query.SkipDuplicateChecking) { writer.WritePropertyName(nameof(query.SkipDuplicateChecking)); writer.WriteBool(query.SkipDuplicateChecking); writer.WriteComma(); } writer.WritePropertyName(nameof(query.QueryParameters)); if (query.QueryParameters != null) { writer.WriteObject(EntityToBlittable.ConvertCommandToBlittable(query.QueryParameters, context)); } else { writer.WriteNull(); } writer.WriteEndObject(); }
public Task Patch() { var id = GetQueryStringValueAndAssertIfSingleAndNotEmpty("id"); var etag = GetLongFromHeaders("If-Match"); var isTestOnly = GetBoolValueQueryString("test", required: false) ?? false; DocumentsOperationContext context; using (ContextPool.AllocateOperationContext(out context)) { var request = context.Read(RequestBodyStream(), "ScriptedPatchRequest"); BlittableJsonReaderObject patchCmd, patchIsMissingCmd; if (request.TryGet("Patch", out patchCmd) == false) { throw new ArgumentException("The 'Patch' field in the body request is mandatory"); } var patch = PatchRequest.Parse(patchCmd); PatchRequest patchIfMissing = null; if (request.TryGet("PatchIfMissing", out patchIsMissingCmd)) { patchIfMissing = PatchRequest.Parse(patchCmd); } // TODO: In order to properly move this to the transaction merger, we need // TODO: move a lot of the costs (such as script parsing) out, so we create // TODO: an object that we'll apply, otherwise we'll slow down a lot the transactions // TODO: just by doing the javascript parsing and preparing the engine PatchResultData patchResult; using (context.OpenWriteTransaction()) { patchResult = Database.Patch.Apply(context, id, etag, patch, patchIfMissing, isTestOnly); context.Transaction.Commit(); } Debug.Assert(patchResult.PatchResult == PatchResult.Patched == isTestOnly == false); using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream())) { writer.WriteStartObject(); writer.WritePropertyName(("Patched")); writer.WriteBool(isTestOnly == false); writer.WriteComma(); writer.WritePropertyName(("Debug")); writer.WriteObject(patchResult.ModifiedDocument); if (isTestOnly) { writer.WriteComma(); writer.WritePropertyName(("Document")); writer.WriteObject(patchResult.OriginalDocument); } writer.WriteEndObject(); } } return(Task.CompletedTask); }