HEX
Server: Microsoft-IIS/10.0
System: Windows NT ITPWINWEBSVR22 10.0 build 20348 (Windows Server 2022) AMD64
User: www.conferencesearch.co.uk (0)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: D:/Python311/Lib/site-packages/mysqlx/__pycache__/expr.cpython-311.pyc
�

�nc�����dZddlmZddlmZmZddlmZmZGd�d��Z	e
e	je	je	j
e	je	je	je	je	je	je	je	je	je	je	je	je	je	je	je	je	jg��Zide	j �de	j!�d	e	j"�d
e	j#�de	j$�de	j%�d
e	j&�de	j'�de	j(�de	j)�de	j*�de	j+�de	j,�de	j-�de	j.�de	j/�de	j0�ide	j1�de	j2�de	j�de	j
�de	j�de	j�de	j�de	j�d e	j�d!e	j�d"e	j�d#e	j3�d$e	j4�d%e	j5�d&e	j6�d'e	j7�d(e	j8��id)e	j9�d*e	j:�d+e	j;�d,e	j<�d-e	j=�d.e	j>�d/e	j?�d0e	j�d1e	j�d2e	j�d3e	j�d4e	j�d5e	j�d6e	j�d7e	j�d8e	j�d9e	j��d:e	ji�Z@e	j6e	j,e	j9e	j:e	j;e	j<e	j8e	j=d;�ZAid<d=�d=d=�dd>�dd�d?d?�dd?�dd�d	d	�d@d@�d
d
�dd�d
d
�dd�dAdA�dBdA�dCdC�dDdD�idEdE�dFdF�dGdG�d>d>�dHdH�dIdI�dJdJ�dKdK�dLdL�dMdM�dNdN�dOdO�dPdP�dd�dQdQ�dd��ZBdRdSdOddTdU�ZCdVdWdXdYdZd[d\d]�ZDGd^�d_��ZEd`�ZFda�ZGdb�ZHdc�ZIdd�ZJde�ZKdf�ZLdg�ZMdh�ZNdi�ZOdj�ZPdk�ZQdl�ZRdm�ZSGdn�do��ZTdpS)qzExpression Parser.�)�DbDoc)�
BYTE_TYPES�get_item_or_attr��Message�
mysqlxpb_enumc�v�eZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!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)\�	TokenTypezToken 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�YN)]�__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���-D:\Python311\Lib\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��H�H�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�!)rrr
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�&�eZdZdZdd�Zd�Zd�ZdS)�TokenzToken representation class.rc�0�||_||_||_dS�N)�
token_type�value�length)�selfrrrs    r��__init__zToken.__init__s��$�����
�����r�c�*�|���Sr)�__str__�rs r��__repr__zToken.__repr__s���|�|�~�~�r�c��|jtjtjtjfvr|j�d|j�d�S|j�S)N�(�))rr
ryr{rzrr"s r�r!z
Token.__str__!sN���?��O��N���
�
�	6�
�o�5�5��
�5�5�5�5��/�#�#r�N)r)rcrdrerfrr#r!r�r�r�rrsL������%�%�����
���$�$�$�$�$r�rc�`�td��}t|t��r|St|t��r|�d���St|tt
f��r7t
d��|d<t|�����|d<n�t|ttf��r7t
d��|d<t|�����|d<n6t
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�dictrr�build_object�get_message�list�tuple�build_array�build_scalar�r�msgs  r��
build_exprr=.s��
�$�
%�
%�C��%�'�#�#�����%�*�&�&�(��z�z�$�z�'�'�'��%�$���'�'�;�#�$B�C�C��F��$�U�+�+�7�7�9�9��H�
�
�	�E�D�%�=�	)�	)�;�#�$A�B�B��F��"�5�)�)�5�5�7�7��G���#�$C�D�D��F��%�e�,�,�8�8�:�:��I���Jr�c���t|t��rt|��St|t��rt	|��St|t
��rt
|��St|t��rt|��St|t��rt|��S|�t��Stdt|�������)NzUnsupported data type: )r1�str�build_string_scalarr�build_bytes_scalar�bool�build_bool_scalar�int�build_int_scalar�float�build_double_scalar�build_null_scalar�
ValueErrorr+�rs r�r:r:@s����%����*�"�5�)�)�)��%��$�$�)�!�%�(�(�(��%����(� ��'�'�'��%����'���&�&�&��%����*�"�5�)�)�)��#� �"�"�"�
�<�t�E�{�{�<�<�
=�
=�=r�c���t|t��rt|j��St	d��}|���D]�\}}t	d��}t|t��r|���n||d<t|���	��|d<|d�
|�	��g����|S)N�Mysqlx.Expr.Object�Mysqlx.Expr.Object.ObjectField�keyr�fld)r1rr5�__dict__r�itemsr?�encoder=r6�extend)�objr<rNr�pairs     r�r5r5Ps����#�u���*��C�L�)�)�)�
�&�
'�
'�C��i�i�k�k�0�0�
��U��7�8�8��&0��c�&:�&:�C�c�j�j�l�l�l���U��"�5�)�)�5�5�7�7��W�
��E�
���4�+�+�-�-�.�/�/�/�/��Jr�c�n�td��}|d�d�|D����|S)N�Mysqlx.Expr.Arrayrc�P�g|]#}t|�������$Sr�)r=r6)�.0rs  r��
<listcomp>zbuild_array.<locals>.<listcomp>_s,��L�L�L�U��E�*�*�6�6�8�8�L�L�Lr�)rrS)r.r<s  r�r9r9]s<��
�%�
&�
&�C���L���L�L�e�L�L�L�M�M�M��Jr�c�H�td��}td��|d<|S)N�Mysqlx.Datatypes.Scalarz#Mysqlx.Datatypes.Scalar.Type.V_NULLr+r�r<s r�rHrHcs'��
�+�
,�
,�C�� E�F�F�C��K��Jr�c�R�td��}td��|d<||d<|S)Nr\z%Mysqlx.Datatypes.Scalar.Type.V_DOUBLEr+�v_doublerr;s  r�rGrGis0��
�+�
,�
,�C�� G�H�H�C��K��C�
�O��Jr�c�R�td��}td��|d<||d<|S)Nr\z#Mysqlx.Datatypes.Scalar.Type.V_SINTr+�v_signed_intrr;s  r�rErEps1��
�+�
,�
,�C�� E�F�F�C��K��C����Jr�c�R�td��}td��|d<||d<|S)Nr\z#Mysqlx.Datatypes.Scalar.Type.V_UINTr+�v_unsigned_intrr;s  r��build_unsigned_int_scalarrdws2��
�+�
,�
,�C�� E�F�F�C��K�!�C����Jr�c���t|t��rtt|d����}t	d��}td��|d<t	d|���|d<|S)Nzutf-8r\z%Mysqlx.Datatypes.Scalar.Type.V_STRINGr+zMysqlx.Datatypes.Scalar.StringrJ�v_string)r1r?�bytes�	bytearrayrrr;s  r�r@r@~sg���%����1��i��w�/�/�0�0��
�+�
,�
,�C�� G�H�H�C��K��>�e�L�L�L�C�
�O��Jr�c�R�td��}td��|d<||d<|S)Nr\z#Mysqlx.Datatypes.Scalar.Type.V_BOOLr+�v_boolrr;s  r�rCrC�s0��
�+�
,�
,�C�� E�F�F�C��K��C��M��Jr�c�p�td��}td��|d<td|���|d<|S)Nr\z%Mysqlx.Datatypes.Scalar.Type.V_OCTETSr+zMysqlx.Datatypes.Scalar.OctetsrJ�v_octetsrr;s  r�rArA�s>��
�+�
,�
,�C�� G�H�H�C��K��>�e�L�L�L�C�
�O��Jr�c�R�td��}td��|d<||d<|S)Nr(r/r+r0rr;s  r��build_literal_exprrn�s0��
�$�
%�
%�C�� ?�@�@�C��K��C�	�N��Jr�c���td��}t||d<|���g|d<td��}td��|d<|���|d<|S)N�Mysqlx.Expr.Operator�name�paramr(�Mysqlx.Expr.Expr.Type.OPERATORr+�operator)r�_UNARY_OPERATORSr6r)rqrrrtr<s    r��build_unary_oprv�sr���-�.�.�H�'��-�H�V���*�*�,�,�-�H�W��
�$�
%�
%�C�� @�A�A�C��K��*�*�,�,�C�
�O��Jr�c�.�|�dd��S)N�"z"")�replace��strings r��escape_literalr|�s���>�>�#�t�$�$�$r�c�p�eZdZdZd;d�Zd�Zd�Zd�Zd�Zd<d	�Z	d
�Z
d�Zd�Zd
�Z
d�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd �Z d!�Z!d"�Z"d#�Z#d<d$�Z$e%d%���Z&d&�Z'd'�Z(d(�Z)d)�Z*d*�Z+d+�Z,d,�Z-d-�Z.d.�Z/d/�Z0d0�Z1d1�Z2d<d2�Z3d<d3�Z4d4�Z5d5�Z6d6�Z7d7�Z8d8�Z9d9�Z:d:S)=r2zExpression parser class.Tc��||_g|_g|_d|_||_i|_d|_|���|���dS�N�)	r{�tokens�path_name_queue�pos�_allow_relational_columns�placeholder_name_to_position�positional_placeholder_count�clean_expression�lex)rr{�allow_relationals   r�rzExprParser.__init__�sZ��������!������)9��&�,.��)�,-��)����������
�
�
�
�
r�c��d|j�d�S)Nz<mysqlx.ExprParser 'z'>rzr"s r�r!zExprParser.__str__�s��5�d�k�5�5�5�5r�c��t|jt��st|j��|_|j�d��|_t|j��dkr%|jddkr|jdd�|_d|jdd����vr|jdd�|_d|jdd	����vr|jd	d�|_dSdS)
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)r1r{r?�repr�strip�len�upperr"s r�r�zExprParser.clean_expression�s����$�+�s�+�+�	,��t�{�+�+�D�K��k�'�'��,�,����t�{���a��	+�D�K��O�s�$:�	+��+�c�r�c�*�D�K��t�{�2�A�2��,�,�.�.�.�	*��+�a�b�b�/�D�K��d�k�"�1�"�o�+�+�-�-�-�	*��+�a�b�b�/�D�K�K�K�	*�	*r�c�`�|dzt|j��ko|j|dz|kS�Nr)r�r{)rrNr�s   r��next_char_iszExprParser.next_char_is�s0���Q�w��T�[�)�)�)�J�d�k�#��'�.B�d�.J�Jr�c���|}d}|t|j��kr�|j|���s|j|dkrs|j|dkr|durtd���d}|dz
}|t|j��kr0|j|����b|j|dk�s|j||�}t	t
j|t|����S)NF�.Tz"Invalid number. Found multiple '.'r)r�r{�isdigitrIrr
r{)rr��start�	found_dot�vals     r��
lex_numberzExprParser.lex_number�s	�����	��C���$�$�$�		��K���$�$�&�&�		�*.�+�c�*:�c�*A�		��{�3��3�&�
!���$�K�$�%I�J�J�J� �	�
�1�H�C��C���$�$�$�		��K���$�$�&�&�		�*.�+�c�*:�c�*A�		��k�%��)�$���Y�^�S�#�c�(�(�3�3�3r�Fc��|}|t|j��kr�|j|���s2|j|dks!|j|���rp|rn|dz
}|t|j��krQ|j|����<|j|dk�M|j|���r|�n|j||�}	|t|j��krU|j|dkrD|���t
vr)t
tj|t|����}nMt
t|���|���t|����}n8#t$r+t
tj|t|����}YnwxYw|S)N�_rr%)r�r{�isalnum�isspace�lower�%_SQL_FUNTION_RESERVED_WORDS_COLLISIONrr
ry�_RESERVED_WORDS�KeyError)r�i�allow_spacer�r��tokens      r��	lex_alphazExprParser.lex_alpha�s������#�d�k�"�"�"�	��K��N�"�"�$�$�	��{�1�~��$�	���A��&�&�(�(�	�.9�	�

��F�A��#�d�k�"�"�"�	��K��N�"�"�$�$�	��{�1�~��$�	���A��&�&�(�(�	�.9�	��k�%��'�"��
	:��C���$�$�$�
S��K��N�c�)�
S��I�I�K�K�'L�L�
S�
�i�o�s�C��H�H�=�=����o�c�i�i�k�k�:�C�I�I�K�K��S���R�R�����	:�	:�	:��)�/�3��C���9�9�E�E�E�	:�����s�*B:F%�%2G�Gc���|j|}d}|dz
}|}|t|j��kr�|j|}||kr0|dzt|j��kr|j|dz|krnZ||dfvr2|dzt|j��krn8|dz
}||j|z
}n||z
}|dz
}|t|j��k��|t|j��ks|j||krtd|�����|dkr+ttj|t|��dz��Sttj|t|��dz��S)N�r�\z'Unterminated quoted string starting at �`r)r{r�rIrr
ryrz)rrN�
quote_charr�r�r�s      r��lex_quoted_tokenzExprParser.lex_quoted_token�s����[��%�
����q������C���$�$�$�	��;�s�#�D��
�"�
��!�G�c�$�+�.�.�.�
��K��a��(�J�6�
���
�D�)�)�
���7�c�$�+�.�.�.����q����t�{�3�'�'����t����1�H�C�#�C���$�$�$�	�$�#�d�k�"�"�"�	P�d�k�#�&6�*�&D�	P��N�u�N�N�O�O�O����	=����#�s�3�x�x�!�|�<�<�<��Y�&��S��X�X��\�:�:�:r�c�H�d}d}d}|t|j��k�r|j|}|���r|dz
}�@|���r|�|��}�nq|���s|dkr|�||��}�n?|dkrttj	|��}�n|dkrttj
|��}�n�|dkrttj|��}�n�|dkrttj|��}�n�|d	krttj
|��}�n�|d
krS|�|d��r!|sttjdd
��}d}�nXttj|��}�n<|dkrO|�|d��rttjdd
��}�nttj|��}�n�|dkrttj|��}�n�|dkrttj|��}�n�|dkrttj|��}�n�|dkrP|�|d��rttjdd
��}�nHttjdd��}�n+|dkrO|�|d��rttjdd
��}�n�ttj|��}�n�|dkrttj|��}�n�|dkrO|�|d��rttjdd
��}�n{ttj|��}�n_|dkrttj|��}�n=|dkrttj|��}�n|dkrttj|��}�n�|dkrttj|��}�n�|dkrttj |��}�n�|d krttj!|��}�n�|d!krO|�|d��rttj"d"d
��}�nZttj#|��}�n>|d#kr�|�|d��rttj"d$d
��}�n|�|d#��rttj$d%d
��}�n�|�|d��rttj%d&d
��}�n�ttj&|��}�n�|dkr�|�|d��rttj'd'd
��}�nJ|�|d��rttj(d(d
��}�nttj)|��}n�|d)kr�|�|d��rttj*d*d
��}n�|dzt|j��kr8|j|dz���r|�|��}nqttj+|��}nV|d+vr&|r$ttj,|��}|sd}n1d}d}n,|d,vr|�-|��}nt]d-|�����|j/�0|��||j1z
}|t|j��k��dSdS).Nr�Frr��?�:�{�}rrr�z->rTrz**r	�$rr�r�rr�r�rr�r%r&�[�]r
�,rr�rr�rrrr�r�z.*)�'rx)rxr�r�zUnknown character at )2r�r{r�r�r��isalphar�rr
r�r�r�r�r�r�r�r�r�r�r�r}r�rr�r�r�r�r�rlrmrnror�r~r�r�r�r�r�r�r�r�r�r|r�r�rIr��appendr)rr��
arrow_last�inside_arrowr�r�s      r�r�zExprParser.lexs���
���
����#�d�k�"�"�"�i	��;�q�>�D��|�|�~�~�
��Q�����|�|�~�~�b
>�����*�*��������`
>�4�3�;�`
>����q�,�7�7������^
>��i�/��6�6������\
>��i�o�t�4�4������Z
>��i�.��5�5������X
>��i�.��5�5������V
>��i�n�d�3�3������T
>��$�$�Q��,�,�9�Z�9�!�)�/�4��;�;�E�!%�J�J�!�)�/�4�8�8�E�E����N
>��$�$�Q��,�,�7�!�)�"6��a�@�@�E�E�!�)�-��6�6�E�E����I
>��i�m�T�2�2������G
>��i�.��5�5������E
>��i�m�T�2�2������C
>��$�$�Q��,�,�9�!�)�,��a�8�8�E�E�!�)�,��a�8�8�E�E����>
>��$�$�Q��,�,�:�!�)�"2�D�!�<�<�E�E�!�)�"2�D�9�9�E�E����9
>��i�.��5�5������7
>��$�$�Q��,�,�9�!�)�.�$��:�:�E�E�!�)�/�4�8�8�E�E����2
>��i�.��5�5������0
>��i�.��5�5������.
>��i�2�D�9�9������,
>��i�2�D�9�9������*
>��i�m�T�2�2������(
>��i�o�t�4�4������&
>��$�$�Q��,�,�8�!�)�,��a�8�8�E�E�!�)�.�$�7�7�E�E����!
>��$�$�Q��,�,�6�!�)�,��a�8�8�E�E��&�&�q�#�.�.�6�!�)�"2�D�!�<�<�E�E��&�&�q�#�.�.�6�!�)�,��a�8�8�E�E�!�)�,��5�5�E�E����
>��$�$�Q��,�,�6�!�)�"2�D�!�<�<�E�E��&�&�q�#�.�.�6�!�)�,��a�8�8�E�E�!�)�,��5�5�E�E����
>��$�$�Q��,�,�7�!�)�"3�T�1�=�=�E�E���U�S���-�-�-�7�$�+�a�!�e�2D�2L�2L�2N�2N�7� �O�O�A�.�.�E�E�!�)�-��6�6�E�E���#�

