o
    vhc4                    @  s  d dl mZ d dlZd dlmZ d dlZd dlmZmZmZmZ d dl	m
Z
 d dlmZ d dlZd dlmZ d dlZd dlZd dlZd dlmZ d d	lmZ d d
lmZmZ d dlmZ d dlm  mZ  d dl!Z"d dl!m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-m.Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; erd dl<Z<ej=>dej=j?g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d{gZejvdaej=jwdd}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=de3jddfe3jddfe3j:ddfe3j;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)using_string_dtype)lib)pa_version_under13p0pa_version_under14p1)import_optional_dependency)
	DataFrameIndex
MultiIndexSeries	Timestampconcat
date_rangeisnato_datetimeto_timedelta)Version)sql)SQLAlchemyEngineSQLDatabaseSQLiteDatabase
get_enginepandasSQL_builderread_sql_queryread_sql_tablez=ignore:Passing a BlockManager to DataFrame:DeprecationWarningc                   C  s$   dddddddddd	d
ddS )Nz1SELECT * FROM iris WHERE Name=? AND SepalLength=?z7SELECT * FROM iris WHERE `Name`=%s AND `SepalLength`=%sz7SELECT * FROM iris WHERE "Name"=%s AND "SepalLength"=%s)sqlitemysql
postgresqlz]
                SELECT * FROM iris WHERE Name=:name AND SepalLength=:length
                zw
                SELECT * FROM iris WHERE
                `Name`=%(name)s AND `SepalLength`=%(length)s
                zw
                SELECT * FROM iris WHERE
                "Name"=%(name)s AND "SepalLength"=%(length)s
                z&SELECT * FROM iris WHERE Name LIKE '%'z(SELECT * FROM iris WHERE `Name` LIKE '%'z(SELECT * FROM iris WHERE "Name" LIKE '%')read_parametersread_named_parametersread_no_parameters_with_percent r*   r*   r*   V/var/www/html/hyperkenya/venv/lib/python3.10/site-packages/pandas/tests/io/test_sql.pysql_stringsF   s   r,   c            
      C  s   dd l } ddl m}m}m}m}m}m} t| jtdkr|n|}| }|d||d||d||d||d||d	|d
}	|	S )Nr   )ColumnDoubleFloatMetaDataStringTablez2.0.0irisSepalLength
SepalWidthPetalLength
PetalWidthName   )	
sqlalchemyr-   r.   r/   r0   r1   r2   r   __version__)
r:   r-   r.   r/   r0   r1   r2   dtypemetadatar3   r*   r*   r+   iris_table_metadatac   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csvfilerU   recordsr*   r*   r+   create_and_load_iris_sqlite3|   s   

