a
    Pf5                    @  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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l.m/Z/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< er\d dl=Z=ej>?d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jAdd ZsejAdd ZtejAdd 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Zexe{ e~ Zeye| e Zeze} e Zd{ejvd_ej>jwdgZejvdaej>jwdejvd}ej>jwdgZejvdcej>jwdejvdej>jwdgZedg e Zedg e Zedg e Zej>dedd Zej>dedd Zej>dedd Zej>dedd Zej>deej>dddgdd Zej>deej>dddgdd Zej>dedd Zej>dedd Zej>dedd Zej>dedd Zej>dedd Zej>dedd Zej>dedd Zej>dedd Zej>dedd Zej>dexdd Zej>de{ej>dddgdd Zej>de{dd Zej>dedd Zej>dexdd Zej>de{dd Zdd Zdd Zdd ZddĄ Zej>deddƄ Zej>deddȄ Zej>deddʄ Zej>dedd̄ Zej>dedd΄ Zej>deddЄ Zej>dedd҄ Zej>deddԄ Zej>deddք Zej>dedd؄ Zej>deddڄ Zej>dedd܄ Zej>deddބ Zej>dedd Zej>dedd Zej>deej>dg dej>de4jddfe4jddfe4j;ddfe4j<ddfgdd Zej>dedd Zej>dedd Zej>dedd Zej>deej>dg ddd Zej>dedd Zej>dedd Zej>deej>ddeeeedgdd Zej>dedd Zej>ded d Zej>dedd Zej>dedd Zej>dedd Zej>dedd	 Zej>ded
d Zej>dedd Zej>dedd Zej>dedd Zej>dedd Zej>dedd Zej>dedd Zʐdd Zej>dedd Zej>dedd Zej>deej>ddd d!d"d#d$d%d&d'd(d)d*d+d,eeejϐd-krPd.nd/fgd0d1 Zej>deej>d2d3d4gd5d6 Zej>ded7d8 ZeӐd9ej>ded:d; Zej>ded<d= Zej>ded>d? Zej>ded@dA ZאdBdC ZeddDdE ZeddFdG ZڐdHdI ZېdJdK ZܐdLdM Zej>dedNdO Zej>dedPdQ Zej>dedRdS Zej>dedTdU Zej>dedVdW Zej>dedXdY Zej>dedZd[ Zej>ded\d] Zej>ded^d_ Zej>ded`da Zej>de{ej>dbddcggddde Zej>de{dfdg Zej>de{dhdi Zej>dedjdk Zej>dedldm Zej>dedndo Zej>dedpdq Zej>dedrds Zej>dedtdu Zej>dedvdw Zej>dedxdy Zej>dedzd{ Zej>ded|d} Zej>ded~d Zej>dedd Zej>dedd Zej>dedd Zej>dedd Zej>dedd Zej>dedd Zej>dedd Zej>dedd Zej>dedd Zej>deej>ddejgidej giej gdgdgdd Z ej>dedd Zej>dedd Zej>dedd Zej>dedd Zej>dedd Zdd Zdd Zej>deej>dddgdd Zej>deej>dddgdd Z	ej>deej>dg ddd Z
ejAd.dddZejAdd Zej>dedd Zej>deej>dejdgej>dddg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Րdg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)lib)pa_version_under13p0pa_version_under14p1)import_optional_dependency)
	DataFrameIndex
MultiIndexSeries	Timestampconcat
date_rangeisnato_datetimeto_timedelta)ArrowStringArrayStringArray)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+   Q/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/tests/io/test_sql.pysql_stringsE   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/   r0   r1   r2   r3   r   __version__)
r9   r.   r/   r0   r1   r2   r3   dtypemetadatar4   r+   r+   r,   iris_table_metadatab   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 )NzCREATE 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csvfilerR   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 s0    Y  |   d S )NzCREATE 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 rC   rH   rJ   r+   r+   r,   rM      s   



z3create_and_load_iris_postgresql.<locals>.<listcomp>)rN   rO   rP   rQ   rR   rS   rT   rV   rW   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 s0    Y  W d    n1 s0    Y  d S )
Nr   insertr?   r@   c                   s   g | ]}t t |qS r+   dictziprJ   headerr+   r,   rM          z(create_and_load_iris.<locals>.<listcomp>TZ
checkfirstbind)r9   r`   r=   rP   rQ   rR   rS   valuesbegindropcreaterO   )	rX   r>   r`   r4   r[   rR   paramsrY   conr+   rd   r,   create_and_load_iris   s    

rp   c                 C  s   d}t | tjr$|  }|| ntddd}|r|t | |jr||  }|| W d    n1 sh0    Y  |   nFddlm} ||}| 	 }|| W d    n1 s0    Y  d S )Nz+CREATE VIEW iris_view AS SELECT * FROM irisadbc_driver_manager.dbapiignoreerrorsr   text)

isinstancesqlite3
ConnectionrN   rO   r   rV   r9   rv   rk   )rX   rY   rZ   adbcrv   ro   r+   r+   r,   create_and_load_iris_view   s    
(

r{   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.   DateTimer0   Integerr1   r3   r%   typesTextColDateCol
IntDateColIntDateOnlyColFloatColIntColBoolColIntColWithNullBoolColWithNull)	r9   r~   r   r.   r   r0   r   r1   r3   )r}   r~   r   r.   r   r0   r   r1   r3   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(?, ?, ?, ?, ?, ?, ?, ?, ?)
                )rw   rx   ry   rN   rO   rT   rV   )rX   r   rY   Zins_stmtrZ   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)
                )rN   rO   rT   rV   )rX   r   rZ   rY   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 s0    Y  W d    q1 s0    Y  nL|  4 |j	| dd |j
