B
    Ñš[äx  ã               @   sv  d dl mZmZ d dlmZ d dlmZmZmZ d dl	m
Z
mZmZ erLe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g	ƒZ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ejejejejejejejej-ej.ej/dœZ0G dd	„ d	ƒZ1d
d„ Z2dd„ Z3dd„ Z4dd„ Z5dd„ Z6dd„ Z7dd„ Z8dd„ Z9G dd„ dƒZ:d"dd„Z;dd „ Z<d!S )#é   )ÚSTRING_TYPESÚPY3)ÚScalar)ÚColumnIdentifierÚDocumentPathItemÚExpr)ÚColumnÚOrderÚ
Projectionc               @   s  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@ZBdAZCdBS )CÚ	TokenTyper   é   é   é   é   é   é   é   é	   é
   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é    é!   é"   é#   é$   é%   é&   é'   é(   é)   é*   é+   é,   é-   é.   é/   é0   é1   é2   é3   é4   é5   é6   é7   é8   é9   é:   é;   é<   é=   é>   é?   é@   éA   N)DÚ__name__Ú
__module__Ú__qualname__ÚNOTÚANDÚORÚXORÚISÚLPARENÚRPARENÚ
LSQBRACKETÚ
RSQBRACKETÚBETWEENÚTRUEÚNULLÚFALSEÚINÚLIKEÚINTERVALÚREGEXPÚESCAPEÚIDENTÚLSTRINGÚLNUMÚDOTÚDOLLARÚCOMMAÚEQÚNEÚGTÚGEÚLTÚLEÚBITANDÚBITORÚBITXORÚLSHIFTÚRSHIFTÚPLUSÚMINUSÚMULÚDIVÚHEXÚBINÚNEGÚBANGÚMICROSECONDÚSECONDÚMINUTEÚHOURÚDAYÚWEEKÚMONTHÚQUARTERÚYEARÚEROTEMEÚ
DOUBLESTARÚMODÚCOLONÚORORÚANDANDÚLCURLYÚRCURLYÚCASTÚDOTSTARÚORDERBY_ASCÚORDERBY_DESCÚAS© r�   r�   ú�C:\Users\HIRONO~1\AppData\Local\Temp\pip-install-ioykiiwb\mysql-connector-python-rf\mysql_connector_python_rf-2.2.2.data\purelib\mysqlx\expr.pyr   "   s‚   r   )ÚandÚorÚxorÚisÚnotZlikeÚinÚregexpZbetweenÚintervalÚescapeÚcastÚdivÚhexÚbinÚtrueÚfalseÚnullÚsecondÚminuteÚhourÚdayÚweekÚmonthZquarterÚyearÚmicrosecondZascÚdescÚasc               @   s&   e Zd Zd	dd„Zdd„ Zdd„ ZdS )
ÚTokenr   c             C   s   || _ || _|| _d S )N)ÚtypeÚvalÚlen)Úselfr­   r®   r¯   r�   r�   r‘   Ú__init__”   s    zToken.__init__c             C   s   |   ¡ S )N)Ú__str__)r°   r�   r�   r‘   Ú__repr__™   s    zToken.__repr__c             C   sJ   | j tjks$| j tjks$| j tjkr<t| j ƒd | j d S t| j ƒS d S )Nú(ú))r­   r   ra   rc   rb   Ústrr®   )r°   r�   r�   r‘   r²   œ   s    zToken.__str__N)r   )rL   rM   rN   r±   r³   r²   r�   r�   r�   r‘   r¬   “   s   
r¬   c               C   s   t t jd�S )N)r­   )r   ZV_NULLr�   r�   r�   r‘   Úbuild_null_scalar¦   s    r·   c             C   s   t t j| d�S )N)r­   Zv_double)r   ZV_DOUBLE)Údr�   r�   r‘   Úbuild_double_scalarª   s    r¹   c             C   s   t t j| d�S )N)r­   Zv_signed_int)r   ZV_SINT)Úir�   r�   r‘   Úbuild_int_scalar®   s    r»   c             C   s.   t | tƒrtt| dƒƒ} ttjtj| d�d�S )Nzutf-8)Úvalue)r­   Zv_string)Ú
isinstancer   ÚbytesÚ	bytearrayr   ZV_STRINGÚString)Úsr�   r�   r‘   Úbuild_string_scalar²   s    
rÂ   c             C   s   t ƒ }t j|_| |_|S )N)r   ZV_BOOLr­   Zv_bool)ÚbrÁ   r�   r�   r‘   Úbuild_bool_scalar¸   s    rÄ   c             C   s   t ƒ }t j|_|j | ¡ |S )N)r   ÚLITERALr­   ÚliteralÚCopyFrom)ZanyvalÚer�   r�   r‘   Úbuild_literal_expr¿   s    rÉ   c             C   s,   t ƒ }t j|_| |j_|jj ¡  |¡ |S )N)r   ÚOPERATORr­   ÚoperatorÚnameÚparamÚaddrÇ   )rÌ   rÍ   rÈ   r�   r�   r‘   Úbuild_unary_opÆ   s
    rÏ   c             C   s   |   dd¡S )Nú"z"")Úreplace)Ústringr�   r�   r‘   Úescape_literalÎ   s    rÓ   c               @   sD  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%dGdH„ Z&dIdJ„ Z'dKdL„ Z(dMdN„ Z)dOS )PÚ
