public ScheduledReductionInfo DeleteScheduledReduction(List <object> itemsToDelete)
        {
            var result            = new ScheduledReductionInfo();
            var hasResult         = false;
            var currentEtagBinary = Guid.Empty.ToByteArray();

            foreach (RavenJToken token in itemsToDelete)
            {
                var readResult = storage.ScheduleReductions.Read(token);
                if (readResult == null)
                {
                    continue;
                }

                var etagBinary = readResult.Key.Value <byte[]>("etag");
                if (new ComparableByteArray(etagBinary).CompareTo(currentEtagBinary) > 0)
                {
                    hasResult = true;
                    var timestamp = readResult.Key.Value <DateTime>("timestamp");
                    result.Etag      = etagBinary.TransfromToGuidWithProperSorting();
                    result.Timestamp = timestamp;
                }

                storage.ScheduleReductions.Remove(token);
            }
            return(hasResult ? result : null);
        }
示例#2
0
        public ScheduledReductionInfo DeleteScheduledReduction(List <object> itemsToDelete)
        {
            var hasResult         = false;
            var result            = new ScheduledReductionInfo();
            var currentEtagBinary = Guid.Empty.ToByteArray();

            foreach (OptimizedIndexReader reader in itemsToDelete)
            {
                foreach (var sortedBookmark in reader.GetSortedBookmarks())
                {
                    Api.JetGotoBookmark(session, ScheduledReductions, sortedBookmark.Item1, sortedBookmark.Item2);
                    var etagBinary = Api.RetrieveColumn(session, ScheduledReductions,
                                                        tableColumnsCache.ScheduledReductionColumns["etag"]);
                    if (new ComparableByteArray(etagBinary).CompareTo(currentEtagBinary) > 0)
                    {
                        hasResult = true;
                        var timestamp =
                            Api.RetrieveColumnAsInt64(session, ScheduledReductions,
                                                      tableColumnsCache.ScheduledReductionColumns["timestamp"]).Value;
                        result.Etag      = etagBinary.TransfromToGuidWithProperSorting();
                        result.Timestamp = DateTime.FromBinary(timestamp);
                    }

                    Api.JetDelete(session, ScheduledReductions);
                }
            }
            return(hasResult ? result : null);
        }
        public ScheduledReductionInfo DeleteScheduledReduction(IEnumerable <object> itemsToDelete)
        {
            if (itemsToDelete == null)
            {
                return(null);
            }

            var result      = new ScheduledReductionInfo();
            var hasResult   = false;
            var currentEtag = Etag.Empty;

            foreach (RavenJToken token in itemsToDelete)
            {
                var etag         = Etag.Parse(token.Value <byte[]>("etag"));
                var etagAsString = etag.ToString();

                ushort version;
                var    value = LoadJson(tableStorage.ScheduledReductions, etagAsString, writeBatch.Value, out version);
                if (value == null)
                {
                    continue;
                }

                if (etag.CompareTo(currentEtag) > 0)
                {
                    hasResult        = true;
                    result.Etag      = etag;
                    result.Timestamp = value.Value <DateTime>("timestamp");
                }

                var view      = value.Value <int>("view");
                var level     = value.Value <int>("level");
                var reduceKey = value.Value <string>("reduceKey");

                DeleteScheduledReduction(etagAsString, view, level, reduceKey);
            }

            return(hasResult ? result : null);
        }
