U
    r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k
r } z4t	j
d| t	j
d|d W Y d S d }~X Y nX 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   @/home/mars/bis/venv/lib/python3.8/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ttd| d S )N   z<fr   r   AssertionErrorstructunpackr   r   r   r   float_from_protobufA   s    r&   c                 C   s    t | dkst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     
r6   c                 C   s$   t | \}} t| dkr td|S )Nr   Payload too longr6   r   r,   r   r2   r   r   r   varint_from_protobufa   s    r:   c                 C   sL   t | \}} t| dkr td|d@ r@| }|d? }|dO }n|d? }|S )Nr   r7   r   l            r8   r9   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 qW q tk
r   Y qY qX q|S )Nr   r   zInvalid Set encoding)r6   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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: {0})	r-   r.   r/   r<   r,   r#   r   decimalDecimal)r   digitssignscaler4   r5   Zhigh_bcdZlow_bcdr   r   r   decimal_from_protobuf   s:    "


rH   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   )r6   r,   r   )r   hourminutessecondsusecondsyearmonthdayr   r   r   datetime_from_protobuf   s    rP   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	   )hoursrJ   rK   microseconds)r6   r,   r   )r   rI   rJ   rK   rL   negater   r   r   time_from_protobuf   s2    


rT   c                   @   s   e Zd ZdZdS )
Collations!   N)__name__
__module____qualname__ZUTF8_GENERAL_CIr   r   r   r   rU      s   rU   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@      rA   rB      r?                                                       rV   "   #   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 rt   )getattrupper)rw   ry   r   r   r   from_string  s    zColumnType.from_stringc                 C   s   || j | jfkS rt   )CHARVARCHARrw   col_typer   r   r   is_char  s    zColumnType.is_charc                 C   s   || j | jfkS rt   )BINARY	VARBINARYr   r   r   r   	is_binary  s    zColumnType.is_binaryc                 C   s   || j | j| j| jfkS rt   )TEXTTINYTEXT
MEDIUMTEXTLONGTEXTr   r   r   r   is_text#  s    zColumnType.is_textc                 C   s   || j | j| j| j| jfkS rt   )REALDOUBLEFLOATDECIMALNUMERICr   r   r   r   is_decimals(  s    zColumnType.is_decimalsc                 C   s    || j | j| j| j| j| jfkS rt   )BITTINYINTSMALLINT	MEDIUMINTINTBIGINTr   r   r   r   
is_numeric-  s     zColumnType.is_numericc                 C   s   || j | jfkS rt   )SETENUMr   r   r   r   is_finite_set2  s    zColumnType.is_finite_setN)/rW   rX   rY   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   classmethodr{   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   rZ   r\   r]   r+   r@   rA   r?   ra   rb   rc   N)rW   rX   rY   SINTUINTr   r   r   r   r   r   r   r   r   r;   r:   r    rP   rT   r&   r(   r=   rH   r   r   r   r   r   r   7  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__rv   
startswithr-   r.   _value)selfrz   ry   valr   r   r   __init__T  s    


zFlags.__init__c              	   C   s   d}g }| j }tddD ]l}|dK }||@ }|rz|| j|  W q tk
r   tjd| j tjd| j	j
 Y qX qd|S )Nr   r   ?   r
   ,)r   ranger<   r   r   r   r   r   r   r   r   join)r   maskZ
flag_namesrz   _flagr   r   r   __str___  s    zFlags.__str__c                 C   s   | j S rt   r   r   r   r   r   rz   q  s    zFlags.valuec                 C   s
   || _ d S rt   r   )r   r   r   r   r   rz   u  s    N)rW   rX   rY   r   r   propertyrz   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 )ColumnFlagsra   rq   @   r)      N)rW   rX   rY   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)rW   rX   rY   r   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZdS )UIntColumnFlagsr   N)rW   rX   rY   ZZEROFILLr   r   r   r   r     s   r   c                   @   s   e Zd ZdZdS )DoubleColumnFlagsr   NrW   rX   rY   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)rW   rX   rY   Z	RIGHT_PADr   r   r   r   r     s   r   c                   @   s   e Zd ZdZdZdZdS )BytesContentTyper   rZ   r[   N)rW   rX   rY   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 {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     sN    









   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   rd   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.r[   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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 {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)$rW   rX   rY   __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     sf                 
'!









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:
        rs (mysqlx.SqlResult or mysqlx.RowResult): The result set.
        fields (`list`): The list of fields.
    c                 C   s   || _ || _d S rt   )_fields
_resultset)r   rsfieldsr   r   r   r     s    zRow.__init__c                 C   s
   t | jS rt   )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 )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)	rW   rX   rY   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   (  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_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 )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_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)rW   rX   rY   r  r   r(  r)  r*  r,  r0  r2  r4  r6  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 k	r*| j|  d S rt   )superr7  r   _idsr  Zclose_result)r   r&  Z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.
        r3  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   )r9  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
        r3  r   r   r   r   get_generated_insert_id  s    zResult.get_generated_insert_idc                 C   s   | j S )z#Returns the generated ids.
        r1  r   r   r   r   get_generated_ids  s    zResult.get_generated_ids)NN)rW   rX   rY   r  r   r;  r   r<  r=  r>  __classcell__r   r   r:  r   r7  m  s   
	
r7  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  )
r8  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 rt   )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   TFre   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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   rA  r   r  )r   dumpingrowr4   ry   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   rE  rL  rD  r<   )r   rH  r   r4   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 )zFetch 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)rW   rX   rY   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 )	RowResultzAllows traversing the Row objects returned by a Table.select operation.

    Args:
        connection (mysqlx.connection.Connection): The Connection object.
    c                    s   t t| | d S rt   )r8  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 )zReturns 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)	rW   rX   rY   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 )
	SqlResultzRepresents a result from a SQL statement.

    Args:
        connection (mysqlx.connection.Connection): The Connection object.
    c                    s   t t| | d S rt   )r8  rX  r   r%  r:  r   r   r   8  s    zSqlResult.__init__c                 C   s   | j S )zReturns the identifier for the last record inserted.

        Returns:
            str: The identifier of the last record inserted.
        r3  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 )zReturns 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)	rW   rX   rY   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 )	DocResultzAllows traversing the DbDoc objects returned by a Collection.find
    operation.

    Args:
        connection (mysqlx.connection.Connection): The Connection object.
    c                    s   t t| | d S rt   )r8  r[  r   r%  r:  r   r   r   `  s    zDocResult.__init__c                    s,   t 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   )r8  r[  rL  r   r   )r   rJ  rK  r:  r   r   rL  c  s    	zDocResult._read_item)rW   rX   rY   r  r   rL  r?  r   r   r:  r   r[  Y  s   r[  ),r  rC   r$   r   r   r   Zdbdocr   Zcharsetsr   helpersr   r   r   r    r&   r(   r6   r:   r;   r=   rH   rP   rT   objectrU   r   r   r   r   r   r   r   r   r   r   r   r  r  r7  r@  rT  rX  r[  r   r   r   r   <module>   sN   $ L'  [,K/}'