o
    îËh÷Â  ã                   @   sÌ  d Z ddlmZmZmZmZmZmZmZm	Z	 ddl
mZ ddlmZmZ ddlmZmZ ddlmZmZmZmZmZmZ G dd	„ d	ƒZeejejejejejej ej!ej"ej#ej$ej%ej&ej'ej(ej)ej*ej+ej,ej-ej.gƒZ/i d
ej0“dej1“dej2“dej3“dej4“dej5“dej6“dej7“dej8“dej9“dej:“dej;“dej<“dej=“dej>“dej?“dej@“i dejA“dejB“dej“dej“dej“d ej“d!ej “d"ej!“d#ej"“d$ej#“d%ej“d&ejC“d'ejD“d(ejE“d)ejF“d*ejG“d+ejH“¥i d,ejI“d-ejJ“d.ejK“d/ejL“d0ejM“d1ejN“d2ejO“d3ej$“d4ej%“d5ej&“d6ej'“d7ej(“d8ej)“d9ej*“d:ej+“d;ej,“d<ej-“¥d=ej.i¥ZPejFej<ejIejJejKejLejHejMd>œZQi d?d@“d@d@“d
dA“dd“dBdB“ddB“dd“dd“dCdC“dd“dd“dd“dd“dDdD“dEdD“dFdF“dGdG“i dHdH“dIdI“dJdJ“dAdA“dKdK“dLdL“dMdM“dNdN“dOdO“dPdP“dQdQ“dRdR“dSdS“dd“dTdT“dd“¥ZRdUdVdRddWdXœZSdYdZd[d\d]d^d_d`œZTG dadb„ dbƒZUdceddefdedf„ZVdceddefdgdh„ZWdie	eef ddefdjdk„ZXdlee ddefdmdn„ZYddefdodp„ZZdce[ddefdqdr„Z\dce]ddefdsdt„Z^dce]ddefdudv„Z_dceddefdwdx„Z`dceaddefdydz„Zbdcecddefd{d|„Zddceddefd}d~„Zedefd€eddefdd‚„Zgdƒefddeffd„d…„ZhG d†d‡„ d‡ƒZidˆS )‰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                   @   st  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@ZBdAZCdBZDdCZEdDZFdEZGdFZHdGZIdHZJdIZKdJZLdKZMdLZNdMZOdNZPdOZQdPZRdQZSdRZTdSZUdTZVdUZWdVZXdWZYdXZZdYZ[dZZ\d[S )\Ú	TokenTypez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__Ú__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© rÍ   rÍ   úF/var/www/html/scripts/venv/lib/python3.10/site-packages/mysqlx/expr.pyr   /   s¶    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                	   @   sH   e Zd ZdZddedededdfdd	„Zdefd
d„Zdefdd„ZdS )ÚTokenzToken representation class.r
   Ú
token_typeÚvalueÚlengthÚreturnNc                 C   s   || _ || _|| _d S ©N)r$  r%  r&  )Úselfr$  r%  r&  rÍ   rÍ   rÎ   Ú__init__#  s   
zToken.__init__c                 C   s   |   ¡ S r(  )Ú__str__©r)  rÍ   rÍ   rÎ   Ú__repr__(  s   zToken.__repr__c                 C   s2   | j tjtjtjfv r| j › d| j› dS | j › S )Nú(ú))r$  r   r†   rˆ   r‡   r%  r,  rÍ   rÍ   rÎ   r+  +  s   ýzToken.__str__)r
   )	rp   rq   rr   rs   ÚintÚstrr*  r-  r+  rÍ   rÍ   rÍ   rÎ   r#     s
    r#  r%  r'  c                 C   s¨   t dƒ}t| t ƒr| S t| tƒr| jddS t| ttfƒr-tdƒ|d< t| ƒ ¡ |d< |S t| t	t
fƒrDtdƒ|d< t| ƒ ¡ |d< |S td	ƒ|d< t| ƒ ¡ |d
< |S )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%  ÚmsgrÍ   rÍ   rÎ   Ú
build_expr8  s    

úþrG  c                 C   sz   t | tƒr	t| ƒS t | tƒrt| ƒS t | tƒrt| ƒS t | tƒr$t| ƒS t | t	ƒr-t
| ƒS | d u r4tƒ S tdt| ƒ› ƒ‚)NzUnsupported data type: )r;  r1  Úbuild_string_scalarr   Úbuild_bytes_scalarÚboolÚbuild_bool_scalarr0  Úbuild_int_scalarÚfloatÚbuild_double_scalarÚbuild_null_scalarÚ
ValueErrorr5  ©r%  rÍ   rÍ   rÎ   rD  J  s   




rD  Úobjc                 C   sx   t | tƒr
t| jƒS tdƒ}|  ¡ D ]'\}}tdƒ}t |tƒr#| ¡ n||d< t|ƒ 	¡ |d< |d  
| 	¡ g¡ q|S )NúMysqlx.Expr.ObjectúMysqlx.Expr.Object.ObjectFieldÚkeyr%  Úfld)r;  r   r?  Ú__dict__r   Úitemsr1  ÚencoderG  r@  Úextend)rR  rF  rU  r%  ÚpairrÍ   rÍ   rÎ   r?  Z  s   