示例#4
0
        public ScheduledReductionInfo DeleteScheduledReduction(IEnumerable<object> itemsToDelete)
        {
            if (itemsToDelete == null)
                return null;
            
            var hasResult = false;
            var result = new ScheduledReductionInfo();
            
            var currentEtagBinary = Guid.Empty.ToByteArray();
            foreach (OptimizedDeleter reader in itemsToDelete.Where(x => x != null))
            {
                if (scheduledReductionsPerViewAndLevel != null)
                {
                    scheduledReductionsPerViewAndLevel.AddOrUpdate(reader.IndexId, new RemainingReductionPerLevel(), (key, oldvalue) => oldvalue.Add(reader.ItemsToDeletePerViewAndLevel));
                }
                foreach (var sortedBookmark in reader.GetSortedBookmarks())
                {
                    Api.JetGotoBookmark(session, ScheduledReductions, sortedBookmark.Item1, sortedBookmark.Item2);
                    var etagBinary = Api.RetrieveColumn(session, ScheduledReductions,
                                                        tableColumnsCache.ScheduledReductionColumns["etag"]);					
                    if (new ComparableByteArray(etagBinary).CompareTo(currentEtagBinary) > 0)
                    {
                        hasResult = true;
                        var timestamp =
                            Api.RetrieveColumnAsInt64(session, ScheduledReductions,
                                                      tableColumnsCache.ScheduledReductionColumns["timestamp"]).Value;
                        result.Etag = Etag.Parse(etagBinary);
                        result.Timestamp = DateTime.FromBinary(timestamp);
                    }

                    Api.JetDelete(session, ScheduledReductions);
                    MaybePulseTransaction();
                }
            }
            return hasResult ? result : null;
        }
		public ScheduledReductionInfo DeleteScheduledReduction(IEnumerable<object> itemsToDelete)
		{
			if (itemsToDelete == null)
				return null;

			var result = new ScheduledReductionInfo();
			var hasResult = false;
			var currentEtag = Etag.Empty;
			foreach (Etag etag in itemsToDelete)
			{
                var etagAsString = (Slice)etag.ToString();

				ushort version;
				var value = LoadStruct(tableStorage.ScheduledReductions, etagAsString, writeBatch.Value, out version);
				if (value == null)
					continue;

				if (etag.CompareTo(currentEtag) > 0)
				{
					hasResult = true;
					result.Etag = etag;
					result.Timestamp = DateTime.FromBinary(value.ReadLong(ScheduledReductionFields.Timestamp));
				}

				var view = value.ReadInt(ScheduledReductionFields.IndexId);
				var level = value.ReadInt(ScheduledReductionFields.Level);
				var reduceKey = value.ReadString(ScheduledReductionFields.ReduceKey);

				DeleteScheduledReduction(etagAsString, view, CreateKey(view), level, reduceKey);
			}

			return hasResult ? result : null;
		}
		public ScheduledReductionInfo DeleteScheduledReduction(IEnumerable<object> itemsToDelete)
		{
			if (itemsToDelete == null)
				return null;

			var result = new ScheduledReductionInfo();
			var hasResult = false;
			var currentEtag = Etag.Empty;
			foreach (RavenJToken token in itemsToDelete)
			{
				var etag = Etag.Parse(token.Value<byte[]>("etag"));
				var etagAsString = etag.ToString();

				ushort version;
				var value = LoadJson(tableStorage.ScheduledReductions, etagAsString, writeBatch.Value, out version);
				if (value == null)
					continue;

				if (etag.CompareTo(currentEtag) > 0)
				{
					hasResult = true;
					result.Etag = etag;
					result.Timestamp = value.Value<DateTime>("timestamp");
				}

				var view = value.Value<int>("view");
				var level = value.Value<int>("level");
				var reduceKey = value.Value<string>("reduceKey");

				DeleteScheduledReduction(etagAsString, view, level, reduceKey);
			}

			return hasResult ? result : null;
		}
		public ScheduledReductionInfo DeleteScheduledReduction(IEnumerable<object> itemsToDelete)
		{
			if (itemsToDelete == null)
				return null;

			var result = new ScheduledReductionInfo();
			var hasResult = false;
			var currentEtag = Etag.Empty;
			foreach (Etag etag in itemsToDelete.Where(x => x != null))
			{
                var etagAsString = (Slice)etag.ToString();

				ushort version;
				var value = LoadStruct(tableStorage.ScheduledReductions, etagAsString, writeBatch.Value, out version);
				if (value == null)
					continue;

				if (etag.CompareTo(currentEtag) > 0)
				{
					hasResult = true;
					result.Etag = etag;
					result.Timestamp = DateTime.FromBinary(value.ReadLong(ScheduledReductionFields.Timestamp));
				}

				var view = value.ReadInt(ScheduledReductionFields.IndexId);
				var level = value.ReadInt(ScheduledReductionFields.Level);
				var reduceKey = value.ReadString(ScheduledReductionFields.ReduceKey);
			    var bucket = value.ReadInt(ScheduledReductionFields.Bucket);

                DeleteScheduledReduction(etag, etagAsString, CreateScheduleReductionKey(view, level, reduceKey), CreateViewKey(view), bucket);
				if (scheduledReductionsPerViewAndLevel != null)
					scheduledReductionsPerViewAndLevel.AddOrUpdate(view, new RemainingReductionPerLevel(level), (key, oldvalue) => oldvalue.DecrementPerLevelCounters(level));
			}

			return hasResult ? result : null;
		}