
    :?h                     
   S r SSKJrJrJrJrJrJrJrJ	r	  SSK
Jr  SSKJrJr  SSKJrJr  SSKJrJrJrJrJrJr   " S S	5      r\" \R6                  \R8                  \R:                  \R<                  \R>                  \R@                  \RB                  \RD                  \RF                  \RH                  \RJ                  \RL                  \RN                  \RP                  \RR                  \RT                  \RV                  \RX                  \RZ                  \R\                  /5      r/0 S
\R`                  _S\Rb                  _S\Rd                  _S\Rf                  _S\Rh                  _S\Rj                  _S\Rl                  _S\Rn                  _S\Rp                  _S\Rr                  _S\Rt                  _S\Rv                  _S\Rx                  _S\Rz                  _S\R|                  _S\R~                  _S\R                  _0 S\R                  _S\R                  _S\R8                  _S\R:                  _S\R<                  _S \R>                  _S!\R@                  _S"\RB                  _S#\RD                  _S$\RF                  _S%\R6                  _S&\R                  _S'\R                  _S(\R                  _S)\R                  _S*\R                  _S+\R                  _E0 S,\R                  _S-\R                  _S.\R                  _S/\R                  _S0\R                  _S1\R                  _S2\R                  _S3\RH                  _S4\RJ                  _S5\RL                  _S6\RN                  _S7\RP                  _S8\RR                  _S9\RT                  _S:\RV                  _S;\RX                  _S<\RZ                  _ES=\R\                  0ErP\R                  \Rx                  \R                  \R                  \R                  \R                  \R                  \R                  S>.rQ0 S?S@_S@S@_S
SA_SS_SBSB_SSB_SS_SS_SCSC_SS_SS_SS_SS_SDSD_SESD_SFSF_SGSG_0 SHSH_SISI_SJSJ_SASA_SKSK_SLSL_SMSM_SNSN_SOSO_SPSP_SQSQ_SRSR_SSSS_SS_STST_SS_ErRSUSVSRSSWSX.rSSYSZS[S\S]S^S_S`.rT " Sa Sb5      rUSc\Sd\4Se jrVSc\Sd\4Sf jrWSg\	\\4   Sd\4Sh jrXSi\\   Sd\4Sj jrYSd\4Sk jrZSc\[Sd\4Sl jr\Sc\]Sd\4Sm jr^Sc\]Sd\4Sn jr_Sc\Sd\4So jr`Sc\aSd\4Sp jrbSc\cSd\4Sq jrdSc\Sd\4Sr jreSs\fSt\Sd\4Su jrgSv\fSd\f4Sw jrh " Sx Sy5      rigz){zExpression Parser.    )AnyCallableDictIterableListOptionalSequenceUnion   )DbDoc)
BYTE_TYPESget_item_or_attrMessagemysqlxpb_enum)BuildExprTypesBuildScalarTypesMessageTypeProtobufMessageCextTypeProtobufMessageType
StrOrBytesc                   |   \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSr Sr!S r"S!r#S"r$S#r%S$r&S%r'S&r(S'r)S(r*S)r+S*r,S+r-S,r.S-r/S.r0S/r1S0r2Sr3S1r4S2r5S3r6S4r7S5r8S6r9S7r:S8r;S9r<S:r=S;r>S<r?S=r@S>rAS?rBS@rCSArDSBrESCrFSDrGSErHSFrISGrJSHrKSIrLSJrMSKrNSLrOSMrPSNrQSOrRSPrSSQrTSRrUSSrVSTrWSUrXSVrYSWrZSXr[SYr\SZr]S[r^g\)]	TokenType/   zToken types class.r                        	   
                                                                      !   "   #   $   %   &   '   (   )   *   +   ,   -   .   0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y    N)___name__
__module____qualname____firstlineno____doc__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ARROWQUOTEBINARYDATETIMETIMECHARDATEDECIMALSIGNEDINTEGERUNSIGNEDJSONSECOND_MICROSECONDMINUTE_MICROSECONDMINUTE_SECONDHOUR_MICROSECONDHOUR_SECONDHOUR_MINUTEDAY_MICROSECOND
DAY_SECOND
DAY_MINUTEDAY_HOUR
YEAR_MONTHOVERLAPS__static_attributes__rr       S/var/www/ev-aguas/ev-aguas-proceso/venv/lib/python3.13/site-packages/mysqlx/expr.pyr   r   /   s   
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	BEEFHDDDGFGHDMKKOJJHJHr   r   andorxorisnotlikeinoverlapsregexpbetweenintervalescapecastdivhexbintruefalsenullsecondminutehourdayweekmonthquarteryearmicrosecondascdescasbinarydatetimetimechardatedecimalsignedunsignedintegerjsonsecond_microsecondminute_microsecondminute_secondhour_microsecondhour_secondhour_minuteday_microsecond
day_second
day_minuteday_hour
year_month)r   r   r   r   r   r   r   r   ===&&||^!=<>>>=<<=&|<<>>+-*/~%cont_in	sign_plus
sign_minus!)r  r  r  r   r   is_notnot_between
not_regexpnot_likenot_innot_cont_innot_overlaps)r   r   r   r   r   r  r   c            	       R    \ rS rSrSrSS\S\S\SS4S jjrS\4S	 jrS\4S
 jr	Sr
g)Tokeni   zToken representation class.
token_typevaluelengthreturnNc                 (    Xl         X l        X0l        g N)r*  r+  r,  )selfr*  r+  r,  s       r   __init__Token.__init__#  s    )
!r   c                 "    U R                  5       $ r/  )__str__r0  s    r   __repr__Token.__repr__(  s    ||~r   c                     U R                   [        R                  [        R                  [        R                  4;   a  U R                    SU R
                   S3$ U R                    $ )N())r*  r   r   r   r   r+  r5  s    r   r4  Token.__str__+  sU    ??OONN
 

 oo&a

