a
    é´«jc4 ã                   @  sÔ  d dl mZ d dlZd dlmZ d dlZd dlmZmZmZmZ d dl	m
Z
 d dlmZ d dlZd dlmZ d dlZd dlZd dl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  mZ  d dl!Z"d dl!m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-m.Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; e�rXd dl<Z<ej= >d¡ej=j?gZ@ejAdd„ ƒZBdd„ ZCddœdd„ZDddœdd„ZEddœdd„ZFdd„ ZGdd œd!d"„ZHd#d$œd%d&„ZId#d$œd'd(„ZJd#dd)œd*d+„ZKd,d-„ ZLd.d/œd0d1„ZMdd2œd3d4„ZNejAd5d6„ ƒZOejAd7d8„ ƒZPejAd9d:„ ƒZQejAd;d<„ ƒZRejAd=d>„ ƒZSd?d@„ ZTdAdB„ ZUddCdDœdEdF„ZVddCdGœdHdI„ZWejAdJdK„ ƒZXejAdLdM„ ƒZYejAdNdO„ ƒZZejAdPdQ„ ƒZ[ejAdRdS„ ƒZ\ejAdTdU„ ƒZ]ejAdVdW„ ƒZ^ejAdXdY„ ƒZ_ejAdZd[„ ƒZ`ejAd\d]„ ƒZaejAd^d_„ ƒZbejAd`da„ ƒZcejAdbdc„ ƒZdejAddde„ ƒZeejAdfdg„ ƒZfejAdhdi„ ƒZgejAdjdk„ ƒZhejAdldm„ ƒZiejAdndo„ ƒZjejAdpdq„ ƒZkejAdrds„ ƒZlejAdtdu„ ƒZmejAdvdw„ ƒZnejAdxdy„ ƒZoejAdzd{„ ƒZpejAd|d}„ ƒZqejAd~d„ ƒZrejAd€d�„ ƒZsejAd‚dƒ„ ƒZtejAd„d…„ ƒZuejvdKej=jwd†�ejvdQej=jwd†�gZxejvdMej=jwd†�ejvdSej=jwd†�gZyejvdOej=jwd†�ejvdUej=jwd†�gZzejvdWej=jwd†�ejvd]ej=jwd†�gZ{ejvdYej=jwd†�ejvdeej=jwd†�gZ|ejvd[ej=jwd†�ejvdgej=jwd†�gZ}g d‡¢Z~g dˆ¢Zg d‰¢Z€exe{ e~ Z�eye| e Z‚eze} e€ Zƒd{ejvd_ej=jwd†�gZ„ejvdaej=jwd†�d}gZ…ejvdcej=jwd†�dgZ†e�d�g e„ Z‡e‚dƒg e… Zˆeƒd…g e† Z‰ej= ŠdŠe‡¡d‹dŒ„ ƒZ‹ej= ŠdŠe‡¡d�dŽ„ ƒZŒej= ŠdŠe‡¡d�d�„ ƒZ�ej= ŠdŠe‡¡d‘d’„ ƒZŽej= ŠdŠe‡¡ej= Šd“dd”g¡d•d–„ ƒƒZ�ej= ŠdŠe‡¡ej= Šd—d˜d™g¡dšd›„ ƒƒZ�ej= ŠdŠe‡¡dœd�„ ƒZ‘ej= ŠdŠeˆ¡dždŸ„ ƒZ’ej= ŠdŠeˆ¡d d¡„ ƒZ“ej= ŠdŠe‚¡d¢d£„ ƒZ”ej= ŠdŠeˆ¡d¤d¥„ ƒZ•ej= ŠdŠe‚¡d¦d§„ ƒZ–ej= ŠdŠe‚¡d¨d©„ ƒZ—ej= ŠdŠe�¡dªd«„ ƒZ˜ej= ŠdŠe‰¡d¬d­„ ƒZ™ej= ŠdŠex¡d®d¯„ ƒZšej= ŠdŠe{¡ej= Šd°d±d²g¡d³d´„ ƒƒZ›ej= ŠdŠe{¡dµd¶„ ƒZœej= ŠdŠe‡¡d·d¸„ ƒZ�ej= ŠdŠex¡d¹dº„ ƒZžej= ŠdŠe{¡d»d¼„ ƒZŸd½d¾„ Z d¿dÀ„ Z¡dÁdÂ„ Z¢dÃdÄ„ Z£ej= ŠdŠeˆ¡dÅdÆ„ ƒZ¤ej= ŠdŠeˆ¡dÇdÈ„ ƒZ¥ej= ŠdŠeˆ¡dÉdÊ„ ƒZ¦ej= ŠdŠeˆ¡dËdÌ„ ƒZ§ej= ŠdŠeˆ¡dÍdÎ„ ƒZ¨ej= ŠdŠe‡¡dÏdÐ„ ƒZ©ej= ŠdŠe‡¡dÑdÒ„ ƒZªej= ŠdŠe‡¡dÓdÔ„ ƒZ«ej= ŠdŠe‡¡dÕdÖ„ ƒZ¬ej= ŠdŠe‡¡d×dØ„ ƒZ­ej= ŠdŠe‡¡dÙdÚ„ ƒZ®ej= ŠdŠe‡¡dÛdÜ„ ƒZ¯ej= ŠdŠe‡¡dÝdÞ„ ƒZ°ej= ŠdŠeˆ¡dßdà„ ƒZ±ej= ŠdŠe‰¡dádâ„ ƒZ²ej= ŠdŠe‰¡ej= Šdãg dä¢¡ej= Šdåe3j³dædçfe3j³dèdéfe3j:dædçfe3j;dèdéfg¡dêdë„ ƒƒƒZ´ej= ŠdŠe‰¡dìdí„ ƒZµej= ŠdŠe‡¡dîdï„ ƒZ¶ej= ŠdŠe‡¡dðdñ„ ƒZ·ej= ŠdŠe‡¡ej= Šdòg dó¢¡dôdõ„ ƒƒZ¸ej= ŠdŠe‡¡död÷„ ƒZ¹ej= ŠdŠe‡¡dødù„ ƒZºej= ŠdŠe‡¡ej= Šdúde»e¼e»e¼dûœg¡düdý„ ƒƒZ½ej= ŠdŠe‡¡dþdÿ„ ƒZ¾ej= ŠdŠe‡¡�d �d„ ƒZ¿ej= ŠdŠe‡¡�d�d„ ƒZÀej= ŠdŠe‡¡�d�d„ ƒZÁej= ŠdŠe‡¡�d�d„ ƒZÂej= ŠdŠe‡¡�d�d	„ ƒZÃej= ŠdŠe‡¡�d
�d„ ƒZÄej= ŠdŠe‡¡�d�d„ ƒZÅej= ŠdŠe‡¡�d�d„ ƒZÆej= ŠdŠe‡¡�d�d„ ƒZÇej= ŠdŠe‡¡�d�d„ ƒZÈej= ŠdŠe‡¡�d�d„ ƒZÉej= ŠdŠeˆ¡�d�d„ ƒZÊ�d�d„ ZËej= ŠdŠe‡¡�d�d„ ƒZÌej= ŠdŠe�¡�d�d„ ƒZÍej= ŠdŠe�¡ej= Š�d�d�d �d!�d"�d#�d$�d%�d&�d'�d(�d)�d*�d+�d,e»e Îe»¡jÏ�d-k�r8�d.n�d/fg¡�d0�d1„ ƒƒZÐej= ŠdŠe�¡ej= Š�d2�d3�d4g¡�d5�d6„ ƒƒZÑej= ŠdŠe‡¡�d7�d8„ ƒZÒe  Ó�d9¡ej= ŠdŠe‡¡�d:�d;„ ƒƒZÔej= ŠdŠe‚¡�d<�d=„ ƒZÕej= ŠdŠe‚¡�d>�d?„ ƒZÖej= ŠdŠe‡¡�d@�dA„ ƒZ×�dB�dC„ ZØe  Ódé¡�dD�dE„ ƒZÙe  Ódé¡�dF�dG„ ƒZÚ�dH�dI„ ZÛ�dJ�dK„ ZÜ�dL�dM„ ZÝej= ŠdŠe�¡�dN�dO„ ƒZÞej= ŠdŠe�¡�dP�dQ„ ƒZßej= ŠdŠe‡¡�dR�dS„ ƒZàej= ŠdŠeˆ¡�dT�dU„ ƒZáej= ŠdŠe‚¡�dV�dW„ ƒZâej= ŠdŠe‚¡�dX�dY„ ƒZãej= ŠdŠe‚¡�dZ�d[„ ƒZäej= ŠdŠeƒ¡�d\�d]„ ƒZåej= ŠdŠe�¡�d^�d_„ ƒZæej= ŠdŠeƒ¡�d`�da„ ƒZçej= ŠdŠe{¡ej= Š�dbd�dcgg¡�dd�de„ ƒƒZèej= ŠdŠe{¡�df�dg„ ƒZéej= ŠdŠe{¡�dh�di„ ƒZêej= ŠdŠe�¡�dj�dk„ ƒZëej= ŠdŠe�¡�dl�dm„ ƒZìej= ŠdŠe�¡�dn�do„ ƒZíej= ŠdŠeƒ¡�dp�dq„ ƒZîej= ŠdŠe�¡�dr�ds„ ƒZïej= ŠdŠe�¡�dt�du„ ƒZðej= ŠdŠe�¡�dv�dw„ ƒZñej= ŠdŠe�¡�dx�dy„ ƒZòej= ŠdŠe�¡�dz�d{„ ƒZóej= ŠdŠe�¡�d|�d}„ ƒZôej= ŠdŠe�¡�d~�d„ ƒZõej= ŠdŠe�¡�d€�d�„ ƒZöej= ŠdŠe‡¡�d‚�dƒ„ ƒZ÷ej= ŠdŠe‡¡�d„�d…„ ƒZøej= ŠdŠe‡¡�d†�d‡„ ƒZùej= ŠdŠe�¡�dˆ�d‰„ ƒZúej= ŠdŠe�¡�dŠ�d‹„ ƒZûej= ŠdŠe�¡�dŒ�d�„ ƒZüej= ŠdŠe�¡�dŽ�d�„ ƒZýej= ŠdŠe�¡�d��d‘„ ƒZþej= ŠdŠe�¡ej= Š�d’�d“ejÿgi�d“ejÿ giejÿ g�d”g�d•œg¡�d–�d—„ ƒƒ�Z ej= ŠdŠe�¡�d˜�d™„ ƒ�Zej= ŠdŠe‡¡�dš�d›„ ƒ�Zej= ŠdŠe‡¡�dœ�d�„ ƒ�Zej= ŠdŠe�¡�dž�dŸ„ ƒ�Zej= ŠdŠe‡¡�d �d¡„ ƒ�Z�d¢�d£„ �Z�d¤�d¥„ �Zej= ŠdŠe‡¡ej= Š�d¦�d§�d¨g¡�d©�dª„ ƒƒ�Zej= ŠdŠe‡¡ej= Š�d¦�d§�d«g¡�d¬�d­„ ƒƒ�Z	ej= ŠdŠe‡¡ej= Š�d¦g �d®¢¡�d¯�d°„ ƒƒ�Z
ejAd.�d±œ�d²�d³„ƒ�ZejA�d´�dµ„ ƒ�Zej= ŠdŠe‡¡�d¶�d·„ ƒ�Zej= ŠdŠe‡¡ej= Š�d¸e�j�d¹g¡ej= Š�d¦�d§�d¨g¡�dº�d»„ ƒƒƒ�Z�d¼�d½„ �Z�d¾�d¿„ �Z�dÀ�dÁ„ �Z�dÂ�dÃ„ �Z�dÄ�dÅ„ �Z�dÆ�dÇ„ �ZejA�dÈ�dÉ„ ƒ�Z�dÊ�dË„ �Zej=jw�dÌ�dÍ„ ƒ�Zej=jw�dÎ�dÏ„ ƒ�Z�dÐ�dÑ„ �Z�dÒ�dÓ„ �Zej= Š�dÔ�dÕ�dÖg¡�d×�dØ„ ƒ�Z�dÙ�dÚ„ �Z�dÛ�dÜ„ �Z�dÝ�dÞ„ �Z�dß�dà„ �Z �dá�dâ„ �Z!�d÷�dã�dä„�Z"�då�dæ„ �Z#�dç�dè„ �Z$�dé�dê„ �Z%�dë�dì„ �Z&�dí�dî„ �Z'�dï�dð„ �Z(�dñ�dò„ �Z)�dó�dô„ �Z*�dõ�dö„ �Z+dS (ø  é    )ÚannotationsN)Úclosing)ÚdateÚdatetimeÚtimeÚ	timedelta)ÚStringIO©ÚPath)ÚTYPE_CHECKING)Úusing_string_dtype)Úlib)Úpa_version_under13p0Úpa_version_under14p1)Úimport_optional_dependency)
Ú	DataFrameÚIndexÚ
MultiIndexÚSeriesÚ	TimestampÚconcatÚ
date_rangeÚisnaÚto_datetimeÚto_timedelta)ÚVersion)Úsql)ÚSQLAlchemyEngineÚSQLDatabaseÚSQLiteDatabaseÚ
get_engineÚpandasSQL_builderÚread_sql_queryÚread_sql_tablez=ignore:Passing a BlockManager to DataFrame:DeprecationWarningc                   C  s$   ddddœddddœdd	d
dœdœS )Nz1SELECT * FROM iris WHERE Name=? AND SepalLength=?z7SELECT * FROM iris WHERE `Name`=%s AND `SepalLength`=%sz7SELECT * FROM iris WHERE "Name"=%s AND "SepalLength"=%s)ÚsqliteÚmysqlÚ
postgresqlz]
                SELECT * FROM iris WHERE Name=:name AND SepalLength=:length
                zw
                SELECT * FROM iris WHERE
                `Name`=%(name)s AND `SepalLength`=%(length)s
                zw
                SELECT * FROM iris WHERE
                "Name"=%(name)s AND "SepalLength"=%(length)s
                z&SELECT * FROM iris WHERE Name LIKE '%'z(SELECT * FROM iris WHERE `Name` LIKE '%'z(SELECT * FROM iris WHERE "Name" LIKE '%')Úread_parametersÚread_named_parametersÚread_no_parameters_with_percent© r*   r*   r*   úW/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/pandas/tests/io/test_sql.pyÚsql_stringsF   s    ýøýír,   c            
      C  s‚   dd l } ddl m}m}m}m}m}m} t| jƒtdƒkr>|n|}|ƒ }|d||d|ƒ|d|ƒ|d|ƒ|d|ƒ|d	|d
ƒƒƒ}	|	S )Nr   )ÚColumnÚDoubleÚFloatÚMetaDataÚStringÚTablez2.0.0ÚirisÚSepalLengthÚ
SepalWidthZPetalLengthZ
PetalWidthÚNameéÈ   )	Ú
sqlalchemyr-   r.   r/   r0   r1   r2   r   Ú__version__)
r8   r-   r.   r/   r0   r1   r2   ÚdtypeÚmetadatar3   r*   r*   r+   Úiris_table_metadatac   s     	ù	r<   r
   )Ú	iris_filec                 C  sŒ   d}|   ¡ }| |¡ |jd dd��D}t |¡}t|ƒ d}g }dd„ |D ƒ}| ||¡ W d   ƒ n1 sn0    Y  | ¡  |  ¡  d S )Nz³CREATE TABLE iris (
            "SepalLength" REAL,
            "SepalWidth" REAL,
            "PetalLength" REAL,
            "PetalWidth" REAL,
            "Name" TEXT
        )úutf-8©ÚnewlineÚencodingz&INSERT INTO iris VALUES(?, ?, ?, ?, ?)c                 S  s>   g | ]6}t |d  ƒt |d ƒt |d ƒt |d ƒ|d f‘qS ©r   é   é   é   é   ©Úfloat©Ú.0Úrowr*   r*   r+   Ú
<listcomp>�   s   ú



ûz0create_and_load_iris_sqlite3.<locals>.<listcomp>)	ÚcursorÚexecuteÚopenÚcsvÚreaderÚnextÚexecutemanyÚcloseÚcommit©Úconnr=   ÚstmtÚcurÚcsvfilerQ   Úrecordsr*   r*   r+   Úcreate_and_load_iris_sqlite3|   s    

ø*r\   c              	   C  s    d}|   ¡ �x}| |¡ |jd dd��@}t |¡}t|ƒ d}dd„ |D ƒ}| ||¡ W d   ƒ n1 sl0    Y  W d   ƒ n1 sŠ0    Y  |  ¡  d S )NzãCREATE TABLE iris (
            "SepalLength" DOUBLE PRECISION,
            "SepalWidth" DOUBLE PRECISION,
            "PetalLength" DOUBLE PRECISION,
            "PetalWidth" DOUBLE PRECISION,
            "Name" TEXT
        )r>   r?   z+INSERT INTO iris VALUES($1, $2, $3, $4, $5)c                 S  s>   g | ]6}t |d  ƒt |d ƒt |d ƒt |d ƒ|d f‘qS rB   rG   rI   r*   r*   r+   rL   ­   s   ú



ûz3create_and_load_iris_postgresql.<locals>.<listcomp>)rM   rN   rO   rP   rQ   rR   rS   rU   rV   r*   r*   r+   Úcreate_and_load_iris_postgresqlž   s    


øHr]   c           	   	     sÂ   ddl m} tƒ }|jd dd��Ž}t |¡}t|ƒ‰ ‡ fdd„|D ƒ}||ƒ |¡}|  ¡ �4}|j	|dd� |j
|d	� | |¡ W d   ƒ n1 s–0    Y  W d   ƒ n1 s´0    Y  d S )
Nr   ©Úinsertr>   r?   c                   s   g | ]}t tˆ |ƒƒ‘qS r*   ©ÚdictÚziprI   ©Úheaderr*   r+   rL   Å   ó    z(create_and_load_iris.<locals>.<listcomp>T©Z
checkfirst©Úbind)r8   r_   r<   rO   rP   rQ   rR   ÚvaluesÚbeginÚdropÚcreaterN   )	rW   r=   r_   r3   rZ   rQ   ÚparamsrX   Úconr*   rc   r+   Úcreate_and_load_iris½   s    

