|
@@ -78,8 +78,8 @@ class CaseExpressionTests(TestCase):
|
|
|
def test_annotate_without_default(self):
|
|
|
self.assertQuerysetEqual(
|
|
|
CaseTestModel.objects.annotate(test=Case(
|
|
|
- When(integer=1, then=Value(1)),
|
|
|
- When(integer=2, then=Value(2)),
|
|
|
+ When(integer=1, then=1),
|
|
|
+ When(integer=2, then=2),
|
|
|
output_field=models.IntegerField(),
|
|
|
)).order_by('pk'),
|
|
|
[(1, 1), (2, 2), (3, None), (2, 2), (3, None), (3, None), (4, None)],
|
|
@@ -244,9 +244,9 @@ class CaseExpressionTests(TestCase):
|
|
|
self.assertQuerysetEqual(
|
|
|
CaseTestModel.objects.annotate(
|
|
|
test=Case(
|
|
|
- When(integer=1, then=Value(2)),
|
|
|
- When(integer=2, then=Value(1)),
|
|
|
- default=Value(3),
|
|
|
+ When(integer=1, then=2),
|
|
|
+ When(integer=2, then=1),
|
|
|
+ default=3,
|
|
|
output_field=models.IntegerField(),
|
|
|
) + 1,
|
|
|
).order_by('pk'),
|
|
@@ -278,19 +278,19 @@ class CaseExpressionTests(TestCase):
|
|
|
self.assertEqual(
|
|
|
CaseTestModel.objects.aggregate(
|
|
|
one=models.Sum(Case(
|
|
|
- When(integer=1, then=Value(1)),
|
|
|
+ When(integer=1, then=1),
|
|
|
output_field=models.IntegerField(),
|
|
|
)),
|
|
|
two=models.Sum(Case(
|
|
|
- When(integer=2, then=Value(1)),
|
|
|
+ When(integer=2, then=1),
|
|
|
output_field=models.IntegerField(),
|
|
|
)),
|
|
|
three=models.Sum(Case(
|
|
|
- When(integer=3, then=Value(1)),
|
|
|
+ When(integer=3, then=1),
|
|
|
output_field=models.IntegerField(),
|
|
|
)),
|
|
|
four=models.Sum(Case(
|
|
|
- When(integer=4, then=Value(1)),
|
|
|
+ When(integer=4, then=1),
|
|
|
output_field=models.IntegerField(),
|
|
|
)),
|
|
|
),
|
|
@@ -311,11 +311,11 @@ class CaseExpressionTests(TestCase):
|
|
|
self.assertEqual(
|
|
|
CaseTestModel.objects.aggregate(
|
|
|
equal=models.Sum(Case(
|
|
|
- When(integer2=F('integer'), then=Value(1)),
|
|
|
+ When(integer2=F('integer'), then=1),
|
|
|
output_field=models.IntegerField(),
|
|
|
)),
|
|
|
plus_one=models.Sum(Case(
|
|
|
- When(integer2=F('integer') + 1, then=Value(1)),
|
|
|
+ When(integer2=F('integer') + 1, then=1),
|
|
|
output_field=models.IntegerField(),
|
|
|
)),
|
|
|
),
|
|
@@ -325,9 +325,9 @@ class CaseExpressionTests(TestCase):
|
|
|
def test_filter(self):
|
|
|
self.assertQuerysetEqual(
|
|
|
CaseTestModel.objects.filter(integer2=Case(
|
|
|
- When(integer=2, then=Value(3)),
|
|
|
- When(integer=3, then=Value(4)),
|
|
|
- default=Value(1),
|
|
|
+ When(integer=2, then=3),
|
|
|
+ When(integer=3, then=4),
|
|
|
+ default=1,
|
|
|
output_field=models.IntegerField(),
|
|
|
)).order_by('pk'),
|
|
|
[(1, 1), (2, 3), (3, 4), (3, 4)],
|
|
@@ -337,8 +337,8 @@ class CaseExpressionTests(TestCase):
|
|
|
def test_filter_without_default(self):
|
|
|
self.assertQuerysetEqual(
|
|
|
CaseTestModel.objects.filter(integer2=Case(
|
|
|
- When(integer=2, then=Value(3)),
|
|
|
- When(integer=3, then=Value(4)),
|
|
|
+ When(integer=2, then=3),
|
|
|
+ When(integer=3, then=4),
|
|
|
output_field=models.IntegerField(),
|
|
|
)).order_by('pk'),
|
|
|
[(2, 3), (3, 4), (3, 4)],
|
|
@@ -381,8 +381,8 @@ class CaseExpressionTests(TestCase):
|
|
|
def test_filter_with_join_in_condition(self):
|
|
|
self.assertQuerysetEqual(
|
|
|
CaseTestModel.objects.filter(integer=Case(
|
|
|
- When(integer2=F('o2o_rel__integer') + 1, then=Value(2)),
|
|
|
- When(integer2=F('o2o_rel__integer'), then=Value(3)),
|
|
|
+ When(integer2=F('o2o_rel__integer') + 1, then=2),
|
|
|
+ When(integer2=F('o2o_rel__integer'), then=3),
|
|
|
output_field=models.IntegerField(),
|
|
|
)).order_by('pk'),
|
|
|
[(2, 3), (3, 3)],
|
|
@@ -392,9 +392,9 @@ class CaseExpressionTests(TestCase):
|
|
|
def test_filter_with_join_in_predicate(self):
|
|
|
self.assertQuerysetEqual(
|
|
|
CaseTestModel.objects.filter(integer2=Case(
|
|
|
- When(o2o_rel__integer=1, then=Value(1)),
|
|
|
- When(o2o_rel__integer=2, then=Value(3)),
|
|
|
- When(o2o_rel__integer=3, then=Value(4)),
|
|
|
+ When(o2o_rel__integer=1, then=1),
|
|
|
+ When(o2o_rel__integer=2, then=3),
|
|
|
+ When(o2o_rel__integer=3, then=4),
|
|
|
output_field=models.IntegerField(),
|
|
|
)).order_by('pk'),
|
|
|
[(1, 1), (2, 3), (3, 4), (3, 4)],
|
|
@@ -422,8 +422,8 @@ class CaseExpressionTests(TestCase):
|
|
|
f_plus_1=F('integer') + 1,
|
|
|
).filter(
|
|
|
integer=Case(
|
|
|
- When(integer2=F('integer'), then=Value(2)),
|
|
|
- When(integer2=F('f_plus_1'), then=Value(3)),
|
|
|
+ When(integer2=F('integer'), then=2),
|
|
|
+ When(integer2=F('f_plus_1'), then=3),
|
|
|
output_field=models.IntegerField(),
|
|
|
),
|
|
|
).order_by('pk'),
|
|
@@ -437,9 +437,9 @@ class CaseExpressionTests(TestCase):
|
|
|
f_plus_1=F('integer') + 1,
|
|
|
).filter(
|
|
|
integer2=Case(
|
|
|
- When(f_plus_1=3, then=Value(3)),
|
|
|
- When(f_plus_1=4, then=Value(4)),
|
|
|
- default=Value(1),
|
|
|
+ When(f_plus_1=3, then=3),
|
|
|
+ When(f_plus_1=4, then=4),
|
|
|
+ default=1,
|
|
|
output_field=models.IntegerField(),
|
|
|
),
|
|
|
).order_by('pk'),
|
|
@@ -469,8 +469,8 @@ class CaseExpressionTests(TestCase):
|
|
|
max=Max('fk_rel__integer'),
|
|
|
).filter(
|
|
|
integer=Case(
|
|
|
- When(integer2=F('min'), then=Value(2)),
|
|
|
- When(integer2=F('max'), then=Value(3)),
|
|
|
+ When(integer2=F('min'), then=2),
|
|
|
+ When(integer2=F('max'), then=3),
|
|
|
),
|
|
|
).order_by('pk'),
|
|
|
[(3, 4, 3, 4), (2, 2, 2, 3), (3, 4, 3, 4)],
|
|
@@ -483,8 +483,8 @@ class CaseExpressionTests(TestCase):
|
|
|
max=Max('fk_rel__integer'),
|
|
|
).filter(
|
|
|
integer=Case(
|
|
|
- When(max=3, then=Value(2)),
|
|
|
- When(max=4, then=Value(3)),
|
|
|
+ When(max=3, then=2),
|
|
|
+ When(max=4, then=3),
|
|
|
),
|
|
|
).order_by('pk'),
|
|
|
[(2, 3, 3), (3, 4, 4), (2, 2, 3), (3, 4, 4), (3, 3, 4)],
|
|
@@ -508,8 +508,8 @@ class CaseExpressionTests(TestCase):
|
|
|
def test_update_without_default(self):
|
|
|
CaseTestModel.objects.update(
|
|
|
integer2=Case(
|
|
|
- When(integer=1, then=Value(1)),
|
|
|
- When(integer=2, then=Value(2)),
|
|
|
+ When(integer=1, then=1),
|
|
|
+ When(integer=2, then=2),
|
|
|
),
|
|
|
)
|
|
|
self.assertQuerysetEqual(
|
|
@@ -549,8 +549,8 @@ class CaseExpressionTests(TestCase):
|
|
|
with self.assertRaisesMessage(FieldError, 'Joined field references are not permitted in this query'):
|
|
|
CaseTestModel.objects.update(
|
|
|
integer=Case(
|
|
|
- When(integer2=F('o2o_rel__integer') + 1, then=Value(2)),
|
|
|
- When(integer2=F('o2o_rel__integer'), then=Value(3)),
|
|
|
+ When(integer2=F('o2o_rel__integer') + 1, then=2),
|
|
|
+ When(integer2=F('o2o_rel__integer'), then=3),
|
|
|
output_field=models.IntegerField(),
|
|
|
),
|
|
|
)
|
|
@@ -570,8 +570,8 @@ class CaseExpressionTests(TestCase):
|
|
|
def test_update_big_integer(self):
|
|
|
CaseTestModel.objects.update(
|
|
|
big_integer=Case(
|
|
|
- When(integer=1, then=Value(1)),
|
|
|
- When(integer=2, then=Value(2)),
|
|
|
+ When(integer=1, then=1),
|
|
|
+ When(integer=2, then=2),
|
|
|
),
|
|
|
)
|
|
|
self.assertQuerysetEqual(
|
|
@@ -599,9 +599,9 @@ class CaseExpressionTests(TestCase):
|
|
|
def test_update_boolean(self):
|
|
|
CaseTestModel.objects.update(
|
|
|
boolean=Case(
|
|
|
- When(integer=1, then=Value(True)),
|
|
|
- When(integer=2, then=Value(True)),
|
|
|
- default=Value(False),
|
|
|
+ When(integer=1, then=True),
|
|
|
+ When(integer=2, then=True),
|
|
|
+ default=False,
|
|
|
),
|
|
|
)
|
|
|
self.assertQuerysetEqual(
|
|
@@ -627,8 +627,8 @@ class CaseExpressionTests(TestCase):
|
|
|
def test_update_date(self):
|
|
|
CaseTestModel.objects.update(
|
|
|
date=Case(
|
|
|
- When(integer=1, then=Value(date(2015, 1, 1))),
|
|
|
- When(integer=2, then=Value(date(2015, 1, 2))),
|
|
|
+ When(integer=1, then=date(2015, 1, 1)),
|
|
|
+ When(integer=2, then=date(2015, 1, 2)),
|
|
|
),
|
|
|
)
|
|
|
self.assertQuerysetEqual(
|
|
@@ -643,8 +643,8 @@ class CaseExpressionTests(TestCase):
|
|
|
def test_update_date_time(self):
|
|
|
CaseTestModel.objects.update(
|
|
|
date_time=Case(
|
|
|
- When(integer=1, then=Value(datetime(2015, 1, 1))),
|
|
|
- When(integer=2, then=Value(datetime(2015, 1, 2))),
|
|
|
+ When(integer=1, then=datetime(2015, 1, 1)),
|
|
|
+ When(integer=2, then=datetime(2015, 1, 2)),
|
|
|
),
|
|
|
)
|
|
|
self.assertQuerysetEqual(
|
|
@@ -659,8 +659,8 @@ class CaseExpressionTests(TestCase):
|
|
|
def test_update_decimal(self):
|
|
|
CaseTestModel.objects.update(
|
|
|
decimal=Case(
|
|
|
- When(integer=1, then=Value(Decimal('1.1'))),
|
|
|
- When(integer=2, then=Value(Decimal('2.2'))),
|
|
|
+ When(integer=1, then=Decimal('1.1')),
|
|
|
+ When(integer=2, then=Decimal('2.2')),
|
|
|
),
|
|
|
)
|
|
|
self.assertQuerysetEqual(
|
|
@@ -728,8 +728,8 @@ class CaseExpressionTests(TestCase):
|
|
|
def test_update_float(self):
|
|
|
CaseTestModel.objects.update(
|
|
|
float=Case(
|
|
|
- When(integer=1, then=Value(1.1)),
|
|
|
- When(integer=2, then=Value(2.2)),
|
|
|
+ When(integer=1, then=1.1),
|
|
|
+ When(integer=2, then=2.2),
|
|
|
),
|
|
|
)
|
|
|
self.assertQuerysetEqual(
|
|
@@ -770,8 +770,8 @@ class CaseExpressionTests(TestCase):
|
|
|
def test_update_null_boolean(self):
|
|
|
CaseTestModel.objects.update(
|
|
|
null_boolean=Case(
|
|
|
- When(integer=1, then=Value(True)),
|
|
|
- When(integer=2, then=Value(False)),
|
|
|
+ When(integer=1, then=True),
|
|
|
+ When(integer=2, then=False),
|
|
|
),
|
|
|
)
|
|
|
self.assertQuerysetEqual(
|
|
@@ -783,8 +783,8 @@ class CaseExpressionTests(TestCase):
|
|
|
def test_update_positive_integer(self):
|
|
|
CaseTestModel.objects.update(
|
|
|
positive_integer=Case(
|
|
|
- When(integer=1, then=Value(1)),
|
|
|
- When(integer=2, then=Value(2)),
|
|
|
+ When(integer=1, then=1),
|
|
|
+ When(integer=2, then=2),
|
|
|
),
|
|
|
)
|
|
|
self.assertQuerysetEqual(
|
|
@@ -796,8 +796,8 @@ class CaseExpressionTests(TestCase):
|
|
|
def test_update_positive_small_integer(self):
|
|
|
CaseTestModel.objects.update(
|
|
|
positive_small_integer=Case(
|
|
|
- When(integer=1, then=Value(1)),
|
|
|
- When(integer=2, then=Value(2)),
|
|
|
+ When(integer=1, then=1),
|
|
|
+ When(integer=2, then=2),
|
|
|
),
|
|
|
)
|
|
|
self.assertQuerysetEqual(
|
|
@@ -823,8 +823,8 @@ class CaseExpressionTests(TestCase):
|
|
|
def test_update_small_integer(self):
|
|
|
CaseTestModel.objects.update(
|
|
|
small_integer=Case(
|
|
|
- When(integer=1, then=Value(1)),
|
|
|
- When(integer=2, then=Value(2)),
|
|
|
+ When(integer=1, then=1),
|
|
|
+ When(integer=2, then=2),
|
|
|
),
|
|
|
)
|
|
|
self.assertQuerysetEqual(
|
|
@@ -921,8 +921,8 @@ class CaseExpressionTests(TestCase):
|
|
|
|
|
|
CaseTestModel.objects.update(
|
|
|
fk=Case(
|
|
|
- When(integer=1, then=Value(obj1.pk)),
|
|
|
- When(integer=2, then=Value(obj2.pk)),
|
|
|
+ When(integer=1, then=obj1.pk),
|
|
|
+ When(integer=2, then=obj2.pk),
|
|
|
),
|
|
|
)
|
|
|
self.assertQuerysetEqual(
|
|
@@ -1065,15 +1065,15 @@ class CaseDocumentationExamples(TestCase):
|
|
|
self.assertEqual(
|
|
|
Client.objects.aggregate(
|
|
|
regular=models.Sum(Case(
|
|
|
- When(account_type=Client.REGULAR, then=Value(1)),
|
|
|
+ When(account_type=Client.REGULAR, then=1),
|
|
|
output_field=models.IntegerField(),
|
|
|
)),
|
|
|
gold=models.Sum(Case(
|
|
|
- When(account_type=Client.GOLD, then=Value(1)),
|
|
|
+ When(account_type=Client.GOLD, then=1),
|
|
|
output_field=models.IntegerField(),
|
|
|
)),
|
|
|
platinum=models.Sum(Case(
|
|
|
- When(account_type=Client.PLATINUM, then=Value(1)),
|
|
|
+ When(account_type=Client.PLATINUM, then=1),
|
|
|
output_field=models.IntegerField(),
|
|
|
)),
|
|
|
),
|