ExprParserc             C   s0   || _ g | _d| _|| _i | _d| _|  ¡  d S )Né    )rÒ   ÚtokensÚposÚ_allowRelationalColumnsÚplaceholder_name_to_positionÚpositional_placeholder_countÚlex)r°   rÒ   ÚallowRelationalr�   r�   r‘   r±   Ó   s    zExprParser.__init__c             C   s$   |d t | jƒk o"| j|d  |kS )Nr   )r¯   rÒ   )r°   rº   Úcr�   r�   r‘   Únext_char_isÝ   s    zExprParser.next_char_isc             C   s†   |}d}xX|t | jƒk r`| j|  ¡ s4| j| dkr`| j| dkrV|dkrRtdƒ‚d}|d }q
W | j||… }ttj|t |ƒƒ}|S )NFÚ.Tz"Invalid number. Found multiple '.'r   )r¯   rÒ   ÚisdigitÚ
ValueErrorr¬   r   rc   )r°   r×   ÚstartZ	found_dotr®   Útr�   r�   r‘   Ú
lex_numberà   s    zExprParser.lex_numberc             C   s–   |}x6|t | jƒk r:| j|  ¡ s0| j| dkr:|d }qW | j||… }y tt| ¡  | ¡ t |ƒƒ}W n& tk
r�   ttj	|t |ƒƒ}Y nX |S )NÚ_r   )
r¯   rÒ   Úisalnumr¬   ÚreservedWordsÚlowerÚupperÚKeyErrorr   ra   )r°   rº   râ   r®   Útokenr�   r�   r‘   Ú	lex_alphañ   s     zExprParser.lex_alphac             C   s  | j | }d}|d7 }|}x˜|t| j ƒk r²| j | }||krd|d t| j ƒk rd| j |d  |krdP nD||kst|dkr |d t| j ƒkrˆP |d }|| j |  }n|| }|d }qW |t| j ƒksÐ| j | |krÞtd |¡ƒ‚|dkrüttj|t|ƒd ƒS ttj|t|ƒd ƒS d S )NÚ r   ú\z*Unterminated quoted string starting at {0}ú`r   )rÒ   r¯   rá   Úformatr¬   r   ra   rb   )r°   rº   Ú
quote_charr®   râ   rÝ   r�   r�   r‘   Úlex_quoted_tokený   s,    

zExprParser.lex_quoted_tokenc             C   sV  d}�xJ|t | jƒk �rP| j| }| ¡ r8|d7 }q�n | ¡ rN|  |¡}�nê| ¡ s^|dkrl|  |¡}�nÌ|dkr„ttj	|ƒ}�n´|dkrœttj
|ƒ}�nœ|dkr´ttj|ƒ}�n„|dkrÌttj|ƒ}�nl|dkrättj|ƒ}�nT|d	krüttj|ƒ �n<|d
k�r2|  |d
¡�r"ttjdƒ}nttj|ƒ}�n|dk�rLttj|ƒ}�nì|dk�rfttj|ƒ}�nÒ|dk�r€ttj|ƒ}�n¸|dk�rº|  |d¡�r¨ttjddƒ}nttjddƒ}�n~|dk�rð|  |d¡�ràttj|ƒ}nttj|ƒ}�nH|dk�r&|  |d¡�rttjdƒ}nttj|ƒ}�n|dk�r@ttj|ƒ}�nø|dk�rZttj|ƒ}�nÞ|dk�rtttj|ƒ}�nÄ|dk�rŽttj|ƒ}�nª|dk�r¨ttj|ƒ}�n�|dk�rÂttj|ƒ}�nv|dk�rø|  |d¡�rèttj dƒ}nttj!|ƒ}�n@|dk�rH|  |d¡�rttj"dƒ}n(|  |d¡�r:ttj#dƒ}nttj$|ƒ}nð|d k�r˜|  |d ¡�rnttj%d!ƒ}n(|  |d¡�rŠttj&d"ƒ}nttj'|ƒ}n |d#k�r |  |d
¡�r¾ttj(d$ƒ}n@|d t | jƒk �rò| j|d   ¡ �rò|  |¡}nttj)|ƒ}n8|d%k�s|d&k�s|d'k�r*|  *|¡}nt+d( ,|¡ƒ‚| j- .|¡ ||j 7 }qW d S ))NrÕ   r   rå   ú?ú:Ú{Ú}ú+ú-Ú*z**ú/ú$ú%ú=z==r   ú&ú|z||r´   rµ   ú[ú]ú~ú,ú!z!=ú<z<<z<=ú>z>>z>=rß   z.*rÐ   ú'rï   zUnknown character at {0})/r¯   rÒ   Úisspacerà   rä   Úisalpharì   r¬   r   rƒ   r†   r‰   rŠ   rr   rs   rÞ   r„   rt   ru   re   r…   rg   rˆ   rm   r‡   rn   rT   rU   rV   rW   rx   rf   rh   ry   rp   rl   rk   rq   rj   ri   rŒ   rd   rò   rá   rð   rÖ   Úappend)r°   rº   rÝ   rë   r�   r�   r‘   rÛ     s¦    

















(zExprParser.lexc             C   sT   | j t| jƒkr"td || j ¡ƒ‚| j| j  j|krPtd || j | j| j  ¡ƒ‚d S )Nz5Expected token type {0} at pos {1} but no tokens leftz5Expected token type {0} at pos {1} but found type {2})r×   r¯   rÖ   rá   rð   r­   )r°   r­   r�   r�   r‘   Úassert_cur_tokenw  s    zExprParser.assert_cur_tokenc             C   s   |   | j|¡S )N)Úpos_token_type_isr×   )r°   r­   r�   r�   r‘   Úcur_token_type_is€  s    zExprParser.cur_token_type_isc             C   s   |   | jd |¡S )Nr   )r  r×   )r°   r­   r�   r�   r‘   Únext_token_type_isƒ  s    zExprParser.next_token_type_isc             C   s   |t | jƒk o| j| j|kS )N)r¯   rÖ   r­   )r°   r×   r­   r�   r�   r‘   r  †  s    zExprParser.pos_token_type_isc             C   s(   |   |¡ | j| j j}| jd | _|S )Nr   )r  rÖ   r×   r®   )r°   r­   Úvr�   r�   r‘   Úconsume_token‰  s    
zExprParser.consume_tokenc             C   sf   g }|   tj¡ |  tj¡sV| |  ¡ ¡ x*|  tj¡rT| jd | _| |  ¡ ¡ q,W |   tj¡ |S )z{Parse a paren-bounded expression list for function arguments or IN
        list and return a list of Expr objects.
        r   )	r  r   rT   r  rU   r
  Úexprrf   r×   )r°   Úexprsr�   r�   r‘   Úparen_expr_list�  s    zExprParser.paren_expr_listc             C   sX   |   tj¡ tƒ }|  tj¡r8|  tj¡|_|  tj¡ | j| j	 j
|_| j	d | _	|S )Nr   )r  r   ra   Z
Identifierr  rd   r  Úschema_namerÖ   r×   r®   rÌ   )r°   Úidr�   r�   r‘   Ú
identifier�  s    zExprParser.identifierc             C   s6   t ƒ }t j|_|jj |  ¡ ¡ |jj |  	¡ ¡ |S )N)
r   Z	FUNC_CALLr­   Úfunction_callrÌ   rÇ   r  rÍ   Úextendr  )r°   rÈ   r�   r�   r‘   r  §  s
    zExprParser.function_callc             C   s¤   |   tj¡ | j| j }|jtjkr`|j d¡rL|j 	d¡rLt