ro   c                 C  sÆ   d}t | tjƒr$|  ¡ }| |¡ nžtddd�}|r|t | |jƒr||  ¡ �}| |¡ W d   ƒ n1 sh0    Y  |  ¡  nFddlm} ||ƒ}|  	¡ �}| |¡ W d   ƒ n1 s¸0    Y  d S )Nz+CREATE VIEW iris_view AS SELECT * FROM irisúadbc_driver_manager.dbapiÚignore©Úerrorsr   ©Útext)
Ú
isinstanceÚsqlite3Ú
ConnectionrM   rN   r   rU   r8   ru   rj   )rW   rX   rY   Úadbcru   rn   r*   r*   r+   Úcreate_and_load_iris_viewÍ   s    
(

rz   Ústr)Údialectc                 C  s¤   ddl m}m}m}m}m}m}m}m} | dkr4|n|}	| dkrD|n|}
|ƒ }|d||d|ƒ|d|	ƒ|d|ƒ|d|ƒ|d	|ƒ|d
|ƒ|d|
ƒ|d|ƒ|d|
ƒƒ}|S )Nr   )ÚTEXTÚBooleanr-   ÚDateTimer/   ÚIntegerr0   r2   r$   ÚtypesÚTextColÚDateColÚ
IntDateColÚIntDateOnlyColÚFloatColÚIntColÚBoolColÚIntColWithNullÚBoolColWithNull)	r8   r}   r~   r-   r   r/   r€   r0   r2   )r|   r}   r~   r-   r   r/   r€   r0   r2   Z	date_typeZ	bool_typer;   r�   r*   r*   r+   Útypes_table_metadataà   s$    (õr‹   z
list[dict])Ú
types_datac                 C  s~   d}d}t | tjƒr4|  ¡ }| |¡ | ||¡ nF|  ¡ �&}| |¡ | ||¡ W d   ƒ n1 sh0    Y  |  ¡  d S )Na”  CREATE TABLE types (
                    "TextCol" TEXT,
                    "DateCol" TEXT,
                    "IntDateCol" INTEGER,
                    "IntDateOnlyCol" INTEGER,
                    "FloatCol" REAL,
                    "IntCol" INTEGER,
                    "BoolCol" INTEGER,
                    "IntColWithNull" INTEGER,
                    "BoolColWithNull" INTEGER
                )ze
                INSERT INTO types
                VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)
                )rv   rw   rx   rM   rN   rS   rU   )rW   rŒ   rX   Zins_stmtrY   r*   r*   r+   Úcreate_and_load_types_sqlite3ÿ   s    


*r�   c                 C  sR   |   ¡ �.}d}| |¡ d}| ||¡ W d   ƒ n1 s<0    Y  |  ¡  d S )NaÍ  CREATE TABLE types (
                        "TextCol" TEXT,
                        "DateCol" TIMESTAMP,
                        "IntDateCol" INTEGER,
                        "IntDateOnlyCol" INTEGER,
                        "FloatCol" DOUBLE PRECISION,
                        "IntCol" INTEGER,
                        "BoolCol" BOOLEAN,
                        "IntColWithNull" INTEGER,
                        "BoolColWithNull" BOOLEAN
                    )zy
                INSERT INTO types
                VALUES($1, $2::timestamp, $3, $4, $5, $6, $7, $8, $9)
                )rM   rN   rS   rU   )rW   rŒ   rY   rX   r*   r*   r+   Ú create_and_load_types_postgresql  s    

*rŽ   )rŒ   r|   c              	   C  sþ   ddl m} ddlm} t|ƒ}||ƒ |¡}t| |ƒr®|  ¡ �\} |  ¡ �4 |j	| dd� |j
| d� |  |¡ W d   ƒ n1 s„0    Y  W d   ƒ qú1 s¢0    Y  nL|  ¡ �4 |j	| dd� |j
| d� |  |¡ W d   ƒ n1 sð0    Y  d S )Nr   r^   ©ÚEngineTrf   rg   )r8   r_   Úsqlalchemy.enginer�   r‹   ri   rv   Úconnectrj   rk   rl   rN   )rW   rŒ   r|   r_   r�   r�   rX   r*   r*   r+   Úcreate_and_load_types6  s    


H
r“   c              	   C  sV  ddl m}m}m}m}m} ddlm} |ƒ }|d||d|dd�ƒƒ}ddidd	ig}	||ƒ |	¡}
t	| |ƒrä|  
¡ �\} |  ¡ �4 |j| dd
� |j| d� |  |
¡ W d   ƒ n1 sº0    Y  W d   ƒ n1 sØ0    Y  nN|  ¡ �4 |j| dd
� |j| d� |  |
¡ W d   ƒ n1 �s(0    Y  tddd�tddd�g}t|dd�S )Nr   )r-   r   r0   r2   r_   r�   ÚdatetzÚDateColWithTzT)Útimezonez2000-01-01 00:00:00-08:00z2000-06-01 00:00:00-07:00rf   rg   z2000-01-01 08:00:00ÚUTC©Útzz2000-06-01 07:00:00©Úname)r8   r-   r   r0   r2   r_   r‘   r�   ri   rv   r’   rj   rk   rl   rN   r   r   )rW   r-   r   r0   r2   r_   r�   r;   r”   Zdatetz_datarX   Zexpected_datar*   r*   r+   Úcreate_and_load_postgres_datetzJ  s0    ÿÿü


H
*

þrœ   r   ©Úframec                 C  sV   | j jd j}| jd }t|tjƒs(J ‚t |tg d¢| j	dd�¡ | j
dv sRJ ‚d S )Nr   ©çffffff@g      @gffffffö?çš™™™™™É?úIris-setosa)Úindexr›   ))é–   é   )é   r¥   )ÚdtypesÚilocÚtypeÚ
issubclassÚnpÚfloatingÚtmÚassert_series_equalr   ÚcolumnsÚshape)rž   ZpytyperK   r*   r*   r+   Úcheck_iris_framew  s    
ÿr±   )Ú
table_namec                 C  sl  d|› �}t ddd�}t| tjƒr<|  ¡ }| |¡ ¡ d S |rŒt| |jƒrŒ|  ¡ �&}| |¡ | ¡ d W  d   ƒ S 1 s€0    Y  nÜddlm} ddl	m
} t| tƒ�rzV|| ƒ}| ¡ �(} |  |¡ ¡ W  d   ƒ W | ¡  S 1 � sò0    Y  W | ¡  n
| ¡  0 nTt| |ƒ�rZ|  ¡ �} |  |¡ ¡ W  d   ƒ S 1 �sN0    Y  n|  |¡ ¡ S d S )Nz SELECT count(*) AS count_1 FROM rp   rq   rr   r   )Úcreate_enginer�   )r   rv   rw   rx   rM   rN   Úfetchoner8   r³   r‘   r�   r{   r’   Úexec_driver_sqlZ
scalar_oneÚdispose)rW   r²   rX   ry   rY   r³   r�   Úenginer*   r*   r+   Ú
count_rows�  s.    


