
    BR<i                       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 d<dZd=dZd>dZd>dZd?dZd@dZ d@dZ!dAdZ"dBdZ#dCdZ$dDdZ% G d d      Z& G d d      Z' G d d      Z( G d d      Z) G d d e)      Z* G d! d"e*      Z+ G d# d$e*      Z, G d% d&e*      Z- G d' d(e*      Z. G d) d*e*      Z/ G d+ d,e*      Z0 G d- d      Z1 G d. d/      Z2 G d0 d1      Z3 G d2 d3e3      Z4 G d4 d5e3      Z5 G d6 d7e5      Z6 G d8 d9e6      Z7 G d: d;e5      Z8y)Ez%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Columnc                   t        |      dk(  ry | j                         t        j                  k(  rt	        |d d       S 	 t        j                  | j                            |      S # t        $ rY}t        j                  j                  |        t        j                  j                  |j                  d              Y d }~y d }~ww xY w)Nr   hex)lenget_type
ColumnTypeSTRINGr   ColumnProtoTypeconverter_mapget_proto_typeKeyErrorsysstderrwriteencode)columnpayloaderrs      N/var/www/html/delta-backend/venv/lib/python3.12/site-packages/mysqlx/result.pyfrom_protobufr)   /   s    
7|qJ--- "..,,V-B-B-DEgNN 

C5"

GNN5124s    %A& &	C/ACCc                    | d d S )Nr    r&   s    r(   bytes_from_protobufr-   >   s    3B<    c                T    t        |       dk(  sJ t        j                  d|       d   S )N   z<fr   r   structunpackr,   s    r(   float_from_protobufr4   C   *    w<1==w'**r.   c                T    t        |       dk(  sJ t        j                  d|       d   S )N   z<dr   r1   r,   s    r(   double_from_protobufr8   H   r5   r.   c                    t        |       dk(  rt        d      d}d}d}| D ]N  }t        |t              r|n
t	        |      }|dz  dk(  }|dz  }||z  }||z  }|r|| |dz   d  fc S |dz  }|dz  }P 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_bitss           r(   varint_from_protobuf_streamrI   M   s    
7|q+,,
C	AE 	!$,t#d)d{q $;U	XgcAgi(((q
	 &
''r.   c                T    t        |       \  }} t        |       dk7  rt        d      |S )Nr   Payload too longrI   r   r=   r&   rC   s     r(   varint_from_protobufrN   c   s-    ,W5JAw
7|q+,,Hr.   c                    t        |       \  }} t        |       dk7  rt        d      |dz  r| }|dz	  }|dz  }|S |dz	  }|S )Nr   rK   r   l            rL   rM   s     r(   varsint_from_protobufrP   k   sa    ,W5JAw
7|q+,, 	3wBF	W H FHr.   c                   g }	 	 t        |       \  }} t        |       |k  r.t        |       dk(  r|dk(  rt        |      dk(  rg S t        d      |j                  | d |        | |d  } t        |       dk(  r	 |S 	 w# t        $ r Y |S w xY w)Nr   r   zInvalid Set encoding)rI   r   r=   append)r&   set_pb	field_lens      r(   set_from_protobufrU   {   s    F
	!<W!EIw7|i'w<1$aCK1<LI !788MM'*9-.ij)G7|q  M !   	M	s   >A; 2A; ;	BBc                   g }d }t        | d   t              r| d   nt        | d         }| dd  } | D ]  }t        |t              r|n