| d | | W d    n1 s0    Y  d S )Nr   r_   EngineTrg   rh   )r9   r`   sqlalchemy.enginer   r   rj   rw   connectrk   rl   rm   rO   )rX   r   r}   r`   r   r   rY   r+   r+   r,   create_and_load_types5  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 s0    Y  W d    n1 s0    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   r1   r3   r`   r   datetzDateColWithTzT)timezonez2000-01-01 00:00:00-08:00z2000-06-01 00:00:00-07:00rg   rh   z2000-01-01 08:00:00UTCtzz2000-06-01 07:00:00name)r9   r.   r   r1   r3   r`   r   r   rj   rw   r   rk   rl   rm   rO   r   r   )rX   r.   r   r1   r3   r`   r   r<   r   Zdatetz_datarY   Zexpected_datar+   r+   r,   create_and_load_postgres_datetzI  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pytyperL   r+   r+   r,   check_iris_framev  s    
r   )
table_namec                 C  sl  d| }t ddd}t| tjr<|  }|| d S |rt| |jr|  &}|| | d W  d    S 1 s0    Y  nddlm} ddl	m
} t| trzV|| }| (} | | W  d    W |  S 1  s0    Y  W |  n
|  0 nTt| |rZ|  } | | W  d    S 1 sN0    Y  n| | S d S )Nz SELECT count(*) AS count_1 FROM rq   rr   rs   r   )create_enginer   )r   rw   rx   ry   rN   rO   fetchoner9   r   r   r   r|   r   exec_driver_sqlZ
scalar_onedispose)rX   r   rY   rz   rZ   r   r   enginer+   r+   r,   
count_rows  s.    


,

0r   c                 C  s   | dddd}t |S )NiodatarQ   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i2g333333$@rD   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|   int64rI   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>ݦ4gёR?)2000-01-06 00:00:00g?{mX?$?gnk3Am?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   ir   )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}|rt | |jrg }|    }|D ]N}|d  |d D ]8}|d	  |d
 D ]"}|d dkr|d }|	| qqpq\|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+   )rK   viewr+   r+   r,   rM     rf   z!get_all_views.<locals>.<listcomp>rq   rr   rs   Zcatalog_namecatalog_db_schemasZdb_schema_namedb_schema_tables
table_typer   r   r   inspect)rw   rx   ry   rO   fetchallr   adbc_get_objectsread_all	to_pylistappendr9   r   Zget_view_names)
rX   crz   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}|rt | |jrg }|    }|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+   )rK   r   r+   r+   r,   rM     rf   z"get_all_tables.<locals>.<listcomp>rq   rr   rs   r   r   r   r   r   r   r   )rw   rx   ry   rO   r   r   r   r   r   r   r9   r   Zget_table_names)
rX   r   rz   r   r   r   r   r   r   r   r+   r+   r,   get_all_tables  s     
r   zLsqlite3.Connection | sqlalchemy.engine.Engine | sqlalchemy.engine.Connection)r   rX   c              	   C  s   t |tjr,|dt|   |  ntddd}|rt ||jr| "}|d|  d W d    q1 sx0    Y  n\|	 D}t
|}||  W d    n1 s0    Y  W d    n1 s0    Y  d S )NzDROP TABLE IF EXISTS rq   rr   rs   zDROP TABLE IF EXISTS "")rw   rx   ry   rO   r   _get_valid_sqlite_namerV   r   rN   rk   r   
drop_table)r   rX   rz   rZ   ro   dbr+   r+   r,   r   0  s    

2
r   )r   rX   c                 C  s   dd l }t|tjr4|dt|   |  ntddd}|rt||jr|	 "}|d|  d W d    q1 s0    Y  nR|j
jj| }|d| }| }|| W d    n1 s0    Y  d S )Nr   zDROP VIEW IF EXISTS rq   rr   rs   zDROP VIEW IF EXISTS "r   )r9   rw   rx   ry   rO   r   r   rV   r   rN   r   r}   Zidentifier_preparerZquote_identifierrv   rk   )r   rX   r9   rz   rZ   Zquoted_viewrY   ro   r+   r+   r,   	drop_viewC  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 )Nr9   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   )r9   r   r   r   tblr+   r+   r,   mysql_pymysql_engineZ  s    

r   c                 c  s   t | | t|  | V  d S Nrp   r{   )r   r   r+   r+   r,   mysql_pymysql_engine_irisk  s    
r   c                 c  s   t | |d | V  d S )Nr&   r   )r   r   r+   r+   r,   mysql_pymysql_engine_typesr  s    r   c                 c  s2   |   }|V  W d    n1 s$0    Y  d S r   r   )r   rX   r+   r+   r,   mysql_pymysql_connx  s    
r   c                 c  s2   |   }|V  W d    n1 s$0    Y  d S r   r   )r   rX   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   rX   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 )Nr9   Zpsycopg2z=postgresql+psycopg2://postgres:postgres@localhost:5432/pandasr   
r   r   r   r   r   r   r   r   r   r   )r9   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  rX   r+   r+   r,   postgresql_psycopg2_conn  s    
r  c                  c  s   t d ddlm}  d}| |N}|V  t|D ]}t|| q4t|D ]}t|| qL|	  W d    n1 sx0    Y  d S )Nadbc_driver_postgresqlr   dbapiz4postgresql://postgres:postgres@localhost:5432/pandas)
r   r   r  r
  r   r   r   r   r   rV   )r
  urirX   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   r4   Z	iris_view)adbc_driver_manageradbc_get_table_schemaProgrammingErrorrollbackr^   r{   )r  r   mgrrX   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+   tuplerj   rK   entryr+   r+   r,   rM     rf   z)postgresql_adbc_types.<locals>.<listcomp>)r  r  r  r  r   )r  r   r  rX   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  rX   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  rX   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 )Nr9   
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 )Nr9   r  r  )r  r9   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  rX   r+   r+   r,   sqlite_conn  s    
r   c                 C  s2   t d}|| }t|| t| |  | S )Nr9   )r   r   r   rp   r{   r   )r  r   r9   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"  rX   r+   r+   r,   sqlite_conn_iris  s    
r#  c                 C  s,   t d}|| }t||d |  | S )Nr9   r%   )r   r   r   r   r   )r  r   r9   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%  rX   r+   r+   r,   sqlite_conn_types+  s    
r&  c               	   c  s   t d ddlm}  t }d| }| |N}|V  t|D ]}t|| qDt	|D ]}t
|| q\|  W d    n1 s0    Y  W d    n1 s0    Y  d S )Nadbc_driver_sqliter   r	  zfile:)r   r   r'  r
  r   r  r   r   r   r   r   rV   )r
  r   r  rX   r   r   r+   r+   r,   sqlite_adbc_conn1  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]   r{   )r(  r   r  rX   r+   r+   r,   sqlite_adbc_irisA  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  rj   r   rV   )r(  r   r  rX   r  r  r+   r+   r,   sqlite_adbc_typesS  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   rx   r   Zclosing_connrX   r+   r+   r,   sqlite_buildini  s    r/  c                 c  s   t | | t|  | V  d S r   )r]   r{   )r/  r   r+   r+   r,   sqlite_buildin_irisp  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,   rM   y  rf   z(sqlite_buildin_types.<locals>.<listcomp>)r   )r/  r   r+   r+   r,   sqlite_buildin_typesw  s    
r1  )Zmarks)r  r   r  )r"  r#  r!  )r%  r&  r$  rX   c                 C  s    | | } |jd| ddd d S )Ntestr   Fr   ro   	if_existsr   )getfixturevalueto_sql)rX   r   requestr+   r+   r,   test_dataframe_to_sql  s    
r8  c                 C  sN   | dkr |j tjjddd || } |jd d }|jd| ddd	 d S )
Nr  z7postgres ADBC driver cannot insert index with null typeTreasonstrictr   r2  r   Fr3  )node
add_markerr   markxfailr5  r   r6  )rX   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	rt
}d}qd }d}nt}d}|| } tj||dd" |jd| ddd W d    n1 s0    Y  d S )NpyarrowrD   zint8[pyarrow]r;     timestamp[ns][pyarrow]zdate32[day][pyarrow]zduration[ns][pyarrow]azstring[pyarrow])r*  r   r   r   stringrz   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   rl   r   DeprecationWarningUserWarningr5  r   assert_produces_warningr6  )rX   r7  r   exp_warningmsgr+   r+   r,   "test_dataframe_to_sql_arrow_dtypes  s0    

rS  c                 C  sL   t d tdtjtddd|gddi}|| } |jd| dd	d
 d S )NrA  r   rC  rD   rD  rB  rJ  rK  Fr3  )r   r   r   rL  rM  r   r5  r6  )rX   r7  Znulls_fixturer   r+   r+   r,   *test_dataframe_to_sql_arrow_dtypes_missing  s    

rT  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sJ d S )	NrV  rz   z)'method' not implemented for ADBC driversTr9  Zneed_transaction
test_framerU  )r<  r=  r   r>  r?  r5  r"   r6  	has_tabler   len)rX   rU  r   r7  	pandasSQLr+   r+   r,   test_to_sql  s    
,r]  zmode, num_row_coef)rK  rD   )r   rE   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[  )rX   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 s0    Y  d S )NTrW  rX  r^  r_  z!Table 'test_frame' already existsrH  )r5  r"   r6  rZ  r   raises
ValueError)rX   r   r7  r\  rR  r+   r+   r,   test_to_sql_exist_fail6  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   r6   )r5  r#   r   rL  read_sqlr   r   rX   r7  
iris_framer+   r+   r,   test_read_iris_queryB  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sJ d
|jv sJ d S )Nrz   ,'chunksize' not implemented for ADBC driversTr9  rg     	chunksizerh  ri  r6   )r<  r=  r   r>  r?  r5  r   r#   r   rL  rj  r   r   rk  r+   r+   r,   test_read_iris_query_chunksizeN  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 )Nrz   rn  Tr9  r   )r1   r3   r   selectr4   )Zautoload_withr   r   r   lengthrn   )r<  r=  r   r>  r?  r5  r9   r1   r3   r   rs  rw   r|   r#   r   r   )
rX   r7  r1   r3   r   rs  r<   Zautoload_conr4   rl  r+   r+   r,   .test_read_iris_query_expression_with_parametera  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 )
Nrz   rn  Tr9  r(   zNo part of z( found in sql_strings['read_parameters']r   r   rv  )
r<  r=  r   r>  r?  itemsKeyErrorr5  r#   r   )rX   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 )Nr4   )r5  r$   r   rL  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 )Nrz   +chunksize argument NotImplemented with ADBCr:  r4   ro  rp  )r<  r=  r   r>  r?  r5  r   r$   r   rL  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sJ d S )Nc                   s2    d  fdd|D }|| j | d S )NrD   c                   s   g | ]}t t |qS r+   ra   rJ   r   r+   r,   rM     rf   z8test_to_sql_callable.<locals>.sample.<locals>.<listcomp>)r   rO   r   r`   )Zpd_tablerX   r   	data_iterr   checkr  r,   sample  s    
z$test_to_sql_callable.<locals>.sampleTrW  rX  rY  rD   r`  )rX   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 rt|jj	j
tjsJ nt|jj	j
tjsJ t|jj	j
tjsJ d|v rt|jj	j
tsJ nt|jj	j
tjsJ d S )Nr1  ;sqlite_buildin connection does not implement read_sql_tabler  r   r'   )applymarkerr   r>  r?  r5  r   r$   r   r   r;   r   r   r   r   integerr   bool_r   r   objectrX   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 s0    Y  W d    q1 s0    Y  n2| 	  | 
| W d    n1 s0    Y  td| }t|| td| }t|| d S )Nr   ru   r   rD   rE   rF   皙?r   333333?rE  brX  Fr   ro   r   z}DROP PROCEDURE IF EXISTS get_testdb;

    CREATE PROCEDURE get_testdb ()

    BEGIN
        SELECT * FROM test_frame;
    ENDzCALL get_testdb();)r5  r9   rv   r   r   r   r6  rw   r   rk   rO   r   r#   r   assert_frame_equalrj  )	rX   r7  rv   r   r   procZengine_connres1res2r+   r+   r,   test_read_procedure  s"    



H
(r  expected_countrE   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 s0    Y   S )
Nr   z, c                 S  s   g | ]}d | d qS )r   r+   )rK   kr+   r+   r,   rM     rf   zVtest_copy_from_callable_insertion_method.<locals>.psql_insert_copy.<locals>.<listcomp>.zCOPY z (z) FROM STDIN WITH CSV)r   file)
connectionrN   r   rQ   writer	writerowsseekjoinr   r   Zcopy_expert)r   rX   r   r  Z
dbapi_connrZ   Zs_bufr  r   r   	sql_queryr  r+   r,   psql_insert_copy  s    



,zBtest_copy_from_callable_insertion_method.<locals>.psql_insert_copyrD   rE   r  r   rE  ncol1col2Zcol3rX  F)r   ro   r   rU  r5  r   r6  r   r$   r   r  )rX   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    q1 s0    Y  n2| 	  | 
| W d    n1 s0    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 s0    Y  d S )Nr   r_   r   ru   c                   s<    fdd|D }| j |jdgd}||}|jS )Nc                   s   g | ]}t t |qS r+   ra   rJ   r  r+   r,   rM   0  rf   z\test_insertion_method_on_conflict_do_nothing.<locals>.insert_on_conflict.<locals>.<listcomp>rE  )Zindex_elements)r   rj   Zon_conflict_do_nothingrO   rowcountr   rX   r   r  r   rY   r  r_   r  r,   insert_on_conflict/  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
    );
    rD    @rE  abcr   test_insert_conflictr   Fr3  rD   g	@r  r   ro   r   r4  rU  TrW  )r5  Zsqlalchemy.dialects.postgresqlr`   r   r   sqlalchemy.sqlrv   rw   r   rk   rO   r   listr6  r   r$   r   r  r   r   )rX   r7  r   rv   r  
