o
    i                     @  s   d dl mZ d dlZd dlZd dlmZ ddlmZ ddlm	Z	 ddlm
Z
 dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ d8d9ddZd:ddZd;d d!Zd<d&d'Zd=d+d,Zd>d0d1Zd2Zd3Zd?d6d7ZdS )@    )annotationsN)List   )proto   )_normalize_value)InArgs)InStatement)InValue)LibsqlError)	Statement)	ResultSet)Row)Valuein_stmtr	   in_argsr   return
proto.Stmtc                 C  sb   t | |}g }g }|jd u rnt|jtr!dd |j D }ndd |jD }|j||ddS )Nc                 S  s   g | ]\}}|t |d qS ))namevalue_value_to_proto).0keyr    r   O/home/ubuntu/.local/lib/python3.10/site-packages/libsql_client/hrana/convert.py
<listcomp>   s    z"_stmt_to_proto.<locals>.<listcomp>c                 S  s   g | ]}t |qS r   r   )r   r   r   r   r   r      s    T)sqlargs
named_args	want_rows)r   convertr   
isinstancedictitemsr   )r   r   stmtr   r   r   r   r   _stmt_to_proto   s   
r&   	proto_resproto.StmtResultr   c           	      C  s   t dd | d D }dd t|D }g }| d D ]}t dd |D }|t|| q| d }| d	}|d ur?t|nd }t||||S )
Nc                 s  s    | ]	}|d  p	dV  qdS )r    Nr   )r   	proto_colr   r   r   	<genexpr>$   s    z)_result_set_from_proto.<locals>.<genexpr>colsc                 S  s   i | ]\}}||qS r   r   )r   idxcolumnr   r   r   
<dictcomp>%   s    z*_result_set_from_proto.<locals>.<dictcomp>rowsc                 s  s    | ]}t |V  qd S N)_value_from_proto)r   	proto_valr   r   r   r+   (   s    affected_row_countlast_insert_rowid)tuple	enumerateappendr   getintr   )	r'   columnscolumn_idxsr0   	proto_rowvaluesrows_affectedlast_insert_rowid_strr5   r   r   r   _result_set_from_proto#   s   
rA   in_stmtsList[InStatement]proto.Batchc                 C  s   g }| ddddi | D ]}| dt|d dt|d q| dt|d dd	ddd | d
dt|d dddddd d|iS )Nr%   BEGINF)r   r    okr   )typestep)	conditionr%   COMMITnot)rG   condROLLBACKsteps)r8   lenr&   )rB   rN   r   r   r   r   _batch_to_proto2   s<   



	
rP   proto.BatchResult
stmt_countr:   List[ResultSet]c                 C  s   t | d |d krtddt | d |d krtdd| d D ]
}|d ur,t|q"g }| d dd D ]}|d u rBtd	d|t| q7|S )
Nstep_results   z:Server did not return the expected number of batch resultsHRANA_PROTO_ERRORstep_errorsz9Server did not return the expected number of batch errorsr   z'Server did not return a result in batch)rO   r   _error_from_protor8   rA   )r'   rR   	proto_errresult_setsstmt_resr   r   r   _batch_results_from_proto^   s,   r]   rZ   proto.Errorr   c                 C  s    | d }|  dp
d}t||S )NmessagecodeUNKNOWN)r9   r   )rZ   r_   r`   r   r   r   rY   z   s   
rY   in_valuer
   proto.Valuec                 C  s   t | }|d u rddiS t|trd|dS t|tr.|tk s#|tkr'tddt|dS t|trAt	|s<t
dd|dS zt| }d	|d
W S  ty^   tdt| w )NrG   nulltext)rG   r   z>Integer exceeds the range of SQLite integers (64 bits, signed)integerz6Only finite floats (not Infinity or NaN) are supportedfloatblob)rG   base64zUnsupported value of type )r   r"   strr:   _MIN_INTEGER_MAX_INTEGEROverflowErrorrg   mathisfinite
ValueErrorri   	b64encodedecode	TypeErrorrG   )rb   r   datar   r   r   r      s*   





r   l         l    r   r   c                 C  s   | d dkrd S | d dkrt | d S | d dkr t| d S | d dkr,t| d S | d dkr;t| d d	 S td
| d d)NrG   rd   re   r   rf   rg   rh   ri   z====zUnknown value type rV   )rj   r:   rg   ri   	b64decoder   )r   r   r   r   r2      s   r2   r1   )r   r	   r   r   r   r   )r'   r(   r   r   )rB   rC   r   rD   )r'   rQ   rR   r:   r   rS   )rZ   r^   r   r   )rb   r
   r   rc   )r   rc   r   r   )
__future__r   ri   rn   typingr   r)   r   clientr   r   r	   r
   r   r   resultr   r   r   r&   rA   rP   r]   rY   r   rk   rl   r2   r   r   r   r   <module>   s.    


,

