Beispiel #1
0
 def test_empty_result_set(self):
     AggregateTestModel.objects.all().delete()
     tests = [
         (ArrayAgg("char_field"), []),
         (ArrayAgg("integer_field"), []),
         (ArrayAgg("boolean_field"), []),
         (BitAnd("integer_field"), None),
         (BitOr("integer_field"), None),
         (BoolAnd("boolean_field"), None),
         (BoolOr("boolean_field"), None),
         (JSONBAgg("integer_field"), []),
         (StringAgg("char_field", delimiter=";"), ""),
     ]
     if connection.features.has_bit_xor:
         tests.append((BitXor("integer_field"), None))
     for aggregation, expected_result in tests:
         with self.subTest(aggregation=aggregation):
             # Empty result with non-execution optimization.
             with self.assertNumQueries(0):
                 values = AggregateTestModel.objects.none().aggregate(
                     aggregation=aggregation,
                 )
                 self.assertEqual(values, {"aggregation": expected_result})
             # Empty result when query must be executed.
             with self.assertNumQueries(1):
                 values = AggregateTestModel.objects.aggregate(
                     aggregation=aggregation,
                 )
                 self.assertEqual(values, {"aggregation": expected_result})
Beispiel #2
0
 def test_default_argument(self):
     AggregateTestModel.objects.all().delete()
     tests = [
         (ArrayAgg("char_field", default=["<empty>"]), ["<empty>"]),
         (ArrayAgg("integer_field", default=[0]), [0]),
         (ArrayAgg("boolean_field", default=[False]), [False]),
         (BitAnd("integer_field", default=0), 0),
         (BitOr("integer_field", default=0), 0),
         (BoolAnd("boolean_field", default=False), False),
         (BoolOr("boolean_field", default=False), False),
         (JSONBAgg("integer_field", default=Value('["<empty>"]')), ["<empty>"]),
         (
             StringAgg("char_field", delimiter=";", default=Value("<empty>")),
             "<empty>",
         ),
     ]
     if connection.features.has_bit_xor:
         tests.append((BitXor("integer_field", default=0), 0))
     for aggregation, expected_result in tests:
         with self.subTest(aggregation=aggregation):
             # Empty result with non-execution optimization.
             with self.assertNumQueries(0):
                 values = AggregateTestModel.objects.none().aggregate(
                     aggregation=aggregation,
                 )
                 self.assertEqual(values, {"aggregation": expected_result})
             # Empty result when query must be executed.
             with self.assertNumQueries(1):
                 values = AggregateTestModel.objects.aggregate(
                     aggregation=aggregation,
                 )
                 self.assertEqual(values, {"aggregation": expected_result})
 def test_default_argument(self):
     AggregateTestModel.objects.all().delete()
     tests = [
         (ArrayAgg('char_field', default=['<empty>']), ['<empty>']),
         (ArrayAgg('integer_field', default=[0]), [0]),
         (ArrayAgg('boolean_field', default=[False]), [False]),
         (BitAnd('integer_field', default=0), 0),
         (BitOr('integer_field', default=0), 0),
         (BoolAnd('boolean_field', default=False), False),
         (BoolOr('boolean_field', default=False), False),
         (JSONBAgg('integer_field', default=Value('["<empty>"]')), ['<empty>']),
         (StringAgg('char_field', delimiter=';', default=Value('<empty>')), '<empty>'),
     ]
     for aggregation, expected_result in tests:
         with self.subTest(aggregation=aggregation):
             # Empty result with non-execution optimization.
             with self.assertNumQueries(0):
                 values = AggregateTestModel.objects.none().aggregate(
                     aggregation=aggregation,
                 )
                 self.assertEqual(values, {'aggregation': expected_result})
             # Empty result when query must be executed.
             with self.assertNumQueries(1):
                 values = AggregateTestModel.objects.aggregate(
                     aggregation=aggregation,
                 )
                 self.assertEqual(values, {'aggregation': expected_result})
 def test_empty_result_set(self):
     AggregateTestModel.objects.all().delete()
     tests = [
         (ArrayAgg('char_field'), []),
         (ArrayAgg('integer_field'), []),
         (ArrayAgg('boolean_field'), []),
         (BitAnd('integer_field'), None),
         (BitOr('integer_field'), None),
         (BoolAnd('boolean_field'), None),
         (BoolOr('boolean_field'), None),
         (JSONBAgg('integer_field'), []),
         (StringAgg('char_field', delimiter=';'), ''),
     ]
     for aggregation, expected_result in tests:
         with self.subTest(aggregation=aggregation):
             # Empty result with non-execution optimization.
             with self.assertNumQueries(0):
                 values = AggregateTestModel.objects.none().aggregate(
                     aggregation=aggregation,
                 )
                 self.assertEqual(values, {'aggregation': expected_result})
             # Empty result when query must be executed.
             with self.assertNumQueries(1):
                 values = AggregateTestModel.objects.aggregate(
                     aggregation=aggregation,
                 )
                 self.assertEqual(values, {'aggregation': expected_result})
Beispiel #5
0
 def test_bit_or_empty_result(self):
     AggregateTestModel.objects.all().delete()
     values = AggregateTestModel.objects.aggregate(
         bitor=BitOr('integer_field'))
     self.assertEqual(values, {'bitor': None})
Beispiel #6
0
 def test_bit_or_on_only_false_values(self):
     values = AggregateTestModel.objects.filter(integer_field=0).aggregate(
         bitor=BitOr('integer_field'))
     self.assertEqual(values, {'bitor': 0})
Beispiel #7
0
 def test_bit_or_general(self):
     values = AggregateTestModel.objects.filter(
         integer_field__in=[0, 1]).aggregate(bitor=BitOr('integer_field'))
     self.assertEqual(values, {'bitor': 1})
Beispiel #8
0
 def test_bit_or_on_only_true_values(self):
     values = AggregateTestModel.objects.filter(integer_field=1).aggregate(
         bitor=BitOr("integer_field")
     )
     self.assertEqual(values, {"bitor": 1})