create_sqlro   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 postgresqlr  r  )rE   g@r  r  r   Ztest_public_schemar   Fpublic)r   ro   r4  r   r   r   )r  r   r>  r?  r5  r   r  r6  r   r$   r   r  )rX   r7  	test_dataZdf_outr+   r+   r,   test_to_sql_on_public_schema`  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    q1 s0    Y  n2| 	  | 
| W d    n1 s0    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 s0    Y  d S )Nr   r_   r   ru   c                   sH    fdd|D }| j |}|j|jj|jjd}||}|jS )Nc                   s   g | ]}t t |qS r+   ra   rJ   r  r+   r,   rM     rf   zXtest_insertion_method_on_conflict_update.<locals>.insert_on_conflict.<locals>.<listcomp>)r  r   )r   rj   Zon_duplicate_key_updater  r  r   rO   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  rE   TrW  )r5  Zsqlalchemy.dialects.mysqlr`   r   r   r  rv   rw   r   rk   rO   r   r  r6  r   r$   r   r  r   r   )rX   r7  r   rv   r  r  ro   r   r  r  r  r\  r+   r_   r,   (test_insertion_method_on_conflict_updatex  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 s0    Y  W d    q1 s0    Y  n2| 
  | | W d    n1 s0    Y  t|| }tdgdd}	t||	 d S )Nr   r   ru   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;
    rD   r   Zgroup_idr   )r5  r   r   r  rv   uuiduuid4hexrw   r   rk   rO   r$   r   r   r  )
