@@ -53,7 +53,7 @@ use crate::ast::{ColumnOption, Expr, GranteesType, Ident, ObjectNamePart, Statem
5353pub use crate :: keywords;
5454use crate :: keywords:: Keyword ;
5555use crate :: parser:: { Parser , ParserError } ;
56- use crate :: tokenizer:: Token ;
56+ use crate :: tokenizer:: BorrowedToken ;
5757
5858#[ cfg( not( feature = "std" ) ) ]
5959use alloc:: boxed:: Box ;
@@ -655,16 +655,16 @@ pub trait Dialect: Debug + Any {
655655 let token = parser. peek_token ( ) ;
656656 debug ! ( "get_next_precedence_full() {token:?}" ) ;
657657 match token. token {
658- Token :: Word ( w) if w. keyword == Keyword :: OR => Ok ( p ! ( Or ) ) ,
659- Token :: Word ( w) if w. keyword == Keyword :: AND => Ok ( p ! ( And ) ) ,
660- Token :: Word ( w) if w. keyword == Keyword :: XOR => Ok ( p ! ( Xor ) ) ,
658+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: OR => Ok ( p ! ( Or ) ) ,
659+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: AND => Ok ( p ! ( And ) ) ,
660+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: XOR => Ok ( p ! ( Xor ) ) ,
661661
662- Token :: Word ( w) if w. keyword == Keyword :: AT => {
662+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: AT => {
663663 match (
664664 parser. peek_nth_token ( 1 ) . token ,
665665 parser. peek_nth_token ( 2 ) . token ,
666666 ) {
667- ( Token :: Word ( w) , Token :: Word ( w2) )
667+ ( BorrowedToken :: Word ( w) , BorrowedToken :: Word ( w2) )
668668 if w. keyword == Keyword :: TIME && w2. keyword == Keyword :: ZONE =>
669669 {
670670 Ok ( p ! ( AtTz ) )
@@ -673,102 +673,112 @@ pub trait Dialect: Debug + Any {
673673 }
674674 }
675675
676- Token :: Word ( w) if w. keyword == Keyword :: NOT => match parser. peek_nth_token ( 1 ) . token {
677- // The precedence of NOT varies depending on keyword that
678- // follows it. If it is followed by IN, BETWEEN, or LIKE,
679- // it takes on the precedence of those tokens. Otherwise, it
680- // is not an infix operator, and therefore has zero
681- // precedence.
682- Token :: Word ( w) if w. keyword == Keyword :: IN => Ok ( p ! ( Between ) ) ,
683- Token :: Word ( w) if w. keyword == Keyword :: BETWEEN => Ok ( p ! ( Between ) ) ,
684- Token :: Word ( w) if w. keyword == Keyword :: LIKE => Ok ( p ! ( Like ) ) ,
685- Token :: Word ( w) if w. keyword == Keyword :: ILIKE => Ok ( p ! ( Like ) ) ,
686- Token :: Word ( w) if w. keyword == Keyword :: RLIKE => Ok ( p ! ( Like ) ) ,
687- Token :: Word ( w) if w. keyword == Keyword :: REGEXP => Ok ( p ! ( Like ) ) ,
688- Token :: Word ( w) if w. keyword == Keyword :: MATCH => Ok ( p ! ( Like ) ) ,
689- Token :: Word ( w) if w. keyword == Keyword :: SIMILAR => Ok ( p ! ( Like ) ) ,
690- Token :: Word ( w) if w. keyword == Keyword :: MEMBER => Ok ( p ! ( Like ) ) ,
691- Token :: Word ( w)
692- if w. keyword == Keyword :: NULL && !parser. in_column_definition_state ( ) =>
693- {
694- Ok ( p ! ( Is ) )
676+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: NOT => {
677+ match parser. peek_nth_token ( 1 ) . token {
678+ // The precedence of NOT varies depending on keyword that
679+ // follows it. If it is followed by IN, BETWEEN, or LIKE,
680+ // it takes on the precedence of those tokens. Otherwise, it
681+ // is not an infix operator, and therefore has zero
682+ // precedence.
683+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: IN => Ok ( p ! ( Between ) ) ,
684+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: BETWEEN => Ok ( p ! ( Between ) ) ,
685+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: LIKE => Ok ( p ! ( Like ) ) ,
686+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: ILIKE => Ok ( p ! ( Like ) ) ,
687+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: RLIKE => Ok ( p ! ( Like ) ) ,
688+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: REGEXP => Ok ( p ! ( Like ) ) ,
689+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: MATCH => Ok ( p ! ( Like ) ) ,
690+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: SIMILAR => Ok ( p ! ( Like ) ) ,
691+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: MEMBER => Ok ( p ! ( Like ) ) ,
692+ BorrowedToken :: Word ( w)
693+ if w. keyword == Keyword :: NULL && !parser. in_column_definition_state ( ) =>
694+ {
695+ Ok ( p ! ( Is ) )
696+ }
697+ _ => Ok ( self . prec_unknown ( ) ) ,
695698 }
696- _ => Ok ( self . prec_unknown ( ) ) ,
697- } ,
698- Token :: Word ( w) if w. keyword == Keyword :: NOTNULL && self . supports_notnull_operator ( ) => {
699- Ok ( p ! ( Is ) )
700- }
701- Token :: Word ( w) if w. keyword == Keyword :: IS => Ok ( p ! ( Is ) ) ,
702- Token :: Word ( w) if w. keyword == Keyword :: IN => Ok ( p ! ( Between ) ) ,
703- Token :: Word ( w) if w. keyword == Keyword :: BETWEEN => Ok ( p ! ( Between ) ) ,
704- Token :: Word ( w) if w. keyword == Keyword :: OVERLAPS => Ok ( p ! ( Between ) ) ,
705- Token :: Word ( w) if w. keyword == Keyword :: LIKE => Ok ( p ! ( Like ) ) ,
706- Token :: Word ( w) if w. keyword == Keyword :: ILIKE => Ok ( p ! ( Like ) ) ,
707- Token :: Word ( w) if w. keyword == Keyword :: RLIKE => Ok ( p ! ( Like ) ) ,
708- Token :: Word ( w) if w. keyword == Keyword :: REGEXP => Ok ( p ! ( Like ) ) ,
709- Token :: Word ( w) if w. keyword == Keyword :: MATCH => Ok ( p ! ( Like ) ) ,
710- Token :: Word ( w) if w. keyword == Keyword :: SIMILAR => Ok ( p ! ( Like ) ) ,
711- Token :: Word ( w) if w. keyword == Keyword :: MEMBER => Ok ( p ! ( Like ) ) ,
712- Token :: Word ( w) if w. keyword == Keyword :: OPERATOR => Ok ( p ! ( Between ) ) ,
713- Token :: Word ( w) if w. keyword == Keyword :: DIV => Ok ( p ! ( MulDivModOp ) ) ,
714- Token :: Period => Ok ( p ! ( Period ) ) ,
715- Token :: Assignment
716- | Token :: Eq
717- | Token :: Lt
718- | Token :: LtEq
719- | Token :: Neq
720- | Token :: Gt
721- | Token :: GtEq
722- | Token :: DoubleEq
723- | Token :: Tilde
724- | Token :: TildeAsterisk
725- | Token :: ExclamationMarkTilde
726- | Token :: ExclamationMarkTildeAsterisk
727- | Token :: DoubleTilde
728- | Token :: DoubleTildeAsterisk
729- | Token :: ExclamationMarkDoubleTilde
730- | Token :: ExclamationMarkDoubleTildeAsterisk
731- | Token :: Spaceship => Ok ( p ! ( Eq ) ) ,
732- Token :: Pipe
733- | Token :: QuestionMarkDash
734- | Token :: DoubleSharp
735- | Token :: Overlap
736- | Token :: AmpersandLeftAngleBracket
737- | Token :: AmpersandRightAngleBracket
738- | Token :: QuestionMarkDashVerticalBar
739- | Token :: AmpersandLeftAngleBracketVerticalBar
740- | Token :: VerticalBarAmpersandRightAngleBracket
741- | Token :: TwoWayArrow
742- | Token :: LeftAngleBracketCaret
743- | Token :: RightAngleBracketCaret
744- | Token :: QuestionMarkSharp
745- | Token :: QuestionMarkDoubleVerticalBar
746- | Token :: QuestionPipe
747- | Token :: TildeEqual
748- | Token :: AtSign
749- | Token :: ShiftLeftVerticalBar
750- | Token :: VerticalBarShiftRight => Ok ( p ! ( Pipe ) ) ,
751- Token :: Caret | Token :: Sharp | Token :: ShiftRight | Token :: ShiftLeft => Ok ( p ! ( Caret ) ) ,
752- Token :: Ampersand => Ok ( p ! ( Ampersand ) ) ,
753- Token :: Plus | Token :: Minus => Ok ( p ! ( PlusMinus ) ) ,
754- Token :: Mul | Token :: Div | Token :: DuckIntDiv | Token :: Mod | Token :: StringConcat => {
755- Ok ( p ! ( MulDivModOp ) )
756699 }
757- Token :: DoubleColon | Token :: ExclamationMark | Token :: LBracket | Token :: CaretAt => {
758- Ok ( p ! ( DoubleColon ) )
700+ BorrowedToken :: Word ( w)
701+ if w. keyword == Keyword :: NOTNULL && self . supports_notnull_operator ( ) =>
702+ {
703+ Ok ( p ! ( Is ) )
759704 }
760- Token :: Arrow
761- | Token :: LongArrow
762- | Token :: HashArrow
763- | Token :: HashLongArrow
764- | Token :: AtArrow
765- | Token :: ArrowAt
766- | Token :: HashMinus
767- | Token :: AtQuestion
768- | Token :: AtAt
769- | Token :: Question
770- | Token :: QuestionAnd
771- | Token :: CustomBinaryOperator ( _) => Ok ( p ! ( PgOther ) ) ,
705+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: IS => Ok ( p ! ( Is ) ) ,
706+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: IN => Ok ( p ! ( Between ) ) ,
707+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: BETWEEN => Ok ( p ! ( Between ) ) ,
708+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: OVERLAPS => Ok ( p ! ( Between ) ) ,
709+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: LIKE => Ok ( p ! ( Like ) ) ,
710+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: ILIKE => Ok ( p ! ( Like ) ) ,
711+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: RLIKE => Ok ( p ! ( Like ) ) ,
712+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: REGEXP => Ok ( p ! ( Like ) ) ,
713+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: MATCH => Ok ( p ! ( Like ) ) ,
714+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: SIMILAR => Ok ( p ! ( Like ) ) ,
715+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: MEMBER => Ok ( p ! ( Like ) ) ,
716+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: OPERATOR => Ok ( p ! ( Between ) ) ,
717+ BorrowedToken :: Word ( w) if w. keyword == Keyword :: DIV => Ok ( p ! ( MulDivModOp ) ) ,
718+ BorrowedToken :: Period => Ok ( p ! ( Period ) ) ,
719+ BorrowedToken :: Assignment
720+ | BorrowedToken :: Eq
721+ | BorrowedToken :: Lt
722+ | BorrowedToken :: LtEq
723+ | BorrowedToken :: Neq
724+ | BorrowedToken :: Gt
725+ | BorrowedToken :: GtEq
726+ | BorrowedToken :: DoubleEq
727+ | BorrowedToken :: Tilde
728+ | BorrowedToken :: TildeAsterisk
729+ | BorrowedToken :: ExclamationMarkTilde
730+ | BorrowedToken :: ExclamationMarkTildeAsterisk
731+ | BorrowedToken :: DoubleTilde
732+ | BorrowedToken :: DoubleTildeAsterisk
733+ | BorrowedToken :: ExclamationMarkDoubleTilde
734+ | BorrowedToken :: ExclamationMarkDoubleTildeAsterisk
735+ | BorrowedToken :: Spaceship => Ok ( p ! ( Eq ) ) ,
736+ BorrowedToken :: Pipe
737+ | BorrowedToken :: QuestionMarkDash
738+ | BorrowedToken :: DoubleSharp
739+ | BorrowedToken :: Overlap
740+ | BorrowedToken :: AmpersandLeftAngleBracket
741+ | BorrowedToken :: AmpersandRightAngleBracket
742+ | BorrowedToken :: QuestionMarkDashVerticalBar
743+ | BorrowedToken :: AmpersandLeftAngleBracketVerticalBar
744+ | BorrowedToken :: VerticalBarAmpersandRightAngleBracket
745+ | BorrowedToken :: TwoWayArrow
746+ | BorrowedToken :: LeftAngleBracketCaret
747+ | BorrowedToken :: RightAngleBracketCaret
748+ | BorrowedToken :: QuestionMarkSharp
749+ | BorrowedToken :: QuestionMarkDoubleVerticalBar
750+ | BorrowedToken :: QuestionPipe
751+ | BorrowedToken :: TildeEqual
752+ | BorrowedToken :: AtSign
753+ | BorrowedToken :: ShiftLeftVerticalBar
754+ | BorrowedToken :: VerticalBarShiftRight => Ok ( p ! ( Pipe ) ) ,
755+ BorrowedToken :: Caret
756+ | BorrowedToken :: Sharp
757+ | BorrowedToken :: ShiftRight
758+ | BorrowedToken :: ShiftLeft => Ok ( p ! ( Caret ) ) ,
759+ BorrowedToken :: Ampersand => Ok ( p ! ( Ampersand ) ) ,
760+ BorrowedToken :: Plus | BorrowedToken :: Minus => Ok ( p ! ( PlusMinus ) ) ,
761+ BorrowedToken :: Mul
762+ | BorrowedToken :: Div
763+ | BorrowedToken :: DuckIntDiv
764+ | BorrowedToken :: Mod
765+ | BorrowedToken :: StringConcat => Ok ( p ! ( MulDivModOp ) ) ,
766+ BorrowedToken :: DoubleColon
767+ | BorrowedToken :: ExclamationMark
768+ | BorrowedToken :: LBracket
769+ | BorrowedToken :: CaretAt => Ok ( p ! ( DoubleColon ) ) ,
770+ BorrowedToken :: Arrow
771+ | BorrowedToken :: LongArrow
772+ | BorrowedToken :: HashArrow
773+ | BorrowedToken :: HashLongArrow
774+ | BorrowedToken :: AtArrow
775+ | BorrowedToken :: ArrowAt
776+ | BorrowedToken :: HashMinus
777+ | BorrowedToken :: AtQuestion
778+ | BorrowedToken :: AtAt
779+ | BorrowedToken :: Question
780+ | BorrowedToken :: QuestionAnd
781+ | BorrowedToken :: CustomBinaryOperator ( _) => Ok ( p ! ( PgOther ) ) ,
772782 _ => Ok ( self . prec_unknown ( ) ) ,
773783 }
774784 }
0 commit comments