U
    ecx                     @   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ZG d d! d!ZG d"d# d#ZG d$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 d0d1 d1eZ!G d2d3 d3eZ"G d4d5 d5Z#G d6d7 d7Z$G d8d9 d9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   )MYSQL_CHARACTER_SETS)DbDoc)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k
r } z,t	j
|  t	j
|d  W Y d S d }~X Y nX d S )Nr   hex)lenget_type
ColumnTypeSTRINGr   ColumnProtoTypeconverter_mapget_proto_typeKeyErrorsysstderrwriteencode)columnpayloaderr r   1/tmp/pip-unpacked-wheel-ix8dg7li/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ttd| d S )N   z<fr   r   AssertionErrorstructunpackr   r   r   r   float_from_protobuf?   s    r$   c                 C   s    t | dksttd| d S )N   z<dr   r    r   r   r   r   double_from_protobufD   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_streamI   s     
r4   c                 C   s$   t | \}} t| dkr td|S )Nr   Payload too longr4   r   r*   r   r0   r   r   r   varint_from_protobuf_   s    r8   c                 C   sL   t | \}} t| dkr td|d@ r@| }|d? }|dO }n|d? }|S )Nr   r5   r   l            r6   r7   r   r   r   varsint_from_protobufg   s    
r9   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 qW q tk
r   Y qY qX q|S )Nr   r   zInvalid Set encoding)r4   r   r*   append)r   Zset_pbZ	field_lenr   r   r   set_from_protobufw   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rd} qn|dkrd} qntd	q:|dkrd}|dkst qq:|dkrd}|dkst qq:td
| q:t||| fS )Nr   r      r      
         zInvalid BCDzInvalid BCD: )r+   r,   r-   r:   r*   r!   decimalDecimal)r   digitssignZscaler2   r3   Zhigh_bcdZlow_bcdr   r   r   decimal_from_protobuf   s:    "


rE   c                 C   s   d}d}d}d}t | \}} t | \}} t | \}} z4t | \}} t | \}} t | \}} t | \}} W n tk
r|   Y nX t|||||||S )Nr   )r4   r*   r   )r   hourminutessecondsusecondsyearmonthdayr   r   r   datetime_from_protobuf   s    rM   c                 C   s   d}d}d}d}| d dk}| dd  } z4t | \}} t | \}} t | \}} t | \}} W n tk
rp   Y nX |r|r|d9 }n(|r|d9 }n|r|d9 }n|r|d9 }t||||dS )Nr   r   r	   )hoursrG   rH   microseconds)r4   r*   r   )r   rF   rG   rH   rI   negater   r   r   time_from_protobuf   s8    


   rQ   c                   @   s   e Zd ZdZdS )
