@@ -28,6 +28,8 @@ use itertools::Itertools;
28
28
use serde:: { Deserialize , Serialize } ;
29
29
30
30
use crate :: error:: Result ;
31
+ use crate :: expr:: visitors:: predicate_visitor:: visit;
32
+ use crate :: expr:: visitors:: rewrite_not:: RewriteNotVisitor ;
31
33
use crate :: expr:: { Bind , BoundReference , PredicateOperator , Reference } ;
32
34
use crate :: spec:: { Datum , PrimitiveLiteral , SchemaRef } ;
33
35
use crate :: { Error , ErrorKind } ;
@@ -652,29 +654,8 @@ impl Predicate {
652
654
/// assert_eq!(&format!("{result}"), "a >= 5");
653
655
/// ```
654
656
pub fn rewrite_not ( self ) -> Predicate {
655
- match self {
656
- Predicate :: And ( expr) => {
657
- let [ left, right] = expr. inputs ;
658
- let new_left = Box :: new ( left. rewrite_not ( ) ) ;
659
- let new_right = Box :: new ( right. rewrite_not ( ) ) ;
660
- Predicate :: And ( LogicalExpression :: new ( [ new_left, new_right] ) )
661
- }
662
- Predicate :: Or ( expr) => {
663
- let [ left, right] = expr. inputs ;
664
- let new_left = Box :: new ( left. rewrite_not ( ) ) ;
665
- let new_right = Box :: new ( right. rewrite_not ( ) ) ;
666
- Predicate :: Or ( LogicalExpression :: new ( [ new_left, new_right] ) )
667
- }
668
- Predicate :: Not ( expr) => {
669
- let [ inner] = expr. inputs ;
670
- inner. negate ( )
671
- }
672
- Predicate :: Unary ( expr) => Predicate :: Unary ( expr) ,
673
- Predicate :: Binary ( expr) => Predicate :: Binary ( expr) ,
674
- Predicate :: Set ( expr) => Predicate :: Set ( expr) ,
675
- Predicate :: AlwaysTrue => Predicate :: AlwaysTrue ,
676
- Predicate :: AlwaysFalse => Predicate :: AlwaysFalse ,
677
- }
657
+ visit ( & mut RewriteNotVisitor :: new ( ) , & self )
658
+ . expect ( "RewriteNotVisitor guarantees always success" )
678
659
}
679
660
}
680
661
0 commit comments