rX   r7  r   rv   r   r   Zsql_stmtro   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_viewrD   r   r  )rO   rL  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   rP  FutureWarningr   rO   )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   rP  r  r   rO   )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 s0    Y  t
| d S )Nrz   )'params' not implemented for ADBC driversTr9  r(   rx  rv  r<  r=  r   r>  r?  r5  r  r"   run_transaction
read_queryr   rX   r7  r-   r  r{  rn   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 s0    Y  t
| d S )
Nrz   r  Tr9  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 s0    Y  W d    n1 s0    Y  t	| d S )Nr&   r'   rz   zbroken testr  r*   rv  )
r  r   r>  r?  r5  r  r"   r  r  r   )rX   r7  r-   r  r{  r\  rl  r+   r+   r,   ,test_read_sql_iris_no_parameter_with_percent0  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_viewC  s    
r  c                 C  s\   d| v r|j tjjdd || } d}tj|| dd}t|| }t	t
|| d S )Nrz   r~  r  z1SELECT * FROM iris_view WHERE "SepalLength" < 0.0r   rp  )r<  r=  r   r>  r?  r5  r   r#   r   r  r   )rX   r7  r{  Z
with_batchZwithout_batchr+   r+   r,   *test_api_read_sql_with_chunksize_no_resultJ  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  )rX   r7  r   r\  r+   r+   r,   test_api_to_sqlW  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 s0    Y  d S )Ntest_frame2TrW  r^  r_  z"Table 'test_frame2' already existsrc  )	r5  r   rZ  r   r   r6  r   rd  re  )rX   r7  r   r\  rR  r+   r+   r,   test_api_to_sql_failb  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| sJ t|}t| d}||ksJ d S )Nr   TrW  r^  r_  rK  r5  r   rZ  r   r   r6  r[  r   rX   r7  r   r\  Znum_entriesZnum_rowsr+   r+   r,   test_api_to_sql_replaceq  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sJ td| sJ dt| }t| d}||ksJ d S )	Ntest_frame4TrW  r^  r_  rG   r   rE   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  )rX   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   rB  Zseriesr   Fr  zSELECT * FROM test_series)r5  r   rZ  r   r   r   r   aranger6  r#   r   r  to_frame)rX   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  ro   "SELECT * FROM test_frame_roundtriprz   __index_level_0__level_0r   Zinplace)r5  r   rZ  r   r   r6  r#   renamer   	set_indexr   r*  r   r   r  rX   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 )Nrz   r~  r  r  TrW  FrE   )ro   r   rq  r  r  )r<  r=  r   r>  r?  r5  r   rZ  r   r   r6  r#   r   r  )rX   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"   rO   r   rU   r  )rX   r7  
pandas_sqliris_resultsrL   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sJ tjd| ddid}t|jjjtjsJ |j	 t
dddd	d	d	t
ddd
d	d	d	gksJ 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sJ |j	 t
dddd	d	d	t
dddd	d	d	gksJ tjd| ddid}t|jjjtjsJ |j	 t
dt
dgks J d S )NSELECT * FROM typesr&   r  r   parse_datesi  rD   rF   r   rG   %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)rr   raisecoercezread_sql, text, moder  )r9   fallbackr   r9   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 argumentsr  r   datetime64[ns]rt   )ro   r  r  r   r   r  int32)r   r   r   zdatetime64[us])r5  r  r   r>  r?  r   r*  rI   r   r   r  )
rX   r7  rj  rv   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   rX   r7  r   r+   r+   r,   test_api_date_and_indexU  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 rtrt}qd }nt}tj|dd |jd| d}W d    n1 s0    Y  |dksJ 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 timedeltar  rz   F)rI  r   ro   rE   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   rN  rO  r   rP  r6  r#   rL  Z
DateOffsetr   r   )	rX   r7  r  r\  r   rQ  r  r  r  r+   r+   r,   test_api_timedeltad  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 )
NrE  y      ?      ?y               @rz   zdatatypes not supportedzComplex datatypes not supportedrc  Ztest_complexr  )r5  r   r   rd  re  r6  )rX   r7  r  r   rR  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sJ d S )Nrz   -index_label argument NotImplemented with ADBCr  test_index_labelTrW  r  rG   SELECT * FROM test_index_label)index_labelr   )r<  r=  r   r>  r?  r5  r   rZ  r   r   r   ranger   r   r6  r#   r   )	rX   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| rtj	| d	d
}|
d W d    n1 s0    Y  d}tdtditddgd}t|d| }||ksJ td| }|jd dksJ |jd dksJ 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sJ tj|d| dddgd}||ksJ td| }|jd d  ddgksJ 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 keyFr9  rz   r  r  r  TrW  rG   r  )ZA0A1)B0ZB1r  r  r   r  rD   Zlevel_1rK  r   r   )r4  r  rE   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  )	rX   r7  r  r\  Zexpected_row_countr  r  r   rR  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  rD   r  line1rE         ?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  )rX   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sJ ||}d|v rd}nd}tj|| |d}t	
|| d S )NZtest_dtype_argumentTrW  333333?g333333@ffffff@g333333@r   r   r   r  rE   r  z(SELECT "A", "B" FROM test_dtype_argumentz$SELECT A, B FROM test_dtype_argumentro   r;   )r5  r   rZ  r   r   r   r6  r   r#   r   r  )	rX   r7  r;   r  r\  r   r  r{  r  r+   r+   r,   test_api_dtype_argument#  s    
(
r1  c                 C  s<   | | } tddgddggddgd}tj|d| dd	 d S )
NrD   rE   rF   rG   r   r   Ztest_frame_integer_col_namesrK  r_  )r5  r   r   r6  r
  r+   r+   r,   test_api_integer_col_namesC  s    
r2  c                 C  sJ   d| v r |j tjjddd || } tj|d| d}d|v sFJ d S )Nrz   -'get_schema' not implemented for ADBC driversTr9  r2  r  CREATEr<  r=  r   r>  r?  r5  r   
get_schemarX   r7  r   r  r+   r+   r,   test_api_get_schemaJ  s    
r8  c                 C  sL   d| v r |j tjjddd || } tj|d| dd}d|v sHJ d S )	Nrz   r3  Tr9  r2  pypi)ro   r   zCREATE TABLE pypi.r5  r7  r+   r+   r,   test_api_get_schema_with_schemaX  s    
r:  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 sJ d|v sJ d S )Nrz   r3  Tr9  皙?r.  r  皙@r  r/  INTEGERr   )r   r2  r  r0  r4  )r<  r=  r   r>  r?  r5  r   r9   r   r   r6  )rX   r7  r  Zfloat_framer;   r   r  r+   r+   r,   test_api_get_schema_dtypesg  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 rd}nd}||v sJ d S )Nrz   r3  Tr9  r;  r.  r  r<  )Col1ZCol2r2  r?  )ro   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   r6  )rX   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sJ |d7 }qt|| |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sJ |d7 }qxt||
 d S )Nrz   r~  r  Ztest_chunksizeTrW  rE   )   r   Zabcder   Fr  zselect * from test_chunksizer   )r   r   r   r   rE   r   rp  Zignore_indexrD   r/  rG  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$   )rX   r7  r  r\  r   r  r  isizeschunkres3r+   r+   r,   test_api_chunksize_read  sB    
