
    N.hx                        d dl mZmZ d dlmZ d dlmZmZmZ d dl	m
Z
mZmZ ereZ G d d      Z eej"                  ej$                  ej&                  ej(                  ej*                  ej,                  ej.                  ej0                  ej2                  g	      Zi dej6                  dej8                  d	ej:                  d
ej<                  dej>                  dej@                  dejB                  dejD                  dejF                  dejH                  dejJ                  dejL                  dejN                  dejP                  dejR                  dejT                  dejV                  ejX                  ej$                  ej&                  ej(                  ej*                  ej,                  ej.                  ej0                  ej2                  ej"                  ejZ                  ej\                  ej^                  dZ0 G d d      Z1d Z2d Z3d Z4d Z5d Z6d  Z7d! Z8d" Z9 G d# d$      Z:d(d%Z;d& Z<y'))   )STRING_TYPESPY3)Scalar)ColumnIdentifierDocumentPathItemExpr)ColumnOrder
Projectionc                      e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d*Z,d+Z-d,Z.d-Z/d.Z0d/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6Z8d7Z9d8Z:d9Z;d:Z<d;Z=d<Z>d=Z?d>Z@d?ZAd@ZBdAZCyB)C	TokenTyper                        	   
                                                                      !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /   0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   @   A   N)D__name__
__module____qualname__NOTANDORXORISLPARENRPAREN
LSQBRACKET
RSQBRACKETBETWEENTRUENULLFALSEINLIKEINTERVALREGEXPESCAPEIDENTLSTRINGLNUMDOTDOLLARCOMMAEQNEGTGELTLEBITANDBITORBITXORLSHIFTRSHIFTPLUSMINUSMULDIVHEXBINNEGBANGMICROSECONDSECONDMINUTEHOURDAYWEEKMONTHQUARTERYEAREROTEME
DOUBLESTARMODCOLONORORANDANDLCURLYRCURLYCASTDOTSTARORDERBY_ASCORDERBY_DESCAS     _/var/www/html/School_Mangement_New/src/backend/venv/lib/python3.12/site-packages/mysqlx/expr.pyr   r   "   sG   
C
C	
B
C	
BFFJJGDDE	BDHFFEGD
CFE	B	B	B	B	B	BFEFFFDE
C
C
C
C
CDKFFD
CDEGDGJ
CEDFFFDGKL	Br   r   andorxorisnotlikeinregexpbetweenintervalescapecastdivhexbintruefalse)nullsecondminutehourdayweekmonthquarteryearmicrosecondascdescasc                        e Zd ZddZd Zd Zy)Tokenc                 .    || _         || _        || _        y N)typevallen)selfr   r   r   s       r   __init__zToken.__init__   s    	r   c                 "    | j                         S r   )__str__r   s    r   __repr__zToken.__repr__       ||~r   c                 *   | j                   t        j                  k(  s:| j                   t        j                  k(  s| j                   t        j                  k(  r(t        | j                         dz   | j                  z   dz   S t        | j                         S )N())r   r   rc   re   rd   strr   r   s    r   r   zToken.__str__   sb    99	'499	+F99	)))tyy>C'$((2S88tyy>!r   N)r   )rN   rO   rP   r   r   r   r   r   r   r   r      s    
"r   r   c                  6    t        t         j                        S )Nr   )r   V_NULLr   r   r   build_null_scalarr      s    v}}%%r   c                 8    t        t         j                  |       S )N)r   v_double)r   V_DOUBLE)ds    r   build_double_scalarr      s    v33r   c                 8    t        t         j                  |       S )N)r   v_signed_int)r   V_SINT)is    r   build_int_scalarr      s    v}}155r   c                     t        | t              rt        t        | d            } t	        t        j
                  t	        j                  |             S )Nzutf-8)value)r   v_string)
isinstancer   bytes	bytearrayr   V_STRINGString)ss    r   build_string_scalarr      s7    !\")Aw'(vQ1GHHr   c                 R    t               }t         j                  |_        | |_        |S r   )r   V_BOOLr   v_bool)br   s     r   build_bool_scalarr      s     A]]AFAHHr   c                 z    t               }t         j                  |_        |j                  j	                  |        |S r   )r   LITERALr   literalCopyFrom)anyvales     r   build_literal_exprr      s+    A\\AFIIvHr   c                     t               }t         j                  |_        | |j                  _        |j                  j
                  j                         j                  |       |S r   )r   OPERATORr   operatornameparamaddr   )r   r   r   s      r   build_unary_opr      sE    A]]AFAJJOJJ##E*Hr   c                 &    | j                  dd      S )N"z"")replace)strings    r   escape_literalr      s    >>#t$$r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)y())