r?  r8  c                 C   s$   t dƒ}|d  dd„ | D ƒ¡ |S )NúMysqlx.Expr.Arrayr%  c                 S   s   g | ]}t |ƒ ¡ ‘qS rÍ   )rG  r@  )Ú.0r%  rÍ   rÍ   rÎ   Ú
<listcomp>i  s    zbuild_array.<locals>.<listcomp>)r   rZ  )r8  rF  rÍ   rÍ   rÎ   rC  g  s   rC  c                  C   s   t dƒ} tdƒ| d< | S )NúMysqlx.Datatypes.Scalarz#Mysqlx.Datatypes.Scalar.Type.V_NULLr5  r   ©rF  rÍ   rÍ   rÎ   rO  m  s   rO  c                 C   ó    t dƒ}tdƒ|d< | |d< |S )Nr_  z%Mysqlx.Datatypes.Scalar.Type.V_DOUBLEr5  Úv_doubler   rE  rÍ   rÍ   rÎ   rN  s  ó   rN  c                 C   ra  )Nr_  z#Mysqlx.Datatypes.Scalar.Type.V_SINTr5  Úv_signed_intr   rE  rÍ   rÍ   rÎ   rL  z  rc  rL  c                 C   ra  )Nr_  z#Mysqlx.Datatypes.Scalar.Type.V_UINTr5  Úv_unsigned_intr   rE  rÍ   rÍ   rÎ   Úbuild_unsigned_int_scalar  rc  rf  c                 C   s@   t | tƒrtt| dƒƒ} tdƒ}tdƒ|d< td| d|d< |S )Nzutf-8r_  z%Mysqlx.Datatypes.Scalar.Type.V_STRINGr5  zMysqlx.Datatypes.Scalar.StringrQ  Úv_string)r;  r1  ÚbytesÚ	bytearrayr   r   rE  rÍ   rÍ   rÎ   rH  ˆ  s   
rH  c                 C   ra  )Nr_  z#Mysqlx.Datatypes.Scalar.Type.V_BOOLr5  Úv_boolr   rE  rÍ   rÍ   rÎ   rK  ‘  rc  rK  c                 C   s(   t dƒ}tdƒ|d< t d| d|d< |S )Nr_  z%Mysqlx.Datatypes.Scalar.Type.V_OCTETSr5  zMysqlx.Datatypes.Scalar.OctetsrQ  Úv_octetsr   rE  rÍ   rÍ   rÎ   rI  ˜  s   rI  c                 C   ra  )Nr2  r9  r5  r:  r   rE  rÍ   rÍ   rÎ   Úbuild_literal_exprŸ  rc  rl  ÚnameÚparamc                 C   sF   t dƒ}t|  |d< | ¡ g|d< t dƒ}tdƒ|d< | ¡ |d< |S )NúMysqlx.Expr.Operatorrm  rn  r2  úMysqlx.Expr.Expr.Type.OPERATORr5  Úoperator)r   Ú_UNARY_OPERATORSr@  r   )rm  rn  rq  rF  rÍ   rÍ   rÎ   Úbuild_unary_op¦  s   rs  Ústringc                 C   s   |   dd¡S )Nú"z"")Úreplace©rt  rÍ   rÍ   rÎ   Úescape_literal°  ó   rx  c                   @   s¶  e Zd ZdZddededdfdd„Zdefd	d
„Zd€dd„Zde	dedefdd„Z
de	defdd„Zdde	dedefdd„Zde	defdd„Zd€dd„Zde	ddfdd„Zde	defd d!„Zd"e	defd#d$„Zde	defd%d&„Zd"e	defd'd(„Zde	de	defd)d*„Zde	defd+d,„Zdeeeef  fd-d.„Zdefd/d0„Zdefd1d2„Zdefd3d4„Zdefd5d6„Z defd7d8„Z!deeeef  fd9d:„Z"defd;d<„Z#defd=d>„Z$de	ddfd?d@„Z%defdAdB„Z&defdCdD„Z'defdEdF„Z(defdGdH„Z)dIedefdJdK„Z*defdLdM„Z+defdNdO„Z,ddPede-e fdQdR„Z.e/defdSdT„ƒZ0defdUdV„Z1d"e2e	 dWe3g ef defdXdY„Z4defdZd[„Z5defd\d]„Z6defd^d_„Z7defd`da„Z8defdbdc„Z9defddde„Z:defdfdg„Z;defdhdi„Z<defdjdk„Z=defdldm„Z>ddnedefdodp„Z?ddnedefdqdr„Z@defdsdt„ZAdeBfdudv„ZCdee fdwdx„ZDdeeeef  fdydz„ZEdeeeef  fd{d|„ZFdeeeef  fd}d~„ZGdS )‚r<  zExpression parser class.Trt  Úallow_relationalr'  Nc                 C   s>   || _ g | _g | _d| _|| _i | _d| _|  ¡  |  ¡  d S ©Nr   )	rt  ÚtokensÚpath_name_queueÚposÚ_allow_relational_columnsÚplaceholder_name_to_positionÚpositional_placeholder_countÚclean_expressionÚlex)r)  rt  rz  rÍ   rÍ   rÎ   r*  ·  s   zExprParser.__init__c                 C   s   d| j › dS )Nz<mysqlx.ExprParser 'z'>rw  r,  rÍ   rÍ   rÎ   r+  Â  ó   zExprParser.__str__c                 C   s¦   t | jtƒst| jƒ| _| j d¡| _t| jƒdkr)| jd dkr)| jdd… | _d| jdd…  ¡ v r<| jdd… | _d| jdd	…  ¡ v rQ| jd	d… | _dS dS )
zµRemoves 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   )r;  rt  r1  ÚreprÚstripÚlenÚupperr,  rÍ   rÍ   rÎ   r‚  Å  s   ÿzExprParser.clean_expressionrU  rñ   c                 C   s$   |d t | jƒk o| j|d  |kS ©Nr
   )rŒ  rt  )r)  rU  rñ   rÍ   rÍ   rÎ   Únext_char_isÖ  s   $zExprParser.next_char_isr~  c                 C   s¦   |}d}|t | jƒk rC| j|  ¡ s| j| dkrC| j| dkr*|du r(tdƒ‚d}|d7 }|t | jƒk rC| j|  ¡ s| j| dks| j||… }ttj|t |ƒƒS )NFÚ.Tz"Invalid number. Found multiple '.'r
   )rŒ  rt  ÚisdigitrP  r#  r   rˆ   )r)  r~  ÚstartÚ	found_dotÚvalrÍ   rÍ   rÎ   Ú