,
þ
0r¸   c                 C  s   | ddddƒ}t |ƒS )NÚioÚdatarP   ziris.csvr	   )ÚdatapathÚ	iris_pathr*   r*   r+   r¼   �  s    r¼   c                   C  s0   ddddddddddœ	dd	d
ddddd d dœ	gS )NÚfirstú2000-01-03 00:00:00i wði’·2g333333$@rC   F©	r‚   rƒ   r„   r…   r†   r‡   rˆ   r‰   rŠ   ú2000-01-04 00:00:00i 'âPi\¸2r*   r*   r*   r*   r+   rŒ   £  s*    ÷÷ôrŒ   c              
   C  s2   ddddddddddœ	}t | ƒ}|| ¡   |¡S )Nr{   Úint64rH   r¿   )r   ÚkeysÚastype)rŒ   r§   Údfr*   r*   r+   Útypes_data_frame¿  s    ÷rÅ   c                  C  s   g d¢} g d¢}t || d�S )N)r£   ÚAÚBÚCÚD))r¾   gNÿ\^ï?g9\›x`|@g%Ú TO×¿gá(nIŽò¿)rÀ   gî}ÒCÄð?çc×^ÜV¥¿g~q"B¶Ä¿gˆ”æÐ4Ë?)ú2000-01-05 00:00:00gGà Í¿èß?ç2rÂ¹eç?gˆŽ>Ý¦4á¿gÑ‘öÙRŠõ?)ú2000-01-06 00:00:00gÔ?{mXìñ?ç$ôó­ùù?gnk3¥AÓm?gØ
S«›å?©r¯   ©r   ©r¯   rº   r*   r*   r+   Útest_frame1Ð  s    rÒ   c                  C  s   g d¢} g d¢}t || d�S )N)r£   rÆ   rÇ   ))r¾   iÿÿÿgZØÓÍÿ¿)rÀ   iãÿÿÿrÊ   )rË   i N  rÌ   )rÍ   iÍ�ûÿrÎ   rÏ   rÐ   rÑ   r*   r*   r+   Útest_frame3ô  s    rÓ   c           
      C  sÌ   t | tjƒr(|  d¡}dd„ | ¡ D ƒS tddd�}|r°t | |jƒr°g }|  ¡  ¡  ¡ }|D ]N}|d  |d D ]8}|d	  |d
 D ]"}|d dkr„|d }| 	|¡ q„qpq\|S ddl
m}	 |	| ƒ ¡ S d S )Nz0SELECT name FROM sqlite_master WHERE type='view'c                 S  s   g | ]}|d  ‘qS ©r   r*   )rJ   Úviewr*   r*   r+   rL     re   z!get_all_views.<locals>.<listcomp>rp   rq   rr   Zcatalog_nameÚcatalog_db_schemasZdb_schema_nameÚdb_schema_tablesÚ
table_typerÕ   r²   r   ©Úinspect)rv   rw   rx   rN   Úfetchallr   Úadbc_get_objectsÚread_allÚ	to_pylistÚappendr8   rÚ   Zget_view_names)
rW   Úcry   ÚresultsÚinfoÚcatalogÚschemaÚtableÚ	view_namerÚ   r*   r*   r+   Úget_all_views   s$    
rç   c           
      C  s¼   t | tjƒr(|  d¡}dd„ | ¡ D ƒS tddd�}|r t | |jƒr g }|  ¡  ¡  ¡ }|D ]>}|d D ]0}|d D ]"}|d	 d
krt|d }| 	|¡ qtqhq\|S ddl
m}	 |	| ƒ ¡ S d S )Nz1SELECT name FROM sqlite_master WHERE type='table'c                 S  s   g | ]}|d  ‘qS rÔ   r*   )rJ   rå   r*   r*   r+   rL     re   z"get_all_tables.<locals>.<listcomp>rp   rq   rr   rÖ   r×   rØ   rå   r²   r   rÙ   )rv   rw   rx   rN   rÛ   r   rÜ   rÝ   rÞ   rß   r8   rÚ   Zget_table_names)
rW   rà   ry   rá   râ   rã   rä   rå   r²   rÚ   r*   r*   r+   Úget_all_tables  s     
rè   zLsqlite3.Connection | sqlalchemy.engine.Engine | sqlalchemy.engine.Connection)r²   rW   c              	   C  sä   t |tjƒr,| dt | ¡› �¡ | ¡  n´tddd�}|r„t ||jƒr„| ¡ �"}| d| › d�¡ W d   ƒ qà1 sx0    Y  n\| 	¡ �D}t 
|¡�}| | ¡ W d   ƒ n1 s¸0    Y  W d   ƒ n1 sÖ0    Y  d S )NzDROP TABLE IF EXISTS rp   rq   rr   zDROP TABLE IF EXISTS "ú")rv   rw   rx   rN   r   Ú_get_valid_sqlite_namerU   r   rM   rj   r   Ú
drop_table)r²   rW   ry   rY   rn   Údbr*   r*   r+   rë   1  s    

2
rë   )ræ   rW   c                 C  sâ   dd l }t|tjƒr4| dt | ¡› �¡ | ¡  nªtddd�}|rŒt||jƒrŒ| 	¡ �"}| d| › d�¡ W d   ƒ qÞ1 s€0    Y  nR|j
jj | ¡}| d|› �¡}| ¡ �}| |¡ W d   ƒ n1 sÔ0    Y  d S )Nr   zDROP VIEW IF EXISTS rp   rq   rr   zDROP VIEW IF EXISTS "ré   )r8   rv   rw   rx   rN   r   rê   rU   r   rM   r·   r|   Zidentifier_preparerZquote_identifierru   rj   )ræ   rW   r8   ry   rY   Zquoted_viewrX   rn   r*   r*   r+   Ú	drop_viewD  s    

2
ÿ
rí   c                  c  st   t  d¡} t  d¡}| jdd|jjji| jjd�}|V  t|ƒD ]}t	||ƒ q@t
|ƒD ]}t||ƒ qX| ¡  d S )Nr8   Úpymysqlz*mysql+pymysql://root@localhost:3306/pandasZclient_flag)Zconnect_argsÚ	poolclass)ÚpytestÚimportorskipr³   Ú	constantsZCLIENTZMULTI_STATEMENTSÚpoolÚNullPoolrç   rí   rè   rë   r¶   )r8   rî   r·   rÕ   Útblr*   r*   r+   Úmysql_pymysql_engine[  s    

ýrö   c                 c  s   t | |ƒ t| ƒ | V  d S ©N©ro   rz   )rö   r¼   r*   r*   r+   Úmysql_pymysql_engine_irisl  s    
rù   c                 c  s   t | |dƒ | V  d S )Nr%   ©r“   )rö   rŒ   r*   r*   r+   Úmysql_pymysql_engine_typess  s    rû   c                 c  s2   |   ¡ �}|V  W d   ƒ n1 s$0    Y  d S r÷   ©r’   )rö   rW   r*   r*   r+   Úmysql_pymysql_conny  s    
rý   c                 c  s2   |   ¡ �}|V  W d   ƒ n1 s$0    Y  d S r÷   rü   )rù   rW   r*   r*   r+   Úmysql_pymysql_conn_iris  s    
rþ   c                 c  s2   |   ¡ �}|V  W d   ƒ n1 s$0    Y  d S r÷   rü   )rû   rW   r*   r*   r+   Úmysql_pymysql_conn_types…  s    
rÿ   c                  c  sh   t  d¡} t  d¡ | jd| jjd�}|V  t|ƒD ]}t||ƒ q4t|ƒD ]}t||ƒ qL| 	¡  d S )Nr8   Zpsycopg2z=postgresql+psycopg2://postgres:postgres@localhost:5432/pandas©rï   ©
rð   rñ   r³   ró   rô   rç   rí   rè   rë   r¶   )r8   r·   rÕ   rõ   r*   r*   r+   Úpostgresql_psycopg2_engine‹  s    

þr  c                 c  s   t | |ƒ t| ƒ | V  d S r÷   rø   )r  r¼   r*   r*   r+   Úpostgresql_psycopg2_engine_iris›  s    
r  c                 c  s   t | |dƒ | V  d S )NÚpostgresrú   )r  rŒ   r*   r*   r+   Ú postgresql_psycopg2_engine_types¢  s    r  c                 c  s2   |   ¡ �}|V  W d   ƒ n1 s$0    Y  d S r÷   rü   )r  rW   r*   r*   r+   Úpostgresql_psycopg2_conn¨  s    
r  c                  c  s�   t  d¡ t  d¡ ddlm}  d}|  |¡�N}|V  t|ƒD ]}t||ƒ q>t|ƒD ]}t||ƒ qV| 	¡  W d   ƒ n1 s‚0    Y  d S )NÚpyarrowÚadbc_driver_postgresqlr   ©Údbapiz4postgresql://postgres:postgres@localhost:5432/pandas)
rð   rñ   r  r
  r’   rç   rí   rè   rë   rU   )r
  ÚurirW   rÕ   rõ   r*   r*   r+   Úpostgresql_adbc_conn®  s    

r  c                 c  s€   dd l }| }z| d¡ W n& |jy@   | ¡  t||ƒ Y n0 z| d¡ W n$ |jyt   | ¡  t|ƒ Y n0 |V  d S ©Nr   r3   Z	iris_view)Úadbc_driver_managerÚadbc_get_table_schemaÚProgrammingErrorÚrollbackr]   rz   )r  r¼   ÚmgrrW   r*   r*   r+   Úpostgresql_adbc_iris¾  s    r  c                 c  sZ   dd l }| }z| d¡ W n4 |jyN   | ¡  dd„ |D ƒ}t||ƒ Y n0 |V  d S )Nr   r�   c                 S  s   g | ]}t | ¡ ƒ‘qS r*   ©Útupleri   ©rJ   Úentryr*   r*   r+   rL   Û  re   z)postgresql_adbc_types.<locals>.<listcomp>)r  r  r  r  rŽ   )r  rŒ   r  rW   Únew_datar*   r*   r+   Úpostgresql_adbc_typesÑ  s    r  c                 c  s2   |   ¡ �}|V  W d   ƒ n1 s$0    Y  d S r÷   rü   )r  rW   r*   r*   r+   Úpostgresql_psycopg2_conn_irisâ  s    
r  c                 c  s2   |   ¡ �}|V  W d   ƒ n1 s$0    Y  d S r÷   rü   )r  rW   r*   r*   r+   Úpostgresql_psycopg2_conn_typesè  s    
r  c                  c  sB   t  d¡ t ¡ �} d| › �V  W d   ƒ n1 s40    Y  d S )Nr8   ú
sqlite:///)rð   rñ   r­   Úensure_cleanrš   r*   r*   r+   Ú
sqlite_strî  s    

r  c                 c  s^   t  d¡}|j| |jjd�}|V  t|ƒD ]}t||ƒ q*t|ƒD ]}t||ƒ qB| 	¡  d S )Nr8   r   r  )r  r8   r·   rÕ   rõ   r*   r*   r+   Úsqlite_engineõ  s    
r  c                 c  s2   |   ¡ �}|V  W d   ƒ n1 s$0    Y  d S r÷   rü   )r  rW   r*   r*   r+   Úsqlite_conn  s    
r   c                 C  s2   t  d¡}| | ¡}t||ƒ t|ƒ | ¡  | S )Nr8   )rð   rñ   r³   ro   rz   r¶   )r  r¼   r8   r·   r*   r*   r+   Úsqlite_str_iris  s    


r!  c                 c  s   t | |ƒ t| ƒ | V  d S r÷   rø   )r  r¼   r*   r*   r+   Úsqlite_engine_iris  s    
r"  c                 c  s2   |   ¡ �}|V  W d   ƒ n1 s$0    Y  d S r÷   rü   )r"  rW   r*   r*   r+   Úsqlite_conn_iris  s    
r#  c                 C  s,   t  d¡}| | ¡}t||dƒ | ¡  | S )Nr8   r$   )rð   rñ   r³   r“   r¶   )r  rŒ   r8   r·   r*   r*   r+   Úsqlite_str_types  s
    

r$  c                 c  s   t | |dƒ | V  d S )Nr$   rú   )r  rŒ   r*   r*   r+   Úsqlite_engine_types'  s    r%  c                 c  s2   |   ¡ �}|V  W d   ƒ n1 s$0    Y  d S r÷   rü   )r%  rW   r*   r*   r+   Úsqlite_conn_types-  s    
r&  c               	   c  s¾   t  d¡ t  d¡ ddlm}  t ¡ �‚}d|› �}|  |¡�N}|V  t|ƒD ]}t||ƒ qNt	|ƒD ]}t
||ƒ qf| ¡  W d   ƒ n1 s’0    Y  W d   ƒ n1 s°0    Y  d S )Nr  Úadbc_driver_sqliter   r	  zfile:)rð   rñ   r'  r
  r­   r  r’   rç   rí   rè   rë   rU   )r
  r›   r  rW   rÕ   rõ   r*   r*   r+   Úsqlite_adbc_conn3  s    



r(  c                 c  s€   dd l }| }z| d¡ W n& |jy@   | ¡  t||ƒ Y n0 z| d¡ W n$ |jyt   | ¡  t|ƒ Y n0 |V  d S r  )r  r  r  r  r\   rz   )r(  r¼   r  rW   r*   r*   r+   Úsqlite_adbc_irisD  s    r)  c              	   c  s    dd l }| }z| d¡ W nz |jy”   | ¡  g }|D ]B}t|d ƒ|d< |d d urjt|d ƒ|d< | t| ¡ ƒ¡ q:t||ƒ | 	¡  Y n0 |V  d S )Nr   r�   rˆ   rŠ   )
r  r  r  r  Úintrß   r  ri   r�   rU   )r(  rŒ   r  rW   r  r  r*   r*   r+   Úsqlite_adbc_typesV  s    
r+  c               	   c  s^   t  t d¡¡�:} | �}|V  W d   ƒ n1 s20    Y  W d   ƒ n1 sP0    Y  d S )Nú:memory:)Ú
contextlibr   rw   r’   ©Zclosing_connrW   r*   r*   r+   Úsqlite_buildinl  s    r/  c                 c  s   t | |ƒ t| ƒ | V  d S r÷   )r\   rz   )r/  r¼   r*   r*   r+   Úsqlite_buildin_iriss  s    
r0  c                 c  s"   dd„ |D ƒ}t | |ƒ | V  d S )Nc                 S  s   g | ]}t | ¡ ƒ‘qS r*   r  r  r*   r*   r+   rL   |  re   z(sqlite_buildin_types.<locals>.<listcomp>)r�   )r/  rŒ   r*   r*   r+   Úsqlite_buildin_typesz  s    
r1  )Zmarks)r  r   r  )r"  r#  r!  )r%  r&  r$  rW   c                 C  s    |  | ¡} |jd| ddd� d S )NÚtestrß   F©r›   rn   Ú	if_existsr£   )ÚgetfixturevalueÚto_sql)rW   rÒ   Úrequestr*   r*   r+   Útest_dataframe_to_sqlÖ  s    
r8  c                 C  sR   | dkr$t ƒ s$|j tjjdd�¡ | | ¡} |jd d… }|jd| ddd� d S )	Nr  z=postgres ADBC driver < 1.2 cannot insert index with null type©Úreasonr   r2  rß   Fr3  )	r   ÚnodeÚ
add_markerrð   ÚmarkÚxfailr5  r¨   r6  )rW   rÒ   r7  Zempty_dfr*   r*   r+   Útest_dataframe_to_sql_emptyÝ  s    ÿÿ
r?  c              	   C  sü   t  d¡ ttjdgdd�tjtdddƒgdd�tjtdddƒgdd�tjtdƒgdd�tjd	gd
d�dœƒ}d| v r¤| dkrŒ|jdgd�}t	ršt
}d}q¬d }d}nt}d}| | ¡} tj||dd��" |jd| ddd� W d   ƒ n1 sî0    Y  d S )Nr  rC   zint8[pyarrow]©r:   éç  útimestamp[ns][pyarrow]zdate32[day][pyarrow]zduration[ns][pyarrow]Úazstring[pyarrow])r*  r   r   r   Ústringry   r(  r   rÏ   zis_sparse is deprecatedÚ zthe 'timedelta'F)ÚmatchÚcheck_stacklevelÚ
test_arrowÚreplacer3  )rð   rñ   r   ÚpdÚarrayr   r   r   rk   r   ÚDeprecationWarningÚUserWarningr5  r­   Úassert_produces_warningr6  )rW   r7  rÄ   Úexp_warningÚmsgr*   r*   r+   Ú"test_dataframe_to_sql_arrow_dtypesì  s0    
ÿùÿ
rQ  c                 C  sL   t  d¡ tdtjtdddƒ|gdd�iƒ}| | ¡} |jd| dd	d
� d S )Nr  r   rA  rC   rB  r@  rH  rI  Fr3  )rð   rñ   r   rJ  rK  r   r5  r6  )rW   r7  Znulls_fixturerÄ   r*   r*   r+   Ú*test_dataframe_to_sql_arrow_dtypes_missing  s    
ÿÿÿ
rR  ÚmethodÚmultic                 C  s–   |dkr(d| v r(|j  tjjddd�¡ | | ¡} t| dd��.}|j|d|d� | d¡s^J ‚W d   ƒ n1 sr0    Y  t	| dƒt
|ƒks’J ‚d S )	NrT  ry   z)'method' not implemented for ADBC driversT©r:  Ústrict©Zneed_transactionÚ
test_frame©rS  )r;  r<  rð   r=  r>  r5  r!   r6  Ú	has_tabler¸   Úlen)rW   rS  rÒ   r7  Ú	pandasSQLr*   r*   r+   Útest_to_sql  s    ÿÿ
,r]  zmode, num_row_coef)rI  rC   )rß   rD   c                 C  s‚   |  | ¡} t| dd��>}|j|ddd� |j|d|d� | d¡sFJ ‚W d   ƒ n1 sZ0    Y  t| dƒ|t|ƒ ks~J ‚d S )NTrW  rX  Úfail©r4  ©r5  r!   r6  rZ  r¸   r[  )rW   ÚmodeZnum_row_coefrÒ   r7  r\  r*   r*   r+   Útest_to_sql_exist.  s    
,rb  c              	   C  sš   |  | ¡} t| dd��p}|j|ddd� | d¡s6J ‚d}tjt|d��  |j|ddd� W d   ƒ n1 sn0    Y  W d   ƒ n1 sŒ0    Y  d S )NTrW  rX  r^  r_  z!Table 'test_frame' already exists©rF  )r5  r!   r6  rZ  rð   ÚraisesÚ
ValueError)rW   rÒ   r7  r\  rP  r*   r*   r+   Útest_to_sql_exist_fail9  s    
rf  c                 C  s\   |  | ¡} td| ƒ}t|ƒ t d| ¡}t|ƒ t d| ¡}|jdksJJ ‚d|jv sXJ ‚d S )NúSELECT * FROM irisúSELECT * FROM iris where 0=1©r   r¥   r5   )r5  r"   r±   rJ  Úread_sqlr°   r¯   ©rW   r7  Ú
iris_framer*   r*   r+   Útest_read_iris_queryE  s    

rm  c                 C  s”   d| v r |j  tjjddd�¡ | | ¡} ttd| dd�ƒ}t|ƒ tt	j
d| dd�ƒ}t|ƒ tt	j
d| dd�ƒ}|jd	ks‚J ‚d
|jv s�J ‚d S )Nry   ú,'chunksize' not implemented for ADBC driversTrU  rg  é   ©Ú	chunksizerh  ri  r5   )r;  r<  rð   r=  r>  r5  r   r"   r±   rJ  rj  r°   r¯   rk  r*   r*   r+   Útest_read_iris_query_chunksizeQ  s    þÿ
rr  c           
      C  s¢   d| v r |j  tjjddd�¡ | | ¡} ddlm}m}m	}m
} |ƒ }t| tƒrZ|| ƒn| }|d||d�}t||ƒ| d	d
dœd�}	t|	ƒ t| tƒrž| ¡  d S )Nry   rn  TrU  r   )r0   r2   r³   Úselectr3   )Zautoload_withr¢   r    ©r›   Úlength©rm   )r;  r<  rð   r=  r>  r5  r8   r0   r2   r³   rs  rv   r{   r"   r±   r¶   )
rW   r7  r0   r2   r³   rs  r;   Zautoload_conr3   rl  r*   r*   r+   Ú.test_read_iris_query_expression_with_parameterd  s$    þÿ
ÿ
rw  c                 C  sv   d| v r |j  tjjddd�¡ |d  ¡ D ]\}}|| v r, qRq,td| › d�ƒ‚| | ¡} t|| dd	�}t	|ƒ d S )
Nry   rn  TrU  r'   zNo part of z( found in sql_strings['read_parameters']©r¢   r    rv  )
r;  r<  rð   r=  r>  ÚitemsÚKeyErrorr5  r"   r±   )rW   r7  r,   rì   Úqueryrl  r*   r*   r+   Ú*test_read_iris_query_string_with_parameter€  s    þÿ
r|  c                 C  s4   |  | ¡} td| ƒ}t|ƒ t d| ¡}t|ƒ d S )Nr3   )r5  r#   r±   rJ  rj  rk  r*   r*   r+   Útest_read_iris_table”  s
    

r}  c                 C  sb   d| v r|j  tjjdd�¡ | | ¡} ttd| dd�ƒ}t|ƒ tt	j
d| dd�ƒ}t|ƒ d S )Nry   ú+chunksize argument NotImplemented with ADBCr9  r3   ro  rp  )r;  r<  rð   r=  r>  r5  r   r#   r±   rJ  rj  rk  r*   r*   r+   Útest_read_iris_table_chunksizež  s    ÿ
r  c                   sŒ   |  | ¡} g ‰ ‡ fdd„}t| dd��.}|j|d|d� | d¡sFJ ‚W d   ƒ n1 sZ0    Y  ˆ dgksrJ ‚t| dƒt|ƒksˆJ ‚d S )Nc                   s2   ˆ  d¡ ‡ fdd„|D ƒ}| | j ¡ |¡ d S )NrC   c                   s   g | ]}t tˆ |ƒƒ‘qS r*   r`   rI   ©rÂ   r*   r+   rL   ³  re   z8test_to_sql_callable.<locals>.sample.<locals>.<listcomp>)rß   rN   rå   r_   )Zpd_tablerW   rÂ   Ú	data_iterrº   ©Úcheckr€  r+   Úsample±  s    
z$test_to_sql_callable.<locals>.sampleTrW  rX  rY  rC   r`  )rW   rÒ   r7  r„  r\  r*   r‚  r+   Útest_to_sql_callable«  s    
,r…  c                 C  sæ   | }|dkr |  tjjdd�¡ | | ¡} t d| ¡}t|jj	j
tjƒsLJ ‚t|jj	j
tjƒsbJ ‚d|v r‚t|jj	j
tjƒs˜J ‚nt|jj	j
tjƒs˜J ‚t|jj	j
tjƒs®J ‚d|v rÌt|jj	j
tƒsâJ ‚nt|jj	j
tjƒsâJ ‚d S )Nr1  ú;sqlite_buildin connection does not implement read_sql_tabler9  r�   r&   )Úapplymarkerrð   r=  r>  r5  r   r#   rª   r†   r:   r©   r«   r¬   r‡   Úintegerrˆ   Úbool_r‰   rŠ   Úobject©rW   r7  Ú	conn_namerÄ   r*   r*   r+   Útest_default_type_conversion½  s$    ÿÿ
r�  c           	   	   C  s   |  | ¡} ddlm} ddlm} tg d¢g d¢dœƒ}|jd| dd	� d
}||ƒ}t| |ƒrº|  ¡ �B}| 	¡ � | 
|¡ W d   ƒ n1 s�0    Y  W d   ƒ qì1 s®0    Y  n2|  	¡ � |  
|¡ W d   ƒ n1 sâ0    Y  t d| ¡}t ||¡ t d| ¡}t ||¡ d S )Nr   rt   r�   ©rC   rD   rE   ©çš™™™™™¹?r¡   ç333333Ó?©rC  ÚbrX  F©r›   rn   r£   z}DROP PROCEDURE IF EXISTS get_testdb;

    CREATE PROCEDURE get_testdb ()

    BEGIN
        SELECT * FROM test_frame;
    ENDzCALL get_testdb();)r5  r8   ru   r‘   r�   r   r6  rv   r’   rj   rN   r   r"   r­   Úassert_frame_equalrj  )	rW   r7  ru   r�   rÄ   ÚprocZengine_connÚres1Úres2r*   r*   r+   Útest_read_procedureÝ  s"    



H
(r™  Úexpected_countrD   zSuccess!c                   s‚   ‡ fdd„}|  | ¡} tddgddgddgd	œƒ}|jd
| d|d�}ˆ d u rZ|d u sfJ ‚n|ˆ ksfJ ‚t d
| ¡}t ||¡ d S )Nc                   sª   |j }| ¡ �ˆ}tƒ }t |¡}| |¡ | d¡ d dd„ |D ƒ¡}| jrb| j› d| j	› �}	n| j	}	d|	› d|› d�}
|j
|
|d	� W d   ƒ n1 sœ0    Y  ˆ S )
Nr   z, c                 S  s   g | ]}d |› d �‘qS )ré   r*   )rJ   Úkr*   r*   r+   rL     re   zVtest_copy_from_callable_insertion_method.<locals>.psql_insert_copy.<locals>.<listcomp>Ú.zCOPY z (z) FROM STDIN WITH CSV)r   Úfile)Ú
connectionrM   r   rP   ÚwriterÚ	writerowsÚseekÚjoinrä   r›   Zcopy_expert)rå   rW   rÂ   r�  Z
dbapi_connrY   Zs_bufrŸ  r¯   r²   Ú	sql_query©rš  r*   r+   Úpsql_insert_copy  s    



,zBtest_copy_from_callable_insertion_method.<locals>.psql_insert_copyrC   rD   r�  r¡   rC  Ún©Úcol1Úcol2Zcol3rX  F)r›   rn   r£   rS  ©r5  r   r6  r   r#   r­   r•  )rW   rš  r7  r¥  ÚexpectedÚresult_countÚresultr*   r¤  r+   Ú(test_copy_from_callable_insertion_method  s    
ÿr®  c              	     s�  |  | ¡} ddlm‰  ddlm} ddlm} ‡ fdd„}|dƒ}t| |ƒr¨|  ¡ �B}| 	¡ � | 
|¡ W d   ƒ n1 s~0    Y  W d   ƒ qÚ1 sœ0    Y  n2|  	¡ � |  
|¡ W d   ƒ n1 sÐ0    Y  tg d¢gtd	ƒd
�}|jd| ddd� tg d¢gtd	ƒd
�}|jd| dd|d�}	t d| ¡}
t |
|¡ |	dk�sRJ ‚tj| dd��}| d¡ W d   ƒ n1 �s‚0    Y  d S )Nr   r^   r�   rt   c                   s<   ‡ fdd„|D ƒ}ˆ| j ƒ |¡jdgd�}| |¡}|jS )Nc                   s   g | ]}t tˆ |ƒƒ‘qS r*   r`   rI   r€  r*   r+   rL   3  re   z\test_insertion_method_on_conflict_do_nothing.<locals>.insert_on_conflict.<locals>.<listcomp>rC  )Zindex_elements)rå   ri   Zon_conflict_do_nothingrN   Úrowcount©rå   rW   rÂ   r�  rº   rX   r­  r^   r€  r+   Úinsert_on_conflict2  s    
ÿþÿ
zHtest_insertion_method_on_conflict_do_nothing.<locals>.insert_on_conflictzx
    CREATE TABLE test_insert_conflict (
        a  integer PRIMARY KEY,
        b  numeric,
        c  text
    );
    ©rC   çÍÌÌÌÌÌ @rC  ÚabcrÏ   Útest_insert_conflictrß   Fr3  ©rC   gš™™™™™	@r“  ©r›   rn   r£   r4  rS  TrW  )r5  Zsqlalchemy.dialects.postgresqlr_   r‘   r�   Úsqlalchemy.sqlru   rv   r’   rj   rN   r   Úlistr6  r   r#   r­   r•  r   rë   )rW   r7  r�   ru   r±  Ú
create_sqlrn   r«  Z	df_insertÚinsertedr­  r\  r*   r^   r+   Ú,test_insertion_method_on_conflict_do_nothing)  s>    

ÿ	


H
(ÿûr¼  c                 C  s~   d| v sd| v r$|  tjjdd�¡ | | ¡} tg d¢g d¢gtdƒd�}|jd	| d
ddd� tj	d	| dd�}t
 ||¡ d S )Nr$   r%   z2test for public schema only specific to postgresqlr9  r²  )rD   gÍÌÌÌÌÌ@r“  r´  rÏ   Ztest_public_schemarß   FÚpublic)r›   rn   r4  r£   rä   ©rä   )r‡  rð   r=  r>  r5  r   r¹  r6  r   r#   r­   r•  )rW   r7  Ú	test_dataZdf_outr*   r*   r+   Útest_to_sql_on_public_schemac  s"    ÿÿ
