o
    QDiI                     @  s  d dl mZ d dlZd dl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 ddlmZmZ d	d
lmZ d	dlmZ d	dlmZ errd 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# ddl$m%Z%m&Z& G dd deZ'dddZ(dS )    )annotationsN)TYPE_CHECKINGAnyCallableDict	GeneratorListOptional   )Package)platform)Resource)AdapterPublishResult   )settings)
SqlControl)	SqlMapper)MetaDataTable)Engine)Report)TableResource)Schema)
IRowStreamRowc                   @  s   e Zd ZU dZded< ded< ded< ded	< d
dd6ddZd7ddZd8ddZd9ddZd:ddZ	d;dd Z
d!d!d!d"d<d(d)Zd
d*d=d/d0Zd
d*d>d4d5Zd
S )?
SqlAdapterz(Read and write data from/to SQL databaser   enginer   controlr   mapperr   metadataN)r   Optional[SqlControl]c                C  s   t j}|| _|p
t | _t| jjj| _| j	 *}| jjj
dr*|jddt |j| jjd| _| jj|dd W d    d S 1 sFw   Y  d S )NsqliteREGEXP   )schemaT)views)r   
sqlalchemyr   r   r   r   dialectnamer   begin
startswith
connectioncreate_functionregexpr   	namespacer    reflect)selfr   r   saconn r4   Y/var/www/Datamplify/venv/lib/python3.10/site-packages/frictionless/formats/sql/adapter.py__init__    s   "zSqlAdapter.__init__
table_namestrreturnNonec                 C  sN   | j  }| jj| }| jj||gd W d    d S 1 s w   Y  d S )Ntables)r   r*   r    r<   drop_all)r1   r7   r3   tabler4   r4   r5   delete_resource.   s   "zSqlAdapter.delete_resourcer   c                 C  sf   t g d}| jjD ]'}t|j}t|d}| jjjdd}| j	
|}t||||d}|| q	|S )N)	resources)r>   Fhide_password)r)   r%   r   )r   r    sorted_tablesr8   r)   r   r   urlrender_as_stringr   read_schemar   add_resource)r1   packager>   r)   r   pathr%   resourcer4   r4   r5   read_package5   s   


zSqlAdapter.read_packager   c                 C  s    | j j| }| jj|| jjdS )Nwith_metadata)r    r<   r   rF   r   rM   )r1   r7   r>   r4   r4   r5   rF   @   s   zSqlAdapter.read_schema Generator[List[Any], None, None]c           
      c  s    t j}| jj|j }| j Q}|j}| jj	r dd |jD }|j
| jdd}|jr5|||j}|jrA|||j}||}t| V  |D ]	}t|}	|	V  qOW d    d S 1 sdw   Y  d S )Nc                 S  s   g | ]
}|j tjvr|qS r4   )r)   r   METADATA_IDENTIFIERS).0columnr4   r4   r5   
<listcomp>K   s
    z/SqlAdapter.read_cell_stream.<locals>.<listcomp>T)stream_results)r   r'   r    r<   r>   r   r*   cr   rM   selectexecution_optionsorder_bytextwhereexecutelistkeys)
r1   r   r2   r>   r3   columnsqueryresultitemcellsr4   r4   r5   read_cell_streamD   s*   	
"zSqlAdapter.read_cell_streamrH   c              	   C  s   | j  2}g }|jD ]}|jsJ | jj|j|jd}|| j}|	| q| jj
||d W d    n1 s:w   Y  | jjD ])}||jrl||j}| | j|j|jd W d    n1 sgw   Y  qCt| j jjddt| j ddS )N)r7   r;   TrA   )r   )rD   context)r   r*   r@   r)   r   write_schemar%   to_metadatar    append
create_allrC   has_table_resourceget_table_resourcewrite_row_stream
row_streamr   rD   rE   dict)r1   rH   r3   r<   resr>   rJ   r4   r4   r5   write_packagec   s(   


zSqlAdapter.write_packageF)forcerM   ignore_constraintsr%   ro   boolrM   rp   c          	      C  s   | j  >}|r"| jj|}|d ur"| jj||gd | j| | jj||||d}|	| j}| jj
||gd W d    d S 1 sFw   Y  d S )Nr;   )r7   rM   rp   )r   r*   r    r<   getr=   remover   rd   re   rg   )	r1   r%   r7   ro   rM   rp   r3   existing_tabler>   r4   r4   r5   rd   v   s   	"zSqlAdapter.write_schemaon_rowrk   r   rv   Optional[Callable[[Row], None]]c          	      C  s   t j}| j P}g }| jj| }|D ]'}|| j| t	|t
jkr2|||| |  |r8||nd  qt	|rP|||| W d    d S W d    d S 1 s[w   Y  d S N)r   r'   r   r*   r    r<   rf   r   	write_rowlenr   BUFFER_SIZErZ   insertclear)	r1   rk   r7   rv   r2   r3   bufferr>   rowr4   r4   r5   rj      s    	"zSqlAdapter.write_row_streamrJ   r   r   c                  s   t jj 1d fdd}g  jj| |j|d}t r0	  |W  d    S 1 s<w   Y  d S )Nr   r   c                   sV     jj| dd t tjkr     r'|  d S d  d S )NTrL   )	rf   r   ry   rz   r   r{   rZ   r|   r}   )r   r~   r3   rv   r2   r1   r>   r4   r5   process_row   s
   z<SqlAdapter.write_resource_with_metadata.<locals>.process_rowru   )r   r   )
r   r'   r   r*   r    r<   validaterz   rZ   r|   )r1   rJ   r7   rv   r   reportr4   r   r5   write_resource_with_metadata   s   $z'SqlAdapter.write_resource_with_metadata)r   r   r   r!   )r7   r8   r9   r:   )r9   r   )r7   r8   r9   r   )r   r   r9   rN   )rH   r   )r%   r   r7   r8   ro   rq   rM   rq   rp   rq   r9   r:   )rk   r   r7   r8   rv   rw   r9   r:   )rJ   r   r7   r8   rv   rw   r9   r   )__name__
__module____qualname____doc____annotations__r6   r?   rK   rF   rb   rn   rd   rj   r   r4   r4   r4   r5   r      s(   
 




r   exprr8   r`   c                 C  s   t | }||d uS rx   )recompilesearch)r   r`   regr4   r4   r5   r.      s   
r.   )r   r8   r`   r8   ))
__future__r   r   typingr   r   r   r   r   r   r	   rH   r   r   rJ   r   systemr   r    r   r   r   r   r   r'   r   r   sqlalchemy.enginer   r   r   r@   r   r%   r   r>   r   r   r   r.   r4   r4   r4   r5   <module>   s(    $ )