コード例 #1
0
ファイル: MsgQuery.cs プロジェクト: git-thinh/limada
        private MsgD WriteImmediateQueryResult(AbstractQueryResult queryResult, ObjectExchangeConfiguration
                                               config)
        {
            IIntIterator4 idIterator = queryResult.IterateIDs();
            MsgD          message    = BuildQueryResultMessage(0, idIterator, queryResult.Size(), config);

            return(message);
        }
コード例 #2
0
ファイル: IntArrayListTestCase.cs プロジェクト: masroore/db4o
 private void AssertIterator(int[] expected, IIntIterator4 iterator)
 {
     for (var i = 0; i < expected.Length; ++i)
     {
         Assert.IsTrue(iterator.MoveNext());
         Assert.AreEqual(expected[i], iterator.CurrentInt());
         Assert.AreEqual(expected[i], iterator.Current);
     }
     Assert.IsFalse(iterator.MoveNext());
 }
コード例 #3
0
ファイル: MReadMultipleObjects.cs プロジェクト: erdincay/db4o
		private ByteArrayBuffer MarshallObjects(int prefetchDepth, int prefetchCount, IIntIterator4
			 ids)
		{
			lock (ContainerLock())
			{
				IObjectExchangeStrategy strategy = ObjectExchangeStrategyFactory.ForConfig(new ObjectExchangeConfiguration
					(prefetchDepth, prefetchCount));
				return strategy.Marshall((LocalTransaction)Transaction(), ids, prefetchCount);
			}
		}
コード例 #4
0
 private void AssertIterator(int[] expected, IIntIterator4 iterator)
 {
     for (int i = 0; i < expected.Length; ++i)
     {
         Assert.IsTrue(iterator.MoveNext());
         Assert.AreEqual(expected[i], iterator.CurrentInt());
         Assert.AreEqual(expected[i], iterator.Current);
     }
     Assert.IsFalse(iterator.MoveNext());
 }
コード例 #5
0
		public virtual ByteArrayBuffer Write(IIntIterator4 idIterator, int maxCount)
		{
			IList rootIds = ReadSlots(idIterator, maxCount);
			IList slots = SlotsFor(rootIds);
			int marshalledSize = MarshalledSizeFor(slots) + Const4.IntLength + rootIds.Count 
				* Const4.IntLength;
			ByteArrayBuffer buffer = new ByteArrayBuffer(marshalledSize);
			WriteIdSlotPairsTo(slots, buffer);
			WriteIds(buffer, rootIds);
			return buffer;
		}
コード例 #6
0
        public virtual Db4objects.Db4o.Internal.Query.Result.AbstractQueryResult ToIdList
            ()
        {
            IdListQueryResult res = new IdListQueryResult(Transaction(), KnownSize());
            IIntIterator4     i   = IterateIDs();

            while (i.MoveNext())
            {
                res.Add(i.CurrentInt());
            }
            return(res);
        }
コード例 #7
0
ファイル: MsgQuery.cs プロジェクト: masroore/db4o
 private MsgD BuildQueryResultMessage(int queryResultId, IIntIterator4 ids, int maxCount
     , ObjectExchangeConfiguration config)
 {
     var payload = ObjectExchangeStrategyFactory.ForConfig(config).Marshall
         ((LocalTransaction) Transaction(), ids, maxCount);
     var message = QueryResult.GetWriterForLength(Transaction(), Const4.IntLength + payload
         .Length());
     var writer = message.PayLoad();
     writer.WriteInt(queryResultId);
     writer.WriteBytes(payload._buffer);
     return message;
 }
コード例 #8
0
ファイル: EagerObjectWriter.cs プロジェクト: pondyond/db4o
        public virtual ByteArrayBuffer Write(IIntIterator4 idIterator, int maxCount)
        {
            var rootIds        = ReadSlots(idIterator, maxCount);
            var slots          = SlotsFor(rootIds);
            var marshalledSize = MarshalledSizeFor(slots) + Const4.IntLength + rootIds.Count
                                 * Const4.IntLength;
            var buffer = new ByteArrayBuffer(marshalledSize);

            WriteIdSlotPairsTo(slots, buffer);
            WriteIds(buffer, rootIds);
            return(buffer);
        }