>�
�

>��i�o�t�4�4��#�)�#'�L�L�!&�J�#(�L�L���(�
>��-�-�a�0�0��� �!<��!<�!<�=�=�=��K���u�%�%�%�
����A�S�#�d�k�"�"�"�i	�i	�i	�i	�i	r�c
��|jt|j��krtd|�d|j�d����|j|jj|kr5td|�d|j�d|j|j�d|j�����dS)N�Expected token type z at pos z but no tokens leftz but found type z, on tokens )r�r�r�rIr�rrs  r��assert_cur_tokenzExprParser.assert_cur_token�s����8�s�4�;�'�'�'�	���z���4�8������
��;�t�x� �+�z�9�	��I�z�I�I�4�8�I�I���D�H�-�I�I�;?�;�I�I���
�	�	r�c�8�|�|j|��Sr��pos_token_type_isr�r�s  r��cur_token_type_iszExprParser.cur_token_type_is�s���%�%�d�h�
�;�;�;r�c�n�|jt|j��ko|j|jj|vSr�r�r�r�r�r�typess  r��cur_token_type_inzExprParser.cur_token_type_in�s0���x�#�d�k�*�*�*�X�t�{�4�8�/D�/O�SX�/X�Xr�c�>�|�|jdz|��Sr�r�r�s  r��next_token_type_iszExprParser.next_token_type_is�s���%�%�d�h��l�J�?�?�?r�c�t�|jt|j��ko|j|jdzj|vSr�r�r�s  r��next_token_type_inzExprParser.next_token_type_in�s8���H�s�4�;�'�'�'�
>���D�H�q�L�)�4��=�	
r�c�^�|t|j��ko|j|j|kSr)r�r�r)rr�rs   r�r�zExprParser.pos_token_type_is�s+���S���%�%�%�S�$�+�c�*:�*E��*S�Sr�c�~�|�|��|j|jj}|xjdz
c_|Sr�)r�r�r�r)rrrs   r��
consume_tokenzExprParser.consume_token�s;�����j�)�)�)���D�H�%�+�����A�
����r�c��g}d}|�tj��|�tj���sM|������}t|d��r4|jj	r(|j
�d|jj	��d}nGt|d��s7d|vr3d|dvr)|j
�d|dd��d}|�|��|�tj
��rh|xjdz
c_|�|��������|�tj
���h|�tj��|r|j
���|S)z{Parse a paren-bounded expression list for function arguments or IN
        list and return a list of Expr objects.
        F�
identifierr�Trqr)r�r
rlr�rm�_exprr6�hasattrr�rqr��insertr�r~r��pop)r�exprs�path_name_added�msg_exprs    r��paren_expr_listzExprParser.paren_expr_list�s����������9�+�,�,�,��%�%�i�&6�7�7�	9��z�z�|�|�/�/�1�1�H��x��.�.�	
'�8�3F�3K�	
'��$�+�+�A�x�/B�/G�H�H�H�"&����H�l�3�3�
'� �H�,�
'��h�|�4�4�
'�
�$�+�+�A�x��/E�f�/M�N�N�N�"&���L�L��"�"�"��(�(���9�9�
9����A�
������T�Z�Z�\�\�5�5�7�7�8�8�8��(�(���9�9�
9�	
���9�+�,�,�,��	'�� �$�$�&�&�&��r�c�v�|�tj��td��}|�tj��rA|�tj��|d<|�tj��|j|jj	|d<|xjdz
c_|S)NzMysqlx.Expr.Identifier�schema_namerqr)
r�r
ryrr�r|r�r�r�r)r�idents  r�r�zExprParser.identifier�s������i�o�.�.�.��0�1�1���"�"�9�=�1�1�	.�#'�#5�#5�i�o�#F�#F�E�-� ����y�}�-�-�-���D�H�-�3��f�
����A�
����r�c���td��}|���|d<|���|d<td��}td��|d<|���|d<|S)NzMysqlx.Expr.FunctionCallrqrrr(zMysqlx.Expr.Expr.Type.FUNC_CALLr+�
function_call)rr�r�rr6)rr�r�s   r�r�zExprParser.function_call�sv��� :�;�;�
� $��� 1� 1�
�f��!%�!5�!5�!7�!7�
�g���-�.�.��(�)J�K�K����$1�$=�$=�$?�$?���!��r�c�h�|�tj��|j|j}|jtjkrr|j�d��r1|j�	d��rt|j�d����|�tj��|j}nS|jtjkr'|�tj��|j}ntd|j�����td��}td��|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.MEMBERr+r)r�r
r|r�r�rryr�
startswith�endswithrIrzrr)rr��member_name�
doc_path_items    r��docpath_memberzExprParser.docpath_member�s:�����9�=�)�)�)���D�H�%����y��.�	��{�%�%�c�*�*�
�u�{�/C�/C�C�/H�/H�
� ��{�N�N�N����
���y��/�/�/��+�K�K�
�
��!2�
2�	����y�0�1�1�1��+�K�K��"��x�"�"���
� � >�?�?�
� -�6�!
�!
�
�f��"-�
�g���r�c���|�tj��|�tj��ra|�tj��|�tj��t
d��}td��|d<|S|�tj��r�t|�tj����}|dkrtd|j�����|�tj��t
d��}td��|d<||d<|Std|j�����)	Nr�z6Mysqlx.Expr.DocumentPathItem.Type.ARRAY_INDEX_ASTERISKr+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
rnr�r�rorrr{rD�
IndexErrorr�rI)rr�rs   r��docpath_array_loczExprParser.docpath_array_loc�sZ�����9�/�0�0�0��!�!�)�-�0�0�	!����y�}�-�-�-����y�3�4�4�4�#�$B�C�C�M�$1�H�%�%�M�&�!�!� ��!�!�)�.�1�1�
	!���*�*�9�>�:�:�;�;�E��q�y�
