o
    _~#g6                    @  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rd dl=Z=ej>?dZ@ejAdd ZBdd ZCdddZDdddZEdddZFdd ZGdd!d"ZHdd%d&ZIdd'd(ZJdd)d*ZKd+d, ZLdd/d0ZMdd2d3ZNejAd4d5 ZOejAd6d# ZPejAd7d8 ZQejAd9d: ZRejAd;d< ZSd=d> ZTd?d@ ZUddCdDZVddFdGZWejAdHdI ZXejAdJdK ZYejAdLdM ZZejAdNdO Z[ejAdPdQ Z\ejAdRdS Z]ejAdTdU Z^ejAdVdW Z_ejAdXdY Z`ejAdZd[ ZaejAd\d] ZbejAd^d_ ZcejAd`da ZdejAdbdc ZeejAddde ZfejAdfdg ZgejAdhdi ZhejAdjdk ZiejAdldm ZjejAdndo ZkejAdpdq ZlejAdrds ZmejAdtdu ZnejAdvdw ZoejAdxdy ZpejAdzd{ ZqejAd|d} ZrejAd~d ZsejAdd ZtejAdd ZuejvdIej>jwdejvdOej>jwdgZxejvdKej>jwdejvdQej>jwdgZyejvdMej>jwdejvdSej>jwdgZzejvdUej>jwdejvd[ej>jwdgZ{ejvdWej>jwdejvdcej>jwdgZ|ejvdYej>jwdejvdeej>jwdgZ}g dZ~g dZg dZexe{ e~ Zeye| e Zeze} e Zdyejvd]ej>jwdgZejvd_ej>jwdejvd{ej>jwdgZejvdaej>jwdejvd}ej>jwdgZedg e Zedg e Zedg e Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAeej>dddgdd Zej>dAeej>dddgdd Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAexdd Zej>dAe{ej>dddgdd Zej>dAe{dd Zej>dAedd Zej>dAexdd Zej>dAe{dd Zdd Zdd Zdd Zdd Zej>dAeddÄ Zej>dAeddń Zej>dAeddǄ Zej>dAeddɄ Zej>dAedd˄ Zej>dAedd̈́ Zej>dAeddτ Zej>dAeddф Zej>dAeddӄ Zej>dAeddՄ Zej>dAeddׄ Zej>dAeddل Zej>dAeddۄ Zej>dAedd݄ Zej>dAedd߄ Zej>dAeej>dg dej>de4jddfe4jddfe4j;ddfe4j<ddfgdd Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAeej>dg ddd Zej>dAedd Zej>dAedd Zej>dAeej>ddeeeedgdd Zej>dAedd Zej>dAedd Zej>dAedd  Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAed	d
 Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAedd Zʐdd Zej>dAedd Zej>dAedd Zej>dAeej>dddddd d!d"d#d$d%d&d'd(d)eeejϐd*krd+nd,fgd-d. Zej>dAeej>d/d0d1gd2d3 Zej>dAed4d5 ZeӐd6ej>dAed7d8 Zej>dAed9d: Zej>dAed;d< Zej>dAed=d> Zאd?d@ ZeddAdB ZeddCdD ZڐdEdF ZېdGdH ZܐdIdJ Zej>dAedKdL Zej>dAedMdN Zej>dAedOdP Zej>dAedQdR Zej>dAedSdT Zej>dAedUdV Zej>dAedWdX Zej>dAedYdZ Zej>dAed[d\ Zej>dAed]d^ Zej>dAe{ej>d_dd`ggdadb Zej>dAe{dcdd Zej>dAe{dedf Zej>dAedgdh Zej>dAedidj Zej>dAedkdl Zej>dAedmdn Zej>dAedodp Zej>dAedqdr Zej>dAedsdt Zej>dAedudv Zej>dAedwdx Zej>dAedydz Zej>dAed{d| Zej>dAed}d~ Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAeej>ddejgidej giej gdgdgdd Z ej>dAedd Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAedd Zdd Zdd Zej>dAeej>dddgdd Zej>dAeej>dddgdd Z	ej>dAeej>dg ddd Z
ejAdddZejAdd Zej>dAedd Zej>dAe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+   }/var/www/static.ux5.de/https/Moving-Object-Detection-with-OpenCV/env/lib/python3.10/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
SepalWidthPetalLength
PetalWidthName   )	
sqlalchemyr.   r/   r0   r1   r2   r3   r   __version__)
r;   r.   r/   r0   r1   r2   r3   dtypemetadatar4   r+   r+   r,   iris_table_metadatab   s    		r?   	iris_filer
   c                 C  s   d}|   }|| |jd dd"}t|}t| d}g }dd |D }||| W d    n1 s7w   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  >   g | ]}t |d  t |d t |d t |d |d fqS r               float.0rowr+   r+   r,   
<listcomp>       



z0create_and_load_iris_sqlite3.<locals>.<listcomp>)	cursorexecuteopencsvreadernextexecutemanyclosecommitconnr@   stmtcurcsvfilerV   recordsr+   r+   r,   create_and_load_iris_sqlite3{   s   

ra   c              	   C  s   d}|   <}|| |jd dd }t|}t| d}dd |D }||| W d    n1 s6w   Y  W d    n1 sEw   Y  |   d S )NzCREATE TABLE iris (
            "SepalLength" DOUBLE PRECISION,
            "SepalWidth" DOUBLE PRECISION,
            "PetalLength" DOUBLE PRECISION,
            "PetalWidth" DOUBLE PRECISION,
            "Name" TEXT
        )rA   rB   z+INSERT INTO iris VALUES($1, $2, $3, $4, $5)c                 S  rE   rF   rK   rM   r+   r+   r,   rP      rQ   z3create_and_load_iris_postgresql.<locals>.<listcomp>)rR   rS   rT   rU   rV   rW   rX   rZ   r[   r+   r+   r,   create_and_load_iris_postgresql   s   


rb   c           	   	     s   ddl m} t }|jd ddP}t|}t|  fdd|D }|||}|  }|j	|dd |j
|d	 || W d    n1 sKw   Y  W d    d S W d    d S 1 scw   Y  d S )
Nr   insertrA   rB   c                      g | ]	}t t |qS r+   dictziprM   headerr+   r,   rP          z(create_and_load_iris.<locals>.<listcomp>T
checkfirstbind)r;   rd   r?   rT   rU   rV   rW   valuesbegindropcreaterS   )	r\   r@   rd   r4   r_   rV   paramsr]   conr+   ri   r,   create_and_load_iris   s   

"rv   c                 C  s   d}t | tjr|  }|| d S tddd}|r@t | |jr@|  }|| W d    n1 s5w   Y  |   d S ddlm} ||}| 	 }|| W d    d S 1 s_w   Y  d S )Nz+CREATE VIEW iris_view AS SELECT * FROM irisadbc_driver_manager.dbapiignoreerrorsr   text)

isinstancesqlite3
ConnectionrR   rS   r   rZ   r;   r|   rq   )r\   r]   r^   adbcr|   ru   r+   r+   r,   create_and_load_iris_view   s   

"r   dialectstrc                 C  s   ddl m}m}m}m}m}m}m}m} | dkr|n|}	| dkr"|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)	r;   r   r   r.   r   r0   r   r1   r3   )r   r   r   r.   r   r0   r   r1   r3   	date_type	bool_typer>   r   r+   r+   r,   types_table_metadata   s$   (r   
types_data
list[dict]c                 C  s   d}d}t | tjr|  }|| ||| d S |  }|| ||| W d    n1 s5w   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(?, ?, ?, ?, ?, ?, ?, ?, ?)
                )r}   r~   r   rR   rS   rX   rZ   )r\   r   r]   ins_stmtr^   r+   r+   r,   create_and_load_types_sqlite3   s   


r   c                 C  sR   |   }d}|| d}||| W d    n1 sw   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)
                )rR   rS   rX   rZ   )r\   r   r^   r]   r+   r+   r,    create_and_load_types_postgresql  s   

r   c              	   C  s  ddl m} ddlm} t|}|||}t| |ra|  7} |   |j	| dd |j
| d | | W d    n1 sBw   Y  W d    d S W d    d S 1 sZw   Y  d S |   |j	| dd |j
| d | | W d    d S 1 sw   Y  d S )Nr   rc   EngineTrl   rn   )r;   rd   sqlalchemy.enginer   r   rp   r}   connectrq   rr   rs   rS   )r\   r   r   rd   r   r   r]   r+   r+   r,   create_and_load_types5  s&   


"
"r   c              	   C  sT  ddl m}m}m}m}m} ddlm} | }|d||d|dd}ddidd	ig}	|||	}
t	| |rr| 
 .} |   |j| dd
 |j| d | |
 W d    n1 s]w   Y  W d    n1 slw   Y  n&|   |j| dd
 |j| d | |
 W d    n1 sw   Y  tdddtdddg}t|ddS )Nr   )r.   r   r1   r3   rd   r   datetzDateColWithTzT)timezonez2000-01-01 00:00:00-08:00z2000-06-01 00:00:00-07:00rl   rn   z2000-01-01 08:00:00UTCtzz2000-06-01 07:00:00name)r;   r.   r   r1   r3   rd   r   r   rp   r}   r   rq   rr   rs   rS   r   r   )r\   r.   r   r1   r3   rd   r   r>   r   datetz_datar]   expected_datar+   r+   r,   create_and_load_postgres_datetzI  s:   





r   framer   c                 C  sV   | j jd j}| jd }t|tjsJ t|tg d| j	dd | j
dv s)J d S )Nr   ffffff@g      @gffffff?皙?Iris-setosa)indexr   ))      )   r   )dtypesiloctype
issubclassnpfloatingtmassert_series_equalr   columnsshape)r   pytyperO   r+   r+   r,   check_iris_framev  s   
r   
table_namec                 C  sd  d| }t ddd}t| tjr|  }|| d S |rGt| |jrG|  }|| | d W  d    S 1 s@w   Y  d S ddlm} ddl	m
} t| trz+|| }| } | | W  d    W |  S 1 sxw   Y  W |  d S |  w t| |r|  } | | W  d    S 1 sw   Y  d S | | S )Nz SELECT count(*) AS count_1 FROM rw   rx   ry   r   )create_enginer   )r   r}   r~   r   rR   rS   fetchoner;   r   r   r   r   r   exec_driver_sql
scalar_onedispose)r\   r   r]   r   r^   r   r   enginer+   r+   r,   
count_rows  s4   



$




$r   c                 C  s   | dddd}t |S )NiodatarU   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$@rG   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*   c              
   C  s2   dddddddddd	}t | }||  |S )Nr   int64rL   r   )r   keysastype)r   r   dfr+   r+   r,   types_data_frame  s   r   c                  C     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  r   )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}|rXt | |jrXg }|    }|D ]'}|d  |d D ]}|d	  |d
 D ]}|d dkrS|d }|	| qBq8q.|S ddl
