a
    còfvy  ã                   @   sà  d Z ddlZddlZddlZddlmZmZ ddlmZ ddlm	Z	 ddl
mZm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G dd„ deƒZG d d!„ d!eƒZG d"d#„ d#eƒZG d$d%„ d%eƒZG d&d'„ d'eƒZG d(d)„ d)eƒZG d*d+„ d+eƒZG d,d-„ d-eƒZ G d.d/„ d/eƒZ!G d0d1„ d1eƒZ"G d2d3„ d3eƒZ#G d4d5„ d5eƒZ$G d6d7„ d7eƒZ%G d8d9„ d9eƒZ&G d:d;„ d;e&ƒZ'G d<d=„ d=e&ƒZ(G d>d?„ d?e(ƒZ)G d@dA„ dAe)ƒZ*G dBdC„ dCe(ƒZ+dS )Dz%Implementation of the Result classes.é    N)ÚdatetimeÚ	timedeltaé   )ÚDbDoc)ÚMYSQL_CHARACTER_SETS)Údecode_from_bytesÚ
deprecatedc              
   C   s˜   t |ƒdkrd S |  ¡ tjkr.t|d d… ƒS ztj|  ¡  |ƒW S  ty’ } z8t	j
 d |¡¡ t	j
 d | d¡¡¡ W Y d }~d S d }~0 0 d S )Nr   éÿÿÿÿú{0}Úhex)ÚlenÚget_typeÚ
ColumnTypeÚSTRINGr   ÚColumnProtoTypeÚconverter_mapÚget_proto_typeÚKeyErrorÚsysÚstderrÚwriteÚformatÚencode)ÚcolumnÚpayloadÚerr© r   úJ/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/mysqlx/result.pyÚfrom_protobuf+   s    ÿþr   c                 C   s   | d d… S )Nr	   r   ©r   r   r   r   Úbytes_from_protobuf<   s    r    c                 C   s    t | ƒdksJ ‚t d| ¡d S )Né   z<fr   ©r   ÚstructÚunpackr   r   r   r   Úfloat_from_protobufA   s    r%   c                 C   s    t | ƒdksJ ‚t d| ¡d S )Né   z<dr   r"   r   r   r   r   Údouble_from_protobufF   s    r'   c                 C   sœ   t | ƒdkrtdƒ‚d}d}d}| D ]j}t|tƒr6|nt|ƒ}|d@ dk}|d@ }||K }||O }|r~|| |d d … f  S |d7 }|d7 }q$tdƒ‚d S )Nr   zPayload is emptyé€   é   r   é   zPayload too short)r   Ú
ValueErrorÚ
isinstanceÚintÚordÚEOFError)r   ÚcurÚiÚshiftÚitemÚcharZeosZcur_bitsr   r   r   Úvarint_from_protobuf_streamK   s     
r5   c                 C   s$   t | ƒ\}} t| ƒdkr tdƒ‚|S )Nr   úPayload too long©r5   r   r+   ©r   r1   r   r   r   Úvarint_from_protobufa   s    r9   c                 C   sL   t | ƒ\}} t| ƒdkr tdƒ‚|d@ r@| }|d? }|dO }n|d? }|S )Nr   r6   r   l            r7   r8   r   r   r   Úvarsint_from_protobufi   s    
r:   c                 C   sš   g }zxt | ƒ\}} t| ƒ|k rLt| ƒdkrD|dkrDt|ƒdkrDg W S tdƒ‚| | d |… ¡ | |d … } t| ƒdkrzW q–W q ty’   Y q–Y q0 q|S )Nr   r   zInvalid Set encoding)r5   r   r+   Úappend)r   Zset_pbZ	field_lenr   r   r   Úset_from_protobufy   s     r<   c                 C   s$  g }d }t | d tƒr| d n
t| d ƒ}| dd … } | D ]Ö}t |tƒrL|nt|ƒ}|d@ d? }|d@ }|dk rÀ| |¡ |dk rŽ| |¡ n0|dkr¢d} �qn|dkr¶d} �qntd	ƒ‚q:|dkràd}|dksØJ ‚ �qq:|dk�rd}|dksúJ ‚ �qq:td
 |¡ƒ‚q:t ||| f¡S )Nr   r   éð   r!   é   é
   é   é   zInvalid BCDzInvalid BCD: {0})r,   r-   r.   r;   r+   r   ÚdecimalÚDecimal)r   ÚdigitsÚsignÚscaler3   r4   Zhigh_bcdZlow_bcdr   r   r   Údecimal_from_protobufŽ   s:    "