t        |      }|dz  dz	  }|dz  }|dk  rE|j                  |       |dk  r|j                  |       Z|dk(  rd} nC|dk(  rd} n:t	        d	      |dk(  rd}|dk(  sJ  n|dk(  rd}|dk(  sJ  nt	        d
|        t        j                  ||| f      S )Nr   r      r0      
         zInvalid BCDzInvalid BCD: )r>   r?   r@   rR   r=   decimalDecimal)r&   digitssignscalerE   rF   high_bcdlow_bcds           r(   decimal_from_protobufrc      s$   FD$WQZ5GAJ3wqz?EabkG 9!$,t#d)4KA%+d?MM(#~g&DD //Dd?"?Dd?"?}XJ788396 ??D&5&122r.   c           	        d}d}d}d}t        |       \  }} t        |       \  }} t        |       \  }} 	 t        |       \  }} t        |       \  }} t        |       \  }} t        |       \  }} t        |||||||      S # t        $ r Y w xY w)Nr   )rI   r=   r   )r&   hourminutessecondsusecondsyearmonthdays           r(   datetime_from_protobufrl      s    DGGH/8MD'09NE7.w7LC3G<g6w?6w?7@' D%dGWhGG  s   8A= =	B	B	c                   d}d}d}d}| d   dk(  }| dd  } 	 t        |       \  }} t        |       \  }} t        |       \  }} t        |       \  }} |r|r|dz  }n|r|dz  }n|r|dz  }n|r|dz  }t        ||||      S # t        $ r Y ;w xY w)Nr   r   r   )hoursrf   rg   microseconds)rI   r=   r   )r&   re   rf   rg   rh   negates         r(   time_from_protobufrq      s    DGGHQZ1_FabkG3G<g6w?6w?7@' BJDrMGrMGNHGW8   s   8A? ?	B
Bc                      e Zd ZdZy)
Collations!   N)__name__
__module____qualname__UTF8_GENERAL_CIr+   r.   r(   rs   rs      s    Or.   rs   c                  (   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&d/d*       Z-e&d/d+       Z.y,)0r   r         r0         r<   r7   	   rY      rZ   r[      rX                                                       rt   "   #   c                X    t        |       j                         D ]  \  }}||k(  s|c S  y N)varsitems)clsneedlekeyvalues       r(   	to_stringzColumnType.to_string  s1    s)//+ 	JC
	 r.   c                8    t        | |j                         d       S r   )getattrupper)r   r   s     r(   from_stringzColumnType.from_string  s    sCIIK..r.   c                6    || j                   | j                  fv S r   )CHARVARCHARr   col_types     r(   is_charzColumnType.is_char  s"    HHKK
 
 	
r.   c                6    || j                   | j                  fv S r   )BINARY	VARBINARYr   s     r(   	is_binaryzColumnType.is_binary%  s"    JJMM
 
 	
r.   c                b    || j                   | j                  | j                  | j                  fv S r   )TEXTTINYTEXT
MEDIUMTEXTLONGTEXTr   s     r(   is_textzColumnType.is_text,  s0    HHLLNNLL	
 
 	
r.   c                x    || j                   | j                  | j                  | j                  | j                  fv S r   )REALDOUBLEFLOATDECIMALNUMERICr   s     r(   is_decimalszColumnType.is_decimals5  s7    HHJJIIKKKK
 
 	
r.   c                    || j                   | j                  | j                  | j                  | j                  | j
                  fv S r   )BITTINYINTSMALLINT	MEDIUMINTINTBIGINTr   s     r(   
is_numericzColumnType.is_numeric?  s>    GGKKLLMMGGJJ
 
 	
r.   c                6    || j                   | j                  fv S r   )SETENUMr   s     r(   is_finite_setzColumnType.is_finite_setJ  s"    GGHH
 
 	
r.   N)r   r   returnOptional[str])r   strr   r   )r   r?   r   bool)/ru   rv   rw   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      sO   
CGHI
CFDEGGFDFEDDHI
CDH
CDDGFIHDJHHDJH  / / 
 
 
 
 
 
 
 
 
 
 
 
