@@ -28,6 +28,8 @@ use itertools::Itertools;
2828use serde:: { Deserialize , Serialize } ;
2929
3030use crate :: error:: Result ;
31+ use crate :: expr:: visitors:: predicate_visitor:: visit;
32+ use crate :: expr:: visitors:: rewrite_not:: RewriteNotVisitor ;
3133use crate :: expr:: { Bind , BoundReference , PredicateOperator , Reference } ;
3234use crate :: spec:: { Datum , PrimitiveLiteral , SchemaRef } ;
3335use crate :: { Error , ErrorKind } ;
@@ -652,29 +654,8 @@ impl Predicate {
652654 /// assert_eq!(&format!("{result}"), "a >= 5");
653655 /// ```
654656 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" )
678659 }
679660}
680661
0 commit comments