ExprParserc                 x    || _         g | _        d| _        || _        i | _        d| _        | j                          y )N    )r   tokenspos_allowRelationalColumnsplaceholder_name_to_positionpositional_placeholder_countlex)r   r   allowRelationals      r   r   zExprParser.__init__   s8    '6$,.),-)
r   c                 f    |dz   t        | j                        k  xr | j                  |dz      |k(  S Nr   )r   r   )r   r   cs      r   next_char_iszExprParser.next_char_is   s1    1us4;;''CDKKA,>!,CCr   c                    |}d}|t        | j                        k  r| j                  |   j                         s| j                  |   dk(  rq| j                  |   dk(  r|du rt        d      d}|dz   }|t        | j                        k  r1| j                  |   j                         r^| j                  |   dk(  rq| j                  || }t	        t
        j                  |t        |            }|S )NF.Tz"Invalid number. Found multiple '.'r   )r   r   isdigit
ValueErrorr   r   re   )r   r   start	found_dotr   ts         r   
lex_numberzExprParser.lex_number   s    	C$$$++c*:*B*B*D*.++c*:c*A{{33&$$%IJJ 	 'C C$$$++c*:*B*B*D*.++c*:c*A kk%$)..#s3x0r   c                 .   |}|t        | j                        k  r}| j                  |   j                         s| j                  |   dk(  rN|dz   }|t        | j                        k  r1| j                  |   j                         r;| j                  |   dk(  rN| j                  || }	 t        t        |j                            |j                         t        |            }|S # t        $ r( t        t        j                  |t        |            }Y |S w xY w)N_r   )
r   r   isalnumr   reservedWordslowerupperKeyErrorr   rc   )r   r   r  r   tokens        r   	lex_alphazExprParser.lex_alpha   s    #dkk""A(>(>(@(,A#(=AA #dkk""A(>(>(@(,A#(=kk%"	:-		4ciik3s8LE   	:)//3C9E	:s   (9C# #-DDc                    | j                   |   }d}|dz  }|}|t        | j                         k  r| j                   |   }||k(  r1|dz   t        | j                         k  r| j                   |dz      |k7  rna||k(  s|dk(  r4|dz   t        | j                         k\  rn;|dz   }|| j                   |   z   }n||z   }|dz   }|t        | j                         k  r|t        | j                         k\  s| j                   |   |k7  rt        dj                  |            |dk(  r't	        t
        j                  |t        |      dz         S t	        t
        j                  |t        |      dz         S )N r   \z*Unterminated quoted string starting at {0}`r   )r   r   r  formatr   r   rc   rd   )r   r   
quote_charr   r  r  s         r   lex_quoted_tokenzExprParser.lex_quoted_token   sU   [[^
	Q#dkk""AAJ1q53t{{+;#;{{1q5!Z/jAIq5C,,EDKKN*AgAA #dkk"" DKK  DKKNj$@   &u/ /#s3xz::**CS!<<r   c                 6   d}|t        | j                        k  r| j                  |   }|j                         r|dz  }>|j                         r| j	                  |      }nq|j                         s|dk(  r| j                  |      }nI|dk(  rt        t        j                  |      }n(|dk(  rt        t        j                  |      }n|dk(  rt        t        j                  |      }n|dk(  rt        t        j                  |      }n|dk(  rt        t        j                  |      }n|d	k(  rt        t        j                  |       n|d
k(  rJ| j                  |d
      rt        t        j                   d      }nPt        t        j"                  |      }n4|dk(  rt        t        j$                  |      }n|dk(  rt        t        j&                  |      }n|dk(  rt        t        j(                  |      }n|dk(  rL| j                  |d      rt        t        j*                  dd      }nt        t        j*                  dd      }n|dk(  rJ| j                  |d      rt        t        j,                  |      }nMt        t        j.                  |      }n1|dk(  rJ| j                  |d      rt        t        j0                  d      }nt        t        j2                  |      }n|dk(  rt        t        j4                  |      }n|dk(  rt        t        j6                  |      }n|dk(  rt        t        j8                  |      }n|dk(  rt        t        j:                  |      }n^|dk(  rt        t        j<                  |      }n=|dk(  rt        t        j>                  |      }n|dk(  rJ| j                  |d      rt        t        j@                  d      }nt        t        jB                  |      }n|dk(  rx| j                  |d      rt        t        jD                  d      }n| j                  |d      rt        t        jF                  d      }nlt        t        jH                  |      }nP|d k(  rv| j                  |d       rt        t        jJ                  d!      }n| j                  |d      rt        t        jL                  d"      }nt        t        jN                  |      }n|d#k(  r| j                  |d
      rt        t        jP                  d$      }n|dz   t        | j                        k  r2| j                  |dz      j                         r| j	                  |      }nVt        t        jR                  |      }n;|d%k(  s
|d&k(  s|d'k(  r| jU                  |      }ntW        d(jY                  |            | jZ                  j]                         ||j                   z  }|t        | j                        k  ry y ))Nr   r   r  ?:{}+-*z**/$%=z==r   &|z||r   r   []~,!z!=<z<<z<=>z>>z>=r  z.*r   'r  zUnknown character at {0})/r   r   isspacer  r  isalphar  r   r   r   r   r   r   rt   ru   r  r   rv   rw   rg   r   ri   r   ro   r   rp   rV   rW   rX   rY   rz   rh   rj   r{   rr   rn   rm   rs   rl   rk   r   rf   r  r  r  r   append)r   r   r  r  s       r   r   zExprParser.lex  s   #dkk""AAyy{Q*Sq)ci//3ciooq1ci..2ci..2cinna0ciooq)c$$Q,!)"6"6=E!)--3EcimmQ/ci..2cimmQ/c$$Q,!),,a8E!),,a8Ec$$Q,!)"2"2A6E!)"2"2A6Ec$$Q,!)..$7E!)//15Eci..2ci..2ci22A6ci22A6cimmQ/ciooq1c$$Q,!),,5E!)..!4Ec$$Q,!)"2"2D9E&&q#.!),,5E!),,2Ec$$Q,!)"2"2D9E&&q#.!),,5E!),,2Ec$$Q,!)"3"3T:EUS--$++a!e2D2L2L2N OOA.E!)--3EcQ#Xc--a0 !;!B!B1!EFFKKu%NAu #dkk""r   c                 X   | j                   t        | j                        k\  r%t        dj	                  || j                               | j                  | j                      j
                  |k7  r=t        dj	                  || j                   | j                  | j                                  y )Nz5Expected token type {0} at pos {1} but no tokens leftz5Expected token type {0} at pos {1} but found type {2})r   r   r   r  r  r   r   r   s     r   assert_cur_tokenzExprParser.assert_cur_tokenw  s    88s4;;'' ++16$+AC C;;txx %%- ((.tTXX/3{{488/D)FG G .r   c                 :    | j                  | j                  |      S r   pos_token_type_isr   r6  s     r   cur_token_type_iszExprParser.cur_token_type_is  s    %%dhh55r   c                 @    | j                  | j                  dz   |      S r  r9  r6  s     r   next_token_type_iszExprParser.next_token_type_is  s    %%dhhlD99r   c                 n    |t        | j                        k  xr | j                  |   j                  |k(  S r   )r   r   r   )r   r   r   s      r   r:  zExprParser.pos_token_type_is  s/    S%%G$++c*:*?*?4*GGr   c                     | j                  |       | j                  | j                     j                  }| j                  dz   | _        |S r  )r7  r   r   r   )r   r   vs      r   consume_tokenzExprParser.consume_token  s<    d#KK!%%88a<r   c                    g }| j                  t        j                         | j                  t        j                        s|j                  | j                                | j                  t        j                        rS| j                  dz   | _        |j                  | j                                | j                  t        j                        rS| j                  t        j                         |S )z{Parse a paren-bounded expression list for function arguments or IN
        list and return a list of Expr objects.
        r   )	rA  r   rV   r;  rW   r4  exprrh   r   )r   exprss     r   paren_expr_listzExprParser.paren_expr_list  s     9++,%%i&6&67LL%((988a<TYY[) ((9 	9++,r   c                    | j                  t        j                         t               }| j	                  t        j
                        rC| j                  t        j                        |_        | j                  t        j
                         | j                  | j                     j                  |_        | j                  dz   | _	        |S r  )r7  r   rc   
Identifierr=  rf   rA  schema_namer   r   r   r   )r   ids     r   
identifierzExprParser.identifier  s    ioo.\""9==1!//	@BNy}}-++dhh'++88a<	r   c                    t               }t         j                  |_        |j                  j                  j                  | j                                |j                  j                  j                  | j                                |S r   )
r   	FUNC_CALLr   function_callr   r   rJ  r   extendrE  )r   r   s     r   rM  zExprParser.function_call  sY    F	%%doo&78	$$T%9%9%;<r   c                    | j                  t        j                         | j                  | j                     }|j
                  t        j                  k(  r|j                  j                  d      r?|j                  j                  d      r$t        dj                  |j                              | j                  t        j                         |j                  }nw| j                  j
                  t        j                  k(  r,| j                  t        j                         |j                  }n$t        dj                  | j                              t        t        j                   |      }|S )Nr  z-{0} is not a valid JSON/ECMAScript identifierzBExpected token type IDENT or LSTRING in JSON path at token pos {0}r   r   )rA  r   rf   r   r   r   rc   r   
startswithendswithr  r  r   r  rd   r   MEMBER)r   r  
memberNameitems       r   docpath_memberzExprParser.docpath_member  s   9==)DHH%::(yy##C(UYY-?-?-D  "..4fU[[.AC Cy/JZZ__	 1 11y001J 55;VDHH5EG G%5%<%<JOr   c                    | j                  t        j                         | j                  t        j                        r9| j                  t        j
                         t        t        j                        S | j                  t        j                        rt        | j                  t        j                              }|dk  r$t        dj                  | j                              | j                  t        j
                         t        t        j                  |      S t        dj                  | j                              )Nr   r   z%Array index cannot be negative at {0})r   indexzJException token type MUL or LNUM in JSON path array index at token pos {0})rA  r   rX   r;  rv   rY   r   ARRAY_INDEX_ASTERISKre   int
IndexErrorr  r   ARRAY_INDEXr  )r   r@  s     r   docpath_array_loczExprParser.docpath_array_loc  s    9//0!!)--0y334#)9)N)NOO##INN3D&&y~~67A1u  "$$*F488$46 6y334#)9)E)EQOO   &txx 02 2r   c                    t               }| j                  t        j                        rR|j                  j                  t        t        j                  | j                  t        j                              g       |j                  j                  | j	                                t        t        j                  |      S )NrP  )r   rJ  )
r   r;  r   rc   document_pathrN  r   rS  rA  r   )r   cols     r   document_fieldzExprParser.document_field  s     !!)//2$$ &6&=&='+'9'9)//'JL&M N 	  !3!3!5644r   c                 ^   g }	 | j                  t        j                        r!|j                  | j	                                n| j                  t        j
                        rI| j                  t        j
                         |j                  t        t        j                               n| j                  t        j                        r |j                  | j                                ni| j                  t        j                        rI| j                  t        j                         |j                  t        t        j                               nnRt        |      }|dkD  rG||dz
     j                  t        j                  k(  r$t        dj!                  | j"                              |S )zParse a JSON-style document path, like WL#7909, but prefix by @.
        instead of $. We parse this as a string because the protocol doesn't
        support it. (yet)
        r   r   r   z$JSON path may not end in '**' at {0})r;  r   rf   r4  rV  r   rA  r   MEMBER_ASTERISKrX   r]  r   DOUBLE_ASTERISKr   r   r  r  r   )r   docpathitemss      r   r_  zExprParser.document_path  sF   
 %%imm4t2245''	(9(9:""9#4#45/)99 ; <''	(<(<=t5578''	(<(<=""9#7#78/)99 ; <   G19q)..++,   &txx 02 2r   c                    g }|j                  | j                  t        j                               | j	                  t        j
                        rm| j                  t        j
                         |j                  | j                  t        j                               | j	                  t        j
                        rmt        |      dkD  r$t        dj                  | j                              |j                          t               }t        dt        |            D ]2  }|dk(  r|d   |_        |dk(  r|d   |_        #|dk(  s)|d   |_        4 | j	                  t        j                         r4| j                  t        j                          | j#                         |_        t%               }t$        j                  |_        |j(                  j+                  |       |S )Nr   z#Too many parts to identifier at {0}r   r   r   )r4  rA  r   rc   r;  rf   r   r  r  r   reverser   xranger   
table_namerH  rg   r_  r   r   rJ  r   )r   partscolidr   r   s        r   column_identifierzExprParser.column_identifier  si   T''	89$$Y]]3y}}-LL++IOO<= $$Y]]3 u:>   &txx 02 2 "3u:& 	-AAv"1X
a#(8 a$)!H!	- !!)"2"23y//0"&"4"4"6EF	e$r   c                     | j                   t        | j                        k\  rt        d      | j                  | j                      }| xj                   dz  c_         |S )NzUnexpected end of token streamr   )r   r   r   r  )r   r
  s     r   
next_tokenzExprParser.next_token  sG    HHDKK((=>>KK!Ar   c                 v    | j                         }|j                  |k7  rt        dj                  |            y )NzExpected token type {0})ro  r   r  r  )r   
token_typer
  s      r   expect_tokenzExprParser.expect_token  s6    OO66Z6==jIJJ  r   c                     t               }y r   )Object)r   os     r   parse_json_doczExprParser.parse_json_doc  s	    Hr   c                    d}| j                  t        j                        r | j                  t        j                        }n| j                  t        j
                        r | j                  t        j
                        }nW|j                  t        j                  k(  rt        | j                        }n$t        dj                  | j                              |j                         }t        t        j                        }|| j                   v r| j                   |   |_        |S | j                  |_        | j                  | j                   |<   | xj                  dz  c_	        |S )Nr  z)Invalid placeholder name at token pos {0}r   r   )r;  r   re   rA  LNUM_INTrc   r   r   r   r   r  r  r   r  r   PLACEHOLDERr   position)r   r  place_holder_namerC  s       r   parse_place_holderzExprParser.parse_place_holder!  s&   !!)..1 $ 2 293E3E F##IOO4 $ 2 29?? CZZ9,,, #D$E$E F   &txx 02 2 .335))* A AA112CD M 	 !==DM11 --.?@--2-r   c                 
   | j                         }|j                  t        j                  t        j                  fv r| j                  |      S |j                  t        j                  k(  r| j                         S |j                  t        j                  k(  rn;|j                  t        j                  k(  r1| j                         }| j                  t        j                         |S |j                  t        j                  t        j                  fv rn|j                  t        j                  t        j                  fv r| j                         }|j                  t        j                   k(  rE|j"                  |j"                  z   | j$                  | j&                     _        | j)                         S t+        |j"                  | j)                               S |j                  t        j,                  t        j.                  t        j0                  fv r$t+        |j"                  | j)                               S |j                  t        j2                  k(  rt5        t7        |j"                              S |j                  t        j8                  k(  rt5        t;                     S |j                  t        j                   k(  r\d|j"                  v r't5        t=        t?        |j"                                    S t5        tA        tC        |j"                                    S |j                  t        jD                  t        jF                  fv r/t5        tI        |j                  t        jD                  k(              S |j                  t        jJ                  k(  r| jM                         S |j                  t        jN                  k(  r| jQ                         S |j                  t        jR                  k(  r| j&                  dz
  | _        | jU                  t        j                        sy| jU                  t        jV                        rj| jY                  | j&                  dz   t        jR                        r=| jY                  | j&                  dz   t        j                        r| j[                         S | j\                  s| jM                         S | j_                         S ta        djc                  |j                  | j&                              )z<Parse an atomic expression and return a protobuf Expr objectr  r   r   r   zAUnknown token type = {0}  when expecting atomic expression at {1})2ro  r   r   r   r   r|  r   rv  r   rV   rC  rr  rW   rt   ru   
peek_tokenre   r   r   r   atomic_exprr   rQ   rz   r{   rd   r   r   r\   r   r   floatr   rZ  r[   r]   r   rg   ra  rv   starOperatorrc   r=  rf   r:  rM  r   rm  r  r  )r   r  r   peeks       r   r  zExprParser.atomic_expr9  sx   !::)++Y__==**511ZZ9+++&&((ZZ9>>)ZZ9+++		Ai../HZZINNIOO<<ZZINNIOO<<??$DyyINN*,1II,@DHH%)''))!%))T-=-=-?@@ZZIMM9==)..II!%))T-=-=-?@@ZZ9,,,%&9%))&DEEZZ9>>)%&7&9::ZZ9>>)eii)'eii(89; ; **:3uyy>*JKKZZINNIOO<<%!%**	">?A AZZ9+++&&((ZZ9==($$&&ZZ9??*xx!|DH&&y'7'78''	6%%dhhlIOOD%%dhhlI4D4DE))++  $;; ++- 7!3357&  --3VEJJ-IK 	Kr   c                     |       }| j                   t        | j                        k  rA| j                  | j                      j                  |v rt	               }t        j
                  |_        | j                  | j                      j                  |j                  _        |j                  j                  j                         j                  |       | j                   dz   | _         |j                  j                  j                         j                   |              |}| j                   t        | j                        k  r'| j                  | j                      j                  |v r|S )z}Given a `set' of types and an Expr-returning inner parser function,
        parse a left associate binary operator expressionr   )r   r   r   r   r   r   r   r   r   r   r   r   )r   typesinner_parserlhsr   s        r   parse_left_assoc_binary_op_exprz*ExprParser.parse_left_assoc_binary_op_expr  s     nxx#dkk**{{488$))U2A]]AF"kk$((377AJJOJJ  "++C0xx!|DHJJ  "++LN;C xx#dkk**{{488$))U2 