rG   c                 C   s�   d}d}d}d}t | ƒ\}} t | ƒ\}} t | ƒ\}} z4t | ƒ\}} t | ƒ\}} t | ƒ\}} t | ƒ\}} W n tyz   Y n0 t|||||||ƒS )Nr   )r5   r+   r   )r   ÚhourÚminutesÚsecondsÚusecondsÚyearÚmonthÚdayr   r   r   Údatetime_from_protobuf²   s    rO   c                 C   sº   d}d}d}d}| d dk}| dd … } z4t | ƒ\}} t | ƒ\}} t | ƒ\}} t | ƒ\}} W n tyn   Y n0 |rª|r‚|d9 }n(|r�|d9 }n|rž|d9 }n|rª|d9 }t||||d�S )Nr   r   r	   )ÚhoursrI   rJ   Úmicroseconds)r5   r+   r   )r   rH   rI   rJ   rK   Únegater   r   r   Útime_from_protobufÇ   s2    


ÿrS   c                   @   s   e Zd ZdZdS )Ú
Collationsé!   N)Ú__name__Ú
__module__Ú__qualname__ZUTF8_GENERAL_CIr   r   r   r   rT   ç   s   rT   c                   @   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%e&d$d%„ ƒZ'e&d&d'„ ƒZ(e&d(d)„ ƒZ)e&d*d+„ ƒZ*e&d,d-„ ƒZ+e&d.d/„ ƒZ,e&d0d1„ ƒZ-e&d2d3„ ƒZ.d4S )5r   r   é   é   r!   é   é   r*   r&   é	   r?   é   r@   rA   é   r>   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é    rU   é"   é#   c                 C   s*   t | ƒ ¡ D ]\}}||kr|  S qd S ©N)ÚvarsÚitems)ÚclsÚneedleÚkeyÚvaluer   r   r   Ú	to_string  s    
zColumnType.to_stringc                 C   s   t | | ¡ d ƒS rs   )ÚgetattrÚupper)rv   rx   r   r   r   Úfrom_string  s    zColumnType.from_stringc                 C   s   || j | jfv S rs   )ÚCHARÚVARCHAR©rv   Úcol_typer   r   r   Úis_char  s    zColumnType.is_charc                 C   s   || j | jfv S rs   )ÚBINARYÚ	VARBINARYr€   r   r   r   Ú	is_binary  s    zColumnType.is_binaryc                 C   s   || j | j| j| jfv S rs   )ÚTEXTÚTINYTEXTÚ
MEDIUMTEXTÚLONGTEXTr€   r   r   r   Úis_text#  s    ÿzColumnType.is_textc                 C   s   || j | j| j| j| jfv S rs   )ÚREALÚDOUBLEÚFLOATÚDECIMALÚNUMERICr€   r   r   r   Úis_decimals(  s    ÿzColumnType.is_decimalsc                 C   s    || j | j| j| j| j| jfv S rs   )ÚBITÚTINYINTÚSMALLINTÚ	MEDIUMINTÚINTÚBIGINTr€   r   r   r   Ú
is_numeric-  s    ÿzColumnType.is_numericc                 C   s   || j | jfv S rs   )ÚSETÚENUMr€   r   r   r   Úis_finite_set2  s    zColumnType.is_finite_setN)/rV   rW   rX   r‘   r’   r“   r”   r•   r–   r‹   r�   rŽ   r�   rŒ   ÚJSONr   ÚBYTESÚTIMEÚDATEÚDATETIMEÚ	TIMESTAMPr˜   r™   ÚGEOMETRYÚXMLZYEARr~   r   rƒ   r„   ZTINYBLOBZBLOBZ
MEDIUMBLOBZLONGBLOBr‡   r†   rˆ   r‰   Úclassmethodrz   r}   r‚   r…   rŠ   r�   r—   rš   r   r   r   r   r   ë   sf   