ûrÀ  c              	     s�  |  | ¡} ddlm‰  ddlm} ddlm} ‡ fdd„}|dƒ}t| |ƒr¨|  ¡ �B}| 	¡ � | 
|¡ W d   ƒ n1 s~0    Y  W d   ƒ qÚ1 sœ0    Y  n2|  	¡ � |  
|¡ W d   ƒ n1 sÐ0    Y  tg d¢gtd	ƒd
�}|jd| ddd� tg d¢gtd	ƒd
�}|jd| dd|d�}	t d| ¡}
t |
|¡ |	dk�sRJ ‚tj| dd��}| d¡ W d   ƒ n1 �s‚0    Y  d S )Nr   r^   r�   rt   c                   sH   ‡ fdd„|D ƒ}ˆ| j ƒ |¡}|j|jj|jjd�}| |¡}|jS )Nc                   s   g | ]}t tˆ |ƒƒ‘qS r*   r`   rI   r€  r*   r+   rL   …  re   zXtest_insertion_method_on_conflict_update.<locals>.insert_on_conflict.<locals>.<listcomp>)r“  rà   )rå   ri   Zon_duplicate_key_updater»  r“  rà   rN   r¯  r°  r^   r€  r+   r±  „  s
    
zDtest_insertion_method_on_conflict_update.<locals>.insert_on_conflictzv
    CREATE TABLE test_insert_conflict (
        a INT PRIMARY KEY,
        b FLOAT,
        c VARCHAR(10)
    );
    r²  r´  rÏ   rµ  rß   Fr3  r¶  r·  rD   TrW  )r5  Zsqlalchemy.dialects.mysqlr_   r‘   r�   r¸  ru   rv   r’   rj   rN   r   r¹  r6  r   r#   r­   r•  r   rë   )rW   r7  r�   ru   r±  rº  rn   rÄ   r«  r»  r­  r\  r*   r^   r+   Ú(test_insertion_method_on_conflict_update{  s:    
ÿ	


H
(ûrÁ  c           
   
   C  s&  |  | ¡} ddlm} ddlm} dt ¡ j› �}dt ¡ j› �}|d|› d|› d|› d	|› d
�	ƒ}t| |ƒrÊ|  	¡ �B}| 
¡ � | |¡ W d   ƒ n1 s 0    Y  W d   ƒ qü1 s¾0    Y  n2|  
¡ � |  |¡ W d   ƒ n1 sò0    Y  t|| ƒ}tdgddœƒ}	t ||	¡ d S )Nr   r�   rt   Zgroup_Zgroup_view_z
    CREATE TABLE zF (
        group_id INTEGER,
        name TEXT
    );
    INSERT INTO z- VALUES
        (1, 'name');
    CREATE VIEW z
    AS
    SELECT * FROM z;
    rC   r›   ©Zgroup_idr›   )r5  r‘   r�   r¸  ru   ÚuuidÚuuid4Úhexrv   r’   rj   rN   r#   r   r­   r•  )
rW   r7  r�   ru   r²   ræ   Zsql_stmtrn   r­  r«  r*   r*   r+   Útest_read_view_postgres°  s2    
ÿûù	÷ÿ


H
(
rÆ  c                 C  sV   d}d}d}|   |¡ |   |¡ |   |¡ t d| ¡}tdgddœƒ}t ||¡ d S )Nz<
CREATE TABLE groups (
   group_id INTEGER,
   name TEXT
);
z,
INSERT INTO groups VALUES
    (1, 'name');
z1
CREATE VIEW group_view
AS
SELECT * FROM groups;
zSELECT * FROM group_viewrC   r›   rÂ  )rN   rJ  rj  r   r­   r•  )r/  Úcreate_tableZinsert_intoZcreate_viewr­  r«  r*   r*   r+   Útest_read_view_sqliteÔ  s    


rÈ  c              	   C  sl   t jtdd��J tjtdd�� t d| ¡ W d   ƒ n1 s@0    Y  W d   ƒ n1 s^0    Y  d S )Nz+pandas.io.sql.execute requires a connectionrc  úP`pandas.io.sql.execute` is deprecated and will be removed in the future version.úselect * from iris)rð   rd  Ú	TypeErrorr­   rN  ÚFutureWarningr   rN   )r"  r*   r*   r+   Útest_execute_typeerrorí  s    þrÍ  c                 C  s>   t jtdd�� t d| ¡ W d   ƒ n1 s00    Y  d S )NrÉ  rc  rÊ  )r­   rN  rÌ  r   rN   )r#  r*   r*   r+   Útest_execute_deprecated÷  s
    þrÎ  c                 C  s6   d| v rdS d| v rdS d| v r$dS t d| › �ƒ‚d S )Nr&   r$   r%   zunsupported connection: )re  )rŒ  r*   r*   r+   Úflavor  s    rÏ  c              	   C  s¬   d| v r |j  tjjddd�¡ | }| | ¡} |d t|ƒ }d}t| ƒ�F}| ¡ � |j	||d�}W d   ƒ n1 sx0    Y  W d   ƒ n1 s–0    Y  t
|ƒ d S )Nry   ú)'params' not implemented for ADBC driversTrU  r'   rx  rv  ©r;  r<  rð   r=  r>  r5  rÏ  r!   Úrun_transactionÚ
read_queryr±   ©rW   r7  r,   rŒ  r{  rm   r\  rl  r*   r*   r+   Útest_read_sql_iris_parameter  s    þÿ


JrÕ  c              	   C  s²   d| v r |j  tjjddd�¡ | }| | ¡} |d t|ƒ }dddœ}t| ƒ�F}| ¡ � |j	||d	�}W d   ƒ n1 s~0    Y  W d   ƒ n1 sœ0    Y  t
|ƒ d S )
Nry   rÐ  TrU  r(   r¢   r    rt  rv  rÑ  rÔ  r*   r*   r+   Ú"test_read_sql_iris_named_parameter  s    þÿ



JrÖ  c              	   C  s´   d| v sd| v r,d| vr,|  tjjdd�¡ | }| | ¡} |d t|ƒ }t| ƒ�F}| ¡ � |j|d d�}W d   ƒ n1 s€0    Y  W d   ƒ n1 sž0    Y  t	|ƒ d S )Nr%   r&   ry   zbroken testr9  r)   rv  )
r‡  rð   r=  r>  r5  rÏ  r!   rÒ  rÓ  r±   )rW   r7  r,   rŒ  r{  r\  rl  r*   r*   r+   Ú,test_read_sql_iris_no_parameter_with_percent3  s    


Jr×  c                 C  s"   |  | ¡} t d| ¡}t|ƒ d S )NzSELECT * FROM iris_view)r5  r   r"   r±   rk  r*   r*   r+   Útest_api_read_sql_viewF  s    
rØ  c                 C  s\   d| v r|j  tjjdd�¡ | | ¡} d}tj|| dd�}t || ¡}t 	t
|ƒ|¡ d S )Nry   r~  r9  z1SELECT * FROM iris_view WHERE "SepalLength" < 0.0r¥   rp  )r;  r<  rð   r=  r>  r5  r   r"   r­   r•  r   )rW   r7  r{  Z
with_batchZwithout_batchr*   r*   r+   Ú*test_api_read_sql_with_chunksize_no_resultM  s    ÿ
rÙ  c                 C  sp   |  | ¡} t d| ¡rNtj| dd��}| d¡ W d   ƒ n1 sD0    Y  t |d| ¡ t d| ¡slJ ‚d S )NrÒ   TrW  )r5  r   rZ  r   rë   r6  )rW   r7  rÒ   r\  r*   r*   r+   Útest_api_to_sqlZ  s    
(rÚ  c                 C  s¸   |  | ¡} t d| ¡rNtj| dd��}| d¡ W d   ƒ n1 sD0    Y  tj|d| dd� t d| ¡spJ ‚d}tjt|d��" tj|d| dd� W d   ƒ n1 sª0    Y  d S )NÚtest_frame2TrW  r^  r_  z"Table 'test_frame2' already existsrc  )	r5  r   rZ  r   rë   r6  rð   rd  re  )rW   r7  rÒ   r\  rP  r*   r*   r+   Útest_api_to_sql_faile  s    
(rÜ  c                 C  s¤   |  | ¡} t d| ¡rNtj| dd��}| d¡ W d   ƒ n1 sD0    Y  tj|d| dd� tj|d| dd� t d| ¡s‚J ‚t|ƒ}t| dƒ}||ks J ‚d S )NrÓ   TrW  r^  r_  rI  ©r5  r   rZ  r   rë   r6  r[  r¸   ©rW   r7  rÒ   r\  Znum_entriesZnum_rowsr*   r*   r+   Útest_api_to_sql_replacet  s    
(
rß  c                 C  s¸   |  | ¡} t d| ¡rNtj| dd��}| d¡ W d   ƒ n1 sD0    Y  tj|d| dd�dkshJ ‚tj|d| dd�dks‚J ‚t d| ¡s’J ‚dt|ƒ }t| dƒ}||ks´J ‚d S )	NÚtest_frame4TrW  r^  r_  rF   rß   rD   rÝ  rÞ  r*   r*   r+   Útest_api_to_sql_append†  s    
(
rá  c                 C  s|   |  | ¡} t d| ¡rNtj| dd��}| d¡ W d   ƒ n1 sD0    Y  tj|d| dd� t d| ¡}t ||¡ d S )NZtest_frame5TrW  F©r£   zSELECT * FROM test_frame5)	r5  r   rZ  r   rë   r6  rj  r­   r•  )rW   r7  rÓ   r\  r­  r*   r*   r+   Útest_api_to_sql_type_mapping™  s    
(rã  c                 C  s–   |  | ¡} t d| ¡rNtj| dd��}| d¡ W d   ƒ n1 sD0    Y  ttjddd�dd�}tj|d| d	d
� t 	d| ¡}t
 | ¡ |¡ d S )NZtest_seriesTrW  r¥   rÁ   r@  Zseriesrš   Frâ  zSELECT * FROM test_series)r5  r   rZ  r   rë   r   r«   Úaranger6  r"   r­   r•  Úto_frame)rW   r7  r\  ÚsÚs2r*   r*   r+   Útest_api_to_sql_series¦  s    
(rè  c                 C  sÂ   | }|  | ¡} t d| ¡rRtj| dd��}| d¡ W d   ƒ n1 sH0    Y  tj|d| d� tjd| d�}d|v rˆ|jddid	�}|j|_|j	ddd
� |j 
t¡ d |j_t ||¡ d S )NÚtest_frame_roundtripTrW  ©rn   ú"SELECT * FROM test_frame_roundtripry   Ú__index_level_0__Úlevel_0rÏ   ©Zinplace)r5  r   rZ  r   rë   r6  r"   Úrenamer£   Ú	set_indexrÃ   r*  r›   r­   r•  ©rW   r7  rÒ   rŒ  r\  r­  r*   r*   r+   Útest_api_roundtrip³  s    
(rò  c                 C  sž   d| v r|j  tjjdd�¡ | | ¡} t d| ¡rltj| dd��}| 	d¡ W d   ƒ n1 sb0    Y  tj
|d| ddd	� tjd
| d�}t ||¡ d S )Nry   r~  r9  ré  TrW  FrD   )rn   r£   rq  rë  rê  )r;  r<  rð   r=  r>  r5  r   rZ  r   rë   r6  r"   r­   r•  )rW   r7  rÒ   r\  r­  r*   r*   r+   Útest_api_roundtrip_chunksizeÈ  s"    ÿ
(ûró  c                 C  sf   |  | ¡} t | ¡�*}| d¡}| ¡ }| ¡  W d   ƒ n1 sD0    Y  t|ƒg d¢ksbJ ‚d S ©Nrg  rŸ   )r5  r   r!   rN   r´   rT   r¹  )rW   r7  Ú
pandas_sqlÚiris_resultsrK   r*   r*   r+   Útest_api_execute_sqlÞ  s    

&r÷  c              	   C  s  | }|  | ¡} t d| ¡}d|v s@d|v s@t|jjjtjƒr@J ‚tjd| dgd�}t|jjjtjƒshJ ‚|j 	¡ t
dddd	d	d	ƒt
ddd
d	d	d	ƒgksšJ ‚tjd| ddid�}t|jjjtjƒsÄJ ‚|j 	¡ t
dddd	d	d	ƒt
ddd
d	d	d	ƒgksöJ ‚tjd| dgd�}t|jjjtjƒ�s J ‚|j 	¡ t
dddd	d	d	ƒt
dddd	d	d	ƒgk�sTJ ‚tjd| ddid�}t|jjjtjƒ�s€J ‚|j 	¡ t
dddd	d	d	ƒt
dddd	d	d	ƒgk�s´J ‚tjd| ddid�}t|jjjtjƒ�sàJ ‚|j 	¡ t
dƒt
dƒgk�s J ‚d S )NúSELECT * FROM typesr%   r  rƒ   ©Úparse_datesiÐ  rC   rE   r   rF   ú%Y-%m-%d %H:%M:%Sr„   iÂ  é   é   iÝ  ræ  r…   z%Y%m%dz
2010-10-10z
2010-12-12)r5  r   r"   rª   rƒ   r:   r©   r«   Ú
datetime64Útolistr   r„   r…   r‹  r*   r*   r+   Útest_api_date_parsingé  sZ    
þ
ýþ
þ
ÿþýþr   Úerror)rq   ÚraiseÚcoercezread_sql, text, moderø  )r8   Úfallbackr�   r8   c           
      C  sÂ   | }|  | ¡} |dkr2|dkr2| tjjdd�¡ | ddi¡}||| dd|iid�}	d	|v r‚|	d
  t¡|	d
< |	d  t¡|	d< |dkr²| ddddœ¡}ts²|d  d¡|d< t	 
|	|¡ d S )Nr�   r1  z failing combination of argumentsr9  rƒ   údatetime64[ns]rs   )rn   rú  r  rˆ   rŠ   r  Úint32)r„   r…   r‡   zdatetime64[us])r5  r‡  rð   r=  r>  rÃ   r*  rH   r   r­   r•  )
rW   r7  rj  ru   ra  r  rÅ   rŒ  r«  r­  r*   r*   r+   Ú!test_api_custom_dateparsing_error!  s4    
ÿÿýýÿr  c                 C  sP   |  | ¡} tjd| dddgd�}t|jjjtjƒs6J ‚t|j	jjtjƒsLJ ‚d S )Nrø  rƒ   r„   )Ú	index_colrú  )
r5  r   r"   rª   r£   r:   r©   r«   rþ  r„   ©rW   r7  rÄ   r*   r*   r+   Útest_api_date_and_indexX  s    
ür
  c           	      C  sR  | }|  | ¡} t d| ¡rRtj| dd��}| d¡ W d   ƒ n1 sH0    Y  ttddgdd�ƒ ¡ }|dkrˆ|j 	t
jjd	d
�¡ d|v r tršt}q¤d }nt}tj|dd�� |jd| d�}W d   ƒ n1 sÖ0    Y  |dksìJ ‚t d| ¡}|dk�r0ttjddddd�tjddddd�gdd�}n|d  d¡}t |d |¡ d S )NZtest_timedeltaTrW  z00:00:01z00:00:03Úfoorš   r(  z.sqlite ADBC driver doesn't implement timedeltar9  ry   F)rG  ©r›   rn   rD   zSELECT * FROM test_timedeltar  r   i@B )ÚmonthsÚdaysÚmicrosecondsÚnanosecondsiÀÆ- rÁ   )r5  r   rZ  r   rë   r   r   rå  r;  r<  rð   r=  r>  r   rL  rM  r­   rN  r6  r"   rJ  Z
DateOffsetrÃ   r®   )	rW   r7  rŒ  r\  rÄ   rO  r¬  r­  r«  r*   r*   r+   Útest_api_timedeltag  s<    
(ÿÿ,
þûr  c                 C  sx   | }|  | ¡} tdddgiƒ}d|v r,d}nd}tjt|d��& |jd| d	�d u sVJ ‚W d   ƒ n1 sj0    Y  d S )
NrC  y      ð?      ð?y               @ry   zdatatypes not supportedzComplex datatypes not supportedrc  Ztest_complexrê  )r5  r   rð   rd  re  r6  )rW   r7  rŒ  rÄ   rP  r*   r*   r+   Útest_api_complex_raises–  s    
r  zindex_name,index_label,expected))NNr£   )NÚother_labelr  )Ú
index_nameNr  )r  r  r  )r   NÚ0)Nr   r  c           	      C  s¼   d| v r|j  tjjdd�¡ | | ¡} t d| ¡rltj| dd��}| 	d¡ W d   ƒ n1 sb0    Y  t
dtdƒiƒ}||j_d	}tj|d| |d
� t || ¡}|jd |ks¸J ‚d S )Nry   ú-index_label argument NotImplemented with ADBCr9  Útest_index_labelTrW  r¨  rF   úSELECT * FROM test_index_label)Úindex_labelr   )r;  r<  rð   r=  r>  r5  r   rZ  r   rë   r   Úranger£   r›   r6  r"   r¯   )	rW   r7  r  r  r«  r\  Ú
temp_framer{  rž   r*   r*   r+   Útest_api_to_sql_index_label¤  s    ÿ
(r  c           	      C  sD  | }d|v r$|  tjjddd�¡ nd|v rB|j tjjdd�¡ | | ¡} t d| ¡r�tj	| d	d
��}| 
d¡ W d   ƒ n1 s†0    Y  d}tdtdƒit ddg¡d�}t |d| ¡}||ksÌJ ‚t d| ¡}|jd dksêJ ‚|jd dksüJ ‚tj|d| dddgd�}||k�s"J ‚t d| ¡}|jd d…  ¡ ddgk�sNJ ‚ddg|j_tj|d| dd�}||k�szJ ‚t d| ¡}|jd d…  ¡ ddgk�s¦J ‚tj|d| dddgd�}||k�sÌJ ‚t d| ¡}|jd d…  ¡ ddgk�søJ ‚d}tjt|d��$ tj|d| ddd� W d   ƒ n1 �s60    Y  d S )Nr%   z/MySQL can fail using TEXT without length as keyFrU  ry   r  r9  r  TrW  rF   r¨  )ZA0ÚA1)ÚB0ZB1râ  r  r   rí  rC   Zlevel_1rI  rÆ   rÇ   )r4  r  rD   r_  rÈ   rÉ   zALength of 'index_label' should match number of levels, which is 2rc  )r‡  rð   r=  r>  r;  r<  r5  r   rZ  r   rë   r   r  r   Zfrom_productr6  r"   r¯   rÿ  r£   Únamesrd  re  )	rW   r7  rŒ  r\  Zexpected_row_countr  r­  rž   rP  r*   r*   r+   Ú&test_api_to_sql_index_label_multiindexÈ  sv    ÿÿÿ
(
þû  û ûr   c                 C  s    |  | ¡} t d| ¡rNtj| dd��}| d¡ W d   ƒ n1 sD0    Y  tjddgg d¢ddgd	�}|jd| d
� tjd| ddgd�}t	j
||dd� d S )NZtest_multiindex_roundtripTrW  ©rC   r³  Úline1©rD   ç      ø?Úline2©rÆ   rÇ   rÈ   rÆ   rÇ   ©r¯   r£   r  z'SELECT * FROM test_multiindex_roundtrip©r  ©Zcheck_index_type)r5  r   rZ  r   rë   r   Úfrom_recordsr6  r"   r­   r•  )rW   r7  r\  rÄ   r­  r*   r*   r+   Útest_api_multiindex_roundtrip  s    
(ý
ÿr+  r:   ©rÆ   rÇ   c           	      C  sÀ   | }|  | ¡} t d| ¡rRtj| dd��}| d¡ W d   ƒ n1 sH0    Y  tddgddggdd	gd
�}|jd| d�dks„J ‚| |¡}d|v rœd}nd}tj|| |d�}t	 
||¡ d S )NZtest_dtype_argumentTrW  ç333333ó?g333333@çffffff@g333333@rÆ   rÇ   rÏ   r  rD   r  z(SELECT "A", "B" FROM test_dtype_argumentz$SELECT A, B FROM test_dtype_argument©rn   r:   )r5  r   rZ  r   rë   r   r6  rÃ   r"   r­   r•  )	rW   r7  r:   rŒ  r\  rÄ   r«  r{  r­  r*   r*   r+   Útest_api_dtype_argument&  s    
(
r0  c                 C  s<   |  | ¡} tddgddggddgd�}tj|d| dd	� d S )
NrC   rD   rE   rF   r   rÏ   Ztest_frame_integer_col_namesrI  r_  )r5  r   r   r6  r	  r*   r*   r+   Útest_api_integer_col_namesF  s    
r1  c                 C  sJ   d| v r |j  tjjddd�¡ | | ¡} tj|d| d�}d|v sFJ ‚d S )Nry   ú-'get_schema' not implemented for ADBC driversTrU  r2  rê  ÚCREATE©r;  r<  rð   r=  r>  r5  r   Ú
get_schema©rW   r7  rÒ   rº  r*   r*   r+   Útest_api_get_schemaM  s    þÿ
r7  c                 C  sL   d| v r |j  tjjddd�¡ | | ¡} tj|d| dd�}d|v sHJ ‚d S )	Nry   r2  TrU  r2  Úpypi)rn   rä   zCREATE TABLE pypi.r4  r6  r*   r*   r+   Útest_api_get_schema_with_schema[  s    þÿ
r9  c                 C  s”   d| v r |j  tjjddd�¡ | }| | ¡} tddgddgd	œƒ}|d
krRd}nddlm} |}t	j
|d| d|id�}d|v s„J ‚d|v s�J ‚d S )Nry   r2  TrU  çš™™™™™ñ?r-  r³  çš™™™™™@r’  r/  ÚINTEGERr   )r€   r2  r“  r/  r3  )r;  r<  rð   r=  r>  r5  r   r8   r€   r   r5  )rW   r7  rŒ  Zfloat_framer:   r€   rº  r*   r*   r+   Útest_api_get_schema_dtypesj  s"    þÿ
r=  c                 C  s¬   d| v r |j  tjjddd�¡ | }| | ¡} tddgddgd	œƒ}tj|d
| dd�}d|v rdd}nd}||v stJ ‚tj|d
| ddgd�}d|v r˜d}nd}||v s¨J ‚d S )Nry   r2  TrU  r:  r-  r³  r;  )ÚCol1ZCol2r2  r>  )rn   rÂ   r%   z'CONSTRAINT test_pk PRIMARY KEY (`Col1`)z'CONSTRAINT test_pk PRIMARY KEY ("Col1")rÆ   rÇ   z)CONSTRAINT test_pk PRIMARY KEY (`A`, `B`)z)CONSTRAINT test_pk PRIMARY KEY ("A", "B"))	r;  r<  rð   r=  r>  r5  r   r   r5  )rW   r7  rÒ   rŒ  rž   rº  Zconstraint_sentencer*   r*   r+   Útest_api_get_schema_keys‚  s(    þÿ
r?  c                 C  s¾  d| v r|j  tjjdd�¡ | }| | ¡} t d| ¡rptj| dd��}| 	d¡ W d   ƒ n1 sf0    Y  t
tj d¡ d¡td	ƒd
�}|jd| dd� t d| ¡}t
ƒ }d}g d¢}tjd| dd�D ]0}	t||	gdd�}t|	ƒ|| ksôJ ‚|d7 }qÌt ||¡ |dk�rVtjtdd��  tjd| dd� W d   ƒ n1 �sJ0    Y  ndt
ƒ }
d}g d¢}tjd| dd�D ]4}	t|
|	gdd�}
t|	ƒ|| k�s¢J ‚|d7 }�qxt ||
¡ d S )Nry   r~  r9  Ztest_chunksizeTrW  rD   )é   r¥   ZabcderÏ   Fr”  zselect * from test_chunksizer   )r¥   r¥   r¥   r¥   rD   r¥   rp  ©Zignore_indexrC   r/  rE  rc  )r;  r<  rð   r=  r>  r5  r   rZ  r   rë   r   r«   ÚrandomÚdefault_rngÚstandard_normalr¹  r6  r"   r   r[  r­   r•  rd  ÚNotImplementedErrorr#   )rW   r7  rŒ  r\  rÄ   r—  r˜  ÚiÚsizesÚchunkÚres3r*   r*   r+   Útest_api_chunksize_readŸ  sB    ÿ
(ÿ

2rJ  c                 C  sð   | dkrFt ddd�}|d urFt|jƒtdƒk rF|j tjjddd�¡ | | ¡} t	 
d	| ¡r”t	j| dd
��}| d	¡ W d   ƒ n1 sŠ0    Y  tg d¢g d¢dœƒ}| ¡ }|d  d¡|d< |jd	| dd� t	 d| ¡}t ||¡ d S )Nr  r  rq   rr   z0.9.0z:categorical dtype not implemented for ADBC postgres driverTrU  Ztest_categoricalrW  rŽ  )úJohn P. Doez	Jane DoverK  )Z	person_idÚperson_namerL  ÚcategoryFr”  zSELECT * FROM test_categorical)r   r   r9   r;  r<  rð   r=  r>  r5  r   rZ  r   rë   r   ÚcopyrÃ   r6  r"   r­   r•  )rW   r7  ry   r\  rÄ   Údf2Úresr*   r*   r+   Útest_api_categoricalÐ  s.    þÿ
(þÿrQ  c                 C  s~   |  | ¡} t d| ¡rNtj| dd��}| d¡ W d   ƒ n1 sD0    Y  tddgddggdd	gd
�}|jd| dd� d S )NZtest_unicodeTrW  rC   rD   rE   rF   õ   Ã©r“  rÏ   Fr”  )r5  r   rZ  r   rë   r   r6  )rW   r7  r\  rÄ   r*   r*   r+   Útest_api_unicode_column_nameñ  s    
(rS  c                 C  sª   | }|  | ¡} t d| ¡rRtj| dd��}| d¡ W d   ƒ n1 sH0    Y  tg d¢dtjdgdœƒ}|jd| dd	� d
|v rŠd}nd}t 	|| ¡}t
 ||¡ d S )Nzd1187b08-4943-4c8d-a7f6TrW  ©r   rC   rD   r¡   r.  r,  Fr”  r  z'SELECT * FROM "d1187b08-4943-4c8d-a7f6"z'SELECT * FROM `d1187b08-4943-4c8d-a7f6`)r5  r   rZ  r   rë   r   r«   Únanr6  r"   r­   r•  )rW   r7  rŒ  r\  rÄ   r{  rP  r*   r*   r+   Útest_api_escaped_table_nameý  s    
(rV  c                 C  sø   d| v rDt  d¡}t|jƒtdƒkr,| dv sD|j t jjddd�¡ | | ¡} t	 
d| ¡r’t	j| dd	��}| d¡ W d   ƒ n1 sˆ0    Y  tg d
¢g d¢ddœƒ}|jd| dd� t d| ¡}tg d¢g d¢g d¢gg d¢d�}t ||¡ d S )Nry   r  z16.0)r(  r  z!pyarrow->pandas throws ValueErrorTrU  Ú
test_tablerW  rŽ  r�  rC   ©rC  r“  rà   Fr”  z)SELECT a, b, a +1 as a, c FROM test_table)rC   r�  rD   rC   )rD   r¡   rE   rC   )rE   r‘  rF   rC   )rC  r“  rC  rà   rÏ   )rð   rñ   r   r9   r;  r<  r=  r>  r5  r   rZ  r   rë   r   r6  rJ  rj  r­   r•  )rW   r7  Úpar\  rÄ   r­  r«  r*   r*   r+   Ú#test_api_read_sql_duplicate_columns	  s.    
ÿþÿÿ
(þrZ  c                 C  sf   | }|dkr |  tjjdd�¡ | | ¡} t |d| ¡ ddg}tjd| |d�}|j 	¡ |ksbJ ‚d S )Nr/  úNot Implementedr9  rX  rÆ   rÇ   rÏ   )
r‡  rð   r=  r>  r5  r   r6  r#   r¯   rÿ  )rW   r7  rÒ   rŒ  Úcolsr­  r*   r*   r+   Útest_read_table_columns0	  s    
r]  c                 C  sÊ   | }|dkr |  tjjdd�¡ | | ¡} t |d| ¡ tjd| dd�}|jj	dgksZJ ‚tjd| ddgd�}|jj	ddgks‚J ‚tjd| ddgd	d
gd�}|jj	ddgks°J ‚|j
 ¡ d	d
gksÆJ ‚d S )Nr/  r[  r9  rX  r£   r(  rÆ   rÇ   rÈ   rÉ   )r  r¯   )r‡  rð   r=  r>  r5  r   r6  r#   r£   r  r¯   rÿ  )rW   r7  rÒ   rŒ  r­  r*   r*   r+   Útest_read_table_index_col@	  s    
ÿr^  c                 C  sr   | dkr|  tjjdd�¡ | | ¡} t d| ¡}t d| ¡}t 	||¡ t 
d| ¡}t d| ¡}t 	||¡ d S )Nr0  r†  r9  rg  r3   )r‡  rð   r=  r>  r5  r   r"   rj  r­   r•  r#   )rW   r7  Úiris_frame1Úiris_frame2r*   r*   r+   Útest_read_sql_delegateW	  s    ÿÿ
ra  c              
   C  s  | }ddl m} ddlm} |dƒ|dƒg}|D ]œ}t||ƒrš| ¡ �B}| ¡ � | |¡ W d   ƒ n1 sp0    Y  W d   ƒ qÌ1 sŽ0    Y  q0| ¡ � | |¡ W d   ƒ q01 sÂ0    Y  q0t 	d ¡�( t
 d|¡ t
 d|¡ W d   ƒ n1 �s0    Y  d S )Nr   rt   r�   z,CREATE TABLE invalid (x INTEGER, y UNKNOWN);z0CREATE TABLE other_table (x INTEGER, y INTEGER);Zother_tablezSELECT * FROM other_table)r8   ru   r‘   r�   rv   r’   rj   rN   r­   rN  r   r#   r"   )r   rW   ru   r�   Z
query_listr{  r*   r*   r+   Útest_not_reflect_all_tablesj	  s     þ


H
*rb  c              	   C  sÒ   | }|dksd|v r(|  tjjdd�¡ | | ¡} tjtdd��F t 	| ¡�}| 
dd¡ W d   ƒ n1 sn0    Y  W d   ƒ n1 sŒ0    Y  t d ¡� |jd	| d
� W d   ƒ n1 sÄ0    Y  d S )Nr/  ry   zDoes not raise warningr9  z¶The provided table name 'TABLE1' is not found exactly as such in the database after writing the table, possibly due to case sensitivity issues. Consider using lower case table names.rc  ZTABLE1rE  ZCaseSensitiver  )r‡  rð   r=  r>  r5  r­   rN  rM  r   r   Zcheck_case_sensitiver6  )rW   r7  rÒ   rŒ  rì   r*   r*   r+   Ú(test_warning_case_insensitive_table_nameƒ	  s    
ýHrc  c                 C  s„   |  | ¡} ddlm} tdtddgdd�iƒ}t | ¡�8}tjd||d	�}t|j	j
d j|ƒsbJ ‚W d   ƒ n1 sv0    Y  d S )
Nr   )Ú	TIMESTAMPr   ú2014-12-12 01:54ú2014-12-11 02:54T©ÚutcÚ	test_typer�   )r5  r8   rd  r   r   r   r   ÚSQLTablerv   rå   rà   r©   )rW   r7  rd  rÄ   rì   rå   r*   r*   r+   Útest_sqlalchemy_type_mapping›	  s    
ÿrk  zinteger, expected)Zint8ÚSMALLINT)ZInt8rl  )Zuint8rl  )ZUInt8rl  )Zint16rl  )ZInt16rl  )Zuint16r<  )ZUInt16r<  )r  r<  )ZInt32r<  )Zuint32ÚBIGINT)ZUInt32rm  )rÁ   rm  )ÚInt64rm  rÁ   rm  r<  c                 C  sx   |  | ¡} tddgdg|d�}t | ¡�0}tjd||d�}t|jjjj	ƒ}W d   ƒ n1 s^0    Y  ||kstJ ‚d S )Nr   rC   rC  ©r¯   r:   ri  r�   )
r5  r   r   r   rj  r{   rå   rà   rC  r©   )rW   r7  rˆ  r«  rÄ   rì   rå   r­  r*   r*   r+   Útest_sqlalchemy_integer_mappingª	  s    
.rp  rˆ  Zuint64ZUInt64c              	   C  sŠ   |  | ¡} tddgdg|d�}t | ¡�N}tjtdd��  tjd||d� W d   ƒ n1 s^0    Y  W d   ƒ n1 s|0    Y  d S )	Nr   rC   rC  ro  z1Unsigned 64 bit integer datatype is not supportedrc  ri  r�   )r5  r   r   r   rð   rd  re  rj  )rW   r7  rˆ  rÄ   rì   r*   r*   r+   Ú(test_sqlalchemy_integer_overload_mappingÊ	  s    
ÿrq  c           
      C  sª   t  d¡ | | ¡} t ¡ �V}d| }d}|j||ddd� t ||¡}t ||¡}d}t 	||¡}	W d   ƒ n1 sx0    Y  t 
||¡ t 
||¡ t 
||	¡ d S )Nr8   r  r3   rI  Fr3  rg  )rð   rñ   r5  r­   r  r6  r   rj  r#   r"   r•  )
rW   r7  rÒ   r›   Údb_urirå   rÛ  rÓ   r{  rà  r*   r*   r+   Útest_database_uri_string×	  s    


*rs  Úpg8000c                 C  sV   t  d¡ | | ¡} d}t jtdd�� t d|¡ W d   ƒ n1 sH0    Y  d S )Nr8   z)postgresql+pg8000://user:pass@host/dbnamert  rc  zselect * from table)rð   rñ   r5  rd  ÚImportErrorr   rj  )rW   r7  rr  r*   r*   r+   Ú(test_pg8000_sqlalchemy_passthrough_errorì	  s
    

rv  c                 C  sf   | }|  | ¡} ddlm} d|v r,|dƒ}n|dƒ}tj|| ddid�}t|d	 ƒ}|dhksbJ ‚d S )
Nr   rt   r  z%select * from iris where "Name"=:namez#select * from iris where name=:namer›   zIris-versicolorrv  r6   )r5  r8   ru   r   rj  Úset)rW   r7  rŒ  ru   Z	name_textÚiris_dfÚ	all_namesr*   r*   r+   Útest_query_by_text_objø	  s    

rz  c                 C  sl   |  | ¡} ddlm}m} tƒ }||ƒ |jj|dƒk¡}tj	|| ddid�}t
|d ƒ}|dhkshJ ‚d S )Nr   )Ú	bindparamrs  r›   r¢   rv  r6   )r5  r8   r{  rs  r<   Úwhererà   r6   r   rj  rw  )rW   r7  r{  rs  r3   Zname_selectrx  ry  r*   r*   r+   Útest_query_by_select_obj
  s    
r}  c                 C  sl   | }|dkr |  tjjdd�¡ | | ¡} tg d¢g d¢dœƒ}|jd| dd	� t d| ¡}t	 
||¡ d S )
Nr/  r[  r9  rT  ©rE   rF   r¥   )rÆ   z%_variationZtest_column_percentageFr”  )r‡  rð   r=  r>  r5  r   r6  r   r#   r­   r•  )rW   r7  rŒ  rÄ   rP  r*   r*   r+   Útest_column_with_percentage
  s    
r  c              	   C  sº   t  ¡ �’}tt |¡ƒ�*}tj| d|dd�dks4J ‚W d   ƒ n1 sH0    Y  tt |¡ƒ�}t d|¡}W d   ƒ n1 s‚0    Y  W d   ƒ n1 s 0    Y  t  | |¡ d S )NZtest_frame3_legacyFrâ  rF   z!SELECT * FROM test_frame3_legacy;)	r­   r  r   rw   r’   r   r6  r"   r•  )rÓ   r›   rW   r­  r*   r*   r+   Útest_sql_open_close(
  s    
8Hr€  c                  C  sF   d} d}t jt|d�� t d| ¡ W d   ƒ n1 s80    Y  d S )Nzmysql://root@localhost/pandasz-Using URI string without sqlalchemy installedrc  rg  )rð   rd  ru  r   rj  )rW   rP  r*   r*   r+   Útest_con_string_import_error6
  s    r�  c               	   C  sv   G dd„ dƒ} t  | dƒ¡�F}t t¡� t d|¡ W d   ƒ n1 sJ0    Y  W d   ƒ n1 sh0    Y  d S )Nc                   @  s*   e Zd Zddœdd„Zdd„ Zdd„ Zd	S )
zhtest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnectionÚNone©Úreturnc                 _  s   t j|i |¤Ž| _d S r÷   )rw   rx   rW   )ÚselfÚargsÚkwargsr*   r*   r+   Ú__init__A
  s    zqtest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnection.__init__c                 S  s   t | j|ƒS r÷   )ÚgetattrrW   )r…  r›   r*   r*   r+   Ú__getattr__D
  s    zttest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnection.__getattr__c                 S  s   | j  ¡  d S r÷   )rW   rT   )r…  r*   r*   r+   rT   G
  s    zntest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnection.closeN)Ú__name__Ú
__module__Ú__qualname__rˆ  rŠ  rT   r*   r*   r*   r+   ÚMockSqliteConnection@
  s   rŽ  r,  zSELECT 1)r-  r   r­   rN  rM  r   rj  )rŽ  rW   r*   r*   r+   ÚJtest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed>
  s    
r�  c                 C  sl   | }t  d|¡}t  d|¡}t ||¡ d}tjt j|d�� t  d|¡ W d   ƒ n1 s^0    Y  d S )Nrg  z9Execution failed on sql 'iris': near "iris": syntax errorrc  r3   )r   r"   rj  r­   r•  rð   rd  ÚDatabaseError)r0  rW   r_  r`  rP  r*   r*   r+   Útest_sqlite_read_sql_delegateO
  s    r‘  c                 C  s   t  | d¡}d|v sJ ‚d S )Nr2  r3  )r   r5  )rÒ   rº  r*   r*   r+   Útest_get_schema2Z
  s    r’  c                 C  s|   | }t dtddgdd�iƒ}t |¡}tjd||d�}| ¡ }| d¡D ].}| ¡ d	  d
