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