예제 #1
0
        /// <summary>
        /// Perform a set based update using the specified index
        /// </summary>
        /// <param name="indexName">Name of the index.</param>
        /// <param name="queryToUpdate">The query to update.</param>
        /// <param name="patch">The patch request to use (using JavaScript)</param>
        /// <param name="allowStale">if set to <c>true</c> [allow stale].</param>
        public void UpdateByIndex(string indexName, IndexQuery queryToUpdate, ScriptedPatchRequest patch, bool allowStale)
        {
            CurrentOperationContext.Headers.Value = OperationsHeaders;
            var databaseBulkOperations = new DatabaseBulkOperations(database, RavenTransactionAccessor.GetTransactionInformation());

            databaseBulkOperations.UpdateByIndex(indexName, queryToUpdate, patch, allowStale);
        }
        public async Task <HttpResponseMessage> BulkEval(string id)
        {
            RavenJObject advPatchRequestJson;

            try
            {
                advPatchRequestJson = await ReadJsonObjectAsync <RavenJObject>();
            }
            catch (InvalidOperationException e)
            {
                Log.DebugException("Failed to deserialize document batch request.", e);
                return(GetMessageWithObject(new
                {
                    Message = "Could not understand json, please check its validity."
                }, (HttpStatusCode)422)); //http code 422 - Unprocessable entity
            }
            catch (InvalidDataException e)
            {
                Log.DebugException("Failed to deserialize document batch request.", e);
                return(GetMessageWithObject(new
                {
                    e.Message
                }, (HttpStatusCode)422)); //http code 422 - Unprocessable entity
            }

            // we don't use using because execution is async
            var cts     = new CancellationTokenSource();
            var timeout = cts.TimeoutAfter(DatabasesLandlord.SystemConfiguration.DatabaseOperationTimeout);

            var databaseBulkOperations = new DatabaseBulkOperations(Database, GetRequestTransaction(), cts, timeout);

            var advPatch = ScriptedPatchRequest.FromJson(advPatchRequestJson);

            return(OnBulkOperation((index, query, options) => databaseBulkOperations.UpdateByIndex(index, query, advPatch, options), id, timeout));
        }
예제 #3
0
        /// <summary>
        /// Perform a set based deletes using the specified index.
        /// </summary>
        /// <param name="indexName">Name of the index.</param>
        /// <param name="queryToDelete">The query to delete.</param>
        /// <param name="allowStale">if set to <c>true</c> [allow stale].</param>
        public void DeleteByIndex(string indexName, IndexQuery queryToDelete, bool allowStale)
        {
            CurrentOperationContext.Headers.Value = OperationsHeaders;
            var databaseBulkOperations = new DatabaseBulkOperations(database, TransactionInformation);

            databaseBulkOperations.DeleteByIndex(indexName, queryToDelete, allowStale);
        }
예제 #4
0
        /// <summary>
        /// Perform a set based update using the specified index.
        /// </summary>
        /// <param name="indexName">Name of the index.</param>
        /// <param name="queryToUpdate">The query to update.</param>
        /// <param name="patchRequests">The patch requests.</param>
        /// <param name="allowStale">if set to <c>true</c> [allow stale].</param>
        public void UpdateByIndex(string indexName, IndexQuery queryToUpdate, PatchRequest[] patchRequests, bool allowStale)
        {
            CurrentOperationContext.Headers.Value = OperationsHeaders;
            var databaseBulkOperations = new DatabaseBulkOperations(database, TransactionInformation);

            databaseBulkOperations.UpdateByIndex(indexName, queryToUpdate, patchRequests, allowStale);
        }
예제 #5
0
        public override void Respond(IHttpContext context)
        {
            var databaseBulkOperations = new DatabaseBulkOperations(Database, GetRequestTransaction(context));

            switch (context.Request.HttpMethod)
            {
            case "POST":
                Batch(context);
                break;

            case "DELETE":
                OnBulkOperation(context, databaseBulkOperations.DeleteByIndex);
                break;

            case "PATCH":
                var patchRequestJson = context.ReadJsonArray();
                var patchRequests    = patchRequestJson.Cast <RavenJObject>().Select(PatchRequest.FromJson).ToArray();
                OnBulkOperation(context, (index, query, allowStale) =>
                                databaseBulkOperations.UpdateByIndex(index, query, patchRequests, allowStale));
                break;

            case "EVAL":
                var advPatchRequestJson = context.ReadJsonObject <RavenJObject>();
                var advPatch            = ScriptedPatchRequest.FromJson(advPatchRequestJson);
                OnBulkOperation(context, (index, query, allowStale) =>
                                databaseBulkOperations.UpdateByIndex(index, query, advPatch, allowStale));
                break;
            }
        }
 public HttpResponseMessage BulkDelete(string id)
 {
     using (var cts = new CancellationTokenSource())
         using (var timeout = cts.TimeoutAfter(DatabasesLandlord.SystemConfiguration.DatbaseOperationTimeout))
         {
             var databaseBulkOperations = new DatabaseBulkOperations(Database, GetRequestTransaction(), cts.Token, timeout);
             return(OnBulkOperation(databaseBulkOperations.DeleteByIndex, id));
         }
 }
        public async Task <HttpResponseMessage> BulkEval(string id)
        {
            using (var cts = new CancellationTokenSource())
                using (var timeout = cts.TimeoutAfter(DatabasesLandlord.SystemConfiguration.DatbaseOperationTimeout))
                {
                    var databaseBulkOperations = new DatabaseBulkOperations(Database, GetRequestTransaction(), cts.Token, timeout);
                    var advPatchRequestJson    = await ReadJsonObjectAsync <RavenJObject>();

                    var advPatch = ScriptedPatchRequest.FromJson(advPatchRequestJson);
                    return(OnBulkOperation((index, query, allowStale) => databaseBulkOperations.UpdateByIndex(index, query, advPatch, allowStale), id));
                }
        }
        public async Task <HttpResponseMessage> BulkPatch(string id)
        {
            using (var cts = new CancellationTokenSource())
                using (var timeout = cts.TimeoutAfter(DatabasesLandlord.SystemConfiguration.DatbaseOperationTimeout))
                {
                    var databaseBulkOperations = new DatabaseBulkOperations(Database, GetRequestTransaction(), cts.Token, timeout);
                    var patchRequestJson       = await ReadJsonArrayAsync();

                    var patchRequests = patchRequestJson.Cast <RavenJObject>().Select(PatchRequest.FromJson).ToArray();
                    return(OnBulkOperation((index, query, allowStale) => databaseBulkOperations.UpdateByIndex(index, query, patchRequests, allowStale), id));
                }
        }
