@@ -117,13 +117,192 @@ public void SelectLengthShouldUseLengthFunction()
117117 }
118118
119119 [ Test ]
120- public void BasicWhereShouldWork ( )
120+ public void BasicWhereEqualShouldWork ( )
121121 {
122122 var tableRef = new ObjectReference ( "FooTable" ) ;
123123 var whereClause = new WhereClause ( new ObjectReference ( "Name" , tableRef ) == "Alice" ) ;
124124 var runner = new DictionaryQueryRunner ( SelectSource ( ) , whereClause ) ;
125125 var actual = runner . Run ( ) . ToList ( ) ;
126126 Assert . AreEqual ( 1 , actual . Count ) ;
127+ Assert . AreEqual ( "Alice" , actual [ 0 ] [ "Name" ] ) ;
128+ }
129+
130+ [ Test ]
131+ public void WhereNullShouldWorkWhenValueExistsAndIsNull ( )
132+ {
133+ var tableRef = new ObjectReference ( "FooTable" ) ;
134+ var whereClause = new WhereClause ( new ObjectReference ( "Value" , tableRef ) == null ) ;
135+ var data = new List < IDictionary < string , object > >
136+ {
137+ new Dictionary < string , object >
138+ {
139+ { "Name" , "Steve" } , { "Value" , null }
140+ } ,
141+ new Dictionary < string , object >
142+ {
143+ { "Name" , "Dave" } , { "Value" , 42 }
144+ } ,
145+ } ;
146+ var runner = new DictionaryQueryRunner ( data , whereClause ) ;
147+ var actual = runner . Run ( ) . ToList ( ) ;
148+ Assert . AreEqual ( 1 , actual . Count ) ;
149+ Assert . AreEqual ( "Steve" , actual [ 0 ] [ "Name" ] ) ;
150+ }
151+
152+ [ Test ]
153+ public void WhereNullShouldWorkWhenValueDoesNotExist ( )
154+ {
155+ var tableRef = new ObjectReference ( "FooTable" ) ;
156+ var whereClause = new WhereClause ( new ObjectReference ( "Value" , tableRef ) == null ) ;
157+ var data = new List < IDictionary < string , object > >
158+ {
159+ new Dictionary < string , object >
160+ {
161+ { "Name" , "Steve" }
162+ } ,
163+ new Dictionary < string , object >
164+ {
165+ { "Name" , "Dave" } , { "Value" , 42 }
166+ } ,
167+ } ;
168+ var runner = new DictionaryQueryRunner ( data , whereClause ) ;
169+ var actual = runner . Run ( ) . ToList ( ) ;
170+ Assert . AreEqual ( 1 , actual . Count ) ;
171+ Assert . AreEqual ( "Steve" , actual [ 0 ] [ "Name" ] ) ;
172+ }
173+
174+ [ Test ]
175+ public void WhereEqualWithByteArrayShouldWork ( )
176+ {
177+ var tableRef = new ObjectReference ( "FooTable" ) ;
178+ var whereClause = new WhereClause ( new ObjectReference ( "Array" , tableRef ) == new byte [ ] { 1 , 2 , 3 , 4 } ) ;
179+ var data = new List < IDictionary < string , object > >
180+ {
181+ new Dictionary < string , object >
182+ {
183+ { "Name" , "Steve" } , { "Array" , new byte [ ] { 1 , 2 , 3 , 4 } }
184+ } ,
185+ new Dictionary < string , object >
186+ {
187+ { "Name" , "Dave" } , { "Array" , new byte [ ] { 2 , 3 , 4 } }
188+ } ,
189+ } ;
190+ var runner = new DictionaryQueryRunner ( data , whereClause ) ;
191+ var actual = runner . Run ( ) . ToList ( ) ;
192+ Assert . AreEqual ( 1 , actual . Count ) ;
193+ Assert . AreEqual ( "Steve" , actual [ 0 ] [ "Name" ] ) ;
194+ }
195+
196+ [ Test ]
197+ public void BasicWhereNotEqualShouldWork ( )
198+ {
199+ var tableRef = new ObjectReference ( "FooTable" ) ;
200+ var whereClause = new WhereClause ( new ObjectReference ( "Name" , tableRef ) != "Alice" ) ;
201+ var runner = new DictionaryQueryRunner ( SelectSource ( ) , whereClause ) ;
202+ var actual = runner . Run ( ) . ToList ( ) ;
203+ Assert . AreEqual ( 3 , actual . Count ) ;
204+ Assert . False ( actual . Any ( a => ( string ) a [ "Name" ] == "Alice" ) ) ;
205+ }
206+
207+ [ Test ]
208+ public void WhereNotNullShouldWork ( )
209+ {
210+ var tableRef = new ObjectReference ( "FooTable" ) ;
211+ var whereClause = new WhereClause ( new ObjectReference ( "Value" , tableRef ) != null ) ;
212+ var data = new List < IDictionary < string , object > >
213+ {
214+ new Dictionary < string , object >
215+ {
216+ { "Name" , "Steve" } , { "Value" , null }
217+ } ,
218+ new Dictionary < string , object >
219+ {
220+ { "Name" , "Dave" } , { "Value" , 42 }
221+ } ,
222+ } ;
223+ var runner = new DictionaryQueryRunner ( data , whereClause ) ;
224+ var actual = runner . Run ( ) . ToList ( ) ;
225+ Assert . AreEqual ( 1 , actual . Count ) ;
226+ Assert . AreEqual ( "Dave" , actual [ 0 ] [ "Name" ] ) ;
227+ }
228+
229+ [ Test ]
230+ public void WhereNotEqualWithByteArrayShouldWork ( )
231+ {
232+ var tableRef = new ObjectReference ( "FooTable" ) ;
233+ var whereClause = new WhereClause ( new ObjectReference ( "Array" , tableRef ) != new byte [ ] { 1 , 2 , 3 , 4 } ) ;
234+ var data = new List < IDictionary < string , object > >
235+ {
236+ new Dictionary < string , object >
237+ {
238+ { "Name" , "Steve" } , { "Array" , new byte [ ] { 1 , 2 , 3 , 4 } }
239+ } ,
240+ new Dictionary < string , object >
241+ {
242+ { "Name" , "Dave" } , { "Array" , new byte [ ] { 2 , 3 , 4 } }
243+ } ,
244+ } ;
245+ var runner = new DictionaryQueryRunner ( data , whereClause ) ;
246+ var actual = runner . Run ( ) . ToList ( ) ;
247+ Assert . AreEqual ( 1 , actual . Count ) ;
248+ Assert . AreEqual ( "Dave" , actual [ 0 ] [ "Name" ] ) ;
249+ }
250+
251+ [ Test ]
252+ public void BasicWhereGreaterThanShouldWork ( )
253+ {
254+ var tableRef = new ObjectReference ( "FooTable" ) ;
255+ var whereClause = new WhereClause ( new ObjectReference ( "Weight" , tableRef ) > 200M ) ;
256+ var runner = new DictionaryQueryRunner ( SelectSource ( ) , whereClause ) ;
257+ var actual = runner . Run ( ) . ToList ( ) ;
258+ Assert . AreEqual ( 1 , actual . Count ) ;
259+ Assert . AreEqual ( "David" , actual [ 0 ] [ "Name" ] ) ;
260+ }
261+
262+ [ Test ]
263+ public void BasicWhereLessThanShouldWork ( )
264+ {
265+ var tableRef = new ObjectReference ( "FooTable" ) ;
266+ var whereClause = new WhereClause ( new ObjectReference ( "Weight" , tableRef ) < 150M ) ;
267+ var runner = new DictionaryQueryRunner ( SelectSource ( ) , whereClause ) ;
268+ var actual = runner . Run ( ) . ToList ( ) ;
269+ Assert . AreEqual ( 1 , actual . Count ) ;
270+ Assert . AreEqual ( "Alice" , actual [ 0 ] [ "Name" ] ) ;
271+ }
272+
273+ [ Test ]
274+ public void BasicWhereGreaterThanOrEqualShouldWork ( )
275+ {
276+ var tableRef = new ObjectReference ( "FooTable" ) ;
277+ var whereClause = new WhereClause ( new ObjectReference ( "Weight" , tableRef ) >= 250M ) ;
278+ var runner = new DictionaryQueryRunner ( SelectSource ( ) , whereClause ) ;
279+ var actual = runner . Run ( ) . ToList ( ) ;
280+ Assert . AreEqual ( 1 , actual . Count ) ;
281+ Assert . AreEqual ( "David" , actual [ 0 ] [ "Name" ] ) ;
282+ }
283+
284+ [ Test ]
285+ public void BasicWhereLessThanOrEqualShouldWork ( )
286+ {
287+ var tableRef = new ObjectReference ( "FooTable" ) ;
288+ var whereClause = new WhereClause ( new ObjectReference ( "Weight" , tableRef ) <= 100M ) ;
289+ var runner = new DictionaryQueryRunner ( SelectSource ( ) , whereClause ) ;
290+ var actual = runner . Run ( ) . ToList ( ) ;
291+ Assert . AreEqual ( 1 , actual . Count ) ;
292+ Assert . AreEqual ( "Alice" , actual [ 0 ] [ "Name" ] ) ;
293+ }
294+
295+ [ Test ]
296+ public void BasicLikeShouldWork ( )
297+ {
298+ var tableRef = new ObjectReference ( "FooTable" ) ;
299+ dynamic objRef = new ObjectReference ( "Name" , tableRef ) ;
300+ var expression = new SimpleExpression ( objRef , new SimpleFunction ( "like" , new [ ] { "A%" } ) , SimpleExpressionType . Function ) ;
301+ var whereClause = new WhereClause ( expression ) ;
302+ var runner = new DictionaryQueryRunner ( SelectSource ( ) , whereClause ) ;
303+ var actual = runner . Run ( ) . ToList ( ) ;
304+ Assert . AreEqual ( 1 , actual . Count ) ;
305+ Assert . AreEqual ( "Alice" , actual [ 0 ] [ "Name" ] ) ;
127306 }
128307
129308 #region Distinct sources
0 commit comments