lex_numberÙ  s"   ÿ÷ÿ	zExprParser.lex_numberFÚiÚallow_spacec                 C   s  |}|t | jƒk rB| j|  ¡ s | j| dks | j|  ¡ rB|rB|d7 }|t | jƒk rB| j|  ¡ s | j| dks | j|  ¡ rB|s | j||… }z1|t | jƒk rj| j| dkrj| ¡ tvrjttj|t |ƒƒ}W |S tt	| ¡  | ¡ t |ƒƒ}W |S  t
y   ttj|t |ƒƒ}Y |S w )NÚ_r
   r.  )rŒ  rt  ÚisalnumÚisspaceÚlowerÚ%_SQL_FUNTION_RESERVED_WORDS_COLLISIONr#  r   r†   Ú_RESERVED_WORDSÚKeyError)r)  r–  r—  r’  r”  ÚtokenrÍ   rÍ   rÎ   Ú	lex_alphaê  s>   ÿÿÿûÿÿÿýþþzExprParser.lex_alphac                 C   s  | j | }d}|d7 }|}|t| j ƒk r[| j | }||kr0|d t| j ƒk r0| j |d  |kr0n+||dfv rL|d t| j ƒkr@n|d7 }|| j | 7 }n||7 }|d7 }|t| j ƒk s|t| j ƒksi| j | |krptd|› ƒ‚|dkrttj|t|ƒd ƒS ttj|t|ƒd ƒS )NÚ r
   ú\z'Unterminated quoted string starting at ú`r   )rt  rŒ  rP  r#  r   r†   r‡   )r)  rU  Ú
quote_charr”  r’  rñ   rÍ   rÍ   rÎ   Úlex_quoted_token  s.   

ïzExprParser.lex_quoted_tokenc                 C   sæ  d}d}d}|t | jƒk rq| j| }| ¡ r|d7 }q| ¡ r'|  |¡}n6| ¡ s/|dkr7|  ||¡}n&|dkrCttj	|ƒ}n|dkrOttj
|ƒ}n|dkr[ttj|ƒ}n|dkrgttj|ƒ}nö|d	krsttj|ƒ}nê|d
kr’|  |d¡rŠ|sŠttjddƒ}d}nÓttj|ƒ}nË|dkr­|  |d¡r¥ttjddƒ}n¸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í|  |d¡rättjddƒ}nyttjddƒ}np|dkr
|  |d¡rttjddƒ}n[ttj|ƒ}nS|dkrttj|ƒ}nF|dkr4|  |d¡r,ttjddƒ}n1ttj|ƒ}n)|dkrAttj|ƒ}n|dkrNttj|ƒ}n|dkr[ttj|ƒ}n|dkrgttj|ƒ}nö|dkrsttj |ƒ}nê|d krttj!|ƒ}nÞ|d!krš|  |d¡r“ttj"d"dƒ}nÊttj#|ƒ}nÃ|d#krÓ|  |d¡r®ttj"d$dƒ}n¯|  |d#¡r½ttj$d%dƒ}n |  |d¡rÌttj%d&dƒ}n‘ttj&|ƒ}nŠ|dkrý|  |d¡rçttj'd'dƒ}nv|  |d¡röttj(d(dƒ}ngttj)|ƒ}n`|d)kr2|  |d¡rttj*d*dƒ}nL|d t | jƒk r+| j|d   ¡ r+|  |¡}n2ttj+|ƒ}n+|d+v rK|rKttj,|ƒ}|sFd}nd}d}n|d,v rV|  -|¡}nt.d-|› ƒ‚| j/ 0|¡ ||j17 }|t | jƒk sd S d S ).Nr   Fr
   r˜  ú?ú:Ú{Ú}r  r  r
  z->r   Tr  z**r  ú$r  r  r  r  r  r  r  r  r.  r/  ú[ú]r  ú,r  r  r  r	  r  r  r  r  r  z.*)ú'ru  )ru  r®  r£  zUnknown character at )2rŒ  rt  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“   ry   rz   r{   r|   r   r‹   r   rž   r•   r‘   r   r–   r   rŽ   r±   r‰   r¶   r¥  rP  r|  Úappendr&  )r)  r–  Ú