예제 #9
0
        public async Task <HttpResponseMessage> BulkEval(string id)
        {
            // we don't use using because execution is async
            var cts     = new CancellationTokenSource();
            var timeout = cts.TimeoutAfter(DatabasesLandlord.SystemConfiguration.DatabaseOperationTimeout);

            var databaseBulkOperations = new DatabaseBulkOperations(Database, GetRequestTransaction(), cts, timeout);
            var advPatchRequestJson    = await ReadJsonObjectAsync <RavenJObject>();

            var advPatch = ScriptedPatchRequest.FromJson(advPatchRequestJson);

            return(OnBulkOperation((index, query, options) => databaseBulkOperations.UpdateByIndex(index, query, advPatch, options), id, cts));
        }
예제 #10
0
        public override void Respond(IHttpContext context)
        {
        	var databaseBulkOperations = new DatabaseBulkOperations(Database, GetRequestTransaction(context));
        	switch (context.Request.HttpMethod)
            {                
                case "POST":
                    Batch(context);
                    break;
				case "DELETE":
					OnBulkOperation(context, databaseBulkOperations.DeleteByIndex);
            		break;
				case "PATCH":
					var patchRequestJson = context.ReadJsonArray();
					var patchRequests = patchRequestJson.Cast<JObject>().Select(PatchRequest.FromJson).ToArray();
					OnBulkOperation(context, (index, query, allowStale) =>
						databaseBulkOperations.UpdateByIndex(index, query, patchRequests, allowStale));
            		break;
            }
        }
예제 #11
0
        public async Task <HttpResponseMessage> BulkPatch(string id)
        {
            RavenJArray patchRequestJson;

            try
            {
                patchRequestJson = await ReadJsonArrayAsync().ConfigureAwait(false);
            }
            catch (InvalidOperationException e)
            {
                if (Log.IsDebugEnabled)
                {
                    Log.DebugException("Failed to read json documents batch.", e);
                }
                return(GetMessageWithObject(new
                {
                    Message = "Could not understand json, please check its validity."
                }, (HttpStatusCode)422)); //http code 422 - Unprocessable entity
            }
            catch (InvalidDataException e)
            {
                if (Log.IsDebugEnabled)
                {
                    Log.DebugException("Failed to read json documents batch.", e);
                }
                return(GetMessageWithObject(new
                {
                    e.Message
                }, (HttpStatusCode)422)); //http code 422 - Unprocessable entity
            }

            // we don't use using because execution is async
            var cts     = new CancellationTokenSource();
            var timeout = cts.TimeoutAfter(DatabasesLandlord.SystemConfiguration.DatabaseOperationTimeout);

            var databaseBulkOperations = new DatabaseBulkOperations(Database, GetRequestTransaction(), cts, timeout);

            var patchRequests = patchRequestJson.Cast <RavenJObject>().Select(PatchRequest.FromJson).ToArray();

            return(OnBulkOperation((index, query, options, reportProgress) => databaseBulkOperations.UpdateByIndex(index, query, patchRequests, options, reportProgress), id, timeout));
        }
        public HttpResponseMessage BulkDelete(string id)
        {
            var indexDefinition = Database.IndexDefinitionStorage.GetIndexDefinition(id);

            if (indexDefinition == null)
            {
                throw new IndexDoesNotExistsException(string.Format("Index '{0}' does not exist.", id));
            }

            if (indexDefinition.IsMapReduce)
            {
                throw new InvalidOperationException("Cannot execute DeleteByIndex operation on Map-Reduce indexes.");
            }

            // we don't use using because execution is async
            var cts     = new CancellationTokenSource();
            var timeout = cts.TimeoutAfter(DatabasesLandlord.SystemConfiguration.DatabaseOperationTimeout);

            var databaseBulkOperations = new DatabaseBulkOperations(Database, GetRequestTransaction(), cts, timeout);

            return(OnBulkOperation(databaseBulkOperations.DeleteByIndex, id, timeout));
        }
        public void UpdateByIndex(string indexName, IndexQuery queryToUpdate, PatchRequest[] patchRequests, bool allowStale)
        {
            var databaseBulkOperations = new DatabaseBulkOperations(database, RavenTransactionAccessor.GetTransactionInformation());

            databaseBulkOperations.UpdateByIndex(indexName, queryToUpdate, patchRequests, allowStale);
        }
        public void DeleteByIndex(string indexName, IndexQuery queryToDelete, bool allowStale)
        {
            var databaseBulkOperations = new DatabaseBulkOperations(database, RavenTransactionAccessor.GetTransactionInformation());

            databaseBulkOperations.DeleteByIndex(indexName, queryToDelete, allowStale);
        }