r   c                   @   sh   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eeeeeee	eeeeeeeeee
eeeeeiZdS )r   r   rY   r[   r\   r*   r?   r@   r>   r`   ra   rb   N)rV   rW   rX   ÚSINTÚUINTrŒ   r�   rœ   r�   rŸ   r˜   r™   r‘   rŽ   r:   r9   r    rO   rS   r%   r'   r<   rG   r   r   r   r   r   r   7  s.   õr   c                   @   s6   e Zd Zdd„ Zdd„ Zedd„ ƒZejdd„ ƒZdS )	ÚFlagsc                 C   sV   i | _ i | _| jj ¡ D ]2\}}| d¡r,qt|tƒr|| j |< || j|< q|| _d S )NÚ__)	Z_allowed_flagsÚ_flag_namesÚ	__class__Ú__dict__ru   Ú
startswithr,   r-   Ú_value)Úselfry   rx   Úvalr   r   r   Ú__init__T  s    


zFlags.__init__c              	   C   sŽ   d}g }| j }tddƒD ]j}|dK }||@ }|rz| | j| ¡ W q ty€   tj d | j¡¡ tj d | j	j
¡¡ Y q0 qd |¡S )Nr   r   é?   r
   ú,)r¬   Úranger;   r¨   r   r   r   r   r   r©   rª   Újoin)r­   ÚmaskZ
flag_namesry   Ú_Úflagr   r   r   Ú__str___  s    zFlags.__str__c                 C   s   | j S rs   ©r¬   ©r­   r   r   r   ry   q  s    zFlags.valuec                 C   s
   || _ d S rs   r¸   )r­   r®   r   r   r   ry   u  s    N)rV   rW   rX   r¯   r·   Úpropertyry   Úsetterr   r   r   r   r¦   S  s   
r¦   c                   @   s    e Zd ZdZdZdZdZdZdS )ÚColumnFlagsr`   rp   é@   r(   é   N)rV   rW   rX   ZNOT_NULLZPRIMARY_KEYZ
UNIQUE_KEYZMULTIPLE_KEYZAUTO_INCREMENTr   r   r   r   r¼   z  s
   r¼   c                   @   s   e Zd ZdZdS )ÚDatetimeColumnFlagsr   N)rV   rW   rX   r    r   r   r   r   r¿   ‚  s   r¿   c                   @   s   e Zd ZdZdS )ÚUIntColumnFlagsr   N)rV   rW   rX   ZZEROFILLr   r   r   r   rÀ   †  s   rÀ   c                   @   s   e Zd ZdZdS )ÚDoubleColumnFlagsr   N©rV   rW   rX   ÚUNSIGNEDr   r   r   r   rÁ   Š  s   rÁ   c                   @   s   e Zd ZdZdS )ÚFloatColumnFlagsr   NrÂ   r   r   r   r   rÄ   Ž  s   rÄ   c                   @   s   e Zd ZdZdS )ÚBytesColumnFlagsr   N)rV   rW   rX   Z	RIGHT_PADr   r   r   r   rÅ   ’  s   rÅ   c                   @   s   e Zd ZdZdZdZdS )ÚBytesContentTyper   rY   rZ   N)rV   rW   rX   r¡   r›   r¢   r   r   r   r   rÆ   –  s   rÆ   c                   @   s2  e Zd ZdZdAdd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
edd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd „ ƒZed!d"„ ƒZe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#dS )BÚColumna_  Represents meta data for a table column.

    Args:
        col_type (int): The column type.
        catalog (str): The catalog.
        schema (str): The schema name.
        table (str): The table name.
        original_table (str): The original table name.
        name (str): The column name.
        original_name (str): The original table name.
        length (int): The column length,
        collation (str): The collation name.
        fractional_digits (int): The fractional digits.
        flags (int): The flags.
        content_type (int): The content type.

    .. versionchanged:: 8.0.12
    Nc                 C   s  t |ƒ| _t |ƒ| _t |ƒ| _t |ƒ| _t |ƒ| _|| _d | _|| _|| _	|	| _
|
| _|| _|| _d| _d| _d| _d| _d | _d | _d | _| j
dkrè| j
ttƒkr´td | j
¡ƒ‚t| j
 }|d | _|d | _d| jv päd| jv | _|  ¡  | jtjtjtjtjtjfv | _d S )NFr   z"No mapping found for collation {0}r   ÚbinaryZ_bin) r   Ú_schemaÚ_nameÚ_original_nameÚ_tableÚ_original_tableÚ_proto_typeÚ	_col_typeÚ_catalogÚ_lengthZ