arrow_lastÚinside_arrowrñ   rŸ  rÍ   rÍ   rÎ   rƒ    sÆ   













(

—zExprParser.lexr$  c              	   C   sj   | j t| jƒkrtd|› d| j › dƒ‚| j| j  j|kr3td|› d| j › d| j| j  › d| j› ƒ‚d S )NúExpected token type z at pos z but no tokens leftz but found type z, on tokens )r~  rŒ  r|  rP  r$  ©r)  r$  rÍ   rÍ   rÎ   Úassert_cur_token  s   ÿ
ÿÿÿÿzExprParser.assert_cur_tokenc                 C   s   |   | j|¡S r(  ©Úpos_token_type_isr~  r´  rÍ   rÍ   rÎ   Úcur_token_type_is™  r„  zExprParser.cur_token_type_isÚtypesc                 G   s"   | j t| jƒk o| j| j  j|v S r(  ©r~  rŒ  r|  r$  ©r)  r¹  rÍ   rÍ   rÎ   Úcur_token_type_inœ  s   "zExprParser.cur_token_type_inc                 C   s   |   | jd |¡S rŽ  r¶  r´  rÍ   rÍ   rÎ   Únext_token_type_isŸ  s   zExprParser.next_token_type_isc                 G   s&   | j t| jƒk o| j| j d  j|v S rŽ  rº  r»  rÍ   rÍ   rÎ   Únext_token_type_in¢  s   þzExprParser.next_token_type_inc                 C   s   |t | jƒk o| j| j|kS r(  )rŒ  r|  r$  )r)  r~  r$  rÍ   rÍ   rÎ   r·  ¨  s   zExprParser.pos_token_type_isc                 C   s*   |   |¡ | j| j j}|  jd7  _|S rŽ  )rµ  r|  r~  r%  )r)  r$  r%  rÍ   rÍ   rÎ   Úconsume_token«  s   
zExprParser.consume_tokenc                 C   sî   g }d}|   tj¡ |  tj¡sh|  ¡  ¡ }t|dƒr+|jj	r+| j
 d|jj	¡ d}nt|dƒsGd|v rGd|d v rG| j
 d|d d ¡ d}| |¡ |  tj¡rh|  jd7  _| |  ¡  ¡ ¡ |  tj¡sR|   tj¡ |ru| j
 ¡  |S )z{Parse a paren-bounded expression list for function arguments or IN
        list and return a list of Expr objects.
        FÚ
identifierr   Trm  r
   )r¿  r   ry   r¸  rz   Ú_exprr@  ÚhasattrrÀ  rm  r}  Úinsertr°  r‹   r~  Úpop)r)  ÚexprsÚpath_name_addedÚmsg_exprrÍ   rÍ   rÎ   Úparen_expr_list±  s.   ÿ
