예제 #1
0
파일: QCon.cs 프로젝트: Galigator/db4o
		internal virtual IConstraint Join1(Db4objects.Db4o.Internal.Query.Processor.QCon 
			a_with, bool a_and)
		{
			if (a_with is QConstraints)
			{
				int j = 0;
				Collection4 joinHooks = new Collection4();
				IConstraint[] constraints = ((QConstraints)a_with).ToArray();
				for (j = 0; j < constraints.Length; j++)
				{
					joinHooks.Ensure(((Db4objects.Db4o.Internal.Query.Processor.QCon)constraints[j]).
						JoinHook());
				}
				IConstraint[] joins = new IConstraint[joinHooks.Size()];
				j = 0;
				IEnumerator i = joinHooks.GetEnumerator();
				while (i.MoveNext())
				{
					joins[j++] = Join((IConstraint)i.Current, a_and);
				}
				return new QConstraints(i_trans, joins);
			}
			Db4objects.Db4o.Internal.Query.Processor.QCon myHook = JoinHook();
			Db4objects.Db4o.Internal.Query.Processor.QCon otherHook = a_with.JoinHook();
			if (myHook == otherHook)
			{
				// You might like to check out, what happens, if you
				// remove this line. It seems to open a bug in an
				// StOr testcase.
				return myHook;
			}
			QConJoin cj = new QConJoin(i_trans, myHook, otherHook, a_and);
			myHook.AddJoin(cj);
			otherHook.AddJoin(cj);
			return cj;
		}
예제 #2
0
파일: QCon.cs 프로젝트: Galigator/db4o
		internal virtual Db4objects.Db4o.Internal.Query.Processor.QCon ProduceTopLevelJoin
			()
		{
			if (!HasJoins())
			{
				return this;
			}
			IEnumerator i = IterateJoins();
			if (i_joins.Size() == 1)
			{
				i.MoveNext();
				return ((Db4objects.Db4o.Internal.Query.Processor.QCon)i.Current).ProduceTopLevelJoin
					();
			}
			Collection4 col = new Collection4();
			while (i.MoveNext())
			{
				col.Ensure(((Db4objects.Db4o.Internal.Query.Processor.QCon)i.Current).ProduceTopLevelJoin
					());
			}
			i = col.GetEnumerator();
			i.MoveNext();
			Db4objects.Db4o.Internal.Query.Processor.QCon qcon = (Db4objects.Db4o.Internal.Query.Processor.QCon
				)i.Current;
			if (col.Size() == 1)
			{
				return qcon;
			}
			while (i.MoveNext())
			{
				qcon = (Db4objects.Db4o.Internal.Query.Processor.QCon)qcon.And((IConstraint)i.Current
					);
			}
			return qcon;
		}
예제 #3
0
 private void AssertContainsNull(Collection4 c)
 {
     Assert.IsTrue(c.Contains(null));
     Assert.IsNull(c.Get(null));
     var size = c.Size();
     c.Ensure(null);
     Assert.AreEqual(size, c.Size());
 }
예제 #4
0
		private void AssertNotContainsNull(Collection4 c)
		{
			Assert.IsFalse(c.Contains(null));
			Assert.IsNull(c.Get(null));
			int size = c.Size();
			c.Ensure(null);
			Assert.AreEqual(size + 1, c.Size());
			c.Remove(null);
			Assert.AreEqual(size, c.Size());
		}
예제 #5
0
파일: QCon.cs 프로젝트: masroore/db4o
 internal virtual QCon ProduceTopLevelJoin
     ()
 {
     if (!HasJoins())
     {
         return this;
     }
     var i = IterateJoins();
     if (i_joins.Size() == 1)
     {
         i.MoveNext();
         return ((QCon) i.Current).ProduceTopLevelJoin
             ();
     }
     var col = new Collection4();
     while (i.MoveNext())
     {
         col.Ensure(((QCon) i.Current).ProduceTopLevelJoin
             ());
     }
     i = col.GetEnumerator();
     i.MoveNext();
     var qcon = (QCon
         ) i.Current;
     if (col.Size() == 1)
     {
         return qcon;
     }
     while (i.MoveNext())
     {
         qcon = (QCon) qcon.And((IConstraint) i.Current
             );
     }
     return qcon;
 }