_collationÚ_fractional_digitsÚ_flagsÚ_content_typeÚ_number_signedÚ
_is_paddedÚ
_is_binaryÚ	_is_bytesÚ_collation_nameÚ_character_set_nameÚ
_zero_fillr   r   r+   r   Ú	_map_typer   r¡   r›   r¢   rœ   r   )r­   r�   ÚcatalogÚschemaÚtableZoriginal_tableÚnameÚoriginal_nameÚlengthZ	collationÚfractional_digitsÚflagsÚcontent_typeÚinfor   r   r   r¯   °  sH    





ÿ



ÿþzColumn.__init__c                 C   s   t | j| j| jt | jƒdœƒS )N)r�   rÞ   rß   rä   )ÚstrrÏ   rÉ   rÌ   rÓ   r¹   r   r   r   r·   ×  s    üzColumn.__str__c                 C   sj   | j tjkrtj| _nD| j tjkr,tj| _n.| j tjkrBtj| _n| jrRtj| _ntj	| _| j
d@ | _dS )z
Map bytes.r   N)rÔ   rÆ   r¡   r   rÏ   r›   r¢   r×   rœ   r   rÓ   rÖ   r¹   r   r   r   Ú
_map_bytesß  s    



zColumn._map_bytesc                 C   sN   | j dkrtj| _n6| jtj@ dkr.tj| _n| j dkrBtj| _ntdƒ‚dS )zMap datetime.r?   r   rc   z#Datetime mapping scenario unhandledN)	rÑ   r   rž   rÏ   rÓ   r¿   r    rŸ   r+   r¹   r   r   r   Ú_map_datetimeí  s    




zColumn._map_datetimec                 C   sb   | j dkrtj| _nD| j dkr(tj| _n0| j dkr<tj| _n| j dkrPtj| _ntj| _d| _dS )zMap int type.r!   r\   r]   r^   TN)	rÑ   r   r’   rÏ   r“   r”   r•   r–   rÕ   r¹   r   r   r   Ú_map_int_typeø  s    







zColumn._map_int_typec                 C   sh   | j dkrtj| _nD| j dkr(tj| _n0| j dkr<tj| _n| j dkrPtj| _ntj| _| jd@ | _	dS )zMap uint type.rZ   r[   r&   r?   r   N)
rÑ   r   r’   rÏ   r“   r”   r•   r–   rÓ   rÛ   r¹   r   r   r   Ú_map_uint_type  s    







zColumn._map_uint_typec                 C   sF  | j tjkr|  ¡  �n*| j tjkr0|  ¡  �n| j tjkrXtj| _| j	t
j@ dk| _nê| j tjkr€tj| _| j	t
j@ dk| _nÂ| j tjkr¨tj| _| j	t
j@ dk| _nš| j tjkr¾|  ¡  n„| j tjkrÔtj| _nn| j tjkrê|  ¡  nX| j tjk�rtj| _n@| j tjk�rtj| _n(| j tjk�r2tj| _ntd | j ¡ƒ‚dS )z	Map type.r   zUnknown column type {0}N)rÎ   r   r¤   rê   r¥   rë   r�   r   rÏ   rÓ   rÄ   rÃ   Z_is_number_signedrŽ   rŒ   rœ   rè   r�   rŸ   ré   r˜   r™   r‘   r+   r   r¹   r   r   r   rÜ     s:    ÿÿÿ





zColumn._map_typec                 C   s   | j S )z@str: The schema name.

        .. versionadded:: 8.0.12
        ©rÉ   r¹   r   r   r   Úschema_name5  s    zColumn.schema_namec                 C   s   | j p
| jS )z?str: The table name.

        .. versionadded:: 8.0.12
        ©rÍ   rÌ   r¹   r   r   r   Ú
table_name=  s    zColumn.table_namec                 C   s   | j p
| jS )z@str: The table label.

        .. versionadded:: 8.0.12
        ©rÌ   rÍ   r¹   r   r   r   Útable_labelE  s    zColumn.table_labelc                 C   s   | j p
| jS )z@str: The column name.

        .. versionadded:: 8.0.12
        ©rË   rÊ   r¹   r   r   r   Úcolumn_nameM  s    zColumn.column_namec                 C   s   | j p
