public StreamQueryContent(HttpRequestMessage req, QueryActions.DatabaseQueryOperation queryOp, IStorageActionsAccessor accessor, CancellationTokenSourceExtensions.CancellationTimeout timeout, Action <string> contentTypeSetter) { this.req = req; this.queryOp = queryOp; this.accessor = accessor; _timeout = timeout; outputContentTypeSetter = contentTypeSetter; }
public HttpResponseMessage SteamQueryGet(string id) { var cts = new CancellationTokenSource(); var timeout = cts.TimeoutAfter(DatabasesLandlord.SystemConfiguration.DatabaseOperationTimeout); var msg = GetEmptyMessage(); var index = id; var query = GetIndexQuery(int.MaxValue); if (string.IsNullOrEmpty(GetQueryStringValue("pageSize"))) { query.PageSize = int.MaxValue; } var isHeadRequest = InnerRequest.Method == HttpMethods.Head; if (isHeadRequest) { query.PageSize = 0; } var accessor = Database.TransactionalStorage.CreateAccessor(); //accessor will be disposed in the StreamQueryContent.SerializeToStreamAsync! try { var queryOp = new QueryActions.DatabaseQueryOperation(Database, index, query, accessor, cts); queryOp.Init(); msg.Content = new StreamQueryContent(InnerRequest, queryOp, accessor, timeout, mediaType => msg.Content.Headers.ContentType = new MediaTypeHeaderValue(mediaType) { CharSet = "utf-8" }); msg.Headers.Add("Raven-Result-Etag", queryOp.Header.ResultEtag.ToString()); msg.Headers.Add("Raven-Index-Etag", queryOp.Header.IndexEtag.ToString()); msg.Headers.Add("Raven-Is-Stale", queryOp.Header.IsStale ? "true" : "false"); msg.Headers.Add("Raven-Index", queryOp.Header.Index); msg.Headers.Add("Raven-Total-Results", queryOp.Header.TotalResults.ToString(CultureInfo.InvariantCulture)); msg.Headers.Add("Raven-Index-Timestamp", queryOp.Header.IndexTimestamp.GetDefaultRavenFormat()); if (IsCsvDownloadRequest(InnerRequest)) { msg.Content.Headers.Add("Content-Disposition", "attachment; filename=export.csv"); } } catch (OperationCanceledException e) { accessor.Dispose(); throw new TimeoutException(string.Format("The query did not produce results in {0}", DatabasesLandlord.SystemConfiguration.DatabaseOperationTimeout), e); } catch (Exception) { accessor.Dispose(); throw; } return(msg); }
public StreamQueryContent(HttpRequestMessage req, QueryActions.DatabaseQueryOperation queryOp, IStorageActionsAccessor accessor, CancellationTimeout timeout, Action <string> contentTypeSetter) { headers = CurrentOperationContext.Headers.Value; user = CurrentOperationContext.User.Value; this.req = req; this.queryOp = queryOp; this.accessor = accessor; _timeout = timeout; outputContentTypeSetter = contentTypeSetter; }
public long GetDocumentCountForEntityNames(string query) { long localDocumentCount = 0; database.TransactionalStorage.Batch(actions => { using (var internalCts = new CancellationTokenSource()) using (var linked = CancellationTokenSource.CreateLinkedTokenSource(database.WorkContext.CancellationToken, internalCts.Token)) using (var op = new QueryActions.DatabaseQueryOperation(database, Constants.DocumentsByEntityNameIndex, new IndexQuery { Query = query, PageSize = int.MaxValue }, actions, linked) { ShouldSkipDuplicateChecking = true }) { op.Init(); localDocumentCount = op.Header.TotalResults; } }); return(localDocumentCount); }
public Task <HttpResponseMessage> Exploration() { var linq = GetQueryStringValue("linq"); var collection = GetQueryStringValue("collection"); int timeoutSeconds; if (int.TryParse(GetQueryStringValue("timeoutSeconds"), out timeoutSeconds) == false) { timeoutSeconds = 60; } int pageSize; if (int.TryParse(GetQueryStringValue("pageSize"), out pageSize) == false) { pageSize = 100000; } var hash = Encryptor.Current.Hash.Compute16(Encoding.UTF8.GetBytes(linq)); var sourceHashed = MonoHttpUtility.UrlEncode(Convert.ToBase64String(hash)); var transformerName = Constants.TemporaryTransformerPrefix + sourceHashed; var transformerDefinition = Database.IndexDefinitionStorage.GetTransformerDefinition(transformerName); if (transformerDefinition == null) { transformerDefinition = new TransformerDefinition { Name = transformerName, Temporary = true, TransformResults = linq }; Database.Transformers.PutTransform(transformerName, transformerDefinition); } var msg = GetEmptyMessage(); using (var cts = new CancellationTokenSource()) { var timeout = cts.TimeoutAfter(TimeSpan.FromSeconds(timeoutSeconds)); var indexQuery = new IndexQuery { PageSize = pageSize, Start = 0, Query = "Tag:" + collection, ResultsTransformer = transformerName }; var accessor = Database.TransactionalStorage.CreateAccessor(); //accessor will be disposed in the StreamQueryContent.SerializeToStreamAsync! try { var queryOp = new QueryActions.DatabaseQueryOperation(Database, "Raven/DocumentsByEntityName", indexQuery, accessor, cts); queryOp.Init(); msg.Content = new StreamQueryContent(InnerRequest, queryOp, accessor, timeout, mediaType => msg.Content.Headers.ContentType = new MediaTypeHeaderValue(mediaType) { CharSet = "utf-8" }, o => { if (o.Count == 2 && o.ContainsKey(Constants.DocumentIdFieldName) && o.ContainsKey(Constants.Metadata)) { // this is the raw value out of the server, we don't want to get that var doc = queryOp.DocRetriever.Load(o.Value <string>(Constants.DocumentIdFieldName)); var djo = doc as IDynamicJsonObject; if (djo != null) { return(djo.Inner); } } return(o); }); msg.Headers.Add("Raven-Result-Etag", queryOp.Header.ResultEtag.ToString()); msg.Headers.Add("Raven-Index-Etag", queryOp.Header.IndexEtag.ToString()); msg.Headers.Add("Raven-Is-Stale", queryOp.Header.IsStale ? "true" : "false"); msg.Headers.Add("Raven-Index", queryOp.Header.Index); msg.Headers.Add("Raven-Total-Results", queryOp.Header.TotalResults.ToString(CultureInfo.InvariantCulture)); msg.Headers.Add("Raven-Index-Timestamp", queryOp.Header.IndexTimestamp.GetDefaultRavenFormat()); if (IsCsvDownloadRequest(InnerRequest)) { msg.Content.Headers.Add("Content-Disposition", "attachment; filename=export.csv"); } } catch (Exception) { accessor.Dispose(); throw; } return(new CompletedTask <HttpResponseMessage>(msg)); } }