o
    by                     @   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 z(tjttjttjttjt	tj
ttjttjttjttjttjttjti|  |W S  tyX } ztjd| tjd|d W Y d }~d S d }~ww )Nr   {0}hex)lenColumnProtoTypeSINTvarsint_from_protobufUINTvarint_from_protobufBYTESbytes_from_protobufDATETIMEdatetime_from_protobufTIMEtime_from_protobufFLOATfloat_from_protobufDOUBLEdouble_from_protobufBITSETset_from_protobufENUMDECIMALdecimal_from_protobufKeyErrorsysstderrwriteformatencode)col_typepayloaderr r*   L/var/www/secure340b-portal/env/lib/python3.10/site-packages/mysqlx/result.pyfrom_protobuf+   s2   r,   c                 C   s   t | d d S )N)r   r(   r*   r*   r+   r   C      r   c                 C      t | dksJ td| S )N   z<fr   structunpackr.   r*   r*   r+   r   H      r   c                 C   r0   )N   z<dr2   r.   r*   r*   r+   r   M   r5   r   c                 C   s   t | dkr
tdd}d}d}| D ]5}t|tr|nt|}|d@ dk}|d@ }||K }||O }|r?|| |d d  f  S |d7 }|d7 }qtd)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_streamR   s    
rD   c                 C   s$   t | \}} t| dkrtd|S )Nr   Payload too longrD   r   r:   r(   r@   r*   r*   r+   r   h   s   r   c                 C   sN   t | \}} t| dkrtd|d@ r!| }|d? }|dO }|S |d? }|S )Nr   rE   r   l            rF   rG   r*   r*   r+   r   p   s   r   c                 C   s   g }	 z=t | \}} t| |k r't| dkr#|dkr#t|dkr#g W S td|| d |  | |d  } t| dkr?W |S W n
 tyJ   Y |S w q)NTr   r   zInvalid Set encoding)rD   r   r:   append)r(   Zset_pbZ	field_lenr*   r*   r+   r      s&    r   c                 C   s  g }d }t | d tr| d nt| d }| dd  } | D ]`}t |tr&|nt|}|d@ d? }|d@ }|dk r[|| |dk rG|| q|dkrOd} n/|dkrWd} n'td	|dkrid}|dksgJ  n|dkrwd}|dksuJ  ntd
|t||| fS )Nr   r      r1      
         zInvalid BCDzInvalid BCD: {0})r;   r<   r=   rH   r:   r%   decimalDecimal)r(   digitssignscalerB   rC   Zhigh_bcdZlow_bcdr*   r*   r+   r       s:   "
r    c                 C   s   d}d}d}d}t | \}} t | \}} t | \}} zt | \}} t | \}} t | \}} t | \}} W n	 ty=   Y nw t|||||||S )Nr   )rD   r:   r   )r(   hourminutessecondsusecondsyearmonthdayr*   r*   r+   r      s    r   c                 C   s   d}d}d}d}| d dk}| dd  } zt | \}} t | \}} t | \}} t | \}} W n	 ty7   Y nw |rU|rA|d9 }n|rH|d9 }n|rO|d9 }n|rU|d9 }t||||dS )Nr   r   r-   )hoursrT   rU   microseconds)rD   r:   r   )r(   rS   rT   rU   rV   negater*   r*   r+   r      s4   


r   c                   @      e Zd ZdZdS )
Collations!   N)__name__
__module____qualname__ZUTF8_GENERAL_CIr*   r*   r*   r+   r^          r^   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 )5
ColumnTyper         r1         r9   r6   	   rK      rL   rM      rJ                                                       r_   "   #   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 r   )getattrupper)r   r   r*   r*   r+   from_string  r/   zColumnType.from_stringc                 C      || j | jfv S r   )CHARVARCHARr   r'   r*   r*   r+   is_char"  r/   zColumnType.is_charc                 C   r   r   )BINARY	VARBINARYr   r*   r*   r+   	is_binary&  r/   zColumnType.is_binaryc                 C   s   || j | j| j| jfv S r   )TEXTTINYTEXT
MEDIUMTEXTLONGTEXTr   r*   r*   r+   is_text*  s   zColumnType.is_textc                 C   s   || j | j| j| j| jfv S r   )REALr   r   r   NUMERICr   r*   r*   r+   is_decimals/  s   zColumnType.is_decimalsc                 C   s    || j | j| j| j| j| jfv S r   )r   TINYINTSMALLINT	MEDIUMINTINTBIGINTr   r*   r*   r+   
is_numeric4  s   zColumnType.is_numericc                 C   r   r   )r   r   r   r*   r*   r+   is_finite_set9  r/   zColumnType.is_finite_setN)/r`   ra   rb   r   r   r   r   r   r   r   r   r   r   r   JSONSTRINGr   r   DATEr   	TIMESTAMPr   r   GEOMETRYXMLZYEARr   r   r   r   ZTINYBLOBZBLOBZ
MEDIUMBLOBZLONGBLOBr   r   r   r   classmethodr   r   r   r   r   r   r   r   r*   r*   r*   r+   rd      sh    