m}	 |	|  S )Nz0SELECT name FROM sqlite_master WHERE type='view'c                 S     g | ]}|d  qS r   r+   )rN   viewr+   r+   r,   rP         z!get_all_views.<locals>.<listcomp>rw   rx   ry   catalog_namecatalog_db_schemasdb_schema_namedb_schema_tables
table_typer   r   r   inspect)r}   r~   r   rS   fetchallr   adbc_get_objectsread_all	to_pylistappendr;   r   get_view_names)
r\   cr   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}|rPt | |jrPg }|    }|D ]}|d D ]}|d D ]}|d	 d
krK|d }|	| q:q4q.|S ddl
m}	 |	|  S )Nz1SELECT name FROM sqlite_master WHERE type='table'c                 S  r   r   r+   )rN   r   r+   r+   r,   rP     r   z"get_all_tables.<locals>.<listcomp>rw   rx   ry   r   r   r   r   r   r   r   )r}   r~   r   rS   r   r   r   r   r   r   r;   r   get_table_names)
r\   r   r   r   r   r   r   r   r   r   r+   r+   r,   get_all_tables  s&   

r   r\   Lsqlite3.Connection | sqlalchemy.engine.Engine | sqlalchemy.engine.Connectionc              	   C  s   t |tjr|dt|   |  d S tddd}|rEt ||jrE| }|d|  d W d    d S 1 s>w   Y  d S |	 +}t
|}||  W d    n1 s_w   Y  W d    d S W d    d S 1 sww   Y  d S )NzDROP TABLE IF EXISTS rw   rx   ry   zDROP TABLE IF EXISTS "")r}   r~   r   rS   r   _get_valid_sqlite_namerZ   r   rR   rq   r   
drop_table)r   r\   r   r^   ru   dbr+   r+   r,   r  0  s   
"
"r  r   c                 C  s   dd l }t|tjr|dt|   |  d S tddd}|rIt||jrI|	 }|d|  d W d    d S 1 sBw   Y  d S |j
jj| }|d| }| }|| W d    d S 1 snw   Y  d S )Nr   zDROP VIEW IF EXISTS rw   rx   ry   zDROP VIEW IF EXISTS "r   )r;   r}   r~   r   rS   r   r   rZ   r   rR   r   r   identifier_preparerquote_identifierr|   rq   )r   r\   r;   r   r^   quoted_viewr]   ru   r+   r+   r,   	drop_viewC  s    
"

"r  c                  c  sv    t d} t d}| jdd|jjji| jjd}|V  t|D ]}t	|| q!t
|D ]}t|| q-|  d S )Nr;   pymysqlz*mysql+pymysql://root@localhost:3306/pandasclient_flag)connect_args	poolclass)pytestimportorskipr   	constantsCLIENTMULTI_STATEMENTSpoolNullPoolr   r  r   r  r   )r;   r  r   r   tblr+   r+   r,   mysql_pymysql_engineZ  s   

r  c                 c      t | | t|  | V  d S Nrv   r   )r  r   r+   r+   r,   mysql_pymysql_engine_irisk     

r  c                 c      t | |d | V  d S )Nr&   r   )r  r   r+   r+   r,   mysql_pymysql_engine_typesr     
r  c                 c  6    |   }|V  W d    d S 1 sw   Y  d S r  r   )r  r\   r+   r+   r,   mysql_pymysql_connx     
"r  c                 c  r  r  r  )r  r\   r+   r+   r,   mysql_pymysql_conn_iris~  r   r!  c                 c  r  r  r  )r  r\   r+   r+   r,   mysql_pymysql_conn_types  r   r"  c                  c  sj    t d} t d | jd| jjd}|V  t|D ]}t|| qt|D ]}t|| q'|	  d S )Nr;   psycopg2z=postgresql+psycopg2://postgres:postgres@localhost:5432/pandasr
  
r  r  r   r  r  r   r  r   r  r   )r;   r   r   r  r+   r+   r,   postgresql_psycopg2_engine  s   

r&  c                 c  r  r  r  )r&  r   r+   r+   r,   postgresql_psycopg2_engine_iris  r  r'  c                 c  r  )Npostgresr  )r&  r   r+   r+   r,    postgresql_psycopg2_engine_types  r  r)  c                 c  r  r  r  )r&  r\   r+   r+   r,   postgresql_psycopg2_conn  r   r*  c                  c  s    t d ddlm}  d}| |(}|V  t|D ]}t|| qt|D ]}t|| q'|	  W d    d S 1 s>w   Y  d S )Nadbc_driver_postgresqlr   dbapiz4postgresql://postgres:postgres@localhost:5432/pandas)
r  r  r+  r-  r   r   r  r   r  rZ   )r-  urir\   r   r  r+   r+   r,   postgresql_adbc_conn  s   

"r/  c                 c      dd l }| }z|d W n |jy!   |  t|| Y nw z|d W n |jy;   |  t| Y nw |V  d S Nr   r4   	iris_view)adbc_driver_manageradbc_get_table_schemaProgrammingErrorrollbackrb   r   )r/  r   mgrr\   r+   r+   r,   postgresql_adbc_iris  s    
r8  c                 c  s\    dd l }| }z|d W n |jy(   |  dd |D }t|| Y nw |V  d S )Nr   r   c                 S     g | ]}t | qS r+   tuplerp   rN   entryr+   r+   r,   rP         z)postgresql_adbc_types.<locals>.<listcomp>)r3  r4  r5  r6  r   )r/  r   r7  r\   new_datar+   r+   r,   postgresql_adbc_types  s   
r@  c                 c  r  r  r  )r'  r\   r+   r+   r,   postgresql_psycopg2_conn_iris  r   rA  c                 c  r  r  r  )r)  r\   r+   r+   r,   postgresql_psycopg2_conn_types  r   rB  c                  c  sF    t d t } d|  V  W d    d S 1 sw   Y  d S )Nr;   
sqlite:///)r  r  r   ensure_cleanr   r+   r+   r,   
sqlite_str  s
   

"rE  c                 c  s`    t d}|j| |jjd}|V  t|D ]}t|| qt|D ]}t|| q"|	  d S )Nr;   r$  r%  )rE  r;   r   r   r  r+   r+   r,   sqlite_engine  s   
rF  c                 c  r  r  r  )rF  r\   r+   r+   r,   sqlite_conn  r   rG  c                 C  s2   t d}|| }t|| t| |  | S )Nr;   )r  r  r   rv   r   r   )rE  r   r;   r   r+   r+   r,   sqlite_str_iris  s   


rH  c                 c  r  r  r  )rF  r   r+   r+   r,   sqlite_engine_iris  r  rI  c                 c  r  r  r  )rI  r\   r+   r+   r,   sqlite_conn_iris  r   rJ  c                 C  s,   t d}|| }t||d |  | S )Nr;   r%   )r  r  r   r   r   )rE  r   r;   r   r+   r+   r,   sqlite_str_types  s
   

rK  c                 c  r  )Nr%   r  )rF  r   r+   r+   r,   sqlite_engine_types%  r  rL  c                 c  r  r  r  )rL  r\   r+   r+   r,   sqlite_conn_types+  r   rM  c               	   c  s    t d ddlm}  t J}d| }| |'}|V  t|D ]}t|| q#t	|D ]}t
|| q/|  W d    n1 sEw   Y  W d    d S W d    d S 1 s]w   Y  d S )Nadbc_driver_sqliter   r,  zfile:)r  r  rN  r-  r   rD  r   r   r  r   r  rZ   )r-  r   r.  r\   r   r  r+   r+   r,   sqlite_adbc_conn1  s    



"rO  c                 c  r0  r1  )r3  r4  r5  r6  ra   r   )rO  r   r7  r\   r+   r+   r,   sqlite_adbc_irisA  s    
rP  c              	   c  s    dd l }| }z|d W n= |jyK   |  g }|D ]!}t|d |d< |d d ur6t|d |d< |t|  qt|| |	  Y nw |V  d S )Nr   r   r   r   )
r3  r4  r5  r6  intr   r;  rp   r   rZ   )rO  r   r7  r\   r?  r=  r+   r+   r,   sqlite_adbc_typesS  s"   

rR  c               	   c  sr    t td&} | }|V  W d    n1 sw   Y  W d    d S W d    d S 1 s2w   Y  d S )N:memory:)
contextlibr   r~   r   closing_connr\   r+   r+   r,   sqlite_buildini  s   "rW  c                 c  r  r  )ra   r   )rW  r   r+   r+   r,   sqlite_buildin_irisp  r  rX  c                 c  s$    dd |D }t | | | V  d S )Nc                 S  r9  r+   r:  r<  r+   r+   r,   rP   y  r>  z(sqlite_buildin_types.<locals>.<listcomp>)r   )rW  r   r+   r+   r,   sqlite_buildin_typesw  s   

rY  )marks)rF  rG  rE  )rI  rJ  rH  )rL  rM  rK  c                 C  s    | | } |jd| ddd d S )Ntestr   Fr   ru   	if_existsr   )getfixturevalueto_sql)r\   r   requestr+   r+   r,   test_dataframe_to_sql  s   
ra  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   r[  r   Fr\  )node
add_markerr  markxfailr^  r   r_  )r\   r   r`  empty_dfr+   r+   r,   test_dataframe_to_sql_empty  s   
rj  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 rR| dkrF|jdgd}t	rMt
}d}n	d }d}nt}d}|| } tj||dd |jd| ddd W d    d S 1 sxw   Y  d S )NpyarrowrG   zint8[pyarrow]r=     timestamp[ns][pyarrow]zdate32[day][pyarrow]zduration[ns][pyarrow]azstring[pyarrow])rQ  r   r   r   stringr   rO  r   r   zis_sparse is deprecated zthe 'timedelta'F)matchcheck_stacklevel
test_arrowreplacer\  )r  r  r   pdarrayr   r   r   rr   r   DeprecationWarningUserWarningr^  r   assert_produces_warningr_  )r\   r`  r   exp_warningmsgr+   r+   r,   "test_dataframe_to_sql_arrow_dtypes  s2   

"r}  c                 C  sL   t d tdtjtddd|gddi}|| } |jd| dd	d
 d S )Nrk  r   rm  rG   rn  rl  rt  ru  Fr\  )r  r  r   rv  rw  r   r^  r_  )r\   r`  nulls_fixturer   r+   r+   r,   *test_dataframe_to_sql_arrow_dtypes_missing  s   

r  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 s9w   Y  t	| dt
|ksIJ d S )	Nr  r   z)'method' not implemented for ADBC driversTrb  need_transaction
test_framer  )re  rf  r  rg  rh  r^  r"   r_  	has_tabler   len)r\   r  r   r`  	pandasSQLr+   r+   r,   test_to_sql  s   
r  zmode, num_row_coef)ru  rG   )r   rH   c                 C  s   | | } t| dd}|j|ddd |j|d|d |ds#J W d    n1 s-w   Y  t| d|t| ks?J d S )NTr  r  failr]  r^  r"   r_  r  r   r  )r\   modenum_row_coefr   r`  r  r+   r+   r,   test_to_sql_exist+  s   
r  c              	   C  s   | | } t| ddA}|j|ddd |dsJ d}tjt|d |j|ddd W d    n1 s7w   Y  W d    d S W d    d S 1 sOw   Y  d S )NTr  r  r  r  z!Table 'test_frame' already existsrr  )r^  r"   r_  r  r  raises
ValueError)r\   r   r`  r  r|  r+   r+   r,   test_to_sql_exist_fail6  s   
"r  c                 C  s\   | | } td| }t| td| }t| td| }|jdks%J d|jv s,J d S )NSELECT * FROM irisSELECT * FROM iris where 0=1r   r   r6   )r^  r#   r   rv  read_sqlr   r   r\   r`  
iris_framer+   r+   r,   test_read_iris_queryB  s   

