
    .h                       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	 d dl
mZ d dlmZ d dlmZ erd d	lmZ d d
lmZ d dlmZ ddZ	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 d	 	 	 	 	 	 	 	 	 ddZddZddZdd	 	 	 	 	 ddZddZy)    )annotationsN)import_module)TYPE_CHECKINGAny)import_optional)parse_version)
from_arrow)ModuleUpgradeRequiredError)	Coroutine)	DataFrame)
SchemaDictc                |    ddl }ddl}|j                  j                  j	                          |j                  |       S )z/Run asynchronous code as if it was synchronous.r   N)asynciopolars._utils.nest_asyncio_utilsnest_asyncioapplyrun)cor   polarss      W/var/www/html/ai-service/venv/lib/python3.12/site-packages/polars/io/database/_utils.py
_run_asyncr      s,    %
MM$$&;;r?    c                R   t        d      }t        |j                        dk  r|rd}	t        |	      d}
i }nd}
d|i}	  |j                  d|| |
||||d|}t        ||
      S # t
        $ r7}t        j                  dd	t        |            } t        |      |      |d }~ww xY w)N
connectorx)r         zL'pre_execution_query' is only supported in connectorx version 0.4.2 or laterarrow2arrowpre_execution_query)connqueryreturn_typepartition_onpartition_rangepartition_numprotocolz://[^:]+:[^:]+@z://***:***@schema_overrides )r   r   __version__
ValueErrorread_sqlBaseExceptionresubstrtyper	   )r"   connection_urir$   r%   r&   r'   r)   r    cxmsgr#   pre_execution_argstblerrerrmsgs                  r   _read_sql_connectorxr:      s     
	&BR^^$y0`CS/!35HI)bkk 	
#%+'	
 !	
 c,<==  ))=#c(Cd3iS()s   A& &	B&/2B!!B&c                    t        |      5 }|j                         5 } |j                  | fi |xs i  |j                         }d d d        d d d        t	        |      S # 1 sw Y   xY w# 1 sw Y   "xY w)Nr(   )_open_adbc_connectioncursorexecutefetch_arrow_tabler	   )r"   r3   r)   execute_optionsr!   r=   r7   s          r   _read_sql_adbcrA   F   sx     
~	. )$ )u8!6B8&&() ) c,<==) ) ) )s"   A.(A"A."A+	'A..A7c                t    | j                  dd      d   j                         }ddi}|j                  ||      S )N:   r   postgres
postgresql)splitlowerget)r3   driver_namedriver_suffix_maps      r   _get_adbc_driver_name_from_urirL   R   s@     &&sA.q1779K)3\(B  k::r   c                "    t        |       }d| S )Nadbc_driver_)rL   )r3   rJ   s     r   _get_adbc_module_name_from_urirO   Y   s    0@K+''r   T)dbapi_submodulec          
        t        | ddd| j                  dd             }|s|S 	 t        |  d      }|S # t        $ r=}dt	        |      v r*t        d	      }t        |d
d      }d| d}t        |      d  d }~ww xY w)NADBCzdriver not detectedz8If ADBC supports this database, please run: pip install _-)
err_prefix
err_suffixinstall_messagez.dbapiz6PyArrow is required for the DBAPI-compatible interfaceadbc_driver_managerr+   z0.0z;pyarrow is required for adbc-driver-manager < 1.6.0, found zG.
Either upgrade `adbc-driver-manager` (suggested) or install `pyarrow`)r   replacer   ImportErrorr1   getattrr
   )module_namerP   adbc_driveradbc_driver_dbapierX   adbc_str_versionr5   s           r   _import_optional_adbc_driverra   ^   s     "(F""3,-/K !)[M*@A !   CAO"12G"H&':M5Q N#$ %$$ 
 -S1t;s   8 	A>8A99A>c                    t        |       }t        |       }t        |      }|dv rt        j                  d| dd|       } |j                  |       S )N)duckdb	snowflakesqlite^z:/{,3} )rL   rO   ra   r/   r0   connect)r3   rJ   r\   r]   s       r   r<   r<      sW    0@K0@K.{;K 77!K= 92~N~..r   )r   zCoroutine[Any, Any, Any]returnr   )NNNNNN)r"   zstr | list[str]r3   r1   r$   
str | Noner%   ztuple[int, int] | Noner&   z
int | Noner'   rj   r)   SchemaDict | Noner    zstr | list[str] | Noneri   r   )N)
r"   r1   r3   r1   r)   rk   r@   zdict[str, Any] | Noneri   r   )r3   r1   ri   r1   )r\   r1   rP   boolri   r   )r3   r1   ri   r   )
__future__r   r/   	importlibr   typingr   r   polars._dependenciesr   polars._utils.variousr   polars.convertr	   polars.exceptionsr
   collections.abcr   r   r   polars._typingr   r   r:   rA   rL   rO   ra   r<   r*   r   r   <module>rv      s   " 	 # % 0 / % 8) )  $.2 $*.26&>&>&> &> ,	&>
 &> &> (&> 0&> &>Z .2		>	>	> (	> +		>
 	>;( !&!&! &! 		&!R	/r   