r   c                     | j                  t        t        j                  t        j                  t        j
                  g      | j                        S r   )r  setr   rv   rw   r   r  r   s    r   mul_div_exprzExprParser.mul_div_expr  s9    33	y}}=> 	r   c                     | j                  t        t        j                  t        j                  g      | j
                        S r   )r  r  r   rt   ru   r  r   s    r   add_sub_exprzExprParser.add_sub_expr  s4    3312D4E4EG 	Gr   c                     | j                  t        t        j                  t        j                  g      | j
                        S r   )r  r  r   rr   rs   r  r   s    r   
shift_exprzExprParser.shift_expr  s8    33!!9#3#345t7H7HJ 	Jr   c                     | j                  t        t        j                  t        j                  t        j
                  g      | j                        S r   )r  r  r   ro   rp   rq   r  r   s    r   bit_exprzExprParser.bit_expr  s;    33!!9??I4D4DEFOO 	r   c           
          | j                  t        t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      | j                        S r   )
r  r  r   rl   rk   rn   rm   ri   rj   r  r   s    r   	comp_exprzExprParser.comp_expr  sN    33y||Y\\9<<y||- ./3}}> 	>r   c                    | j                         }d}| j                  t        j                        r!d}| j	                  t        j                         | j
                  t        | j                        k  rj|g}| j                  | j
                     j                  }| j                  t        j                        r| j	                  t        j                         | j                  t        j                        r!d}| j	                  t        j                         |j                  | j                                n>| j                  t        j                        r@| j	                  t        j                         |j                  | j                                n| j                  t        j                        r| j	                  t        j                         |j                  | j                                | j                  t        j                        rb| j	                  t        j                         |j                  | j                                n"| j                  t        j                         r}| j	                  t        j                          |j                  | j                                | j	                  t        j"                         |j                  | j                                n| j                  t        j$                        r?| j	                  t        j$                         |j                  | j                                n(|r$t'        dj)                  | j
                              d }|ret+               }t*        j,                  |_        ||j0                  _        |j0                  j4                  j                  |       |rt7        d|      }|}|S )NFTz"Unknown token after NOT as pos {0}rQ   )r  r;  r   rQ   rA  r   r   r   r   rU   r4  r^   rN  rE  r_   rb   rZ   rR   ra   r  r  r   r   r   r   r   r   r   )r   r  is_notparamsop_namer   s         r   	ilri_exprzExprParser.ilri_expr  s   nn!!)--0Fy}}-88c$++&&UFkk$((+//G%%ill3""9<<0)))--8!F&&y}}5dnn./''	5""9<<0d2245''	7""9>>2dnn./)))*:*:;&&y'7'78MM$.."23''	(9(9:""9#4#45dnn./""9==1dnn./''	(8(89""9#3#34dnn./$ &((.txx(8: :F")



  ''/&ua0A
r   c                     | j                  t        t        j                  t        j                  g      | j
                        S r   )r  r  r   rR   r   r  r   s    r   and_exprzExprParser.and_expr  s4    33	 0 012DNND 	Dr   c                     | j                  t        t        j                  t        j                  g      | j
                        S r   )r  r  r   rS   r   r  r   s    r   or_exprzExprParser.or_expr  s2    33y~~./@ 	@r   c                 "    | j                         S r   )r  r   s    r   rC  zExprParser.expr  r   r   c                 T    t        | j                  t        j                              S )N)r   )r	   rA  r   rc   r   s    r   parse_table_insert_fieldz#ExprParser.parse_table_insert_field  s    4--ioo>??r   c                 6    | j                         j                  S r   )rm  rJ  r   s    r   parse_table_update_fieldz#ExprParser.parse_table_update_field  s    %%'222r   c                 p   g }d}| j                   t        | j                        k  r|s| j                  t        j
                         d}t        | j                               }| j                  t        j                        rD| j                  t        j                         | j                  t        j                        |_        n9| xj                   dz  c_         | j                  t        j                        |_        |j                  |       | j                   t        | j                        k  r|S )NTF)sourcer   )r   r   r   rA  r   rh   r   rC  r;  r   rc   aliasr4  )r   project_exprfirst