d |j¡ƒ‚|   tj¡ |j}n2| jjtjkr‚|   tj¡ |j}nt
d | j¡ƒ‚ttj|d�}|S )Nrï   z-{0} is not a valid JSON/ECMAScript identifierzBExpected token type IDENT or LSTRING in JSON path at token pos {0})r­   r¼   )r  r   rd   rÖ   r×   r­   ra   r®   Ú
startswithÚendswithrá   rð   r¼   rë   rb   r   ÚMEMBER)r°   rë   Z
memberNameÚitemr�   r�   r‘   Údocpath_member®  s    

zExprParser.docpath_memberc             C   s’   |   tj¡ |  tj¡r0|   tj¡ ttjd�S |  tj¡r~t	|   tj¡ƒ}|dk rdt
d | j¡ƒ‚|   tj¡ ttj|d�S td | j¡ƒ‚d S )N)r­   rÕ   z%Array index cannot be negative at {0})r­   ÚindexzJException token type MUL or LNUM in JSON path array index at token pos {0})r  r   rV   r  rt   rW   r   ZARRAY_INDEX_ASTERISKrc   ÚintÚ
IndexErrorrð   r×   ZARRAY_INDEXrá   )r°   r  r�   r�   r‘   Údocpath_array_locÁ  s    
zExprParser.docpath_array_locc             C   sP   t ƒ }|  tj¡r2|j ttj|  tj¡d�g¡ |j |  ¡ ¡ t	t	j|d�S )N)r­   r¼   )r­   r  )
r   r  r   ra   Údocument_pathr  r   r  r  r   )r°   Úcolr�   r�   r‘   Údocument_fieldÒ  s    zExprParser.document_fieldc             C   sÔ   g }x–|   tj¡r"| |  ¡ ¡ q|   tj¡rN|  tj¡ | ttjd�¡ q|   tj	¡rj| |  
¡ ¡ q|   tj¡r–|  tj¡ | ttjd�¡ qP qW t|ƒ}|dkrÐ||d  jtj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)
        )r­   rÕ   r   z$JSON path may not end in '**' at {0})r  r   rd   r
  r  rŒ   r  r   ZMEMBER_ASTERISKrV   r!  r„   ZDOUBLE_ASTERISKr¯   r­   rá   rð   r×   )r°   ZdocpathÚitemsr�   r�   r‘   r"  Û  s*    