¡dkrH| ¡ d dksHJ ‚qHd S )Nr   re  rf  Trg  ri  r�   Ú
r   ré   rC   rd  )r   r   r   r   ZSQLiteTableZ
sql_schemaÚsplitÚstrip)r/  rW   rÄ   rì   rå   rä   Úcolr*   r*   r+   Útest_sqlite_type_mapping`
  s    ÿ
r—  c                 C  sÒ   | dkrt  d¡ | | ¡} ddlm} tg d¢g d¢dœƒ}tj| dd	��$}| |d
¡dksbJ ‚W d   ƒ n1 sv0    Y  || ƒ}| 	d
¡s–J ‚tj| dd	��}| 
d
¡ W d   ƒ n1 sÄ0    Y  d S )Nr  ú#sqlite_str has no inspection systemr   rÙ   ©ç      ð?ç       @ç      @ç      @©r�  rœ  r›  rš  ©ÚoneÚtwoTrW  r  rF   )rð   Úskipr5  r8   rÚ   r   r   r   r6  rZ  rë   ©rW   r7  rÚ   r  r\  Úinspr*   r*   r+   Útest_create_tabler
  s    

2r¥  c              	   C  s   | dkrt  d¡ | | ¡} ddlm} tg d¢g d¢dœƒ}t | ¡�Â}| ¡ �$ | 	|d¡d	kshJ ‚W d   ƒ n1 s|0    Y  || ƒ}| 
d¡sœJ ‚| ¡ � | d¡ W d   ƒ n1 sÄ0    Y  z| ¡  W n tyì   Y n0 | 
d¡rüJ ‚W d   ƒ n1 �s0    Y  d S )
Nr  r˜  r   rÙ   r™  rž  rŸ  r  rF   )rð   r¢  r5  r8   rÚ   r   r   r   rÒ  r6  rZ  rë   Úclear_cacheÚAttributeErrorr£  r*   r*   r+   Útest_drop_table‡
  s"    


2
(r¨  c                 C  s¬   | dkrt  d¡ | }| | ¡} t| ƒ}| ¡ �. | |d¡dksFJ ‚| d¡}W d   ƒ n1 sd0    Y  d|v r†|jddid	�}|jdd
d� d |j	_
t ||¡ d S )Nr  r˜  ré  rF   rë  ry   rì  rí  rÏ   Trî  )rð   r¢  r5  r!   rÒ  r6  rÓ  rï  rð  r£   r›   r­   r•  rñ  r*   r*   r+   Útest_roundtrip¡
  s    


(r©  c              	   C  sŒ   |  | ¡} t| ƒ�R}| ¡ �* | d¡}| ¡ }| ¡  W d   ƒ n1 sL0    Y  W d   ƒ n1 sj0    Y  t|ƒg d¢ksˆJ ‚d S rô  )r5  r!   rÒ  rN   r´   rT   r¹  )rW   r7  r\  rö  rK   r*   r*   r+   Útest_execute_sql·
  s    



Drª  c                 C  s$   |  | ¡} tjd| d�}t|ƒ d S )Nr3   rê  )r5  r   r#   r±   rk  r*   r*   r+   Útest_sqlalchemy_read_tableÂ
  s    
r«  c                 C  s8   |  | ¡} tjd| ddgd�}t |jtddgƒ¡ d S )Nr3   r4   )rn   r¯   ZSepalLength__1)r5  r   r#   r­   Zassert_index_equalr¯   r   rk  r*   r*   r+   Ú"test_sqlalchemy_read_table_columnsÉ
  s
    

ÿr¬  c                 C  sN   |  | ¡} d}tjt|d�� tjd| d� W d   ƒ n1 s@0    Y  d S )Nz!Table this_doesnt_exist not foundrc  Zthis_doesnt_existrê  )r5  rð   rd  re  r   r#   )rW   r7  rP  r*   r*   r+   Útest_read_table_absent_raisesÒ
  s    
r­  c                 C  sÂ   | }|dkrt  d¡ n$d|v s(d|v r<| t jjdd�¡ | | ¡} t d| ¡}t|j	j
jtjƒshJ ‚t|jj
jtjƒs~J ‚t|jj
jtjƒs”J ‚t|jj
jtjƒsªJ ‚t|jj
jtƒs¾J ‚d S )Nr  ú.types tables not created in sqlite_str fixturer%   r$   z#boolean dtype not inferred properlyr9  r�   )rð   r¢  r‡  r=  r>  r5  r   r#   rª   r†   r:   r©   r«   r¬   r‡   rˆ  rˆ   r‰  r‰   rŠ   rŠ  r‹  r*   r*   r+   Ú'test_sqlalchemy_default_type_conversionÚ
  s    ÿ
r¯  c                 C  sN   |  | ¡} tddgid�}|jd| dd�dks2J ‚t d| ¡}t ||¡ d S )NÚi64l            )rº   Útest_bigintFr”  rC   rª  ©rW   r7  rÄ   r­  r*   r*   r+   r±  ñ
  s
    
r±  c                 C  sd   | }|dkrt  d¡ nd|v r4| t jjdd�¡ | | ¡} t d| ¡}t|j	j
jtjƒs`J ‚d S )Nr  r®  r$   z"sqlite does not read date properlyr9  r�   )rð   r¢  r‡  r=  r>  r5  r   r#   rª   rƒ   r:   r©   r«   rþ  r‹  r*   r*   r+   Útest_default_date_loadü
  s    ÿ