(

2rK  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	| rt	j| dd
}|d	 W d    n1 s0    Y  tg dg dd}| }|d d|d< |jd	| dd t	d| }t|| d S )Nr  r  rr   rs   z0.9.0z:categorical dtype not implemented for ADBC postgres driverTr9  Ztest_categoricalrW  r  )John P. Doez	Jane DoverL  )Z	person_idperson_namerM  categoryFr  zSELECT * FROM test_categorical)r   r   r:   r<  r=  r   r>  r?  r5  r   rZ  r   r   r   copyr   r6  r#   r   r  )rX   r7  rz   r\  r   df2resr+   r+   r,   test_api_categorical  s.    
(rR  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  rD   rE   rF   rG      ér  r   Fr  )r5  r   rZ  r   r   r   r6  )rX   r7  r\  r   r+   r+   r,   test_api_unicode_column_name  s    
(rT  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 rd}nd}t	|| }t
|| d S )Nzd1187b08-4943-4c8d-a7f6TrW  r   rD   rE   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  )rX   r7  r  r\  r   r{  rQ  r+   r+   r,   test_api_escaped_table_name  s    
(rW  c                 C  s   d| v r |j tjjddd || } td| rntj| dd}|	d W d    n1 sd0    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 )Nrz   z!pyarrow->pandas throws ValueErrorTr9  
test_tablerW  r  r  rD   rE  r  r   Fr  z)SELECT a, b, a +1 as a, c FROM test_table)rD   r  rE   rD   )rE   r   rF   rD   )rF   r  rG   rD   )rE  r  rE  r   r   )r<  r=  r   r>  r?  r5  r   rZ  r   r   r   r6  rL  rj  r   r  )rX   r7  r\  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 Implementedr  rX  r   r   r   )
r  r   r>  r?  r5  r   r6  r$   r   r   )rX   r7  r   r  colsr  r+   r+   r,   test_read_table_columns&	  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sJ tjd| ddgd	d
gd}|jj	ddgksJ |j
 d	d
gksJ d S )Nr/  r[  r  rX  r   r)  r   r   r   r   )r	  r   )r  r   r>  r?  r5  r   r6  r$   r   r   r   r   )rX   r7  r   r  r  r+   r+   r,   test_read_table_index_col6	  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  r  rg  r4   )r  r   r>  r?  r5  r   r#   rj  r   r  r$   )rX   r7  iris_frame1iris_frame2r+   r+   r,   test_read_sql_delegateM	  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    q1 s0    Y  q0|  || W d    q01 s0    Y  q0t	d ( t
d| t
d| W d    n1 s0    Y  d S )Nr   ru   r   z,CREATE TABLE invalid (x INTEGER, y UNKNOWN);z0CREATE TABLE other_table (x INTEGER, y INTEGER);Zother_tablezSELECT * FROM other_table)r9   rv   r   r   rw   r   rk   rO   r   rP  r   r$   r#   )r   rX   rv   r   Z
query_listr{  r+   r+   r,   test_not_reflect_all_tables`	  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 s0    Y  td  |jd	| d
 W d    n1 s0    Y  d S )Nr/  rz   zDoes not raise warningr  zThe 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TABLE1rG  ZCaseSensitiver  )r  r   r>  r?  r5  r   rP  rO  r   r   Zcheck_case_sensitiver6  )rX   r7  r   r  r   r+   r+   r,   (test_warning_case_insensitive_table_namey	  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  r9   rd  r   r   r   r   SQLTablerw   r   r   r   )rX   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   rD   rE  r   r;   ri  r   )
r5  r   r   r   rj  r|   r   r   rE  r   )rX   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   rD   rE  ro  z1Unsigned 64 bit integer datatype is not supportedrc  ri  r   )r5  r   r   r   r   rd  re  rj  )rX   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 )Nr9   r  r4   rK  Fr3  rg  )r   r   r5  r   r  r6  r   rj  r$   r#   r  )
rX   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 )Nr9   z)postgresql+pg8000://user:pass@host/dbnamert  rc  zselect * from table)r   r   r5  rd  ImportErrorr   rj  )rX   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   ru   r  z%select * from iris where "Name"=:namez#select * from iris where name=:namer   zIris-versicolorrv  r7   )r5  r9   rv   r   rj  set)rX   r7  r  rv   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  r7   )r5  r9   r{  rs  r=   wherer   r7   r   rj  rw  )rX   r7  r{  rs  r4   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[  r  rU  rF   rG   r   )r   z%_variationZtest_column_percentageFr  )r  r   r>  r?  r5  r   r6  r   r$   r   r  )rX   r7  r  r   rQ  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 s0    Y  W d    n1 s0    Y  t | | d S )NZtest_frame3_legacyFr  rG   z!SELECT * FROM test_frame3_legacy;)	r   r  r   rx   r   r   r6  r#   r  )r   r   rX   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  )rX   rR  r+   r+   r,   test_con_string_import_error,
  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   )rx   ry   rX   )selfargskwargsr+   r+   r,   __init__7
  s    zqtest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnection.__init__c                 S  s   t | j|S r   )getattrrX   )r  r   r+   r+   r,   __getattr__:
  s    zttest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnection.__getattr__c                 S  s   | j   d S r   )rX   rU   )r  r+   r+   r,   rU   =
  s    zntest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnection.closeN)__name__
__module____qualname__r  r  rU   r+   r+   r+   r,   MockSqliteConnection6
  s   r  r,  zSELECT 1)r-  r   r   rP  rO  r   rj  )r  rX   r+   r+   r,   Jtest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed4
  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  r4   )r   r#   rj  r   r  r   rd  DatabaseError)r0  rX   r_  r`  rR  r+   r+   r,   test_sqlite_read_sql_delegateE
  s    r  c                 C  s   t | d}d|v sJ d S )Nr2  r4  )r   r6  )r   r  r+   r+   r,   test_get_schema2P
  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   rD   rd  )r   r   r   r    ZSQLiteTableZ
sql_schemasplitstrip)r/  rX   r   r   r   r   colr+   r+   r,   test_sqlite_type_mappingV
  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
sJ tj| dd	}|
d
 W d    n1 s0    Y  d S )Nr  #sqlite_str has no inspection systemr   r         ?       @      @      @r  r  r  r  onetwoTrW  r  rG   )r   skipr5  r9   r   r   r   r   r6  rZ  r   rX   r7  r   r  r\  inspr+   r+   r,   test_create_tableh
  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sJ |  |d W d    n1 s0    Y  z|  W n ty   Y n0 |
drJ W d    n1 s0    Y  d S )
Nr  r  r   r   r  r  r  r  rG   )r   r  r5  r9   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  rG   r  rz   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sJ d S r  )r5  r"   r  rO   r   rU   r  )rX   r7  r\  r  rL   r+   r+   r,   test_execute_sql
  s    