| jS )zAstr: The column label.

        .. versionadded:: 8.0.12
        ©rÊ   rË   r¹   r   r   r   Úcolumn_labelU  s    zColumn.column_labelc                 C   s   | j S )z@int: The column type.

        .. versionadded:: 8.0.12
        ©rÏ   r¹   r   r   r   Útype]  s    zColumn.typec                 C   s   | j S )zBint. The column length.

        .. versionadded:: 8.0.12
        ©rÑ   r¹   r   r   r   râ   e  s    zColumn.lengthc                 C   s   | j S )zMint: The column fractional digits.

        .. versionadded:: 8.0.12
        ©rÒ   r¹   r   r   r   rã   m  s    zColumn.fractional_digitsc                 C   s   | j S )zCstr: The collation name.

        .. versionadded:: 8.0.12
        ©rÙ   r¹   r   r   r   Úcollation_nameu  s    zColumn.collation_namec                 C   s   | j S )zGstr: The character set name.

        .. versionadded:: 8.0.12
        ©rÚ   r¹   r   r   r   Úcharacter_set_name}  s    zColumn.character_set_namec                 C   s   | j S )zUReturns the schema name.

        Returns:
            str: The schema name.
        rì   r¹   r   r   r   Úget_schema_name…  s    zColumn.get_schema_namec                 C   s   | j p
| jS )zSReturns the table name.

        Returns:
            str: The table name.
        rî   r¹   r   r   r   Úget_table_name�  s    zColumn.get_table_namec                 C   s   | j p
| jS )zUReturns the table label.

        Returns:
            str: The table label.
        rð   r¹   r   r   r   Úget_table_label•  s    zColumn.get_table_labelc                 C   s   | j p
| jS )zUReturns the column name.

        Returns:
            str: The column name.
        rò   r¹   r   r   r   Úget_column_name�  s    zColumn.get_column_namec                 C   s   | j p
| jS )zWReturns the column label.

        Returns:
            str: The column label.
        rô   r¹   r   r   r   Úget_column_label¥  s    zColumn.get_column_labelc                 C   s   | j S )zaReturns the column proto type.

        Returns:
            int: The column proto type.
        )rÎ   r¹   r   r   r   r   ­  s    zColumn.get_proto_typec                 C   s   | j S )zUReturns the column type.

        Returns:
            int: The column type.
        rö   r¹   r   r   r   r   µ  s    zColumn.get_typec                 C   s   | j S )zYReturns the column length.

        Returns:
            int: The column length.
        rø   r¹   r   r   r   Ú
get_length½  s    zColumn.get_lengthc                 C   s   | j S )zoReturns the column fractional digits.

        Returns:
            int: The column fractional digits.
        rù   r¹   r   r   r   Úget_fractional_digitsÅ  s    zColumn.get_fractional_digitsc                 C   s   | j S )z[Returns the collation name.

        Returns:
            str: The collation name.
        rú   r¹   r   r   r   Úget_collation_nameÍ  s    zColumn.get_collation_namec                 C   s   | j S )zcReturns the character set name.

        Returns:
            str: The character set name.
        rü   r¹   r   r   r   Úget_character_set_nameÕ  s    zColumn.get_character_set_namec                 C   s   | j S )zxReturns `True` if is a number signed.

        Returns:
            bool: Returns `True` if is a number signed.
        )rÕ   r¹   r   r   r   Úis_number_signedÝ  s    zColumn.is_number_signedc                 C   s   | j S )zfReturns `True` if is padded.

        Returns:
            bool: Returns `True` if is padded.
        )rÖ   r¹   r   r   r   Ú	is_paddedå  s    zColumn.is_paddedc                 C   s   | j S )zdReturns `True` if is bytes.

        Returns:
            bool: Returns `True` if is bytes.
        )rØ   r¹   r   r   r   Úis_bytesí  s    zColumn.is_bytes)NNNNNNNNNNN)$rV   rW   rX   Ú__doc__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Ç   �  s\       ý
'!









rÇ   c                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zedƒd	d
„ ƒZdS )ÚRowz¶Represents a row element returned from a SELECT query.

    Args:
        rs (mysqlx.SqlResult or mysqlx.RowResult): The result set.
        fields (`list`): The list of fields.
    c                 C   s   || _ || _d S rs   )Ú_fieldsÚ