zExprParser.document_pathc             C   s  g }|  |  tj¡¡ x.|  tj¡rD|  tj¡ |  |  tj¡¡ qW t|ƒdkrbtd | j	¡ƒ‚| 
¡  tƒ }xPtdt|ƒƒD ]>}|dkr˜|d |_q€|dkr¬|d |_q€|dkr€|d |_q€W |  tj¡rä|  tj¡ |  ¡ |_tƒ }tj|_|j |¡ |S )Nr   z#Too many parts to identifier at {0}rÕ   r   r   )r
  r  r   ra   r  rd   r¯   rá   rð   r×   Úreverser   ÚxrangerÌ   Z
table_namer  re   r"  r   r­   r  rÇ   )r°   ÚpartsZcolidrº   rÈ   r�   r�   r‘   Úcolumn_identifier÷  s0    

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Ö   rá   )r°   rã   r�   r�   r‘   Ú
next_token  s
    zExprParser.next_tokenc             C   s$   |   ¡ }|j|kr td |¡ƒ‚d S )NzExpected token type {0})r*  r­   rá   rð   )r°   Ú
token_typerã   r�   r�   r‘   Úexpect_token  s    
zExprParser.expect_tokenc             C   s
   t ƒ }d S )N)ZObject)r°   Úor�   r�   r‘   Úparse_json_doc  s    zExprParser.parse_json_docc             C   s²   d}|   tj¡r|  tj¡}nB|   tj¡r8|  tj¡}n(|jtjkrPt| j	ƒ}nt