r.   r   c                  t    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<   y)r   r   rz   r|   r}   r<   rY   rZ   rX   r   r   r   z!Dict[int, Callable[[bytes], Any]]r   N)ru   rv   rw   SINTUINTr   r   r   r   r   r   r   r   r   rP   rN   r-   rl   rq   r4   r8   rU   rc   r   __annotations__r+   r.   r(   r   r   R  s    DDFEEDH
CD
CG 	#""( "$!!&8M4 r.   r   c                  T    e Zd ZddZddZedd       Zej                  d	d       Zy)
Flagsc                   i | _         i | _        | j                  j                  j	                         D ]F  \  }}|j                  d      rt        |t              s)|| j                   |<   || j                  |<   H || _        y )N__)	_allowed_flags_flag_names	__class____dict__r   
startswithr>   r?   _value)selfr   r   vals       r(   __init__zFlags.__init__o  sz    .0+-//557 	,HC~~d##s#+.##C((+  %	, !r.   c                   d}g }| j                   }t        dd      D ].  }|dz  }||z  }|s	 |j                  | j                  |          0 dj                  |      S # t        $ ra t
        j                  j                  | j                          t
        j                  j                  | j                  j                          Y w xY w)Nr   r   ?   ,)r   rangerR   r   r    r!   r"   r#   r   r   join)r   mask