þ
zExprParser.paren_expr_listc                 C   s`   |   tj¡ tdƒ}|  tj¡r|  tj¡|d< |  tj¡ | j| j j	|d< |  jd7  _|S )NzMysqlx.Expr.IdentifierÚschema_namerm  r
   )
rµ  r   r†   r   r½  r‰   r¿  r|  r~  r%  )r)  ÚidentrÍ   rÍ   rÎ   rÀ  Ï  s   zExprParser.identifierc                 C   sD   t dƒ}|  ¡ |d< |  ¡ |d< t dƒ}tdƒ|d< | ¡ |d< |S )NzMysqlx.Expr.FunctionCallrm  rn  r2  zMysqlx.Expr.Expr.Type.FUNC_CALLr5  Úfunction_call)r   rÀ  rÈ  r   r@  )r)  rË  rÇ  rÍ   rÍ   rÎ   rË  Ù  s   zExprParser.function_callc                 C   s°   |   tj¡ | j| j }|jtjkr0|j d¡r&|j 	d¡r&t
|j› dƒ‚|   tj¡ |j}n|jtjkr@|   tj¡ |j}nt
d| j› ƒ‚tdƒ}tdƒ|d< ||d< |S )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.MEMBERr5  r%  )r¿  r   r‰   r|  r~  r$  r†   r%  Ú
startswithÚendswithrP  r‡   r   r   )r)  rŸ  Úmember_nameÚdoc_path_itemrÍ   rÍ   rÎ   Údocpath_memberâ  s.   
ÿÿÿÿzExprParser.docpath_memberc                 C   s¸   |   tj¡ |  tj¡r$|   tj¡ |   tj¡ tdƒ}tdƒ|d< |S |  tj¡rTt	|   tj¡ƒ}|dk r>t
d| j› ƒ‚|   tj¡ tdƒ}tdƒ|d< ||d< |S td| j› ƒ‚)	NrÌ  z6Mysqlx.Expr.DocumentPathItem.Type.ARRAY_INDEX_ASTERISKr5  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ˆ   r0  Ú
IndexErrorr~  rP  )r)  rÑ  r%  rÍ   rÍ   rÎ   Údocpath_array_locü  s2   ÿÿÿÿzExprParser.docpath_array_locc                 C   s¸   | j stdƒ‚|  tj¡r|  tj¡ tdƒ}|  tj¡r9tdƒ}tdƒ|d< |  tj¡|d< |d  	| 
¡ g¡ |d  	|  ¡ ¡ | jrL| jd |d	< td
ƒ}tdƒ|d< ||d< |S )Nz-Empty string cannot be used as document fieldúMysqlx.Expr.ColumnIdentifierrÌ  rÍ  r5  r%  Údocument_pathr   rm  r2  úMysqlx.Expr.Expr.Type.IDENTrÀ  )r|  rP  r¸  r   rŠ   r¿  r   r†   r   rZ  r@  r×  r}  )r)  Úcol_idrÑ  r=  rÍ   rÍ   rÎ   Údocument_field  s&   ÿzExprParser.document_fieldc                 C   s   g }	 |   tj¡r| |  ¡  ¡ ¡ nM|   tj¡r1|  tj¡ tdƒ}t	dƒ|d< | | ¡ ¡ n/|   tj
¡rA| |  ¡  ¡ ¡ n|   tj¡r_|  tj¡ tdƒ}t	dƒ|d< | | ¡ ¡ nnqt|ƒ}|dkr~t||d  dƒt	dƒkr~td| j› ƒ‚|S )	z°Parse 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)
        TrÌ  z1Mysqlx.Expr.DocumentPathItem.Type.MEMBER_ASTERISKr5  z1Mysqlx.Expr.DocumentPathItem.Type.DOUBLE_ASTERISKr   r
   z!JSON path may not end in '**' at )r¸  r   r‰   r°  rÒ  r@  r±   r¿  r   r   r{   rÕ  r©   rŒ  r   rP  r~  )r)  Údoc_pathrÑ  rX  rÍ   rÍ   rÎ   r×  +  s8   ÿÿìÿzExprParser.document_pathc                 C   sÂ  g }|  |  tj¡¡ |  tj¡r&|  tj¡ |  |  tj¡¡ |  tj¡st|ƒdkr4td| j› ƒ‚| 	¡  t
dƒ}tdt|ƒƒD ]"}|dkrP|d |d< qC|dkr[|d |d< qC|dkre|d |d	< qCd
}|  tj¡r}d}|  tj¡ |  ¡ |d< n2|  tj¡r¯d}|  tj¡ d
}|  tj¡r›d}|  tj¡ |  tj¡ |  ¡ |d< |r¯|  tj¡ |rÑt|d ƒdkrÑt
dƒ}tdƒ|d< d|d< |d  | ¡ g¡ t
dƒ}tdƒ|d< ||d< |S )Nr   z Too many parts to identifier at rÖ  r   rm  r
   Ú
table_namer   rÉ  FTr×  rÌ  rÍ  r5  r¡  r%  r2  rØ  rÀ  )r°  r¿  r   r†   r¸  r‰   rŒ  rP  r~  Úreverser   ÚrangerŠ   r×  rµ   r¶   r   rZ  r@  )r)  ÚpartsrÙ  r–  Úis_docÚ	is_quotedrÑ  rÇ  rÍ   rÍ   rÎ   Úcolumn_identifierO  sZ   þ€ÿzExprParser.column_identifierc                 C   s6   | j t| jƒkrtdƒ‚| j| j  }|  j d7  _ |S )NzUnexpected end of token streamr
   )r~  rŒ  r|  rP  )r)  rŸ  rÍ   rÍ   rÎ   Ú
next_token€  s
   zExprParser.next_tokenc                 C   s$   |   ¡ }|j|krtd|› ƒ‚d S )Nr³  )rã  r$  rP  )r)  r$  rŸ  rÍ   rÍ   rÎ   Úexpect_token‡  s   
ÿzExprParser.expect_tokenc                 C   s   | j | j S r(  )r|  r~  r,  rÍ   rÍ   rÎ   Ú
peek_tokenŒ  ry  zExprParser.peek_tokenc                 C   s    | j | j j}|  jd7  _|S rŽ  )r|  r~  r%  )r)  r%  rÍ   rÍ   rÎ   Úconsume_any_token  s   zExprParser.consume_any_tokenc                 C   s¢   t dƒ}| jt| jƒk r9|  tj¡s9|d  |  ¡  	¡ g¡ |  tj
¡s%n|  tj
¡ | jt| jƒk r9|  tj¡r|  tj¡ t dƒ}tdƒ|d< | 	¡ |d< |S )zH
        jsonArray            ::=  "[" [ expr ("," expr)* ] "]"
        r\  r%  r2  r7  r5  r8  )r   r~  rŒ  r|  r¸  r   r|   rZ  rÁ  r@  r‹   r¿  r   )r)  rF  r=  rÍ   rÍ   rÎ   Úparse_json_array”  s    ÿúÿzExprParser.parse_json_arrayc                 C   sÒ   t dƒ}| jt| jƒk rQ|  tj¡sQt dƒ}|  tj¡|d< |  tj	¡ |  
¡  ¡ |d< |d  | ¡ g¡ |  tj¡s=n|  tj¡ | jt| jƒk rQ|  tj¡r|  tj¡ t dƒ}tdƒ|d< | ¡ |d	< |S )
z‹
        jsonDoc              ::=  "{" [jsonKeyValue ("," jsonKeyValue)*] "}"
        jsonKeyValue         ::=  STRING_DQ ":" expr
        rS  rT  rU  r%  rV  r2  r4  r5  r6  )r   r~  rŒ  r|  r¸  r   r¯   r¿  r‡   r«   rÁ  r@  rZ  r‹   r   )r)  rF  Úitemr=  rÍ   rÍ   rÎ   Úparse_json_doc§  s(   ÿöÿzExprParser.parse_json_docrŸ  c                 C   s¸   d}|   tj¡r|  tj¡}n!|   tj¡r|  tj¡}n|jtjkr(t| jƒ}nt	d| j
› ƒ‚tdƒ}tdƒ|d< || jv rH| j| |d< |S | j|d< | j| j|< |  jd7  _|S )Nr¡  z&Invalid placeholder name at token pos r2  z!Mysqlx.Expr.Expr.Type.PLACEHOLDERr5  Úpositionr
   )r¸  r   rˆ   r¿  r†   r$  r¨   r1  r  rP  r~  r   r   r€  )r)  rŸ  Úplace_holder_namerÇ  rÍ   rÍ   rÎ   Úparse_place_holder¿  s(   

ûþÿzExprParser.parse_place_holderc                 C   s’   t ddd}|  tj¡ |d  |  ¡  ¡ g¡ |  tj¡ tt	 
|  ¡ ¡ƒ}|d  t|ƒ ¡ g¡ |  tj¡ t d| ¡ d}tdƒ|d< |S )	z2cast ::= CAST LPAREN expr AS cast_data_type RPARENro  rÛ   ©rm  rn  r2  ©rq  rp  r5  )r   r¿  r   ry   rZ  rÁ  r@  r´   rI  r1  rY  Úcast_data_typerl  rz   r   )r)  rq  Útype_scalarrF  rÍ   rÍ   rÎ   rÛ   Ö  s   zExprParser.castc                 C   sÞ   |   ¡ }|jtjtjtjtjfv r!|  ¡ }|r|j› |› S |jS |jtj	u r8|  d¡}|r5|j› |› S |jS |jtj
tjfv rP|  tj¡rM|  tj¡ |jS |jtjtjtjfv r^|jS td|j› d| j› d|j› dƒ‚)a  cast_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»   rP  r~  )r)  rŸ  Ú	dimensionrÍ   rÍ   rÎ   rï  ä  s6   ü
ýÿÿzExprParser.cast_data_typeró   c                 C   s¢   |   tj¡sdS g }|  tj¡ | |  tj¡¡ |r0|   tj¡r0|  tj¡ | |  tj¡¡ |  tj¡ t|ƒdkrDd|d › dS d|d › d|d › dS )z*dimension ::= LPAREN LNUM (, LNUM)? RPARENNr
   r.  r   r/  r­  )	r¸  r   ry   r¿  r°  rˆ   r‹   rz   rŒ  )r)  ró   rò  rÍ   rÍ   rÎ   rñ    s   ÿÿýz#ExprParser.cast_data_type_dimensionc                  C   s(   t dƒ} tdƒ| d< t ddd| d< | S )Nr2  rp  r5  ro  r  rí  rq  r   r`  rÍ   rÍ   rÎ   Ústar_operator  s   zExprParser.star_operatorc                 C   sP  |   ¡ }|jtjtjfv r|  |¡S |jtjkr|  ¡ S |jtjkr&|  	¡ S |jtj
