]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Add column-expression-level implementation of NOT
authorjazzthief <mynameisyegor@gmail.com>
Mon, 30 Jan 2023 10:25:09 +0000 (11:25 +0100)
committerjazzthief <mynameisyegor@gmail.com>
Mon, 30 Jan 2023 10:25:09 +0000 (11:25 +0100)
lib/sqlalchemy/__init__.py
lib/sqlalchemy/sql/_elements_constructors.py
lib/sqlalchemy/sql/elements.py
lib/sqlalchemy/sql/expression.py

index c8e8efdee3b9bc70eca4a153c18e130fce56d620..a843b7ae5fba9d09e998538f52729f58cac059b7 100644 (file)
@@ -89,6 +89,7 @@ from .sql.expression import between as between
 from .sql.expression import BinaryExpression as BinaryExpression
 from .sql.expression import bindparam as bindparam
 from .sql.expression import BindParameter as BindParameter
+from .sql.expression import bitwise_not as bitwise_not
 from .sql.expression import BooleanClauseList as BooleanClauseList
 from .sql.expression import CacheKey as CacheKey
 from .sql.expression import Case as Case
index 1d8818a1ff4836a93b9bc61cf717d0bc60b63a78..976bd0bee30698416bd8dff23157d84e2e22eed5 100644 (file)
@@ -1018,6 +1018,12 @@ def distinct(expr: _ColumnExpressionArgument[_T]) -> UnaryExpression[_T]:
     return UnaryExpression._create_distinct(expr)
 
 
+def bitwise_not(expr: _ColumnExpressionArgument[_T]) -> UnaryExpression[_T]:
+    """Produce a column-expression-level unary ``~`` clause."""
+
+    return UnaryExpression._create_bitwise_not(expr)
+
+
 def extract(field: str, expr: _ColumnExpressionArgument[Any]) -> Extract:
     """Return a :class:`.Extract` construct.
 
index 5538ca4f3a8b079dad063a5a513aefb85f298a1e..240970e68a472d060c7288cb511af52536a3abb1 100644 (file)
@@ -3529,6 +3529,21 @@ class UnaryExpression(ColumnElement[_T]):
             wraps_column_expression=False,
         )
 
+    @classmethod
+    def _create_bitwise_not(
+        cls,
+        expr: _ColumnExpressionArgument[_T],
+    ) -> UnaryExpression[_T]:
+        col_expr: ColumnElement[_T] = coercions.expect(
+            roles.ExpressionElementRole, expr
+        )
+        return UnaryExpression(
+            col_expr,
+            operator=operators.bitwise_not_op,
+            type_=col_expr.type,
+            wraps_column_expression=False,
+        )
+
     @property
     def _order_by_label_element(self) -> Optional[Label[Any]]:
         if self.modifier in (operators.desc_op, operators.asc_op):
index 3f5c76a5071e4c5f841457fc28b091a151002047..7076cd10d26dd99dae7aa047933b6f1ee24f5cbc 100644 (file)
@@ -22,6 +22,7 @@ from ._elements_constructors import any_ as any_
 from ._elements_constructors import asc as asc
 from ._elements_constructors import between as between
 from ._elements_constructors import bindparam as bindparam
+from ._elements_constructors import bitwise_not as bitwise_not
 from ._elements_constructors import case as case
 from ._elements_constructors import cast as cast
 from ._elements_constructors import collate as collate