R� �!P�d�h�!P�!P�Q�Q�Q����y�3�4�4�4�#�$B�C�C�M�$1�?�%�%�M�&�!�&+�M�'�"� � ��
$���
$�
$�
�
�	
r�c��|jstd���|�tj��r|�tj��t
d��}|�tj��rqt
d��}td��|d<|�tj��|d<|d�	|�
��g��|d�	|�����|jr|jd|d	<t
d
��}td��|d<||d<|S)
Nz-Empty string cannot be used as document field�Mysqlx.Expr.ColumnIdentifierr�r�r+r�
document_pathr�rqr(�Mysqlx.Expr.Expr.Type.IDENTr�)
r�rIr�r
r}r�rryrrSr6r�r�)r�col_idr�r3s    r��document_fieldzExprParser.document_field
sL���{�	N��L�M�M�M��!�!�)�"2�3�3�	1����y�/�0�0�0��7�8�8���!�!�)�/�2�2�	J�#�$B�C�C�M�$1�:�%�%�M�&�!�&*�%7�%7�	��%H�%H�M�'�"��?�#�*�*�M�,E�,E�,G�,G�+H�I�I�I����&�&�t�'9�'9�';�';�<�<�<���	5�!�1�!�4�F�6�N��)�*�*��$�%B�C�C��V��#��\���r�c�@�g}	|�tj��r;|�|���������nh|�tj��rh|�tj��td��}td��|d<|�|�����n�|�tj
��r:|�|��������n�|�tj��rh|�tj��td��}td��|d<|�|�����nn���t|��}|dkrAt||dz
d��td��krtd|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_ASTERISKr+z1Mysqlx.Expr.DocumentPathItem.Type.DOUBLE_ASTERISKr�rz!JSON path may not end in '**' at )r�r
r|r�r�r6r�r�rrrnr�r�r�rrIr�)r�doc_pathr�rQs    r�r�zExprParser.document_paths���
��	��%�%�i�m�4�4�
����� 3� 3� 5� 5� A� A� C� C�D�D�D�D��'�'�	�(9�:�:�
��"�"�9�#4�5�5�5� '�(F� G� G�
�(5�G�)�)�
�f�%����
� 9� 9� ;� ;�<�<�<�<��'�'�	�(<�=�=�

����� 6� 6� 8� 8� D� D� F� F�G�G�G�G��'�'�	�(<�=�=�
��"�"�9�#7�8�8�8� '�(F� G� G�
�(5�G�)�)�
�f�%����
� 9� 9� ;� ;�<�<�<�<��)	�*�H�
�
���1�9�	M�)�(�5�1�9�*=�v�F�F�-�?�K
�K
�
�	M��K���K�K�L�L�L��r�c�`�g}|�|�tj����|�tj��rp|�tj��|�|�tj����|�tj���pt
|��dkrtd|j�����|�	��td��}tdt
|����D]7}|dkr|d|d<�|dkr|d|d<�&|dkr|d|d	<�8d
}|�tj��r9d}|�tj��|�
��|d<n�|�tj��r�d}|�tj��d
}|�tj��r!d}|�tj��|�tj��|�
��|d<|r|�tj��|rmt
|d��dkrTtd
��}t!d��|d<d|d<|d�|���g��td��}t!d��|d<||d<|S)Nrz Too many parts to identifier at r�r�rqr�
table_namerr�FTr�r�r�r+r�rr(r�r�)r�r�r
ryr�r|r�rIr��reverser�ranger}r�r�r�rrSr6)r�partsr�r��is_doc�	is_quotedr�r�s        r��column_identifierzExprParser.column_identifierAs����
���T�'�'�	��8�8�9�9�9��$�$�Y�]�3�3�	>����y�}�-�-�-��L�L��+�+�I�O�<�<�=�=�=��$�$�Y�]�3�3�	>��u�:�:��>�	L��J���J�J�K�K�K�
�
�
�����7�8�8���q�#�e�*�*�%�%�	1�	1�A��A�v�
1�!&�q���v����a��
1�',�Q�x��|�$�$��a��
1�(-�a���}�%�����!�!�)�"2�3�3�	4��F����y�/�0�0�0�&*�&8�&8�&:�&:�F�?�#�#�
�
#�
#�I�O�
4�
4�
	4��F����y��/�/�/��I��%�%�i�o�6�6�
4� �	��"�"�9�?�3�3�3����y�/�0�0�0�&*�&8�&8�&:�&:�F�?�#��
4��"�"�9�?�3�3�3��	J�c�&��1�2�2�a�7�	J�#�$B�C�C�M�$1�:�%�%�M�&�!�&(�M�'�"��?�#�*�*�M�,E�,E�,G�,G�+H�I�I�I��-�.�.��(�)F�G�G����!'�����r�c��|jt|j��krtd���|j|j}|xjdz
c_|S)NzUnexpected end of token streamr)r�r�r�rI)rr�s  r��
next_tokenzExprParser.next_tokenrsL���8�s�4�;�'�'�'�	?��=�>�>�>���D�H�%�����A�
����r�c�h�|���}|j|krtd|�����dS)Nr�)r�rrI)rrr�s   r��expect_tokenzExprParser.expect_tokenysE�����!�!����z�)�	B��@�J�@�@�A�A�A�	B�	Br�c�&�|j|jSr)r�r�r"s r��
peek_tokenzExprParser.peek_token~s���{�4�8�$�$r�c�T�|j|jj}|xjdz
c_|Sr�)r�r�r)rrs  r��consume_any_tokenzExprParser.consume_any_token�s'����D�H�%�+�����A�
����r�c��td��}|jt|j��kr�|�t
j��s�|d�|����	��g��|�t
j
��sn[|�t
j
��|jt|j��kr|�t
j����|�t
j��td��}td��|d<|�	��|d<|S)zH
        jsonArray            ::=  "[" [ expr ("," expr)* ] "]"
        rWrr(r-r+r.)
rr�r�r�r�r
rorSr�r6r~r�r)rr<r3s   r��parse_json_arrayzExprParser.parse_json_array�s3���)�*�*���h��T�[�)�)�)�	0�$�2H�2H�� �3
�3
�	0�
��L��������!9�!9�!;�!;� <�=�=�=��)�)�)�/�:�:�
�����y��/�/�/�
�h��T�[�)�)�)�	0�$�2H�2H�� �3
�3
�	0�	
���9�/�0�0�0��)�*�*��$�%B�C�C��V�����)�)��W�
��r�c��td��}|jt|j��k�rC|�t
j���s#td��}|�t
j��|d<|�t
j	��|�
�����|d<|d�|���g��|�t
j
��sn\|�t
j
��|jt|j��kr |�t
j����#|�t
j��td��}td��|d<|���|d	<|S)
z�
        jsonDoc              ::=  "{" [jsonKeyValue ("," jsonKeyValue)*] "}"
        jsonKeyValue         ::=  STRING_DQ ":" expr
        rLrMrNrrOr(r*r+r,)rr�r�r�r�r
r�r�rzr�r�r6rSr~r)rr<�itemr3s    r��parse_json_doczExprParser.parse_json_doc�s���
�*�+�+���h��T�[�)�)�)�
	0�$�2H�2H���3
�3
�
	0��;�<�<�D��,�,�Y�->�?�?�D��K����y��/�/�/� �J�J�L�L�4�4�6�6�D��M���J���t�/�/�1�1�2�3�3�3��)�)�)�/�:�:�
�����y��/�/�/��h��T�[�)�)�)�
	0�$�2H�2H���3
�3
�
	0�	
���9�+�,�,�,��)�*�*��$�%C�D�D��V�����*�*��X���r�c�P�d}|�tj��r |�tj��}n�|�tj��r |�tj��}nA|jtjkrt|j��}ntd|j
�����td��}td��|d<||j
vr|j
||d<n)|j|d<|j|j
|<|xjdz
c_|S)Nr�z&Invalid placeholder name at token pos r(z!Mysqlx.Expr.Expr.Type.PLACEHOLDERr+�positionr)r�r
r{r�ryrr�r?r�rIr�rrr�)rr��place_holder_namer�s    r��parse_place_holderzExprParser.parse_place_holder�s4�����!�!�)�.�1�1�	R� $� 2� 2�9�>� B� B���
�
#�
#�I�O�
4�
4�	R� $� 2� 2�9�?� C� C���
�
��!2�
2�	R� #�D�$E� F� F����P�d�h�P�P�Q�Q�Q��-�.�.��(�)L�M�M������ A�A�	3�#'�#D�EV�#W�H�Z� � �#'�#D�H�Z� ��1�
�-�!�
�
�-�-��2�-�-��r�c��tdd���}|�tj��|d�|������g��|�tj��tt�
|�������}|d�t|�����g��|�tj
��td|������}td��|d<|S)	z2cast ::= CAST LPAREN expr AS cast_data_type RPARENrpr��rqrrr(�rtrsr+)rr�r
rlrSr�r6r�rAr?rR�cast_data_typernrmr)rrt�type_scalarr<s    r�r�zExprParser.cast�s���1��?�?�?�����9�+�,�,�,���� � �$�*�*�,�,�":�":�"<�"<�!=�>�>�>����9�<�(�(�(�(����D�4G�4G�4I�4I�)J�)J�K�K����� � �"4�[�"A�"A�"M�"M�"O�"O�!P�Q�Q�Q����9�+�,�,�,��(�8�3G�3G�3I�3I�J�J�J��#�$D�E�E��F���
r�c	���|���}|jtjtjtjtjfvr(|���}|r|j�|��n|jS|jtj	ur)|�d��}|r|j�|��n|jS|jtj
tjfvrE|�tj
��r|�tj
��|jS|jtj
tjtjfvr|jSt#d|j�d|j�d|j�d����)acast_data_type ::= ( BINARY dimension? ) |
        ( CHAR dimension? ) |
        ( DATE ) |
        ( DATETIME dimension? ) |
        ( TIME dimension? ) |
        ( DECIMAL dimension? ) |
        ( SIGNED INTEGER? ) |
        ( UNSIGNED INTEGER? ) |
        JSON
        TzUnknown token type z
 at position z (r&)r�rr
r�r�r�r��cast_data_type_dimensionrr�r�r�r�r�r�r�r�rIr�)rr��	dimensions   r�rzExprParser.cast_data_type�s������!�!�������N����N�	 
�
�	M��5�5�7�7�I�2;�L�e�k�.�9�.�.�.���L���y�0�0�	M��5�5�d�;�;�I�2;�L�e�k�.�9�.�.�.���L���	� 0�)�2D�E�E�	��%�%�i�&7�8�8�
6��"�"�9�#4�5�5�5��;�������N��N� 
�
�	�
�;���
�%�"2�
�
���
�
���
�
�
�
�
�	
r�c�t�|�tj��sdSg}|�tj��|�|�tj����|rp|�tj��rQ|�tj��|�|�tj����|�tj��t|��dkrd|d�d�nd|d�d|d�d�S)z*dimension ::= LPAREN LNUM (, LNUM)? RPARENNrr%r�r&r�)	r�r
rlr�r�r{r~rmr�)rr�rs   r�rz#ExprParser.cast_data_type_dimension�s���%�%�i�&6�7�7�	��4��	����9�+�,�,�,�����+�+�I�N�;�;�<�<�<��	A�t�-�-�i�o�>�>�	A����y��/�/�/����T�/�/�	��?�?�@�@�@����9�+�,�,�,��9�~�~��"�
4��	�!������3�Y�q�\�3�3�I�a�L�3�3�3�	
r�c�p�td��}td��|d<tdd���|d<|S)Nr(rsr+rprrrtrr]s r��
star_operatorzExprParser.star_operators>���(�)�)��#�$D�E�E��F��!�"8�s�C�C�C��J���
r�c�4	�|���}|jtjtjfvr|�|��S|jtjkr|���S|jtjkr|�	��S|jtj
kr|���S|jtjkr5|�
��}|�tj��|S|jtjtjfvr�|���}|jtjkr8|j|jz|j|j_|���St1|j|�����S|jtjtjtjfvr't1|j|�����S|jtjkr!t;t=|j����S|jtjkrt;tA����S|jtjkred|jvr.t;tCtE|j������St;tGtI|j������S|jtj%tj&fvr/t;tO|jtj%k����S|jtj(kr|�)��S|jtj*kr|�+��S|jtj,kr�|jdz
|_|�-tj��so|�-tj.��rd|�/|jdztj,��r<|�/|jdztj��r|�0��S|j1s|�)��n|�2��Stgd|j�d|j�����)z<Parse an atomic expression and return a protobuf Expr objectr�rrrzUnknown token type = z&  when expecting atomic expression at )4r�rr
r�r�rr�r
rnrr�r�rlr�rrmr�r�rr{rr�r��atomic_exprrvrgr�r�rzrnr@rrrHrGrFrErDrqrsrCr}r�r�rryr�r|r�r�r�r�rI)rr�r3�peeks    r�rzExprParser.atomic_exprs������!�!����	� 1�9�?�C�C�	2��*�*�5�1�1�1���y�/�/�	)��&�&�(�(�(���y�3�3�	+��(�(�*�*�*���y�~�-�	��9�9�;�;����y�/�/�	��:�:�<�<�D����i�.�/�/�/��K���	��	��@�@�	C��?�?�$�$�D���)�.�0�
*�.3�k�D�J�.F���D�H�%�+��'�'�)�)�)�!�%�+�t�/?�/?�/A�/A�B�B�B���	�
�y�}�i�n�M�M�	C�!�%�+�t�/?�/?�/A�/A�B�B�B���y�0�0�	H�%�&9�%�+�&F�&F�G�G�G���y�~�-�	;�%�&7�&9�&9�:�:�:���y�~�-�	J��e�k�!�
S�)�*=�e�E�K�>P�>P�*Q�*Q�R�R�R�%�&6�s�5�;�7G�7G�&H�&H�I�I�I���	��	��@�@�	�%�!�%�"2�i�n�"D�E�E���
���y�/�/�	)��&�&�(�(�(���y�}�,�	(��%�%�'�'�'���y��.�
	��x�!�|�D�H��&�&�y�'7�8�8�
,��'�'�	�
�6�6�
,��*�*�4�8�a�<���I�I�
,��*�*�4�8�a�<��9I�J�J�
,��)�)�+�+�+��5�.��#�#�%�%�%��+�+�-�-�
��
(�E�$4�
(�
(�!�X�
(�
(�
�
�	
r�c�h�|��}|jt|j��k�r	|j|jj|vr�t	d��}td��|d<t	d��}t|j|jj|d<|���g|d<|xjdz
c_|d�	|�����g��||d<|}|jt|j��kr|j|jj|v��|S)	z}Given a `set' of types and an Expr-returning inner parser function,
        parse a left associate binary operator expressionr(rsr+rprqrrrrt)
r�r�r�rrr�
_OPERATORSrr6rS)rr��inner_parser�lhsr<rts      r��parse_left_assoc_binary_op_exprz*ExprParser.parse_left_assoc_binary_op_exprSs'���l�n�n���h��T�[�)�)�)�		�d�k�$�(�.C�.N�RW�.W�		��,�-�-�C�'�(H�I�I�C��K��5�6�6�H�)�$�+�d�h�*?�*E�F�H�V��!$���!2�!2� 3�H�W���H�H��M�H�H��W��$�$�l�l�n�n�&@�&@�&B�&B�%C�D�D�D�&�C�
�O��C��h��T�[�)�)�)�		�d�k�$�(�.C�.N�RW�.W�		��
r�c��|���}|�tjtj���r�|�tj���r�|���}td��}|d�	|�
��g��|jtjurdnd|d<|�tj��|d�	|�
���
��g��|jt�std|j�����t"�|��������}|d�	t+t-|�����
��g��td|���}t/d	��|d
<|S)Nrprr�date_add�date_subrqz#Expected interval type at position r(rrsr+)rr�r
r�r�r�rvr�rrSr6rr��bit_expr�_INTERVAL_UNITSrIr�r?rRrr�rnrAr)rr r�rts    r��add_sub_intervalzExprParser.add_sub_intervalds������ � ���!�!��N�I�O�
�
�	J��%�%�i�&8�9�9�	J��O�O�%�%�E��5�6�6�H��W��$�$�c�o�o�&7�&7�%8�9�9�9�#�.�)�.�@�P�
�
�j�
�V��
���y�1�2�2�2��W��$�$�d�m�m�o�o�&A�&A�&C�&C�%D�E�E�E�)�4�)�?�;�
S� �!Q�t�x�!Q�!Q�R�R�R��J�J�t�5�5�7�7�=�=�?�?�@�@�E��W��$�$�#�$6�u�$=�$=�>�>�J�J�L�L�M�
�
�
��,�x�@�@�@�C�'�(H�I�I�C��K��
r�c��|�ttjtjtjg��|j��Sr)r!�setr
r�r�r�r'r"s r��mul_div_exprzExprParser.mul_div_expr�s8���3�3����	�
�y�}�=�>�>��!�
�
�	
r�c�~�|�ttjtjg��|j��Sr)r!r)r
r�r�r*r"s r��add_sub_exprzExprParser.add_sub_expr�s3���3�3������1�2�2�D�4E�
�
�	
r�c�~�|�ttjtjg��|j��Sr)r!r)r
r�r�r,r"s r��
shift_exprzExprParser.shift_expr�s5���3�3���!�9�#3�4�5�5�t�7H�
�
�	
r�c��|�ttjtjtjg��|j��Sr)r!r)r
r�r�r�r.r"s r�r%zExprParser.bit_expr�s9���3�3���!�9�?�I�4D�E�F�F��O�
�
�	
r�c
���|�ttjtjtjtjtjtjg��|j	��Sr)
r!r)r
r�r�r�r�rr�r%r"s r��	comp_exprzExprParser.comp_expr�sQ���3�3���L��L��L��L��L��L�
�	
�	
�
�M�
�
�	
r�c��
�g}|���}d}|�tj��r!d}|�tj��|jt
|j��k�r�|�|�	����|j|jj
}|�tj��r�|�tj��|�tj��r!d}|�tj��|�|����	�����n�|�tj��r�|�tj��|�tj
��r)|�|������n	d}|�|����	�����n�|�tj��rZ|�tj��|�|����	�����nS|�tj��r�|�tj��|�|����	����|�tj��rX|�tj��|�|����	�����nc|�tj��r�|�tj��|�|����	����|�tj��|�|����	����n�|�tj��rY|�tj��|�|����	����n|rt-d|j�����d}|rbt/d��}|r
t0|n||d<||d<t/d��}t3d	��|d
<|�	��|d<|}|S)NFTrzUnknown token after NOT as pos rprqrrr(rsr+rt)r1r�r
rgr�r�r�r�r�r6rrkrtrlrSr�r�rurxrprhrwrIr�	_NEGATIONr)r�paramsr r�op_namertr�s       r��	ilri_exprzExprParser.ilri_expr�sY�����n�n�������!�!�)�-�0�0�	.��F����y�}�-�-�-��8�c�$�+�&�&�&�.	��M�M�#�/�/�+�+�,�,�,��k�$�(�+�1�G��%�%�i�l�3�3�#
��"�"�9�<�0�0�0��)�)�)�-�8�8�6�!�F��&�&�y�}�5�5�5��
�
�d�n�n�.�.�:�:�<�<�=�=�=�=��'�'�	��5�5�
��"�"�9�<�0�0�0��)�)�)�*:�;�;�B��M�M�$�"6�"6�"8�"8�9�9�9�9�'�G��M�M�$�.�.�"2�"2�">�">�"@�"@�A�A�A�A��'�'�	�(:�;�;�
��"�"�9�#5�6�6�6��
�
�d�n�n�.�.�:�:�<�<�=�=�=�=��'�'�	��7�7�
��"�"�9�>�2�2�2��
�
�d�n�n�.�.�:�:�<�<�=�=�=��)�)�)�*:�;�;�B��&�&�y�'7�8�8�8��M�M�$�.�.�"2�"2�">�">�"@�"@�A�A�A���'�'�	�(9�:�:�
��"�"�9�#4�5�5�5��
�
�d�n�n�.�.�:�:�<�<�=�=�=��"�"�9�=�1�1�1��
�
�d�n�n�.�.�:�:�<�<�=�=�=�=��'�'�	�(8�9�9�
��"�"�9�#3�4�4�4��
�
�d�n�n�.�.�:�:�<�<�=�=�=�=��S�$�%Q�t�x�%Q�%Q�R�R�R����
�"�#9�:�:��9?�#L�9�W�#5�#5�W��� �$*���!�"�#5�6�6��#0�1Q�#R�#R��� �'/�';�';�'=�'=���$����
r�c�~�|�ttjtjg��|j��Sr)r!r)r
rhr�r6r"s r��and_exprzExprParser.and_expr�s3���3�3����	� 0�1�2�2�D�N�
�
�	
r�c�h�|�ttjg��|j��Sr)r!r)r
rjr8r"s r��xor_exprzExprParser.xor_expr�s&���3�3�C����4H�4H�$�-�X�X�Xr�c�~�|�ttjtjg��|j��Sr)r!r)r
rir�r:r"s r��or_exprzExprParser.or_expr�s2���3�3����y�~�.�/�/���
�
�	
r�c��|r0g|_d|_i|_d|_|���|���Sr)r�r�r�r�r�r<)rr)s  r�r�zExprParser._expr�sC���	��D�K��D�H�02�D�-�01�D�-��H�H�J�J�J��|�|�~�~�r�c�:�|�|��}|j}|�t|j��dz
t
j��r|dz
}|t|j��kr,td|j|jd��d|j�����|S)NrzUnused token types z" found in expression at position: )r�r�r�r�r�r
r�rI)rr)�
expression�used_tokenss    r�r3zExprParser.expr�s����Z�Z��(�(�
��h���!�!�#�d�k�"2�"2�Q�"6�	��E�E�	��1��K���T�[�)�)�)�	��6�d�k�$�(�*�*�&=�6�6�+/�8�6�6���
��r�c�^�td|�tj�����S)NzMysqlx.Crud.Columnr)rr�r
ryr"s r��parse_table_insert_fieldz#ExprParser.parse_table_insert_fields&���+�$�2D�2D�Y�_�2U�2U�V�V�V�Vr�c�4�|���jSr)r�r�r"s r��parse_table_update_fieldz#ExprParser.parse_table_update_fields���%�%�'�'�2�2r�c�*�g}|j�d��}|���|�r_|���}|�d��|�d��ksX|�d��|�d��ks,|�d��|�d��kr�|����d|��}|�d��|�d��k�E|�d��|�d��k�q|�d��|�d��k��|�|�����|��_|S)Nr�r%r&r�r�r�r�)r{�splitr�r��countr�r�)r�fields�temp�fields    r��
_table_fieldszExprParser._table_fieldssl�����{� � ��%�%���������	)��H�H�J�J�E����C� � �E�K�K��$4�$4�4�
0��;�;�s�#�#�u�{�{�3�'7�'7�7�
0��;�;�s�#�#�u�{�{�3�'7�'7�7�
0�
 �8�8�:�:�/�/��/�/��	���C� � �E�K�K��$4�$4�4�
0��;�;�s�#�#�u�{�{�3�'7�'7�7�
0��;�;�s�#�#�u�{�{�3�'7�'7�7�
0�
�M�M�%�+�+�-�-�(�(�(��	)��
r�c�z�g}d}|���}|jt|j��k�r|s|�t
j��d}td|������}|�	t
j
��rB|�t
j
��|�t
j��|d<n|t|��|d<|�|�
����|jt|j��k��|S)NTFzMysqlx.Crud.Projection)�source�alias)rKr�r�r�r�r
r~rr�r�r�ryr�r6)r�project_expr�firstrH�
projections     r��parse_table_select_projectionz(ExprParser.parse_table_select_projections�������#�#�%�%���h��T�[�)�)�)�
	:��
4��"�"�9�?�3�3�3��E� �!9�$�*�*�,�,�O�O�O�J��%�%�i�l�3�3�
@��"�"�9�<�0�0�0�&*�&8�&8���&I�&I�
�7�#�#�&,�S��->�->�&?�
�7�#����
� 6� 6� 8� 8�9�9�9��h��T�[�)�)�)�
	:��r�c��g}d}|jt|j��k�r,|s|�tj��d}t
d|������}|�tj	��r2td��|d<|�tj	��nP|�tj��r1td��|d<|�tj��|�|�
����|jt|j��k��,|S)NTFzMysqlx.Crud.Order)r3zMysqlx.Crud.Order.Direction.ASC�	directionz Mysqlx.Crud.Order.Direction.DESC)r�r�r�r�r
r~rr�r�r�rr�r�r6)r�order_specsrP�orders    r��parse_order_speczExprParser.parse_order_spec's/�������h��T�[�)�)�)�	4��
4��"�"�9�?�3�3�3��E��/�d�j�j�l�l�C�C�C�E��%�%�i�&;�<�<�
;�%2�3T�%U�%U��k�"��"�"�9�#8�9�9�9�9��'�'�	�(>�?�?�
;�%2�3U�%V�%V��k�"��"�"�9�#9�:�:�:����u�0�0�2�2�3�3�3��h��T�[�)�)�)�	4��r�c�:�g}d}|jt|j��kry|s|�tj��d}|�|��������|jt|j��k�y|S)NTF)	r�r�r�r�r
r~r�r�r6)r�	expr_listrPs   r��parse_expr_listzExprParser.parse_expr_list8s����	����h��T�[�)�)�)�	9��
4��"�"�9�?�3�3�3��E����T�Z�Z�\�\�5�5�7�7�8�8�8�	�h��T�[�)�)�)�	9�
�r�N)T)F);rcrdrerfrr!r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr
rr�rr�staticmethodrrr!r'r*r,r.r%r1r6r8r:r<r�r3rBrDrKrRrWrZr�r�r�r2r2�s�������"�"�	�	�	�	�6�6�6�*�*�*�"K�K�K�4�4�4�"����.;�;�;�:m�m�m�^
�
�
�<�<�<�Y�Y�Y�@�@�@�
�
�
�T�T�T�������8���������4
�
�
�4���* � � �D/�/�/�b���B�B�B�
%�%�%����
���&���0���.���%
�%
�%
�N
�
�
�
�&����\��:
�:
�:
�x���"���:
�
�
�
�
�
�

�
�
�

�
�
�

�

�

�6�6�6�p
�
�
�
Y�Y�Y�
�
�
�
����
�
�
�
�W�W�W�3�3�3�
�
�
����$���"����r�r2N)Urf�dbdocr�helpersrr�protobufrrr
r)r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r&rhrirjrkrgrurtr�rwrprvrxr�r�r�r�rqrsrrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrur3rr=r:r5r9rHrGrErdr@rCrArnrvr|r2r�r�r��<module>r_s���:��������1�1�1�1�1�1�1�1�,�,�,�,�,�,�,�,�[�[�[�[�[�[�[�[�|�#����������
����������$��$����"������!���������)����45�	�9�=�5��)�,�5�
�9�=�5�	�)�,�	5�

�9�=�5��I�N�
5�	�)�,�5��	�"�5�
�i��5��y� �5��	�"�5�
�i��5��I�N�5�
�9�=�5�
�9�=�5� 
�9�=�!5�"�I�N�#5�5�$�Y�_�%5�&�I�N�'5�(
�i��)5�*
�i��+5�,�I�N�-5�.
�9�=�/5�0�I�N�15�2�Y�_�35�4�y� �55�6�I�N�75�8�9�(�95�:
�9� �;5�<�I�"�=5�>	�)�,�?5�@
�i��A5�B�	�"�C5�D�I�N�E5�5�5�F�I�N�G5�H�I�N�I5�J�y� �K5�L
�i��M5�N�	�"�O5�P�y� �Q5�R�I�N�S5�T�)�6�U5�V�)�6�W5�X�Y�,�Y5�Z�	�2�[5�\�9�(�]5�^�9�(�_5�`�y�0�a5�b�)�&�c5�d�)�&�e5�f�	�"�g5�5�h�)�&�i5�5��p���N��N��N�� ����N��"�	)�	)�%�"���"��$�"�
�4�"�
�5�	"�
	�$�"�	�$�
"�
�5�"�
�5�"���"�	�$�"��y�"�	�$�"��F�"�	�$�"�	�$�"� ��!"�"	�$�#"�"�$��%"�&	�$�'"�(��)"�*	�$�+"�,��-"�.	�$�/"�0	�$�1"�2��3"�4��5"�6��7"�8��9"�:��;"�<��="�>�F�?"�@�y�A"�B�
�C"�"�
�J
�	�	��	��������
���
�
�	�$�$�$�$�$�$�$�$�0���$
>�
>�
>� 
�
�
�������������������������������%�%�%�V�V�V�V�V�V�V�V�V�Vr