kr0|  ¡ S |jtjkrB|  ¡ }|  tj¡ |S |jtjtjfv rl|  ¡ }|jtjkrd|j|j | j| j _|  ¡ S t|j|  ¡ ƒS |jtjtjtjfv rt|j|  ¡ ƒS |jtjkrŒtt|jƒƒS |jtjkr—tt ƒ ƒS |jtjkr´d|jv r«tt!t"|jƒƒƒS tt#t$|jƒƒƒS |jtj%tj&fv rÇtt'|jtj%kƒƒS |jtj(krÑ|  )¡ S |jtj*krÛ|  +¡ S |jtj,kr| jd | _|  -tj¡s|  -tj.¡r|  /| jd tj,¡r|  /| jd tj¡r|  0¡ S | j1s|  )¡ S |  2¡ S t3d|j› d| j› ƒ‚)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®   ré  r{   rç  r°   rÛ   ry   rÁ  rä  rz   r—   r˜   rå  rˆ   r%  r|  r~  Úatomic_exprrs  rt   r   rž   r‡   rl  rH  r   rO  rN  rM  rL  r0  r~   r€   rK  rŠ   rÚ  r™   ró  r†   r½  r‰   r·  rË  r  râ  rP  )r)  rŸ  r=  ÚpeekrÍ   rÍ   rÎ   rô  %  sr   


