o
    h                     @  s,  d Z ddlm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	m
Z
mZmZmZmZmZmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZmZ dSddZdTddZdUddZdUddZdVddZdWddZ dWd d!Z!dXd#d$Z"dYd&d'Z#dZd)d*Z$d[d,d-Z%G d.d/ d/Z&G d0d1 d1Z'G d2d3 d3Z(G d4d5 d5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*Z0G dDd dZ1G dEdF dFZ2G dGdH dHZ3G dIdJ dJe3Z4G dKdL dLe3Z5G dMdN dNe5Z6G dOdP dPe6Z7G dQdR dRe5Z8dS )\z%Implementation of the Result classes.    )annotationsN)datetime	timedelta)AnyCallableDictListOptionalSequenceTupleUnion   )MYSQL_CHARACTER_SETS)DbDoc)decode_from_bytes
deprecated)ConnectionType
FieldTypescolumnColumnpayloadbytesreturnr   c              
   C  s   t |dkrd S |  tjkrt|d d S z
tj|   |W S  tyE } zt	j
|  t	j
|d  W Y d }~d S d }~ww )Nr   hex)lenget_type
ColumnTypeSTRINGr   ColumnProtoTypeconverter_mapget_proto_typeKeyErrorsysstderrwriteencode)r   r   err r(   H/var/www/html/scripts/venv/lib/python3.10/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,   floatc                 C      t | dksJ td| d S )N   z<fr   r   structunpackr+   r(   r(   r)   float_from_protobufC      r3   c                 C  r.   )N   z<dr   r0   r+   r(   r(   r)   double_from_protobufH   r4   r6   Tuple[int, bytes]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chareoscur_bitsr(   r(   r)   varint_from_protobuf_streamM   s    
rG   r=   c                 C  s$   t | \}} t| dkrtd|S )Nr   Payload too longrG   r   r;   r   rA   r(   r(   r)   varint_from_protobufc   s   rK   c                 C  sN   t | \}} t| dkrtd|d@ r!| }|d? }|dO }|S |d? }|S )Nr   rH   r   l            rI   rJ   r(   r(   r)   varsint_from_protobufk   s   rL   List[bytes]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)rG   r   r;   append)r   set_pb	field_lenr(   r(   r)   set_from_protobuf{   s&    rQ   decimal.Decimalc                 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      r/      
         zInvalid BCDzInvalid BCD: )r<   r=   r>   rN   r;   decimalDecimal)r   digitssignscalerC   rD   high_bcdlow_bcdr(   r(   r)   decimal_from_protobuf   s:   "
r_   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   )rG   r;   r   )r   hourminutessecondsusecondsyearmonthdayr(   r(   r)   datetime_from_protobuf   s    rg   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   )hoursra   rb   microseconds)rG   r;   r   )r   r`   ra   rb   rc   negater(   r(   r)   time_from_protobuf   s4   


rk   c                   @     e Zd ZdZdS )
Collations!   N)__name__
__module____qualname__UTF8_GENERAL_CIr(   r(   r(   r)   rm          rm   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(d)Z'e&d?d,d-Z(e&d@d1d2Z)e&d@d3d4Z*e&d@d5d6Z+e&d@d7d8Z,e&d@d9d:Z-e&d@d;d<Z.d=S )Ar   r         r/         r:   r5   	   rU      rV   rW      rT                                                       rn   "   #   needler   r   Optional[str]c                 C  s*   t |  D ]\}}||kr|  S qd S N)varsitems)clsr   keyvaluer(   r(   r)   	to_string  s
   zColumnType.to_stringr   strc                 C  s   t | | d S r   )getattrupper)r   r   r(   r(   r)   from_string  s   zColumnType.from_stringcol_typer=   boolc                 C     || j | jfv S r   )CHARVARCHARr   r   r(   r(   r)   is_char     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   )REALDOUBLEFLOATDECIMALNUMERICr   r(   r(   r)   is_decimals5  s   zColumnType.is_decimalsc                 C  s    || j | j| j| j| j| jfv S r   )BITTINYINTSMALLINT	MEDIUMINTINTBIGINTr   r(   r(   r)   
is_numeric?  s   zColumnType.is_numericc                 C  r   r   )SETENUMr   r(   r(   r)   is_finite_setJ  r   zColumnType.is_finite_setN)r   r   r   r   )r   r   r   r   )r   r=   r   r   )/ro   rp   rq   r   r   r   r   r   r   r   r   r   r   r   JSONr   BYTESTIMEDATEDATETIME	TIMESTAMPr   r   GEOMETRYXMLYEARr   r   r   r   TINYBLOBBLOB
MEDIUMBLOBLONGBLOBr   r   r   r   classmethodr   r   r   r   r   r   r   r   r(   r(   r(   r)   r      sh    	
r   c                   @  sr   e Zd ZU 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ed< dS )r   r   rt   rv   rw   r:   rU   rV   rT   r{   r|   r}   z!Dict[int, Callable[[bytes], Any]]r    N)ro   rp   rq   SINTUINTr   r   r   r   r   r   r   r   r   rL   rK   r,   rg   rk   r3   r6   rQ   r_   r    __annotations__r(   r(   r(   r)   r   R  s0   
 r   c                   @  s>   e Zd ZdddZddd	Zedd
dZejdddZdS )Flagsr   r=   r   Nonec                 C  sV   i | _ i | _| jj D ]\}}|drqt|tr%|| j |< || j|< q|| _d S )N__)	_allowed_flags_flag_names	__class____dict__r   
startswithr<   r=   _value)selfr   r   valr(   r(   r)   __init__o  s   




zFlags.__init__r   c              	   C  s   d}g }| j }tddD ]1}|dK }||@ }|r=z
|| j|  W q ty<   tj| j  tj| jj	  Y qw qd
|S )Nr   r   ?   ,)r   rangerN   r   r"   r#   r$   r%   r   r   join)r   mask
flag_namesr   _flagr(   r(   r)   __str__z  s   
zFlags.__str__c                 C     | j S r   r   r   r(   r(   r)   r        zFlags.valuer   c                 C  s
   || _ d S r   r   )r   r   r(   r(   r)   r        
N)r   r=   r   r   r   r   r   r=   )r   r=   r   r   )ro   rp   rq   r   r   propertyr   setterr(   r(   r(   r)   r   n  s    

r   c                   @  s    e Zd ZdZdZdZdZdZdS )ColumnFlagsr{   r   @   r8      N)ro   rp   rq   NOT_NULLPRIMARY_KEY
UNIQUE_KEYMULTIPLE_KEYAUTO_INCREMENTr(   r(   r(   r)   r     s    r   c                   @  rl   )DatetimeColumnFlagsr   N)ro   rp   rq   r   r(   r(   r(   r)   r     rs   r   c                   @  rl   )UIntColumnFlagsr   N)ro   rp   rq   ZEROFILLr(   r(   r(   r)   r     rs   r   c                   @  rl   )DoubleColumnFlagsr   Nro   rp   rq   UNSIGNEDr(   r(   r(   r)   r     rs   r   c                   @  rl   )FloatColumnFlagsr   Nr   r(   r(   r(   r)   r     rs   r   c                   @  rl   )BytesColumnFlagsr   N)ro   rp   rq   	RIGHT_PADr(   r(   r(   r)   r     rs   r   c                   @  s   e Zd ZdZdZdZdS )BytesContentTyper   rt   ru   N)ro   rp   rq   r   r   r   r(   r(   r(   r)   r     s    r   c                   @  s  e Zd ZdZ											dUdVddZdWddZdXddZdXddZdXddZdXdd Z	dXd!d"Z
edWd#d$ZedWd%d&ZedWd'd(ZedWd)d*ZedWd+d,ZedYd-d.ZedYd/d0ZedYd1d2ZedWd3d4ZedWd5d6ZdWd7d8ZdWd9d:ZdWd;d<ZdWd=d>ZdWd?d@ZdYdAdBZdYdCdDZdYdEdFZdYdGdHZdWdIdJZdWdKdLZ dZdNdOZ!d[dQdRZ"dZdSdTZ#dS )\r   a_  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
    Nr   r=   catalogr   schematableoriginal_tablenameoriginal_namelengthOptional[int]	collationfractional_digitsflagscontent_typer   r   c                 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 r   binary_bin)r   _schema_name_original_name_table_original_table_proto_type	_col_type_catalog_length
_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   r   r   r   r   r   r  r  r  r  r  r  infor(   r(   r)   r     sH   








zColumn.__init__r   c                 C  s   t | j| j| jt | jdS )N)r   r   r   r  )r   r  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   r   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.rU   r   r~   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| _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.r/   rw   rx   ry   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| _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.ru   rv   r5   rU   r   N)
r  r   r   r  r   r   r   r   r  r  r   r(   r(   r)   _map_uint_type5  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 N)r  r   r   r"  r   r#  r   r   r  r  r   r   _is_number_signedr   r   r   r   r   r   r!  r   r   r   r;   r   r(   r(   r)   r  C  s4   zColumn._map_typec                 C  r   )z@str: The schema name.

        .. versionadded:: 8.0.12
        r
  r   r(   r(   r)   schema_namea     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_namei     zColumn.table_namec                 C  r(  )z@str: The table label.

        .. versionadded:: 8.0.12
        r  r  r   r(   r(   r)   table_labelq  r+  zColumn.table_labelc                 C  r(  )z@str: The column name.

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

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

        .. versionadded:: 8.0.12
        r  r   r(   r(   r)   type  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    r'  zColumn.fractional_digitsc                 C  r   )zCstr: The collation name.

        .. versionadded:: 8.0.12
        r  r   r(   r(   r)   collation_name  r'  zColumn.collation_namec                 C  r   )zGstr: The character set name.

        .. versionadded:: 8.0.12
        r  r   r(   r(   r)   character_set_name  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.
        r0  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)   r!     r'  zColumn.get_proto_typec                 C  r   )zUReturns the column type.

        Returns:
            int: The column type.
        r2  r   r(   r(   r)   r     r'  zColumn.get_typec                 C  r   )zYReturns the column length.

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

        Returns:
            int: The column fractional digits.
        r5  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.
        r6  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.
        r8  r   r(   r(   r)   get_character_set_name  r'  zColumn.get_character_set_namer   c                 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_signedUnion[bool, int]c                 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   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   rD  )$ro   rp   rq   __doc__r   r   r   r!  r"  r#  r  r   r&  r*  r-  r/  r1  r3  r  r  r7  r9  r:  r;  r<  r=  r>  r!   r   r?  r@  rA  rB  rC  rE  rF  r(   r(   r(   r)   r     sl    
6


















c                   @  s@   e Zd ZdZddd	ZdddZdddZed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.
    	resultset!Union[BufferingResult, RowResult]fieldsSequence[FieldTypes]r   r   c                 C  s   || _ || _d S r   )_fields
_resultset)r   rL  rN  r(   r(   r)   r   *  s   
zRow.__init__r   c                 C  
   t | jS r   )reprrP  r   r(   r(   r)   __repr__0     
zRow.__repr__indexUnion[int, str]r   c                 C  sd   t |tr| j|n|}|dkrt |trtd| 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 '' not foundr   zIndex out of range)r<   r   rQ  index_ofr;   r   rP  
IndexError)r   rV  	int_indexr(   r(   r)   __getitem__3  s   
zRow.__getitem__8.0.12	str_indexc                 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   rX  rY  )rQ  rZ  r   rP  r[  r;   r   )r   r_  r\  r(   r(   r)   
get_string?  s   	zRow.get_stringN)rL  rM  rN  rO  r   r   r   )rV  rW  r   r   )r_  r   r   r   )	ro   rp   rq   rJ  r   rT  r]  r   r`  r(   r(   r(   r)   rK  "  s    


rK  c                   @  sj   e Zd ZdZd%ddZd&d	d
Zd'ddZd&ddZd(ddZd)ddZ	d*ddZ
d+dd Zd,d"d#Zd$S )-
BaseResultzProvides base functionality for result objects.

    Args:
        connection (mysqlx.connection.Connection): The Connection object.
    
connectionr   r   r   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protocolfetch_active_resultr   rb  r(   r(   r)   r   W  s   
zBaseResult.__init__r=   c                 C  r   )zReturns the number of affected items for the last operation.

        Returns:
            int: The number of affected items.
        rf  r   r(   r(   r)   get_affected_items_counte  r'  z#BaseResult.get_affected_items_count List[Dict[str, Union[int, str]]]c                 C  r   )zZReturns the warnings.

        Returns:
            `list`: The list of warnings.
        )ri  r   r(   r(   r)   get_warningsm  r'  zBaseResult.get_warningsc                 C  rR  )zcReturns the number of warnings.

        Returns:
            int: The number of warnings.
        )r   ri  r   r(   r(   r)   get_warnings_countu     
zBaseResult.get_warnings_countr   r   c                 C  
   || _ dS )z Sets if resultset fetch is done.N)re  r   r   r(   r(   r)   
set_closed}  r   zBaseResult.set_closedlevelcodemsgr   c                 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.
        )rw  rx  ry  N)ri  rN   )r   rw  rx  ry  r(   r(   r)   append_warning  s   zBaseResult.append_warninggenerated_ids	List[int]c                 C  rt  )zSets the generated ids.Nrh  )r   r{  r(   r(   r)   set_generated_ids  r   zBaseResult.set_generated_idsgenerated_idc                 C  rt  )zSets the generated insert id.Nrg  )r   r  r(   r(   r)   set_generated_insert_id  r   z"BaseResult.set_generated_insert_idtotalc                 C  rt  )z!Sets the number of rows affected.Nrn  )r   r  r(   r(   r)   set_rows_affected  r   zBaseResult.set_rows_affectedNrb  r   r   r   r   )r   rp  r   r   r   r   )rw  r=   rx  r=   ry  r   r   r   )r{  r|  r   r   )r  r=   r   r   )r  r=   r   r   )ro   rp   rq   rJ  r   ro  rq  rr  rv  rz  r~  r  r  r(   r(   r(   r)   ra  P  s    








ra  c                      s`   e Zd ZdZ		dd fd	d
ZdddZeddddZeddddZd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.
    Nrb  Optional[ConnectionType]idsOptional[List[int]]r   r   c                   s.   t  | || _|d ur| j|  d S d S r   )superr   _idsrd  close_result)r   rb  r  r   r(   r)   r     s
   zResult.__init__r=   c                 C  r   )zjReturns the last insert id auto generated.

        Returns:
            int: The last insert id.
        r  r   r(   r(   r)   get_autoincrement_value  r'  zResult.get_autoincrement_valuer^  r  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   )r  r   r   r(   r(   r)   get_document_id  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_idr|  c                 C  r   )zReturns the generated ids.r}  r   r(   r(   r)   get_generated_ids  r   zResult.get_generated_ids)NN)rb  r  r  r  r   r   r   )r   r  )r   r|  )ro   rp   rq   rJ  r   r  r   r  r  r  __classcell__r(   r(   r  r)   r    s    

	r  c                      s   e Zd ZdZd' fddZd(ddZed)ddZd*ddZd+ddZ	d,ddZ
d-ddZd.ddZd/d d!Zd0d#d$Zd0d%d&Z  ZS )1BufferingResultzProvides base functionality for buffering result objects.

    Args:
        connection (mysqlx.connection.Connection): The Connection object.
                                                   ids (`list`): A list of IDs.
    rb  r   r   r   c                   s<   t  | g | _d| _d| _g | _d| _d| _|   d S rc  )	r  r   _columns	_has_data_has_more_results_items
_page_size	_position_init_resultrm  r  r(   r)   r     s   zBufferingResult.__init__rV  r=   Union[Row, DbDoc]c                 C  s
   | j | S r   )r  )r   rV  r(   r(   r)   r]    rU  zBufferingResult.__getitem__c                 C  rR  )zint: The total of items.)r   r  r   r(   r(   r)   count  s   
zBufferingResult.countc                 C  sP   | j | | _t| jdk| _g | _d| _d| _| j | jr#|  dS d dS )zInitialize the result.r   r   r   N)	rd  get_column_metadatar  r   _has_more_datar  r  r  set_active_resultr   r(   r(   r)   r    s    zBufferingResult._init_resultdumpingr   Optional[Union[Row, DbDoc]]c                 C  sn   | j | }|du rdS dgt|d  }|s2t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)rd  read_rowr   r   r  r*   rK  )r   r  rowrC   r   r   r(   r(   r)   
_read_item  s   	

zBufferingResult._read_itemrD  c                 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   )re  r   r  r  r  rN   )r   r  r   rC   r(   r(   r)   _page_in_items  s   

zBufferingResult._page_in_itemscol_namer   c                 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   r  rV  colr(   r(   r)   rZ    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)re  r  r   r(   r(   r)   	fetch_one   s   
zBufferingResult.fetch_oneList[Union[Row, DbDoc]]c                 C  s   	 |   s		 | jS q)zFetch all items.

        Returns:
            `list`: The list of items of :class:`mysqlx.DbDoc` or
                    :class:`mysqlx.Row`.
        )r  r  r   r(   r(   r)   	fetch_all+  s
   zBufferingResult.fetch_allr   c                 C  rt  )zdSets if result has data.

        Args:
            flag (bool): `True` if result has data.
        Nr  ru  r(   r(   r)   set_has_data7  rs  zBufferingResult.set_has_datac                 C  rt  )zfSets if has more results.

        Args:
            flag (bool): `True` if has more results.
        N)r  ru  r(   r(   r)   set_has_more_results?  rs  z$BufferingResult.set_has_more_resultsr  )rV  r=   r   r  r   rG  )r  r   r   r  rI  )r  r   r   r=   )r   r  )r   r  r  )ro   rp   rq   rJ  r   r]  r   r  r  r  r  rZ  r  r  r  r  r  r(   r(   r  r)   r    s    



	




r  c                   @  s(   e Zd ZdZed	ddZd	ddZdS )
	RowResultzAllows traversing the Row objects returned by a Table.select operation.

    Args:
        connection (mysqlx.connection.Connection): The Connection object.
    r   List[Column]c                 C  r   )z`list`: The list of columns.r  r   r(   r(   r)   columnsO  s   zRowResult.columnsc                 C  r   )zReturns the list of columns.

        Returns:
            `list`: The list of columns.

        .. versionadded:: 8.0.12
        r  r   r(   r(   r)   get_columnsT     zRowResult.get_columnsN)r   r  )ro   rp   rq   rJ  r   r  r  r(   r(   r(   r)   r  H  s
    r  c                   @  s.   e Zd ZdZdddZdddZdd	d
ZdS )	SqlResultzRepresents a result from a SQL statement.

    Args:
        connection (mysqlx.connection.Connection): The Connection object.
    r   r=   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)   r  f  r'  z!SqlResult.get_autoincrement_valuer   c                 C  s   | j rdS d| _|   dS )zjProcess the next result.

        Returns:
            bool: Returns `True` if the fetch is done.
        FT)re  r  r  r   r(   r(   r)   next_resultn  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_dataz  r  zSqlResult.has_dataNr   rH  )ro   rp   rq   rJ  r  r  r  r(   r(   r(   r)   r  _  s
    

r  c                      s"   e Zd ZdZd 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.
    r  r   r   r   c                   s(   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   )r  r  r   r   )r   r  r  r  r(   r)   r    s   	zDocResult._read_item)r  r   r   r   )ro   rp   rq   rJ  r  r  r(   r(   r  r)   r    s    r  )r   r   r   r   r   r   )r   r   r   r   )r   r   r   r-   )r   r   r   r7   )r   r   r   r=   )r   r   r   rM   )r   r   r   rR   )r   r   r   r   )r   r   r   r   )9rJ  
__future__r   rX   r1   r#   r   r   typingr   r   r   r   r	   r
   r   r   charsetsr   dbdocr   helpersr   r   typesr   r   r*   r,   r3   r6   rG   rK   rL   rQ   r_   rg   rk   rm   r   r   r   r   r   r   r   r   r   r   r   rK  ra  r  r  r  r  r  r(   r(   r(   r)   <module>   sV   (









$
!d'	  j.H3}&