public Task DeleteByIndexAsync(string indexName, IndexQuery queryToDelete, bool allowStale) { string path = queryToDelete.GetIndexQueryUrl(url, indexName, "bulk_docs") + "&allowStale=" + allowStale; var request = jsonRequestFactory.CreateHttpJsonRequest(this, path, "DELETE", credentials, convention); request.AddOperationHeaders(OperationsHeaders); return(request.ReadResponseStringAsync() .ContinueWith(task => { var aggregateException = task.Exception; if (aggregateException == null) { return task; } var e = aggregateException.ExtractSingleInnerException() as WebException; if (e == null) { return task; } var httpWebResponse = e.Response as HttpWebResponse; if (httpWebResponse != null && httpWebResponse.StatusCode == HttpStatusCode.NotFound) { throw new InvalidOperationException("There is no index named: " + indexName, e); } return task; }).Unwrap()); }
public override HttpRequestMessage CreateRequest(ServerNode node, out string url) { var notNullOptions = Options ?? new QueryOperationOptions(); var u = $"{node.Url}/databases/{node.Database}"; url = $"{QueryToDelete.GetIndexQueryUrl(u, IndexName, "queries")}&allowStale=" + $"{notNullOptions.AllowStale}&details={notNullOptions.RetrieveDetails}"; if (notNullOptions.MaxOpsPerSecond != null) { url += "&maxOpsPerSec=" + notNullOptions.StaleTimeout; } if (notNullOptions.StaleTimeout != null) { url += "&staleTimeout=" + notNullOptions.StaleTimeout; } IsReadRequest = false; var request = new HttpRequestMessage { Method = HttpMethod.Delete, }; return(request); }
public override HttpRequestMessage CreateRequest(ServerNode node, out string url) { var notNullOptions = Options ?? new QueryOperationOptions(); var u = $"{node.Url}/databases/{node.Database}"; url = $"{QueryToUpdate.GetIndexQueryUrl(u, IndexName, "queries")}&allowStale=" + $"{notNullOptions.AllowStale}&maxOpsPerSec={notNullOptions.MaxOpsPerSecond}&details={notNullOptions.RetrieveDetails}"; if (notNullOptions.StaleTimeout != null) { url += "&staleTimeout=" + notNullOptions.StaleTimeout; } var request = new HttpRequestMessage { Method = HttpMethods.Patch, Content = new BlittableJsonContent(stream => { Context.Write(stream, Script); }) }; IsReadRequest = false; return(request); }
/// <summary> /// Begins the async query. /// </summary> /// <param name="index">The index.</param> /// <param name="query">The query.</param> /// <param name="includes">The include paths</param> /// <returns></returns> public Task <QueryResult> QueryAsync(string index, IndexQuery query, string[] includes) { EnsureIsNotNullOrEmpty(index, "index"); var path = query.GetIndexQueryUrl(url, index, "indexes"); if (includes != null && includes.Length > 0) { path += "&" + string.Join("&", includes.Select(x => "include=" + x).ToArray()); } var request = jsonRequestFactory.CreateHttpJsonRequest(this, path, "GET", credentials, convention); return(request.ReadResponseStringAsync() .ContinueWith(task => AttemptToProcessResponse(() => { RavenJObject json; using (var reader = new JsonTextReader(new StringReader(task.Result))) json = (RavenJObject)RavenJToken.ReadFrom(reader); return new QueryResult { IsStale = Convert.ToBoolean(json["IsStale"].ToString()), IndexTimestamp = json.Value <DateTime>("IndexTimestamp"), IndexEtag = new Guid(request.ResponseHeaders["ETag"].First()), Results = ((RavenJArray)json["Results"]).Cast <RavenJObject>().ToList(), TotalResults = Convert.ToInt32(json["TotalResults"].ToString()), SkippedResults = Convert.ToInt32(json["SkippedResults"].ToString()), Includes = ((RavenJArray)json["Includes"]).Cast <RavenJObject>().ToList(), }; }))); }
private QueryResult DirectQuery(string index, IndexQuery query, string operationUrl) { string path = query.GetIndexQueryUrl(operationUrl, index, "indexes"); var request = HttpJsonRequest.CreateHttpJsonRequest(this, path, "GET", credentials); request.AddOperationHeaders(OperationsHeaders); var serializer = convention.CreateSerializer(); JToken json; try { using (var reader = new JsonTextReader(new StringReader(request.ReadResponseString()))) json = (JToken)serializer.Deserialize(reader); } catch (WebException e) { var httpWebResponse = e.Response as HttpWebResponse; if (httpWebResponse != null && httpWebResponse.StatusCode == HttpStatusCode.NotFound) { throw new InvalidOperationException("There is no index named: " + index); } throw; } return(new QueryResult { IsStale = Convert.ToBoolean(json["IsStale"].ToString()), Results = json["Results"].Children().Cast <JObject>().ToArray(), TotalResults = Convert.ToInt32(json["TotalResults"].ToString()) }); }
/// <summary> /// Begins the async query. /// </summary> /// <param name="index">The index.</param> /// <param name="query">The query.</param> /// <param name="includes">The include paths</param> public Task <QueryResult> QueryAsync(string index, IndexQuery query, string[] includes) { EnsureIsNotNullOrEmpty(index, "index"); var path = query.GetIndexQueryUrl(url, index, "indexes"); if (includes != null && includes.Length > 0) { path += "&" + string.Join("&", includes.Select(x => "include=" + x).ToArray()); } var request = HttpJsonRequest.CreateHttpJsonRequest(this, path, "GET", credentials, convention); return(Task.Factory.FromAsync <string>(request.BeginReadResponseString, request.EndReadResponseString, null) .ContinueWith(task => { JToken json; using (var reader = new JsonTextReader(new StringReader(task.Result))) json = (JToken)convention.CreateSerializer().Deserialize(reader); return new QueryResult { IsStale = Convert.ToBoolean(json["IsStale"].ToString()), IndexTimestamp = json.Value <DateTime>("IndexTimestamp"), IndexEtag = new Guid(request.ResponseHeaders["ETag"]), Results = json["Results"].Children().Cast <JObject>().ToList(), TotalResults = Convert.ToInt32(json["TotalResults"].ToString()), IndexName = json.Value <string>("IndexName"), SkippedResults = Convert.ToInt32(json["SkippedResults"].ToString()) }; })); }
/// <summary> /// Begins the async query. /// </summary> /// <param name="index">The index.</param> /// <param name="query">The query.</param> /// <param name="includes">The include paths</param> /// <returns></returns> public Task <QueryResult> QueryAsync(string index, IndexQuery query, string[] includes) { EnsureIsNotNullOrEmpty(index, "index"); var path = query.GetIndexQueryUrl(url, index, "indexes"); if (includes != null && includes.Length > 0) { path += "&" + string.Join("&", includes.Select(x => "include=" + x).ToArray()); } var request = jsonRequestFactory.CreateHttpJsonRequest(this, path.NoCache(), "GET", credentials, convention); return(request.ReadResponseJsonAsync() .ContinueWith(task => AttemptToProcessResponse(() => SerializationHelper.ToQueryResult((RavenJObject)task.Result, request.ResponseHeaders["ETag"].First())))); }
/// <summary> /// Begins the async query. /// </summary> /// <param name="index">The index.</param> /// <param name="query">The query.</param> /// <param name="includes">The include paths</param> public Task <QueryResult> QueryAsync(string index, IndexQuery query, string[] includes) { EnsureIsNotNullOrEmpty(index, "index"); var path = query.GetIndexQueryUrl(url, index, "indexes"); if (includes != null && includes.Length > 0) { path += "&" + string.Join("&", includes.Select(x => "include=" + x).ToArray()); } var request = jsonRequestFactory.CreateHttpJsonRequest(this, path, "GET", credentials, convention); return(request.ReadResponseJsonAsync() .ContinueWith(task => { RavenJObject json; try { json = (RavenJObject)task.Result; } catch (AggregateException e) { var we = e.ExtractSingleInnerException() as WebException; if (we != null) { var httpWebResponse = we.Response as HttpWebResponse; if (httpWebResponse != null && httpWebResponse.StatusCode == HttpStatusCode.NotFound) { var text = new StreamReader(httpWebResponse.GetResponseStreamWithHttpDecompression()).ReadToEnd(); if (text.Contains("maxQueryString")) { throw new InvalidOperationException(text, e); } throw new InvalidOperationException("There is no index named: " + index); } } throw; } return new QueryResult { IsStale = Convert.ToBoolean(json["IsStale"].ToString()), IndexTimestamp = json.Value <DateTime>("IndexTimestamp"), IndexEtag = new Guid(request.ResponseHeaders["ETag"]), Results = ((RavenJArray)json["Results"]).Cast <RavenJObject>().ToList(), TotalResults = Convert.ToInt32(json["TotalResults"].ToString()), IndexName = json.Value <string>("IndexName"), SkippedResults = Convert.ToInt32(json["SkippedResults"].ToString()) }; })); }
public override HttpRequestMessage CreateRequest(ServerNode node, out string url) { var method = (IndexQuery.Query == null || IndexQuery.Query.Length <= Convention.MaxLengthOfQueryUsingGetUrl) ? HttpMethod.Get : HttpMethod.Post; var request = new HttpRequestMessage { Method = method }; if (method == HttpMethod.Post) { request.Content = new BlittableJsonContent(stream => { using (var writer = new BlittableJsonTextWriter(Context, stream)) { writer.WriteStartObject(); writer.WritePropertyName("Query"); writer.WriteString(IndexQuery.Query); writer.WriteEndObject(); } }); } var indexQueryUrl = IndexQuery.GetIndexQueryUrl(Index, "queries", includeQuery: method == HttpMethod.Get); EnsureIsNotNullOrEmpty(indexQueryUrl, "index"); var pathBuilder = new StringBuilder(indexQueryUrl); if (MetadataOnly) { pathBuilder.Append("&metadata-only=true"); } if (IndexEntriesOnly) { pathBuilder.Append("&debug=entries"); } if (Includes != null && Includes.Count > 0) { pathBuilder.Append("&").Append(string.Join("&", Includes.Select(x => "include=" + x).ToArray())); } url = $"{node.Url}/databases/{node.Database}/" + pathBuilder; return(request); }
public IAsyncResult BeginQuery(string index, IndexQuery query, AsyncCallback callback, object state) { EnsureIsNotNullOrEmpty(index, "index"); string path = query.GetIndexQueryUrl(url, index, "indexes"); var request = HttpJsonRequest.CreateHttpJsonRequest(this, path, "GET", credentials); var asyncCallback = callback; if (callback != null) { asyncCallback = ar => callback(new UserAsyncData(request, ar)); } var asyncResult = request.BeginReadResponseString(asyncCallback, state); return(new UserAsyncData(request, asyncResult)); }
private QueryResult DirectQuery(string index, IndexQuery query, string operationUrl, string[] includes) { string path = query.GetIndexQueryUrl(operationUrl, index, "indexes"); if (includes != null && includes.Length > 0) { path += "&" + string.Join("&", includes.Select(x => "include=" + x).ToArray()); } var request = jsonRequestFactory.CreateHttpJsonRequest(this, path, "GET", credentials, convention); request.AddOperationHeaders(OperationsHeaders); var serializer = convention.CreateSerializer(); JToken json; try { using (var reader = new JsonTextReader(new StringReader(request.ReadResponseString()))) json = (JToken)serializer.Deserialize(reader); } catch (WebException e) { var httpWebResponse = e.Response as HttpWebResponse; if (httpWebResponse != null && httpWebResponse.StatusCode == HttpStatusCode.NotFound) { throw new InvalidOperationException("There is no index named: " + index); } throw; } return(new QueryResult { IsStale = Convert.ToBoolean(json["IsStale"].ToString()), IndexTimestamp = json.Value <DateTime>("IndexTimestamp"), IndexEtag = new Guid(request.ResponseHeaders["ETag"]), Results = json["Results"].Children().Cast <JObject>().ToList(), Includes = json["Includes"].Children().Cast <JObject>().ToList(), TotalResults = Convert.ToInt32(json["TotalResults"].ToString()), IndexName = json.Value <string>("IndexName"), SkippedResults = Convert.ToInt32(json["SkippedResults"].ToString()), }); }
private static IndexQuery EncodeAndDecodeIndexQuery(IndexQuery query) { string indexQueryUrl = query.GetIndexQueryUrl(Some.String(), Some.String(), Some.String()); // indexQueryUrl is in the form "/path?querystring#anchor" string indexQueryQuerystring = indexQueryUrl.Substring(indexQueryUrl.IndexOf("?") + 1); int indexOfPoint = indexQueryQuerystring.IndexOf('#'); if (indexOfPoint != -1) { indexQueryQuerystring = indexQueryQuerystring.Substring(0, indexOfPoint); } IHttpRequest request = MockRepository.GenerateStub <IHttpRequest>(); IHttpContext context = MockRepository.GenerateMock <IHttpContext>(); context.Stub(c => c.Request).Return(request); request.Stub(r => r.QueryString).Return(HttpUtility.ParseQueryString(indexQueryQuerystring)); return(context.GetIndexQueryFromHttpContext(1024)); }
public void DeleteByIndex(string indexName, IndexQuery queryToDelete, bool allowStale) { ExecuteWithReplication <object>(operationUrl => { string path = queryToDelete.GetIndexQueryUrl(operationUrl, indexName, "bulk_docs") + "&allowStale=" + allowStale; var request = HttpJsonRequest.CreateHttpJsonRequest(this, path, "DELETE", credentials); request.AddOperationHeaders(OperationsHeaders); try { request.ReadResponseString(); } catch (WebException e) { var httpWebResponse = e.Response as HttpWebResponse; if (httpWebResponse != null && httpWebResponse.StatusCode == HttpStatusCode.NotFound) { throw new InvalidOperationException("There is no index named: " + indexName); } throw; } return(null); }); }
public void UpdateByIndex(string indexName, IndexQuery queryToUpdate, PatchRequest[] patchRequests, bool allowStale) { ExecuteWithReplication <object>(operationUrl => { string path = queryToUpdate.GetIndexQueryUrl(operationUrl, indexName, "bulk_docs") + "&allowStale=" + allowStale; var request = HttpJsonRequest.CreateHttpJsonRequest(this, path, "PATCH", credentials); request.AddOperationHeaders(OperationsHeaders); request.Write(new JArray(patchRequests.Select(x => x.ToJson())).ToString(Formatting.Indented)); try { request.ReadResponseString(); } catch (WebException e) { var httpWebResponse = e.Response as HttpWebResponse; if (httpWebResponse != null && httpWebResponse.StatusCode == HttpStatusCode.NotFound) { throw new InvalidOperationException("There is no index named: " + indexName); } throw; } return(null); }); }
/// <summary> /// Begins the async query. /// </summary> /// <param name="index">The index.</param> /// <param name="query">The query.</param> /// <param name="includes">The include paths</param> public Task<QueryResult> QueryAsync(string index, IndexQuery query, string[] includes) { EnsureIsNotNullOrEmpty(index, "index"); var path = query.GetIndexQueryUrl(url, index, "indexes"); if (includes != null && includes.Length > 0) { path += "&" + string.Join("&", includes.Select(x => "include=" + x).ToArray()); } var request = HttpJsonRequest.CreateHttpJsonRequest(this, path, "GET", credentials, convention); return Task.Factory.FromAsync<string>(request.BeginReadResponseString, request.EndReadResponseString, null) .ContinueWith(task => { JToken json; using (var reader = new JsonTextReader(new StringReader(task.Result))) json = (JToken)convention.CreateSerializer().Deserialize(reader); return new QueryResult { IsStale = Convert.ToBoolean(json["IsStale"].ToString()), IndexTimestamp = json.Value<DateTime>("IndexTimestamp"), IndexEtag = new Guid(request.ResponseHeaders["ETag"]), Results = json["Results"].Children().Cast<JObject>().ToList(), TotalResults = Convert.ToInt32(json["TotalResults"].ToString()), IndexName = json.Value<string>("IndexName"), SkippedResults = Convert.ToInt32(json["SkippedResults"].ToString()) }; }); }
private static IndexQuery EncodeAndDecodeIndexQuery(IndexQuery query) { string indexQueryUrl = query.GetIndexQueryUrl(Some.String(), Some.String(), Some.String()); // indexQueryUrl is in the form "/path?querystring#anchor" string indexQueryQuerystring = indexQueryUrl.Substring(indexQueryUrl.IndexOf('?') + 1); int indexOfPoint = indexQueryQuerystring.IndexOf('#'); if (indexOfPoint != -1) { indexQueryQuerystring = indexQueryQuerystring.Substring(0, indexOfPoint); } IHttpRequest request = MockRepository.GenerateStub<IHttpRequest>(); IHttpContext context = MockRepository.GenerateMock<IHttpContext>(); context.Stub(c => c.Request).Return(request); request.Stub(r => r.QueryString).Return(HttpUtility.ParseQueryString(indexQueryQuerystring)); return context.GetIndexQueryFromHttpContext(1024); }
public void Query(string index, IndexQuery query, string[] includes, CallbackFunction.Load<QueryResult> callback) { string path = query.GetIndexQueryUrl(string.Empty, index, "indexes"); if (includes != null && includes.Length > 0) { path += "&" + string.Join("&", includes.Select(x => "include=" + x).ToArray()); } HttpJsonRequest request; this.CreateContext(new Uri(string.Format("{0}/{1}?", this.DatabaseAddress, path)), RequestMethod.GET, out request); request.HttpWebRequest.BeginGetResponse((result) => Query_Callback(request, result, callback), request); }