ÿ
ÿþý
ÿÿý
ÿÿzExprParser.atomic_exprÚinner_parserc                 C   s¾   |ƒ }| j t| jƒk r]| j| j  j|v r]tdƒ}tdƒ|d< tdƒ}t| j| j  j |d< | ¡ g|d< |  j d7  _ |d  	|ƒ  ¡ g¡ ||d< |}| j t| jƒk r]| j| j  j|v s|S )	z}Given a `set' of types and an Expr-returning inner parser function,
        parse a left associate binary operator expressionr2  rp  r5  ro  rm  rn  r
   rq  )
r~  rŒ  r|  r$  r   r   Ú
_OPERATORSr%  r@  rZ  )r)  r¹  rö  ÚlhsrF  rq  rÍ   rÍ   rÎ   Úparse_left_assoc_binary_op_expra  s   ""÷
z*ExprParser.parse_left_assoc_binary_op_exprc                 C   sè   |   ¡ }|  tjtj¡rr|  tj¡rr|  ¡ }tdƒ}|d  	| 
¡ g¡ |jtju r,dnd|d< |  tj¡ |d  	|  ¡  
¡ g¡ | jtŽ sOtd| j› ƒ‚t |  ¡  ¡ ¡}|d  	tt|ƒƒ 
¡ g¡ td|d}td	ƒ|d
< |S )Nro  rn  Údate_addÚdate_subrm  z#Expected interval type at position r2  rî  rp  r5  )rô  r¼  r   r—   r˜   r½  rƒ   rã  r   rZ  r@  r$  r¿  Úbit_exprÚ_INTERVAL_UNITSrP  r~  r1  rY  ræ  r  rl  rI  r   )r)  rø  rŸ  rq  rÍ   rÍ   rÎ   Úadd_sub_intervalt  s,   ÿ
þÿ
ÿzExprParser.add_sub_intervalc                 C   ó   |   ttjtjtjgƒ| j¡S r(  )rù  Úsetr   r™   rš   rª   rþ  r,  rÍ   rÍ   rÎ   Úmul_div_expr‘  ó   þzExprParser.mul_div_exprc                 C   ó   |   ttjtjgƒ| j¡S r(  )rù  r   r   r—   r˜   r  r,  rÍ   rÍ   rÎ   Úadd_sub_expr—  ó   ÿzExprParser.add_sub_exprc                 C   r  r(  )rù  r   r   r•   r–   r  r,  rÍ   rÍ   rÎ   Ú
shift_exprœ  r  zExprParser.shift_exprc                 C   rÿ  r(  )rù  r   r   r’   r“   r”   r  r,  rÍ   rÍ   rÎ   rü  ¡  r  zExprParser.bit_exprc              	   C   s*   |   ttjtjtjtjtjtjgƒ| j	¡S r(  )
rù  r   r   r   rŽ   r‘   r   rŒ   r   rü  r,  rÍ   rÍ   rÎ   Ú	comp_expr§  s   úÿ
õzExprParser.comp_exprc                 C   sR  g }|   ¡ }d}|  tj¡rd}|  tj¡ | jt| jƒk r'| | 	¡ ¡ | j| j j
}|  tj¡rQ|  tj¡ |  tj¡rGd}|  tj¡ | |   ¡  	¡ ¡ n®|  tj¡rw|  tj¡ |  tj¡rk| |  ¡ ¡ n”d}| |   ¡  	¡ ¡ nˆ|  tj¡r|  tj¡ | |   ¡  	¡ ¡ nr|  tj¡r¸|  tj¡ | |   ¡  	¡ ¡ |  tj¡r·|  tj¡ | |   ¡  	¡ ¡ nG|  tj¡rÝ|  tj¡ | |   ¡  	¡ ¡ |  tj¡ | |   ¡  	¡ ¡ n"|  tj¡ró|  tj¡ | |   ¡  	¡ ¡ n|rýtd| j› ƒ‚d }|r'tdƒ}|rt| n||d< ||d< tdƒ}td	ƒ|d
< | 	¡ |d< |}|S )NFTr  zUnknown token after NOT as pos ro  rm  rn  r2  rp  r5  rq  )r  r¸  r   rt   r¿  r~  rŒ  r|  r°  r@  r%  rx   r   ry   rZ  rÈ  rÌ   r‚   r…   r}   ru   r„   rP  r   Ú	_NEGATIONr   )r)  Úparamsrø  r  Úop_namerq  rÇ  rÍ   rÍ   rÎ   Ú	ilri_expr¶  sf   €zExprParser.ilri_exprc                 C   r  r(  )rù  r   r   ru   r­   r  r,  rÍ   rÍ   rÎ   Úand_exprî  r  zExprParser.and_exprc                 C   s   |   ttjgƒ| j¡S r(  )rù  r   r   rw   r  r,  rÍ   rÍ   rÎ   Úxor_expró  s   zExprParser.xor_exprc                 C   r  r(  )rù  r   r   rv   r¬   r  r,  rÍ   rÍ   rÎ   Úor_exprö  r  zExprParser.or_exprr3  c                 C   s,   |rg | _ d| _i | _d| _|  ¡  |  ¡ S r{  )r|  r~  r€  r  rƒ  r  )r)  r3  rÍ   rÍ   rÎ   rÁ  û  s   zExprParser._exprc                 C   sd   |   |¡}| j}|  t| jƒd tj¡r|d7 }|t| jƒk r0td| j| jd … › d| j› ƒ‚|S )Nr   zUnused token types z" found in expression at position: )rÁ  r~  r·  rŒ  r|  r   r´   rP  )r)  r3  Ú
expressionÚused_tokensrÍ   rÍ   rÎ   r=    s   
ÿÿzExprParser.exprc                 C   s   t d|  tj¡dS )NzMysqlx.Crud.Columnrí  )r   r¿  r   r†   r,  rÍ   rÍ   rÎ   Úparse_table_insert_field  s   z#ExprParser.parse_table_insert_fieldc                 C   s
   |   ¡ jS r(  )râ  rÀ  r,  rÍ   rÍ   rÎ   Úparse_table_update_field  s   
z#ExprParser.parse_table_update_fieldc                 C   sÄ   g }| j  d¡}| ¡  |r`| ¡ }| d¡| d¡ks0| d¡| d¡ks0| d¡| d¡krW| ¡ › d|› }| d¡| d¡ks0| d¡| d¡ks0| d¡| d¡ks0| | ¡ ¡ |s|S )Nr­  r.  r/  r«  r¬  r¨  r©  )rt  ÚsplitrÝ  rÄ  Úcountr°  r‹  )r)  ÚfieldsÚtempÚfieldrÍ   rÍ   rÎ   Ú_table_fields  s   üø	zExprParser._table_fieldsc                 C   s    g }d}|   ¡ }| jt| jƒk rN|s|  tj¡ d}td|  ¡ d}|  	tj
¡r7|  tj
¡ |  tj¡|d< n|t|ƒ |d< | | ¡ ¡ | jt| jƒk s|S )NTFzMysqlx.Crud.Projection)ÚsourceÚalias)r  r~  rŒ  r|  r¿  r   r‹   r   rÁ  r¸  r´   r†   r°  r@  )r)  Úproject_exprÚfirstr  Ú
projectionrÍ   rÍ   rÎ   Úparse_table_select_projection%  s   öz(ExprParser.parse_table_select_projectionc                 C   s¨   g }d}| j t| jƒk rR|s|  tj¡ d}td|  ¡ d}|  tj	¡r1t
dƒ|d< |  tj	¡ n|  tj¡rCt
dƒ|d< |  tj¡ | | ¡ ¡ | j t| jƒk s|S )NTFzMysqlx.Crud.Order)r=  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°  r@  )r)  Úorder_specsr  ÚorderrÍ   rÍ   rÎ   Úparse_order_spec9  s    õzExprParser.parse_order_specc                 C   sR   g }d}| j t| jƒk r'|s|  tj¡ d}| |  ¡  ¡ ¡ | j t| jƒk s|S )NTF)	r~  rŒ  r|  r¿  r   r‹   r°  rÁ  r@  )r)  Ú	expr_listr  rÍ   rÍ   rÎ   Úparse_expr_listL  s   üzExprParser.parse_expr_list)T)r'  N)F)Hrp   rq   rr   rs   r1  rJ  r*  r+  r‚  r0  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ñ  Ústaticmethodró  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<  ´  s’    

o
þ
	
þ$1'<ÿ
ÿ
þ8	
þ
þþr<  N)jrs   Ú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ý  ru   rv   rw   rx   rt   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÷  rr  r  r#  rG  rD  r?  rC  rO  rM  rN  r0  rL  rf  rH  rJ  rK  rh  rI  rl  r1  rs  rx  r<  rÍ   rÍ   rÍ   rÎ   Ú<module>   sâ  ( ^ìÿÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à!ß"Þ#Ý$Ü%Û&Ú'Ù(Ø)×*Ö+Õ,Ô-Ó.Ò/Ñ0Ð1Ï2Î3Í4Ì8øÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à!ß%û	ù	