rd   c                   @   s8   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S )r   r   re   rg   rh   r9   rK   rL   rJ   rl   rm   rn   N)r`   ra   rb   r   r   r   r   r   r   r   r   r   r   r   r*   r*   r*   r+   r   >  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 ]\}}|drqt|tr%|| j |< || j|< q|| _d S )N__)	Z_allowed_flags_flag_names	__class____dict__r   
startswithr;   r<   _value)selfr   r   valr*   r*   r+   __init__M  s   




zFlags.__init__c              	   C   s   d}g }| j }tddD ]5}|dK }||@ }|rAz
|| j|  W q ty@   tjd| j tjd| j	j
 Y qw qd|S )Nr   r   ?   r	   ,)r   rangerH   r   r!   r"   r#   r$   r%   r   r   join)r   maskZ
flag_namesr   _flagr*   r*   r+   __str__X  s   
zFlags.__str__c                 C      | j S r   r   r   r*   r*   r+   r   j  s   zFlags.valuec                 C   s
   || _ d S r   r   )r   r   r*   r*   r+   r   n  s   
N)r`   ra   rb   r   r   propertyr   setterr*   r*   r*   r+   r   L  s    
r   c                   @   s    e Zd ZdZdZdZdZdZdS )ColumnFlagsrl   r|   @   r7      N)r`   ra   rb   ZNOT_NULLZPRIMARY_KEYZ
UNIQUE_KEYZMULTIPLE_KEYZAUTO_INCREMENTr*   r*   r*   r+   r   s  s    r   c                   @   r]   )DatetimeColumnFlagsr   N)r`   ra   rb   r   r*   r*   r*   r+   r   {  rc   r   c                   @   r]   )UIntColumnFlagsr   N)r`   ra   rb   ZZEROFILLr*   r*   r*   r+   r     rc   r   c                   @   r]   )DoubleColumnFlagsr   Nr`   ra   rb   UNSIGNEDr*   r*   r*   r+   r     rc   r   c                   @   r]   )FloatColumnFlagsr   Nr   r*   r*   r*   r+   r     rc   r   c                   @   r]   )BytesColumnFlagsr   N)r`   ra   rb   Z	RIGHT_PADr*   r*   r*   r+   r     rc   r   c                   @   s   e Zd ZdZdZdZdS )BytesContentTyper   re   rf   N)r`   ra   rb   r   r   r   r*   r*   r*   r+   r     s    r   c                   @   s:  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rt| j
ttkrZtd| j
t| j
 }|d | _|d | _d| jv prd| 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_typerd   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| _n"| j tjkrtj| _n| j tjkr!tj| _n| jr)tj| _ntj	| _| j
d@ | _dS )z
Map bytes.r   N)r   r   r   rd   r   r   r   r   r   r   r   r   r   r*   r*   r+   
_map_bytes  s   



zColumn._map_bytesc                 C   sP   | j dkrtj| _dS | jtj@ dkrtj| _dS | j dkr$tj| _dS td)zMap datetime.rK   r   ro   z#Datetime mapping scenario unhandledN)	r   rd   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| _n"| j dkrtj| _n| j dkrtj| _n| j dkr(tj| _ntj| _d| _dS )zMap int type.r1   rh   ri   rj   TN)	r   rd   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| _n"| j dkrtj| _n| j dkrtj| _n| j dkr(tj| _ntj| _| jd@ | _	dS )zMap uint type.rf   rg   r6   rK   r   N)
r   rd   r   r   r   r   r   r   r   r   r   r*   r*   r+   _map_uint_type  s   