r³  rú  r•   c                 C  s6   |  | ¡} t| ƒ}td| |d�}|j}t ||¡ d S )Núselect * from datetzrù  )r5  rœ   r"   r•   r­   r®   )rW   r7  rú  r«  rÄ   r–  r*   r*   r+   Ú!test_datetime_with_timezone_query  s
    
rµ  c                 C  sB   |  | ¡} t| ƒ}tttd| dd�ƒdd�}|j}t ||¡ d S )Nr´  rC   rp  TrA  )r5  rœ   r   r¹  r"   r•   r­   r®   )rW   r7  r«  rÄ   r–  r*   r*   r+   Ú+test_datetime_with_timezone_query_chunksize  s    
þr¶  c                 C  s2   |  | ¡} t| ƒ}t d| ¡}t || ¡ ¡ d S )Nr”   )r5  rœ   r   r#   r­   r•  rå  )rW   r7  r«  r­  r*   r*   r+   Ú!test_datetime_with_timezone_table(  s    
r·  c                 C  sÎ   | }|  | ¡} tdtdddd�iƒ}|jd| dd�dks<J ‚d	|v rZ|d j d
¡|d< n|d j d ¡|d< t d| ¡}t	 
||¡ t d| ¡}d|v r¾t|jd tƒs®J ‚t|d ƒ|d< t	 
||¡ d S )NrÆ   ú2013-01-01 09:00:00rE   ú
US/Pacific©Úperiodsr™   Ztest_datetime_tzFr”  r&   r—   zSELECT * FROM test_datetime_tzr$   ©r   rÆ   )r5  r   r   r6  ÚdtZ
tz_convertZtz_localizer   r#   r­   r•  r"   rv   Úlocr{   r   )rW   r7  rŒ  r«  r­  r*   r*   r+   Ú%test_datetime_with_timezone_roundtrip0  s     
ÿr¿  c                 C  sj   |  | ¡} tdtdddƒidgd�}|jd| dd�dks<J ‚t d| ¡}ttjgdgd	�}t 	||¡ d S )
Nr   i'  rC   r   râ  Ztest_datetime_obbFr”  rÏ   )
r5  r   r   r6  r   r#   rJ  ZNaTr­   r•  )rW   r7  rº   r­  r«  r*   r*   r+   Útest_out_of_bounds_datetimeO  s    
rÀ  c                 C  sn   |  | ¡} tdddd� d ¡}tdtdƒi|d�}|jd| dd	�dksJJ ‚tjd| dd
�}tj	||dd� d S )Nz
2018-01-01r¥   Z6h©r»  ÚfreqÚnumsrâ  Z	foo_tableZ	info_date)r›   rn   r  r(  F)Zcheck_names)
r5  r   Z
_with_freqr   r  r6  r   r#   r­   r•  )rW   r7  Údatesr«  r­  r*   r*   r+   Ú"test_naive_datetimeindex_roundtripZ  s    
rÅ  c                 C  sH  | }|  | ¡} t d| ¡}d|v r&tntj}t|jjj	|ƒs@J ‚tjd| dgd�}t|jjj	tjƒshJ ‚tjd| ddid�}t|jjj	tjƒs’J ‚tjd| dddiid�}t|jjj	tjƒsÀJ ‚tjd| dgd�}t|j
jj	tjƒsèJ ‚tjd| ddid�}t|j
jj	tjƒ�sJ ‚tjd| dd	diid�}t|j
jj	tjƒ�sDJ ‚d S )
Nr�   r$   rƒ   rù  rû  Úformatr„   ræ  Úunit)r5  r   r#   rŠ  r«   rþ  rª   rƒ   r:   r©   r„   )rW   r7  rŒ  rÄ   Úexpected_typer*   r*   r+   Útest_date_parsingg  s*    

ýrÉ  c                 C  sÊ   | }|  | ¡} ttddd�t d¡dœƒ}|jd| d�dks@J ‚t d| ¡}|jdd	d
�}t	 
||¡ t d| ¡}|jdd	d
�}d|v rºt|jd tƒsœJ ‚t|d ƒ|d< t	 
||¡ nt	 
||¡ d S )Nr¸  rE   ©r»  rœ  r,  Útest_datetimer  r£   rC   )ZaxisúSELECT * FROM test_datetimer$   r¼  rÆ   )r5  r   r   r«   rä  r6  r   r#   rk   r­   r•  r"   rv   r¾  r{   r   ©rW   r7  rŒ  rÄ   r­  r*   r*   r+   rË  ‡  s     
ÿrË  c                 C  sÀ   | }|  | ¡} ttddd�t d¡dœƒ}tj|jd< |jd| dd	�dksNJ ‚t 	d| ¡}t
 ||¡ t d
| ¡}d|v r°t|jd tƒsŽJ ‚t|d dd�|d< t
 ||¡ nt
 ||¡ d S )Nr¸  rE   rÊ  rœ  r,  ©rC   rÆ   rË  Fr”  rÌ  r$   r¼  rÆ   r  rr   )r5  r   r   r«   rä  rU  r¾  r6  r   r#   r­   r•  r"   rv   r{   r   rÍ  r*   r*   r+   Útest_datetime_NaT   s    
ÿrÏ  c                 C  sr   |  | ¡} ttdddƒtdddƒgdgd�}|jd| dd�dksDJ ‚td| ƒ}|d }t|d ƒ}t ||¡ d S )	NéÞ  rC   rD   rC  rÏ   Ú	test_dateFr”  )r5  r   r   r6  r#   r   r­   r®   )rW   r7  rÄ   rP  r­  r«  r*   r*   r+   Útest_datetime_date¸  s    
"
rÒ  c                 C  s  | }|  | ¡} ttdddƒtdddƒgdgd�}|jd| dd	�d
ksHJ ‚td| ƒ}t ||¡ |}tj|d|dd�d
ks|J ‚t d|¡}| 	dd„ ¡}t ||¡ tj|d| dd�d
ks¼J ‚d|v rêt d| ¡}| 	dd„ ¡}t ||¡ t d| ¡}t ||¡ d S )Né	   r   rC   é   rC  rÏ   Ú	test_timeFr”  rD   Z
test_time2râ  zSELECT * FROM test_time2c                 S  s
   |   d¡S ©Nz%H:%M:%S.%f©Ústrftime©Ú_r*   r*   r+   Ú<lambda>Ô  re   z$test_datetime_time.<locals>.<lambda>Z
test_time3r$   zSELECT * FROM test_time3c                 S  s
   |   d¡S rÖ  r×  rÙ  r*   r*   r+   rÛ  Ú  re   )
r5  r   r   r6  r#   r­   r•  r   r"   Úmap)rW   r7  r/  rŒ  rÄ   rP  r   Úrefr*   r*   r+   Útest_datetime_timeÅ  s$    
"
rÞ  c                 C  sn   |  | ¡} tdtjd�}tdtjd�}t||dœƒ}|jd| dd�dksLJ ‚t d| ¡}t	j
||dd	d
� d S )Ni  r@  g        )Ús1rç  Ztest_read_writeFr”  rC   T)Zcheck_dtypeZcheck_exact)r5  r   r«   r  Úfloat32r   r6  r   r#   r­   r•  )rW   r7  rß  rç  rÄ   rO  r*   r*   r+   Útest_mixed_dtype_insertà  s    
rá  c                 C  sp   |  | ¡} tg d¢dtjdgdœƒ}|jd| dd�dks<J ‚t d| ¡}t ||¡ t 	d	| ¡}t ||¡ d S )
NrT  r¡   r.  r,  Útest_nanFr”  rE   úSELECT * FROM test_nan)
r5  r   r«   rU  r6  r   r#   r­   r•  r"   r²  r*   r*   r+   Útest_nan_numericï  s    
rä  c                 C  sŽ   |  | ¡} tg d¢tjtjtjgdœƒ}|jd| dd�dks@J ‚t d| ¡}t ||¡ |d  	d¡|d< d |d< t 
d	| ¡}t ||¡ d S )
NrT  r,  râ  Fr”  rE   rÇ   rŠ  rã  )r5  r   r«   rU  r6  r   r#   r­   r•  rÃ   r"   r²  r*   r*   r+   Útest_nan_fullcolumnÿ  s    
rå  c                 C  sz   |  | ¡} tg d¢ddtjgdœƒ}|jd| dd�dks<J ‚d |jd	< t d| ¡}t 	||¡ t 
d
| ¡}t 	||¡ d S )NrT  rC  r“  r,  râ  Fr”  rE   ©rD   rÇ   rã  )r5  r   r«   rU  r6  r¾  r   r#   r­   r•  r"   r²  r*   r*   r+   Útest_nan_string  s    

rç  c              	   C  sF  d| v r |j  tjjddd�¡ | }| | ¡} tjddgg d¢dgd	�}d
}t| ƒ�L}| 	¡ �$ | 
||¡dkstJ ‚W d   ƒ n1 sˆ0    Y  W d   ƒ n1 s¦0    Y  |dv �rt d|› d�| ¡}g }|jD ](}t d|› d�| ¡}	| |	j ¡ ¡ qØn,ddlm}
 |
| ƒ}| |¡}dd„ |D ƒ}|dggk�sBJ ‚d S )Nry   z)ADBC implementation does not create indexTrU  r!  r#  r&  rÆ   r'  Ztest_to_sql_saves_indexrD   >   r  r/  zASELECT * FROM sqlite_master WHERE type = 'index' AND tbl_name = 'ú'zPRAGMA index_info(ú)r   rÙ   c                 S  s   g | ]}|d  ‘qS )Zcolumn_namesr*   )rJ   rF  r*   r*   r+   rL   G  re   z*test_to_sql_save_index.<locals>.<listcomp>)r;  r<  rð   r=  r>  r5  r   r*  r!   rÒ  r6  r   r"   r›   rß   rÿ  r8   rÚ   Zget_indexes)rW   r7  rŒ  rÄ   Ztbl_namer\  ZixsZix_colsZix_nameZix_inforÚ   r¤  r*   r*   r+   Útest_to_sql_save_index$  s>    ÿÿ
ÿ

P
ÿý

rê  c              	   C  s”   | }|  | ¡} d}|dkr6d|vr6ddlm} ||ƒ}t| ƒ�B}| ¡ �}| |¡ W d   ƒ n1 sh0    Y  W d   ƒ n1 s†0    Y  d S )Nú'CREATE TABLE test_trans (A INT, B TEXT)r/  ry   r   rt   )r5  r8   ru   r!   rÒ  rN   )rW   r7  rŒ  rX   ru   r\  Útransr*   r*   r+   Útest_transactionsL  s    


rí  c              	   C  sÂ  | }|  | ¡} t| ƒ��”}| ¡ �P}d}d|v s:t|tƒrF| |¡ nddlm} ||ƒ}| |¡ W d   ƒ n1 sx0    Y  G dd„ dtƒ}d}t|t	ƒr´ddlm} ||ƒ}z>| ¡ �"}| |¡ |dƒ‚W d   ƒ n1 sæ0    Y  W n |�y   Y n0 | ¡ � | 
d	¡}	W d   ƒ n1 �s20    Y  t|	ƒdk�sNJ ‚| ¡ �$}| |¡ | 
d	¡}
W d   ƒ n1 �s‚0    Y  t|
ƒd
k�sžJ ‚W d   ƒ n1 �s´0    Y  d S )Nrë  ry   r   rt   c                   @  s   e Zd ZdS )z1test_transaction_rollback.<locals>.DummyExceptionN)r‹  rŒ  r�  r*   r*   r*   r+   ÚDummyExceptionk  s   rî  z/INSERT INTO test_trans (A,B) VALUES (1, 'blah')r  zSELECT * FROM test_transrC   )r5  r!   rÒ  rv   r   rN   r8   ru   Ú	Exceptionr   rÓ  r[  )rW   r7  rŒ  r\  rì  rX   ru   rî  Zins_sqlrP  r˜  r*   r*   r+   Útest_transaction_rollback\  s8    

(


*
*

*rð  c           
   	   C  sø   | dkr|  tjjdd�¡ | | ¡} ddlm} ddlm} d}t	j
||| d�}|jd d… }||ƒ}t| |ƒrÎ|  ¡ �B}| ¡ � | |¡ W d   ƒ n1 s¤0    Y  W d   ƒ qØ1 sÂ0    Y  n
|  |¡ t	 || ¡}	tj|	|d	d
� d S )Nr  z(test does not support sqlite_str fixturer9  r   rt   r�   Útest_get_schema_create_tablerê  Fr)  )r‡  rð   r=  r>  r5  r8   ru   r‘   r�   r   r5  r¨   rv   r’   rj   rN   r#   r­   r•  )
rW   r7  rÓ   ru   r�   rõ   rº  Zblank_test_dfZnewconZreturned_dfr*   r*   r+   rñ  †  s$    ÿ



H
rñ  c                 C  sÌ  | dkrt  d¡ | | ¡} ddlm}m} ddlm} ddg}dd	g}t||d
�}|j	d| d�dksjJ ‚|j	d| d|id�dks†J ‚|ƒ }|j
| d� |jd jd j}	t|	|ƒs¸J ‚d}
t jt|
d��$ |j	d| dtid� W d   ƒ n1 sô0    Y  |j	d| d|dƒid�dk�s J ‚|j
| d� |jd jd j}	t|	|ƒ�sNJ ‚|	jdk�s^J ‚|j	d| |d�dk�sxJ ‚|j
| d� |jd jd j}|jd jd j}t||ƒ�s¸J ‚t||ƒ�sÈJ ‚d S )Nr  r˜  r   )r}   r1   ©r0   rÆ   rÇ   ©gš™™™™™é?T©gÍÌÌÌÌÌì?NrÏ   Ú
dtype_testr  rD   Údtype_test2©r›   rn   r:   rg   z&The type of B is not a SQLAlchemy typerc  r  Zdtype_test3é
   Úsingle_dtype_test)rð   r¢  r5  r8   r}   r1   Úsqlalchemy.schemar0   r   r6  ÚreflectÚtablesr¯   r©   rv   rd  re  r{   ru  )rW   r7  r}   r1   r0   r\  rº   rÄ   ÚmetaZsqltyperP  ZsqltypeaZsqltypebr*   r*   r+   Ú
test_dtype¤  s8    

