|
@@ -6,7 +6,7 @@ from copy import deepcopy
|
|
|
from unittest import mock
|
|
|
|
|
|
from django.core.exceptions import FieldError
|
|
|
-from django.db import DatabaseError, connection
|
|
|
+from django.db import DatabaseError, NotSupportedError, connection
|
|
|
from django.db.models import (
|
|
|
Avg, BooleanField, Case, CharField, Count, DateField, DateTimeField,
|
|
|
DurationField, Exists, Expression, ExpressionList, ExpressionWrapper, F,
|
|
@@ -1163,6 +1163,25 @@ class ExpressionOperatorTests(TestCase):
|
|
|
self.assertEqual(Number.objects.get(pk=self.n.pk).integer, 1764)
|
|
|
self.assertEqual(Number.objects.get(pk=self.n.pk).float, Approximate(61.02, places=2))
|
|
|
|
|
|
+ @unittest.skipIf(connection.vendor == 'oracle', "Oracle doesn't support bitwise XOR.")
|
|
|
+ def test_lefthand_bitwise_xor(self):
|
|
|
+ Number.objects.update(integer=F('integer').bitxor(48))
|
|
|
+ self.assertEqual(Number.objects.get(pk=self.n.pk).integer, 26)
|
|
|
+ self.assertEqual(Number.objects.get(pk=self.n1.pk).integer, -26)
|
|
|
+
|
|
|
+ @unittest.skipIf(connection.vendor == 'oracle', "Oracle doesn't support bitwise XOR.")
|
|
|
+ def test_lefthand_bitwise_xor_null(self):
|
|
|
+ employee = Employee.objects.create(firstname='John', lastname='Doe')
|
|
|
+ Employee.objects.update(salary=F('salary').bitxor(48))
|
|
|
+ employee.refresh_from_db()
|
|
|
+ self.assertIsNone(employee.salary)
|
|
|
+
|
|
|
+ @unittest.skipUnless(connection.vendor == 'oracle', "Oracle doesn't support bitwise XOR.")
|
|
|
+ def test_lefthand_bitwise_xor_not_supported(self):
|
|
|
+ msg = 'Bitwise XOR is not supported in Oracle.'
|
|
|
+ with self.assertRaisesMessage(NotSupportedError, msg):
|
|
|
+ Number.objects.update(integer=F('integer').bitxor(48))
|
|
|
+
|
|
|
def test_right_hand_addition(self):
|
|
|
# Right hand operators
|
|
|
Number.objects.filter(pk=self.n.pk).update(integer=15 + F('integer'), float=42.7 + F('float'))
|