d | j¡ƒ‚| ¡ }ttjd�}|| jkrŒ| j| |_n"| j	|_| j	| j|< |  j	d7  _	|S )Nrí   z)Invalid placeholder name at token pos {0})r­   r   )r  r   rc   r  ZLNUM_INTra   r­   rƒ   r¶   rÚ   rá   rð   r×   rè   r   ZPLACEHOLDERrÙ   Úposition)r°   rë   Zplace_holder_namer  r�   r�   r‘   Úparse_place_holder!  s"    

zExprParser.parse_place_holderc             C   s`  |   ¡ }|jtjtjgkr$|  |¡S |jtjkr8|  ¡ S |jtjkrH�n |jtj	krl|  
¡ }|  tj¡ |S |jtjtjgkr‚�nÆ|jtjtjgkrÖ|  ¡ }|jtjkrÆ|j|j | j| j _|  ¡ S t|j|  ¡ ƒS |jtjtjtjgk� rþt|j|  ¡ ƒS |jtjk�rtt|jƒƒS |jtjk�r2ttƒ ƒS |jtjk�rrd|jk�r^ttt|jƒƒƒS tt t!|jƒƒƒS nÖ|jtj"tj#gk�rštt$|jtj"kƒƒS |jtj%k�r°|  &¡ S |jtj'k�rÆ|  (¡ S |jtj)k�rH| jd | _|  *tj	¡�s(|  *tj+¡�r0|  ,| jd tj)¡�r0|  ,| jd tj	¡�r0|  -¡ S | j.�s@|  &¡ S |  /¡ S t0d 1|j| j¡ƒ‚dS )z<Parse an atomic expression and return a protobuf Expr objectrß   r   r   r   zAUnknown token type = {0}  when expecting atomic expression at {1}N)2r*  r­   r   rƒ   r†   r0  r‰   r.  r‹   rT   r  r,  rU   rr   rs   Z
peek_tokenrc   r®   rÖ   r×   Úatomic_exprrÏ   rO   rx   ry   rb   rÉ   rÂ   rZ   r·   r¹   Úfloatr»   r  rY   r[   rÄ   re   r$  rt   ZstarOperatorra   r  rd   r  r  rØ   r)  rá   rð   )r°   rë   rÈ   Úpeekr�   r�   r‘   r1  9  s`    