zColumn._map_uint_typec                 C   sN  | j tjkr|   dS | j tjkr|   dS | j tjkr-tj| _| j	t
j@ dk| _dS | j tjkrBtj| _| j	t
j@ dk| _dS | j tjkrWtj| _| j	t
j@ dk| _dS | j tjkrc|   dS | j tjkrotj| _dS | j tjkr{|   dS | j tjkrtj| _dS | j tjkrtj| _dS | j tjkrtj| _dS td| j )z	Map type.r   zUnknown column type {0}N)r   r   r   r   r   r   r   rd   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   r   )z@str: The schema name.

        .. versionadded:: 8.0.12
        r   r   r*   r*   r+   schema_name.     zColumn.schema_namec                 C      | j p| jS )z?str: The table name.

        .. versionadded:: 8.0.12
        r   r   r   r*   r*   r+   
table_name6     zColumn.table_namec                 C   r   )z@str: The table label.

        .. versionadded:: 8.0.12
        r   r   r   r*   r*   r+   table_label>  r   zColumn.table_labelc                 C   r   )z@str: The column name.

        .. versionadded:: 8.0.12
        r   r   r   r*   r*   r+   column_nameF  r   zColumn.column_namec                 C   r   )zAstr: The column label.

        .. versionadded:: 8.0.12
        r   r   r   r*   r*   r+   column_labelN  r   zColumn.column_labelc                 C   r   )z@int: The column type.

        .. versionadded:: 8.0.12
        r   r   r*   r*   r+   typeV  r   zColumn.typec                 C   r   )zBint. The column length.

        .. versionadded:: 8.0.12
        r   r   r*   r*   r+   r   ^  r   zColumn.lengthc                 C   r   )zMint: The column fractional digits.

        .. versionadded:: 8.0.12
        r   r   r*   r*   r+   r   f  r   zColumn.fractional_digitsc                 C   r   )zCstr: The collation name.

        .. versionadded:: 8.0.12
        r   r   r*   r*   r+   collation_namen  r   zColumn.collation_namec                 C   r   )zGstr: The character set name.

        .. versionadded:: 8.0.12
        r   r   r*   r*   r+   character_set_namev  r   zColumn.character_set_namec                 C   r   )zUReturns the schema name.

        Returns:
            str: The schema name.
        r   r   r*   r*   r+   get_schema_name~  r   zColumn.get_schema_namec                 C   r   )zSReturns the table name.

        Returns:
            str: The table name.
        r   r   r*   r*   r+   get_table_name  r   zColumn.get_table_namec                 C   r   )zUReturns the table label.

        Returns:
            str: The table label.
        r   r   r*   r*   r+   get_table_label  r   zColumn.get_table_labelc                 C   r   )zUReturns the column name.

        Returns:
            str: The column name.
        r   r   r*   r*   r+   get_column_name  r   zColumn.get_column_namec                 C   r   )zWReturns the column label.

        Returns:
            str: The column label.
        r   r   r*   r*   r+   get_column_label  r   zColumn.get_column_labelc                 C   r   )zaReturns the column proto type.

        Returns:
            int: The column proto type.
        )r   r   r*   r*   r+   get_proto_type  r   zColumn.get_proto_typec                 C   r   )zUReturns the column type.

        Returns:
            int: The column type.
        r   r   r*   r*   r+   get_type  r   zColumn.get_typec                 C   r   )zYReturns the column length.

        Returns:
            int: The column length.
        r   r   r*   r*   r+   
