o
    i_                     @  s   d dl mZ d dlZd dlmZ d dlmZ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rFd d	lmZ d d
lmZ d dlmZ d8ddZ						d9d:d"d#Z	d;d<d&d'Zd=d(d)Zd=d*d+Zd,d-d>d1d2Zd?d3d4Zd@d6d7ZdS )A    )annotationsN)import_module)TYPE_CHECKINGAny)_PYARROW_AVAILABLEimport_optional)parse_version)
from_arrow)ModuleUpgradeRequiredError)	Coroutine)	DataFrame)
SchemaDictcoCoroutine[Any, Any, Any]returnr   c                 C  sP   ddl }z| }W n ty   ||  Y S w ddl}|jj  || S )z/Run asynchronous code as if it was synchronous.r   N)	asyncioget_running_loopRuntimeErrorrunZpolars._utils.nest_asyncio_utilsZnest_asyncioapplyrun_until_complete)r   r   running_looppolars r   P/home/app/Keep/.python/lib/python3.10/site-packages/polars/io/database/_utils.py
_run_async   s   
r   querystr | list[str]connection_uristrpartition_on
str | Nonepartition_rangetuple[int, int] | Nonepartition_num
int | Noneprotocolschema_overridesSchemaDict | Nonepre_execution_querystr | list[str] | Noner   c              
   C  s   t d}t|jdk r|rd}	t|	d}
i }nd}
d|i}z|jd|| |
||||d|}W n tyL } ztdd	t|}t	|||d }~ww t
||d
S )NZ
connectorx)r         zL'pre_execution_query' is only supported in connectorx version 0.4.2 or laterarrow2arrowr*   )connr   return_typer!   r#   r%   r'   z://[^:]+:[^:]+@z://***:***@r(   r   )r   r   __version__
ValueErrorZread_sqlBaseExceptionresubr    typer	   )r   r   r!   r#   r%   r'   r(   r*   Zcxmsgr1   Zpre_execution_argstblerrerrmsgr   r   r   _read_sql_connectorx$   s6   


r=   execute_optionsdict[str, Any] | Nonec              	   C  s  t |}t|dd td}t|dd}t|}d}|t|k}	|d ur5ts5|	s5d| d| d	}
t|
|d
kr;dnd}t|;}| &}|j	| fi |pOi  t|| }t
||dW  d    W  d    S 1 sow   Y  W d    d S 1 sw   Y  d S )NFdbapi_submoduleadbc_driver_managerr3   0.0z1.7.0z.pyarrow is required for adbc-driver-manager < zA when using parameterized queries (via `execute_options`), found G.
Either upgrade `adbc-driver-manager` (suggested) or install `pyarrow`)      r   Zfetch_arrowZfetch_arrow_tabler2   )_get_adbc_module_name_from_uri_import_optional_adbc_driverr   getattrr   r   r
   _open_adbc_connectioncursorexecuter	   )r   r   r(   r>   module_namerB   adbc_str_versionZadbc_versionZ adbc_version_no_pyarrow_requiredZhas_required_adbc_versionr9   Zfetch_method_namer0   rK   r:   r   r   r   _read_sql_adbcM   s8   
RrO   c                 C  s(   |  ddd  }ddi}|||S )N:rE   r   postgres
postgresql)splitlowerget)r   driver_nameZdriver_suffix_mapr   r   r   _get_adbc_driver_name_from_uri{   s   rW   c                 C  s   t | }d| S )NZadbc_driver_)rW   )r   rV   r   r   r   rG      s   
rG   Tr@   rM   rA   boolc             
   C  s   t | ddd| dd d}|s|S z
t|  d}W |S  tyE } zdt|v r@t d	}t|d
d}d| d}t|d  d }~ww )NZADBCzdriver not detectedz8If ADBC supports this database, please run: pip install _-)Z
err_prefixZ
err_suffixZinstall_messagez.dbapiz6PyArrow is required for the DBAPI-compatible interfacerB   r3   rC   z;pyarrow is required for adbc-driver-manager < 1.6.0, found rD   )r   replacer   ImportErrorr    rI   r
   )rM   rA   adbc_driverZadbc_driver_dbapierB   rN   r9   r   r   r   rH      s2   
	
rH   c                 C  s@   t | }t| }t|}|dv rtd| dd| } || S )N)Zduckdb	snowflakeZsqlite^z:/{,3} )rW   rG   rH   r6   r7   connect)r   rV   rM   r]   r   r   r   rJ      s   
rJ   r0   c              	   C  s`   dd l }trd|  d  v S ztd}d| j|jjj	 v W S  t
|jfy/   Y dS w )Nr   r_   Zvendor_nameadbc_driver_snowflakeF)rB   r   Zadbc_get_inforT   r   Zadbc_database
get_optionZDatabaseOptionsZHOSTvaluer\   Error)r0   rB   rc   r   r   r   _is_adbc_snowflake_conn   s   rg   )r   r   r   r   )NNNNNN)r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r"   r(   r)   r*   r+   r   r   )N)
r   r    r   r    r(   r)   r>   r?   r   r   )r   r    r   r    )rM   r    rA   rX   r   r   )r   r    r   r   )r0   r   r   rX   )
__future__r   r6   	importlibr   typingr   r   Zpolars._dependenciesr   r   Zpolars._utils.variousr   Zpolars.convertr	   Zpolars.exceptionsr
   collections.abcr   r   r   Zpolars._typingr   r   r=   rO   rW   rG   rH   rJ   rg   r   r   r   r   <module>   s8    
-
.

)