zExprParser.atomic_exprc             C   sˆ   |ƒ }x|| j t| jƒk r‚| j| j  j|kr‚tƒ }tj|_| j| j  j|j_|jj	 
¡  |¡ | j d | _ |jj	 
¡  |ƒ ¡ |}qW |S )z}Given a `set' of types and an Expr-returning inner parser function,
        parse a left associate binary operator expressionr   )r×   r¯   rÖ   r­   r   rÊ   r®   rË   rÌ   rÍ   rÎ   rÇ   )r°   ÚtypesZinner_parserÚlhsrÈ   r�   r�   r‘   Úparse_left_assoc_binary_op_expr‚  s    z*ExprParser.parse_left_assoc_binary_op_exprc             C   s   |   ttjtjtjgƒ| j¡S )N)r6  Úsetr   rt   ru   r…   r1  )r°   r�   r�   r‘   Úmul_div_expr’  s    zExprParser.mul_div_exprc             C   s   |   ttjtjgƒ| j¡S )N)r6  r7  r   rr   rs   r8  )r°   r�   r�   r‘   Úadd_sub_expr—  s    zExprParser.add_sub_exprc             C   s   |   ttjtjgƒ| j¡S )N)r6  r7  r   rp   rq   r9  )r°   r�   r�   r‘   Ú
shift_expr›  s    zExprParser.shift_exprc             C   s   |   ttjtjtjgƒ| j¡S )N)r6  r7  r   rm   rn   ro   r:  )r°   r�   r�   r‘   Úbit_exprŸ  s    zExprParser.bit_exprc          	   C   s*   |   ttjtjtjtjtjtjgƒ| j	¡S )N)
r6  r7  r   rj   ri   rl   rk   rg   rh   r;  )r°   r�   r�   r‘   Ú	comp_expr¤  s    zExprParser.comp_exprc             C   sØ  |   ¡ }d}|  tj¡r(d}|  tj¡ | jt| jƒk �rÔ|g}| j| j j}|  tj	¡r”|  tj	¡ |  tj¡r‚d}|  tj¡ | 
|   ¡ ¡ �n|  tj¡r¼|  tj¡ | |  ¡ ¡ nÚ|  tj¡�r|  tj¡ | 
|   ¡ ¡ |  tj¡�r–|  tj¡ | 
|   ¡ ¡ nˆ|  tj¡�rR|  tj¡ | 
|   ¡ ¡ |  tj¡ | 
|   ¡ ¡ nD|  tj¡�r||  tj¡ | 
|   ¡ ¡ n|�r’td | j¡ƒ‚d }|�rÔtƒ }tj|_||j_|jj |¡ |�rÐtd|ƒ}|}|S )NFTz"Unknown token after NOT as pos {0}rO   )r<  r  r   rO   r  r×   r¯   rÖ   r®   rS   r
  r\   r  r  r]   r`   rX   rP   r_   rá   rð   r   rÊ   r­   rË   rÌ   rÍ   rÏ   )r°   r5  Úis_notÚparamsZop_namerÈ   r�   r�   r‘   Ú	ilri_expr©  sX    

zExprParser.ilri_exprc             C   s   |   ttjtjgƒ| j¡S )N)r6  r7  r   rP   rˆ   r?  )r°   r�   r�   r‘   Úand_exprÚ  s    zExprParser.and_exprc             C   s   |   ttjtjgƒ| j¡S )N)r6  r7  r   rQ   r‡   r@  )r°   r�   r�   r‘   Úor_exprÞ  s    zExprParser.or_exprc             C   s   |   ¡ S )N)rA  )r°   r�   r�   r‘   r  â  s    zExprParser.exprc             C   s   t |  tj¡d�S )N)rÌ   )r   r  r   ra   )r°   r�   r�   r‘   Úparse_table_insert_fieldå  s    z#ExprParser.parse_table_insert_fieldc             C   s
   |   ¡ jS )N)r)  r  )r°   r�   r�   r‘   Úparse_table_update_fieldè  s    z#ExprParser.parse_table_update_fieldc             C   s’   g }d}x„| j t| jƒk rŒ|s*|  tj¡ d}t|  ¡ d�}|  tj	¡rd|  tj	¡ |  tj