r`   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
        )r@   rA   z+INSERT INTO iris VALUES($1, $2, $3, $4, $5)c                 S  rD   rE   rJ   rL   r*   r*   r+   rO      rP   z3create_and_load_iris_postgresql.<locals>.<listcomp>)rQ   rR   rS   rT   rU   rV   rW   rY   rZ   r*   r*   r+   create_and_load_iris_postgresql   s   


ra   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   insertr@   rA   c                      g | ]	}t t |qS r*   dictziprL   headerr*   r+   rO          z(create_and_load_iris.<locals>.<listcomp>T
checkfirstbind)r:   rc   r>   rS   rT   rU   rV   valuesbegindropcreaterR   )	r[   r?   rc   r3   r^   rU   paramsr\   conr*   rh   r+   create_and_load_iris   s   

"ru   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
ConnectionrQ   rR   r   rY   r:   r{   rp   )r[   r\   r]   adbcr{   rt   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-   DateTimer/   Integerr0   r2   r$   typesTextColDateCol
IntDateColIntDateOnlyColFloatColIntColBoolColIntColWithNullBoolColWithNull)	r:   r   r   r-   r   r/   r   r0   r2   )r   r   r   r-   r   r/   r   r0   r2   	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~   rQ   rR   rW   rY   )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)
                )rQ   rR   rW   rY   )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   rb   EngineTrk   rm   )r:   rc   sqlalchemy.enginer   r   ro   r|   connectrp   rq   rr   rR   )r[   r   r   rc   r   r   r\   r*   r*   r+   create_and_load_types6  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   r0   r2   rc   r   datetzDateColWithTzT)timezonez2000-01-01 00:00:00-08:00z2000-06-01 00:00:00-07:00rk   rm   z2000-01-01 08:00:00UTCtzz2000-06-01 07:00:00name)r:   r-   r   r0   r2   rc   r   r   ro   r|   r   rp   rq   rr   rR   r   r   )r[   r-   r   r0   r2   rc   r   r=   r   datetz_datar\   expected_datar*   r*   r+   create_and_load_postgres_datetzJ  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   pytyperN   r*   r*   r+   check_iris_framew  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 rv   rw   rx   r   )create_enginer   )r   r|   r}   r~   rQ   rR   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datarT   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$@rF   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   int64rK   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*   )rM   viewr*   r*   r+   rO         z!get_all_views.<locals>.<listcomp>rv   rw   rx   catalog_namecatalog_db_schemasdb_schema_namedb_schema_tables
table_typer   r   r   inspect)r|   r}   r~   rR   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*   )rM   r   r*   r*   r+   rO     r   z"get_all_tables.<locals>.<listcomp>rv   rw   rx   r   r   r   r   r   r   r   )r|   r}   r~   rR   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 rv   rw   rx   zDROP TABLE IF EXISTS "")r|   r}   r~   rR   r   _get_valid_sqlite_namerY   r   rQ   rp   r   
drop_table)r   r[   r   r]   rt   dbr*   r*   r+   r   1  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 rv   rw   rx   zDROP VIEW IF EXISTS "r   )r:   r|   r}   r~   rR   r   r   rY   r   rQ   r   r   identifier_preparerquote_identifierr{   rp   )r   r[   r:   r   r]   quoted_viewr\   rt   r*   r*   r+   	drop_viewD  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_engine[  s   

r  c                 c      t | | t|  | V  d S Nru   r   )r  r   r*   r*   r+   mysql_pymysql_engine_irisl     

r  c                 c      t | |d | V  d S )Nr%   r   )r  r   r*   r*   r+   mysql_pymysql_engine_typess     
r  c                 c  6    |   }|V  W d    d S 1 sw   Y  d S r  r   )r  r[   r*   r*   r+   mysql_pymysql_conny     
"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 t d ddlm}  d}| |(}|V  t|D ]}t|| q t|D ]}t|| q,|	  W d    d S 1 sCw   Y  d S )Npyarrowadbc_driver_postgresqlr   dbapiz4postgresql://postgres:postgres@localhost:5432/pandas)
r
  r  r+  r-  r   r   r  r   r   rY   )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   r3   	iris_view)adbc_driver_manageradbc_get_table_schemaProgrammingErrorrollbackra   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*   tuplero   rM   entryr*   r*   r+   rO         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   ru   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 t d ddlm}  t J}d| }| |'}|V  t|D ]}t|| q(t	|D ]}t
|| q4|  W d    n1 sJw   Y  W d    d S W d    d S 1 sbw   Y  d S )Nr*  adbc_driver_sqliter   r,  zfile:)r
  r  rN  r-  r   rD  r   r   r  r   r   rY   )r-  r   r.  r[   r   r  r*   r*   r+   sqlite_adbc_conn3  s"   




"rO  c                 c  r0  r1  )r3  r4  r5  r6  r`   r   )rO  r   r7  r[   r*   r*   r+   sqlite_adbc_irisD  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;  ro   r   rY   )rO  r   r7  r[   r?  r=  r*   r*   r+   sqlite_adbc_typesV  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_buildinl  s   "rW  c                 c  r  r  )r`   r   )rW  r   r*   r*   r+   sqlite_buildin_iriss  r  rX  c                 c  s$    dd |D }t | | | V  d S )Nc                 S  r9  r*   r:  r<  r*   r*   r+   rO   |  r>  z(sqlite_buildin_types.<locals>.<listcomp>)r   )rW  r   r*   r*   r+   sqlite_buildin_typesz  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   rt   	if_existsr   )getfixturevalueto_sql)r[   r   requestr*   r*   r+   test_dataframe_to_sql  s   
ra  c                 C  sR   | dkrt  s|jtjjdd || } |jd d }|jd| ddd d S )	Nr/  z=postgres ADBC driver < 1.2 cannot insert index with null typereasonr   r[  r   Fr\  )	r   node
add_markerr
  markxfailr^  r   r_  )r[   r   r`  empty_dfr*   r*   r+   test_dataframe_to_sql_empty  s   
ri  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 )Nr*  rF   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   rq   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 )Nr*  r   rk  rF   rl  rj  rr  rs  Fr\  )r
  r  r   rt  ru  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 driversTrc  strictneed_transaction
test_framer~  )rd  re  r
  rf  rg  r^  r!   r_  	has_tabler   len)r[   r~  r   r`  	pandasSQLr*   r*   r+   test_to_sql  s   
r  zmode, num_row_coef)rs  rF   )r   rG   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rp  )r^  r!   r_  r  r
  raises
ValueError)r[   r   r`  r  rz  r*   r*   r+   test_to_sql_exist_fail9  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   r5   )r^  r"   r   rt  read_sqlr   r   r[   r`  
iris_framer*   r*   r+   test_read_iris_queryE  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 driversTr  r     	chunksizer  r  r5   )rd  re  r
  rf  rg  r^  r   r"   r   rt  r  r   r   r  r*   r*   r+   test_read_iris_query_chunksizeQ  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  Tr  r   )r0   r2   r   selectr3   )autoload_withr   r   r   lengthrs   )rd  re  r
  rf  rg  r^  r:   r0   r2   r   r  r|   r   r"   r   r   )
