
    jR                        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rd d	lmZ d d
lmZ d dlmZ d0dZ	 	 	 	 	 	 d1d2d!Z	 d3d4d$Zd5d%Zd5d&Zd'd(d6d,Zd7d-Zd8d/ZdS )9    )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                    ddl }	 |                                }ddl}|j        j                                         |                    |           S # t          $ r |                    |           cY S w xY w)z/Run asynchronous code as if it was synchronous.r   N)	asyncioget_running_looppolars._utils.nest_asyncio_utilsnest_asyncioapplyrun_until_completeRuntimeErrorrun)r   r   running_looppolarss       ^/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/polars/io/database/_utils.py
_run_asyncr      s    NNN
3//11 	*)))"((***..r222    {{2s   A A32A3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                x   t          d          }t          |j                  dk     r|rd}	t          |	          d}
i }nd}
d|i}	  |j        d|| |
||||d|}nN# t
          $ rA}t          j        dd	t          |                    } t          |          |          |d }~ww xY wt          ||
          S )N
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	   __version__
ValueErrorread_sqlBaseExceptionresubr#   typer
   )r    r"   r$   r&   r(   r*   r+   r-   cxmsgr6   pre_execution_argstblerrerrmsgs                  r   _read_sql_connectorxrF   $   s
    
	&	&BR^$$y00 	"`CS//!35HI)bk 	
#%+'	
 	
 !	
 	
  ) ) ))=#c((CCd3iiS()
 c,<====s   A 
B('<B##B(execute_optionsdict[str, Any] | Nonec                Z   t          |          }t          |d           t          d          }t          |dd          }t	          |          }d}|t	          |          k    }	|!t
          s|	sd| d| d	}
t          |
          |d
k    rdnd}t          |          5 }|                                5 } |j	        | fi |pi   t          ||                      }t          ||          cd d d            cd d d            S # 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NFdbapi_submoduleadbc_driver_managerr9   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   fetch_arrowfetch_arrow_tabler7   )_get_adbc_module_name_from_uri_import_optional_adbc_driverr   getattrr	   r   r   _open_adbc_connectioncursorexecuter
   )r    r"   r+   rG   module_namerL   adbc_str_versionadbc_version adbc_version_no_pyarrow_requiredhas_required_adbc_versionrA   fetch_method_namer5   rW   rC   s                  r   _read_sql_adbcr_   M   sQ    1@@K eDDDD)*?@@2M5II !122L (/$ ,(1 1 !
 	#" 	$) 	$
E/E E)9E E E 	 )--- &228K  
~	.	. B$ Bu88!6B8880gf/0022#0@AAAB B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B Bs6   !D 69D/D D	D D	D  D$'D$c                    |                      dd          d                                         }ddi}|                    ||          S )N:rO   r   postgres
postgresql)splitlowerget)r"   driver_namedriver_suffix_maps      r   _get_adbc_driver_name_from_uriri   {   sI     &&sA..q17799K)3\(B  k:::    c                *    t          |           }d| S )Nadbc_driver_)ri   )r"   rg   s     r   rS   rS      s    0@@K'+'''rj   TrJ   rY   rK   boolc          
     N   t          | ddd| dk    rdn|                     dd           d	          }|s|S 	 t          |  d
          }|S # t          $ rM}dt	          |          v r6t          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 adbc_driver_duckdbduckdb_-zY or install the driver with the `dbc` command line tool (https://docs.columnar.tech/dbc/))
err_prefix
err_suffixinstall_messagez.dbapiz6PyArrow is required for the DBAPI-compatible interfacerL   r9   rM   z;pyarrow is required for adbc-driver-manager < 1.6.0, found rN   )r   replacer   ImportErrorr#   rU   r   )rY   rK   adbc_driveradbc_driver_dbapierL   rZ   rA   s           r   rT   rT      s    "(g&*>>>xxKDWDWX[]`DaDag g g
 
 
K  !)[*@*@*@AA !     CAOO"12G"H"H&':M5QQ$#$ $ $ 
 -S11t;s   A 
B$ABB$c                    t          |           }t          |           }t          |          }|dv rt          j        d| dd|           } |                    |           S )N)rq   	snowflakesqlite^z:/{,3} )ri   rS   rT   r=   r>   connect)r"   rg   rY   ry   s       r   rV   rV      sj    0@@K0@@K.{;;K 777 9K 9 9 92~NN~...rj   r5   c                >   dd l }t          r.d|                                 d                                         v S 	 t	          d          }d| j                            |j        j        j	                                                  v S # t          |j        f$ r Y dS w xY w)Nr   r}   vendor_nameadbc_driver_snowflakeF)rL   r   adbc_get_infore   r   adbc_database
get_optionDatabaseOptionsHOSTvaluerx   Error)r5   rL   r   s      r   _is_adbc_snowflake_connr      s      Jd0022=AGGIIII
 /0G H H !,,%5:@ egg	
 ,23   uus   AB BB)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,   rG   rH   r   r   )r"   r#   r   r#   )rY   r#   rK   rm   r   r   )r"   r#   r   r   )r5   r   r   rm   )
__future__r   r=   	importlibr   typingr   r   polars._dependenciesr   r   polars._utils.variousr	   polars.convertr
   polars.exceptionsr   collections.abcr   r   r   polars._typingr   r   rF   r_   ri   rS   rT   rV   r   r8   rj   r   <module>r      s   " " " " " " 				 # # # # # # % % % % % % % % D D D D D D D D / / / / / / % % % % % % 8 8 8 8 8 8 *))))))      ))))))3 3 3 3(  $.2 $*.26&> &> &> &> &>Z .2	+B +B +B +B +B\; ; ; ;( ( ( ( !(! (! (! (! (! (!V	/ 	/ 	/ 	/     rj   