¡|_n|  j d8  _ |  tj
¡|_| |¡ q
W |S )NTF)Úsourcer   )r×   r¯   rÖ   r  r   rf   r
   r  r  r�   ra   Úaliasr
  )r°   Zproject_exprÚfirstZ
projectionr�   r�   r‘   Úparse_table_select_projectionë  s    z(ExprParser.parse_table_select_projectionc             C   s�   g }d}x‚| j t| jƒk rŠ|s*|  tj¡ d}t|  ¡ d�}|  tj	¡r^tj
|_|  tj	¡ n |  tj¡r~tj|_|  tj¡ | |¡ q
W |S )NTF)r  )r×   r¯   rÖ   r  r   rf   r	   r  r  r�   ÚASCÚ	directionrŽ   ZDESCr
  )r°   Zorder_specsrF  Úorderr�   r�   r‘   Úparse_order_specü  s    zExprParser.parse_order_specc             C   sD   g }d}x6| j t| jƒk r>|s*|  tj¡ d}| |  ¡ ¡ q
W |S )NTF)r×   r¯   rÖ   r  r   rf   r
  r  )r°   Z	expr_listrF  r�   r�   r‘   Úparse_expr_list  s    zExprParser.parse_expr_listN)*rL   rM   rN   r±   rÞ   rä   rì   rò   rÛ   r  r  r  r  r  r  r  r  r  r!  r$  r"  r)  r*  r,  r.  r0  r1  r6  r8  r9  r:  r;  r<  r?  r@  rA  r  rB  rC  rG  rK  rL  r�   r�   r�   r‘   rÔ   Ò   sN   
^	
	I1rÔ   Tc             C   s6   t d | ¡ƒ t| |ƒ}t |jƒ | ¡ }t |ƒ d S )Nz>>>>>>> parsing:  {0})Úprintrð   rÔ   rÖ   r  )Zexpr_stringrÜ   ÚprÈ   r�   r�   r‘   ÚparseAndPrintExpr  s
    

rO  c               C   s   t dƒ d S )+Nzname like :namez10+1z
(abc == 1)z(func(abc)=1)z(abc = "jess")z(abc = "with \"")z(abc != .10)z(abc != "xyz")za + b * c + dz(a + b) * c + dz'(field not in ('a',func('b', 2.0),'c'))zjess.age between 30 and deathzx > 10 and Y >= -20zEa is true and b is null and C + 1 > 40 and (time = now() or hungry())za + b + -c > 2znow () + b + c > 2znow () + @b + c > 2zJnow () - interval +2 day > some_other_time() or something_else IS NOT NULLz"two quotes to one"""z'two quotes to one'''z'different quote "'z"different quote '"z`ident`z	`ident```z	`ident"'`znow () - interval -2 dayz? > x and func(?, ?, ?)z#a > now() + interval (2 + x) MiNuTeza between 1 and 2za not between 1 and 2za in (1,2,a.b(3),4,5,x)za not in (1,2,3,4,5,@x)za like b escape cza not like b escape cz(1 + 3) in (3, 4, 5)z0`a crazy "function"``'name'`(1 + 3) in (3, 4, 5)za@.bFz$a@.b[0][0].c**.d."a weird\"key name"za@.*za@[0].*z	a@**[0].*)rO  r�   r�   r�   r‘   Úx_test   sX                                             rP  N)T)=Úcompatr   r   Zprotobuf.mysqlx_datatypes_pb2r   Zprotobuf.mysqlx_expr_pb2r   r   r   Zprotobuf.mysqlx_crud_pb2r   r	   r
   Úranger'  r   r7  rz   r{   r|   r}   r~   r   r€   r�   r‚   Zinterval_unitsrP   rQ   rR   rS   rO   r]   r\   r_   rX   r^   r`   r‹   ru   rv   rw   rY   r[   rZ   r�   rŽ   r�   rç   r¬   r·   r¹   r»   rÂ   rÄ   rÉ   rÏ   rÓ   rÔ   rO  rP  r�   r�   r�   r‘   Ú<module>   s|   C

    J