_resultset)r­   ÚrsÚfieldsr   r   r   r¯   ý  s    zRow.__init__c                 C   s
   t | jƒS rs   )Úreprr  r¹   r   r   r   Ú__repr__  s    zRow.__repr__c                 C   sb   t |tƒr| j |¡n|}|dkr:t |tƒr:td |¡ƒ‚|t| jƒksP|dk rXtdƒ‚| j| S )z\Returns the value of a column by name or index.

        .. versionchanged:: 8.0.12
        r	   úColumn name '{0}' not foundr   zIndex out of range)	r,   rç   r  Úindex_ofr+   r   r   r  Ú
IndexError)r­   ÚindexÚ	int_indexr   r   r   Ú__getitem__  s    ÿÿzRow.__getitem__ú8.0.12c                 C   sF   | j  |¡}|t| jƒkr"tdƒ‚|dkr8td |¡ƒ‚t| j| ƒS )zŽReturns the value using the column name.

        Args:
            str_index (str): The column name.

        .. deprecated:: 8.0.12
        zArgument out of ranger	   r  )r  r  r   r  r  r+   r   rç   )r­   Z	str_indexr  r   r   r   Ú
get_string  s    	zRow.get_stringN)	rV   rW   rX   r
  r¯   r  r  r   r  r   r   r   r   r  ö  s   r  c                   @   sX   e Zd 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S )Ú
BaseResultz‰Provides base functionality for result objects.

    Args:
        connection (mysqlx.connection.Connection): The Connection object.
    c                 C   sH   || _ d| _d| _d| _g | _g | _|d u r4d | _n|j| _| ¡  d S ©NFr   r	   )	Ú_connectionÚ_closedÚ_rows_affectedÚ_generated_idÚ_generated_idsÚ	_warningsÚ	_protocolÚprotocolZfetch_active_result©r­   Ú
connectionr   r   r   r¯   (  s    zBaseResult.__init__c                 C   s   | j S )z†Returns the number of affected items for the last operation.

        Returns:
            int: The number of affected items.
        ©r  r¹   r   r   r   Úget_affected_items_count6  s    z#BaseResult.get_affected_items_countc                 C   s   | j S )zZReturns the warnings.

        Returns:
            `list`: The list of warnings.
        )r!  r¹   r   r   r   Úget_warnings>  s    zBaseResult.get_warningsc                 C   s
   t | jƒS )zcReturns the number of warnings.

        Returns:
            int: The number of warnings.
        )r   r!  r¹   r   r   r   Úget_warnings_countF  s    zBaseResult.get_warnings_countc                 C   s
   || _ dS )z)Sets if resultset fetch is done.
        N)r  ©r­   r¶   r   r   r   Ú
set_closedN  s    zBaseResult.set_closedc                 C   s   | j  |||dœ¡ dS )z«Append a warning.

        Args:
            level (int): The warning level.
            code (int): The warning code.
            msg (str): The warning message.
        )ÚlevelÚcodeÚmsgN)r!  r;   )r­   r,  r-  r.  r   r   r   Úappend_warningS  s    zBaseResult.append_warningc                 C   s
   || _ dS )z Sets the generated ids.
        N©r   )r­   Zgenerated_idsr   r   r   Úset_generated_ids]  s    zBaseResult.set_generated_idsc                 C   s
   || _ dS )z&Sets the generated insert id.
        N©r  )r­   Zgenerated_idr   r   r   Úset_generated_insert_idb  s    z"BaseResult.set_generated_insert_idc                 C   s
   || _ dS )z*Sets the number of rows affected.
        Nr&  )r­   Útotalr   r   r   Úset_rows_affectedg  s    zBaseResult.set_rows_affectedN)rV   rW   rX   r
  r¯   r'  r(  r)  r+  r/  r1  r3  r5  r   r   r   r   r  "  s   