2"rþ  c                 C  s4  | dkrt  d¡ | }| | ¡} ddlm}m}m}m} ddlm	} t
dd gƒt
tddd	ƒd gƒt
d	d gd
d�t
dd gƒdœ}t|ƒ}	d}
|	j|
| d�dks J ‚t |
| ¡}|ƒ }|j| d� d|v rÊ|n|}|j|
 j}t|d j|ƒsîJ ‚t|d j|ƒ�sJ ‚t|d j|ƒ�sJ ‚t|d j|ƒ�s0J ‚d S )Nr  r˜  r   )r~   r   r/   r€   rò  TéÜ  r¥   rC   rŠ  r@  r:  ©ÚBoolÚDateÚIntr/   Únotna_dtype_testr  rD   rg   r%   r  r  r  r/   )rð   r¢  r5  r8   r~   r   r/   r€   rú  r0   r   r   r   r6  r   r#   rû  rü  r¯   rv   r©   )rW   r7  rŒ  r~   r   r/   r€   r0   r\  rÄ   rõ   rÚ  rý  Zmy_typeÚcol_dictr*   r*   r+   Útest_notna_dtypeÎ  s.    



ür  c              	   C  s„  | dkrt  d¡ | | ¡} ddlm}m}m} ddlm} d}t	t
|gdd�t
|gd	d�t
|gd	d�t
d
gdd�t
d
gdd�dœƒ}|jd| ddd|dd�id�dks¬J ‚t d| ¡}t |d jd d¡t |d jd d¡ksèJ ‚|ƒ }	|	j| d� |	jd j}
t|
d jƒt|
d jƒk�s(J ‚t|
d j|ƒ�s>J ‚t|
d j|ƒ�sTJ ‚t|
d j|ƒ�sjJ ‚t|
d j|ƒ�s€J ‚d S )Nr  r˜  r   )Ú
BigIntegerr/   r€   rò  gñYÉBÊÀó?rà  r@  Úfloat64r¥   r  rÁ   )Úf32Úf64Ú
f64_as_f32Úi32r°  Ztest_dtypesFrI  r  é   )Ú	precision)r›   rn   r£   r4  r:   rC   r
  é   rg   r	  r  r°  )rð   r¢  r5  r8   r  r/   r€   rú  r0   r   r   r6  r   r#   r«   Úroundr¨   rû  rü  r¯   r{   r©   rv   )rW   r7  r  r/   r€   r0   ÚVrÄ   rP  rý  r  r*   r*   r+   Útest_double_precisionó  sD    

ûÿûùÿ
0"r  c                   sp   |  | ¡} ddlm‰  dd„ ‰dd„ ‰‡‡fdd„‰‡ ‡fd	d
„}tdg d¢iƒjd| d�dksdJ ‚|| ƒ d S )Nr   r�   c                 S  s   d}t j|| d�S )Nz'SELECT test_foo_data FROM test_foo_datarê  )r   r"   )rž  r{  r*   r*   r+   Útest_select/  s    z3test_connectable_issue_example.<locals>.test_selectc                 S  s   |j d| dd� d S )NÚtest_foo_datarß   )r›   rn   r4  )r6  )rž  rº   r*   r*   r+   Útest_append3  s    z3test_connectable_issue_example.<locals>.test_appendc                   s   ˆ| ƒ}ˆ | |ƒ d S r÷   r*   )rW   Zfoo_data)r  r  r*   r+   Útest_connectable6  s    z8test_connectable_issue_example.<locals>.test_connectablec              	     sp   t | ˆ ƒrd|  ¡ �@}| ¡ � ˆ|ƒ W d   ƒ n1 s:0    Y  W d   ƒ ql1 sX0    Y  nˆ| ƒ d S r÷   )rv   r’   rj   )ZconnectablerW   )r�   r  r*   r+   Úmain<  s
    


Fz,test_connectable_issue_example.<locals>.mainr  rT  r  rE   )r5  r‘   r�   r   r6  )rW   r7  r  r*   )r�   r  r  r  r+   Útest_connectable_issue_example'  s    
	ÿÿr  Úinputr  Úbar)r  Úinfe0c           	      C  sÔ   t |ƒ}| }| | ¡} d|v r t d¡}t|jƒtdƒk r\d|jv r\tjjdd�}| 	|¡ d}tj
t|d��  |jd	| d
d� W d   ƒ qÐ1 s”0    Y  n0|jd	| d
d�dks¸J ‚t d	| ¡}t ||¡ d S )Nr%   rî   z1.0.3r  zGH 36465r9  zinf cannot be used with MySQLrc  ZfoobarFr”  rC   )r   r5  rð   rñ   r   r9   r¯   r=  r>  r‡  rd  re  r6  r   r#   r­   Zassert_equal)	rW   r7  r  rÄ   rŒ  rî   r=  rP  rP  r*   r*   r+   Útest_to_sql_with_negative_npinfK  s    


0r  c              	     s  | dkrt  d¡ | | ¡} ddlm‰ m‰m‰m} ddlm	}m
} d}td|giƒ}|ƒ }G ‡ ‡‡fdd	„d	|ƒ}|| ƒ�x}	|	 ¡ �P |	 ¡ } |j | ¡ |	 ||d
�¡ |	 ¡  tj||jƒ| d�}
W d   ƒ n1 sÜ0    Y  W d   ƒ n1 sú0    Y  t |
|¡ d S )Nr  z&test does not work with str connectionr   )r-   r€   ÚUnicoders  )ÚSessionÚdeclarative_basezHello, World!Úspamc                      s6   e Zd ZdZddgiZ” ”dd�Z” ”dƒdd�Zd	S )
z'test_temporary_table.<locals>.TemporaryZ	temp_testÚprefixesÚ	TEMPORARYT©Zprimary_keyrÔ  F)ZnullableN)r‹  rŒ  r�  Ú__tablename__Z__table_args__Úidr   r*   ©r-   r€   r  r*   r+   Ú	Temporary�  s   
r'  )r   )r   rn   )rð   r¢  r5  r8   r-   r€   r  rs  Úsqlalchemy.ormr  r  r   rj   rž  Z	__table__rl   ÚaddÚflushr   r"   r   r­   r•  )rW   r7  rs  r  r  r¿  r«  ZBaser'  ÚsessionrÄ   r*   r&  r+   Útest_temporary_tablek  s"    



Pr,  c              	   C  sœ   | dksd| v r$|  tjjdd�¡ | | ¡} d}t| ƒ�N}tjt|d��  |j|ddd	� W d   ƒ n1 sp0    Y  W d   ƒ n1 sŽ0    Y  d S )
Nr/  ry   z9SQLiteDatabase/ADBCDatabase does not raise for bad enginer9  z*engine must be one of 'auto', 'sqlalchemy'rc  rÒ   Z
bad_engine©r·   )	r‡  rð   r=  r>  r5  r!   rd  re  r6  )rW   r7  rÒ   rP  r\  r*   r*   r+   Útest_invalid_engine‘  s    ÿÿ

r.  c              	   C  s¢   |  | ¡} t| ƒ�^}| ¡ �6 |j|ddd�dks6J ‚| d¡sDJ ‚W d  ƒ n1 sX0    Y  W d  ƒ n1 sv0    Y  t|ƒ}t| dƒ}||ksžJ ‚dS )z `to_sql` with the `engine` paramrÒ   Úautor-  rF   N)r5  r!   rÒ  r6  rZ  r[  r¸   rÞ  r*   r*   r+   Útest_to_sql_with_sql_engine¡  s    


J
r0  c              
   C  sÊ   |  | ¡} t dd¡�  t| ƒ�Z}| ¡ �2 | |d¡dks@J ‚| d¡sNJ ‚W d   ƒ n1 sb0    Y  W d   ƒ n1 s€0    Y  t|ƒ}t| dƒ}||ks¨J ‚W d   ƒ n1 s¼0    Y  d S )Núio.sql.enginer8   rÒ   rF   ©	r5  rJ  Úoption_contextr!   rÒ  r6  rZ  r[  r¸   rÞ  r*   r*   r+   Útest_options_sqlalchemy°  s    


J
r4  c              
   C  sÊ   |  | ¡} t dd¡�  t| ƒ�Z}| ¡ �2 | |d¡dks@J ‚| d¡sNJ ‚W d   ƒ n1 sb0    Y  W d   ƒ n1 s€0    Y  t|ƒ}t| dƒ}||ks¨J ‚W d   ƒ n1 s¼0    Y  d S )Nr1  r/  rÒ   rF   r2  rÞ  r*   r*   r+   Útest_options_auto¿  s    


J
r5  c                   C  sÀ   t  d¡ ttdƒtƒsJ ‚t dd¡�4 ttdƒtƒs<J ‚ttdƒtƒsNJ ‚W d   ƒ n1 sb0    Y  t dd¡�4 ttdƒtƒsŒJ ‚ttdƒtƒsžJ ‚W d   ƒ n1 s²0    Y  d S )Nr8   r1  r/  )rð   rñ   rv   r    r   rJ  r3  r*   r*   r*   r+   Útest_options_get_engineÎ  s    
0r6  c                   C  s   d S r÷   r*   r*   r*   r*   r+   Ú"test_get_engine_auto_error_messageÛ  s    r7  Úfuncrj  r"   c                 C  s  | }|  | ¡} d}|}	|	j|| ddd� t d|¡�6 tt|ƒd|› �| |d�}
||||ƒ}W d   ƒ n1 sp0    Y  t |
|¡ d|v r¢| tj	j
d	d
�¡ t d|¡�N tt|ƒd|› �| |dd�}||||ƒ}|D ]}
t |
|¡ qÜW d   ƒ n1 �s0    Y  d S )Nr2  FrI  ©r›   rn   r£   r4  úmode.string_storageúSelect * from ©Údtype_backendry   z(adbc does not support chunksize argumentr9  rE   )rn   r=  rq  )r5  r6  rJ  r3  r‰  r­   r•  r‡  rð   r=  r>  ©rW   r7  Ústring_storager8  r=  Údtype_backend_dataÚdtype_backend_expectedrŒ  rå   rÄ   r­  r«  Úiteratorr*   r*   r+   Útest_read_sql_dtype_backendâ  s2    
ÿ*ÿürC  r#   c                 C  s  d| v r$d| vr$|  tjjdd�¡ | }| | ¡} d}|}	|	j|| ddd� t d	|¡�0 tt|ƒ|| |d
�}
||||ƒ}W d   ƒ n1 sŽ0    Y  t	 
|
|¡ d|v r°d S t d	|¡�H tt|ƒ|| |dd�}||||ƒ}|D ]}
t	 
|
|¡ qäW d   ƒ n1 �s0    Y  d S )Nr$   ry   zhSQLite actually returns proper boolean values via read_sql_table, but before pytest refactor was skippedr9  r2  FrI  r9  r:  r<  rE   )r=  rq  )r‡  rð   r=  r>  r5  r6  rJ  r3  r‰  r­   r•  r>  r*   r*   r+   Ú!test_read_sql_dtype_backend_table  s6    þÿ	
*ürD  )rj  r#   r"   c                 C  sn   |  | ¡} d}|}|j|| ddd� d}tjt|d��$ tt|ƒ|| dd� W d   ƒ n1 s`0    Y  d S )	Nr2  FrI  r9  zPdtype_backend numpy is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.rc  Únumpyr<  )r5  r6  rð   rd  re  r‰  rJ  )rW   r7  r8  r@  rå   rÄ   rP  r*   r*   r+   Ú)test_read_sql_invalid_dtype_backend_table>  s    
ÿrF  rƒ  c                
   C  sb   t tdtjdgdd�tg d¢dd�tdtjdgdd�tg d	¢dd�g d
¢g d¢g d¢g d¢dœƒS )NrC   rE   rn  r@  rŽ  r$  ç      @ÚFloat64©r$  r›  rG  )TFN©TFTrX  ©rC  r“  N©rC  r“  rà   ÚdÚeÚfÚgÚh)r   r   r«   rU  r*   r*   r*   r+   r@  N  s    øÿr@  c                  C  s   ddœdd„} | S )Nr   rƒ  c                   s.  |dkr"t  d¡‰t ˆ ¡ ¡}n
t | ¡}ttdtj	dgdd�tg d¢dd�tdtj	dgd	d�tg d
¢d	d�tddtj
gdd�tg d¢dd�tg d¢|d�tg d¢|d�dœƒ‰|dkrìt  d¡‰ddlm‰  t‡ ‡‡fdd„ˆjD ƒƒ‰d|v sþd|v �r*|dk�rˆ dddœ¡‰nˆ dddœ¡‰ˆS )Nr  rC   rE   rn  r@  rŽ  r$  rG  rH  rI  TFÚbooleanrJ  rX  rK  rL  r   )ÚArrowExtensionArrayc                   s$   i | ]}|ˆ ˆj ˆ| d d�ƒ“qS )T)Zfrom_pandas)rK  )rJ   r–  ©rS  rÄ   rY  r*   r+   Ú
<dictcomp>z  s   ÿz8dtype_backend_expected.<locals>.func.<locals>.<dictcomp>r%   r$   Únumpy_nullable)rN  rO  zint64[pyarrow])rð   rñ   rJ  Z
ArrowDtyperD  ÚStringDtyper   r   r«   rU  ZNAZpandas.arraysrS  r¯   rÃ   )r?  r=  rŒ  Zstring_dtyper*   rT  r+   r8  `  s8    

øÿ
þÿ
z$dtype_backend_expected.<locals>.funcr*   )r8  r*   r*   r+   rA  ^  s    (rA  c                 C  s†   d| v r|j  tjjdd�¡ | | ¡} dddœ}tddgd	� |¡}| ¡ }|j	d
| ddd� t
d| |dd�D ]}t ||¡ qpd S )Nry   r~  r9  rÁ   rŠ  r’  rC  r“  rÏ   r2  FrI  r9  zSELECT * FROM testrC   )r:   rq  )r;  r<  rð   r=  r>  r5  r   rÃ   rN  r6  r"   r­   r•  )rW   r7  r§   rÄ   r«  r­  r*   r*   r+   Útest_chunksize_empty_dtypes‹  s     ÿ

ü
rX  r=  rV  c                 C  s˜   |  | ¡} d}tg d¢ddœƒ}|j|| ddd� tt|ƒd|› �| d	tji|d
�}ttg d¢tjd�tg d¢|dkszdndd�dœƒ}t 	||¡ d S )Nr2  rŽ  r¥   r’  FrI  r9  r;  rC  )r:   r=  r@  )r¥   r¥   r¥   rV  rÁ   rn  )
r5  r   r6  r‰  rJ  r«   r  r   r­   r•  )rW   r7  r8  r=  rå   rÄ   r­  r«  r*   r*   r+   Útest_read_sql_dtype¡  s&    
üþþÿ	rY  c                 C  st   | }d}t ddddœddddœgƒ}| d|¡ tjt|d��" |jd|d dd	� W d   ƒ n1 sf0    Y  d S )
NzxStarting with pandas version 3.0 all arguments of to_sql except for the arguments 'name' and 'con' will be keyword-only.rC   rD   rE   r&  Zexamplerc  rI  r_  )r   r6  r­   rN  rÌ  )r  rW   rP  rÄ   r*   r*   r+   Útest_keyword_deprecation½  s    ÿrZ  c                 C  sj   | }t dddgidd�}|jd|dd�dks0J ‚t d ¡� t d|¡ W d   ƒ n1 s\0    Y  d S )	NrC  rC   rD   rÁ   r@  Ztest_bigintwarningFr”  )r   r6  r­   rN  r   r#   ©r  rW   rÄ   r*   r*   r+   Útest_bigint_warningË  s
    r\  c                 C  s^   | }t ddgddgdœƒ}tjtdd��" |jd|d	d
d� W d   ƒ n1 sP0    Y  d S )NrC   rD   rE   rF   ©r¨  r©  zEmpty table name specifiedrc  rE  rI  Fr3  )r   rð   rd  re  r6  r[  r*   r*   r+   Útest_valueerror_exceptionÕ  s    r^  c           
        s  | }ddl m‰ m‰m‰ ddlm}m} |ƒ }G ‡ ‡‡fdd„d|ƒ}| ¡ � |j 	|¡ W d   ƒ n1 sp0    Y  ||d�}|ƒ �`}t