Dr  c                 C  s$   | | } tjd| d}t| d S )Nr4   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 )Nr4   r5   )ro   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$   )rX   r7  rR  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sJ t|jj
jtjsJ t|jj
jtsJ d S )Nr  .types tables not created in sqlite_str fixturer&   r%   z#boolean dtype not inferred properlyr  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  rD   r  rX   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 properlyr  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   )rX   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  rD   rp  TrB  )r5  r   r   r  r#   r   r   r   )rX   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  )rX   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 rt|jd tsJ t|d |d< t	
|| d S )Nr   2013-01-01 09:00:00rF   
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#   rw   locr|   r   )rX   r7  r  r  r  r+   r+   r,   %test_datetime_with_timezone_roundtrip&  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'  rD   r   r  Ztest_datetime_obbFr  r   )
r5  r   r   r6  r   r$   rL  ZNaTr   r  )rX   r7  r   r  r  r+   r+   r,   test_out_of_bounds_datetimeE  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  freqZnumsr  Z	foo_tableZ	info_date)r   ro   r  r)  F)Zcheck_names)
r5  r   Z
_with_freqr   r  r6  r   r$   r   r  )rX   r7  datesr  r  r+   r+   r,   "test_naive_datetimeindex_roundtripP  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sJ tjd| dddiid}t|jjj	tjsJ tjd| dgd}t|j
jj	tjsJ 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   )rX   r7  r  r   expected_typer+   r+   r,   test_date_parsing]  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 rt|jd tsJ t|d |d< t	
|| nt	
|| d S )Nr  rF   r  r  r-  test_datetimer  r   rD   )ZaxisSELECT * FROM test_datetimer%   r  r   )r5  r   r   r   r  r6  r   r$   rl   r   r  r#   rw   r  r|   r   rX   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 rt|jd tsJ t|d dd|d< t
|| nt
|| d S )Nr  rF   r  r  r-  rD   r   r  Fr  r  r%   r  r   r  rs   )r5  r   r   r   r  rV  r  r6  r   r$   r   r  r#   rw   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  rD   rE   rE  r   	test_dateFr  )r5  r   r   r6  r$   r   r   r   )rX   r7  r   rQ  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sJ d|v rtd| }|	dd }t|| td| }t|| d S )N	   r   rD      rE  r   	test_timeFr  rE   Z
test_time2r  zSELECT * FROM test_time2c                 S  s
   |  dS Nz%H:%M:%S.%fstrftime_r+   r+   r,   <lambda>  rf   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    rf   )
r5  r   r   r6  r$   r   r  r   r#   map)rX   r7  r/  r  r   rQ  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  rB  g        )s1r  Ztest_read_writeFr  rD   T)Zcheck_dtypeZcheck_exact)r5  r   r   r  float32r   r6  r   r$   r   r  )rX   r7  r  r  r   rP  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 )
NrU  r   r/  r-  test_nanFr  rF   SELECT * FROM test_nan)
r5  r   r   rV  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 )
NrU  r-  r  Fr  rF   r   r  r  )r5  r   r   rV  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 )NrU  rE  r  r-  r  Fr  rF   rE   r   r  )r5  r   r   rV  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 s0    Y  W d    n1 s0    Y  |dv rtd| d| }g }|jD ](}td| d| }	||	j  qn,ddlm}
 |
| }||}dd |D }|dggksBJ d S )Nrz   z)ADBC implementation does not create indexTr9  r"  r$  r'  r   r(  Ztest_to_sql_saves_indexrE   >   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+   )rK   rG  r+   r+   r,   rM   =  rf   z*test_to_sql_save_index.<locals>.<listcomp>)r<  r=  r   r>  r?  r5  r   r+  r"   r  r6  r   r#   r   r   r   r9   r   Zget_indexes)rX   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 s0    Y  d S )N'CREATE TABLE test_trans (A INT, B TEXT)r/  rz   r   ru   )r5  r9   rv   r"   r  rO   )rX   r7  r  rY   rv   r\  transr+   r+   r,   test_transactionsB  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	rddlm} ||}z>| "}|| |dW d    n1 s0    Y  W n |y   Y n0 |  |
d	}	W d    n1 s20    Y  t|	dksNJ | $}|| |
d	}
W d    n1 s0    Y  t|
d
ksJ W d    n1 s0    Y  d S )Nr  rz   r   ru   c                   @  s   e Zd ZdS )z1test_transaction_rollback.<locals>.DummyExceptionN)r  r  r  r+   r+   r+   r,   DummyExceptiona  s   r  z/INSERT INTO test_trans (A,B) VALUES (1, 'blah')r  zSELECT * FROM test_transrD   )r5  r"   r  rw   r    rO   r9   rv   	Exceptionr   r  r[  )rX   r7  r  r\  r  rY   rv   r  Zins_sqlrQ  r  r+   r+   r,   test_transaction_rollbackR  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 s0    Y  W d    q1 s0    Y  n
| | t	|| }	tj|	|d	d
 d S )Nr  z(test does not support sqlite_str fixturer  r   ru   r   test_get_schema_create_tabler  Fr*  )r  r   r>  r?  r5  r9   rv   r   r   r   r6  r   rw   r   rk   rO   r$   r   r  )
rX   r7  r   rv   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sJ | }|j
| d |jd jd j}	t|	|sJ d}
t jt|
d$ |j	d| dtid W d    n1 s0    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||sJ t||sJ d S )Nr  r  r   )r~   r2   r1   r   r   g?Tg?Nr   
dtype_testr  rE   dtype_test2r   ro   r;   rh   z&The type of B is not a SQLAlchemy typerc  r  Zdtype_test3
   single_dtype_test)r   r  r5  r9   r~   r2   sqlalchemy.schemar1   r   r6  reflecttablesr   r   rw   rd  re  r|   ru  )rX   r7  r~   r2   r1   r\  r   r   metaZsqltyperR  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sJ t|
| }| }|j| d d|v r|n|}|j|
 j}t|d j|sJ t|d j|sJ t|d j|sJ t|d j|s0J d S )Nr  r  r   )r   r   r0   r   r  T  r   rD   r  rB  r;  BoolDateIntr0   notna_dtype_testr  rE   rh   r&   r   r  r  r0   )r   r  r5  r9   r   r   r0   r   r  r1   r   r   r   r6  r   r$   r  r  r   rw   r   )rX   r7  r  r   r   r0   r   r1   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sJ td| }t|d jd dt|d jd dksJ | }	|	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|sJ d S )Nr  r  r   )
BigIntegerr0   r   r  gYB?r  rB  float64r   r  r   )f32f64
f64_as_f32i32r  Ztest_dtypesFrK  r
     )	precision)r   ro   r   r4  r;   rD   r	     rh   r  r  r  )r   r  r5  r9   r  r0   r   r  r1   r   r   r6  r   r$   r   roundr   r  r  r   r|   r   rw   )rX   r7  r  r0   r   r1   Vr   rQ  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   ro   r4  )r6  )r  r   r+   r+   r,   test_append)  s    z3test_connectable_issue_example.<locals>.test_appendc                   s   | } | | d S r   r+   )rX   Zfoo_data)r  r  r+   r,   test_connectable,  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   )rw   r   rk   )ZconnectablerX   )r   r  r+   r,   main2  s
    


Fz,test_connectable_issue_example.<locals>.mainr  rU  r  rF   )r5  r   r   r   r6  )rX   r7  r  r+   )r   r  r  r  r,   test_connectable_issue_example  s    
	r  inputr  bar)r  infe0c           	      C  s   t |}| }|| } d|v rt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    q1 s0    Y  n0|jd	| d