flag_namesr   _flags         r(   __str__zFlags.__str__z  s    
q" 		CAQJD4<DC%%d&6&6t&<=		C xx
##	   CJJ$$(8(8'9;JJ$$(?(?'@BCs   AA'C	C	c                    | j                   S r   r   r   s    r(   r   zFlags.value  s    {{r.   c                    || _         y r   r   )r   r   s     r(   r   zFlags.value  s	    r.   N)r   r?   r   Noner   r   r   r?   )r   r?   r   r   )ru   rv   rw   r   r   propertyr   setterr+   r.   r(   r   r   n  s8    	!$$   \\ r.   r   c                       e Zd ZdZdZdZdZdZy)ColumnFlagsr   r   @   r:      N)ru   rv   rw   NOT_NULLPRIMARY_KEY
UNIQUE_KEYMULTIPLE_KEYAUTO_INCREMENTr+   r.   r(   r   r     s    HKJLNr.   r   c                      e Zd ZdZy)DatetimeColumnFlagsr   N)ru   rv   rw   r   r+   r.   r(   r  r        Ir.   r  c                      e Zd ZdZy)UIntColumnFlagsr   N)ru   rv   rw   ZEROFILLr+   r.   r(   r  r        Hr.   r  c                      e Zd ZdZy)DoubleColumnFlagsr   Nru   rv   rw   UNSIGNEDr+   r.   r(   r  r    r	  r.   r  c                      e Zd ZdZy)FloatColumnFlagsr   Nr  r+   r.   r(   r  r    r	  r.   r  c                      e Zd ZdZy)BytesColumnFlagsr   N)ru   rv   rw   	RIGHT_PADr+   r.   r(   r  r    r  r.   r  c                      e Zd ZdZdZdZy)BytesContentTyper   rz   r{   N)ru   rv   rw   r   r   r   r+   r.   r(   r  r    s    HD
Cr.   r  c                     e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 d"	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d#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&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#y))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
    Nc                l   t        |      | _        t        |      | _        t        |      | _        t        |      | _        t        |      | _        || _        d | _        || _        || _	        |	| _
        |
| _        || _        || _        d| _        d| _        d| _        d| _        d | _        d | _        d | _        | j                  dkD  r~| j                  t+        t,              k\  rt/        d| j                         t,        | j                     }|d   | _        |d   | _        d| j$                  v xs d| j$                  v | _        | j1                          | j                  t2        j4                  t2        j6                  t2        j8                  t2        j:                  t2        j<                  fv | _        y )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   catalogschematableoriginal_tablenameoriginal_namelength	collationfractional_digitsflagscontent_typeinfos                 r(   r   zColumn.__init__  s|    .f5+D1
#4]#C,U3$5n$E ((,'.&,)21B%*,8$),1 %$.226 )-??Q#&:";; #B4??BS!TUU'8D'+AwD$#'7D D000RFd>R>R4R O 	OONN,
 
r.   c                    t        | j                  | j                  | j                  t        | j                        d      S )N)r   r/  r0  r7  )r   r  r  r  r$  r   s    r(   r   zColumn.__str__  s5     NN,,T[[)	
 	
r.   c                   | j                   t        j                  k(  rt        j                  | _        n| j                   t        j
                  k(  rt        j
                  | _        nj| j                   t        j                  k(  rt        j                  | _        n7| j                  rt        j                  | _        nt        j                  | _        | j                  dz  | _        y)z
Map bytes.r   N)r%  r  r   r   r  r   r   r(  r   r   r$  r'  r   s    r(   
_map_byteszColumn._map_bytes  s    !1!:!::'00DN#3#8#88'__DN#3#7#77'^^DN__'--DN'..DN++/r.   c                   | j                   dk(  rt        j                  | _        y| j                  t
        j                  z  dkD  rt        j                  | _        y| j                   dk\  rt        j                  | _        yt        d      )zMap datetime.rY   r   r   z#Datetime mapping scenario unhandledN)	r!  r   r   r  r$  r  r   r   r=   r   s    r(   _map_datetimezColumn._map_datetime  sc    <<2'__DN[[.8881<'11DN\\R'00DNBCCr.   c                   | j                   dk  rt        j                  | _        d| _        y| j                   dk  rt        j                  | _        d| _        y| j                   dk  rt        j
                  | _        d| _        y| j                   dk  rt        j                  | _        d| _        yt        j                  | _        d| _        y)zMap int type.r0   r}   r~   r   TN)	r!  r   r   r  r   r   r   r   r&  r   s    r(   _map_int_typezColumn._map_int_type'  s    <<1'//DN # \\Q'00DN # \\Q'11DN
 #	 \\R'^^DN # (..DN"r.   c                ~   | 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z  | _	        y)zMap uint type.r{   r|   r7   rY   r   N)
r!  r   r   r  r   r   r   r   r$  r,  r   s    r(   _map_uint_typezColumn._map_uint_type5  s    <<1'//DN\\Q'00DN\\Q'11DN\\R'^^DN'..DN++/r.   c                J   | j                   t        j                  k(  r| j                          y| j                   t        j                  k(  r| j                          y| j                   t        j                  k(  r;t        j                  | _        | j                  t        j                  z  dk(  | _        y| j                   t        j                  k(  r;t        j                  | _        | j                  t        j                  z  dk(  | _        y| j                   t        j                  k(  r;t        j                  | _        | j                  t        j                  z  dk(  | _        y| j                   t        j                  k(  r| j!                          y| j                   t        j"                  k(  rt        j"                  | _        y| j                   t        j$                  k(  r| j'                          y| j                   t        j(                  k(  rt        j(                  | _        y| j                   t        j*                  k(  rt        j*                  | _        y| j                   t        j,                  k(  rt        j,                  | _        yt/        d| j                          )z	Map type.r   zUnknown column type N)r  r   r   r@  r   rB  r   r   r  r$  r  r  _is_number_signedr   r   r   r<  r   r   r>  r   r   r   r=   r   s    r(   r-  zColumn._map_typeC  s   333 !5!55!!6!66'--DN&*kk4D4M4M&MRS%SD"!8!88'//DN&*kk4D4M4M&MRS%SD"!7!77'..DN&*kk4D4M4M&MRS%SD"!6!66OO!5!55'__DN!9!99 !4!44'^^DN!5!55'__DN!4!44'^^DN3D4D4D3EFGGr.   c                    | j                   S )z@str: The schema name.

        .. versionadded:: 8.0.12
        r  r   s    r(   schema_namezColumn.schema_namea       ||r.   c                6    | j                   xs | j                  S )z?str: The table name.

        .. versionadded:: 8.0.12
        r  r  r   s    r(   
table_namezColumn.table_namei       ##2t{{2r.   c                6    | j                   xs | j                  S )z@str: The table label.

        .. versionadded:: 8.0.12
        r  r  r   s    r(   table_labelzColumn.table_labelq       {{2d222r.   c                6    | j                   xs | j                  S )z@str: The column name.

        .. versionadded:: 8.0.12
        r  r  r   s    r(   column_namezColumn.column_namey       ""0djj0r.   c                6    | j                   xs | j                  S )zAstr: The column label.

        .. versionadded:: 8.0.12
        r  r  r   s    r(   column_labelzColumn.column_label       zz0T000r.   c                    | j                   S )z@int: The column type.

        .. versionadded:: 8.0.12
        r  r   s    r(   typezColumn.type       ~~r.   c                    | j                   S )zBint. The column length.

        .. versionadded:: 8.0.12
        r!  r   s    r(   r4  zColumn.length  rH  r.   c                    | j                   S )zMint: The column fractional digits.

        .. versionadded:: 8.0.12
        r#  r   s    r(   r6  zColumn.fractional_digits       &&&r.   c                    | j                   S )zCstr: The collation name.

        .. versionadded:: 8.0.12
        r*  r   s    r(   collation_namezColumn.collation_name       ###r.   c                    | j                   S )zGstr: The character set name.

        .. versionadded:: 8.0.12
        r+  r   s    r(   character_set_namezColumn.character_set_name       '''r.   c                    | j                   S )zUReturns the schema name.

        Returns:
            str: The schema name.
        rF  r   s    r(   get_schema_namezColumn.get_schema_name  rH  r.   c                6    | j                   xs | j                  S )zSReturns the table name.

        Returns:
            str: The table name.
        rJ  r   s    r(   get_table_namezColumn.get_table_name  rL  r.   c                6    | j                   xs | j                  S )zUReturns the table label.

        Returns:
            str: The table label.
        rN  r   s    r(   get_table_labelzColumn.get_table_label  rP  r.   c                6    | j                   xs | j                  S )zUReturns the column name.

        Returns:
            str: The column name.
        rR  r   s    r(   get_column_namezColumn.get_column_name  rT  r.   c                6    | j                   xs | j                  S )zWReturns the column label.

        Returns:
            str: The column label.
        rV  r   s    r(   get_column_labelzColumn.get_column_label  rX  r.   c                    | j                   S )zaReturns the column proto type.

        Returns:
            int: The column proto type.
        )r  r   s    r(   r   zColumn.get_proto_type  s     r.   c                    | j                   S )zUReturns the column type.

        Returns:
            int: The column type.
        rZ  r   s    r(   r   zColumn.get_type  r\  r.   c                    | j                   S )zYReturns the column length.

        Returns:
            int: The column length.
        r^  r   s    r(   
get_lengthzColumn.get_length  rH  r.   c                    | j                   S )zoReturns the column fractional digits.

        Returns:
            int: The column fractional digits.
        r`  r   s    r(   get_fractional_digitszColumn.get_fractional_digits  ra  r.   c                    | j                   S )z[Returns the collation name.

        Returns:
            str: The collation name.
        rc  r   s    r(   get_collation_namezColumn.get_collation_name  re  r.   c                    | j                   S )zcReturns the character set name.

        Returns:
            str: The character set name.
        rg  r   s    r(   get_character_set_namezColumn.get_character_set_name  ri  r.   c                    | j                   S )zxReturns `True` if is a number signed.

        Returns:
            bool: Returns `True` if is a number signed.
        )r&  r   s    r(   is_number_signedzColumn.is_number_signed	       """r.   c                    | j                   S )zfReturns `True` if is padded.

        Returns:
            bool: Returns `True` if is padded.
        )r'  r   s    r(   	is_paddedzColumn.is_padded  s     r.   c                    | j                   S )zdReturns `True` if is bytes.

        Returns:
            bool: Returns `True` if is bytes.
        )r)  r   s    r(   is_byteszColumn.is_bytes  r\  r.   )NNNNNNNNNNN)r   r?   r.  r   r/  r   r0  r   r1  r   r2  r   r3  r   r4  Optional[int]r5  r  r6  r  r7  r  r8  r  r   r   r   r   r   r   r   r   r   zUnion[bool, int])$ru   rv   rw   __doc__r   r   r<  r>  r@  rB  r-  r   rG  rK  rO  rS  rW  r[  r4  r6  rd  rh  rk  rm  ro  rq  rs  r   r   rw  ry  r{  r}  r  r  r  r+   r.   r(   r   r     s   , "& $#(,"'+ $#'+/#&*4
4
 4
 	4

 4
 &4
 4
 %4
 4
 !4
 )4
 4
 $4
 
4
l
*	D#*H<   3 3 3 3 1 1 1 1     ' ' $ $ ( (3311 '$(#r.   c                  R    e Zd ZdZ	 	 	 	 	 	 ddZd	dZd
dZ ed      dd       Zy)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                     || _         || _        y r   )_fields
_resultset)r   	resultsetfieldss      r(   r   zRow.__init__*  s     .4=Fr.   c                ,    t        | j                        S r   )reprr  r   s    r(   __repr__zRow.__repr__0  s    DLL!!r.   c                   t        |t              r| j                  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   r  index_ofr=   r   r  
IndexError)r   index	int_indexs      r(   __getitem__zRow.__getitem__3  s{    
 8B%7MDOO,,U3SX	?z%5}UG;?@@DLL))Y]122||I&&r.   8.0.12c                    | j                   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   	str_indexr  s      r(   
get_stringzRow.get_string?  sd     OO,,Y7	DLL))455?}YK{CDD4<<	*++r.   N)r  z!Union[BufferingResult, RowResult]r  zSequence[FieldTypes]r   r   r   )r  zUnion[int, str]r   r   )r  r   r   r   )	ru   rv   rw   r  r   r  r  r   r  r+   r.   r(   r  r  "  sK    G:GDXG	G"
' , ,r.   r  c                  X    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y)
BaseResultzProvides base functionality for result objects.

    Args:
        connection (mysqlx.connection.Connection): The Connection object.
    c                    || _         d| _        d| _        d| _        g | _        g | _        |d | _        y |j                  | _        |j                          y NFr   r   )	_connection_closed_rows_affected_generated_id_generated_ids	_warnings	_protocolprotocolfetch_active_result)r   
connections     r(   r   zBaseResult.__init__W  sV    +5"#$"$)+;=!DN'00DN**,r.   c                    | j                   S )zReturns the number of affected items for the last operation.

        Returns:
            int: The number of affected items.
        r  r   s    r(   get_affected_items_countz#BaseResult.get_affected_items_counte  r  r.   c                    | j                   S )zZReturns the warnings.

        Returns:
            `list`: The list of warnings.
        )r  r   s    r(   get_warningszBaseResult.get_warningsm  r\  r.   c                ,    t        | j                        S )zcReturns the number of warnings.

        Returns:
            int: The number of warnings.
        )r   r  r   s    r(   get_warnings_countzBaseResult.get_warnings_countu  s     4>>""r.   c                    || _         y)z Sets if resultset fetch is done.N)r  r   r   s     r(   
set_closedzBaseResult.set_closed}  s	    r.   c                B    | j                   j                  |||d       y)zAppend a warning.

        Args:
            level (int): The warning level.
            code (int): The warning code.
            msg (str): The warning message.
        )levelcodemsgN)r  rR   )r   r  r  r  s       r(   append_warningzBaseResult.append_warning  s     	tCHIr.   c                    || _         y)zSets the generated ids.Nr  )r   generated_idss     r(   set_generated_idszBaseResult.set_generated_ids  s
    +r.   c                    || _         y)zSets the generated insert id.Nr  )r   generated_ids     r(   set_generated_insert_idz"BaseResult.set_generated_insert_id  s
    )r.   c                    || _         y)z!Sets the number of rows affected.Nr  )r   totals     r(   set_rows_affectedzBaseResult.set_rows_affected  s
    #r.   Nr  r   r   r   r   )r   z List[Dict[str, Union[int, str]]]r   r   r   r   )r  r?   r  r?   r  r   r   r   )r  	List[int]r   r   )r  r?   r   r   )r  r?   r   r   )ru   rv   rw   r  r   r  r  r  r  r  r  r  r  r+   r.   r(   r  r  P  s5    -##J,*$r.   r  c                       e Zd ZdZ	 	 d	 	 	 	 	 d	 fdZd
dZ ed      dd       Z ed      d
d       ZddZ	 x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.
    c                n    t         |   |       || _        || j                  j	                  |        y y r   )superr   _idsr  close_result)r   r  idsr   s      r(   r   zResult.__init__  s8    
 	$),	!))$/ "r.   c                    | j                   S )zjReturns the last insert id auto generated.

        Returns:
            int: The last insert id.
        r  r   s    r(   get_autoincrement_valuezResult.get_autoincrement_value       !!!r.   r  c                j    | j                   t        | j                         dk(  ry| j                   d   S )zdReturns ID of the last document inserted into a collection.

        .. deprecated:: 8.0.12
        Nr   )r  r   r   s    r(   get_document_idzResult.get_document_id  s.     99DII! 3yy|r.   c                    | j                   S )zIReturns the generated insert id.

        .. deprecated:: 8.0.12
        r  r   s    r(   get_generated_insert_idzResult.get_generated_insert_id  r  r.   c                    | j                   S )zReturns the generated ids.r  r   s    r(   get_generated_idszResult.get_generated_ids  s    """r.   )NN)r  zOptional[ConnectionType]r  zOptional[List[int]]r   r   r   )r   r  )r   r  )ru   rv   rw   r  r   r  r   r  r  r  __classcell__r   s   @r(   r  r    sm     04#'	0,	0 !	0 
		0"   " "#r.   r  c                  ~     e Zd ZdZd f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 xZS )BufferingResultzProvides base functionality for buffering result objects.

    Args:
        connection (mysqlx.connection.Connection): The Connection object.
                                                   ids (`list`): A list of IDs.
    c                    t         |   |       g | _        d| _        d| _        g | _        d| _        d| _        | j                          y r  )	r  r   _columns	_has_data_has_more_results_items
_page_size	_position_init_result)r   r  r   s     r(   r   zBufferingResult.__init__  sG    $&($',/1  r.   c                     | j                   |   S r   )r  )r   r  s     r(   r  zBufferingResult.__getitem__  s    {{5!!r.   c                ,    t        | j                        S )zint: The total of items.)r   r  r   s    r(   countzBufferingResult.count  s     4;;r.   c                   | j                   j                  |       | _        t        | j                        dkD  | _        g | _        d| _        d| _        | j                   j                  | j                  r|        yd       y)zInitialize the result.r   r   r   N)	r  get_column_metadatar  r   _has_more_datar  r  r  set_active_resultr   s    r(   r  zBufferingResult._init_result  sf    ((<<TB!$--014**43F3F4QDQr.   c                    | j                   j                  |       }|ydgt        |d         z  }|s@t        t        |d               D ]&  }| j                  |   }t        ||d   |         ||<   ( t        | |      S )zRead item.

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

        Returns:
            :class:`mysqlx.Row`: A `Row` object.
        Nfield)r  read_rowr   r   r  r)   r  )r   dumpingrowrE   r   r%   s         r(   
_read_itemzBufferingResult._read_item  s     ''-;vCL))SW./ Es+)&#g,s2CDS	E 4r.   c                    | j                   ryd}t        | j                        D ]8  }| j                  d      }| |S | j                  j                  |       |dz  }: |S )zSReads the page items.

        Returns:
            int: Total items read.
        Fr   r   )r  r   r  r  r  rR   )r   r  r   rE   s       r(   _page_in_itemszBufferingResult._page_in_items  sl     <<t' 	A??5)D|  KKt$QJE	 r.   c                b    d}| j                   D ]  }|j                         |k(  r|c S |dz  }  y)zeReturns the index of the column.

        Returns:
            int: The index of the column.
        r   r   r   )r  rs  )r   col_namer  cols       r(   r  zBufferingResult.index_of  s@     == 	C##%1QJE	 r.   c                >    | j                   ry| j                  d      S )zuFetch one item.

        Returns:
            :class:`mysqlx.Row` or :class:`mysqlx.DbDoc`: one result item.
        NF)r  r  r   s    r(   	fetch_onezBufferingResult.fetch_one   s     <<u%%r.   c                @    	 | j                         s	 | j                  S )zFetch all items.

        Returns:
            `list`: The list of items of :class:`mysqlx.DbDoc` or
                    :class:`mysqlx.Row`.
        )r  r  r   s    r(   	fetch_allzBufferingResult.fetch_all+  s%     &&({{ r.   c                    || _         y)zdSets if result has data.

        Args:
            flag (bool): `True` if result has data.
        Nr  r  s     r(   set_has_datazBufferingResult.set_has_data7  s     r.   c                    || _         y)zfSets if has more results.

        Args:
            flag (bool): `True` if has more results.
        N)r  r  s     r(   set_has_more_resultsz$BufferingResult.set_has_more_results?  s     "&r.   r  )r  r?   r   zUnion[Row, DbDoc]r   r  )r  r   r   Optional[Union[Row, DbDoc]]r  )r  r   r   r?   )r   r  )r   zList[Union[Row, DbDoc]]r  )ru   rv   rw   r  r   r  r   r  r  r  r  r  r  r  r  r  r  r  s   @r(   r  r    sO    "    R&$	&
&r.   r  c                  *    e Zd ZdZedd       ZddZy)	RowResultzAllows traversing the Row objects returned by a Table.select operation.

    Args:
        connection (mysqlx.connection.Connection): The Connection object.
    c                    | j                   S )z`list`: The list of columns.r  r   s    r(   columnszRowResult.columnsO  s     }}r.   c                    | j                   S )zReturns the list of columns.

        Returns:
            `list`: The list of columns.

        .. versionadded:: 8.0.12
        r  r   s    r(   get_columnszRowResult.get_columnsT  s     }}r.   N)r   zList[Column])ru   rv   rw   r  r   r  r	  r+   r.   r(   r  r  H  s       r.   r  c                  (    e Zd ZdZddZddZddZy)	SqlResultzRepresents a result from a SQL statement.

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

        Returns:
            str: The identifier of the last record inserted.
        r  r   s    r(   r  z!SqlResult.get_autoincrement_valuef  r  r.   c                L    | j                   ryd| _        | j                          y)zjProcess the next result.

        Returns:
            bool: Returns `True` if the fetch is done.
        FT)r  r  r  r   s    r(   next_resultzSqlResult.next_resultn  s%     <<!&r.   c                    | j                   S )zReturns True if result has data.

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

        .. versionadded:: 8.0.12
        r  r   s    r(   has_datazSqlResult.has_dataz  s     ~~r.   Nr   r  )ru   rv   rw   r  r  r  r  r+   r.   r(   r  r  _  s    "
r.   r  c                  $     e Zd ZdZd fdZ xZS )	DocResultzAllows traversing the DbDoc objects returned by a Collection.find
    operation.

    Args:
        connection (mysqlx.connection.Connection): The Connection object.
    c                V    t         |   |      }|y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   s      r(   r  zDocResult._read_item  s1     g );&s1v.//r.   )r  r   r   r   )ru   rv   rw   r  r  r  r  s   @r(   r  r    s    0 0r.   r  )r%   r   r&   bytesr   r   )r&   r  r   r  )r&   r  r   float)r&   r  r   zTuple[int, bytes])r&   r  r   r?   )r&   r  r   zList[bytes])r&   r  r   zdecimal.Decimal)r&   r  r   r   )r&   r  r   r   )9r  
__future__r   r\   r2   r!   r   r   typingr   r   r   r	   r
   r   r   r   charsetsr   dbdocr   helpersr   r   typesr   r   r)   r-   r4   r8   rI   rN   rP   rU   rc   rl   rq   rs   r   r   r   r   r  r  r  r  r  r  r   r  r  r  r  r  r  r  r+   r.   r(   <module>r     sN  : , "   
 ( N N N *  2 -
+
+
(, *!3HH*B a
 a
H 8$ $N% + k  { { { e eP+, +,\E$ E$P0#Z 0#fz&j z&z .#	 #L0 0r.   