r  c                       sR   e Zd ZdZd‡ fdd„	Zdd„ Zedƒdd	„ ƒZedƒd
d„ ƒZdd„ Z	‡  Z
S )ÚResulta  Allows retrieving information about non query operations performed on
    the database.

    Args:
        connection (mysqlx.connection.Connection): The Connection object.
                                                   ids (`list`): A list of IDs.
    Nc                    s.   t t| ƒ |¡ || _|d ur*| j | ¡ d S rs   )Úsuperr6  r¯   Ú_idsr  Zclose_result)r­   r%  Úids©r©   r   r   r¯   u  s    zResult.__init__c                 C   s   | j S )zjReturns the last insert id auto generated.

        Returns:
            int: The last insert id.
        r2  r¹   r   r   r   Úget_autoincrement_value|  s    zResult.get_autoincrement_valuer  c                 C   s&   | j du st| j ƒdkrdS | j d S )zdReturns ID of the last document inserted into a collection.

        .. deprecated:: 8.0.12
        Nr   )r8  r   r¹   r   r   r   Úget_document_id„  s    zResult.get_document_idc                 C   s   | j S )zIReturns the generated insert id.

        .. deprecated:: 8.0.12
        r2  r¹   r   r   r   Úget_generated_insert_idŽ  s    zResult.get_generated_insert_idc                 C   s   | j S )z#Returns the generated ids.
        r0  r¹   r   r   r   Úget_generated_ids–  s    zResult.get_generated_ids)NN)rV   rW   rX   r
  r¯   r;  r   r<  r=  r>  Ú__classcell__r   r   r:  r   r6  m  s   
	
r6  c                       st   e Zd ZdZ‡ fdd„Zdd„ Ze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‡  ZS )ÚBufferingResultzãProvides base functionality for buffering result objects.

    Args:
        connection (mysqlx.connection.Connection): The Connection object.
                                                   ids (`list`): A list of IDs.
    c                    s@   t t| ƒ |¡ g | _d| _d| _g | _d| _d| _|  	¡  d S r  )
r7  r@  r¯   Ú_columnsÚ	_has_dataÚ_has_more_resultsÚ_itemsÚ
_page_sizeÚ	_positionÚ_init_resultr$  r:  r   r   r¯   £  s    zBufferingResult.__init__c                 C   s
   | j | S rs   )rD  )r­   r  r   r   r   r  ­  s    zBufferingResult.__getitem__c                 C   s
   t | jƒS )zint: The total of items.)r   rD  r¹   r   r   r   Úcount°  s    zBufferingResult.countc                 C   sR   | j  | ¡| _t| jƒdkr dnd| _g | _d| _d| _| j  | jrH| nd¡ dS )zInitialize the result.r   TFrd   r	   N)	r  Zget_column_metadatarA  r   Z_has_more_datarD  rE  rF  Zset_active_resultr¹   r   r   r   rG  µ  s    ÿzBufferingResult._init_resultc                 C   sn   | j  | ¡}|du rdS dgt|d ƒ }|sdtt|d ƒƒD ]$}| j| }t||d | ƒ||< q>t| |ƒS )z•Read item.

        Args:
            dumping (bool): `True` for dumping.

        Returns:
            :class:`mysqlx.Row`: A `Row` object.
        NÚfield)r  Zread_rowr   r²   rA  r   r  )r­   ÚdumpingÚrowr3   rx   r   r   r   r   Ú
_read_item¿  s    	
zBufferingResult._read_itemc                 C   sL   | j r
dS d}t| jƒD ].}|  d¡}|du r2 qH| j |¡ |d7 }q|S )zSReads the page items.

        Returns:
            int: Total items read.
        Fr   Nr   )r  r²   rE  rL  rD  r;   )r­   rH  rµ   r3   r   r   r   Ú_page_in_itemsÒ  s    

zBufferingResult._page_in_itemsc                 C   s0   d}| j D ] }| ¡ |kr"|  S |d7 }q
dS )zeReturns the index of the column.

        Returns:
            int: The index of the column.
        r   r   r	   )rA  r  )r­   Zcol_namer  Úcolr   r   r   r  ä  s    