ddksJ td	| }t|| d S )Nr&   r   z1.0.3r  zGH 36465r  zinf cannot be used with MySQLrc  ZfoobarFr  rD   )r   r5  r   r   r   r:   r   r>  r?  r  rd  re  r6  r   r$   r   Zassert_equal)	rX   r7  r  r   r  r   r>  rR  rQ  r+   r+   r,   test_to_sql_with_negative_npinfA  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 s0    Y  W d    n1 s0    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,   	Temporaryw  s   
r&  )r  )r   ro   )r   r  r5  r9   r.   r   r  rs  sqlalchemy.ormr  r  r   rk   r  Z	__table__rm   addflushr   r#   r  r   r  )rX   r7  rs  r  r  r  r  ZBaser&  sessionr   r+   r%  r,   test_temporary_tablea  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 s0    Y  d S )
Nr/  rz   z9SQLiteDatabase/ADBCDatabase does not raise for bad enginer  z*engine must be one of 'auto', 'sqlalchemy'rc  r   Z
bad_enginer   )	r  r   r>  r?  r5  r"   rd  re  r6  )rX   r7  r   rR  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sJ dS )z `to_sql` with the `engine` paramr   autor,  rG   N)r5  r"   r  r6  rZ  r[  r   r  r+   r+   r,   test_to_sql_with_sql_engine  s    


J
r/  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 s0    Y  t|}t| d}||ksJ W d    n1 s0    Y  d S )Nio.sql.enginer9   r   rG   	r5  rL  option_contextr"   r  r6  rZ  r[  r   r  r+   r+   r,   test_options_sqlalchemy  s    


J
r3  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 s0    Y  t|}t| d}||ksJ W d    n1 s0    Y  d S )Nr0  r.  r   rG   r1  r  r+   r+   r,   test_options_auto  s    


J
r4  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sJ ttdtsJ W d    n1 s0    Y  d S )Nr9   r0  r.  )r   r   rw   r!   r   rL  r2  r+   r+   r+   r,   test_options_get_engine  s    
0r5  c                   C  s   d S r   r+   r+   r+   r+   r,   "test_get_engine_auto_error_message  s    r6  funcrj  r#   c                 C  s  | }| | } d}|}	|	j|| ddd td|* tt|d| | |d}
W d    n1 sd0    Y  ||||}t|
| d|v r|tj	j
d	d
 td|N tt|d| | |dd}||||}|D ]}
t|
| qW d    n1 s0    Y  d S )Nr2  FrK  r   ro   r   r4  mode.string_storageSelect * from dtype_backendrz   z(adbc does not support chunksize argumentr  rF   )ro   r<  rq  )r5  r6  rL  r2  r  r   r  r  r   r>  r?  rX   r7  Zstring_storager7  r<  dtype_backend_datadtype_backend_expectedr  r   r   r  r  iteratorr+   r+   r,   test_read_sql_dtype_backend  s2    
$rA  r$   c                 C  s  d| v r$d| vr$| tjjdd | }|| } d}|}	|	j|| ddd td	|$ tt||| |d
}
W d    n1 s0    Y  ||||}t	
|
| d|v rd S td	|H tt||| |dd}||||}|D ]}
t	
|
| qW d    n1 s0    Y  d S )Nr%   rz   zhSQLite actually returns proper boolean values via read_sql_table, but before pytest refactor was skippedr  r2  FrK  r8  r9  r;  rF   )r<  rq  )r  r   r>  r?  r5  r6  rL  r2  r  r   r  r=  r+   r+   r,   !test_read_sql_dtype_backend_table  s6    	
2rB  )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  FrK  r8  zPdtype_backend numpy is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.rc  numpyr;  )r5  r6  r   rd  re  r  rL  )rX   r7  r7  r>  r   r   rR  r+   r+   r,   )test_read_sql_invalid_dtype_backend_table3  s    
rD  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 )NrD   rF   rn  rB  r  r%        @Float64r%  r  rE  )TFNTFTrY  rE  r  NrE  r  r   defgh)r   r   r   rV  r+   r+   r+   r,   r>  C  s    r>  c                  C  s   dddd} | S )Nr   r  c              
     s  | dkr>t tjg dtjd}t tjddtjgtjd}nr|dkrtdddlm	   g d} g d	}n.tdt
g d}t
g d	}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||d|dkrZtdddlm	  t fddjD d|v snd|v r|dkrdddndddS )NpythonrY  rB  rE  r  rA  r   )ArrowExtensionArrayrI  rD   rF   rn  r  r%  rE  rF  rG  TFbooleanrH  rJ  c                   s$   i | ]}| j | d dqS )T)Zfrom_pandas)rM  )rK   r  rQ  r   par+   r,   
<dictcomp>z  s   z8dtype_backend_expected.<locals>.func.<locals>.<dictcomp>r&   r%   numpy_nullable)rL  rM  zint64[pyarrow])r   r   rM  Zobject_rL  ZNAr   r   Zpandas.arraysrQ  r   r   r   rV  r   r   )Zstorager<  r  Zstring_arrayZstring_array_nar+   rS  r,   r7  U  sF    




z$dtype_backend_expected.<locals>.funcr+   )r7  r+   r+   r,   r?  S  s    3r?  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 )Nrz   r~  r  r   r  r  rE  r  r   r2  FrK  r8  zSELECT * FROM testrD   )r;   rq  )r<  r=  r   r>  r?  r5  r   r   rO  r6  r#   r   r  )rX   r7  r   r   r  r  r+   r+   r,   test_chunksize_empty_dtypes  s     


rW  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  FrK  r8  r:  rE  )r;   r<  rB  )r   r   r   rV  r   rn  )
r5  r   r6  r  rL  r   r  r   r   r  )rX   r7  r7  r<  r   r   r  r  r+   r+   r,   test_read_sql_dtype  s&    
	rX  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.rD   rE   rF   r'  examplerc  rK  r_  )r   r6  r   rP  r  )r  rX   rR  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 )	NrE  rD   rE   r   rB  Ztest_bigintwarningFr  )r   r6  r   rP  r   r$   r  rX   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 )NrD   rE   rF   rG   r  r  zEmpty table name specifiedrc  rG  rK  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sJ |  ||j|j}	t
|	}W d    n1 s0    Y  t|jddgksJ d S )Nr   r.   r   r2   )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  rh   rD   ZhelloZworld)r$  rb  rX  FrK  r8  rE   r$  rb  )r9   r.   r   r2   r'  r  r`  rk   r<   Z
create_allr   r6  rV   r{  r$  rb  r  r   )
r  rX   r  r`  Z	BaseModelrc  r  r*  r   Z
test_queryr+   r_  r,   test_row_object_is_named_tuple  s$    
*
&rd  c                 C  s   | }t d d}tdddgi}|j||ddd td	d
 t||}W d    n1 s`0    Y  d}tdddgi|tdg|dd}t	|| d S )NrA  r2  rE  xyFrK  )ro   r   r4  zfuture.infer_stringTzstring[pyarrow_numpy]rB  )r;   r   )
