1 /* Copyright (C) 2004 - 2009  Versant Inc.  http://www.db4o.com */
2 
3 using Db4objects.Db4o.Internal;
4 using Db4objects.Db4o.Internal.Query.Processor;
5 using Db4objects.Db4o.Query;
6 
7 namespace Db4objects.Db4o.Internal.Query.Processor
8 {
9 	/// <summary>Array of constraints for queries.</summary>
10 	/// <remarks>
11 	/// Array of constraints for queries.
12 	/// Necessary to be returned to Query#constraints()
13 	/// </remarks>
14 	/// <exclude></exclude>
15 	public class QConstraints : QCon, IConstraints
16 	{
17 		private IConstraint[] i_constraints;
18 
QConstraints(Transaction a_trans, IConstraint[] constraints)19 		internal QConstraints(Transaction a_trans, IConstraint[] constraints) : base(a_trans
20 			)
21 		{
22 			i_constraints = constraints;
23 		}
24 
Join(IConstraint a_with, bool a_and)25 		internal override IConstraint Join(IConstraint a_with, bool a_and)
26 		{
27 			lock (StreamLock())
28 			{
29 				if (!(a_with is QCon))
30 				{
31 					return null;
32 				}
33 				// resolving multiple constraints happens in QCon for
34 				// a_with, so we simply turn things around
35 				return ((QCon)a_with).Join1(this, a_and);
36 			}
37 		}
38 
ToArray()39 		public virtual IConstraint[] ToArray()
40 		{
41 			lock (StreamLock())
42 			{
43 				return i_constraints;
44 			}
45 		}
46 
Contains()47 		public override IConstraint Contains()
48 		{
49 			lock (StreamLock())
50 			{
51 				for (int i = 0; i < i_constraints.Length; i++)
52 				{
53 					i_constraints[i].Contains();
54 				}
55 				return this;
56 			}
57 		}
58 
Equal()59 		public override IConstraint Equal()
60 		{
61 			lock (StreamLock())
62 			{
63 				for (int i = 0; i < i_constraints.Length; i++)
64 				{
65 					i_constraints[i].Equal();
66 				}
67 				return this;
68 			}
69 		}
70 
Greater()71 		public override IConstraint Greater()
72 		{
73 			lock (StreamLock())
74 			{
75 				for (int i = 0; i < i_constraints.Length; i++)
76 				{
77 					i_constraints[i].Greater();
78 				}
79 				return this;
80 			}
81 		}
82 
Identity()83 		public override IConstraint Identity()
84 		{
85 			lock (StreamLock())
86 			{
87 				for (int i = 0; i < i_constraints.Length; i++)
88 				{
89 					i_constraints[i].Identity();
90 				}
91 				return this;
92 			}
93 		}
94 
Not()95 		public override IConstraint Not()
96 		{
97 			lock (StreamLock())
98 			{
99 				for (int i = 0; i < i_constraints.Length; i++)
100 				{
101 					i_constraints[i].Not();
102 				}
103 				return this;
104 			}
105 		}
106 
Like()107 		public override IConstraint Like()
108 		{
109 			lock (StreamLock())
110 			{
111 				for (int i = 0; i < i_constraints.Length; i++)
112 				{
113 					i_constraints[i].Like();
114 				}
115 				return this;
116 			}
117 		}
118 
StartsWith(bool caseSensitive)119 		public override IConstraint StartsWith(bool caseSensitive)
120 		{
121 			lock (StreamLock())
122 			{
123 				for (int i = 0; i < i_constraints.Length; i++)
124 				{
125 					i_constraints[i].StartsWith(caseSensitive);
126 				}
127 				return this;
128 			}
129 		}
130 
EndsWith(bool caseSensitive)131 		public override IConstraint EndsWith(bool caseSensitive)
132 		{
133 			lock (StreamLock())
134 			{
135 				for (int i = 0; i < i_constraints.Length; i++)
136 				{
137 					i_constraints[i].EndsWith(caseSensitive);
138 				}
139 				return this;
140 			}
141 		}
142 
Smaller()143 		public override IConstraint Smaller()
144 		{
145 			lock (StreamLock())
146 			{
147 				for (int i = 0; i < i_constraints.Length; i++)
148 				{
149 					i_constraints[i].Smaller();
150 				}
151 				return this;
152 			}
153 		}
154 
GetObject()155 		public override object GetObject()
156 		{
157 			lock (StreamLock())
158 			{
159 				object[] objects = new object[i_constraints.Length];
160 				for (int i = 0; i < i_constraints.Length; i++)
161 				{
162 					objects[i] = i_constraints[i].GetObject();
163 				}
164 				return objects;
165 			}
166 		}
167 	}
168 }
169