#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 django-updates+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/052.e05a5bfc362583657aefa47227302d6b%40djangoproject.com.