|155//"#r   )r,  r*  r+  )r   )rs   rt   ru   rv   rw   intstrr1  r6  r4  r   rr   r   r   r)  r)     s>    %"3 "s "C " "
# $ $r   r)  r+  r-  c                    [        S5      n[        U [         5      (       a  U $ [        U [        5      (       a  U R                  SS9$ [        U [        [
        45      (       a,  [        S5      US'   [        U 5      R                  5       US'   U$ [        U [        [        45      (       a,  [        S5      US'   [        U 5      R                  5       US'   U$ [        S	5      US'   [        U 5      R                  5       US
'   U$ )NMysqlx.Expr.ExprT)reparseMysqlx.Expr.Expr.Type.OBJECTtypeobjectMysqlx.Expr.Expr.Type.ARRAYarrayMysqlx.Expr.Expr.Type.LITERALliteral)r   
isinstance
ExprParserexprdictr   r   build_objectget_messagelisttuplebuild_arraybuild_scalarr+  msgs     r   
build_exprrT  8  s    
$
%C%'##%*&&zz$z''%$''#$BCF$U+779H J 
ED%=	)	)#$ABF"5)557G J $$CDF%e,88:IJr   c                    [        U [        5      (       a  [        U 5      $ [        U [        5      (       a  [	        U 5      $ [        U [
        5      (       a  [        U 5      $ [        U [        5      (       a  [        U 5      $ [        U [        5      (       a  [        U 5      $ U c
  [        5       $ [        S[        U 5       35      e)NzUnsupported data type: )rH  r=  build_string_scalarr   build_bytes_scalarboolbuild_bool_scalarr<  build_int_scalarfloatbuild_double_scalarbuild_null_scalar
ValueErrorrB  r+  s    r   rQ  rQ  J  s    %"5))%$$!%((% ''%&&%"5))} ""
.tE{m<
==r   objc                    [        U [        5      (       a  [        U R                  5      $ [	        S5      nU R                  5        Hy  u  p#[	        S5      n[        U[        5      (       a  UR                  5       OUUS'   [        U5      R                  5       US'   US   R                  UR                  5       /5        M{     U$ )NMysqlx.Expr.ObjectMysqlx.Expr.Object.ObjectFieldkeyr+  fld)rH  r   rL  __dict__r   itemsr=  encoderT  rM  extend)r`  rS  rd  r+  pairs        r   rL  rL  Z  s    #uCLL))
&
'Ciik
78&0c&:&:cjjlU"5)557WE
4++-./	 "
 Jr   rE  c                     [        S5      nUS   R                  U  Vs/ sH  n[        U5      R                  5       PM     sn5        U$ s  snf )NMysqlx.Expr.Arrayr+  )r   ri  rT  rM  )rE  rS  r+  s      r   rP  rP  g  sG    
%
&CLeLeUE*668eLMJ Ms   "A	c                  8    [        S5      n [        S5      U S'   U $ )NMysqlx.Datatypes.Scalarz#Mysqlx.Datatypes.Scalar.Type.V_NULLrB  r   rS  s    r   r]  r]  m  s!    
+
,C EFCKJr   c                 @    [        S5      n[        S5      US'   XS'   U$ )Nrn  z%Mysqlx.Datatypes.Scalar.Type.V_DOUBLErB  v_doubler   rR  s     r   r\  r\  s  s(    
+
,C GHCK
OJr   c                 @    [        S5      n[        S5      US'   XS'   U$ )Nrn  z#Mysqlx.Datatypes.Scalar.Type.V_SINTrB  v_signed_intr   rR  s     r   rZ  rZ  z  s)    
+
,C EFCKJr   c                 @    [        S5      n[        S5      US'   XS'   U$ )Nrn  z#Mysqlx.Datatypes.Scalar.Type.V_UINTrB  v_unsigned_intr   rR  s     r   build_unsigned_int_scalarrv    s*    
+
,C EFCK!Jr   c                     [        U [        5      (       a  [        [        U S5      5      n [	        S5      n[        S5      US'   [	        SU S9US'   U$ )Nzutf-8rn  z%Mysqlx.Datatypes.Scalar.Type.V_STRINGrB  zMysqlx.Datatypes.Scalar.Stringr_  v_string)rH  r=  bytes	bytearrayr   r   rR  s     r   rV  rV    sP    %iw/0
+
,C GHCK>eLC
OJr   c                 @    [        S5      n[        S5      US'   XS'   U$ )Nrn  z#Mysqlx.Datatypes.Scalar.Type.V_BOOLrB  v_boolr   rR  s     r   rY  rY    s(    
+
,C EFCKMJr   c                 R    [        S5      n[        S5      US'   [        SU S9US'   U$ )Nrn  z%Mysqlx.Datatypes.Scalar.Type.V_OCTETSrB  zMysqlx.Datatypes.Scalar.Octetsr_  v_octetsr   rR  s     r   rW  rW    s2    
+
,C GHCK>eLC
OJr   c                 @    [        S5      n[        S5      US'   XS'   U$ )Nr?  rF  rB  rG  r   rR  s     r   build_literal_exprr    s(    
$
%C ?@CK	NJr   nameparamc                     [        S5      n[        U    US'   UR                  5       /US'   [        S5      n[        S5      US'   UR                  5       US'   U$ )NMysqlx.Expr.Operatorr  r  r?  Mysqlx.Expr.Expr.Type.OPERATORrB  operator)r   _UNARY_OPERATORSrM  r   )r  r  r  rS  s       r   build_unary_opr    sc    -.H'-HV**,-HW
$
%C @ACK**,C
OJr   stringc                 &    U R                  SS5      $ )N"z"")replacer  s    r   escape_literalr    s    >>#t$$r   c                      \ rS rSrSrSIS\S\SS4S jjrS\4S jrSJS	 jr	S
\
S\S\4S jrS\
S\4S jrSKS\
S\S\4S jjrS
\
S\4S jrSJS jrS\
SS4S jrS\
S\4S jrS\
S\4S jrS\
S\4S jrS\
S\4S jrS\
S\
S\4S jrS\
S\4S jrS\\\\4      4S jrS\4S jrS\4S jrS\4S  jr S\4S! jr!S\4S" jr"S\\\\4      4S# jr#S\4S$ jr$S\4S% jr%S\
SS4S& jr&S\4S' jr'S\4S( jr(S\4S) jr)S\4S* jr*S+\S\4S, jr+S\4S- jr,S\4S. jr-SKS/\S\.\   4S0 jjr/\0S\4S1 j5       r1S\4S2 jr2S\3\
   S3\4/ \4   S\4S4 jr5S\4S5 jr6S\4S6 jr7S\4S7 jr8S\4S8 jr9S\4S9 jr:S\4S: jr;S\4S; jr<S\4S< jr=S\4S= jr>S\4S> jr?SKS?\S\4S@ jjr@SKS?\S\4SA jjrAS\4SB jrBS\C4SC jrDS\\   4SD jrES\\\\4      4SE jrFS\\\\4      4SF jrGS\\\\4      4SG jrHSHrIg)LrI  i  zExpression parser class.r  allow_relationalr-  Nc                     Xl         / U l        / U l        SU l        X l        0 U l        SU l        U R                  5         U R                  5         g Nr   )	r  tokenspath_name_queuepos_allow_relational_columnsplaceholder_name_to_positionpositional_placeholder_countclean_expressionlex)r0  r  r  s      r   r1  ExprParser.__init__  sH    !#%*,/?&<>)12)
r   c                 "    SU R                    S3$ )Nz<mysqlx.ExprParser 'z'>r  r5  s    r   r4  ExprParser.__str__  s    %dkk]"55r   c                    [        U R                  [        5      (       d  [        U R                  5      U l        U R                  R	                  S5      U l        [        U R                  5      S:  a'  U R                  S   S:X  a  U R                  SS U l        SU R                  SS R                  5       ;   a  U R                  SS U l        SU R                  SS	 R                  5       ;   a  U R                  S	S U l        gg)
zRemoves the keywords that does not form part of the expression.

Removes the keywords "SELECT" and "WHERE" that does not form part of
the expression itself.
 r   ;NSELECTr   WHEREr   )rH  r  r=  reprstriplenupperr5  s    r   r  ExprParser.clean_expression  s     $++s++t{{+DKkk'',t{{aDKKOs$:++cr*DKt{{2A,,..++ab/DKdkk"1o++--++ab/DK .r   rd  r   c                 p    US-   [        U R                  5      :  =(       a    U R                  US-      U:H  $ Nr   )r  r  )r0  rd  r   s      r   next_char_isExprParser.next_char_is  s1    QwT[[))Jdkk#'.Bd.JJr   r  c                    UnSnU[        U R                  5      :  a  U R                  U   R                  5       (       d  U R                  U   S:X  a|  U R                  U   S:X  a  USL a  [        S5      eSnUS-  nU[        U R                  5      :  a9  U R                  U   R                  5       (       a  Mg  U R                  U   S:X  a  M|  U R                  X! n[	        [
        R                  U[        U5      5      $ )NF.Tz"Invalid number. Found multiple '.'r   )r  r  isdigitr^  r)  r   r   )r0  r  start	found_dotvals        r   
lex_numberExprParser.lex_number  s    	C$$KK$$&&$++c*:c*A{{33&$$%IJJ 	 1HC C$$KK$$&&$++c*:c*A kk%$Y^^S#c(33r   iallow_spacec                    UnU[        U R                  5      :  a  U R                  U   R                  5       (       d<  U R                  U   S:X  d)  U R                  U   R                  5       (       a  U(       a  US-  nU[        U R                  5      :  ad  U R                  U   R                  5       (       a  MB  U R                  U   S:X  a  MW  U R                  U   R                  5       (       a	  U(       a  M  U R                  X1 n U[        U R                  5      :  aQ  U R                  U   S:X  a>  UR	                  5       [
        ;  a&  [        [        R                  U[        U5      5      nU$ [        [        UR	                  5          UR	                  5       [        U5      5      n U$ ! [         a(    [        [        R                  U[        U5      5      n U$ f = f)N_r   r9  )r  r  isalnumisspacelower%_SQL_FUNTION_RESERVED_WORDS_COLLISIONr)  r   r   _RESERVED_WORDSKeyError)r0  r  r  r  r  tokens         r   	lex_alphaExprParser.lex_alpha  sp   #dkk""KKN""$${{1~$A&&(([FA #dkk""KKN""$${{1~$A&&(([[ kk%"
	:C$$KKNc)IIK'LLioosCH=
  ociik:CIIKSR   	:)//3C9E	:s   A(F1 59F1 1.G#"G#c                    U R                   U   nSnUS-  nUnU[        U R                   5      :  a  U R                   U   nXR:X  a3  US-   [        U R                   5      :  a  U R                   US-      U:w  a  O_XRS4;   a4  US-   [        U R                   5      :  a  O;US-  nX0R                   U   -  nOX5-  nUS-  nU[        U R                   5      :  a  M  U[        U R                   5      :  d  U R                   U   U:w  a  [        SU 35      eUS:X  a'  [        [        R
                  U[        U5      S-   5      $ [        [        R                  U[        U5      S-   5      $ )N r   \z'Unterminated quoted string starting at `r   )r  r  r^  r)  r   r   r   )r0  rd  
quote_charr  r  r   s         r   lex_quoted_tokenExprParser.lex_quoted_token  sM   [[%
qC$$;;s#D"!Gc$++..KKa(J6 D))7c$++..q{{3''1HC# C$$$ #dkk""dkk#&6*&DFugNOO#s3x!|<<Y&&SX\::r   c                    SnSnSnU[        U R                  5      :  Ga  U R                  U   nUR                  5       (       a  US-  nME  UR                  5       (       a  U R	                  U5      nGOUR                  5       (       d  US:X  a  U R                  X5      nGOWUS:X  a  [        [        R                  U5      nGO5US:X  a  [        [        R                  U5      nGOUS:X  a  [        [        R                  U5      nGOUS:X  a  [        [        R                  U5      nGOUS	:X  a  [        [        R                  U5      nGOUS
:X  aY  U R                  US5      (       a&  U(       d  [        [        R                  SS5      nSnGOj[        [        R                   U5      nGONUS:X  aP  U R                  US5      (       a  [        [        R"                  SS5      nGO[        [        R$                  U5      nGOUS:X  a  [        [        R&                  U5      nGOUS:X  a  [        [        R(                  U5      nGOUS:X  a  [        [        R*                  U5      nGOUS:X  aQ  U R                  US5      (       a  [        [        R,                  SS5      nGOX[        [        R,                  SS5      nGO;US:X  aP  U R                  US5      (       a  [        [        R.                  SS5      nGO[        [        R0                  U5      nGOUS:X  a  [        [        R2                  U5      nGOUS:X  aP  U R                  US5      (       a  [        [        R4                  SS5      nGO[        [        R6                  U5      nGOmUS:X  a  [        [        R8                  U5      nGOKUS:X  a  [        [        R:                  U5      nGO)US:X  a  [        [        R<                  U5      nGOUS:X  a  [        [        R>                  U5      nGOUS:X  a  [        [        R@                  U5      nGOUS :X  a  [        [        RB                  U5      nGOUS!:X  aP  U R                  US5      (       a  [        [        RD                  S"S5      nGOg[        [        RF                  U5      nGOKUS#:X  a  U R                  US5      (       a  [        [        RD                  S$S5      nGOU R                  US#5      (       a  [        [        RH                  S%S5      nGOU R                  US5      (       a  [        [        RJ                  S&S5      nGO[        [        RL                  U5      nGOUS:X  a  U R                  US5      (       a  [        [        RN                  S'S5      nGOSU R                  US5      (       a  [        [        RP                  S(S5      nGO[        [        RR                  U5      nGOUS):X  a  U R                  US5      (       a  [        [        RT                  S*S5      nOUS-   [        U R                  5      :  a7  U R                  US-      R                  5       (       a  U R	                  U5      nOw[        [        RV                  U5      nO\US+;   a0  U(       a)  [        [        RX                  U5      nU(       d  SnO+SnSnO&US,;   a  U R[                  U5      nO[]        S-U 35      eU R^                  Ra                  U5        XRb                  -  nU[        U R                  5      :  a  GM  g g ).Nr   Fr   r  ?:{}r  r  r  z->r   Tr  z**r  $r  r  r	  r  r
  r  r  r  r9  r:  []r  ,r   r  r  r  r  r  r  r  r  z.*)'r  )r  r  r  zUnknown character at )2r  r  r  r  r  isalphar  r)  r   r   r   r   r   r   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r^  r  appendr,  )r0  r  
arrow_lastinside_arrowr   r  s         r   r  ExprParser.lex  sS   
#dkk"";;q>D||~~Q||~~*43;q7i//6ioot4i..5i..5innd3$$Q,,Z!)//4;E!%J!)//48E$$Q,,!)"6"6a@E!)--6EimmT2i..5immT2$$Q,,!),,a8E!),,a8E$$Q,,!)"2"2D!<E!)"2"2D9Ei..5$$Q,,!)..$:E!)//48Ei..5i..5i22D9i22D9immT2ioot4$$Q,,!),,a8E!)..$7E$$Q,,!),,a8E&&q#..!)"2"2D!<E&&q#..!),,a8E!),,5E$$Q,,!)"2"2D!<E&&q#..!),,a8E!),,5E$$Q,,!)"3"3T1=EUS--$++a!e2D2L2L2N2N OOA.E!)--6E#
ioot4##'L!&J#(L(--a0 #8!<==KKu%AS #dkk"""r   r*  c           
      T   U R                   [        U R                  5      :  a  [        SU SU R                    S35      eU R                  U R                      R                  U:w  aB  [        SU SU R                    SU R                  U R                       SU R                   35      eg )NExpected token type z at pos z but no tokens leftz but found type z, on tokens )r  r  r  r^  r*  r0  r*  s     r   assert_cur_tokenExprParser.assert_cur_token  s    88s4;;''&zl(488* E   ;;txx ++z9&zl(488* EDHH-.l4;;-I  :r   c                 :    U R                  U R                  U5      $ r/  pos_token_type_isr  r  s     r   cur_token_type_isExprParser.cur_token_type_is  s    %%dhh
;;r   typesc                     U R                   [        U R                  5      :  =(       a&    U R                  U R                      R                  U;   $ r/  r  r  r  r*  r0  r  s     r   cur_token_type_inExprParser.cur_token_type_in  s8    xx#dkk**Xt{{488/D/O/OSX/XXr   c                 @    U R                  U R                  S-   U5      $ r  r  r  s     r   next_token_type_isExprParser.next_token_type_is  s    %%dhhlJ??r   c                     U R                   [        U R                  5      :  =(       a)    U R                  U R                   S-      R                  U;   $ r  r  r  s     r   next_token_type_inExprParser.next_token_type_in  s@    HHs4;;'' >DHHqL)44=	
r   c                 x    U[        U R                  5      :  =(       a    U R                  U   R                  U:H  $ r/  )r  r  r*  )r0  r  r*  s      r   r  ExprParser.pos_token_type_is  s/    S%%S$++c*:*E*E*SSr   c                     U R                  U5        U R                  U R                     R                  nU =R                  S-  sl        U$ r  )r  r  r  r+  )r0  r*  r+  s      r   consume_tokenExprParser.consume_token  s:    j)DHH%++Ar   c                    / nSnU R                  [        R                  5        U R                  [        R                  5      (       Gd^  U R                  5       R                  5       n[        US5      (       aN  UR                  R                  (       a3  U R                  R                  SUR                  R                  5        SnOD[        US5      (       d3  SU;   a-  SUS   ;   a$  U R                  R                  SUS   S   5        SnUR                  U5        U R                  [        R                  5      (       ah  U =R                  S-  sl        UR                  U R                  5       R                  5       5        U R                  [        R                  5      (       a  Mh  U R                  [        R                  5        U(       a  U R                  R                  5         U$ )zkParse a paren-bounded expression list for function arguments or IN
list and return a list of Expr objects.
F
identifierr   Tr  r   )r  r   r}   r  r~   _exprrM  hasattrr  r  r  insertr  r   r  pop)r0  exprspath_name_addedmsg_exprs       r   paren_expr_listExprParser.paren_expr_list  sf    9++,%%i&6&677zz|//1Hx..83F3F3K3K$$++Ax/B/B/G/GH"&Hl33 H,h|44$$++Ax/Ef/MN"&LL"((99ATZZ\5578 ((99 	9++,  $$&r   c                    U R                  [        R                  5        [        S5      nU R	                  [        R
                  5      (       aA  U R                  [        R                  5      US'   U R                  [        R
                  5        U R                  U R                     R                  US'   U =R                  S-  sl        U$ )NzMysqlx.Expr.Identifierschema_namer  r   )
r  r   r   r   r  r   r  r  r  r+  )r0  idents     r   r  ExprParser.identifier  s    ioo.01""9==11#'#5#5ioo#FE- y}}-DHH-33fAr   c                     [        S5      nU R                  5       US'   U R                  5       US'   [        S5      n[        S5      US'   UR	                  5       US'   U$ )NzMysqlx.Expr.FunctionCallr  r  r?  zMysqlx.Expr.Expr.Type.FUNC_CALLrB  function_call)r   r  r  r   rM  )r0  r  r  s      r   r  ExprParser.function_call  sd     :; $ 1f!%!5!5!7g-.()JK$1$=$=$?!r   c                    U R                  [        R                  5        U R                  U R                     nUR
                  [        R                  :X  a  UR                  R                  S5      (       a8  UR                  R                  S5      (       a  [        UR                   S35      eU R                  [        R                  5        UR                  nObUR
                  [        R                  :X  a,  U R                  [        R                  5        UR                  nO[        SU R                   35      e[        S5      n[        S5      US'   X#S'   U$ )Nr  z* is not a valid JSON/ECMAScript identifierz?Expected token type IDENT or LSTRING in JSON path at token pos Mysqlx.Expr.DocumentPathItem(Mysqlx.Expr.DocumentPathItem.Type.MEMBERrB  r+  )r  r   r   r  r  r*  r   r+  
startswithendswithr^  r   r   r   )r0  r  member_namedoc_path_items       r   docpath_memberExprParser.docpath_member  s   9==)DHH%y.{{%%c**u{{/C/CC/H/H {{m#MN  y/++K!2!22y001++Kxxj"    >? -6!
f "-gr   c                    U R                  [        R                  5        U R                  [        R                  5      (       aY  U R                  [        R                  5        U R                  [        R
                  5        [        S5      n[        S5      US'   U$ U R                  [        R                  5      (       a  [        U R                  [        R                  5      5      nUS:  a  [        SU R                   35      eU R                  [        R
                  5        [        S5      n[        S5      US'   X!S'   U$ [        SU R                   35      e)	Nr  z6Mysqlx.Expr.DocumentPathItem.Type.ARRAY_INDEX_ASTERISKrB  r   z"Array index cannot be negative at z-Mysqlx.Expr.DocumentPathItem.Type.ARRAY_INDEXindexzGException token type MUL or LNUM in JSON path array index at token pos )r  r   r   r  r   r   r   r   r   r<  
IndexErrorr  r^  )r0  r  r+  s      r   docpath_array_locExprParser.docpath_array_loc  s#   9//0!!)--00y}}-y334#$BCM$1H%M&! ! !!)..11**9>>:;Eqy #EdhhZ!PQQy334#$BCM$1?%M&! &+'"  
$
 	
r   c                    U R                   (       d  [        S5      eU R                  [        R                  5      (       a  U R                  [        R                  5        [        S5      nU R                  [        R                  5      (       a^  [        S5      n[        S5      US'   U R                  [        R                  5      US'   US   R                  UR                  5       /5        US   R                  U R                  5       5        U R                  (       a  U R                  S   US	'   [        S
5      n[        S5      US'   XS'   U$ )Nz-Empty string cannot be used as document fieldMysqlx.Expr.ColumnIdentifierr  r  rB  r+  document_pathr   r  r?  Mysqlx.Expr.Expr.Type.IDENTr  )r  r^  r  r   r   r  r   r   r   ri  rM  r  r  )r0  col_idr  rJ  s       r   document_fieldExprParser.document_field  s   {{LMM!!)"2"233y//078!!)//22#$BCM$1:%M&! &*%7%7	%HM'"?#**M,E,E,G+HI&&t'9'9';<!11!4F6N)*$%BCV#\r   c                    / n U R                  [        R                  5      (       a/  UR                  U R	                  5       R                  5       5        GOKU R                  [        R                  5      (       aX  U R                  [        R                  5        [        S5      n[        S5      US'   UR                  UR                  5       5        OU R                  [        R                  5      (       a.  UR                  U R                  5       R                  5       5        O}U R                  [        R                  5      (       aX  U R                  [        R                  5        [        S5      n[        S5      US'   UR                  UR                  5       5        OOGM  [        U5      nUS:  a6  [        XS-
     S5      [        S5      :X  a  [        SU R                    35      eU$ )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  z1Mysqlx.Expr.DocumentPathItem.Type.MEMBER_ASTERISKrB  z1Mysqlx.Expr.DocumentPathItem.Type.DOUBLE_ASTERISKr   r   z!JSON path may not end in '**' at )r  r   r   r  r  rM  r   r  r   r   r   r  r   r  r   r^  r  )r0  doc_pathr  rg  s       r   r  ExprParser.document_path+  s    %%imm44 3 3 5 A A CD''	(9(9::""9#4#45 '(F G(5G)f%  9 9 ;<''	(<(<== 6 6 8 D D FG''	(<(<==""9#7#78 '(F G(5G)f%  9 9 ;<) * H19)(19*=vF-?K
 
 @
KLLr   c                    / nUR                  U R                  [        R                  5      5        U R	                  [        R
                  5      (       as  U R                  [        R
                  5        UR                  U R                  [        R                  5      5        U R	                  [        R
                  5      (       a  Ms  [        U5      S:  a  [        SU R                   35      eUR                  5         [        S5      n[        S[        U5      5       H3  nUS:X  a
  US   US'   M  US:X  a
  US   US'   M#  US:X  d  M+  US   US	'   M5     S
nU R	                  [        R                  5      (       a5  SnU R                  [        R                  5        U R                  5       US'   OU R	                  [        R                  5      (       a  SnU R                  [        R                  5        S
nU R	                  [        R                  5      (       a!  SnU R                  [        R                  5        U R                  [        R                  5        U R                  5       US'   U(       a  U R                  [        R                  5        U(       aS  [        US   5      S:X  aA  [        S5      n[!        S5      US'   SUS'   US   R#                  UR%                  5       /5        [        S5      n[!        S5      US'   X'S'   U$ )Nr   z Too many parts to identifier at r  r   r  r   
table_namer   r  FTr  r  r  rB  r  r+  r?  r  r  )r  r  r   r   r  r   r  r^  r  reverser   ranger   r  r   r   r   ri  rM  )r0  partsr  r  is_doc	is_quotedr  r  s           r   column_identifierExprParser.column_identifierO  sm   T''	89$$Y]]33y}}-LL++IOO<= $$Y]]33 u:>?zJKK78q#e*%AAv!&qva',Qx|$a(-a}% & !!)"2"233Fy//0&*&8&8&:F?###IOO44Fy/I%%ioo66 	""9??3y//0&*&8&8&:F?#""9??3c&12a7#$BCM$1:%M&! &(M'"?#**M,E,E,G+HI-.()FG!'r   c                     U R                   [        U R                  5      :  a  [        S5      eU R                  U R                      nU =R                   S-  sl         U$ )NzUnexpected end of token streamr   )r  r  r  r^  )r0  r  s     r   
next_tokenExprParser.next_token  sG    88s4;;''=>>DHH%Ar   c                 `    U R                  5       nUR                  U:w  a  [        SU 35      eg )Nr  )r'  r*  r^  )r0  r*  r  s      r   expect_tokenExprParser.expect_token  s4    !z)3J<@AA *r   c                 4    U R                   U R                     $ r/  )r  r  r5  s    r   
peek_tokenExprParser.peek_token  s    {{488$$r   c                 v    U R                   U R                     R                  nU =R                  S-  sl        U$ r  )r  r  r+  )r0  r+  s     r   consume_any_tokenExprParser.consume_any_token  s,    DHH%++Ar   c                    [        S5      nU R                  [        U R                  5      :  a  U R	                  [
        R                  5      (       d  US   R                  U R                  5       R                  5       /5        U R	                  [
        R                  5      (       d  OhU R                  [
        R                  5        U R                  [        U R                  5      :  a&  U R	                  [
        R                  5      (       d  M  U R                  [
        R                  5        [        S5      n[        S5      US'   UR                  5       US'   U$ )z8
jsonArray            ::=  "[" [ expr ("," expr)* ] "]"
rl  r+  r?  rD  rB  rE  )r   r  r  r  r  r   r   ri  r  rM  r   r  r   )r0  rS  rJ  s      r   parse_json_arrayExprParser.parse_json_array  s    )*hhT[[))$2H2H  3
 3
 L!9!9!; <=)))//::y/ hhT[[))$2H2H  3
 3
 	9//0)*$%BCV)Wr   c                    [        S5      nU R                  [        U R                  5      :  GaC  U R	                  [
        R                  5      (       Gd  [        S5      nU R                  [
        R                  5      US'   U R                  [
        R                  5        U R                  5       R                  5       US'   US   R                  UR                  5       /5        U R	                  [
        R                  5      (       d  OiU R                  [
        R                  5        U R                  [        U R                  5      :  a'  U R	                  [
        R                  5      (       d  GM  U R                  [
        R                  5        [        S5      n[        S5      US'   UR                  5       US	'   U$ )
zs
jsonDoc              ::=  "{" [jsonKeyValue ("," jsonKeyValue)*] "}"
jsonKeyValue         ::=  STRING_DQ ":" expr
rb  rc  rd  r+  re  r?  rA  rB  rC  )r   r  r  r  r  r   r   r  r   r   r  rM  ri  r   r   )r0  rS  itemrJ  s       r   parse_json_docExprParser.parse_json_doc  sO   
 *+hhT[[))$2H2H3
 3
 ;<D,,Y->->?DKy/ JJL446DMJt//123)))//::y/ hhT[[))$2H2H3
 3
 	9++,)*$%CDV*Xr   r  c                    SnU R                  [        R                  5      (       a   U R                  [        R                  5      nOU R                  [        R                  5      (       a   U R                  [        R                  5      nOLUR
                  [        R                  :X  a  [        U R                  5      nO[        SU R                   35      e[        S5      n[        S5      US'   X R                  ;   a  U R                  U   US'   U$ U R                  US'   U R                  U R                  U'   U =R                  S-  sl        U$ )Nr  z&Invalid placeholder name at token pos r?  z!Mysqlx.Expr.Expr.Type.PLACEHOLDERrB  positionr   )r  r   r   r  r   r*  r   r=  r  r^  r  r   r   r  )r0  r  place_holder_namer  s       r   parse_place_holderExprParser.parse_place_holder  s$   !!)..11 $ 2 29>> B##IOO44 $ 2 29?? C!2!22 #D$E$E FEdhhZPQQ-.()LM A AA#'#D#DEV#WHZ   $(#D#DHZ  11 --! --2-r   c                 2   [        SSS9nU R                  [        R                  5        US   R	                  U R                  5       R                  5       /5        U R                  [        R                  5        [        [        R                  U R                  5       5      5      nUS   R	                  [        U5      R                  5       /5        U R                  [        R                  5        [        SUR                  5       S9n[        S5      US'   U$ )	z2cast ::= CAST LPAREN expr AS cast_data_type RPARENr  r   r  r  r?  r  r  rB  )r   r  r   r}   ri  r  rM  r   rW  r=  rh  cast_data_typer  r~   r   )r0  r  type_scalarrS  s       r   r   ExprParser.cast  s    1?9++,  $**,":":"<!=>9<<((D4G4G4I)JK  "4["A"M"M"O!PQ9++,(83G3G3IJ#$DEF
r   c           	         U R                  5       nUR                  [        R                  [        R                  [        R
                  [        R                  4;   a3  U R                  5       nU(       a  UR                   U 3$ UR                  $ UR                  [        R                  L a4  U R                  S5      nU(       a  UR                   U 3$ UR                  $ UR                  [        R                  [        R                  4;   aO  U R                  [        R                  5      (       a  U R                  [        R                  5        UR                  $ UR                  [        R                  [        R                  [        R                   4;   a  UR                  $ [#        SUR                   SU R$                   SUR                   S35      e)zcast_data_type ::= ( BINARY dimension? ) |
( CHAR dimension? ) |
( DATE ) |
( DATETIME dimension? ) |
( TIME dimension? ) |
( DECIMAL dimension? ) |
( SIGNED INTEGER? ) |
( UNSIGNED INTEGER? ) |
JSON
TzUnknown token type z at position z (r:  )r'  r*  r   r   r   r   r   cast_data_type_dimensionr+  r   r   r   r  r   r  r   r   r^  r  )r0  r  	dimensions      r   rA  ExprParser.cast_data_type  sx    !NNNN	 
 
 557I2;ekk]9+.LLy00055d;I2;ekk]9+.LL	 0 0)2D2DEE%%i&7&788""9#4#45;;NNNN 
 

 ;;!%"2"2!3=
 K}A
 	
r   r   c                 f   U R                  [        R                  5      (       d  g/ nU R                  [        R                  5        UR	                  U R                  [        R
                  5      5        U(       aq  U R                  [        R                  5      (       aM  U R                  [        R                  5        UR	                  U R                  [        R
                  5      5        U R                  [        R                  5        [        U5      S:X  a	  SUS    S3$ SUS    SUS    S3$ )z*dimension ::= LPAREN LNUM (, LNUM)? RPARENNr   r9  r   r:  r  )	r  r   r}   r  r  r   r   r~   r  )r0  r   rF  s      r   rE  #ExprParser.cast_data_type_dimension  s    %%i&6&677	9++,++INN;<t--ioo>>y/T//	?@9++, 9~" 	!~Q	
 Yq\N!IaL>3	
r   c                  R    [        S5      n [        S5      U S'   [        SSS9U S'   U $ )Nr?  r  rB  r  r  r?  r  r   ro  s    r   star_operatorExprParser.star_operator  s2    ()#$DEF!"8sCJ
r   c                 l
   U R                  5       nUR                  [        R                  [        R                  4;   a  U R                  U5      $ UR                  [        R                  :X  a  U R                  5       $ UR                  [        R                  :X  a  U R                  5       $ UR                  [        R                  :X  a  U R                  5       $ UR                  [        R                  :X  a1  U R                  5       nU R                  [        R                  5        U$ UR                  [        R                   [        R"                  4;   a  U R%                  5       nUR                  [        R&                  :X  aE  UR(                  UR(                  -   U R*                  U R,                     l        U R/                  5       $ [1        UR(                  U R/                  5       5      $ UR                  [        R2                  [        R4                  [        R6                  4;   a$  [1        UR(                  U R/                  5       5      $ UR                  [        R8                  :X  a  [;        [=        UR(                  5      5      $ UR                  [        R>                  :X  a  [;        [A        5       5      $ UR                  [        R&                  :X  a^  SUR(                  ;   a'  [;        [C        [E        UR(                  5      5      5      $ [;        [G        [I        UR(                  5      5      5      $ UR                  [        RJ                  [        RL                  4;   a/  [;        [O        UR                  [        RJ                  :H  5      5      $ UR                  [        RP                  :X  a  U RS                  5       $ UR                  [        RT                  :X  a  U RW                  5       $ UR                  [        RX                  :X  Ga  U R,                  S-
  U l        U R[                  [        R                  5      (       d  U R[                  [        R\                  5      (       at  U R_                  U R,                  S-   [        RX                  5      (       aB  U R_                  U R,                  S-   [        R                  5      (       a  U Ra                  5       $ U Rb                  (       d  U RS                  5       $ U Re                  5       $ [g        SUR                   SU R,                   35      e)z<Parse an atomic expression and return a protobuf Expr objectr  r   r   r   zUnknown token type = z&  when expecting atomic expression at )4r'  r*  r   r   r   r<  r   r7  r   r3  r   r   r}   r  r*  r~   r   r   r-  r   r+  r  r  atomic_exprr  rx   r   r   r   r  rV  r   r]  r\  r[  rZ  r<  r   r   rY  r   r  r   rK  r   r  r   r  r  r  r$  r^  )r0  r  rJ  peeks       r   rN  ExprParser.atomic_expr%  s   !	 1 19??CC**511y///&&((y333((**y~~-99;y///::<Di../K		@@??$D)..0.3kkDJJ.FDHH%+''))!%++t/?/?/ABB	y}}innMM!%++t/?/?/ABBy000%&9%++&FGGy~~-%&7&9::y~~-ekk!)*=eEKK>P*QRR%&6s5;;7G&HII		@@%!%"2"2inn"DE  y///&&((y}},%%''y.xx!|DH&&y'7'788''	66**488a<II**488a<9I9IJJ ))++ 55 ##% ++- #E$4$4#5 6!XXJ(
 	
r   inner_parserc                    U" 5       nU R                   [        U R                  5      :  Ga  U R                  U R                      R                  U;   a  [	        S5      n[        S5      US'   [	        S5      n[        U R                  U R                      R                     US'   UR                  5       /US'   U =R                   S-  sl         US   R                  U" 5       R                  5       /5        XTS'   UnU R                   [        U R                  5      :  a)  U R                  U R                      R                  U;   a  M  U$ )	zuGiven a `set' of types and an Expr-returning inner parser function,
parse a left associate binary operator expressionr?  r  rB  r  r  r  r   r  )
r  r  r  r*  r   r   
_OPERATORSr+  rM  ri  )r0  r  rQ  lhsrS  r  s         r   parse_left_assoc_binary_op_expr*ExprParser.parse_left_assoc_binary_op_expra  s	   
 nhhT[[))dkk$((.C.N.NRW.W,-C'(HICK56H)$++dhh*?*E*EFHV!$!2 3HWHHMHW$$ln&@&@&B%CD&
OC hhT[[))dkk$((.C.N.NRW.W 
r   c                    U R                  5       nU R                  [        R                  [        R                  5      (       Ga  U R                  [        R                  5      (       Ga`  U R                  5       n[        S5      nUS   R                  UR                  5       /5        UR                  [        R                  L a  SOSUS'   U R                  [        R                  5        US   R                  U R                  5       R                  5       /5        U R                  " [        6 (       d  [        SU R                    35      e["        R%                  U R'                  5       R)                  5       5      nUS   R                  [+        [-        U5      5      R                  5       /5        [        SUS9n[/        S	5      US
'   U$ )Nr  r  date_adddate_subr  z#Expected interval type at position r?  r@  r  rB  )rN  r  r   r   r   r  r   r'  r   ri  rM  r*  r  bit_expr_INTERVAL_UNITSr^  r  r=  rh  r0  r  r  rW  r   )r0  rT  r  r  s       r   add_sub_intervalExprParser.add_sub_intervalt  sk    !!NNIOO
 
%%i&8&899OO%E56HW$$coo&7%89#..)..@
j V y112W$$dmmo&A&A&C%DE))?; #Ftxxj!QRRJJt557==?@EW$$#$6u$=>JJLM ,x@C'(HICK
r   c                     U R                  [        [        R                  [        R                  [        R
                  /5      U R                  5      $ r/  )rU  setr   r   r   r   r\  r5  s    r   mul_div_exprExprParser.mul_div_expr  s9    33	y}}=>!!
 	
r   c                     U R                  [        [        R                  [        R                  /5      U R
                  5      $ r/  )rU  r_  r   r   r   r`  r5  s    r   add_sub_exprExprParser.add_sub_expr  s2    3312D4E4E
 	
r   c                     U R                  [        [        R                  [        R                  /5      U R
                  5      $ r/  )rU  r_  r   r   r   rc  r5  s    r   
shift_exprExprParser.shift_expr  s6    33!!9#3#345t7H7H
 	
r   c                     U R                  [        [        R                  [        R                  [        R
                  /5      U R                  5      $ r/  )rU  r_  r   r   r   r   rf  r5  s    r   rZ  ExprParser.bit_expr  s;    33!!9??I4D4DEFOO
 	
r   c           
          U R                  [        [        R                  [        R                  [        R
                  [        R                  [        R                  [        R                  /5      U R                  5      $ r/  )
rU  r_  r   r   r   r   r   r   r   rZ  r5  s    r   	comp_exprExprParser.comp_expr  sU    33LLLLLLLLLLLL	 MM
 	
r   c                 \
   / nU R                  5       nSnU R                  [        R                  5      (       a!  SnU R	                  [        R                  5        U R
                  [        U R                  5      :  Ga  UR                  UR                  5       5        U R                  U R
                     R                  nU R                  [        R                  5      (       a  U R	                  [        R                  5        U R                  [        R                  5      (       a!  SnU R	                  [        R                  5        UR                  U R                  5       R                  5       5        GO\U R                  [        R                  5      (       a  U R	                  [        R                  5        U R                  [        R                  5      (       a!  UR                  U R                  5       5        GOSnUR                  U R                  5       R                  5       5        GOU R                  [        R                   5      (       aN  U R	                  [        R                   5        UR                  U R                  5       R                  5       5        GO1U R                  [        R"                  5      (       a  U R	                  [        R"                  5        UR                  U R                  5       R                  5       5        U R                  [        R$                  5      (       aL  U R	                  [        R$                  5        UR                  U R                  5       R                  5       5        GOOU R                  [        R&                  5      (       a  U R	                  [        R&                  5        UR                  U R                  5       R                  5       5        U R	                  [        R(                  5        UR                  U R                  5       R                  5       5        OU R                  [        R*                  5      (       aM  U R	                  [        R*                  5        UR                  U R                  5       R                  5       5        O!U(       a  [-        SU R
                   35      eS nU(       aR  [/        S5      nU(       a	  [0        U   OUUS'   XS'   [/        S5      n[3        S	5      US
'   UR                  5       US'   UnU$ )NFTr  zUnknown token after NOT as pos r  r  r  r?  r  rB  r  )rk  r  r   rx   r  r  r  r  r  rM  r+  r|   r   r}   ri  r  r   r   r   r   ry   r   r^  r   	_NEGATIONr   )r0  paramsrT  r!  op_namer  r  s          r   	ilri_exprExprParser.ilri_expr  su   nn!!)--00Fy}}-88c$++&&MM#//+,kk$((+11G%%ill33""9<<0)))--88!F&&y}}5dnn.::<=''	55""9<<0)))*:*:;;MM$"6"6"89'GMM$.."2">">"@A''	(:(:;;""9#5#56dnn.::<=''	77""9>>2dnn.::<=)))*:*:;;&&y'7'78MM$.."2">">"@A''	(9(9::""9#4#45dnn.::<=""9==1dnn.::<=''	(8(899""9#3#34dnn.::<=$'Ftxxj%QRR"#9:9?9W#5W $*!"#56#01Q#R '/';';'=$
r   c                     U R                  [        [        R                  [        R                  /5      U R
                  5      $ r/  )rU  r_  r   ry   r   rq  r5  s    r   and_exprExprParser.and_expr  s2    33	 0 012DNN
 	
r   c                 j    U R                  [        [        R                  /5      U R                  5      $ r/  )rU  r_  r   r{   rt  r5  s    r   xor_exprExprParser.xor_expr  s$    33C4H$--XXr   c                     U R                  [        [        R                  [        R                  /5      U R
                  5      $ r/  )rU  r_  r   rz   r   rw  r5  s    r   or_exprExprParser.or_expr  s0    33y~~./
 	
r   r@  c                     U(       a,  / U l         SU l        0 U l        SU l        U R	                  5         U R                  5       $ r  )r  r  r  r  r  rz  )r0  r@  s     r   r  ExprParser._expr  s8    DKDH02D-01D-HHJ||~r   c                 V   U R                  U5      nU R                  nU R                  [        U R                  5      S-
  [
        R                  5      (       a  US-  nU[        U R                  5      :  a2  [        SU R                  U R                  S   SU R                   35      eU$ )Nr   zUnused token types z" found in expression at position: )r  r  r  r  r  r   r   r^  )r0  r@  
expressionused_tokenss       r   rJ  ExprParser.expr  s    ZZ(
hh!!#dkk"2Q"6	EE1KT[[))%dkk$((*&=%> ?++/88*6  r   c                 P    [        SU R                  [        R                  5      S9$ )NzMysqlx.Crud.Columnr?  )r   r  r   r   r5  s    r   parse_table_insert_field#ExprParser.parse_table_insert_field  s    +$2D2DY__2UVVr   c                 6    U R                  5       R                  $ r/  )r$  r  r5  s    r   parse_table_update_field#ExprParser.parse_table_update_field  s    %%'222r   c                    / nU R                   R                  S5      nUR                  5         U(       Ga,  UR                  5       nUR	                  S5      UR	                  S5      :w  dH  UR	                  S5      UR	                  S5      :w  d$  UR	                  S5      UR	                  S5      :w  a  UR                  5        SU 3nUR	                  S5      UR	                  S5      :w  a  M;  UR	                  S5      UR	                  S5      :w  a  Ma  UR	                  S5      UR	                  S5      :w  a  M  UR                  UR                  5       5        U(       a  GM,  U$ )Nr  r9  r:  r  r  r  r  )r  splitr  r  countr  r  )r0  fieldstempfields       r   _table_fieldsExprParser._table_fields  s   {{  %HHJEC EKK$44;;s#u{{3'77;;s#u{{3'7788:,aw/	 C EKK$44;;s#u{{3'77;;s#u{{3'77 MM%++-( d r   c                 j   / nSnU R                  5       nU R                  [        U R                  5      :  a  U(       d  U R	                  [
        R                  5        Sn[        SU R                  5       S9nU R                  [
        R                  5      (       aB  U R	                  [
        R                  5        U R	                  [
        R                  5      US'   OU[        U5         US'   UR                  UR                  5       5        U R                  [        U R                  5      :  a  M  U$ )NTFzMysqlx.Crud.Projection)sourcealias)r  r  r  r  r  r   r   r   r  r  r   r   r  rM  )r0  project_exprfirstr  
projections        r   parse_table_select_projection(ExprParser.parse_table_select_projection%  s      ##%hhT[[))""9??3E !9$**,OJ%%ill33""9<<0&*&8&8&I
7#&,S->&?
7#
 6 6 89 hhT[[)) r   c                    / nSnU R                   [        U R                  5      :  Ga(  U(       d  U R                  [        R
                  5        Sn[        SU R                  5       S9nU R                  [        R                  5      (       a.  [        S5      US'   U R                  [        R                  5        OQU R                  [        R                  5      (       a-  [        S5      US'   U R                  [        R                  5        UR                  UR                  5       5        U R                   [        U R                  5      :  a  GM(  U$ )NTFzMysqlx.Crud.Order)rJ  zMysqlx.Crud.Order.Direction.ASC	directionz Mysqlx.Crud.Order.Direction.DESC)r  r  r  r  r   r   r   r  r  r   r   r   r  rM  )r0  order_specsr  orders       r   parse_order_specExprParser.parse_order_spec9  s     hhT[[))""9??3E/djjlCE%%i&;&;<<%23T%Uk"""9#8#89''	(>(>??%23U%Vk"""9#9#9:u0023 hhT[[)) r   c                 H   / nSnU R                   [        U R                  5      :  az  U(       d  U R                  [        R
                  5        SnUR                  U R                  5       R                  5       5        U R                   [        U R                  5      :  a  Mz  U$ )NTF)	r  r  r  r  r   r   r  r  rM  )r0  	expr_listr  s      r   parse_expr_listExprParser.parse_expr_listL  sy     	hhT[[))""9??3ETZZ\5578	 hhT[[))
 r   )r  r  r  r  r  r  r  )T)r-  N)F)Jrs   rt   ru   rv   rw   r=  rX  r1  r4  r  r<  r  r)  r  r  r  r  r  r  r  r  r  r  r  r   r
   r   r   r  r   r  r  r  r  r  r  r$  r'  r*  r-  r0  r3  r7  r<  r   rA  r   rE  staticmethodrK  rN  r   r   rU  r\  r`  rc  rf  rZ  rk  rq  rt  rw  rz  r  rJ  r  r   r  r  r  r  r  r   rr   r   r   rI  rI    s   "	s 	d 	d 	6 6*"K K3 K4 K4c 4e 4"3 T e .;C ;E ;:m^
3 
4 
<C <D <Y Y Y@S @T @
 
 
TS Tc Td T  	e')@@A	B<K {  4
; 
4 *"	e')@@A	B"H/; /bE Bs Bt B
%E %3 
+ & 0 + .k %
 %
N
 
# 
& ;  :
[ :
xc]2:2{?2K	&+ :
k 

k 


K 


+ 

; 
6; 6p
+ 

Y+ Y
 

T k 
D 
[ 
W+ W3# 3tCy 	e')@@A	B(	e')@@A	B&
	e')@@A	B
r   rI  N)jrw   typingr   r   r   r   r   r   r	   r
   dbdocr   helpersr   r   protobufr   r   r  r   r   r   r   r   r   r   r_  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r[  ry   rz   r{   r|   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  rS  r  rn  r)  rT  rQ  rL  rP  r]  r[  r\  r<  rZ  rv  rV  rX  rY  ry  rW  r  r=  r  r  rI  rr   r   r   <module>r     s  :  Q Q Q  1 , [ [| $$$$""!!)45	9==5),,5 
9==5 	),,	5
 
9==5 INN5 	),,5 	""5 i5 y  5 	""5 i5 INN5 
9==5 
9==5  
9==!5" INN#5$ Y__%5& INN'5( i)5* i+5, INN-5. 
9==/50 INN152 Y__354 y  556 INN758 9((95: 
9  ;5< I""=5> 	),,?5@ iA5B 	""C5D INNE5F INNG5H INNI5J y  K5L iM5N 	""O5P y  Q5R INNS5T )66U5V )66W5X Y,,Y5Z 	22[5\ 9((]5^ 9((_5` y00a5b )&&c5d )&&e5f 	""g5h )&&i5p NNNNNN  NN""	) %""$" 
4" 
5	"
 	$" 	$" 
5" 
5" " 	$" y" 	$" F" 	$" 	$"  !"" 	$#"$ %"& 	$'"( )"* 	$+", -". 	$/"0 	$1"2 3"4 5"6 7"8 9": ;"< ="> F?"@ yA"B 
C"
J 
			  
	$ $0n  $>( >[ > 
eD%K( 
[ 
x/ K ; u  C K S [ z k T k e  k k  [ [ %3 %3 %b br   