Collations!   N)__name__
__module____qualname__ZUTF8_GENERAL_CIr   r   r   r   rR      s   rR   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?   r@      r=                                                       rS   "   #   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 rq   )getattrupper)rt   rv   r   r   r   from_string  s    zColumnType.from_stringc                 C   s   || j | jfkS rq   )CHARVARCHARrt   col_typer   r   r   is_char  s    zColumnType.is_charc                 C   s   || j | jfkS rq   )BINARY	VARBINARYr~   r   r   r   	is_binary!  s    zColumnType.is_binaryc                 C   s   || j | j| j| jfkS rq   )TEXTTINYTEXT
MEDIUMTEXTLONGTEXTr~   r   r   r   is_text(  s    zColumnType.is_textc                 C   s   || j | j| j| j| jfkS rq   )REALDOUBLEFLOATDECIMALNUMERICr~   r   r   r   is_decimals1  s    zColumnType.is_decimalsc                 C   s    || j | j| j| j| j| jfkS rq   )BITTINYINTSMALLINT	MEDIUMINTINTBIGINTr~   r   r   r   
is_numeric;  s    zColumnType.is_numericc                 C   s   || j | jfkS rq   )SETENUMr~   r   r   r   is_finite_setF  s    zColumnType.is_finite_setN)/rT   rU   rV   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   classmethodrx   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   rW   rY   rZ   r)   r>   r?   r=   r^   r_   r`   N)rT   rU   rV   SINTUINTr   r   r   r   r   r   r   r   r   r9   r8   r   rM   rQ   r$   r&   r;   rE   r   r   r   r   r   r   N  sD              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__rs   
startswithr+   r,   _value)selfrw   rv   valr   r   r   __init__k  s    


zFlags.__init__c              	   C   s   d}g }| j }tddD ]d}|dK }||@ }|rz|| j|  W q tk
rz   tj| j  tj| jj	  Y qX qd
|S )Nr   r   ?   ,)r   ranger:   r   r   r   r   r   r   r   join)r   maskZ
flag_namesrw   _flagr   r   r   __str__v  s    zFlags.__str__c                 C   s   | j S rq   r   r   r   r   r   rw     s    zFlags.valuec                 C   s
   || _ d S rq   r   )r   r   r   r   r   rw     s    N)rT   rU   rV   r   r   propertyrw   setterr   r   r   r   r   j  s   
r   c                   @   s    e Zd ZdZdZdZdZdZdS )ColumnFlagsr^   rn   @   r'      N)rT   rU   rV   ZNOT_NULLZPRIMARY_KEYZ
UNIQUE_KEYZMULTIPLE_KEYZAUTO_INCREMENTr   r   r   r   r     s
   r   c                   @   s   e Zd ZdZdS )DatetimeColumnFlagsr   N)rT   rU   rV   r   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZdS )UIntColumnFlagsr   N)rT   rU   rV   ZZEROFILLr   r   r   r   r     s   r   c                   @   s   e Zd ZdZdS )DoubleColumnFlagsr   NrT   rU   rV   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)rT   rU   rV   Z	RIGHT_PADr   r   r   r   r     s   r   c                   @   s   e Zd ZdZdZdZdS )BytesContentTyper   rW   rX   N)rT   rU   rV   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rtd| j
 t| j
 }|d | _|d | _d| jkpd| jk| _|   | jtjtjtjtjtjfk| _d S )NFr   zNo mapping found for collation 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*   	_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   ra   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   rZ   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.rX   rY   r%   r>   r   N)
r   r   r   r   r   r   r   r   r   r   r   r   r   r   _map_uint_type1  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rtj| _| j	t
j@ dk| _n| j tjkrtj| _| j	t
j@ dk| _n| j tjkr|   n| j tjkrt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 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   ?  s4    





zColumn._map_typec                 C   s   | j S )z@str: The schema name.

        .. versionadded:: 8.0.12
        r   r   r   r   r   schema_name]  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_namee  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_labelm  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_nameu  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_label}  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     s    zColumn.lengthc                 C   s   | j S )zMint: The column fractional digits.

        .. versionadded:: 8.0.12
        r   r   r   r   r   r     s    zColumn.fractional_digitsc                 C   s   | j S )zCstr: The collation name.

        .. versionadded:: 8.0.12
        r   r   r   r   r   collation_name  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)$rT   rU   rV   __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     sj              
6










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 )RowzRepresents a row element returned from a SELECT query.

    Args:
        resultset (mysqlx.SqlResult or mysqlx.RowResult): The result set.
        fields (`list`): The list of fields.
    c                 C   s   || _ || _d S rq   )_fields
_resultset)r   Z	resultsetfieldsr   r   r   r   &  s    zRow.__init__c                 C   s
   t | jS rq   )reprr
  r   r   r   r   __repr__*  s    zRow.__repr__c                 C   sd   t |tr| j|n|}|dkr<t |tr<td| d|t| jksR|dk rZtd| j| S )z\Returns the value of a column by name or index.

        .. versionchanged:: 8.0.12
        r	   Column name '' not foundr   zIndex out of range)r+   r   r  index_ofr*   r   r
  
IndexError)r   index	int_indexr   r   r   __getitem__-  s    zRow.__getitem__8.0.12c                 C   sH   | j |}|t| jkr"td|dkr:td| 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_string9  s    	zRow.get_stringN)	rT   rU   rV   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 )
BaseResultzProvides base functionality for result objects.

    Args:
        connection (mysqlx.connection.Connection): The Connection object.
    c                 C   sH   || _ d| _d| _d| _g | _g | _|d k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   Q  s    zBaseResult.__init__c                 C   s   | j S )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_  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_warningsg  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_counto  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_closedw  s    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  r:   )r   r*  r+  r,  r   r   r   append_warning{  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_id  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_affected  s    zBaseResult.set_rows_affectedN)rT   rU   rV   r  r   r%  r&  r'  r)  r-  r/  r1  r3  r   r   r   r   r  J  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  | || _|d k	r&| j|  d S rq   )superr   _idsr  Zclose_result)r   r#  idsr   r   r   r     s    zResult.__init__c                 C   s   | j S )zjReturns the last insert id auto generated.

        Returns:
            int: The last insert id.
        r0  r   r   r   r   get_autoincrement_value  s    zResult.get_autoincrement_valuer  c                 C   s&   | j dk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   )r6  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
        r0  r   r   r   r   get_generated_insert_id  s    zResult.get_generated_insert_idc                 C   s   | j S )zReturns the generated ids.r.  r   r   r   r   get_generated_ids  s    zResult.get_generated_ids)NN)rT   rU   rV   r  r   r9  r   r:  r;  r<  __classcell__r   r   r8  r   r4    s   
	
r4  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  | g | _d| _d| _g | _d| _d| _|   d S r  )	r5  r   _columns	_has_data_has_more_results_items
_page_size	_position_init_resultr"  r8  r   r   r     s    zBufferingResult.__init__c                 C   s
   | j | S rq   )rB  )r   r  r   r   r   r    s    zBufferingResult.__getitem__c                 C   s
   t | jS )zint: The total of items.)r   rB  r   r   r   r   count  s    zBufferingResult.countc                 C   sJ   | j | | _t| jdk| _g | _d| _d| _| j | jr@| nd dS )zInitialize the result.r   rb   r	   N)	r  Zget_column_metadatar?  r   Z_has_more_datarB  rC  rD  Zset_active_resultr   r   r   r   rE    s    zBufferingResult._init_resultc                 C   sn   | j | }|dkrdS dgt|d  }|sdt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   r?  r   r	  )r   dumpingrowr2   rv   r   r   r   r   
_read_item  s    	
zBufferingResult._read_itemc                 C   sL   | j r
dS d}t| jD ].}| d}|dkr2 qH| j| |d7 }q|S )zSReads the page items.

        Returns:
            int: Total items read.
        Fr   Nr   )r  r   rC  rJ  rB  r:   )r   rF  r   r2   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	   )r?  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  rJ  r   r   r   r   	fetch_one  s    zBufferingResult.fetch_onec                 C   s   |   s qq | jS )zFetch all items.

        Returns:
            `list`: The list of items of :class:`mysqlx.DbDoc` or
                    :class:`mysqlx.Row`.
        )rK  rB  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r@  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)rA  r(  r   r   r   set_has_more_results5  s    z$BufferingResult.set_has_more_results)rT   rU   rV   r  r   r  r   rF  rE  rJ  rK  r  rM  rN  rP  rQ  r=  r   r   r8  r   r>    s   

	r>  c                   @   s$   e Zd ZdZedd Zdd ZdS )	RowResultzAllows traversing the Row objects returned by a Table.select operation.

    Args:
        connection (mysqlx.connection.Connection): The Connection object.
    c                 C   s   | j S )z`list`: The list of columns.r?  r   r   r   r   columnsE  s    zRowResult.columnsc                 C   s   | j S )zReturns the list of columns.

        Returns:
            `list`: The list of columns.

        .. versionadded:: 8.0.12
        rS  r   r   r   r   get_columnsJ  s    zRowResult.get_columnsN)rT   rU   rV   r  r   rT  rU  r   r   r   r   rR  >  s   
rR  c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )		SqlResultzRepresents a result from a SQL statement.

    Args:
        connection (mysqlx.connection.Connection): The Connection object.
    c                 C   s   | j S )zReturns the identifier for the last record inserted.

        Returns:
            str: The identifier of the last record inserted.
        r0  r   r   r   r   r9  \  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  rA  rE  r   r   r   r   next_resultd  s
    zSqlResult.next_resultc                 C   s   | j S )zReturns True if result has data.

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

        .. versionadded:: 8.0.12
        rO  r   r   r   r   has_datap  s    zSqlResult.has_dataN)rT   rU   rV   r  r9  rW  rX  r   r   r   r   rV  U  s   rV  c                       s    e Zd Z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                    s(   t  |}|dkrdS tt|d S )zRead item.

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

        Returns:
            :class:`mysqlx.DbDoc`: A `DbDoc` object.
        Nr   )r5  rJ  r   r   )r   rH  rI  r8  r   r   rJ    s    	zDocResult._read_item)rT   rU   rV   r  rJ  r=  r   r   r8  r   rY  {  s   rY  )+r  rA   r"   r   r   r   Zcharsetsr   Zdbdocr   Zhelpersr   r   r   r   r$   r&   r4   r8   r9   r;   rE   rM   rQ   rR   r   r   r   r   r   r   r   r   r   r   r   r	  r  r4  r>  rR  rV  rY  r   r   r   r   <module>   sN   $!d'	  j,H/}&