get_length  r   zColumn.get_lengthc                 C   r   )zoReturns the column fractional digits.

        Returns:
            int: The column fractional digits.
        r   r   r*   r*   r+   get_fractional_digits  r   zColumn.get_fractional_digitsc                 C   r   )z[Returns the collation name.

        Returns:
            str: The collation name.
        r   r   r*   r*   r+   get_collation_name  r   zColumn.get_collation_namec                 C   r   )zcReturns the character set name.

        Returns:
            str: The character set name.
        r  r   r*   r*   r+   get_character_set_name  r   zColumn.get_character_set_namec                 C   r   )zxReturns `True` if is a number signed.

        Returns:
            bool: Returns `True` if is a number signed.
        )r   r   r*   r*   r+   is_number_signed  r   zColumn.is_number_signedc                 C   r   )zfReturns `True` if is padded.

        Returns:
            bool: Returns `True` if is padded.
        )r   r   r*   r*   r+   	is_padded  r   zColumn.is_paddedc                 C   r   )zdReturns `True` if is bytes.

        Returns:
            bool: Returns `True` if is bytes.
        )r   r   r*   r*   r+   is_bytes  r   zColumn.is_bytes)NNNNNNNNNNN)$r`   ra   rb   __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                   @   s0   e Zd ZdZdd Zdd Zeddd Zd	S )
RowzRepresents 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 r   )_fields
_resultset)r   rsfieldsr*   r*   r+   r     s   
zRow.__init__c                 C   sb   t |tr| j|n|}|dkrt |trtd||t| jks(|dk r,t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rtd|t| j| S )zReturns 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)r`   ra   rb   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 )
BaseResultzProvides base functionality for result objects.

    Args:
        connection (mysqlx.connection.Connection): The Connection object.
    c                 C   sJ   || _ d| _d| _d| _g | _g | _|d u rd | _d S |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   r   )zReturns the number of affected items for the last operation.

        Returns:
            int: The number of affected items.
        r$  r   r*   r*   r+   get_affected_items_count,  r   z#BaseResult.get_affected_items_countc                 C   r   )zZReturns the warnings.

        Returns:
            `list`: The list of warnings.
        )r'  r   r*   r*   r+   get_warnings4  r   zBaseResult.get_warningsc                 C   
   t | jS )zcReturns the number of warnings.

        Returns:
            int: The number of warnings.
        )r   r'  r   r*   r*   r+   get_warnings_count<     
zBaseResult.get_warnings_countc                 C   
   || _ dS )z)Sets if resultset fetch is done.
        N)r#  r   r   r*   r*   r+   
set_closedD     
zBaseResult.set_closedc                 C   s   | j |||d dS )zAppend a warning.

        Args:
            level (int): The warning level.
            code (int): The warning code.
            msg (str): The warning message.
        )levelcodemsgN)r'  rH   )r   r6  r7  r8  r*   r*   r+   append_warningI  s   zBaseResult.append_warningc                 C   r2  )z Sets the generated ids.
        Nr&  )r   Zgenerated_idsr*   r*   r+   set_generated_idsS  r5  zBaseResult.set_generated_idsc                 C   r2  )z&Sets the generated insert id.
        Nr%  )r   Zgenerated_idr*   r*   r+   set_generated_insert_idX  r5  z"BaseResult.set_generated_insert_idc                 C   r2  )z*Sets the number of rows affected.
        Nr,  )r   totalr*   r*   r+   set_rows_affected]  r5  zBaseResult.set_rows_affectedN)r`   ra   rb   r  r   r-  r.  r0  r4  r9  r;  r=  r?  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                    s2   t t| | || _|d ur| j|  d S d S r   )superr@  r   _idsr"  Zclose_result)r   r+  idsr   r*   r+   r   k  s
   zResult.__init__c                 C   r   )zjReturns the last insert id auto generated.

        Returns:
            int: The last insert id.
        r<  r   r*   r*   r+   get_autoincrement_valuer  r   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   )rB  r   r   r*   r*   r+   get_document_idz  s   
zResult.get_document_idc                 C   r   )zIReturns the generated insert id.

        .. deprecated:: 8.0.12
        r<  r   r*   r*   r+   get_generated_insert_id  r   zResult.get_generated_insert_idc                 C   r   )z#Returns the generated ids.
        r:  r   r*   r*   r+   get_generated_ids     zResult.get_generated_ids)NN)r`   ra   rb   r  r   rE  r   rF  rG  rH  __classcell__r*   r*   rD  r+   r@  c  s    
	
r@  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 )BufferingResultzProvides 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!  )
rA  rK  r   _columns	_has_data_has_more_results_items
_page_size	_position_init_resultr*  rD  r*   r+   r     s   zBufferingResult.__init__c                 C   s
   | j | S r   )rO  )r   r  r*   r*   r+   r    s   
zBufferingResult.__getitem__c                 C   r/  )zint: The total of items.)r   rO  r   r*   r*   r+   count  r5  zBufferingResult.countc                 C   sX   | j | | _t| jdkrdnd| _g | _d| _d| _| j | jr'|  dS d dS )zInitialize the result.r   TFrp   r-   N)	r"  Zget_column_metadatarL  r   Z_has_more_datarO  rP  rQ  Zset_active_resultr   r*   r*   r+   rR    s   zBufferingResult._init_resultc                 C   sr   | j | }|du rdS dgt|d  }|s4tt|d D ]}| j| }t| |d | ||< qt| |S )zRead item.

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

        Returns:
            :class:`mysqlx.Row`: A `Row` object.
        Nfield)r"  Zread_rowr   r   rL  r,   r	  r  )r   dumpingrowrB   r   colr*   r*   r+   