zBufferingResult.index_ofc                 C   s   | j r
dS |  d¡S )zuFetch one item.

        Returns:
            :class:`mysqlx.Row` or :class:`mysqlx.DbDoc`: one result item.
        NF)r  rL  r¹   r   r   r   Ú	fetch_oneñ  s    zBufferingResult.fetch_onec                 C   s   |   ¡ s qq | jS )z–Fetch all items.

        Returns:
            `list`: The list of items of :class:`mysqlx.DbDoc` or
                    :class:`mysqlx.Row`.
        )rM  rD  r¹   r   r   r   Ú	fetch_allü  s    zBufferingResult.fetch_allc                 C   s
   || _ dS )zdSets if result has data.

        Args:
            flag (bool): `True` if result has data.
        N©rB  r*  r   r   r   Úset_has_data  s    zBufferingResult.set_has_datac                 C   s
   || _ dS )zfSets if has more results.

        Args:
            flag (bool): `True` if has more results.
        N)rC  r*  r   r   r   Úset_has_more_results  s    z$BufferingResult.set_has_more_results)rV   rW   rX   r
  r¯   r  rº   rH  rG  rL  rM  r  rO  rP  rR  rS  r?  r   r   r:  r   r@  œ  s   


r@  c                       s4   e Zd ZdZ‡ fdd„Zedd„ ƒZdd„ Z‡  ZS )Ú	RowResultz¡Allows traversing the Row objects returned by a Table.select operation.

    Args:
        connection (mysqlx.connection.Connection): The Connection object.
    c                    s   t t| ƒ |¡ d S rs   )r7  rT  r¯   r$  r:  r   r   r¯     s    zRowResult.__init__c                 C   s   | j S )z`list`: The list of columns.©rA  r¹   r   r   r   Úcolumns"  s    zRowResult.columnsc                 C   s   | j S )z‚Returns the list of columns.

        Returns:
            `list`: The list of columns.

        .. versionadded:: 8.0.12
        rU  r¹   r   r   r   Úget_columns'  s    zRowResult.get_columns)	rV   rW   rX   r
  r¯   rº   rV  rW  r?  r   r   r:  r   rT    s
   
rT  c                       s8   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Z‡  ZS )
Ú	SqlResultzƒRepresents a result from a SQL statement.

    Args:
        connection (mysqlx.connection.Connection): The Connection object.
    c                    s   t t| ƒ |¡ d S rs   )r7  rX  r¯   r$  r:  r   r   r¯   8  s    zSqlResult.__init__c                 C   s   | j S )zŒReturns the identifier for the last record inserted.

        Returns:
            str: The identifier of the last record inserted.
        r2  r¹   r   r   r   r;  ;  s    z!SqlResult.get_autoincrement_valuec                 C   s   | j r
dS d| _|  ¡  dS )zjProcess the next result.

        Returns:
            bool: Returns `True` if the fetch is done.
        FT)r  rC  rG  r¹   r   r   r   Únext_resultC  s
    zSqlResult.next_resultc                 C   s   | j S )z’Returns True if result has data.

        Returns:
            bool: Returns `True` if result has data.

        .. versionadded:: 8.0.12
        rQ  r¹   r   r   r   Úhas_dataO  s    zSqlResult.has_data)	rV   rW   rX   r
  r¯   r;  rY  rZ  r?  r   r   r:  r   rX  2  s
   rX  c                       s,   e Zd ZdZ‡ fdd„Z‡ fdd„Z‡  ZS )Ú	DocResultzªAllows traversing the DbDoc objects returned by a Collection.find
    operation.

    Args:
        connection (mysqlx.connection.Connection): The Connection object.
    c                    s   t t| ƒ |¡ d S rs   )r7  r[  r¯   r$  r:  r   r   r¯   `  s    zDocResult.__init__c                    s,   t t| ƒ |¡}|du rdS tt|d ƒƒS )z™Read item.

        Args:
            dumping (bool): `True` for dumping.

        Returns:
            :class:`mysqlx.DbDoc`: A `DbDoc` object.
        Nr   )r7  r[  rL  r   r   )r­   rJ  rK  r:  r   r   rL  c  s    	zDocResult._read_item)rV   rW   rX   r
  r¯   rL  r?  r   r   r:  r   r[  Y  s   r[  ),r
  rB   r#   r   r   r   Zdbdocr   Zcharsetsr   Úhelpersr   r   r   r    r%   r'   r5   r9   r:   r<   rG   rO   rS   ÚobjectrT   r   r   r¦   r¼   r¿   rÀ   rÁ   rÄ   rÅ   rÆ   rÇ   r  r  r6  r@  rT  rX  r[  r   r   r   r   Ú<module>   sN   $ L'  [,K/}'