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 ddl	mZ ddlmZ ddlmZ ddlmZ d.ddZG dd deZG dd deZ	d/d0d#d$Zd1d'd(Zd2d,d-ZdS )3    )annotationsN)Any)cast)List)Optional   )_normalize_value)Client)InArgs)InStatement)InValue)LibsqlError)	Statement)Transaction)_Config)	ResultSetRowconfigr   returnSqlite3Clientc                 C  s`   | j dksJ | jdvrtd| jdt| j}| }zt|d W |  |S |  w )Nfile) 	localhostzInvalid authority in file URL: URL_INVALIDz1SELECT 1 AS check_that_the_database_can_be_opened)scheme	authorityr   r   path_connect_execute_stmtclose)r   clientdb r#   O/home/ubuntu/.local/lib/python3.10/site-packages/libsql_client/sqlite3_utils.py_create_sqlite3_client   s   


r%   c                   @  sj   e Zd ZU ded< ded< d!ddZd"d#ddZd$ddZd%ddZd&ddZe	d'ddZ
d(dd ZdS ))r   str_pathbool_closedr   c                 C  s   || _ d| _d S )NF)r'   r)   )selfr   r#   r#   r$   __init__,   s   
zSqlite3Client.__init__Nstmtr   argsr
   r   r   c                   s,   |   }zt|||W |  S |  w N)r   r   r    r*   r,   r-   r"   r#   r#   r$   execute0   s
   zSqlite3Client.executestmtsList[InStatement]List[ResultSet]c                   sZ   |   }z"t|d g }|D ]}t||}|| qt|d |W |  S |  w )NBEGINCOMMIT)r   r   appendr    )r*   r1   r"   result_setsr,   
result_setr#   r#   r$   batch7   s   


zSqlite3Client.batchSqlite3Transactionc                 C  s6   |   }z
t|d t|W S  ty   |   w )Nr4   )r   r   r:   	Exceptionr    r*   r"   r#   r#   r$   transactionD   s   

zSqlite3Client.transactionNonec                   s   d| _ d S )NTr)   r*   r#   r#   r$   r    M   s   
zSqlite3Client.closec                 C  s   | j S r.   r?   r@   r#   r#   r$   closedP   s   zSqlite3Client.closedsqlite3.Connectionc                 C  s$   | j rtddtj| jd dddS )NzThe client was closedCLIENT_CLOSEDFr   )isolation_levelcheck_same_threadtimeout)r)   r   sqlite3connectr'   r@   r#   r#   r$   r   T   s   
zSqlite3Client._connect)r   r&   r.   r,   r   r-   r
   r   r   )r1   r2   r   r3   )r   r:   r   r>   r   r(   r   rB   )__name__
__module____qualname____annotations__r+   r0   r9   r=   r    propertyrA   r   r#   r#   r#   r$   r   (   s   
 



	c                   @  sb   e Zd ZU ded< dddZddddZdddZdddZdddZe	dddZ
d ddZdS )!r:   zOptional[sqlite3.Connection]databaserB   c                 C  s
   || _ d S r.   rR   )r*   rR   r#   r#   r$   r+   b   s   
zSqlite3Transaction.__init__Nr,   r   r-   r
   r   r   c                   s   |   }t|||S r.   )_connectionr   r/   r#   r#   r$   r0   e   s   zSqlite3Transaction.executer>   c                   s(   | j d u rd S t| j d |   d S )NROLLBACK)rR   r   r    r@   r#   r#   r$   rollbacki   s
   
zSqlite3Transaction.rollbackc                   s    |   }t|d |   d S )Nr5   )rT   r   r    r<   r#   r#   r$   commito   s   
zSqlite3Transaction.commitc                 C  s&   | j d }| _ |d ur|  d S d S r.   )rR   r    r<   r#   r#   r$   r    t   s   zSqlite3Transaction.closer(   c                 C  s
   | j d u S r.   rS   r@   r#   r#   r$   rA   y   s   
zSqlite3Transaction.closedc                 C  s   | j d u r
tdd| j S )NzThe transaction was closedTRANSACTION_CLOSED)rR   r   r@   r#   r#   r$   rT   }   s   

zSqlite3Transaction._connection)rR   rB   r.   rI   rJ   rK   rL   )rM   rN   rO   rP   r+   r0   rV   rW   r    rQ   rA   rT   r#   r#   r#   r$   r:   _   s   
 



r:   r"   rB   in_stmtr   in_argsr
   r   c              
     s*  t ||}|jd u rd}nt|jtrdd |j D }ndd |jD }d }z| |j|}| }W n( t	j
y^ } z|d urG|  t|drP|j}nd}tt|||d }~ww z0tdd	 |jphdD }	d
d t|	D   fdd|D }
|j}|j}t|	|
||W |  S |  w )Nr#   c                 S  s   i | ]\}}t |t|qS r#   )_strip_arg_name_value_to_sql).0keyvaluer#   r#   r$   
<dictcomp>   s    z!_execute_stmt.<locals>.<dictcomp>c                 S  s   g | ]}t |qS r#   )r\   )r]   r_   r#   r#   r$   
<listcomp>   s    z!_execute_stmt.<locals>.<listcomp>sqlite_errornameSQLITEc                 s  s    | ]
}t t|d  V  qdS )r   N)r   r&   )r]   descr#   r#   r$   	<genexpr>   s    z _execute_stmt.<locals>.<genexpr>c                 S  s   i | ]\}}||qS r#   r#   )r]   idxcolumnr#   r#   r$   r`          c                   s   g | ]}t  |qS r#   r   )r]   sql_rowcolumn_idxsr#   r$   ra      rh   )r   convertr-   
isinstancedictitemsr0   sqlfetchallrG   Errorr    hasattrrb   r   r&   tupledescription	enumeraterowcount	lastrowidr   )r"   rY   rZ   r,   sql_argscursorsql_rowsecodecolumnsrowsrows_affectedlast_insert_rowidr#   rj   r$   r      s:   


r   namer&   c                 C  s(   t | dkr| d dv r| dd  S | S )Nr   r   ):$@)len)r   r#   r#   r$   r[      s   r[   r_   r   r   c                 C  s$   t | trt| stdt| S )Nz6Only finite floats (not Infinity or NaN) are supported)rm   floatmathisfinite
ValueErrorr   )r_   r#   r#   r$   r\      s   r\   )r   r   r   r   r.   )r"   rB   rY   r   rZ   r
   r   r   )r   r&   r   r&   )r_   r   r   r   )
__future__r   r   rG   typingr   r   r   r   r!   r   r	   r
   r   r   r   r   r   r   r   resultr   r   r%   r   r:   r   r[   r\   r#   r#   r#   r$   <module>   s2    
7%
(