#31396: Add support for bitwise XOR
-------------------------------------+-------------------------------------
Reporter: Hannes | Owner: Hannes Ljungberg
Ljungberg |
Type: New | Status: assigned
feature |
Component: Database | Version: master
layer (models, ORM) |
Severity: Normal | Keywords: bitwise xor
Triage Stage: | Has patch: 0
Unreviewed |
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-------------------------------------+-------------------------------------
It would be nice to get support for performing bitwise XOR on expressions.
I'm aware of #29865 but from my understanding this ticket is about logical
`XOR` and not bitwise `XOR`. Let me know if that ticket should be used
instead.
My proposal is to implement this just like the other bitwise-functions,
i.e `Combinable.bitxor(other)`.
The connector defined by `Combinable` could be `#` , this is what
PostgresSQL use, see https://www.postgresql.org/docs/current/functions-
bitstring.html. I guess a more natural choice would’ve been `^` but this
connector is already in use by `Combinable.POW`:
https://github.com/django/django/blob/291539a85c8461456ab728fe6820a86de54294b6/django/db/models/expressions.py#L42
Bitwise XOR is supported by all backends except sqlite. It could be
implemented on sqlite as something like `((%(lhs)s | %(rhs)s) - (%(lhs)s &
%(rhs)s))` but the way `CombinedExpression.as_sql` is implemented makes it
a bit tricky to repeat the right-hand side binding:
`((“left_hand_side_expr" | %s) - ("left_hand_side_expr" & %s)) % (rhs,)` .
Maybe it could be OK to set
`django.db.backends.sqlite3.features.DatabaseFeatures.supports_bitwise_xor
= False`
I have a proof-of-concept ready if this would be accepted.
--
Ticket URL: <https://code.djangoproject.com/ticket/31396>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/052.e05a5bfc362583657aefa47227302d6b%40djangoproject.com.