o
    FDip                     @   sn   d dl mZ d dlmZ d dlmZ d dlmZ G dd dZG dd deZ	G d	d
 d
Z
G dd dZdS )    )AsyncGenerator)BlockStreamProfileInfo)Progress)BufferedReaderc                   @   s8   e Zd ZdZ		ddedefddZdd Zd	d
 ZdS )QueryResultz3
    Stores query result from multiple blocks.
    Freaderpacket_generatorc                 C   s(   || _ || _|| _g | _g | _|| _d S N)r   r   with_column_typesdatacolumns_with_typescolumnarselfr   r   r
   r    r   L/var/www/Datamplify/venv/lib/python3.10/site-packages/asynch/proto/result.py__init__   s   
zQueryResult.__init__c                 C   s   t |dd }|d u rd S |jr@| jr6| }| jr,t|D ]\}}| j| | qd S dd |D | _d S | j|  d S | jsI|j| _d S d S )Nblockc                 S      g | ]}t |qS r   )list.0cr   r   r   
<listcomp>,       z%QueryResult.store.<locals>.<listcomp>)	getattrnum_rowsr   get_columnsr   	enumerateextendget_rowsr   )r   packetr   columnsicolumnr   r   r   store   s   zQueryResult.storec                    sR   | j 2 z3 dH W }| | q6 | j}| jrdd | jD }| jr'|| jfS |S )z/
        :return: stored query result.
        Nc                 S   r   r   )tupler   r   r   r   r   =   r   z*QueryResult.get_result.<locals>.<listcomp>)r   r%   r   r   r
   r   )r   r!   r   r   r   r   
get_result3   s   
zQueryResult.get_resultNFF)	__name__
__module____qualname____doc__r   r   r   r%   r'   r   r   r   r   r      s    
r   c                       sF   e Zd ZdZ	ddef fddZdd Zdd	 Z fd
dZ  Z	S )ProgressQueryResultzx
    Stores query result and progress information from multiple blocks.
    Provides iteration over query progress.
    Fr   c                    s"   t  |||| t| j| _d S r	   )superr   r   r   progress_totalsr   	__class__r   r   r   K   s   zProgressQueryResult.__init__c                 C      | S r	   r   r   r   r   r   __iter__Q      zProgressQueryResult.__iter__c                 C   sD   	 t | j}t|dd }|r| j| | jj| jjfS | | q)NTprogress)nextr   r   r/   	incrementrows
total_rowsr%   )r   r!   progress_packetr   r   r   __next__T   s   

zProgressQueryResult.__next__c                    s   | D ]}qt   I d H S r	   )r.   r'   )r   _r0   r   r   r'   ^   s   zProgressQueryResult.get_resultr(   )
r)   r*   r+   r,   r   r   r4   r<   r'   __classcell__r   r   r0   r   r-   E   s    
r-   c                   @   sN   e Zd ZdZdddZdd Zdd Zd	d
 Zg fddZdd Z	eZ
eZdS )IterQueryResultzP
    Provides iteration over returned data by chunks (streaming by chunks).
    Fc                 C   s(   || _ || _g | _g | _d| _d| _d S )NTF)r   r
   _columns_with_typesr   first_blockEOF)r   r   r
   r   r   r   r   k   s   
zIterQueryResult.__init__c                 C   r2   r	   r   r3   r   r   r   r4   t   r5   zIterQueryResult.__iter__c                 C   r2   r	   r   r3   r   r   r   	__aiter__w   r5   zIterQueryResult.__aiter__c                    sb   | j  I d H }t|dd }|d u rd S | jr-| jr-d| _|j| _g }||  |S | S )Nr   F)	r   	__anext__r   rA   r
   r   r@   r   r    )r   r!   r   rvr   r   r   
_get_next_z   s   zIterQueryResult._get_next_c                    s\   | j rt| js(|  I d H }|d u rd| _ n	|r!|  j|7  _|  I d H S | jdS )NTr   )rB   StopAsyncIterationr   rF   r7   pop)r   defaultr9   r   r   r   r7      s   zIterQueryResult.nextc                    s<   | j r| j S | jr| jr|  j|  I d H 7  _| j S g S r	   )r@   rA   r
   r   rF   r3   r   r   r   get_columns_with_types   s   z&IterQueryResult.get_columns_with_typesN)F)r)   r*   r+   r,   r   r4   rC   rF   r7   rJ   r<   rD   r   r   r   r   r?   f   s    
	r?   c                   @   s2   e Zd ZdefddZdd Zdd Zdd	 Zd
S )	QueryInfor   c                 C   s   t || _t|| _d| _d S )Nr   )r   profile_infor   r6   elapsed)r   r   r   r   r   r      s   


zQueryInfo.__init__c                 C   
   || _ d S r	   )rL   )r   rL   r   r   r   store_profile      
zQueryInfo.store_profilec                 C   s    | j r| j | d S || _ d S r	   )r6   r8   )r   r6   r   r   r   store_progress   s   
zQueryInfo.store_progressc                 C   rN   r	   )rM   )r   rM   r   r   r   store_elapsed   rP   zQueryInfo.store_elapsedN)r)   r*   r+   r   r   rO   rQ   rR   r   r   r   r   rK      s
    rK   N)collections.abcr   asynch.proto.blockr   asynch.proto.progressr   asynch.proto.streams.bufferedr   r   r-   r?   rK   r   r   r   r   <module>   s    =!C