コード例 #9
0
        private void AssertIDs(IQueryResult queryResult, int[] expectedIDs, bool ignoreUnexpected
                               )
        {
            ExpectingVisitor expectingVisitor = new ExpectingVisitor(IntArrays4.ToObjectArray
                                                                         (expectedIDs), false, ignoreUnexpected);
            IIntIterator4 i = queryResult.IterateIDs();

            while (i.MoveNext())
            {
                expectingVisitor.Visit(i.CurrentInt());
            }
            expectingVisitor.AssertExpectations();
        }
コード例 #10
0
ファイル: MsgQuery.cs プロジェクト: git-thinh/limada
        private MsgD BuildQueryResultMessage(int queryResultId, IIntIterator4 ids, int maxCount
                                             , ObjectExchangeConfiguration config)
        {
            ByteArrayBuffer payload = ObjectExchangeStrategyFactory.ForConfig(config).Marshall
                                          ((LocalTransaction)Transaction(), ids, maxCount);
            MsgD message = QueryResult.GetWriterForLength(Transaction(), Const4.IntLength + payload
                                                          .Length());
            StatefulBuffer writer = message.PayLoad();

            writer.WriteInt(queryResultId);
            writer.WriteBytes(payload._buffer);
            return(message);
        }
コード例 #11
0
 public virtual long[] GetIDs()
 {
     lock (Lock())
     {
         long[]        ids      = new long[Size()];
         int           i        = 0;
         IIntIterator4 iterator = _delegate.IterateIDs();
         while (iterator.MoveNext())
         {
             ids[i++] = iterator.CurrentInt();
         }
         return(ids);
     }
 }
コード例 #12
0
        public virtual int PrefetchObjects(ClientObjectContainer container, Transaction trans
                                           , IIntIterator4 ids, object[] prefetched, int prefetchCount)
        {
            int   count    = 0;
            IList idsToGet = new ArrayList();

            while (count < prefetchCount)
            {
                if (!ids.MoveNext())
                {
                    break;
                }
                int id = ids.CurrentInt();
                if (id > 0)
                {
                    object obj = trans.ObjectForIdFromCache(id);
                    if (obj != null)
                    {
                        prefetched[count] = obj;
                    }
                    else
                    {
                        idsToGet.Add(Pair.Of(id, count));
                    }
                    count++;
                }
            }
            if (idsToGet.Count > 0)
            {
                ByteArrayBuffer[] buffers = container.ReadObjectSlots(trans, IdArrayFor(idsToGet)
                                                                      );
                for (int i = 0; i < buffers.Length; i++)
                {
                    Pair   pair     = ((Pair)idsToGet[i]);
                    int    id       = (((int)pair.first));
                    int    position = (((int)pair.second));
                    object obj      = trans.ObjectForIdFromCache(id);
                    if (obj != null)
                    {
                        prefetched[position] = obj;
                    }
                    else
                    {
                        prefetched[position] = new ObjectReference(id).ReadPrefetch(trans, buffers[i], Const4
                                                                                    .AddToIdTree);
                    }
                }
            }
            return(count);
        }
コード例 #13
0
ファイル: MsgQuery.cs プロジェクト: git-thinh/limada
        private MsgD WriteLazyQueryResult(AbstractQueryResult queryResult, ObjectExchangeConfiguration
                                          config)
        {
            int           queryResultId = GenerateID();
            int           maxCount      = Config().PrefetchObjectCount();
            IIntIterator4 idIterator    = queryResult.IterateIDs();
            MsgD          message       = BuildQueryResultMessage(queryResultId, idIterator, maxCount, config
                                                                  );
            IServerMessageDispatcher serverThread = ServerMessageDispatcher();

            serverThread.MapQueryResultToID(new LazyClientObjectSetStub(queryResult, idIterator
                                                                        ), queryResultId);
            return(message);
        }
コード例 #14
0
		public virtual int PrefetchObjects(ClientObjectContainer container, Transaction trans
			, IIntIterator4 ids, object[] prefetched, int prefetchCount)
		{
			int count = 0;
			IList idsToGet = new ArrayList();
			while (count < prefetchCount)
			{
				if (!ids.MoveNext())
				{
					break;
				}
				int id = ids.CurrentInt();
				if (id > 0)
				{
					object obj = trans.ObjectForIdFromCache(id);
					if (obj != null)
					{
						prefetched[count] = obj;
					}
					else
					{
						idsToGet.Add(Pair.Of(id, count));
					}
					count++;
				}
			}
			if (idsToGet.Count > 0)
			{
				ByteArrayBuffer[] buffers = container.ReadObjectSlots(trans, IdArrayFor(idsToGet)
					);
				for (int i = 0; i < buffers.Length; i++)
				{
					Pair pair = ((Pair)idsToGet[i]);
					int id = (((int)pair.first));
					int position = (((int)pair.second));
					object obj = trans.ObjectForIdFromCache(id);
					if (obj != null)
					{
						prefetched[position] = obj;
					}
					else
					{
						prefetched[position] = new ObjectReference(id).ReadPrefetch(trans, buffers[i], Const4
							.AddToIdTree);
					}
				}
			}
			return count;
		}
コード例 #15
0
ファイル: TreeInt.cs プロジェクト: masroore/db4o
 public static Tree AddAll(Tree tree, IIntIterator4 iter)
 {
     if (!iter.MoveNext())
     {
         return tree;
     }
     var firstAdded = new TreeInt
         (iter.CurrentInt());
     tree = Add(tree, firstAdded);
     while (iter.MoveNext())
     {
         tree = tree.Add(new TreeInt(iter.CurrentInt()));
     }
     return tree;
 }
コード例 #16
0
 public static Tree AddAll(Tree tree, IIntIterator4 iter)
 {
     if (!iter.MoveNext())
     {
         return(tree);
     }
     Db4objects.Db4o.Internal.TreeInt firstAdded = new Db4objects.Db4o.Internal.TreeInt
                                                       (iter.CurrentInt());
     tree = Tree.Add(tree, firstAdded);
     while (iter.MoveNext())
     {
         tree = tree.Add(new Db4objects.Db4o.Internal.TreeInt(iter.CurrentInt()));
     }
     return(tree);
 }
コード例 #17
0
ファイル: EagerObjectWriter.cs プロジェクト: pondyond/db4o
        private IList ReadSlots(IIntIterator4 idIterator, int maxCount)
        {
            var slots = new ArrayList();

            while (idIterator.MoveNext())
            {
                var id = idIterator.CurrentInt();
                slots.Add(id);
                if (slots.Count >= maxCount)
                {
                    break;
                }
            }
            return(slots);
        }
コード例 #18
0
ファイル: TreeInt.cs プロジェクト: erdincay/db4o
		public static Tree AddAll(Tree tree, IIntIterator4 iter)
		{
			if (!iter.MoveNext())
			{
				return tree;
			}
			Db4objects.Db4o.Internal.TreeInt firstAdded = new Db4objects.Db4o.Internal.TreeInt
				(iter.CurrentInt());
			tree = Tree.Add(tree, firstAdded);
			while (iter.MoveNext())
			{
				tree = tree.Add(new Db4objects.Db4o.Internal.TreeInt(iter.CurrentInt()));
			}
			return tree;
		}
コード例 #19
0
ファイル: TreeInt.cs プロジェクト: pondyond/db4o
        public static Tree AddAll(Tree tree, IIntIterator4 iter)
        {
            if (!iter.MoveNext())
            {
                return(tree);
            }
            var firstAdded = new TreeInt
                                 (iter.CurrentInt());

            tree = Add(tree, firstAdded);
            while (iter.MoveNext())
            {
                tree = tree.Add(new TreeInt(iter.CurrentInt()));
            }
            return(tree);
        }
コード例 #20
0
ファイル: MObjectSetFetch.cs プロジェクト: git-thinh/limada
        public virtual Msg ReplyFromServer()
        {
            int  queryResultID = ReadInt();
            int  fetchSize     = ReadInt();
            int  fetchDepth    = ReadInt();
            MsgD message       = null;

            lock (ContainerLock())
            {
                IIntIterator4   idIterator = Stub(queryResultID).IdIterator();
                ByteArrayBuffer payload    = ObjectExchangeStrategyFactory.ForConfig(new ObjectExchangeConfiguration
                                                                                         (fetchDepth, fetchSize)).Marshall((LocalTransaction)Transaction(), idIterator, fetchSize
                                                                                                                           );
                message = IdList.GetWriterForBuffer(Transaction(), payload);
            }
            return(message);
        }