_read_item  s   	



zBufferingResult._read_itemc                 C   sN   | j rdS d}t| jD ]}| d}|du r |S | j| |d7 }q|S )zSReads the page items.

        Returns:
            int: Total items read.
        Fr   Nr   )r#  r   rP  rX  rO  rH   )r   rS  r   rB   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-   )rL  r  )r   Zcol_namer  rW  r*   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#  rX  r   r*   r*   r+   	fetch_one  s   
zBufferingResult.fetch_onec                 C   s   	 |   s		 | jS q)zFetch all items.

        Returns:
            `list`: The list of items of :class:`mysqlx.DbDoc` or
                    :class:`mysqlx.Row`.
        )rY  rO  r   r*   r*   r+   	fetch_all  s
   zBufferingResult.fetch_allc                 C   r2  )zdSets if result has data.

        Args:
            flag (bool): `True` if result has data.
        NrM  r3  r*   r*   r+   set_has_data  r1  zBufferingResult.set_has_datac                 C   r2  )zfSets if has more results.

        Args:
            flag (bool): `True` if has more results.
        N)rN  r3  r*   r*   r+   set_has_more_results  r1  z$BufferingResult.set_has_more_results)r`   ra   rb   r  r   r  r   rS  rR  rX  rY  r  rZ  r[  r]  r^  rJ  r*   r*   rD  r+   rK    s    


rK  c                       s4   e Zd ZdZ fddZedd Zdd Z  ZS )	RowResultzAllows traversing the Row objects returned by a Table.select operation.

    Args:
        connection (mysqlx.connection.Connection): The Connection object.
    c                       t t| | d S r   )rA  r_  r   r*  rD  r*   r+   r        zRowResult.__init__c                 C   r   )z`list`: The list of columns.rL  r   r*   r*   r+   columns  rI  zRowResult.columnsc                 C   r   )zReturns the list of columns.

        Returns:
            `list`: The list of columns.

        .. versionadded:: 8.0.12
        rb  r   r*   r*   r+   get_columns     zRowResult.get_columns)	r`   ra   rb   r  r   r   rc  rd  rJ  r*   r*   rD  r+   r_    s    
r_  c                       s8   e Zd ZdZ fddZdd Zdd Zdd	 Z  ZS )
	SqlResultzRepresents a result from a SQL statement.

    Args:
        connection (mysqlx.connection.Connection): The Connection object.
    c                    r`  r   )rA  rf  r   r*  rD  r*   r+   r   /  ra  zSqlResult.__init__c                 C   r   )zReturns the identifier for the last record inserted.

        Returns:
            str: The identifier of the last record inserted.
        r<  r   r*   r*   r+   rE  2  r   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#  rN  rR  r   r*   r*   r+   next_result:  s
   zSqlResult.next_resultc                 C   r   )zReturns True if result has data.

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

        .. versionadded:: 8.0.12
        r\  r   r*   r*   r+   has_dataF  re  zSqlResult.has_data)	r`   ra   rb   r  r   rE  rg  rh  rJ  r*   r*   rD  r+   rf  )  s    rf  c                       s,   e Zd ZdZ fddZ fddZ  ZS )	DocResultzAllows traversing the DbDoc objects returned by a Collection.find
    operation.

    Args:
        connection (mysqlx.connection.Connection): The Connection object.
    c                    r`  r   )rA  ri  r   r*  rD  r*   r+   r   W  ra  zDocResult.__init__c                    s,   t t| |}|du rdS tt|d S )zRead item.

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

        Returns:
            :class:`mysqlx.DbDoc`: A `DbDoc` object.
        Nr   )rA  ri  rX  r   r   )r   rU  rV  rD  r*   r+   rX  Z  s   	zDocResult._read_item)r`   ra   rb   r  r   rX  rJ  r*   r*   rD  r+   ri  P  s    ri  ),r  rN   r3   r"   r   r   Zdbdocr   Zcharsetsr   helpersr   r   r,   r   r   r   rD   r   r   r   r    r   r   objectr^   rd   r   r   r   r   r   r   r   r   r   r   r  r   r@  rK  r_  rf  ri  r*   r*   r*   r+   <module>   sP   $ L'  [)K/~'