r   r   r   r6  rL  r2  r$   r   r   r  )r  rX   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  rB  r2  rK  F)r4  r   select * from testr   r   z2020-12-31 12:00:00.000000)r   r   r6  rL  rj  r   )r  rX   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   rx   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  rL  rj  r   r   )rn  rX   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sJ |jd|ddddksJ |jd|ddddksJ 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 s0    Y  W d    n1 s0    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 )NrD   rE   r  r   rE  r  r  z$DROP SCHEMA IF EXISTS other CASCADE;zCREATE SCHEMA other;Ztest_schema_publicFr  Ztest_schema_public_explicitr  )r   ro   r   r   Ztest_schema_otherotherr  z!Table test_schema_other not foundrc  )r   ro   r   r   rK  )r   ro   r   r   r4  r   TrB  )r   r   rk   r   r6  r   r$   r   r  r   rd  re  r   )
r  rX   r   ro   r  r  rJ  Zres4rR  rQ  r+   r+   r,   test_psycopg2_schema_support1  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 s0    Y  d S )Nr   ru   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;rD   Z2021r   r   rE   r$  Z
created_dtr   TrW  Zperson)r  rv   r   rk   rO   rL  rj  r   r   r   r  r   r   r   )	r  rX   rv   r  ro   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 s0    Y  |drJ W d    n1 s0    Y  d S )Nr  r  r  Zdrop_test_framerG   )r   r   r   r  r6  rZ  r   )r  rX   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  rD   rE   rE  r   r  Fr  zSELECT * FROM test_date)r   r   r6  r#   r   r  r   r|   )r/  rX   r   rQ  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   rD   r  r  rE   r  r  c                 S  s   |   S r   )timetz)r  r+   r+   r,   r    rf   z+test_sqlite_datetime_time.<locals>.<lambda>rE  r   r  Fr  zSELECT * FROM test_timec                 S  s
   |  dS r  r  r  r+   r+   r,   r    rf   )
r   r   r   Zto_pydatetimer  r   r6  r#   r   r  )ru  r/  rX   Ztz_timesZtz_dtr   rQ  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)rO   re  )
rX   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 s0    Y  |jd|d
ddksJ t|ddd
ksJ t|ddd
ksJ d S )Nr   r   r  r  r   r  r  rE   r  STRINGr  r=  z!B \(<class 'bool'>\) not a stringrc  r  r  )r   r6  r|  r   rd  re  bool)r/  rX   r\  r   r   rR  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sJ t||ddksJ t||ddksJ d S )NTr  r   rD   r  rB  r;  r  r  r  rE   r   r=  r  rd  r  r0   ZREAL)r   r   r   r6  r|  )r/  rX   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sJ t|| t ddgddggd|gd}d|d}|j||ddksJ t|| qld S )NrD   rE   rF   rG   rE  r  r   z$Empty table or column name specifiedrc  rG  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12345rS  Ztest_weird_col_namerK  )r   r   rd  re  r6  	enumerater   Ztable_exists)r/  rX   r   rR  ZndxZ
weird_namerP  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  $  rf   zformat_query.<locals>.<lambda>z{:.10f}z'{!s}')r   r  r|   r   Zstr_bytesrI   r*  r   r  r~  rw   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"   rO   r   r  )r{  ro   r  rQ  r+   r+   r,   tquery3  s    ,r  c                 C  s  t tjddttdtdtddddd	}t	j
|d
| dddksLJ t	d| }|j|_|}t|| dgt| |d< | }ttt|tjdd }| |d< t	j
|d| dddksJ t	jd| dd}| }||_d|j_t|| d S )NrE   r  rG   ABCDrB  
2000-01-01r  r   r  r(  rX  Fr  zselect * from test_tablerE  txtZIdxZtest_table2zselect * from test_table2r)  )r   r   rC  rD  rE  r   r  r  r   r   r6  rj  r   r   r  r[  rO  r  r   r   )r/  r   r  r  Zframe2Znew_idxr+   r+   r,   test_xsqlite_basic:  s(    r  c           	      C  s   t tjddttdtdtddddd	}tj	|j
d
< t|d}|  }|| d}| D ]$\}}t|g|R  }t|| d qh|   tjd| d}|j|_tj||dd d S )NrE   r  r  rB  r  r  r   r  r(  rl  r2  z(INSERT INTO test VALUES (%s, %s, %s, %s)r  rk  gMbP?)Zrtol)r   r   rC  rD  rE  r   r  r  r   rV  r   r   r6  rN   rO   Ziterrowsr  r  rV   rj  r   r   r  )	r/  r   r  rZ   insr  rL   Zfmt_sqlr  r+   r+   r,   test_xsqlite_write_row_by_rowU  s"    
r  c                 C  s   t tjddttdtdtddddd	}t	
|d
}|  }|| d}|jd }t	|  }||t| W d    n1 s0    Y  |   t	d| }|jd d |_t||d d  d S )NrE   r  r  rB  r  r  r   r  r(  r2  z$INSERT INTO test VALUES (?, ?, ?, ?)r   rk  rD   )r   r   rC  rD  rE  r   r  r  r   r   r6  rN   rO   r   r"   r  rV   rj  r   r   r  )r/  r   r  rZ   r  rL   r  r  r+   r+   r,   test_xsqlite_executel  s     

.r  c                 C  s   t tjddttdtdtddddd	}t	
|d
}| }|D ]6}|d}t|dkrJ|d dkrJ|d dksJJ qJt	j
|d
ddgd}| }d|v sJ |  }|| d S )NrE   r  r  rB  r  r  r   r  r(  r2   r   r   rD   ZDATETIMEr  zPRIMARY KEY ("A", "B"))r   r   rC  rD  rE  r   r  r  r   r   r6  
splitlinesr  r[  rN   rO   )r/  r   r  lineslinetokensrZ   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 s0    Y  d S )Nc
    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))rN   rO   r   r"   r   rd  r  )r/  r  rZ   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 s0    Y  d S )Nr  r,  r  z$Cannot operate on a closed database.rc  rk  r  )r-  r   rx   r   rN   rO   r   r"   r   rd  r  r  )r  rX   rZ   r  rR  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ro   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 )NrD   rE   Zc0r   mono_dfFr  c                 s  s   | ]}|d  V  qdS )r   Nr+   )rK   Zmy_c0r+   r+   r,   	<genexpr>  rf   z4test_xsqlite_onecolumn_of_integer.<locals>.<genexpr>zselect * from mono_dfrF   )r   r   r6  sumrO   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 s0    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sJ tj|| |ddddksJ t|| dg dksJ t||  d S )NrD   rE   r   r   r]  r~  )r   r   EZtable_if_existszSELECT * FROM z*'notvalidvalue' is not valid for if_existsrc  Znotvalidvalue)r   ro   r   r4  r^  z&Table 'table_if_exists' already existsrK  F)r   ro   r   r4  r   r  r  r  rF   )rF   r   rG   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_selectrR  r+   r+   r,   test_xsqlite_if_exists  s    
$
$



r  )N(,  
__future__r   r-  r   rQ   r   r   r   r   r   r   pathlibr
   rx   typingr   r  rC  r   r   Zpandas._libsr   Zpandas.compatr   r   Zpandas.compat._optionalr   Zpandas.util._test_decoratorsutilZ_test_decoratorstdZpandasrL  r   r   r   r   r   r   r   r   r   r   Zpandas._testingZ_testingr   Zpandas.core.arraysr   r   Zpandas.util.versionr   Z	pandas.ior   Zpandas.io.sqlr   r   r    r!   r"   r#   r$   r9   r>  filterwarningsZ
pytestmarkZfixturer-   r=   r]   r^   rp   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+  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@  rS  rT  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*  rI   r1  r2  r8  r:  r>  r@  rK  rR  rT  rW  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-  r/  r3  r4  r5  r6  rA  rB  rD  r>  r?  rW  Z
no_defaultrX  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%).7
'		J#	 