r  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sAJ d
|jv sHJ d S )Nr   ,'chunksize' not implemented for ADBC driversTrb  r     	chunksizer  r  r6   )re  rf  r  rg  rh  r^  r   r#   r   rv  r  r   r   r  r+   r+   r,   test_read_iris_query_chunksizeN  s   
r  c           
      C  s   d| v r|j tjjddd || } ddlm}m}m	}m
} | }t| tr-|| n| }|d||d}t||| d	d
dd}	t|	 t| trQ|  d S d S )Nr   r  Trb  r   )r1   r3   r   selectr4   )autoload_withr   r   r   lengthrt   )re  rf  r  rg  rh  r^  r;   r1   r3   r   r  r}   r   r#   r   r   )
r\   r`  r1   r3   r   r  r>   autoload_conr4   r  r+   r+   r,   .test_read_iris_query_expression_with_parametera  s&   

r  c                 C  sv   d| v r|j tjjddd |d  D ]
\}}|| v r  n	qtd|  d|| } t|| dd	}t	| d S )
Nr   r  Trb  r(   zNo part of z( found in sql_strings['read_parameters']r   r   r  )
re  rf  r  rg  rh  itemsKeyErrorr^  r#   r   )r\   r`  r-   r  queryr  r+   r+   r,   *test_read_iris_query_string_with_parameter}  s   
r  c                 C  s4   | | } td| }t| td| }t| d S )Nr4   )r^  r$   r   rv  r  r  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 )Nr   +chunksize argument NotImplemented with ADBCrc  r4   r  r  )re  rf  r  rg  rh  r^  r   r$   r   rv  r  r  r+   r+   r,   test_read_iris_table_chunksize  s   
r  c                   s   | | } g   fdd}t| dd}|j|d|d |ds#J W d    n1 s-w   Y   dgks9J t| dt|ksDJ d S )Nc                   s2    d  fdd|D }|| j | d S )NrG   c                   re   r+   rf   rM   r   r+   r,   rP     rk   z8test_to_sql_callable.<locals>.sample.<locals>.<listcomp>)r   rS   r   rd   )pd_tabler\   r   	data_iterr   checkr  r,   sample  s   
z$test_to_sql_callable.<locals>.sampleTr  r  r  rG   r  )r\   r   r`  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s&J t|jj	j
tjs1J d|v rAt|jj	j
tjs@J nt|jj	j
tjsLJ t|jj	j
tjsWJ d|v rgt|jj	j
tseJ d S t|jj	j
tjsrJ d S )NrY  ;sqlite_buildin connection does not implement read_sql_tabler  r   r'   )applymarkerr  rg  rh  r^  r   r$   r   r   r=   r   r   r   r   integerr   bool_r   r   objectr\   r`  	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]|  !}|	  |
| W d    n1 sHw   Y  W d    n1 sWw   Y  n| 	  | 
| W d    n1 sqw   Y  td| }t|| td| }t|| d S )Nr   r{   r   rG   rH   rI   皙?r   333333?ro  br  Fr   ru   r   z}DROP PROCEDURE IF EXISTS get_testdb;

    CREATE PROCEDURE get_testdb ()

    BEGIN
        SELECT * FROM test_frame;
    ENDzCALL get_testdb();)r^  r;   r|   r   r   r   r_  r}   r   rq   rS   r   r#   r   assert_frame_equalr  )	r\   r`  r|   r   r   procengine_connres1res2r+   r+   r,   test_read_procedure  s,   




r  expected_countrH   zSuccess!c                   s    fdd}| | } tddgddgddgd	}|jd
| d|d} d u r-|d u s,J n| ks3J td
| }t|| d S )Nc                   s   |j }| E}t }t|}|| |d ddd |D }| jr1| j d| j	 }	n| j	}	d|	 d| d}
|j
|
|d	 W d     S 1 sOw   Y   S )
Nr   z, c                 S  s   g | ]}d | d qS )r   r+   )rN   kr+   r+   r,   rP     r>  zVtest_copy_from_callable_insertion_method.<locals>.psql_insert_copy.<locals>.<listcomp>.zCOPY z (z) FROM STDIN WITH CSV)r   file)
connectionrR   r   rU   writer	writerowsseekjoinr   r   copy_expert)r   r\   r   r  
dbapi_connr^   s_bufr  r   r   	sql_queryr  r+   r,   psql_insert_copy  s    




zBtest_copy_from_callable_insertion_method.<locals>.psql_insert_copyrG   rH   r  r   ro  ncol1col2col3r  F)r   ru   r   r  r^  r   r_  r   r$   r   r  )r\   r  r`  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| |rT|  !}|	  |
| W d    n1 s?w   Y  W d    n1 sNw   Y  n| 	  | 
| W d    n1 shw   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sJ tj| dd}|d W d    d S 1 sw   Y  d S )Nr   rc   r   r{   c                   s<    fdd|D }| j |jdgd}||}|jS )Nc                   re   r+   rf   rM   r  r+   r,   rP   0  rk   z\test_insertion_method_on_conflict_do_nothing.<locals>.insert_on_conflict.<locals>.<listcomp>ro  )index_elements)r   rp   on_conflict_do_nothingrS   rowcountr   r\   r   r  r   r]   r  rc   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
    );
    rG    @ro  abcr   test_insert_conflictr   Fr\  rG   g	@r  r   ru   r   r]  r  Tr  )r^  sqlalchemy.dialects.postgresqlrd   r   r   sqlalchemy.sqlr|   r}   r   rq   rS   r   listr_  r   r$   r   r  r   r  )r\   r`  r   r|   r  
create_sqlru   r  	df_insertinsertedr  r  r+   rc   r,   ,test_insertion_method_on_conflict_do_nothing&  sJ   


	


"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  )rH   g@r  r  r   test_public_schemar   Fpublic)r   ru   r]  r   r   r   )r  r  rg  rh  r^  r   r  r_  r   r$   r   r  )r\   r`  	test_data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| |rT|  !}|	  |
| W d    n1 s?w   Y  W d    n1 sNw   Y  n| 	  | 
| W d    n1 shw   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sJ tj| dd}|d W d    d S 1 sw   Y  d S )Nr   rc   r   r{   c                   sH    fdd|D }| j |}|j|jj|jjd}||}|jS )Nc                   re   r+   rf   rM   r  r+   r,   rP     rk   zXtest_insertion_method_on_conflict_update.<locals>.insert_on_conflict.<locals>.<listcomp>)r  r   )r   rp   on_duplicate_key_updater  r  r   rS   r  r  rc   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   Fr\  r  r  rH   Tr  )r^  sqlalchemy.dialects.mysqlrd   r   r   r  r|   r}   r   rq   rS   r   r  r_  r   r$   r   r  r   r  )r\   r`  r   r|   r  r  ru   r   r  r  r  r  r+   rc   r,   (test_insertion_method_on_conflict_updatex  sF   

	


"r  c           
   
   C  s&  | | } ddlm} ddlm} dt j }dt j }|d| d| d| d	| d
	}t| |re| 	 !}|
  || W d    n1 sPw   Y  W d    n1 s_w   Y  n| 
  | | W d    n1 syw   Y  t|| }tdgdd}	t||	 d S )Nr   r   r{   group_group_view_z
    CREATE TABLE zF (
        group_id INTEGER,
        name TEXT
    );
    INSERT INTO z- VALUES
        (1, 'name');
    CREATE VIEW z
    AS
    SELECT * FROM z;
    rG   r   group_idr   )r^  r   r   r  r|   uuiduuid4hexr}   r   rq   rS   r$   r   r   r  )
r\   r`  r   r|   r   r   sql_stmtru   r  r  r+   r+   r,   test_read_view_postgres  s<   
	




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_viewrG   r   r  )rS   rv  r  r   r   r  )rW  create_tableinsert_intocreate_viewr  r  r+   r+   r,   test_read_view_sqlite  s   


r  c              	   C  s~   t jtdd. tjtdd td|  W d    n1 s w   Y  W d    d S W d    d S 1 s8w   Y  d S )Nz+pandas.io.sql.execute requires a connectionr  P`pandas.io.sql.execute` is deprecated and will be removed in the future version.select * from iris)r  r  	TypeErrorr   rz  FutureWarningr   rS   )rI  r+   r+   r,   test_execute_typeerror  s   "r  c                 C  s@   t jtdd td|  W d    d S 1 sw   Y  d S )Nr  r  r  )r   rz  r  r   rS   )rJ  r+   r+   r,   test_execute_deprecated  s   "r  c                 C  s2   d| v rdS d| v rdS d| v rdS t d|  )Nr'   r%   r&   zunsupported connection: )r  )r  r+   r+   r,   flavor  s   r  c              	   C  s   d| v r|j tjjddd | }|| } |d t| }d}t| #}|  |j	||d}W d    n1 s<w   Y  W d    n1 sKw   Y  t
| d S )Nr   )'params' not implemented for ADBC driversTrb  r(   r  r  re  rf  r  rg  rh  r^  r  r"   run_transaction
read_queryr   r\   r`  r-   r  r  rt   r  r  r+   r+   r,   test_read_sql_iris_parameter	  s$   


r  c              	   C  s   d| v r|j tjjddd | }|| } |d t| }ddd}t| #}|  |j	||d	}W d    n1 s?w   Y  W d    n1 sNw   Y  t
| d S )
Nr   r  Trb  r)   r   r   r  r  r  r  r+   r+   r,   "test_read_sql_iris_named_parameter  s$   



r  c              	   C  s   d| v sd| v rd| vr| tjjdd | }|| } |d t| }t| #}|  |j|d d}W d    n1 s@w   Y  W d    n1 sOw   Y  t	| d S )Nr&   r'   r   zbroken testr  r*   r  )
r  r  rg  rh  r^  r  r"   r  r  r   )r\   r`  r-   r  r  r  r  r+   r+   r,   ,test_read_sql_iris_no_parameter_with_percent0  s   


r  c                 C  s"   | | } td| }t| d S )NzSELECT * FROM iris_view)r^  r   r#   r   r  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 )Nr   r  r  z1SELECT * FROM iris_view WHERE "SepalLength" < 0.0r   r  )re  rf  r  rg  rh  r^  r   r#   r   r  r   )r\   r`  r  
with_batchwithout_batchr+   r+   r,   *test_api_read_sql_with_chunksize_no_resultJ  s   
r  c                 C  sp   | | } td| r'tj| dd}|d W d    n1 s"w   Y  t|d|  td| s6J d S )Nr   Tr  )r^  r   r  r   r  r_  )r\   r`  r   r  r+   r+   r,   test_api_to_sqlW  s   
r   c                 C  s   | | } td| r'tj| dd}|d W d    n1 s"w   Y  tj|d| dd td| s8J d}tjt|d tj|d| dd W d    d S 1 sVw   Y  d S )Ntest_frame2Tr  r  r  z"Table 'test_frame2' already existsr  )	r^  r   r  r   r  r_  r  r  r  )r\   r`  r   r  r|  r+   r+   r,   test_api_to_sql_failb  s   
"r"  c                 C  s   | | } td| r'tj| dd}|d W d    n1 s"w   Y  tj|d| dd tj|d| dd td| sAJ t|}t| d}||ksPJ d S )Nr   Tr  r  r  ru  r^  r   r  r   r  r_  r  r   r\   r`  r   r  num_entriesnum_rowsr+   r+   r,   test_api_to_sql_replaceq  s   

r'  c                 C  s   | | } td| r'tj| dd}|d W d    n1 s"w   Y  tj|d| dddks4J tj|d| dddksAJ td| sIJ dt| }t| d}||ksZJ d S )	Ntest_frame4Tr  r  r  rJ   r   rH   r#  r$  r+   r+   r,   test_api_to_sql_append  s   

r)  c                 C  s|   | | } td| r'tj| dd}|d W d    n1 s"w   Y  tj|d| dd td| }t|| d S )Ntest_frame5Tr  Fr   zSELECT * FROM test_frame5)	r^  r   r  r   r  r_  r  r   r  )r\   r`  r   r  r  r+   r+   r,   test_api_to_sql_type_mapping  s   
r,  c                 C  s   | | } td| r'tj| dd}|d W d    n1 s"w   Y  ttjddddd}tj|d| d	d
 t	d| }t
| | d S )Ntest_seriesTr  r   r   rl  seriesr   Fr+  zSELECT * FROM test_series)r^  r   r  r   r  r   r   aranger_  r#   r   r  to_frame)r\   r`  r  ss2r+   r+   r,   test_api_to_sql_series  s   
r3  c                 C  s   | }| | } td| r)tj| dd}|d W d    n1 s$w   Y  tj|d| d tjd| d}d|v rD|jddid	}|j|_|j	ddd
 |j
t d |j_t|| d S )Ntest_frame_roundtripTr  ru   "SELECT * FROM test_frame_roundtripr   __index_level_0__level_0r   inplace)r^  r   r  r   r  r_  r#   renamer   	set_indexr   rQ  r   r   r  r\   r`  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| r6tj| dd}|	d W d    n1 s1w   Y  tj
|d| ddd	 tjd
| d}t|| d S )Nr   r  r  r4  Tr  FrH   )ru   r   r  r6  r5  )re  rf  r  rg  rh  r^  r   r  r   r  r_  r#   r   r  )r\   r`  r   r  r  r+   r+   r,   test_api_roundtrip_chunksize  s$   
r?  c                 C  sf   | | } t| }|d}| }|  W d    n1 s"w   Y  t|g dks1J d S Nr  r   )r^  r   r"   rS   r   rY   r  )r\   r`  
pandas_sqliris_resultsrO   r+   r+   r,   test_api_execute_sql  s   


rC  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s4J |j	 t
dddd	d	d	t
ddd
d	d	d	gksMJ tjd| ddid}t|jjjtjsbJ |j	 t
dddd	d	d	t
ddd
d	d	d	gks{J tjd| dgd}t|jjjtj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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sJ d S )NSELECT * FROM typesr&   r(  r   parse_datesi  rG   rI   r   rJ   %Y-%m-%d %H:%M:%Sr   i        i  r1  r   z%Y%m%dz
2010-10-10z
2010-12-12)r^  r   r#   r   r   r=   r   r   
datetime64tolistr   r   r   r  r+   r+   r,   test_api_date_parsing  sZ   





rL  error)rx   raisecoercezread_sql, text, moderD  )r;   fallbackr   r;   c           
      C  s   | }| | } |dkr|dkr|tjjdd |ddi}||| dd|iid}	d	|v rA|	d
 t|	d
< |	d t|	d< |dkrY|dddd}tsY|d d|d< t	
|	| d S )Nr   rY  z failing combination of argumentsr  r   datetime64[ns]rz   )ru   rF  r(  r   r   r@  int32)r   r   r   zdatetime64[us])r^  r  r  rg  rh  r   rQ  rL   r   r   r  )
r\   r`  r  r|   r  rM  r   r  r  r  r+   r+   r,   !test_api_custom_dateparsing_error  s4   
rS  c                 C  sP   | | } tjd| dddgd}t|jjjtjsJ t|j	jjtjs&J d S )NrD  r   r   )	index_colrF  )
r^  r   r#   r   r   r=   r   r   rJ  r   r\   r`  r   r+   r+   r,   test_api_date_and_indexU  s   
rV  c           	      C  sP  | }| | } td| r)tj| dd}|d W d    n1 s$w   Y  ttddgdd }|dkrD|j	t
jjd	d
 d|v rPtrMt}nd }nt}tj|dd |jd| d}W d    n1 skw   Y  |dksvJ td| }|dkrttjdddddtjdddddgdd}n|d d}t|d | d S )Ntest_timedeltaTr  z00:00:01z00:00:03foor   rO  z.sqlite ADBC driver doesn't implement timedeltar  r   F)rs  r   ru   rH   zSELECT * FROM test_timedeltar/  r   i@B )monthsdaysmicrosecondsnanosecondsi- r   )r^  r   r  r   r  r   r   r0  re  rf  r  rg  rh  r   rx  ry  r   rz  r_  r#   rv  
DateOffsetr   r   )	r\   r`  r  r  r   r{  r  r  r  r+   r+   r,   test_api_timedeltad  s@   
r_  c                 C  sz   | }| | } tdddgi}d|v rd}nd}tjt|d |jd| d	d u s+J W d    d S 1 s6w   Y  d S )
Nro  y      ?      ?y               @r   zdatatypes not supportedzComplex datatypes not supportedr  test_complexr5  )r^  r   r  r  r  r_  )r\   r`  r  r   r|  r+   r+   r,   test_api_complex_raises  s   
"ra  zindex_name,index_label,expected))NNr   )Nother_labelrb  )
index_nameNrc  )rc  rb  rb  )r   N0)Nr   rd  c           	      C  s   d| v r|j tjjdd || } td| r6tj| dd}|	d W d    n1 s1w   Y  t
dtdi}||j_d	}tj|d| |d
 t|| }|jd |ks\J d S )Nr   -index_label argument NotImplemented with ADBCr  test_index_labelTr  r  rJ   SELECT * FROM test_index_label)index_labelr   )re  rf  r  rg  rh  r^  r   r  r   r  r   ranger   r   r_  r#   r   )	r\   r`  rc  rh  r  r  
temp_framer  r   r+   r+   r,   test_api_to_sql_index_label  s   
rk  c           	      C  s:  | }d|v r| tjjddd nd|v r!|jtjjdd || } td| rHtj	| d	d
}|
d W d    n1 sCw   Y  d}tdtditddgd}t|d| }||ksfJ td| }|jd dksuJ |jd dks~J tj|d| dddgd}||ksJ td| }|jd d  ddgksJ ddg|j_tj|d| dd}||ksJ 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    d S 1 sw   Y  d S )Nr&   z/MySQL can fail using TEXT without length as keyFrb  r   re  r  rf  Tr  rJ   r  )A0A1)B0B1r+  rg  r   r8  rG   level_1ru  r   r   )r]  rh  rH   r  r   r   zALength of 'index_label' should match number of levels, which is 2r  )r  r  rg  rh  re  rf  r^  r   r  r   r  r   ri  r   from_productr_  r#   r   rK  r   namesr  r  )	r\   r`  r  r  expected_row_countrj  r  r   r|  r+   r+   r,   &test_api_to_sql_index_label_multiindex  sz   

$rt  c                 C  s   | | } td| r'tj| dd}|d W d    n1 s"w   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 )Ntest_multiindex_roundtripTr  rG   r  line1rH         ?line2r   r   r   r   r   r   r   rY  z'SELECT * FROM test_multiindex_roundtriprT  check_index_type)r^  r   r  r   r  r   from_recordsr_  r#   r   r  )r\   r`  r  r   r  r+   r+   r,   test_api_multiindex_roundtrip  s   

r  r=   r   r   c           	      C  s   | }| | } td| r)tj| dd}|d W d    n1 s$w   Y  tddgddggdd	gd
}|jd| ddksBJ ||}d|v rNd}nd}tj|| |d}t	
|| d S )Ntest_dtype_argumentTr  333333?g333333@ffffff@g333333@r   r   r   rY  rH   r(  z(SELECT "A", "B" FROM test_dtype_argumentz$SELECT A, B FROM test_dtype_argumentru   r=   )r^  r   r  r   r  r   r_  r   r#   r   r  )	r\   r`  r=   r  r  r   r  r  r  r+   r+   r,   test_api_dtype_argument#  s   

r  c                 C  s<   | | } tddgddggddgd}tj|d| dd	 d S )
NrG   rH   rI   rJ   r   r   test_frame_integer_col_namesru  r  )r^  r   r   r_  rU  r+   r+   r,   test_api_integer_col_namesC  s   
r  c                 C  sJ   d| v r|j tjjddd || } tj|d| d}d|v s#J d S )Nr   -'get_schema' not implemented for ADBC driversTrb  r[  r5  CREATEre  rf  r  rg  rh  r^  r   
get_schemar\   r`  r   r  r+   r+   r,   test_api_get_schemaJ  s   
r  c                 C  sL   d| v r|j tjjddd || } tj|d| dd}d|v s$J d S )	Nr   r  Trb  r[  pypi)ru   r   zCREATE TABLE pypi.r  r  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r)d}nddlm} |}t	j
|d| d|id}d|v sBJ d|v sHJ d S )Nr   r  Trb  皙?r  r  皙@r  rW  INTEGERr   )r   r[  r  r  r  )re  rf  r  rg  rh  r^  r   r;   r   r   r  )r\   r`  r  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 r2d}nd}||v s:J tj|d
| ddgd}d|v rLd}nd}||v sTJ d S )Nr   r  Trb  r  r  r  r  )Col1Col2r[  r  )ru   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"))	re  rf  r  rg  rh  r^  r   r   r  )r\   r`  r   r  r   r  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| r8tj| dd}|	d W d    n1 s3w   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 ]}	t||	gdd}t|	|| kszJ |d7 }qft|| |dkrtjtdd tjd| dd W d    d S 1 sw   Y  d S t
 }
d}g d}tjd| ddD ]}	t|
|	gdd}
t|	|| ksJ |d7 }qt||
 d S )Nr   r  r  test_chunksizeTr  rH   )   r   abcder   Fr  zselect * from test_chunksizer   )r   r   r   r   rH   r   r  ignore_indexrG   rW  rq  r  )re  rf  r  rg  rh  r^  r   r  r   r  r   r   randomdefault_rngstandard_normalr  r_  r#   r   r  r   r  r  NotImplementedErrorr$   )r\   r`  r  r  r   r  r  isizeschunkres3r+   r+   r,   test_api_chunksize_read  sF   

"
r  c                 C  s   | dkr#t ddd}|d ur#t|jtdk r#|jtjjddd || } t	
d	| rJt	j| dd
}|d	 W d    n1 sEw   Y  tg dg dd}| }|d d|d< |jd	| dd t	d| }t|| d S )Nr/  r+  rx   ry   z0.9.0z:categorical dtype not implemented for ADBC postgres driverTrb  test_categoricalr  r  )John P. Doez	Jane Dover  )	person_idperson_namer  categoryFr  zSELECT * FROM test_categorical)r   r   r<   re  rf  r  rg  rh  r^  r   r  r   r  r   copyr   r_  r#   r   r  )r\   r`  r   r  r   df2resr+   r+   r,   test_api_categorical  s0   
r  c                 C  s~   | | } td| r'tj| dd}|d W d    n1 s"w   Y  tddgddggdd	gd
}|jd| dd d S )Ntest_unicodeTr  rG   rH   rI   rJ      ér  r   Fr  )r^  r   r  r   r  r   r_  )r\   r`  r  r   r+   r+   r,   test_api_unicode_column_name  s   
r  c                 C  s   | }| | } td| r)tj| dd}|d W d    n1 s$w   Y  tg ddtjdgd}|jd| dd	 d
|v rEd}nd}t	|| }t
|| d S )Nzd1187b08-4943-4c8d-a7f6Tr  r   rG   rH   r   r  r  Fr  r(  z'SELECT * FROM "d1187b08-4943-4c8d-a7f6"z'SELECT * FROM `d1187b08-4943-4c8d-a7f6`)r^  r   r  r   r  r   r   nanr_  r#   r   r  )r\   r`  r  r  r   r  r  r+   r+   r,   test_api_escaped_table_name  s   
r  c                 C  s   d| v r"t d}t|jtdkr| dv s"|jt jjddd || } t	
d| rIt	j| dd	}|d W d    n1 sDw   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 )Nr   rk  z16.0)rO  r/  z!pyarrow->pandas throws ValueErrorTrb  
test_tabler  r  r  rG   ro  r  r   Fr  z)SELECT a, b, a +1 as a, c FROM test_table)rG   r  rH   rG   )rH   r   rI   rG   )rI   r  rJ   rG   )ro  r  ro  r   r   )r  r  r   r<   re  rf  rg  rh  r^  r   r  r   r  r   r_  rv  r  r   r  )r\   r`  par  r   r  r  r+   r+   r,   #test_api_read_sql_duplicate_columns	  s,   

r  c                 C  sf   | }|dkr| tjjdd || } t|d|  ddg}tjd| |d}|j	 |ks1J d S )NrW  Not Implementedr  r  r   r   r   )
r  r  rg  rh  r^  r   r_  r$   r   rK  )r\   r`  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s-J tjd| ddgd}|jj	ddgksAJ tjd| ddgd	d
gd}|jj	ddgksXJ |j
 d	d
gkscJ d S )NrW  r  r  r  r   r}  r   r   r   r   )rT  r   )r  r  rg  rh  r^  r   r_  r$   r   rr  r   rK  )r\   r`  r   r  r  r+   r+   r,   test_read_table_index_col=	  s   
r  c                 C  sr   | dkr| tjjdd || } td| }td| }t	|| t
d| }td| }t	|| d S )NrX  r  r  r  r4   )r  r  rg  rh  r^  r   r#   r  r   r  r$   )r\   r`  iris_frame1iris_frame2r+   r+   r,   test_read_sql_delegateT	  s   
r  c              
   C  s  | }ddl m} ddlm} |d|dg}|D ]N}t||rM| !}|  || W d    n1 s8w   Y  W d    n1 sGw   Y  q|  || W d    n1 saw   Y  qt	d  t
d| t
d| W d    d S 1 sw   Y  d S )Nr   r{   r   z,CREATE TABLE invalid (x INTEGER, y UNKNOWN);z0CREATE TABLE other_table (x INTEGER, y INTEGER);other_tablezSELECT * FROM other_table)r;   r|   r   r   r}   r   rq   rS   r   rz  r   r$   r#   )rG  r\   r|   r   
query_listr  r+   r+   r,   test_not_reflect_all_tablesg	  s.   



"r  c              	   C  s   | }|dks
d|v r| tjjdd || } tjtdd# t	| }|
dd W d    n1 s7w   Y  W d    n1 sFw   Y  td  |jd	| d
 W d    d S 1 scw   Y  d S )NrW  r   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.r  TABLE1rq  CaseSensitiverY  )r  r  rg  rh  r^  r   rz  ry  r   r   check_case_sensitiver_  )r\   r`  r   r  r  r+   r+   r,   (test_warning_case_insensitive_table_name	  s    
"r  c                 C  s   | | } ddlm} tdtddgddi}t| }tjd||d	}t|j	j
d j|s1J W d    d S 1 s<w   Y  d S )
Nr   )	TIMESTAMPr   2014-12-12 01:542014-12-11 02:54Tutc	test_typer   )r^  r;   r  r   r   r   r   SQLTabler}   r   r   r   )r\   r`  r  r   r  r   r+   r+   r,   test_sqlalchemy_type_mapping	  s   
"r  zinteger, expected)int8SMALLINT)Int8r  )uint8r  )UInt8r  )int16r  )Int16r  )uint16r  )UInt16r  )rR  r  )Int32r  )uint32BIGINT)UInt32r  )r   r  )Int64r  r   r  r  c                 C  sx   | | } tddgdg|d}t| }tjd||d}t|jjjj	}W d    n1 s/w   Y  ||ks:J d S )Nr   rG   ro  r   r=   r  r  )
r^  r   r   r   r  r   r   r   ro  r   )r\   r`  r  r  r   r  r   r  r+   r+   r,   test_sqlalchemy_integer_mapping	  s   
r  r  uint64UInt64c              	   C  s   | | } tddgdg|d}t| 0}tjtdd tjd||d W d    n1 s/w   Y  W d    d S W d    d S 1 sGw   Y  d S )	Nr   rG   ro  r  z1Unsigned 64 bit integer datatype is not supportedr  r  r  )r^  r   r   r   r  r  r  r  )r\   r`  r  r   r  r+   r+   r,   (test_sqlalchemy_integer_overload_mapping	  s   
"r  c           
      C  s   t d || } t +}d| }d}|j||ddd t||}t||}d}t	||}	W d    n1 s<w   Y  t
|| t
|| t
||	 d S )Nr;   rC  r4   ru  Fr\  r  )r  r  r^  r   rD  r_  r   r  r$   r#   r  )
r\   r`  r   r   db_urir   r!  r   r  r(  r+   r+   r,   test_database_uri_string	  s   


r  pg8000c                 C  sX   t d || } d}t jtdd td| W d    d S 1 s%w   Y  d S )Nr;   z)postgresql+pg8000://user:pass@host/dbnamer  r  zselect * from table)r  r  r^  r  ImportErrorr   r  )r\   r`  r  r+   r+   r,   (test_pg8000_sqlalchemy_passthrough_error	  s   

"r  c                 C  sf   | }| | } ddlm} d|v r|d}n|d}tj|| ddid}t|d	 }|dhks1J d S )
Nr   r{   r(  z%select * from iris where "Name"=:namez#select * from iris where name=:namer   zIris-versicolorr  r9   )r^  r;   r|   r   r  set)r\   r`  r  r|   	name_textiris_df	all_namesr+   r+   r,   test_query_by_text_obj	  s   

r  c                 C  sl   | | } ddlm}m} t }|||jj|dk}tj	|| ddid}t
|d }|dhks4J d S )Nr   )	bindparamr  r   r   r  r9   )r^  r;   r  r  r?   wherer   r9   r   r  r  )r\   r`  r  r  r4   name_selectr  r  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 )
NrW  r  r  r  rI   rJ   r   )r   z%_variationtest_column_percentageFr  )r  r  rg  rh  r^  r   r_  r   r$   r   r  )r\   r`  r  r   r  r+   r+   r,   test_column_with_percentage
  s   
r  c              	   C  s   t  I}tt|}tj| d|dddksJ W d    n1 s$w   Y  tt|}td|}W d    n1 sAw   Y  W d    n1 sPw   Y  t | | d S )Ntest_frame3_legacyFr+  rJ   z!SELECT * FROM test_frame3_legacy;)	r   rD  r   r~   r   r   r_  r#   r  )r   r   r\   r  r+   r+   r,   test_sql_open_close%
  s   
r  c                  C  sH   d} d}t jt|d td|  W d    d S 1 sw   Y  d S )Nzmysql://root@localhost/pandasz-Using URI string without sqlalchemy installedr  r  )r  r  r  r   r  )r\   r|  r+   r+   r,   test_con_string_import_error3
  s
   "r  c               	   C  s   G dd d} t | d,}tt td| W d    n1 s%w   Y  W d    d S W d    d S 1 s=w   Y  d S )Nc                   @  s&   e Zd Z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returnNonec                 _  s   t j|i || _d S r  )r~   r   r\   )selfargskwargsr+   r+   r,   __init__>
  s   zqtest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnection.__init__c                 S  s   t | j|S r  )getattrr\   )r  r   r+   r+   r,   __getattr__A
  s   zttest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnection.__getattr__c                 S  s   | j   d S r  )r\   rY   )r  r+   r+   r,   rY   D
  s   zntest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnection.closeN)r  r  )__name__
__module____qualname__r  r  rY   r+   r+   r+   r,   MockSqliteConnection=
  s    
r  rS  zSELECT 1)rT  r   r   rz  ry  r   r  )r  r\   r+   r+   r,   Jtest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed;
  s   
"r  c                 C  sn   | }t d|}t d|}t|| d}tjt j|d t d| W d    d S 1 s0w   Y  d S )Nr  z9Execution failed on sql 'iris': near "iris": syntax errorr  r4   )r   r#   r  r   r  r  r  DatabaseError)rX  r\   r  r  r|  r+   r+   r,   test_sqlite_read_sql_delegateL
  s   "r  c                 C  s   t | d}d|v sJ d S )Nr[  r  )r   r  )r   r  r+   r+   r,   test_get_schema2W
  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r;| d dks;J q$d S )Nr   r  r  Tr  r  r  
r   r   rG   r  )r   r   r   r    SQLiteTable
sql_schemasplitstrip)rW  r\   r   r  r   r   colr+   r+   r,   test_sqlite_type_mapping]
  s   
r  c                 C  s   | dkr	t d || } ddlm} tg dg dd}tj| dd	}||d
dks1J W d    n1 s;w   Y  || }|	d
sKJ tj| dd	}|
d
 W d    d S 1 scw   Y  d S )NrE  #sqlite_str has no inspection systemr   r         ?       @      @      @r  r  r  r  onetwoTr  rj  rJ   )r  skipr^  r;   r   r   r   r   r_  r  r  r\   r`  r   rj  r  inspr+   r+   r,   test_create_tableo
  s   

"r  c              	   C  s   | dkr	t d || } ddlm} tg dg dd}t| b}|  |	|dd	ks4J W d    n1 s>w   Y  || }|
dsNJ |  |d W d    n1 sbw   Y  z|  W n	 tyv   Y nw |
dr~J W d    d S 1 sw   Y  d S )
NrE  r  r   r   r  r  r  rj  rJ   )r  r  r^  r;   r   r   r   r   r  r_  r  r  clear_cacheAttributeErrorr  r+   r+   r,   test_drop_table
  s*   



"r!  c                 C  s   | dkr	t d | }|| } t| }|  ||ddks#J |d}W d    n1 s2w   Y  d|v rC|jddid	}|jdd
d d |j	_
t|| d S )NrE  r  r4  rJ   r6  r   r7  r8  r   Tr9  )r  r  r^  r"   r  r_  r  r;  r<  r   r   r   r  r=  r+   r+   r,   test_roundtrip
  s   


r"  c              	   C  s   | | } t| )}|  |d}| }|  W d    n1 s&w   Y  W d    n1 s5w   Y  t|g dksDJ d S r@  )r^  r"   r  rS   r   rY   r  )r\   r`  r  rB  rO   r+   r+   r,   test_execute_sql
  s   




r#  c                 C  s$   | | } tjd| d}t| d S )Nr4   r5  )r^  r   r$   r   r  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   )ru   r   SepalLength__1)r^  r   r$   r   assert_index_equalr   r   r  r+   r+   r,   "test_sqlalchemy_read_table_columns
  s
   

r'  c                 C  sP   | | } d}tjt|d tjd| d W d    d S 1 s!w   Y  d S )Nz!Table this_doesnt_exist not foundr  this_doesnt_existr5  )r^  r  r  r  r   r$   )r\   r`  r|  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s4J t|jj
jtjs?J t|jj
jtjsJJ t|jj
jtjsUJ t|jj
jts_J d S )NrE  .types tables not created in sqlite_str fixturer&   r%   z#boolean dtype not inferred properlyr  r   )r  r  r  rg  rh  r^  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sJ td| }t|| d S )Ni64l            )r   test_bigintFr  rG   r  r\   r`  r   r  r+   r+   r,   r-  
  s
   
r-  c                 C  sd   | }|dkrt d nd|v r|t jjdd || } td| }t|j	j
jtjs0J d S )NrE  r*  r%   z"sqlite does not read date properlyr  r   )r  r  r  rg  rh  r^  r   r$   r   r   r=   r   r   rJ  r  r+   r+   r,   test_default_date_load
  s   
r/  rF  r   c                 C  s6   | | } t| }td| |d}|j}t|| d S )Nselect * from datetzrE  )r^  r   r#   r   r   r   )r\   r`  rF  r  r   r  r+   r+   r,   !test_datetime_with_timezone_query	  s
   
r1  c                 C  sB   | | } t| }tttd| dddd}|j}t|| d S )Nr0  rG   r  Tr  )r^  r   r   r  r#   r   r   r   )r\   r`  r  r   r  r+   r+   r,   +test_datetime_with_timezone_query_chunksize  s   
r2  c                 C  s2   | | } t| }td| }t||  d S )Nr   )r^  r   r   r$   r   r  r0  )r\   r`  r  r  r+   r+   r,   !test_datetime_with_timezone_table%  s   
r3  c                 C  s   | }| | } tdtddddi}|jd| dddksJ d	|v r-|d jd
|d< n
|d jd |d< td| }t	
|| td| }d|v r_t|jd tsWJ t|d |d< t	
|| d S )Nr   2013-01-01 09:00:00rI   
US/Pacificperiodsr   test_datetime_tzFr  r'   r   zSELECT * FROM test_datetime_tzr%   r   r   )r^  r   r   r_  dt
tz_converttz_localizer   r$   r   r  r#   r}   locr   r   )r\   r`  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'  rG   r   r+  test_datetime_obbFr  r   )
r^  r   r   r_  r   r$   rv  NaTr   r  )r\   r`  r   r  r  r+   r+   r,   test_out_of_bounds_datetimeL  s   
rA  c                 C  sn   | | } tddddd }tdtdi|d}|jd| dd	dks%J tjd| dd
}tj	||dd d S )Nz
2018-01-01r   6hr7  freqnumsr+  	foo_table	info_date)r   ru   rh  r}  F)check_names)
r^  r   
_with_freqr   ri  r_  r   r$   r   r  )r\   r`  datesr  r  r+   r+   r,   "test_naive_datetimeindex_roundtripW  s   
rK  c                 C  sD  | }| | } 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s4J tjd| ddid}t|jjj	tjsIJ tjd| dddiid}t|jjj	tjs`J tjd| dgd}t|j
jj	tjstJ 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 d S )
Nr   r%   r   rE  rG  formatr   r1  unit)r^  r   r$   r  r   rJ  r   r   r=   r   r   )r\   r`  r  r   expected_typer+   r+   r,   test_date_parsingd  s*   

rO  c                 C  s   | }| | } ttdddtdd}|jd| ddks J td| }|jdd	d
}t	
|| td| }|jdd	d
}d|v r^t|jd tsNJ t|d |d< t	
|| d S t	
|| d S )Nr4  rI   r7  r  r  test_datetimerY  r   rG   )axisSELECT * FROM test_datetimer%   r9  r   )r^  r   r   r   r/  r_  r   r$   rr   r   r  r#   r}   r=  r   r   r\   r`  r  r   r  r+   r+   r,   rQ    s    
rQ  c                 C  s   | }| | } ttdddtdd}tj|jd< |jd| dd	dks'J t	d| }t
|| td
| }d|v rYt|jd tsGJ t|d dd|d< t
|| d S t
|| d S )Nr4  rI   rP  r  r  rG   r   rQ  Fr  rS  r%   r9  r   rO  ry   )r^  r   r   r   r/  r  r=  r_  r   r$   r   r  r#   r}   r   r   rT  r+   r+   r,   test_datetime_NaT  s   
rV  c                 C  sr   | | } ttdddtdddgdgd}|jd| dddks"J td| }|d }t|d }t|| d S )	N  rG   rH   ro  r   	test_dateFr  )r^  r   r   r_  r$   r   r   r   )r\   r`  r   r  r  r  r+   r+   r,   test_datetime_date  s   
"
rY  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j|d|ddd
ks>J td|}|	dd }t|| tj|d| ddd
ks^J d|v rutd| }|	dd }t|| td| }t|| d S )N	   r   rG      ro  r   	test_timeFr  rH   
test_time2r+  zSELECT * FROM test_time2c                 S  
   |  dS Nz%H:%M:%S.%fstrftime_r+   r+   r,   <lambda>     
 z$test_datetime_time.<locals>.<lambda>
test_time3r%   zSELECT * FROM test_time3c                 S  r^  r_  r`  rb  r+   r+   r,   rd    re  )
r^  r   r   r_  r$   r   r  r   r#   map)r\   r`  rW  r  r   r  rG  refr+   r+   r,   test_datetime_time  s$   
"
ri  c                 C  sn   | | } tdtjd}tdtjd}t||d}|jd| dddks&J td| }t	j
||dd	d
 d S )Ni  rl  g        )s1r2  test_read_writeFr  rG   T)check_dtypecheck_exact)r^  r   r   rR  float32r   r_  r   r$   r   r  )r\   r`  rj  r2  r   r  r+   r+   r,   test_mixed_dtype_insert  s   
ro  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 )
Nr  r   r  r  test_nanFr  rI   SELECT * FROM test_nan)
r^  r   r   r  r_  r   r$   r   r  r#   r.  r+   r+   r,   test_nan_numeric  s   
rr  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 )
Nr  r  rp  Fr  rI   r   r  rq  )r^  r   r   r  r_  r   r$   r   r  r   r#   r.  r+   r+   r,   test_nan_fullcolumn  s   
rs  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 )Nr  ro  r  r  rp  Fr  rI   rH   r   rq  )r^  r   r   r  r_  r=  r   r$   r   r  r#   r.  r+   r+   r,   test_nan_string  s   

ru  c              	   C  sB  d| v r|j tjjddd | }|| } tjddgg ddgd	}d
}t| &}|	  |
||dks:J W d    n1 sDw   Y  W d    n1 sSw   Y  |dv rtd| d| }g }|jD ]}td| d| }	||	j  qknddlm}
 |
| }||}dd |D }|dggksJ d S )Nr   z)ADBC implementation does not create indexTrb  rv  rx  r{  r   r|  test_to_sql_saves_indexrH   >   rE  rW  zASELECT * FROM sqlite_master WHERE type = 'index' AND tbl_name = ''zPRAGMA index_info()r   r   c                 S  r   )column_namesr+   )rN   r  r+   r+   r,   rP   D  r   z*test_to_sql_save_index.<locals>.<listcomp>)re  rf  r  rg  rh  r^  r   r  r"   r  r_  r   r#   r   r   rK  r;   r   get_indexes)r\   r`  r  r   tbl_namer  ixsix_colsix_nameix_infor   r  r+   r+   r,   test_to_sql_save_index!  sF   




r  c              	   C  s   | }| | } d}|dkrd|vrddlm} ||}t| *}| }|| W d    n1 s4w   Y  W d    d S W d    d S 1 sLw   Y  d S )N'CREATE TABLE test_trans (A INT, B TEXT)rW  r   r   r{   )r^  r;   r|   r"   r  rS   )r\   r`  r  r]   r|   r  transr+   r+   r,   test_transactionsI  s   


"r  c              	   C  s  | }| | } t| }| (}d}d|v st|tr"|| nddlm} ||}|| W d    n1 s;w   Y  G dd dt}d}t|t	rYddlm} ||}z| 
}|| |d1 skw   Y  W n	 |yz   Y nw |  |
d	}	W d    n1 sw   Y  t|	dksJ | }|| |
d	}
W d    n1 sw   Y  t|
d
ksJ W d    d S 1 sw   Y  d S )Nr  r   r   r{   c                   @  s   e Zd ZdS )z1test_transaction_rollback.<locals>.DummyExceptionN)r  r  r  r+   r+   r+   r,   DummyExceptionh  s    r  z/INSERT INTO test_trans (A,B) VALUES (1, 'blah')rM  zSELECT * FROM test_transrG   )r^  r"   r  r}   r    rS   r;   r|   	Exceptionr   r  r  )r\   r`  r  r  r  r]   r|   r  ins_sqlr  r  r+   r+   r,   test_transaction_rollbackY  sF   










"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| |rg|  !}|  || W d    n1 sRw   Y  W d    n1 saw   Y  n| | t	|| }	tj|	|d	d
 d S )NrE  z(test does not support sqlite_str fixturer  r   r{   r   test_get_schema_create_tabler5  Fr~  )r  r  rg  rh  r^  r;   r|   r   r   r   r  r   r}   r   rq   rS   r$   r   r  )
r\   r`  r   r|   r   r  r  blank_test_dfnewconreturned_dfr+   r+   r,   r    s,   




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s5J |j	d| d|iddksCJ | }|j
| d |jd jd j}	t|	|s\J d}
t jt|
d |j	d| dtid W d    n1 szw   Y  |j	d| d|diddksJ |j
| d |jd jd j}	t|	|sJ |	jdksJ |j	d| |ddksJ |j
| d |jd jd j}|jd jd j}t||sJ t||sJ d S )NrE  r  r   )r   r2   r1   r   r   g?Tg?Nr   
dtype_testrY  rH   dtype_test2r   ru   r=   rn   z&The type of B is not a SQLAlchemy typer  rM  dtype_test3
   single_dtype_test)r  r  r^  r;   r   r2   sqlalchemy.schemar1   r   r_  reflecttablesr   r   r}   r  r  r   r  )r\   r`  r   r2   r1   r  r   r   metasqltyper|  sqltypeasqltypebr+   r+   r,   
test_dtype  s:   

 r  c                 C  s.  | 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sPJ t|
| }| }|j| d d|v re|n|}|j|
 j}t|d j|swJ t|d j|sJ t|d j|sJ t|d j|sJ d S )NrE  r  r   )r   r   r0   r   r  T  r   rG   r  rl  r  BoolDateIntr0   notna_dtype_testrY  rH   rn   r&   r  r  r  r0   )r  r  r^  r;   r   r   r0   r   r  r1   r   r   r   r_  r   r$   r  r  r   r}   r   )r\   r`  r  r   r   r0   r   r1   r  r   r  rc  r  my_typecol_dictr+   r+   r,   test_notna_dtype  s.   



r  c              	   C  sz  | 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sVJ td| }t|d jd dt|d jd dkstJ | }	|	j| d |	jd j}
t|
d jt|
d jksJ t|
d j|sJ t|
d j|sJ t|
d j|sJ t|
d j|sJ d S )NrE  r  r   )
BigIntegerr0   r   r  gYB?rn  rl  float64r   rR  r   )f32f64
f64_as_f32i32r,  test_dtypesFru  r     )	precision)r   ru   r   r]  r=   rG   r     rn   r  r  r,  )r  r  r^  r;   r  r0   r   r  r1   r   r   r_  r   r$   r   roundr   r  r  r   r   r   r}   )r\   r`  r  r0   r   r1   Vr   r  r  r  r+   r+   r,   test_double_precision  sB   

	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s2J ||  d S )Nr   r   c                 S  s   d}t j|| dS )Nz'SELECT test_foo_data FROM test_foo_datar5  )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   ru   r]  )r_  )r  r   r+   r+   r,   test_append0  s   z3test_connectable_issue_example.<locals>.test_appendc                   s   | } | | d S r  r+   )r\   foo_data)r  r  r+   r,   test_connectable3  s   z8test_connectable_issue_example.<locals>.test_connectablec              	     s   t |  r<|  )}|  | W d    n1 sw   Y  W d    d S W d    d S 1 s5w   Y  d S |  d S r  )r}   r   rq   )connectabler\   )r   r  r+   r,   main9  s   



"z,test_connectable_issue_example.<locals>.mainr  r  rY  rI   )r^  r   r   r   r_  )r\   r`  r  r+   )r   r  r  r  r,   test_connectable_issue_example$  s   
	r  inputrX  bar)rX  infe0c           	      C  s   t |}| }|| } d|v rRt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    d S 1 sKw   Y  d S |jd	| d
ddks^J td	| }t|| d S )Nr&   r  z1.0.3r  zGH 36465r  zinf cannot be used with MySQLr  foobarFr  rG   )r   r^  r  r  r   r<   r   rg  rh  r  r  r  r_  r   r$   r   assert_equal)	r\   r`  r  r   r  r  rg  r|  r  r+   r+   r,   test_to_sql_with_negative_npinfH  s   


"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	|}|| <}	|	 ( |	 } |j|  |	||d
 |	  tj||j| d}
W d    n1 snw   Y  W d    n1 s}w   Y  t|
| d S )NrE  z&test does not work with str connectionr   )r.   r   Unicoder  )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>.Temporary	temp_testprefixes	TEMPORARYTprimary_keyr[  F)nullableN)r  r  r  __tablename____table_args__idr  r+   r.   r   r  r+   r,   	Temporary~  s
    
r  )r  )r   ru   )r  r  r^  r;   r.   r   r  r  sqlalchemy.ormr  r  r   rq   r  	__table__rs   addflushr   r#   r  r   r  )r\   r`  r  r  r  r  r  Baser  sessionr   r+   r  r,   test_temporary_tableh  s(   



r  c              	   C  s   | dksd| v r| tjjdd || } d}t| 0}tjt|d |j|ddd	 W d    n1 s8w   Y  W d    d S W d    d S 1 sPw   Y  d S )
NrW  r   z9SQLiteDatabase/ADBCDatabase does not raise for bad enginer  z*engine must be one of 'auto', 'sqlalchemy'r  r   
bad_enginer   )	r  r  rg  rh  r^  r"   r  r  r_  )r\   r`  r   r|  r  r+   r+   r,   test_invalid_engine  s   

"r  c              	   C  s   | | } t| /}|  |j|ddddksJ |ds"J W d   n1 s,w   Y  W d   n1 s;w   Y  t|}t| d}||ksOJ dS )z `to_sql` with the `engine` paramr   autor  rJ   N)r^  r"   r  r_  r  r  r   r$  r+   r+   r,   test_to_sql_with_sql_engine  s   



r  c              
   C     | | } tddQ t| -}|  ||ddks J |ds'J W d    n1 s1w   Y  W d    n1 s@w   Y  t|}t| d}||ksTJ W d    d S 1 s_w   Y  d S )Nio.sql.enginer;   r   rJ   	r^  rv  option_contextr"   r  r_  r  r  r   r$  r+   r+   r,   test_options_sqlalchemy     



"r  c              
   C  r  )Nr  r  r   rJ   r  r$  r+   r+   r,   test_options_auto  r  r  c                   C  s   t d ttdtsJ tdd ttdtsJ ttdts'J W d    n1 s1w   Y  tdd ttdtsFJ ttdtsOJ W d    d S 1 sZw   Y  d S )Nr;   r  r  )r  r  r}   r!   r   rv  r  r+   r+   r+   r,   test_options_get_engine  s   
"r  c                   C  s   d S r  r+   r+   r+   r+   r,   "test_get_engine_auto_error_message  s   r  funcr  r#   c                 C  s  | }| | } d}|}	|	j|| ddd td| tt|d| | |d}
W d    n1 s2w   Y  ||||}t|
| d|v rQ|tj	j
d	d
 td|( tt|d| | |dd}||||}|D ]}
t|
| qnW d    d S 1 sw   Y  d S )Nr[  Fru  r   ru   r   r]  mode.string_storageSelect * from dtype_backendr   z(adbc does not support chunksize argumentr  rI   )ru   r  r  )r^  r_  rv  r  r   r   r  r  r  rg  rh  r\   r`  string_storager  r  dtype_backend_datadtype_backend_expectedr  r   r   r  r  iteratorr+   r+   r,   test_read_sql_dtype_backend  s8   
"r  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 sAw   Y  ||||}t	
|
| d|v rXd S td	|% tt||| |dd}||||}|D ]}
t	
|
| qrW d    d S 1 sw   Y  d S )Nr%   r   zhSQLite actually returns proper boolean values via read_sql_table, but before pytest refactor was skippedr  r[  Fru  r  r  r  rI   )r  r  )r  r  rg  rh  r^  r_  rv  r  r   r   r  r  r+   r+   r,   !test_read_sql_dtype_backend_table
  s<   	
"r  )r  r$   r#   c                 C  sp   | | } d}|}|j|| ddd d}tjt|d tt||| dd W d    d S 1 s1w   Y  d S )	Nr[  Fru  r  zPdtype_backend numpy is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.r  numpyr  )r^  r_  r  r  r  r   rv  )r\   r`  r  r  r   r   r|  r+   r+   r,   )test_read_sql_invalid_dtype_backend_table:  s   
"r  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 )NrG   rI   r  rl  r  ry        @Float64ry  r  r  )TFNTFTr  ro  r  Nro  r  r   defgh)r   r   r   r  r+   r+   r+   r,   r  J  s   r  c                  C  s   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}n9|dkrAt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rtdddlm	  t fddjD d|v sd|v r|dkrdddS dddS )Npythonr  rl  ro  r  rk  r   )ArrowExtensionArrayr  rG   rI   r  r  ry  r  r  r  TFbooleanr  r  c                   s$   i | ]}| j | d dqS )T)from_pandas)rw  )rN   r  r   r   r  r+   r,   
<dictcomp>  s    z8dtype_backend_expected.<locals>.func.<locals>.<dictcomp>r&   r%   numpy_nullable)r  r  zint64[pyarrow])r   r   rw  object_rv  NAr  r  pandas.arraysr   r   r   r   r  r   r   )storager  r  string_arraystring_array_nar+   r  r,   r  \  sH   


z$dtype_backend_expected.<locals>.funcr  r   r+   )r  r+   r+   r,   r  Z  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|| q8d S )Nr   r  r  r   r  r  ro  r  r   r[  Fru  r  zSELECT * FROM testrG   )r=   r  )re  rf  r  rg  rh  r^  r   r   r  r_  r#   r   r  )r\   r`  r   r   r  r  r+   r+   r,   test_chunksize_empty_dtypes  s"   


r  r  r  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s=dnddd}t	|| d S )Nr[  r  r   r  Fru  r  r  ro  )r=   r  rl  )r   r   r   r  r   r  )
r^  r   r_  r   rv  r   r  r   r   r  )r\   r`  r  r  r   r   r  r  r+   r+   r,   test_read_sql_dtype  s&   
	r  c                 C  sv   | }d}t ddddddddg}|d| tjt|d |jd|d dd	 W d    d S 1 s4w   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.rG   rH   rI   r{  exampler  ru  r  )r   r_  r   rz  r  )rF  r\   r|  r   r+   r+   r,   test_keyword_deprecation  s   "r  c                 C  sl   | }t dddgidd}|jd|dddksJ td  td| W d    d S 1 s/w   Y  d S )	Nro  rG   rH   r   rl  test_bigintwarningFr  )r   r_  r   rz  r   r$   rF  r\   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    d S 1 s)w   Y  d S )NrG   rH   rI   rJ   r  r  zEmpty table name specifiedr  rq  ru  Fr\  )r   r  r  r  r_  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 s8w   Y  ||d}| 0}t
ddgdd	gd
}|jd|ddddks^J |  ||j|j}	t
|	}W d    n1 sxw   Y  t|jddgksJ 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>.Testr  Tr  2   N)r  r  r  r  r  string_columnr+   r  r+   r,   Test  s    r  rn   rG   helloworld)r  r  r  Fru  r  rH   r  r  )r;   r.   r   r2   r  r  r  rq   r>   
create_allr   r_  rZ   r  r  r  r  r   )
rF  r\   r  r  	BaseModelr  r  r  r   
test_queryr+   r  r,   test_row_object_is_named_tuple  s&   



r   c                 C  s   | }t d d}tdddgi}|j||ddd td	d
 t||}W d    n1 s0w   Y  d}tdddgi|tdg|dd}t	|| d S )Nrk  r[  ro  xyFru  )ru   r   r]  zfuture.infer_stringTzstring[pyarrow_numpy]rl  )r=   r   )
r  r  r   r_  rv  r  r$   r   r   r  )rF  r\   r   r   r  r=   r  r+   r+   r,   test_read_sql_string_inference
  s   
r#  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s(J d S Nti  rH     rQ  rl  r[  ru  F)r]  r   select * from testr   r   z2020-12-31 12:00:00.000000)r   r   r_  rv  r  r   )rF  r\   r   r  r+   r+   r,   test_roundtripping_datetimes  s
   r)  c               	   c  sx    t tjdtjd&} | }|V  W d    n1 sw   Y  W d    d S W d    d S 1 s5w   Y  d S )NrS  )detect_types)rT  r   r~   r   PARSE_DECLTYPESrU  r+   r+   r,   sqlite_builtin_detect_types&  s   "r,  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s*J d S r$  )r   r   r_  rv  r  r   r   )r,  r\   r   r  r+   r+   r,   )test_roundtripping_datetimes_detect_types/  s
   r-  c           
   	   C  sV  | }t ddgddgddgd}| &}|  |d |d	 W d    n1 s.w   Y  W d    n1 s=w   Y  |jd
|dddksNJ |jd|ddddks[J |jd|ddddkshJ 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 sw   Y  | &}|  |d |d	 W d    n1 sw   Y  W d    n1 sw   Y  |jd|ddddksJ |jd|dddd |jd|dddddksJ tjd|dd}	tt||gdd|	 d S )NrG   rH   r  r   ro  r  r  z$DROP SCHEMA IF EXISTS other CASCADE;zCREATE SCHEMA other;test_schema_publicFr  test_schema_public_explicitr  )r   ru   r   r   test_schema_otherotherr  z!Table test_schema_other not foundr  )r   ru   r   r   ru  )r   ru   r   r   r]  r   Tr  )r   r   rq   r   r_  r   r$   r   r  r  r  r  r   )
r&  r\   r   ru   r  r  r  res4r|  r  r+   r+   r,   test_psycopg2_schema_support8  sr   


	



	r3  c           	   	   C  s   | }ddl m} |d}| !}|  || W d    n1 s%w   Y  W d    n1 s4w   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    d S 1 srw   Y  d S )Nr   r{   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;rG   2021r   r   rH   r  
created_dtr   Tr  person)r  r|   r   rq   rS   rv  r  r   r   r   r  r   r   r  )	r&  r\   r|   r	  ru   r  r  r  r  r+   r+   r,   test_self_join_date_columns  s*   

"r7  c              	   C  s   | }t g dg dd}t|N}|  ||ddks"J W d    n1 s,w   Y  |ds8J |  |d W d    n1 sLw   Y  |drXJ W d    d S 1 scw   Y  d S )Nr  r  r  drop_test_framerJ   )r   r   r   r  r_  r  r  )rF  r\   rj  r  r+   r+   r,   test_create_and_drop_table  s   

"r9  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 )
NrW  rG   rH   ro  r   rX  Fr  zSELECT * FROM test_date)r   r   r_  r#   r   r  r   r   )rW  r\   r   r  r+   r+   r,   test_sqlite_datetime_date  s
   "
r:  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s6J td|}|dd
 }t	|| d S )NrZ  r   rG   r[  r4  rH   r5  r6  c                 S  s   |   S r  )timetz)r:  r+   r+   r,   rd    s    z+test_sqlite_datetime_time.<locals>.<lambda>ro  r   r\  Fr  zSELECT * FROM test_timec                 S  r^  r_  r`  rb  r+   r+   r,   rd    re  )
r   r   r   to_pydatetimerg  r   r_  r#   r   r  )r;  rW  r\   tz_timestz_dtr   r  r  r+   r+   r,   test_sqlite_datetime_time  s   
r@  c           
      C  sN   |  d| d}|D ]\}}}}}}	||kr|  S qtd| d| d)NzPRAGMA table_info(rx  zTable z	, column z
 not found)rS   r  )
r\   r   columnrecscidr   ctypenot_nulldefaultpkr+   r+   r,   get_sqlite_column_type  s   rH  c                 C  s  | }ddg}ddg}t ||d}|jd|ddksJ |jd	|dd
iddks)J t|dddks3J t|d	dd
ks=J d}tjt|d |jd|dtid W d    n1 s[w   Y  |jd|d
ddkslJ t|ddd
ksvJ t|ddd
ksJ d S )Nr   r   r  r  r   r  rY  rH   r  STRINGr  r  z!B \(<class 'bool'>\) not a stringr  rM  r  )r   r_  rH  r  r  r  bool)rW  r\   r  r   r   r|  r+   r+   r,   test_sqlite_test_dtype  s   rK  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s0J t||ddks:J t||ddksDJ t||ddksNJ t||ddksXJ d S )NTr  r   rG   r  rl  r  r  r  rY  rH   r  r  r  r  r  r0   REAL)r   r   r   r_  rH  )rW  r\   r  r   r  r+   r+   r,   test_sqlite_notna_dtype  s   

rM  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 s+w   Y  tg dD ]:\}}|j||ddksEJ t|| t ddgddggd|gd}d|d}|j||ddksjJ t|| q6d S )NrG   rH   rI   rJ   ro  r  r   z$Empty table or column name specifiedr  rq  rY  )
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"99beginswithnumber12345r  test_weird_col_namer  )r   r  r  r  r_  	enumerater   table_exists)rW  r\   r   r|  ndx
weird_namer  c_tblr+   r+   r,   test_sqlite_illegal_names  s    rV  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 ]}t|tr3t|r3d }|t| }||| q&| t| S )Nz'{}'z{:.8f}z{:d}c                 S  s   dS )NNULLr+   )r!  r+   r+   r,   rd  +  s    zformat_query.<locals>.<lambda>z{:.10f}z'{!s}')r   rL  r   r   str_bytesrL   rQ  r   r  rJ  r}   r   r   r;  )r   r  _formattersprocessed_argsarg	formatterr+   r+   r,   format_query#  s"   r^  c                 C  sL   t |}||  }W d   n1 sw   Y  |du r"dS t|S )z#Replace removed sql.tquery functionN)r   r"   rS   r   r  )r  ru   rA  r  r+   r+   r,   tquery:  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s&J t	d| }|j|_|}t|| dgt| |d< | }ttt|tjdd }| |d< t	j
|d| dddksfJ t	jd| dd}| }||_d|j_t|| d S )NrH   r  rJ   ABCDrl  
2000-01-01r  r   rC  r|  r  Fr  zselect * from test_tablero  txtIdxtest_table2zselect * from test_table2r}  )r   r   r  r  r  r   r  r  r   r   r_  r  r   r   r  r  r  r/  r   r   )rW  r   r  r  frame2new_idxr+   r+   r,   test_xsqlite_basicA  s(   rh  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 q4|   tjd| d}|j|_tj||dd d S )NrH   r`  ra  rl  rb  r  r   rC  r|  r(  r[  z(INSERT INTO test VALUES (%s, %s, %s, %s)r5  r'  gMbP?)rtol)r   r   r  r  r  r   r  r  r   r  r   r   r  rR   rS   iterrowsr^  r_  rZ   r  r   r   r  )	rW  r   r  r^   insrc  rO   fmt_sqlr  r+   r+   r,   test_xsqlite_write_row_by_row\  s"   
rm  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 sGw   Y  |   t	d| }|jd d |_t||d d  d S )NrH   r`  ra  rl  rb  r  r   rC  r|  r[  z$INSERT INTO test VALUES (?, ?, ?, ?)r   r'  rG   )r   r   r  r  r  r   r  r  r   r   r  rR   rS   r   r"   r;  rZ   r  r   r   r  )rW  r   r  r^   rk  rO   rA  r  r+   r+   r,   test_xsqlite_executes  s"   

rn  c                 C  s   t tjddttdtdtddddd	}t	
|d
}| }|D ]}|d}t|dkr@|d dkr@|d dks@J q%t	j
|d
ddgd}| }d|v sUJ |  }|| d S )NrH   r`  ra  rl  rb  r  r   rC  r|  r[   r   r   rG   DATETIMEr  zPRIMARY KEY ("A", "B"))r   r   r  r  r  r   r  r  r   r   r  
splitlinesr  r  rR   rS   )rW  r   r  lineslinetokensr^   r+   r+   r,   test_xsqlite_schema  s"   
ru  c              	   C  s   d}|   }|| t| 8}|d |d tjtjdd |d W d    n1 s3w   Y  W d    d S W d    d S 1 sKw   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 sqlr  z(INSERT INTO test VALUES("foo", "bar", 7))rR   rS   r   r"   r  r  r  )rW  r  r^   rA  r+   r+   r,   test_xsqlite_execute_fail  s   	


"rx  c               	   C  s   d} t td+}| }||  t|}|d W d    n1 s)w   Y  W d    n1 s8w   Y  d}tj	tj
|d td|d W d    d S 1 sYw   Y  d S )Nrv  rS  rw  z$Cannot operate on a closed database.r  r'  r5  )rT  r   r~   r   rR   rS   r   r"   r  r  r5  r_  )r  r\   r^   rA  r|  r+   r+   r,   &test_xsqlite_execute_closed_connection  s   	
"ry  c                 C  s0   t dtdi}tj|| ddddksJ d S )NFromr   testkeywordsFru   r   r   )r   r   onesr   r_  )rW  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s*J td
|}t|| d S )NrG   rH   c0r   mono_dfFr|  c                 s  s    | ]}|d  V  qdS )r   Nr+   )rN   my_c0r+   r+   r,   	<genexpr>  s    z4test_xsqlite_onecolumn_of_integer.<locals>.<genexpr>zselect * from mono_dfrI   )r   r   r_  sumrS   r  r   r  )rW  r  con_x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 s:w   Y  t||  tj|| |dd d}tjt|d tj|| |dd W d    n1 sjw   Y  tj|| |ddd t|| dddgksJ tj|| |ddddksJ t|| dg dksJ t||  tj|| |ddddksJ t|| dddgksJ tj|| |ddddksJ t|| dg dksJ t||  d S )NrG   rH   r   r   r  r  )r   r   Etable_if_existszSELECT * FROM z*'notvalidvalue' is not valid for if_existsr  notvalidvalue)r   ru   r   r]  r  z&Table 'table_if_exists' already existsru  F)r   ru   r   r]  r   r5  rU  rt  rI   )rI   r   rJ   r   r   r  r   )rU  rt  r  r  r  )r   r  r  r  r   r_  r  r_  )rW  df_if_exists_1df_if_exists_2r   
sql_selectr|  r+   r+   r,   test_xsqlite_if_exists  s   

	
		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  (,  
__future__r   rT  r   rU   r   r   r   r   r   r   pathlibr
   r~   typingr   r  r  r   r  pandas._libsr   pandas.compatr   r   pandas.compat._optionalr   pandas.util._test_decoratorsutil_test_decoratorstdpandasrv  r   r   r   r   r   r   r   r   r   r   pandas._testing_testingr   pandas.core.arraysr   r   pandas.util.versionr   	pandas.ior   pandas.io.sqlr   r   r    r!   r"   r#   r$   r;   rg  filterwarnings
pytestmarkfixturer-   r?   ra   rb   rv   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/  r8  r@  rA  rB  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rO  rP  rR  rW  rX  rY  paramr  mysql_connectablemysql_connectable_irismysql_connectable_typespostgresql_connectablepostgresql_connectable_irispostgresql_connectable_typessqlite_connectablesqlite_connectable_irissqlite_connectable_typessqlalchemy_connectablesqlalchemy_connectable_irissqlalchemy_connectable_typesadbc_connectableadbc_connectable_irisadbc_connectable_typesall_connectableall_connectable_irisall_connectable_typesparametrizera  rj  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,  r3  r>  r?  rC  rL  r  rS  rV  r_  ra  rk  rt  r  rQ  rL   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r=   r   r  r  r  skip_if_installedr  r  r  r  r  r  r  r  r	  r  r  r!  r"  r#  r$  r'  r)  r+  r-  r/  r1  r2  r3  r>  rA  rK  rO  rQ  rV  rY  ri  ro  rr  rs  ru  r  r  r  r  r  r  r  r  infr  r  r  r  r  r  r  r  r  r  r  r  r  r  
no_defaultr  r  r  r  r   r#  r)  r,  r-  r3  r7  r9  r:  r@  rH  rK  rM  rV  r^  r_  rh  rm  rn  ru  rx  ry  r~  r  r  r+   r+   r+   r,   <module>   s   0$

"-




#



















	















!
	





	



$%
9

4
#









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

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