r[   r`  r0   r2   r   r  r=   autoload_conr3   r  r*   r*   r+   .test_read_iris_query_expression_with_parameterd  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  Tr  r'   zNo part of z( found in sql_strings['read_parameters']r   r   r  )
rd  re  r
  rf  rg  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 )Nr3   )r^  r#   r   rt  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 ADBCrb  r3   r  r  )rd  re  r
  rf  rg  r^  r   r#   r   rt  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 )NrF   c                   rd   r*   re   rL   r   r*   r+   rO     rj   z8test_to_sql_callable.<locals>.sample.<locals>.<listcomp>)r   rR   r   rc   )pd_tabler[   r   	data_iterr   checkr  r+   sample  s   
z$test_to_sql_callable.<locals>.sampleTr  r  r  rF   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_tablerb  r   r&   )applymarkerr
  rf  rg  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   rz   r   rF   rG   rH   皙?r   333333?rm  br  Fr   rt   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   rp   rR   r   r"   r   assert_frame_equalr  )	r[   r`  r{   r   r   procengine_connres1res2r*   r*   r+   test_read_procedure  s,   




r  expected_countrG   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*   )rM   kr*   r*   r+   rO     r>  zVtest_copy_from_callable_insertion_method.<locals>.psql_insert_copy.<locals>.<listcomp>.zCOPY z (z) FROM STDIN WITH CSV)r   file)
connectionrQ   r   rT   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_copyrF   rG   r  r   rm  ncol1col2col3r  F)r   rt   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   rb   r   rz   c                   s<    fdd|D }| j |jdgd}||}|jS )Nc                   rd   r*   re   rL   r  r*   r+   rO   3  rj   z\test_insertion_method_on_conflict_do_nothing.<locals>.insert_on_conflict.<locals>.<listcomp>rm  )index_elements)r   ro   on_conflict_do_nothingrR   rowcountr   r[   r   r  r   r\   r  rb   r  r+   insert_on_conflict2  s   
zHtest_insertion_method_on_conflict_do_nothing.<locals>.insert_on_conflictzx
    CREATE TABLE test_insert_conflict (
        a  integer PRIMARY KEY,
        b  numeric,
        c  text
    );
    rF    @rm  abcr   test_insert_conflictr   Fr\  rF   g	@r  r   rt   r   r]  r~  Tr  )r^  sqlalchemy.dialects.postgresqlrc   r   r   sqlalchemy.sqlr{   r|   r   rp   rR   r   listr_  r   r#   r   r  r   r   )r[   r`  r   r{   r  
create_sqlrt   r  	df_insertinsertedr  r  r*   rb   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 postgresqlrb  r  )rG   g@r  r  r   test_public_schemar   Fpublic)r   rt   r]  r   r   r   )r  r
  rf  rg  r^  r   r  r_  r   r#   r   r  )r[   r`  	test_datadf_outr*   r*   r+   test_to_sql_on_public_schemac  s"   
r  c              	     s  | | } ddlm  ddlm} ddlm}  fdd}|d}t| |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   rb   r   rz   c                   sH    fdd|D }| j |}|j|jj|jjd}||}|jS )Nc                   rd   r*   re   rL   r  r*   r+   rO     rj   zXtest_insertion_method_on_conflict_update.<locals>.insert_on_conflict.<locals>.<listcomp>)r  r   )r   ro   on_duplicate_key_updater  r  r   rR   r  r  rb   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  rG   Tr  )r^  sqlalchemy.dialects.mysqlrc   r   r   r  r{   r|   r   rp   rR   r   r  r_  r   r#   r   r  r   r   )r[   r`  r   r{   r  r  rt   r   r  r  r  r  r*   rb   r+   (test_insertion_method_on_conflict_update{  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   rz   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;
    rF   r   group_idr   )r^  r   r   r  r{   uuiduuid4hexr|   r   rp   rR   r#   r   r   r  )
r[   r`  r   r{   r   r   sql_stmtrt   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_viewrF   r   r  )rR   rt  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   rx  FutureWarningr   rR   )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   rx  r  r   rR   )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 driversTr  r'   r  r  rd  re  r
  rf  rg  r^  r  r!   run_transaction
read_queryr   r[   r`  r,   r  r  rs   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  Tr  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 testrb  r)   r  )
r  r
  rf  rg  r^  r  r!   r  r  r   )r[   r`  r,   r  r  r  r  r*   r*   r+   ,test_read_sql_iris_no_parameter_with_percent3  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_viewF  s   
r  c                 C  s\   d| v r|j tjjdd || } d}tj|| dd}t|| }t	t
|| d S )Nr   r  rb  z1SELECT * FROM iris_view WHERE "SepalLength" < 0.0r   r  )rd  re  r
  rf  rg  r^  r   r"   r   r  r   )r[   r`  r  
with_batchwithout_batchr*   r*   r+   *test_api_read_sql_with_chunksize_no_resultM  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_sqlZ  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  rz  r*   r*   r+   test_api_to_sql_faile  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  rs  r^  r   r  r   r   r_  r  r   r[   r`  r   r  num_entriesnum_rowsr*   r*   r+   test_api_to_sql_replacet  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  rI   r   rG   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   rj  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   
r2  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  rt   "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  rb  r3  Tr  FrG   )rt   r   r  r5  r4  )rd  re  r
  rf  rg  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!   rR   r   rX   r  )r[   r`  
pandas_sqliris_resultsrN   r*   r*   r+   test_api_execute_sql  s   


rB  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  rF   rH   r   rI   %Y-%m-%d %H:%M:%Sr   i        i  r0  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   





rK  error)rw   raisecoercezread_sql, text, moderC  )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 argumentsrb  r   datetime64[ns]ry   )rt   rE  r'  r   r   r@  int32)r   r   r   zdatetime64[us])r^  r  r
  rf  rg  r   rQ  rK   r   r   r  )
r[   r`  r  r{   r  rL  r   r  r  r  r*   r*   r+   !test_api_custom_dateparsing_error!  s4   
rR  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 )NrC  r   r   )	index_colrE  )
r^  r   r"   r   r   r<   r   r   rI  r   r[   r`  r   r*   r*   r+   test_api_date_and_indexX  s   
rU  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 timedeltarb  r   F)rq  r   rt   rG   zSELECT * FROM test_timedeltar/  r   i@B )monthsdaysmicrosecondsnanosecondsi- r   )r^  r   r  r   r   r   r   r/  rd  re  r
  rf  rg  r   rv  rw  r   rx  r_  r"   rt  
DateOffsetr   r   )	r[   r`  r  r  r   ry  r  r  r  r*   r*   r+   test_api_timedeltag  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 )
Nrm  y      ?      ?y               @r   zdatatypes not supportedzComplex datatypes not supportedr  test_complexr4  )r^  r   r
  r  r  r_  )r[   r`  r  r   rz  r*   r*   r+   test_api_complex_raises  s   
"r`  zindex_name,index_label,expected))NNr   )Nother_labelra  )
index_nameNrb  )rb  ra  ra  )r   N0)Nr   rc  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 ADBCrb  test_index_labelTr  r  rI   SELECT * FROM test_index_label)index_labelr   )rd  re  r
  rf  rg  r^  r   r  r   r   r   ranger   r   r_  r"   r   )	r[   r`  rb  rg  r  r  
temp_framer  r   r*   r*   r+   test_api_to_sql_index_label  s   
rj  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 keyFr  r   rd  rb  re  Tr  rI   r  )A0A1)B0B1r*  rf  r   r7  rF   level_1rs  r   r   )r]  rg  rG   r  r   r   zALength of 'index_label' should match number of levels, which is 2r  )r  r
  rf  rg  rd  re  r^  r   r  r   r   r   rh  r   from_productr_  r"   r   rJ  r   namesr  r  )	r[   r`  r  r  expected_row_countri  r  r   rz  r*   r*   r+   &test_api_to_sql_index_label_multiindex  sz   

$rs  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  rF   r  line1rG         ?line2r   r   r   r   r   r   r   rX  z'SELECT * FROM test_multiindex_roundtriprS  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   rX  rG   r'  z(SELECT "A", "B" FROM test_dtype_argumentz$SELECT A, B FROM test_dtype_argumentrt   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 )
NrF   rG   rH   rI   r   r   test_frame_integer_col_namesrs  r  )r^  r   r   r_  rT  r*   r*   r+   test_api_integer_col_namesF  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 driversTr  r[  r4  CREATErd  re  r
  rf  rg  r^  r   
get_schemar[   r`  r   r  r*   r*   r+   test_api_get_schemaM  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  Tr  r[  pypi)rt   r   zCREATE TABLE pypi.r  r  r*   r*   r+   test_api_get_schema_with_schema[  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  Tr  皙?r  r  皙@r  rW  INTEGERr   )r   r[  r  r  r  )rd  re  r
  rf  rg  r^  r   r:   r   r   r  )r[   r`  r  float_framer<   r   r  r*   r*   r+   test_api_get_schema_dtypesj  s"   
r  c                 C  s   d| v r|j tjjddd | }|| } tddgddgd	}tj|d
| dd}d|v r2d}nd}||v s:J tj|d
| ddgd}d|v rLd}nd}||v sTJ d S )Nr   r  Tr  r  r  r  r  )Col1Col2r[  r  )rt   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"))	rd  re  r
  rf  rg  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  rb  test_chunksizeTr  rG   )   r   abcder   Fr  zselect * from test_chunksizer   )r   r   r   r   rG   r   r  ignore_indexrF   rW  ro  r  )rd  re  r
  rf  rg  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+  rw   rx   z0.9.0z:categorical dtype not implemented for ADBC postgres driverTr  test_categoricalr  r  )John P. Doez	Jane Dover  )	person_idperson_namer  categoryFr  zSELECT * FROM test_categorical)r   r   r;   rd  re  r
  rf  rg  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  rF   rG   rH   rI      é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   rF   rG   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   r*  z16.0)rO  r/  z!pyarrow->pandas throws ValueErrorTr  
test_tabler  r  r  rF   rm  r  r   Fr  z)SELECT a, b, a +1 as a, c FROM test_table)rF   r  rG   rF   )rG   r   rH   rF   )rH   r  rI   rF   )rm  r  rm  r   r   )r
  r  r   r;   rd  re  rf  rg  r^  r   r  r   r   r   r_  rt  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 Implementedrb  r  r   r   r   )
r  r
  rf  rg  r^  r   r_  r#   r   rJ  )r[   r`  r   r  colsr  r*   r*   r+   test_read_table_columns0	  s   
r  c                 C  s   | }|dkr| tjjdd || } t|d|  tjd| dd}|jj	dgk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  rb  r  r   r|  r   r   r   r   )rS  r   )r  r
  rf  rg  r^  r   r_  r#   r   rq  r   rJ  )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  rb  r  r3   )r  r
  rf  rg  r^  r   r"   r  r   r  r#   )r[   r`  iris_frame1iris_frame2r*   r*   r+   test_read_sql_delegateW	  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   rz   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   rp   rR   r   rx  r   r#   r"   )rG  r[   r{   r   
query_listr  r*   r*   r+   test_not_reflect_all_tablesj	  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 warningrb  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  TABLE1ro  CaseSensitiverX  )r  r
  rf  rg  r^  r   rx  rw  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  )rQ  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   rF   rm  r   r<   r  r  )
r^  r   r   r   r  r   r   r   rm  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   rF   rm  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  r3   rs  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   rz   r'  z%select * from iris where "Name"=:namez#select * from iris where name=:namer   zIris-versicolorr  r8   )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  r8   )r^  r:   r  r  r>   wherer   r8   r   r  r  )r[   r`  r  r  r3   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  rb  r  rH   rI   r   )r   z%_variationtest_column_percentageFr  )r  r
  rf  rg  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*  rI   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[   rz  r*   r*   r+   test_con_string_import_error6
  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__A
  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__D
  s   zttest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnection.__getattr__c                 S  s   | j   d S r  )r[   rX   )r  r*   r*   r+   rX   G
  s   zntest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnection.closeN)r  r  )__name__
__module____qualname__r  r   rX   r*   r*   r*   r+   MockSqliteConnection@
  s    
r  rS  zSELECT 1)rT  r   r   rx  rw  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  r3   )r   r"   r  r   r  r
  r  DatabaseError)rX  r[   r  r  rz  r*   r*   r+   test_sqlite_read_sql_delegateO
  s   "r  c                 C  s   t | d}d|v sJ d S )Nr[  r  )r   r  )r   r  r*   r*   r+   test_get_schema2Z
  s   r  c                 C  s|   | }t dtddgddi}t|}tjd||d}| }|dD ]}| d	 d
dkr;| d dks;J q$d S )Nr   r  r  Tr  r  r  
r   r   rF   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  ri  rI   )r
  skipr^  r:   r   r   r   r   r_  r  r   r[   r`  r   ri  r  inspr*   r*   r+   test_create_tabler
  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  ri  rI   )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  r3  rI   r5  r   r6  r7  r   Tr8  )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  rR   r   rX   r  )r[   r`  r  rA  rN   r*   r*   r+   test_execute_sql
  s   




r"  c                 C  s$   | | } tjd| d}t| d S )Nr3   r4  )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 )Nr3   r4   )rt   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_existr4  )r^  r
  r  r  r   r#   )r[   r`  rz  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 properlyrb  r   )r
  r  r  rf  rg  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  rF   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 properlyrb  r   )r
  r  r  rf  rg  r^  r   r#   r   r   r<   r   r   rI  r  r*   r*   r+   test_default_date_load
  s   
r.  rE  r   c                 C  s6   | | } t| }td| |d}|j}t|| d S )Nselect * from datetzrD  )r^  r   r"   r   r   r   )r[   r`  rE  r  r   r  r*   r*   r+   !test_datetime_with_timezone_query  s
   
r0  c                 C  sB   | | } t| }tttd| dddd}|j}t|| d S )Nr/  rF   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   
r1  c                 C  s2   | | } t| }td| }t||  d S )Nr   )r^  r   r   r#   r   r  r/  )r[   r`  r  r  r*   r*   r+   !test_datetime_with_timezone_table(  s   
r2  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:00rH   
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_roundtrip0  s    
r=  c                 C  sj   | | } tdtdddidgd}|jd| dddksJ td| }ttjgdgd	}t	|| d S )
Nr   i'  rF   r   r*  test_datetime_obbFr  r   )
r^  r   r   r_  r   r#   rt  NaTr   r  )r[   r`  r   r  r  r*   r*   r+   test_out_of_bounds_datetimeO  s   
r@  c                 C  sn   | | } tddddd }tdtdi|d}|jd| dd	dks%J tjd| dd
}tj	||dd d S )Nz
2018-01-01r   6hr6  freqnumsr*  	foo_table	info_date)r   rt   rg  r|  F)check_names)
r^  r   
_with_freqr   rh  r_  r   r#   r   r  )r[   r`  datesr  r  r*   r*   r+   "test_naive_datetimeindex_roundtripZ  s   
rJ  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   rD  rF  formatr   r0  unit)r^  r   r#   r  r   rI  r   r   r<   r   r   )r[   r`  r  r   expected_typer*   r*   r+   test_date_parsingg  s*   

rN  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 )Nr3  rH   r6  r  r  test_datetimerX  r   rF   )axisSELECT * FROM test_datetimer$   r8  r   )r^  r   r   r   r.  r_  r   r#   rq   r   r  r"   r|   r<  r   r   r[   r`  r  r   r  r*   r*   r+   rP    s    
rP  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 )Nr3  rH   rO  r  r  rF   r   rP  Fr  rR  r$   r8  r   rN  rx   )r^  r   r   r   r.  r  r<  r_  r   r#   r   r  r"   r|   r   r   rS  r*   r*   r+   test_datetime_NaT  s   
rU  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  rF   rG   rm  r   	test_dateFr  )r^  r   r   r_  r#   r   r   r   )r[   r`  r   r  r  r  r*   r*   r+   test_datetime_date  s   
"
rX  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   rF      rm  r   	test_timeFr  rG   
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_  ra  r*   r*   r+   rc    rd  )
r^  r   r   r_  r#   r   r  r   r"   map)r[   r`  rW  r  r   r  rG  refr*   r*   r+   test_datetime_time  s$   
"
rh  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  rj  g        )s1r1  test_read_writeFr  rF   T)check_dtypecheck_exact)r^  r   r   rQ  float32r   r_  r   r#   r   r  )r[   r`  ri  r1  r   r  r*   r*   r+   test_mixed_dtype_insert  s   
rn  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  rH   SELECT * FROM test_nan)
r^  r   r   r  r_  r   r#   r   r  r"   r-  r*   r*   r+   test_nan_numeric  s   
rq  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  ro  Fr  rH   r   r  rp  )r^  r   r   r  r_  r   r#   r   r  r   r"   r-  r*   r*   r+   test_nan_fullcolumn  s   
rr  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  rm  r  r  ro  Fr  rH   rG   r   rp  )r^  r   r   r  r_  r<  r   r#   r   r  r"   r-  r*   r*   r+   test_nan_string  s   

rt  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 indexTr  ru  rw  rz  r   r{  test_to_sql_saves_indexrG   >   rE  rW  zASELECT * FROM sqlite_master WHERE type = 'index' AND tbl_name = ''zPRAGMA index_info()r   r   c                 S  r   )column_namesr*   )rM   r  r*   r*   r+   rO   G  r   z*test_to_sql_save_index.<locals>.<listcomp>)rd  re  r
  rf  rg  r^  r   r  r!   r  r_  r   r"   r   r   rJ  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   rz   )r^  r:   r{   r!   r  rR   )r[   r`  r  r\   r{   r  transr*   r*   r+   test_transactionsL  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   rz   c                   @  s   e Zd ZdS )z1test_transaction_rollback.<locals>.DummyExceptionN)r  r  r  r*   r*   r*   r+   DummyExceptionk  s    r  z/INSERT INTO test_trans (A,B) VALUES (1, 'blah')rL  zSELECT * FROM test_transrF   )r^  r!   r  r|   r   rR   r:   r{   	Exceptionr   r  r  )r[   r`  r  r  r  r\   r{   r  ins_sqlr  r  r*   r*   r+   test_transaction_rollback\  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 fixturerb  r   rz   r   test_get_schema_create_tabler4  Fr}  )r  r
  rf  rg  r^  r:   r{   r   r   r   r  r   r|   r   rp   rR   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   r1   r0   r   r   g?Tg?Nr   
dtype_testrX  rG   dtype_test2r   rt   r<   rm   z&The type of B is not a SQLAlchemy typer  rL  dtype_test3
   single_dtype_test)r
  r  r^  r:   r   r1   sqlalchemy.schemar0   r   r_  reflecttablesr   r   r|   r  r  r   r  )r[   r`  r   r1   r0   r  r   r   metasqltyperz  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   r/   r   r  T  r   rF   r  rj  r  BoolDateIntr/   notna_dtype_testrX  rG   rm   r%   r  r  r  r/   )r
  r  r^  r:   r   r   r/   r   r  r0   r   r   r   r_  r   r#   r  r  r   r|   r   )r[   r`  r  r   r   r/   r   r0   r  r   r  rb  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   )
BigIntegerr/   r   r  gYB?rm  rj  float64r   rQ  r   )f32f64
f64_as_f32i32r+  test_dtypesFrs  r     )	precision)r   rt   r   r]  r<   rF   r     rm   r  r  r+  )r
  r  r^  r:   r  r/   r   r  r0   r   r   r_  r   r#   r   roundr   r  r  r   r   r   r|   )r[   r`  r  r/   r   r0   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_datar4  )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   rt   r]  )r_  )r  r   r*   r*   r+   test_append3  s   z3test_connectable_issue_example.<locals>.test_appendc                   s   | } | | d S r  r*   )r[   foo_data)r  r  r*   r+   test_connectable6  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   rp   )connectabler[   )r   r  r*   r+   main<  s   



"z,test_connectable_issue_example.<locals>.mainr  r  rX  rH   )r^  r   r   r   r_  )r[   r`  r  r*   )r   r  r  r  r+   test_connectable_issue_example'  s   
	r  inputrW  bar)rW  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 36465rb  zinf cannot be used with MySQLr  foobarFr  rF   )r   r^  r
  r  r   r;   r   rf  rg  r  r  r  r_  r   r#   r   assert_equal)	r[   r`  r  r   r  r  rf  rz  r  r*   r*   r+   test_to_sql_with_negative_npinfK  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_keyrZ  F)nullableN)r  r  r  __tablename____table_args__idr  r*   r-   r   r  r*   r+   	Temporary  s
    
r  )r  )r   rt   )r
  r  r^  r:   r-   r   r  r  sqlalchemy.ormr  r  r   rp   r  	__table__rr   addflushr   r"   r  r   r  )r[   r`  r  r  r  r  r  Baser  sessionr   r*   r  r+   test_temporary_tablek  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 enginerb  z*engine must be one of 'auto', 'sqlalchemy'r  r   
bad_enginer   )	r  r
  rf  rg  r^  r!   r  r  r_  )r[   r`  r   rz  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  rI   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   rI   	r^  rt  option_contextr!   r  r_  r  r  r   r#  r*   r*   r+   test_options_sqlalchemy     



"r  c              
   C  r  )Nr  r  r   rI   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   rt  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 s8w   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[  Frs  r   rt   r   r]  mode.string_storageSelect * from dtype_backendr   z(adbc does not support chunksize argumentrb  rH   )rt   r  r  )r^  r_  rt  r  r  r   r  r  r
  rf  rg  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 sGw   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 skippedrb  r[  Frs  r  r  r  rH   )r  r  )r  r
  rf  rg  r^  r_  rt  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[  Frs  r  zPdtype_backend numpy is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.r  numpyr  )r^  r_  r
  r  r  r  rt  )r[   r`  r  r  r   r   rz  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 )NrF   rH   r  rj  r  rx        @Float64rx  r  r  )TFNTFTr  rm  r  Nrm  r  r   defgh)r   r   r   r  r*   r*   r*   r+   r  N  s   r  c                  C  s   ddd} | S )Nr  r   c                   s,  |dkrt dt }nt| }ttdtj	dgddtg dddtdtj	dgd	dtg d
d	dtddtj
gddtg dddtg d|dtg d|dd|dkrvt dddlm  t fddjD d|v s~d|v r|dkrdddS dddS )Nr*  rF   rH   r  rj  r  rx  r  r  r  TFbooleanr  r  r  r  r   )ArrowExtensionArrayc                   s$   i | ]}| j | d dqS )T)from_pandas)ru  )rM   r  r  r   r  r*   r+   
<dictcomp>z  s    z8dtype_backend_expected.<locals>.func.<locals>.<dictcomp>r%   r$   numpy_nullable)r  r  zint64[pyarrow])r
  r  rt  
ArrowDtypern  StringDtyper   r   r   r  NApandas.arraysr  r   r   )r  r  r  string_dtyper*   r  r+   r  `  s:   


z$dtype_backend_expected.<locals>.funcr  r   r*   )r  r*   r*   r+   r  ^  s   
(r  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  rb  r   r  r  rm  r  r   r[  Frs  r  zSELECT * FROM testrF   )r<   r  )rd  re  r
  rf  rg  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  Frs  r  r  rm  )r<   r  rj  )r   r   r   r  r   r  )
r^  r   r_  r  rt  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.rF   rG   rH   rz  exampler  rs  r  )r   r_  r   rx  r  )rF  r[   rz  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 )	Nrm  rF   rG   r   rj  test_bigintwarningFr  )r   r_  r   rx  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 )NrF   rG   rH   rI   r  r  zEmpty table name specifiedr  ro  rs  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   r1   )r  sessionmakerc                      s(   e Zd ZdZ ddZ dZdS )z,test_row_object_is_named_tuple.<locals>.Testr  Tr  2   N)r  r  r  r  r  string_columnr*   r  r*   r+   Test  s    r  rm   rF   helloworld)r  r  r  Frs  r  rG   r  r  )r:   r-   r   r1   r  r  r  rp   r=   
create_allr   r_  rY   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   | }d}t dddgi}|j||ddd tdd	 t||}W d    n1 s+w   Y  tjtjd
}t dddgi|tdg|dd}t	
|| d S )Nr[  rm  xyFrs  )rt   r   r]  zfuture.infer_stringT)na_valuerj  )r<   r   )r   r_  rt  r  r#   r  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  rG     rP  rj  r[  rs  F)r]  r   select * from testr   r   z2020-12-31 12:00:00.000000)r   r   r_  rt  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_  rt  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 )NrF   rG   r  r   rm  r  r  z$DROP SCHEMA IF EXISTS other CASCADE;zCREATE SCHEMA other;test_schema_publicFr  test_schema_public_explicitr  )r   rt   r   r   test_schema_otherotherr  z!Table test_schema_other not foundr  )r   rt   r   r   rs  )r   rt   r   r   r]  r   Tr  )r   r   rp   r   r_  r   r#   r   r  r
  r  r  r   )
r%  r[   r   rt   r  r  r  res4rz  r  r*   r*   r+   test_psycopg2_schema_support0  sr   


	



	r1  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   rz   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;rF   2021r   r   rG   r  
created_dtr   Tr  person)r  r{   r   rp   rR   rt  r  r   r   r   r  r   r   r   )	r%  r[   r{   r  rt   r  r  r  r  r*   r*   r+   test_self_join_date_columns{  s*   

"r5  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_framerI   )r   r   r   r  r_  r  r   )rF  r[   ri  r  r*   r*   r+   test_create_and_drop_table  s   

"r7  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 )
NrV  rF   rG   rm  r   rW  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
   "
r8  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 )NrY  r   rF   rZ  r3  rG   r4  r5  c                 S  s   |   S r  )timetz)r9  r*   r*   r+   rc    s    z+test_sqlite_datetime_time.<locals>.<lambda>rm  r   r[  Fr  zSELECT * FROM test_timec                 S  r]  r^  r_  ra  r*   r*   r+   rc    rd  )
r   r   r   to_pydatetimerf  r   r_  r"   r   r  )r9  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(rw  zTable z	, column z
 not found)rR   r  )
r[   r   columnrecscidr   ctypenot_nulldefaultpkr*   r*   r+   get_sqlite_column_type  s   rF  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  rX  rG   r  STRINGr  r  z!B \(<class 'bool'>\) not a stringr  rL  r  )r   r_  rF  r
  r  r  bool)rW  r[   r  r   r   rz  r*   r*   r+   test_sqlite_test_dtype  s   rI  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   rF   r  rj  r  r  r  rX  rG   r  r  r  r  r  r/   REAL)r   r   r   r_  rF  )rW  r[   r  r   r  r*   r*   r+   test_sqlite_notna_dtype  s   

rK  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 )NrF   rG   rH   rI   rm  r  r   z$Empty table or column name specifiedr  ro  rX  )
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   rz  ndx
weird_namer  c_tblr*   r*   r+   test_sqlite_illegal_names  s    rT  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+   rc  #  s    zformat_query.<locals>.<lambda>z{:.10f}z'{!s}')r   rK  r   r   str_bytesrK   rQ  r   r  rH  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!   rR   r   r  )r  rt   r@  r  r*   r*   r+   tquery2  s   r]  c                 C  s   t tjddttdtddddd}tj	|d	| d
ddk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sdJ tj
d| dd}| }||_d|j_t|| d S )NrG   r  rI   ABCD
2000-01-01r  r   rB  r{  r  Fr  zselect * from test_tablerm  txtrj  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   )rW  r   r  r  frame2new_idxr*   r*   r+   test_xsqlite_basic9  s(   
rf  c           	      C  s   t tjddttdtddddd}tj|j	d	< t
|d
}|  }|| d}| D ]\}}t|g|R  }t|| d q2|   t
jd| d}|j|_tj||dd d S )NrG   r^  r_  r`  r  r   rB  r{  r&  r[  z(INSERT INTO test VALUES (%s, %s, %s, %s)r4  r%  gMbP?)rtol)r   r   r  r  r  r   r  r   r  r   r   r  rQ   rR   iterrowsr\  r]  rY   r  r   r   r  )	rW  r   r  r]   insrb  rN   fmt_sqlr  r*   r*   r+   test_xsqlite_write_row_by_rowT  s"   

rk  c                 C  s   t tjddttdtddddd}t	|d	}| 
 }|| d
}|jd }t| }||t| W d    n1 sEw   Y  |   td| }|jd d |_t||d d  d S )NrG   r^  r_  r`  r  r   rB  r{  r[  z$INSERT INTO test VALUES (?, ?, ?, ?)r   r%  rF   )r   r   r  r  r  r   r  r   r   r  rQ   rR   r   r!   r;  rY   r  r   r   r  )rW  r   r  r]   ri  rN   r@  r  r*   r*   r+   test_xsqlite_executek  s"   


rl  c                 C  s   t tjddt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 sSJ |  }|| d S )NrG   r^  r_  r`  r  r   rB  r{  r[   r   r   rF   DATETIMEr  zPRIMARY KEY ("A", "B"))r   r   r  r  r  r   r  r   r   r  
splitlinesr  r  rQ   rR   )rW  r   r  lineslinetokensr]   r*   r*   r+   test_xsqlite_schema  s"   

rs  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))rQ   rR   r   r!   r
  r  r  )rW  r  r]   r@  r*   r*   r+   test_xsqlite_execute_fail  s   	


"rv  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 )Nrt  rS  ru  z$Cannot operate on a closed database.r  r%  r4  )rT  r   r}   r   rQ   rR   r   r!   r
  r  r5  r]  )r  r[   r]   r@  rz  r*   r*   r+   &test_xsqlite_execute_closed_connection  s   	
"rw  c                 C  s0   t dtdi}tj|| ddddksJ d S )NFromr   testkeywordsFrt   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 )NrF   rG   c0r   mono_dfFrz  c                 s  s    | ]}|d  V  qdS )r   Nr*   )rM   my_c0r*   r*   r+   	<genexpr>  s    z4test_xsqlite_onecolumn_of_integer.<locals>.<genexpr>zselect * from mono_dfrH   )r   r   r_  sumrR   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 )NrF   rG   r   r   r  r  )r   r   Etable_if_existszSELECT * FROM z*'notvalidvalue' is not valid for if_existsr  notvalidvalue)r   rt   r   r]  r  z&Table 'table_if_exists' already existsrs  F)r   rt   r   r]  r   r4  rT  rs  rH   )rH   r   rI   r   r   r  r   )rT  rs  r  r  r  )r   r
  r  r  r   r_  r   r]  )rW  df_if_exists_1df_if_exists_2r   
sql_selectrz  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   rT   r   r   r   r   r   r   pathlibr
   r}   typingr   r  r  r   r
  pandas._configr   pandas._libsr   pandas.compatr   r   pandas.compat._optionalr   pandas.util._test_decoratorsutil_test_decoratorstdpandasrt  r   r   r   r   r   r   r   r   r   r   pandas._testing_testingr   pandas.util.versionr   	pandas.ior   pandas.io.sqlr   r   r   r    r!   r"   r#   r:   rf  filterwarnings
single_cpu
pytestmarkfixturer,   r>   r`   ra   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%  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  ri  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+  r2  r=  r>  rB  rK  r  rR  rU  r^  r`  rj  rs  r  rQ  rK   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.  r0  r1  r2  r=  r@  rJ  rN  rP  rU  rX  rh  rn  rq  rr  rt  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+  r1  r5  r7  r8  r>  rF  rI  rK  rT  r\  r]  rf  rk  rl  rs  rv  rw  r|  r  r  r*   r*   r*   r+   <module>   s   0$

"-




#



















	















!
	





	



$%
9

4
#









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

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