ddgdd	gd
œƒ}|jd|ddd�dks¼J ‚| ¡  | |j|j¡}	t
|	ƒ}W d   ƒ n1 sð0    Y  t|jƒddgk�sJ ‚d S )Nr   ©r-   r€   r1   )r  Úsessionmakerc                      s(   e Zd ZdZ” ”dd�Z” ”dƒƒZdS )z,test_row_object_is_named_tuple.<locals>.TestrX  Tr#  é2   N)r‹  rŒ  r�  r$  r%  Ústring_columnr*   r_  r*   r+   ÚTestî  s   rc  rg   rC   ZhelloZworld)r%  rb  rX  FrI  r9  rD   r%  rb  )r8   r-   r€   r1   r(  r  r`  rj   r;   Z
create_allr   r6  rU   r{  r%  rb  r¹  r¯   )
r  rW   r  r`  Z	BaseModelrc  r  r+  rÄ   Z
test_queryr*   r_  r+   Útest_row_object_is_named_tupleÜ  s$    
*
ÿÿ&rd  c                 C  sž   | }d}t dddgiƒ}|j||ddd� t dd	¡� t||ƒ}W d   ƒ n1 sV0    Y  tjtjd
�}t dddgi|tdg|d�d�}t	 
||¡ d S )Nr2  rC  ÚxÚyFrI  )rn   r£   r4  zfuture.infer_stringT)Zna_valuer@  )r:   r¯   )r   r6  rJ  r3  r#   rW  r«   rU  r   r­   r•  )r  rW   rå   rÄ   r­  r:   r«  r*   r*   r+   Útest_read_sql_string_inference  s    (ÿrg  c                 C  sT   | }t dtddddƒgidd�}|jd|dd	d
� t d|¡jd }|dksPJ ‚d S ©NÚtiä  rü  é   r  r@  r2  rI  F)r4  r£   úselect * from test©r   r   z2020-12-31 12:00:00.000000)r   r   r6  rJ  rj  r¨   )r  rW   rÄ   r­  r*   r*   r+   Útest_roundtripping_datetimes  s
    rm  c               	   c  sd   t  tjdtjd�¡�:} | �}|V  W d   ƒ n1 s80    Y  W d   ƒ n1 sV0    Y  d S )Nr,  )Zdetect_types)r-  r   rw   r’   ZPARSE_DECLTYPESr.  r*   r*   r+   Úsqlite_builtin_detect_types  s    ÿrn  c                 C  sX   | }t dtddddƒgidd�}|jd|dd	d
� t d|¡jd }|tdƒksTJ ‚d S rh  )r   r   r6  rJ  rj  r¨   r   )rn  rW   rÄ   r­  r*   r*   r+   Ú)test_roundtripping_datetimes_detect_types'  s
    ro  c           
   	   C  s^  | }t ddgddgddgdœƒ}| ¡ �L}| ¡ �$ | d¡ | d	¡ W d   ƒ n1 s\0    Y  W d   ƒ n1 sz0    Y  |jd
|dd�dksœJ ‚|jd|ddd�dks¶J ‚|jd|ddd�dksÐJ ‚t d
|¡}t ||¡ t d|¡}t ||¡ tjd|dd�}t ||¡ tjd|dd�}t ||¡ d}t	j
t|d��  tjd|dd� W d   ƒ n1 �sr0    Y  | ¡ �N}| ¡ �$ | d¡ | d	¡ W d   ƒ n1 �sº0    Y  W d   ƒ n1 �sÚ0    Y  |jd|ddd�dk�s J ‚|jd|dddd� |jd|dddd�dk�s2J ‚tjd|dd�}	t t||gdd�|	¡ d S )NrC   rD   r�  r¡   rC  r¦  r§  z$DROP SCHEMA IF EXISTS other CASCADE;zCREATE SCHEMA other;Ztest_schema_publicFr”  Ztest_schema_public_explicitr½  )r›   rn   r£   rä   Ztest_schema_otherÚotherr¾  z!Table test_schema_other not foundrc  )r›   rn   rä   r£   rI  )r›   rn   rä   r£   r4  rß   TrA  )r   r’   rj   rµ   r6  r   r#   r­   r•  rð   rd  re  r   )
r  rW   rÄ   rn   r—  r˜  rI  Zres4rP  rP  r*   r*   r+   Útest_psycopg2_schema_support0  sl    


Füúÿ
ÿ0


Jÿûûùÿ
rq  c           	   	   C  sð   | }ddl m} |dƒ}| ¡ �B}| ¡ � | |¡ W d   ƒ n1 sJ0    Y  W d   ƒ n1 sh0    Y  d}t ||¡}tdtddd�gd	 gd
dgd	 d�}t	 
||¡ tj|dd��}| d¡ W d   ƒ n1 sâ0    Y  d S )Nr   rt   zÐ
    CREATE TABLE person
    (
        id serial constraint person_pkey primary key,
        created_dt timestamp with time zone
    );

    INSERT INTO person
        VALUES (1, '2021-01-01T00:00:00Z');
    zHSELECT * FROM "person" AS p1 INNER JOIN "person" AS p2 ON p1.id = p2.id;rC   Z2021r—   r˜   rD   r%  Z
created_dtrÏ   TrW  Zperson)r¸  ru   r’   rj   rN   rJ  rj  r   r   r­   r•  r   r   rë   )	r  rW   ru   rÇ  rn   r£  r­  r«  r\  r*   r*   r+   Útest_self_join_date_columns{  s"    ÿ

Fÿÿrr  c              	   C  sÒ   | }t g d¢g d¢dœƒ}t |¡�š}| ¡ �$ | |d¡dksDJ ‚W d   ƒ n1 sX0    Y  | d¡spJ ‚| ¡ � | d¡ W d   ƒ n1 s˜0    Y  | d¡r°J ‚W d   ƒ n1 sÄ0    Y  d S )Nr™  rž  rŸ  Zdrop_test_framerF   )r   r   r   rÒ  r6  rZ  rë   )r  rW   r  r\  r*   r*   r+   Útest_create_and_drop_tableŸ  s    
2
(rs  c                 C  s^   | }t tdddƒtdddƒgdgd�}|jd|dd�dks>J ‚td	|ƒ}t || t¡¡ d S )
NrÐ  rC   rD   rC  rÏ   rÑ  Fr”  zSELECT * FROM test_date)r   r   r6  r"   r­   r•  rÃ   r{   )r/  rW   rÄ   rP  r*   r*   r+   Útest_sqlite_datetime_date®  s
    "
rt  Útz_awareFTc                 C  s”   |}| s"t dddƒt dddƒg}n$tdddd�}t| ¡ ƒ d	d
„ ¡}t|dgd�}|jd|dd�dkslJ ‚td|ƒ}| dd
„ ¡}t 	||¡ d S )NrÓ  r   rC   rÔ  r¸  rD   r¹  rº  c                 S  s   |   ¡ S r÷   )Útimetz)r½  r*   r*   r+   rÛ  ¿  re   z+test_sqlite_datetime_time.<locals>.<lambda>rC  rÏ   rÕ  Fr”  zSELECT * FROM test_timec                 S  s
   |   d¡S rÖ  r×  rÙ  r*   r*   r+   rÛ  Æ  re   )
r   r   r   Zto_pydatetimerÜ  r   r6  r"   r­   r•  )ru  r/  rW   Ztz_timesZtz_dtrÄ   rP  r«  r*   r*   r+   Útest_sqlite_datetime_time·  s    
rw  c           
      C  sR   |   d|› d�¡}|D ] \}}}}}}	||kr|  S qtd|› d|› d�ƒ‚d S )NzPRAGMA table_info(ré  zTable z	, column z
 not found)rN   re  )
rW   rå   ÚcolumnZrecsZcidr›   ÚctypeZnot_nullÚdefaultÚpkr*   r*   r+   Úget_sqlite_column_typeÊ  s
    
r|  c                 C  s  | }ddg}ddg}t ||d�}|jd|d�dks6J ‚|jd	|dd
id�dksRJ ‚t|ddƒdksfJ ‚t|d	dƒd
kszJ ‚d}tjt|d��$ |jd|dtid� W d   ƒ n1 s¶0    Y  |jd|d
d�dksØJ ‚t|ddƒd
ksìJ ‚t|ddƒd
k�sJ ‚d S )NrÆ   rÇ   ró  rô  rÏ   rõ  r  rD   rö  ÚSTRINGr÷  r<  z!B \(<class 'bool'>\) not a stringrc  r  rù  )r   r6  r|  rð   rd  re  Úbool)r/  rW   r\  rº   rÄ   rP  r*   r*   r+   Útest_sqlite_test_dtypeÒ  s    2r  c                 C  s´   | }t dd gƒt tdddƒd gƒt dd gdd�t dd gƒdœ}t|ƒ}d	}|j||d
�dks`J ‚t||dƒdkstJ ‚t||dƒdksˆJ ‚t||dƒdksœJ ‚t||dƒdks°J ‚d S )NTrÿ  r¥   rC   rŠ  r@  r:  r   r  r  rD   r  r<  r  rd  r  r/   ZREAL)r   r   r   r6  r|  )r/  rW   r\  rÄ   rõ   r*   r*   r+   Útest_sqlite_notna_dtypeè  s    

ür€  c                 C  sæ   | }t ddgddggddgd�}d}tjt|d	�� |jd
|d� W d   ƒ n1 sV0    Y  tg d¢ƒD ]t\}}|j||d�dksŠJ ‚t ||¡ t ddgddggd|gd�}d|d›�}|j||d�dksÔJ ‚t ||¡ qld S )NrC   rD   rE   rF   rC  r“  rÏ   z$Empty table or column name specifiedrc  rE  r  )
ztest_weird_name]ztest_weird_name[ztest_weird_name`ztest_weird_name"ztest_weird_name'z_b.test_weird_name_01-30z"_b.test_weird_name_01-30"Z99beginswithnumberZ12345rR  Ztest_weird_col_namerM  )r   rð   rd  re  r6  Ú	enumerater   Ztable_exists)r/  rW   rÄ   rP  ZndxZ
weird_namerO  Zc_tblr*   r*   r+   Útest_sqlite_illegal_namesû  s    ,ÿr‚  c                 G  sŽ   t djtdjtjdjtdjtdjtdjtd ƒdd„ tj	djt
dji	}g }|D ]4}t|tƒrft|ƒrfd }|t|ƒ }| ||ƒ¡ qL| t|ƒ S )Nz'{}'z{:.8f}z{:d}c                 S  s   dS )NZNULLr*   )re  r*   r*   r+   rÛ  #  re   zformat_query.<locals>.<lambda>z{:.10f}z'{!s}')r   rÆ  r{   r«   Zstr_ÚbytesrH   r*  r©   r  r~  rv   r   rß   r  )r   r†  Z_formattersZprocessed_argsÚargÚ	formatterr*   r*   r+   Úformat_query  s"    ÷r†  c                 C  sL   t  |¡�}| | ¡ ¡ }W d  ƒ n1 s.0    Y  |du rDdS t|ƒS )z#Replace removed sql.tquery functionN)r   r!   rN   rÛ   r¹  )r{  rn   rõ  rP  r*   r*   r+   Útquery2  s    ,r‡  c                 C  sþ   t tj d¡ d¡ttdƒƒtdddd�d�}tj	|d	| d
d�dksHJ ‚t 
d| ¡}|j|_|}t ||¡ dgt|ƒ |d< | ¡ }tt t|ƒ¡tjd�d }| ¡ |d< tj	|d| d
d�dksÈJ ‚tj
d| dd�}| ¡ }||_d|j_t ||¡ d S )NrD   ©rø  rF   ÚABCDú
2000-01-01rø  rÇ   rÁ  r'  rW  Fr”  zselect * from test_tablerC  Útxtr@  ZIdxZtest_table2zselect * from test_table2r(  )r   r«   rB  rC  rD  r   r¹  r   r   r6  rj  r£   r­   r•  r[  rN  rä  rÁ   r›   )r/  rž   r­  r«  Zframe2Znew_idxr*   r*   r+   Útest_xsqlite_basic9  s(    
ýrŒ  c           	      C  s¼   t tj d¡ d¡ttdƒƒtdddd�d�}tj|j	d	< t
 |d
¡}|  ¡ }| |¡ d}| ¡ D ]$\}}t|g|¢R Ž }t|| d� qd|  ¡  t
jd| d�}|j|_tj||dd� d S )NrD   rˆ  r‰  rŠ  rø  rÇ   rÁ  r'  rl  r2  z(INSERT INTO test VALUES (%s, %s, %s, %s)rê  rk  gü©ñÒMbP?)Zrtol)r   r«   rB  rC  rD  r   r¹  r   rU  r¨   r   r5  rM   rN   Ziterrowsr†  r‡  rU   rj  r£   r­   r•  )	r/  rž   rº  rY   ÚinsrÚ  rK   Zfmt_sqlr­  r*   r*   r+   Útest_xsqlite_write_row_by_rowT  s"    
ý
rŽ  c                 C  sÐ   t tj d¡ d¡ttdƒƒtdddd�d�}t 	|d	¡}|  
¡ }| |¡ d
}|jd }t | ¡� }| |t|ƒ¡ W d   ƒ n1 sŠ0    Y  |  ¡  t d| ¡}|jd d… |_t ||d d… ¡ d S )NrD   rˆ  r‰  rŠ  rø  rÇ   rÁ  r'  r2  z$INSERT INTO test VALUES (?, ?, ?, ?)r   rk  rC   )r   r«   rB  rC  rD  r   r¹  r   r   r5  rM   rN   r¨   r!   r  rU   rj  r£   r­   r•  )r/  rž   rº  rY   r�  rK   rõ  r­  r*   r*   r+   Útest_xsqlite_executek  s     
ý

.r�  c                 C  s¼   t tj d¡ d¡ttdƒƒtdddd�d�}t 	|d	¡}| 
¡ }|D ]6}| d
¡}t|ƒdkrF|d dkrF|d dksFJ ‚qFtj	|d	ddgd�}| 
¡ }d|v s¦J ‚|  ¡ }| |¡ d S )NrD   rˆ  r‰  rŠ  rø  rÇ   rÁ  r'  r2  ú r   rÆ   rC   ZDATETIMEr€  zPRIMARY KEY ("A", "B"))r   r«   rB  rC  rD  r   r¹  r   r   r5  Ú
splitlinesr”  r[  rM   rN   )r/  rž   rº  ÚlinesÚlineÚtokensrY   r*   r*   r+   Útest_xsqlite_schema€  s     
ý
r•  c              	   C  s’   d}|   ¡ }| |¡ t | ¡�^}| d¡ | d¡ tjtjdd�� | d¡ W d   ƒ n1 sf0    Y  W d   ƒ n1 s„0    Y  d S )Núc
    CREATE TABLE test
    (
    a TEXT,
    b TEXT,
    c REAL,
    PRIMARY KEY (a, b)
    );
    ú,INSERT INTO test VALUES('foo', 'bar', 1.234)z,INSERT INTO test VALUES('foo', 'baz', 2.567)zExecution failed on sqlrc  z(INSERT INTO test VALUES('foo', 'bar', 7))rM   rN   r   r!   rð   rd  r�  )r/  rº  rY   rõ  r*   r*   r+   Útest_xsqlite_execute_fail”  s    	


r˜  c               	   C  s¾   d} t  t d¡¡�V}| ¡ }| | ¡ t |¡�}| d¡ W d   ƒ n1 sR0    Y  W d   ƒ n1 sp0    Y  d}tj	tj
|d�� td|d� W d   ƒ n1 s°0    Y  d S )Nr–  r,  r—  z$Cannot operate on a closed database.rc  rk  rê  )r-  r   rw   r’   rM   rN   r   r!   rð   rd  r  r‡  )rº  rW   rY   rõ  rP  r*   r*   r+   Ú&test_xsqlite_execute_closed_connection©  s    	
Fr™  c                 C  s0   t dt d¡iƒ}tj|| ddd�dks,J ‚d S )NÚFromr¥   ZtestkeywordsF©rn   r›   r£   )r   r«   Zonesr   r6  )r/  rÄ   r*   r*   r+   Ú$test_xsqlite_keyword_as_column_names¿  s    rœ  c                 C  sp   t ddgdgd�}tj|| ddd�dks,J ‚| }tdd	„ | d
¡D ƒƒ}|dksTJ ‚t d
|¡}t ||¡ d S )NrC   rD   Zc0rÏ   Úmono_dfFr›  c                 s  s   | ]}|d  V  qdS )r   Nr*   )rJ   Zmy_c0r*   r*   r+   Ú	<genexpr>Ì  re   z4test_xsqlite_onecolumn_of_integer.<locals>.<genexpr>zselect * from mono_dfrE   )r   r   r6  ÚsumrN   rj  r­   r•  )r/  r�  Zcon_xZthe_sumr­  r*   r*   r+   Ú!test_xsqlite_onecolumn_of_integerÄ  s    r   c                 C  sÌ  t ddgddgdœƒ}t g d¢g d¢dœƒ}d}d	|› �}d
}tjt|d��" tj|| |dd� W d   ƒ n1 st0    Y  t|| ƒ tj|| |dd� d}tjt|d��" tj|| |dd� W d   ƒ n1 sÔ0    Y  tj|| |ddd� t|| d�ddgk�sJ ‚tj|| |ddd�dk�s*J ‚t|| d�g d¢k�sDJ ‚t|| ƒ tj|| |ddd�dk�slJ ‚t|| d�ddgk�s†J ‚tj|| |ddd�dk�s¤J ‚t|| d�g d¢k�s¾J ‚t|| ƒ d S )NrC   rD   rÆ   rÇ   r]  r~  )rÈ   rÉ   ÚEZtable_if_existszSELECT * FROM z*'notvalidvalue' is not valid for if_existsrc  Znotvalidvalue)rž   rn   r›   r4  r^  z&Table 'table_if_exists' already existsrI  F)rž   rn   r›   r4  r£   rê  rÎ  ræ  rE   )©rE   rÈ   ©rF   rÉ   ©r¥   r¡  rß   )rÎ  ræ  r¢  r£  r¤  )r   rð   rd  re  r   r6  rë   r‡  )r/  Zdf_if_exists_1Zdf_if_exists_2r²   Z
sql_selectrP  r*   r*   r+   Útest_xsqlite_if_existsÔ  s†    
ü$
ÿü$ûûùÿ

ûùÿ
ûùÿ
r¥  )N(,  Ú
__future__r   r-  r   rP   r   r   r   r   r¹   r   Úpathlibr
   rw   Útypingr   rÃ  rE  r«   rð   Zpandas._configr   Zpandas._libsr   Zpandas.compatr   r   Zpandas.compat._optionalr   Zpandas.util._test_decoratorsÚutilZ_test_decoratorsÚtdZpandasrJ  r   r   r   r   r   r   r   r   r   r   Zpandas._testingZ_testingr­   Zpandas.util.versionr   Z	pandas.ior   Zpandas.io.sqlr   r   r   r    r!   r"   r#   r8   r=  ÚfilterwarningsZ
single_cpuZ
pytestmarkZfixturer,   r<   r\   r]   ro   rz   r‹   r�   rŽ   r“   rœ   r±   r¸   r¼   rŒ   rÅ   rÒ   rÓ   rç   rè   rë   rí   rö   rù   rû   rý   rþ   rÿ   r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r(  r)  r+  r/  r0  r1  Úparamrì   Zmysql_connectableZmysql_connectable_irisZmysql_connectable_typesZpostgresql_connectableZpostgresql_connectable_irisZpostgresql_connectable_typesZsqlite_connectableZsqlite_connectable_irisZsqlite_connectable_typesZsqlalchemy_connectableZsqlalchemy_connectable_irisZsqlalchemy_connectable_typesZadbc_connectableZadbc_connectable_irisZadbc_connectable_typesZall_connectableZall_connectable_irisZall_connectable_typesZparametrizer8  r?  rQ  rR  r]  rb  rf  rm  rr  rw  r|  r}  r  r…  r�  r™  r®  r¼  rÀ  rÁ  rÆ  rÈ  rÍ  rÎ  rÏ  rÕ  rÖ  r×  rØ  rÙ  rÚ  rÜ  rß  rá  rã  rè  rò  ró  r÷  r   rj  r  r
  r  r  r  r   r+  r*  rH   r0  r1  r7  r9  r=  r?  rJ  rQ  rS  rV  rZ  r]  r^  ra  rb  rc  rk  r:   r›   rp  rq  rs  Zskip_if_installedrv  rz  r}  r  r€  r�  r�  r‘  r’  r—  r¥  r¨  r©  rª  r«  r¬  r­  r¯  r±  r³  rµ  r¶  r·  r¿  rÀ  rÅ  rÉ  rË  rÏ  rÒ  rÞ  rá  rä  rå  rç  rê  rí  rð  rñ  rþ  r  r  r  Úinfr  r,  r.  r0  r4  r5  r6  r7  rC  rD  rF  r@  rA  rX  Z
no_defaultrY  rZ  r\  r^  rd  rg  rm  rn  ro  rq  rr  rs  rt  rw  r|  r  r€  r‚  r†  r‡  rŒ  rŽ  r�  r•  r˜  r™  rœ  r   r¥  r*   r*   r*   r+   Ú<module>   sÌ  0$
ÿü
"-




#



















	










þþþþþþ
ÿ
ÿþþþÿÿ


!
	





	



$%
9

4
#


















7

ý
øþ(

.
þ
I
üþ	
0 "ñþ




'))$3#0þ%*.,
'		J#	 