mirror of
https://github.com/django/django.git
synced 2025-09-08 19:50:48 +00:00
Fixed #31396 -- Added binary XOR operator to F expressions.
This commit is contained in:
parent
39e1c88de6
commit
f3da09df0f
8 changed files with 44 additions and 4 deletions
|
@ -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'))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue