@@ -243,14 +243,24 @@ def test_empty_list(self):
243243 self .assertEqual (obj .field , [])
244244 self .assertEqual (obj .empty_array , [])
245245
246+  def  test_exact (self ):
247+  with  self .assertNumQueries (1 ) as  ctx :
248+  self .assertSequenceEqual (
249+  NullableIntegerArrayModel .objects .filter (field__exact = [1 ]), self .objs [:1 ]
250+  )
251+  self .assertAggregateQuery (
252+  ctx .captured_queries [0 ]["sql" ],
253+  "model_fields__nullableintegerarraymodel" ,
254+  [{"$match" : {"field" : [1 ]}}],
255+  )
256+ 
246257 def  test_exact_expr (self ):
247258 with  self .assertNumQueries (1 ) as  ctx :
248259 self .assertSequenceEqual (
249260 NullableIntegerArrayModel .objects .filter (field__exact = [Value (3 ) /  3 ]), self .objs [:1 ]
250261 )
251-  query  =  ctx .captured_queries [0 ]["sql" ]
252262 self .assertAggregateQuery (
253-  query ,
263+  ctx . captured_queries [ 0 ][ "sql" ] ,
254264 "model_fields__nullableintegerarraymodel" ,
255265 [
256266 {
@@ -263,16 +273,6 @@ def test_exact_expr(self):
263273 ],
264274 )
265275
266-  def  test_exact_path (self ):
267-  with  self .assertNumQueries (1 ) as  ctx :
268-  self .assertSequenceEqual (
269-  NullableIntegerArrayModel .objects .filter (field__exact = [1 ]), self .objs [:1 ]
270-  )
271-  query  =  ctx .captured_queries [0 ]["sql" ]
272-  self .assertAggregateQuery (
273-  query , "model_fields__nullableintegerarraymodel" , [{"$match" : {"field" : [1 ]}}]
274-  )
275- 
276276 def  test_exact_null_only_array (self ):
277277 obj  =  NullableIntegerArrayModel .objects .create (field = [None ], field_nested = [None , None ])
278278 self .assertSequenceEqual (
@@ -295,9 +295,8 @@ def test_exact_null_only_nested_array(self):
295295 ),
296296 [obj1 ],
297297 )
298-  query  =  ctx .captured_queries [0 ]["sql" ]
299298 self .assertAggregateQuery (
300-  query ,
299+  ctx . captured_queries [ 0 ][ "sql" ] ,
301300 "model_fields__nullableintegerarraymodel" ,
302301 [{"$match" : {"field_nested" : [[None , None ]]}}],
303302 )
@@ -308,9 +307,8 @@ def test_exact_null_only_nested_array(self):
308307 ),
309308 [obj2 ],
310309 )
311-  query  =  ctx .captured_queries [0 ]["sql" ]
312310 self .assertAggregateQuery (
313-  query ,
311+  ctx . captured_queries [ 0 ][ "sql" ] ,
314312 "model_fields__nullableintegerarraymodel" ,
315313 [{"$match" : {"field_nested" : [[None , None ], [None , None ]]}}],
316314 )
@@ -321,9 +319,10 @@ def test_exact_with_expression(self):
321319 NullableIntegerArrayModel .objects .filter (field__exact = [Value (1 )]),
322320 self .objs [:1 ],
323321 )
324-  query  =  ctx .captured_queries [0 ]["sql" ]
325322 self .assertAggregateQuery (
326-  query , "model_fields__nullableintegerarraymodel" , [{"$match" : {"field" : [1 ]}}]
323+  ctx .captured_queries [0 ]["sql" ],
324+  "model_fields__nullableintegerarraymodel" ,
325+  [{"$match" : {"field" : [1 ]}}],
327326 )
328327
329328 def  test_exact_charfield (self ):
@@ -341,22 +340,31 @@ def test_isnull(self):
341340 self .assertSequenceEqual (
342341 NullableIntegerArrayModel .objects .filter (field__isnull = True ), self .objs [- 1 :]
343342 )
344-  query  =  ctx .captured_queries [0 ]["sql" ]
345343 self .assertAggregateQuery (
346-  query ,
344+  ctx . captured_queries [ 0 ][ "sql" ] ,
347345 "model_fields__nullableintegerarraymodel" ,
348346 [{"$match" : {"$or" : [{"field" : {"$exists" : False }}, {"field" : None }]}}],
349347 )
350348
349+  def  test_gt (self ):
350+  with  self .assertNumQueries (1 ) as  ctx :
351+  self .assertSequenceEqual (
352+  NullableIntegerArrayModel .objects .filter (field__gt = Array (0 )), self .objs [:4 ]
353+  )
354+  self .assertAggregateQuery (
355+  ctx .captured_queries [0 ]["sql" ],
356+  "model_fields__nullableintegerarraymodel" ,
357+  [{"$match" : {"field" : {"$gt" : [0 ]}}}],
358+  )
359+ 
351360 def  test_gt_expr (self ):
352361 with  self .assertNumQueries (1 ) as  ctx :
353362 self .assertSequenceEqual (
354363 NullableIntegerArrayModel .objects .filter (field__gt = Array (Value (0 ) *  3 )),
355364 self .objs [:4 ],
356365 )
357-  query  =  ctx .captured_queries [0 ]["sql" ]
358366 self .assertAggregateQuery (
359-  query ,
367+  ctx . captured_queries [ 0 ][ "sql" ] ,
360368 "model_fields__nullableintegerarraymodel" ,
361369 [
362370 {
@@ -369,14 +377,24 @@ def test_gt_expr(self):
369377 ],
370378 )
371379
372-  def  test_gt_path (self ):
380+  def  test_lt (self ):
373381 with  self .assertNumQueries (1 ) as  ctx :
374382 self .assertSequenceEqual (
375-  NullableIntegerArrayModel .objects .filter (field__gt = Array ( 0 )) , self .objs [:4 ]
383+  NullableIntegerArrayModel .objects .filter (field__lt = [ 2 ]) , self .objs [:1 ]
376384 )
377-  query  =  ctx .captured_queries [0 ]["sql" ]
378385 self .assertAggregateQuery (
379-  query , "model_fields__nullableintegerarraymodel" , [{"$match" : {"field" : {"$gt" : [0 ]}}}]
386+  ctx .captured_queries [0 ]["sql" ],
387+  "model_fields__nullableintegerarraymodel" ,
388+  [
389+  {
390+  "$match" : {
391+  "$and" : [
392+  {"field" : {"$lt" : [2 ]}},
393+  {"$and" : [{"field" : {"$exists" : True }}, {"field" : {"$ne" : None }}]},
394+  ]
395+  }
396+  }
397+  ],
380398 )
381399
382400 def  test_lt_expr (self ):
@@ -385,9 +403,8 @@ def test_lt_expr(self):
385403 NullableIntegerArrayModel .objects .filter (field__lt = Array (Value (1 ) +  1 )),
386404 self .objs [:1 ],
387405 )
388-  query  =  ctx .captured_queries [0 ]["sql" ]
389406 self .assertAggregateQuery (
390-  query ,
407+  ctx . captured_queries [ 0 ][ "sql" ] ,
391408 "model_fields__nullableintegerarraymodel" ,
392409 [
393410 {
@@ -410,25 +427,16 @@ def test_lt_expr(self):
410427 ],
411428 )
412429
413-  def  test_lt_path (self ):
430+  def  test_in (self ):
414431 with  self .assertNumQueries (1 ) as  ctx :
415432 self .assertSequenceEqual (
416-  NullableIntegerArrayModel .objects .filter (field__lt = [2 ]), self .objs [:1 ]
433+  NullableIntegerArrayModel .objects .filter (field__in = [[1 ], [2 ]]),
434+  self .objs [:2 ],
417435 )
418-  query  =  ctx .captured_queries [0 ]["sql" ]
419436 self .assertAggregateQuery (
420-  query ,
437+  ctx . captured_queries [ 0 ][ "sql" ] ,
421438 "model_fields__nullableintegerarraymodel" ,
422-  [
423-  {
424-  "$match" : {
425-  "$and" : [
426-  {"field" : {"$lt" : [2 ]}},
427-  {"$and" : [{"field" : {"$exists" : True }}, {"field" : {"$ne" : None }}]},
428-  ]
429-  }
430-  }
431-  ],
439+  [{"$match" : {"field" : {"$in" : ([1 ], [2 ])}}}],
432440 )
433441
434442 def  test_in_expr (self ):
@@ -439,9 +447,8 @@ def test_in_expr(self):
439447 ),
440448 self .objs [:2 ],
441449 )
442-  query  =  ctx .captured_queries [0 ]["sql" ]
443450 self .assertAggregateQuery (
444-  query ,
451+  ctx . captured_queries [ 0 ][ "sql" ] ,
445452 "model_fields__nullableintegerarraymodel" ,
446453 [
447454 {
@@ -460,19 +467,6 @@ def test_in_expr(self):
460467 ],
461468 )
462469
463-  def  test_in_path (self ):
464-  with  self .assertNumQueries (1 ) as  ctx :
465-  self .assertSequenceEqual (
466-  NullableIntegerArrayModel .objects .filter (field__in = [[1 ], [2 ]]),
467-  self .objs [:2 ],
468-  )
469-  query  =  ctx .captured_queries [0 ]["sql" ]
470-  self .assertAggregateQuery (
471-  query ,
472-  "model_fields__nullableintegerarraymodel" ,
473-  [{"$match" : {"field" : {"$in" : ([1 ], [2 ])}}}],
474-  )
475- 
476470 def  test_in_subquery (self ):
477471 IntegerArrayModel .objects .create (field = [2 , 3 ])
478472 self .assertSequenceEqual (
@@ -514,15 +508,26 @@ def test_contained_by_including_F_object(self):
514508 self .objs [:3 ],
515509 )
516510
511+  def  test_contains (self ):
512+  with  self .assertNumQueries (1 ) as  ctx :
513+  self .assertSequenceEqual (
514+  NullableIntegerArrayModel .objects .filter (field__contains = [2 ]),
515+  self .objs [1 :3 ],
516+  )
517+  self .assertAggregateQuery (
518+  ctx .captured_queries [0 ]["sql" ],
519+  "model_fields__nullableintegerarraymodel" ,
520+  [{"$match" : {"field" : {"$all" : [2 ]}}}],
521+  )
522+ 
517523 def  test_contains_expr (self ):
518524 with  self .assertNumQueries (1 ) as  ctx :
519525 self .assertSequenceEqual (
520526 NullableIntegerArrayModel .objects .filter (field__contains = [Value (1 ) +  1 ]),
521527 self .objs [1 :3 ],
522528 )
523-  query  =  ctx .captured_queries [0 ]["sql" ]
524529 self .assertAggregateQuery (
525-  query ,
530+  ctx . captured_queries [ 0 ][ "sql" ] ,
526531 "model_fields__nullableintegerarraymodel" ,
527532 [
528533 {
@@ -544,17 +549,6 @@ def test_contains_expr(self):
544549 ],
545550 )
546551
547-  def  test_contains_path (self ):
548-  with  self .assertNumQueries (1 ) as  ctx :
549-  self .assertSequenceEqual (
550-  NullableIntegerArrayModel .objects .filter (field__contains = [2 ]),
551-  self .objs [1 :3 ],
552-  )
553-  query  =  ctx .captured_queries [0 ]["sql" ]
554-  self .assertAggregateQuery (
555-  query , "model_fields__nullableintegerarraymodel" , [{"$match" : {"field" : {"$all" : [2 ]}}}]
556-  )
557- 
558552 def  test_contains_subquery (self ):
559553 IntegerArrayModel .objects .create (field = [2 , 3 ])
560554 inner_qs  =  IntegerArrayModel .objects .values_list ("field" , flat = True )
@@ -596,9 +590,8 @@ def test_icontains(self):
596590 self .assertSequenceEqual (
597591 CharArrayModel .objects .filter (field__icontains = "foo" ), [instance ]
598592 )
599-  query  =  ctx .captured_queries [0 ]["sql" ]
600593 self .assertAggregateQuery (
601-  query ,
594+  ctx . captured_queries [ 0 ][ "sql" ] ,
602595 "model_fields__chararraymodel" ,
603596 [{"$match" : {"field" : {"$regex" : "foo" , "$options" : "i" }}}],
604597 )
@@ -661,15 +654,26 @@ def test_index_used_on_nested_data(self):
661654 NestedIntegerArrayModel .objects .filter (field__0 = [1 , 2 ]), [instance ]
662655 )
663656
657+  def  test_overlap (self ):
658+  with  self .assertNumQueries (1 ) as  ctx :
659+  self .assertSequenceEqual (
660+  NullableIntegerArrayModel .objects .filter (field__overlap = [1 , 2 ]),
661+  self .objs [0 :3 ],
662+  )
663+  self .assertAggregateQuery (
664+  ctx .captured_queries [0 ]["sql" ],
665+  "model_fields__nullableintegerarraymodel" ,
666+  [{"$match" : {"field" : {"$in" : [1 , 2 ]}}}],
667+  )
668+ 
664669 def  test_overlap_expr (self ):
665670 with  self .assertNumQueries (1 ) as  ctx :
666671 self .assertSequenceEqual (
667672 NullableIntegerArrayModel .objects .filter (field__overlap = [1 , Value (1 ) +  1 ]),
668673 self .objs [0 :3 ],
669674 )
670-  query  =  ctx .captured_queries [0 ]["sql" ]
671675 self .assertAggregateQuery (
672-  query ,
676+  ctx . captured_queries [ 0 ][ "sql" ] ,
673677 "model_fields__nullableintegerarraymodel" ,
674678 [
675679 {
@@ -695,19 +699,6 @@ def test_overlap_expr(self):
695699 ],
696700 )
697701
698-  def  test_overlap_path (self ):
699-  with  self .assertNumQueries (1 ) as  ctx :
700-  self .assertSequenceEqual (
701-  NullableIntegerArrayModel .objects .filter (field__overlap = [1 , 2 ]),
702-  self .objs [0 :3 ],
703-  )
704-  query  =  ctx .captured_queries [0 ]["sql" ]
705-  self .assertAggregateQuery (
706-  query ,
707-  "model_fields__nullableintegerarraymodel" ,
708-  [{"$match" : {"field" : {"$in" : [1 , 2 ]}}}],
709-  )
710- 
711702 def  test_index_annotation (self ):
712703 qs  =  NullableIntegerArrayModel .objects .annotate (second = models .F ("field__1" ))
713704 self .assertCountEqual (
0 commit comments