コード例 #21
0
		public virtual ByteArrayBuffer Marshall(LocalTransaction transaction, IIntIterator4
			 ids, int count)
		{
			ByteArrayBuffer buffer = new ByteArrayBuffer(Const4.IntLength + count * Const4.IntLength
				);
			int sizeOffset = buffer.Offset();
			buffer.WriteInt(0);
			int written = 0;
			while (count > 0 && ids.MoveNext())
			{
				buffer.WriteInt(ids.CurrentInt());
				++written;
				--count;
			}
			buffer.Seek(sizeOffset);
			buffer.WriteInt(written);
			return buffer;
		}
コード例 #22
0
        public virtual ByteArrayBuffer Marshall(LocalTransaction transaction, IIntIterator4
                                                ids, int count)
        {
            ByteArrayBuffer buffer = new ByteArrayBuffer(Const4.IntLength + count * Const4.IntLength
                                                         );
            int sizeOffset = buffer.Offset();

            buffer.WriteInt(0);
            int written = 0;

            while (count > 0 && ids.MoveNext())
            {
                buffer.WriteInt(ids.CurrentInt());
                ++written;
                --count;
            }
            buffer.Seek(sizeOffset);
            buffer.WriteInt(written);
            return(buffer);
        }
コード例 #23
0
        public override IObjectSet Select()
        {
            if (_limit == -1)
            {
                return(_query.Execute());
            }
            IQueryResult      queryResult   = _query.GetQueryResult();
            IdListQueryResult limitedResult = new IdListQueryResult(_query.Transaction(), _limit
                                                                    );
            int           counter = 0;
            IIntIterator4 i       = queryResult.IterateIDs();

            while (i.MoveNext())
            {
                if (counter++ >= _limit)
                {
                    break;
                }
                limitedResult.Add(i.CurrentInt());
            }
            return(new ObjectSetFacade(limitedResult));
        }
コード例 #24
0
		public IdTreeQueryResult(Transaction transaction, IIntIterator4 ids) : base(transaction
			)
		{
			_ids = TreeInt.AddAll(null, ids);
		}
コード例 #25
0
 public LazyClientObjectSetStub(AbstractQueryResult queryResult, IIntIterator4 idIterator
                                )
 {
     _queryResult = queryResult;
     _idIterator  = idIterator;
 }
コード例 #26
0
 public virtual void Reset()
 {
     _idIterator = _queryResult.IterateIDs();
 }
コード例 #27
0
		public virtual ByteArrayBuffer Marshall(LocalTransaction transaction, IIntIterator4
			 ids, int maxCount)
		{
			return new EagerObjectWriter(_config, transaction).Write(ids, maxCount);
		}
コード例 #28
0
 public virtual ByteArrayBuffer Marshall(LocalTransaction transaction, IIntIterator4
                                         ids, int maxCount)
 {
     return(new EagerObjectWriter(_config, transaction).Write(ids, maxCount));
 }
コード例 #29
0
 internal ClientQueryResultIterator(AbstractQueryResult client)
 {
     _client = client;
     _ids    = client.IterateIDs();
 }
コード例 #30
0
 internal ClientQueryResultIterator(AbstractQueryResult client)
 {
     _client = client;
     _ids = client.IterateIDs();
 }
コード例 #31
0
 public IdTreeQueryResult(Transaction transaction, IIntIterator4 ids) : base(transaction
                                                                             )
 {
     _ids = TreeInt.AddAll(null, ids);
 }
コード例 #32
0
		private IList ReadSlots(IIntIterator4 idIterator, int maxCount)
		{
			ArrayList slots = new ArrayList();
			while (idIterator.MoveNext())
			{
				int id = idIterator.CurrentInt();
				slots.Add(id);
				if (slots.Count >= maxCount)
				{
					break;
				}
			}
			return slots;
		}
コード例 #33
0
		public virtual void Reset()
		{
			_idIterator = _queryResult.IterateIDs();
		}
コード例 #34
0
		public LazyClientObjectSetStub(AbstractQueryResult queryResult, IIntIterator4 idIterator
			)
		{
			_queryResult = queryResult;
			_idIterator = idIterator;
		}
コード例 #35
0
 private ByteArrayBuffer MarshallObjects(int prefetchDepth, int prefetchCount, IIntIterator4
                                         ids)
 {
     lock (ContainerLock())
     {
         IObjectExchangeStrategy strategy = ObjectExchangeStrategyFactory.ForConfig(new ObjectExchangeConfiguration
                                                                                        (prefetchDepth, prefetchCount));
         return(strategy.Marshall((LocalTransaction)Transaction(), ids, prefetchCount));
     }
 }