3
S^y                 @   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 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/d0 d0eZ#G d1d2 d2eZ$G d3d4 d4eZ%G d5d6 d6eZ&G d7d8 d8eZ'G d9d: d:eZ(G d;d< d<e(Z)G d=d> d>e(Z*G d?d@ d@e*Z+G dAdB dBe+Z,G dCdD dDe*Z-dS )Ez%Implementation of the Result classes.    N)datetime	timedelta   )DbDoc)MYSQL_CHARACTER_SETS)STRING_TYPES)decode_from_bytes
deprecatedc             C   s   t |dkrd S yNt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|  |S  tk
r } z.tjjdj| tjjdj|jd d S d }~X nX d S )Nr   z{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*   ?/tmp/pip-build-8app2_gc/mysql-connector-python/mysqlx/result.pyfrom_protobuf,   s&    
r,   c             C   s   t | d d S )Nr   )r   )r(   r*   r*   r+   r   D   s    r   c             C   s   t | dksttjd| S )N   z<f)r   AssertionErrorstructunpack)r(   r*   r*   r+   r   I   s    r   c             C   s   t | dksttjd| S )N   z<d)r   r/   r0   r1   )r(   r*   r*   r+   r   N   s    r   c             C   s   t | dkrtdd}d}d}xn| D ]f}t|tr8|nt|}|d@ dk}|d@ }||K }||O }|r||| |d d  fS |d7 }|d7 }q&W 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_streamS   s     
r@   c             C   s$   t | \}} t| dkr td|S )Nr   zPayload too long)r@   r   r6   )r(   r<   r*   r*   r+   r   i   s    r   c             C   sL   t | \}} t| dkr td|d@ r@| }|d? }|dO }n|d? }|S )Nr   zPayload too longr   ?   l            )r@   r   r6   )r(   r<   r*   r*   r+   r   q   s    
r   c             C   s   g }xytt | \}} t| |k rLt| dkrD|dkrDt|dkrDg S td|j| d |  | |d  } t| dkrxP W q tk
r   P Y qX qW |S )Nr   r   zInvalid Set encoding)r@   r   r6   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  } x| D ]}t |trN|nt|}|d@ d? }|d@ }|dk r|j| |dk r|j| n(|dkrd}P n|dkrd}P ntd	q<|dkrd}|dkstP q<|dkrd}|dkstP q<td
j|q<W tj||| fS )Nr   r      r.      
         zInvalid BCDzInvalid BCD: {0})	r7   r8   r9   rB   r6   r/   r%   decimalDecimal)r(   digitssignZscaler>   r?   Zhigh_bcdZlow_bcdr*   r*   r+   r       s:    "


r    c             C   s   d}d}d}d}t | \}} t | \}} t | \}} y4t | \}} t | \}} t | \}} t | \}} W n tk
r|   Y nX t|||||||S )Nr   )r@   r6   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  } y4t | \}} 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   )hoursrM   rN   microsecondsr-   r-   r-   r-   )r@   r6   r   )r(   rL   rM   rN   rO   negater*   r*   r+   r      s0    


r   c               @   s   e Zd ZdZdS )
Collations!   N)__name__
__module____qualname__ZUTF8_GENERAL_CIr*   r*   r*   r+   rV      s   rV   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         r.         r5   r2   	   rE      rF   rG      rD                                                       rW   "   #   c             C   s*   x$t | j D ]\}}||kr|S qW d S )N)varsitems)clsZneedlekeyvaluer*   r*   r+   	to_string  s    zColumnType.to_stringc             C   s   t | |j d S )N)getattrupper)rx   ry   r*   r*   r+   from_string  s    zColumnType.from_stringc             C   s   || j | jfkS )N)CHARVARCHAR)rx   r'   r*   r*   r+   is_char#  s    zColumnType.is_charc             C   s   || j | jfkS )N)BINARY	VARBINARY)rx   r'   r*   r*   r+   	is_binary'  s    zColumnType.is_binaryc             C   s   || j | j| j| jfkS )N)TEXTTINYTEXT
MEDIUMTEXTLONGTEXT)rx   r'   r*   r*   r+   is_text+  s    zColumnType.is_textc             C   s   || j | j| j| j| jfkS )N)REALr   r   r   NUMERIC)rx   r'   r*   r*   r+   is_decimals0  s    zColumnType.is_decimalsc             C   s    || j | j| j| j| j| jfkS )N)r   TINYINTSMALLINT	MEDIUMINTINTBIGINT)rx   r'   r*   r*   r+   
is_numeric5  s    zColumnType.is_numericc             C   s   || j | jfkS )N)r   r   )rx   r'   r*   r*   r+   is_finite_set:  s    zColumnType.is_finite_setN)/rX   rY   rZ   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+   r[      sV   r[   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   r\   r^   r_   r5   rE   rF   rD   rc   rd   re   N)rX   rY   rZ   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   sZ   i | _ i | _xB| jjj D ]2\}}|jdr.qt|tr|| j |< || j|< qW || _d S )N__)	Z_allowed_flags_flag_names	__class____dict__rw   
startswithr7   r8   _value)selfrz   ry   valr*   r*   r+   __init__N  s    


zFlags.__init__c             C   s   d}g }| j }xztddD ]l}|dK }||@ }|ry|j| j|  W q tk
r   tjjdj| j tjjdj| j	j
 Y qX qW dj|S )Nr   r   rA   z{0},)r   rangerB   r   r!   r"   r#   r$   r%   r   r   join)r   maskZ
flag_namesrz   _flagr*   r*   r+   __str__Y  s     zFlags.__str__c             C   s   | j S )N)r   )r   r*   r*   r+   rz   k  s    zFlags.valuec             C   s
   || _ d S )N)r   )r   r   r*   r*   r+   rz   o  s    N)rX   rY   rZ   r   r   propertyrz   setterr*   r*   r*   r+   r   M  s   r   c               @   s    e Zd ZdZdZdZdZdZdS )ColumnFlagsrc   rs   @   r3      N)rX   rY   rZ   ZNOT_NULLZPRIMARY_KEYZ
UNIQUE_KEYZMULTIPLE_KEYZAUTO_INCREMENTr*   r*   r*   r+   r   t  s
   r   c               @   s   e Zd ZdZdS )DatetimeColumnFlagsr   N)rX   rY   rZ   r   r*   r*   r*   r+   r   |  s   r   c               @   s   e Zd ZdZdS )UIntColumnFlagsr   N)rX   rY   rZ   ZZEROFILLr*   r*   r*   r+   r     s   r   c               @   s   e Zd ZdZdS )DoubleColumnFlagsr   N)rX   rY   rZ   UNSIGNEDr*   r*   r*   r+   r     s   r   c               @   s   e Zd ZdZdS )FloatColumnFlagsr   N)rX   rY   rZ   r   r*   r*   r*   r+   r     s   r   c               @   s   e Zd ZdZdS )BytesColumnFlagsr   N)rX   rY   rZ   Z	RIGHT_PADr*   r*   r*   r+   r     s   r   c               @   s   e Zd ZdZdZdZdS )BytesContentTyper   r\   r]   N)rX   rY   rZ   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| j
t| j
 }|d | _|d | _d| jkpd| jk| _| j  | 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   r6   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     sB    










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 dkr(tj| _n"| jtj@ dkrBtj| _ntddS )zMap datetime.rE   rf   r   z#Datetime mapping scenario unhandledN)	r   r[   r   r   r   r   r   r   r6   )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`   ra   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^   r2   rE   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| j  n*| j tjkr0| j  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| j  n| j tjkrtj| _nn| j tjkr| j  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| 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   r6   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_name7  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_label?  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_nameG  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_labelO  s    zColumn.column_labelc             C   s   | j S )z@int: The column type.

        .. versionadded:: 8.0.12
        )r   )r   r*   r*   r+   typeW  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   g  s    zColumn.fractional_digitsc             C   s   | j S )zCstr: The collation name.

        .. versionadded:: 8.0.12
        )r   )r   r*   r*   r+   collation_nameo  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_namew  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*   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*   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*   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*   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+   get_proto_type  s    zColumn.get_proto_typec             C   s   | j S )zUReturns the column type.

        Returns:
            int: The column type.
        )r   )r   r*   r*   r+   get_type  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)$rX   rY   rZ   __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               @   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 )N)_fields
_resultset)r   rsfieldsr*   r*   r+   r     s    zRow.__init__c             C   sd   t |tr| jj|n|}|dkr<t |tr<tdj|n|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   zColumn name '{0}' not foundr   zIndex out of ranger-   )	r7   r   r   index_ofr6   r%   r   r   
IndexError)r   index	int_indexr*   r*   r+   __getitem__  s    zRow.__getitem__z8.0.12c             C   sF   | j j|}|t| jkr"td|dkr8tdj|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   zColumn name '{0}' not foundr-   )r   r   r   r   r   r6   r%   r   )r   Z	str_indexr   r*   r*   r+   
get_string  s    	zRow.get_stringN)rX   rY   rZ   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| _|j  d S )NFr   r   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_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_warnings5  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_count=  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_closedE  s    zBaseResult.set_closedc             C   s   | j 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  rB   )r   r  r  r  r*   r*   r+   append_warningJ  s    zBaseResult.append_warningc             C   s
   || _ dS )z Sets the generated ids.
        N)r  )r   Zgenerated_idsr*   r*   r+   set_generated_idsT  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_idY  s    z"BaseResult.set_generated_insert_idc             C   s
   || _ dS )z*Sets the number of rows affected.
        N)r  )r   totalr*   r*   r+   set_rows_affected^  s    zBaseResult.set_rows_affectedN)rX   rY   rZ   r   r   r	  r
  r  r  r  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                s.   t t| j| || _|d k	r*| jj|  d S )N)superr  r   _idsr   Zclose_result)r   r  ids)r   r*   r+   r   l  s    zResult.__init__c             C   s   | j S )zjReturns the last insert id auto generated.

        Returns:
            int: The last insert id.
        )r  )r   r*   r*   r+   get_autoincrement_values  s    zResult.get_autoincrement_valuez8.0.12c             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   )r  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
        )r  )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)rX   rY   rZ   r   r   r  r	   r  r  r  __classcell__r*   r*   )r   r+   r  d  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| j| g | _d| _d| _g | _d| _d| _| j	  d S )NFr   r   r-   )
r  r  r   _columns	_has_data_has_more_results_items
_page_size	_position_init_result)r   r  )r   r*   r+   r     s    zBufferingResult.__init__c             C   s
   | j | S )N)r"  )r   r   r*   r*   r+   r     s    zBufferingResult.__getitem__c             C   s
   t | jS )zint: The total of items.)r   r"  )r   r*   r*   r+   count  s    zBufferingResult.countc             C   sR   | j j| | _t| jdkr dnd| _g | _d| _d| _| j j| jrH| nd dS )zInitialize the result.r   TFrg   r   Nr-   )	r   Zget_column_metadatar  r   Z_has_more_datar"  r#  r$  Zset_active_result)r   r*   r*   r+   r%    s    zBufferingResult._init_resultc             C   sv   | j j| }|dkrdS dgt|d  }|slx<tt|d D ](}| j| }t|j |d | ||< q@W 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   )r   dumpingrowr>   ry   colr*   r*   r+   
_read_item  s    	
zBufferingResult._read_itemc             C   sN   | j r
dS d}x:t| jD ],}| jd}|dkr2P | jj| |d7 }qW |S )zSReads the page items.

        Returns:
            int: Total items read.
        Fr   Nr   )r  r   r#  r+  r"  rB   )r   r&  r   r>   r*   r*   r+   _page_in_items  s    
zBufferingResult._page_in_itemsc             C   s0   d}x&| j D ]}|j |kr |S |d7 }qW dS )zeReturns the index of the column.

        Returns:
            int: The index of the column.
        r   r   r-   )r  r   )r   Zcol_namer   r*  r*   r*   r+   r     s    zBufferingResult.index_ofc             C   s   | j r
dS | jdS )zuFetch one item.

        Returns:
            :class:`mysqlx.Row` or :class:`mysqlx.DbDoc`: one result item.
        NF)r  r+  )r   r*   r*   r+   	fetch_one  s    zBufferingResult.fetch_onec             C   s   x| j  sP qW | jS )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_allc             C   s
   || _ dS )zdSets if result has data.

        Args:
            flag (bool): `True` if result has data.
        N)r   )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)r!  )r   r   r*   r*   r+   set_has_more_results  s    z$BufferingResult.set_has_more_results)rX   rY   rZ   r   r   r   r   r&  r%  r+  r,  r   r-  r.  r/  r0  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| j| d S )N)r  r1  r   )r   r  )r   r*   r+   r     s    zRowResult.__init__c             C   s   | j S )z`list`: The list of columns.)r  )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
        )r  )r   r*   r*   r+   get_columns  s    zRowResult.get_columns)	rX   rY   rZ   r   r   r   r2  r3  r  r*   r*   )r   r+   r1    s   r1  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| j| d S )N)r  r4  r   )r   r  )r   r*   r+   r   0  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.
        )r  )r   r*   r*   r+   r  3  s    z!SqlResult.get_autoincrement_valuec             C   s   | j r
dS d| _| j  dS )zjProcess the next result.

        Returns:
            bool: Returns `True` if the fetch is done.
        FT)r  r!  r%  )r   r*   r*   r+   next_result;  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
        )r   )r   r*   r*   r+   has_dataG  s    zSqlResult.has_data)	rX   rY   rZ   r   r   r  r5  r6  r  r*   r*   )r   r+   r4  *  s
   r4  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| j| d S )N)r  r7  r   )r   r  )r   r*   r+   r   X  s    zDocResult.__init__c                s,   t t| j|}|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   )r  r7  r+  r   r   )r   r(  r)  )r   r*   r+   r+  [  s    	zDocResult._read_item)rX   rY   rZ   r   r   r+  r  r*   r*   )r   r+   r7  Q  s   r7  ).r   rH   r0   r"   r   r   Zdbdocr   Zcharsetsr   compatr   helpersr   r	   r,   r   r   r   r@   r   r   r   r    r   r   objectrV   r[   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r1  r4  r7  r*   r*   r*   r+   <module>   sP   $ L'  [)K/~'