projections       r   parse_table_select_projectionz(ExprParser.parse_table_select_projection  s    hhT[[))""9??3E#499;7J%%ill3""9<<0#'#5#5ioo#F
 A#'#5#5ioo#F
 
+ hhT[[)) r   c                    g }d}| j                   t        | j                        k  r|s| j                  t        j
                         d}t        | j                               }| j                  t        j                        r5t        j                  |_        | j                  t        j                         nS| j                  t        j                        r4t        j                  |_        | j                  t        j                         |j                  |       | j                   t        | j                        k  r|S )NTF)rC  )r   r   r   rA  r   rh   r
   rC  r;  r   ASC	directionr   DESCr4  )r   order_specsr  orders       r   parse_order_speczExprParser.parse_order_spec  s    hhT[[))""9??3Etyy{+E%%i&;&;<"'))""9#8#89''	(>(>?"'**""9#9#9:u% hhT[[)) r   c                    g }d}| j                   t        | j                        k  re|s| j                  t        j
                         d}|j                  | j                                | j                   t        | j                        k  re|S )NTF)r   r   r   rA  r   rh   r4  rC  )r   	expr_listr  s      r   parse_expr_listzExprParser.parse_expr_list  sn    	hhT[[))""9??3ETYY[)	 hhT[[))
 r   N)*rN   rO   rP   r   r  r  r  r  r   r7  r;  r=  r:  rA  rE  rJ  rM  rV  r]  ra  r_  rm  ro  rr  rv  r|  r  r  r  r  r  r  r  r  r  r  rC  r  r  r  r  r  r   r   r   r   r      s    D"
=8\|G6:H&2"586K
0GKR 
GJ
>
/bD@@3""r   r   c                     t        dj                  |              t        | |      }t        |j                         |j	                         }t        |       y )Nz>>>>>>> parsing:  {0})printr  r   r   rC  )expr_stringr   pr   s       r   parseAndPrintExprr    s?    	
!
(
(
56;0A	!((O	A	!Hr   c                      t        d       y )Nzname like :name)r  r   r   r   x_testr     s    '(
r   N)T)=compatr   r   protobuf.mysqlx_datatypes_pb2r   protobuf.mysqlx_expr_pb2r   r   r   protobuf.mysqlx_crud_pb2r	   r
   r   rangeri  r   r  r|   r}   r~   r   r   r   r   r   r   interval_unitsrR   rS   rT   rU   rQ   r_   r^   ra   rZ   r`   rb   r   rw   rx   ry   r[   r]   r\   r   r   r   r  r   r   r   r   r   r   r   r   r   r   r  r  r   r   r   <module>r     s\  0 & 1 N N ? ? FA AF NNMMNNOONN	 				 
	 			
 
	 	 		 	   	!! 	"" 	   	 
	 
	 
	  	!" 	#$     !!((%%&&=D" "&&46I%C	 C	L.*r   