o
    թZh3                    @  s  d dl mZ d dlZd dlmZ d dlZd dlmZmZmZmZ d dl	m
Z
 d dlmZ d dlZd dlmZ d dlZd dlZd dlZd dlmZ d d	lmZmZ d d
lmZ d dlm  mZ d dlZ d dlm!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* d dl+m,Z- d dl.m/Z/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< erd dl=Z=ej>?dZ@ejAdd ZBdd ZCdddZDdddZEdddZFdd ZGdd!d"ZHdd%d&ZIdd'd(ZJdd)d*ZKd+d, ZLdd/d0ZMdd2d3ZNejAd4d5 ZOejAd6d# ZPejAd7d8 ZQejAd9d: ZRejAd;d< ZSd=d> ZTd?d@ ZUddCdDZVddFdGZWejAdHdI ZXejAdJdK ZYejAdLdM ZZejAdNdO Z[ejAdPdQ Z\ejAdRdS Z]ejAdTdU Z^ejAdVdW Z_ejAdXdY Z`ejAdZd[ ZaejAd\d] ZbejAd^d_ ZcejAd`da ZdejAdbdc ZeejAddde ZfejAdfdg ZgejAdhdi ZhejAdjdk ZiejAdldm ZjejAdndo ZkejAdpdq ZlejAdrds ZmejAdtdu ZnejAdvdw ZoejAdxdy ZpejAdzd{ ZqejAd|d} ZrejAd~d ZsejAdd ZtejAdd ZuejvdIej>jwdejvdOej>jwdgZxejvdKej>jwdejvdQej>jwdgZyejvdMej>jwdejvdSej>jwdgZzejvdUej>jwdejvd[ej>jwdgZ{ejvdWej>jwdejvdcej>jwdgZ|ejvdYej>jwdejvdeej>jwdgZ}g dZ~g dZg dZexe{ e~ Zeye| e Zeze} e Zdyejvd]ej>jwdgZejvd_ej>jwdejvd{ej>jwdgZejvdaej>jwdejvd}ej>jwdgZedg e Zedg e Zedg e Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAeej>dddgdd Zej>dAeej>dddgdd Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAexdd Zej>dAe{ej>dddgdd Zej>dAe{dd Zej>dAexdd Zej>dAe{dd Zdd Zdd Zdd Zdd Zej>dAedd Zej>dAeddÄ Zej>dAeddń Zej>dAeddǄ Zej>dAeddɄ Zej>dAedd˄ Zej>dAedd̈́ Zej>dAeddτ Zej>dAeddф Zej>dAeddӄ Zej>dAeddՄ Zej>dAeddׄ Zej>dAeddل Zej>dAeddۄ Zej>dAedd݄ Zej>dAeej>dg dߢej>de4jddfe4jddfe4j;ddfe4j<ddfgdd Zej>dAedd Zej>dAedd Zej>dAedd Zej>dAeej>dg ddd Zej>dAedd Zej>dAedd Zej>dAeej>ddeeeedgdd Zej>dAedd Zej>dAedd Zej>dAe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 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-d.d/gd0d1 Zej>dAed2d3 ZeҐd4ej>dAed5d6 Zej>dAed7d8 Zej>dAed9d: Zej>dAed;d< Z֐d=d> Zedd?d@ ZeddAdB ZِdCdD ZڐdEdF Zې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{ej>d]dd^ggd_d` Zej>dAe{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ej>ddejgidej giej gdgdgdd Zej>dAedd Z ej>dAedd Zej>dAedd Zej>dAedd Zej>dAedd Zdd Zdd Zej>dAeej>dddgdd Zej>dAeej>dddgdd Zej>dAeej>dg ddd Z	ejAdddZ
ejAdd Zej>dAedd Zej>dAeej>dejdgej>dddgdd Zdd Zdd Zdd Zdd Zdd Zdd ZejAdÐdĄ ZdŐdƄ Zej>jwdǐdȄ Zej>jwdɐdʄ Zdːd̄ Zd͐d΄ Zej>dϐdАdgdҐdӄ ZdԐdՄ Zd֐dׄ Zdؐdل Zdڐdۄ Zdܐd݄ Z ddސd߄Z!dd Z"dd Z#dd Z$dd Z%dd Z&dd Z'dd Z(dd Z)dd Z*dS (      )annotationsN)closing)datedatetimetime	timedelta)StringIOPath)TYPE_CHECKING)lib)pa_version_under13p0pa_version_under14p1)import_optional_dependency)
	DataFrameIndex
MultiIndexSeries	Timestampconcat
date_rangeisnato_datetimeto_timedelta)ArrowStringArrayStringArray)Version)sql)SQLAlchemyEngineSQLDatabaseSQLiteDatabase
get_enginepandasSQL_builderread_sql_queryread_sql_tablez=ignore:Passing a BlockManager to DataFrame:DeprecationWarningc                   C  s$   dddddddddd	d
ddS )Nz1SELECT * FROM iris WHERE Name=? AND SepalLength=?z7SELECT * FROM iris WHERE `Name`=%s AND `SepalLength`=%sz7SELECT * FROM iris WHERE "Name"=%s AND "SepalLength"=%s)sqlitemysql
postgresqlz]
                SELECT * FROM iris WHERE Name=:name AND SepalLength=:length
                zw
                SELECT * FROM iris WHERE
                `Name`=%(name)s AND `SepalLength`=%(length)s
                zw
                SELECT * FROM iris WHERE
                "Name"=%(name)s AND "SepalLength"=%(length)s
                z&SELECT * FROM iris WHERE Name LIKE '%'z(SELECT * FROM iris WHERE `Name` LIKE '%'z(SELECT * FROM iris WHERE "Name" LIKE '%')read_parametersread_named_parametersread_no_parameters_with_percent r+   r+   r+   O/var/www/html/lang_env/lib/python3.10/site-packages/pandas/tests/io/test_sql.pysql_stringsE   s   r-   c            
      C  s   dd l } ddl m}m}m}m}m}m} t| jtdkr|n|}| }|d||d||d||d||d||d	|d
}	|	S )Nr   )ColumnDoubleFloatMetaDataStringTablez2.0.0irisSepalLength
SepalWidthZPetalLengthZ
PetalWidthName   )	
sqlalchemyr.   r/   r0   r1   r2   r3   r   __version__)
r9   r.   r/   r0   r1   r2   r3   dtypemetadatar4   r+   r+   r,   iris_table_metadatab   s    		r=   	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csvfilerT   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?   r@   z+INSERT INTO iris VALUES($1, $2, $3, $4, $5)c                 S  rC   rD   rI   rK   r+   r+   r,   rN      rO   z3create_and_load_iris_postgresql.<locals>.<listcomp>)rP   rQ   rR   rS   rT   rU   rV   rX   rY   r+   r+   r,   create_and_load_iris_postgresql   s   


r`   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?   r@   c                      g | ]	}t t |qS r+   dictziprK   headerr+   r,   rN          z(create_and_load_iris.<locals>.<listcomp>TZ
checkfirstbind)r9   rb   r=   rR   rS   rT   rU   valuesbegindropcreaterQ   )	rZ   r>   rb   r4   r]   rT   paramsr[   conr+   rg   r,   create_and_load_iris   s   

"rs   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
ConnectionrP   rQ   r   rX   r9   ry   rn   )rZ   r[   r\   adbcry   rr   r+   r+   r,   create_and_load_iris_view   s   

"r~   dialectstrc                 C  s   ddl m}m}m}m}m}m}m}m} | dkr|n|}	| dkr"|n|}
| }|d||d||d|	|d||d||d	||d
||d|
|d||d|
}|S )Nr   )TEXTBooleanr.   DateTimer0   Integerr1   r3   r%   typesTextColDateCol
IntDateColIntDateOnlyColFloatColIntColBoolColIntColWithNullBoolColWithNull)	r9   r   r   r.   r   r0   r   r1   r3   )r   r   r   r.   r   r0   r   r1   r3   Z	date_typeZ	bool_typer<   r   r+   r+   r,   types_table_metadata   s$   (r   
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(?, ?, ?, ?, ?, ?, ?, ?, ?)
                )rz   r{   r|   rP   rQ   rV   rX   )rZ   r   r[   Z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)
                )rP   rQ   rV   rX   )rZ   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   ra   EngineTrj   rk   )r9   rb   sqlalchemy.enginer   r   rm   rz   connectrn   ro   rp   rQ   )rZ   r   r   rb   r   r   r[   r+   r+   r,   create_and_load_types5  s&   


"
"r   c              	   C  sT  ddl m}m}m}m}m} ddlm} | }|d||d|dd}ddidd	ig}	|||	}
t	| |rr| 
 .} |   |j| dd
 |j| d | |
 W d    n1 s]w   Y  W d    n1 slw   Y  n&|   |j| dd
 |j| d | |
 W d    n1 sw   Y  tdddtdddg}t|ddS )Nr   )r.   r   r1   r3   rb   r   datetzDateColWithTzT)timezonez2000-01-01 00:00:00-08:00z2000-06-01 00:00:00-07:00rj   rk   z2000-01-01 08:00:00UTCtzz2000-06-01 07:00:00name)r9   r.   r   r1   r3   rb   r   r   rm   rz   r   rn   ro   rp   rQ   r   r   )rZ   r.   r   r1   r3   rb   r   r<   r   Zdatetz_datar[   Zexpected_datar+   r+   r,   create_and_load_postgres_datetzI  s:   





r   framer   c                 C  sV   | j jd j}| jd }t|tjsJ t|tg d| j	dd | j
dv s)J d S )Nr   ffffff@g      @gffffff?皙?Iris-setosa)indexr   ))      )   r   )dtypesiloctype
issubclassnpfloatingtmassert_series_equalr   columnsshape)r   ZpytyperM   r+   r+   r,   check_iris_framev  s   
r   
table_namec                 C  sd  d| }t ddd}t| tjr|  }|| d S |rGt| |jrG|  }|| | d W  d    S 1 s@w   Y  d S ddlm} ddl	m
} t| trz+|| }| } | | W  d    W |  S 1 sxw   Y  W |  d S |  w t| |r|  } | | W  d    S 1 sw   Y  d S | | S )Nz SELECT count(*) AS count_1 FROM rt   ru   rv   r   )create_enginer   )r   rz   r{   r|   rP   rQ   fetchoner9   r   r   r   r   r   exec_driver_sqlZ
scalar_onedispose)rZ   r   r[   r}   r\   r   r   enginer+   r+   r,   
count_rows  s4   



$




$r   c                 C  s   | dddd}t |S )NiodatarS   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$@rE   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   int64rJ   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+   )rL   viewr+   r+   r,   rN         z!get_all_views.<locals>.<listcomp>rt   ru   rv   Zcatalog_namecatalog_db_schemasZdb_schema_namedb_schema_tables
table_typer   r   r   inspect)rz   r{   r|   rQ   fetchallr   adbc_get_objectsread_all	to_pylistappendr9   r   Zget_view_names)
rZ   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+   )rL   r   r+   r+   r,   rN     r   z"get_all_tables.<locals>.<listcomp>rt   ru   rv   r   r   r   r   r   r   r   )rz   r{   r|   rQ   r   r   r   r   r   r   r9   r   Zget_table_names)
rZ   r   r}   r   r   r   r   r   r   r   r+   r+   r,   get_all_tables  s&   

r   rZ   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 rt   ru   rv   zDROP TABLE IF EXISTS "")rz   r{   r|   rQ   r   _get_valid_sqlite_namerX   r   rP   rn   r   
drop_table)r   rZ   r}   r\   rr   dbr+   r+   r,   r   0  s   
"
"r   r   c                 C  s   dd l }t|tjr|dt|   |  d S tddd}|rIt||jrI|	 }|d|  d W d    d S 1 sBw   Y  d S |j
jj| }|d| }| }|| W d    d S 1 snw   Y  d S )Nr   zDROP VIEW IF EXISTS rt   ru   rv   zDROP VIEW IF EXISTS "r   )r9   rz   r{   r|   rQ   r   r   rX   r   rP   r   r   Zidentifier_preparerZquote_identifierry   rn   )r   rZ   r9   r}   r\   Zquoted_viewr[   rr   r+   r+   r,   	drop_viewC  s    
"

"r   c                  c  sv    t d} t d}| jdd|jjji| jjd}|V  t|D ]}t	|| q!t
|D ]}t|| q-|  d S )Nr9   pymysqlz*mysql+pymysql://root@localhost:3306/pandasZclient_flag)Zconnect_args	poolclass)pytestimportorskipr   	constantsZCLIENTZMULTI_STATEMENTSpoolNullPoolr   r   r   r   r   )r9   r   r   r   tblr+   r+   r,   mysql_pymysql_engineZ  s   

r   c                 c      t | | t|  | V  d S Nrs   r~   )r   r   r+   r+   r,   mysql_pymysql_engine_irisk     

r  c                 c      t | |d | V  d S )Nr&   r   )r   r   r+   r+   r,   mysql_pymysql_engine_typesr     
r  c                 c  6    |   }|V  W d    d S 1 sw   Y  d S r   r   )r   rZ   r+   r+   r,   mysql_pymysql_connx     
"r
  c                 c  r  r   r	  )r  rZ   r+   r+   r,   mysql_pymysql_conn_iris~  r  r  c                 c  r  r   r	  )r  rZ   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 )Nr9   Zpsycopg2z=postgresql+psycopg2://postgres:postgres@localhost:5432/pandasr   
r   r   r   r   r   r   r   r   r   r   )r9   r   r   r   r+   r+   r,   postgresql_psycopg2_engine  s   

r  c                 c  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  rZ   r+   r+   r,   postgresql_psycopg2_conn  r  r  c                  c  s    t d ddlm}  d}| |(}|V  t|D ]}t|| qt|D ]}t|| q'|	  W d    d S 1 s>w   Y  d S )Nadbc_driver_postgresqlr   dbapiz4postgresql://postgres:postgres@localhost:5432/pandas)
r   r   r  r  r   r   r   r   r   rX   )r  urirZ   r   r   r+   r+   r,   postgresql_adbc_conn  s   

"r  c                 c      dd l }| }z|d W n |jy!   |  t|| Y nw z|d W n |jy;   |  t| Y nw |V  d S Nr   r4   Z	iris_view)adbc_driver_manageradbc_get_table_schemaProgrammingErrorrollbackr`   r~   )r  r   mgrrZ   r+   r+   r,   postgresql_adbc_iris  s    
r!  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+   tuplerm   rL   entryr+   r+   r,   rN         z)postgresql_adbc_types.<locals>.<listcomp>)r  r  r  r  r   )r  r   r   rZ   new_datar+   r+   r,   postgresql_adbc_types  s   
r)  c                 c  r  r   r	  )r  rZ   r+   r+   r,   postgresql_psycopg2_conn_iris  r  r*  c                 c  r  r   r	  )r  rZ   r+   r+   r,   postgresql_psycopg2_conn_types  r  r+  c                  c  sF    t d t } d|  V  W d    d S 1 sw   Y  d S )Nr9   
sqlite:///)r   r   r   ensure_cleanr   r+   r+   r,   
sqlite_str  s
   

"r.  c                 c  s`    t d}|j| |jjd}|V  t|D ]}t|| qt|D ]}t|| q"|	  d S )Nr9   r  r  )r.  r9   r   r   r   r+   r+   r,   sqlite_engine  s   
r/  c                 c  r  r   r	  )r/  rZ   r+   r+   r,   sqlite_conn  r  r0  c                 C  s2   t d}|| }t|| t| |  | S )Nr9   )r   r   r   rs   r~   r   )r.  r   r9   r   r+   r+   r,   sqlite_str_iris  s   


r1  c                 c  r   r   r  )r/  r   r+   r+   r,   sqlite_engine_iris  r  r2  c                 c  r  r   r	  )r2  rZ   r+   r+   r,   sqlite_conn_iris  r  r3  c                 C  s,   t d}|| }t||d |  | S )Nr9   r%   )r   r   r   r   r   )r.  r   r9   r   r+   r+   r,   sqlite_str_types  s
   

r4  c                 c  r  )Nr%   r  )r/  r   r+   r+   r,   sqlite_engine_types%  r  r5  c                 c  r  r   r	  )r5  rZ   r+   r+   r,   sqlite_conn_types+  r  r6  c               	   c  s    t d ddlm}  t J}d| }| |'}|V  t|D ]}t|| q#t	|D ]}t
|| q/|  W d    n1 sEw   Y  W d    d S W d    d S 1 s]w   Y  d S )Nadbc_driver_sqliter   r  zfile:)r   r   r7  r  r   r-  r   r   r   r   r   rX   )r  r   r  rZ   r   r   r+   r+   r,   sqlite_adbc_conn1  s    



"r8  c                 c  r  r  )r  r  r  r  r_   r~   )r8  r   r   rZ   r+   r+   r,   sqlite_adbc_irisA  s    
r9  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   )
r  r  r  r  intr   r$  rm   r   rX   )r8  r   r   rZ   r(  r&  r+   r+   r,   sqlite_adbc_typesS  s"   

r;  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   Zclosing_connrZ   r+   r+   r,   sqlite_buildini  s   "r?  c                 c  r   r   )r_   r~   )r?  r   r+   r+   r,   sqlite_buildin_irisp  r  r@  c                 c  s$    dd |D }t | | | V  d S )Nc                 S  r"  r+   r#  r%  r+   r+   r,   rN   y  r'  z(sqlite_buildin_types.<locals>.<listcomp>)r   )r?  r   r+   r+   r,   sqlite_buildin_typesw  s   

rA  )Zmarks)r/  r0  r.  )r2  r3  r1  )r5  r6  r4  c                 C  s    | | } |jd| ddd d S )Ntestr   Fr   rr   	if_existsr   )getfixturevalueto_sql)rZ   r   requestr+   r+   r,   test_dataframe_to_sql  s   
rH  c                 C  sN   | dkr|j tjjddd || } |jd d }|jd| ddd	 d S )
Nr  z7postgres ADBC driver cannot insert index with null typeTreasonstrictr   rB  r   FrC  )node
add_markerr   markxfailrE  r   rF  )rZ   r   rG  Zempty_dfr+   r+   r,   test_dataframe_to_sql_empty  s   
rP  c              	   C  s   t d ttjdgddtjtdddgddtjtdddgddtjtdgddtjd	gd
dd}d| v rR| dkrF|jdgd}t	rMt
}d}n	d }d}nt}d}|| } tj||dd |jd| ddd W d    d S 1 sxw   Y  d S )NpyarrowrE   zint8[pyarrow]r;     timestamp[ns][pyarrow]zdate32[day][pyarrow]zduration[ns][pyarrow]azstring[pyarrow])r:  r   r   r   stringr}   r8  r   r   zis_sparse is deprecated zthe 'timedelta'F)matchcheck_stacklevel
test_arrowreplacerC  )r   r   r   pdarrayr   r   r   ro   r   DeprecationWarningUserWarningrE  r   assert_produces_warningrF  )rZ   rG  r   exp_warningmsgr+   r+   r,   "test_dataframe_to_sql_arrow_dtypes  s2   

"rc  c                 C  sL   t d tdtjtddd|gddi}|| } |jd| dd	d
 d S )NrQ  r   rS  rE   rT  rR  rZ  r[  FrC  )r   r   r   r\  r]  r   rE  rF  )rZ   rG  Znulls_fixturer   r+   r+   r,   *test_dataframe_to_sql_arrow_dtypes_missing  s   

rd  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 )	Nrf  r}   z)'method' not implemented for ADBC driversTrI  Zneed_transaction
test_framere  )rL  rM  r   rN  rO  rE  r"   rF  	has_tabler   len)rZ   re  r   rG  	pandasSQLr+   r+   r,   test_to_sql  s   
rm  zmode, num_row_coef)r[  rE   )r   rF   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 )NTrg  rh  failrD  rE  r"   rF  rj  r   rk  )rZ   modeZnum_row_coefr   rG  rl  r+   r+   r,   test_to_sql_exist+  s   
rr  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 )NTrg  rh  rn  ro  z!Table 'test_frame' already existsrX  )rE  r"   rF  rj  r   raises
ValueError)rZ   r   rG  rl  rb  r+   r+   r,   test_to_sql_exist_fail6  s   
"rv  c                 C  s\   | | } td| }t| td| }t| td| }|jdks%J d|jv s,J d S )NSELECT * FROM irisSELECT * FROM iris where 0=1r   r   r6   )rE  r#   r   r\  read_sqlr   r   rZ   rG  
iris_framer+   r+   r,   test_read_iris_queryB  s   

r}  c                 C  s   d| v r|j tjjddd || } ttd| dd}t| tt	j
d| dd}t| tt	j
d| dd}|jd	ksAJ d
|jv sHJ d S )Nr}   ,'chunksize' not implemented for ADBC driversTrI  rw     	chunksizerx  ry  r6   )rL  rM  r   rN  rO  rE  r   r#   r   r\  rz  r   r   r{  r+   r+   r,   test_read_iris_query_chunksizeN  s   
r  c           
      C  s   d| v r|j tjjddd || } ddlm}m}m	}m
} | }t| tr-|| n| }|d||d}t||| d	d
dd}	t|	 t| trQ|  d S d S )Nr}   r~  TrI  r   )r1   r3   r   selectr4   )Zautoload_withr   r   r   lengthrq   )rL  rM  r   rN  rO  rE  r9   r1   r3   r   r  rz   r   r#   r   r   )
rZ   rG  r1   r3   r   r  r<   Zautoload_conr4   r|  r+   r+   r,   .test_read_iris_query_expression_with_parametera  s&   

r  c                 C  sv   d| v r|j tjjddd |d  D ]
\}}|| v r  n	qtd|  d|| } t|| dd	}t	| d S )
Nr}   r~  TrI  r(   zNo part of z( found in sql_strings['read_parameters']r   r   r  )
rL  rM  r   rN  rO  itemsKeyErrorrE  r#   r   )rZ   rG  r-   r   queryr|  r+   r+   r,   *test_read_iris_query_string_with_parameter}  s   
r  c                 C  s4   | | } td| }t| td| }t| d S )Nr4   )rE  r$   r   r\  rz  r{  r+   r+   r,   test_read_iris_table  s
   

r  c                 C  sb   d| v r|j tjjdd || } ttd| dd}t| tt	j
d| dd}t| d S )Nr}   +chunksize argument NotImplemented with ADBCrJ  r4   r  r  )rL  rM  r   rN  rO  rE  r   r$   r   r\  rz  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 )NrE   c                   rc   r+   rd   rK   r   r+   r,   rN     ri   z8test_to_sql_callable.<locals>.sample.<locals>.<listcomp>)r   rQ   r   rb   )Zpd_tablerZ   r   	data_iterr   checkr  r,   sample  s   
z$test_to_sql_callable.<locals>.sampleTrg  rh  ri  rE   rp  )rZ   r   rG  r  rl  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 )NrA  ;sqlite_buildin connection does not implement read_sql_tabler  r   r'   )applymarkerr   rN  rO  rE  r   r$   r   r   r;   r   r   r   r   integerr   bool_r   r   objectrZ   rG  	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   rx   r   rE   rF   rG   皙?r   333333?rU  brh  Fr   rr   r   z}DROP PROCEDURE IF EXISTS get_testdb;

    CREATE PROCEDURE get_testdb ()

    BEGIN
        SELECT * FROM test_frame;
    ENDzCALL get_testdb();)rE  r9   ry   r   r   r   rF  rz   r   rn   rQ   r   r#   r   assert_frame_equalrz  )	rZ   rG  ry   r   r   procZengine_connres1res2r+   r+   r,   test_read_procedure  s,   




r  expected_countrF   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+   )rL   kr+   r+   r,   rN     r'  zVtest_copy_from_callable_insertion_method.<locals>.psql_insert_copy.<locals>.<listcomp>.zCOPY z (z) FROM STDIN WITH CSV)r   file)
connectionrP   r   rS   writer	writerowsseekjoinr   r   Zcopy_expert)r   rZ   r   r  Z
dbapi_connr\   Zs_bufr  r   r   	sql_queryr  r+   r,   psql_insert_copy  s    




zBtest_copy_from_callable_insertion_method.<locals>.psql_insert_copyrE   rF   r  r   rU  ncol1col2Zcol3rh  F)r   rr   r   re  rE  r   rF  r   r$   r   r  )rZ   r  rG  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   ra   r   rx   c                   s<    fdd|D }| j |jdgd}||}|jS )Nc                   rc   r+   rd   rK   r  r+   r,   rN   0  ri   z\test_insertion_method_on_conflict_do_nothing.<locals>.insert_on_conflict.<locals>.<listcomp>rU  )Zindex_elements)r   rm   Zon_conflict_do_nothingrQ   rowcountr   rZ   r   r  r   r[   r  ra   r  r,   insert_on_conflict/  s   
zHtest_insertion_method_on_conflict_do_nothing.<locals>.insert_on_conflictzx
    CREATE TABLE test_insert_conflict (
        a  integer PRIMARY KEY,
        b  numeric,
        c  text
    );
    rE    @rU  abcr   test_insert_conflictr   FrC  rE   g	@r  r   rr   r   rD  re  Trg  )rE  Zsqlalchemy.dialects.postgresqlrb   r   r   sqlalchemy.sqlry   rz   r   rn   rQ   r   listrF  r   r$   r   r  r   r   )rZ   rG  r   ry   r  
create_sqlrr   r  Z	df_insertinsertedr  rl  r+   ra   r,   ,test_insertion_method_on_conflict_do_nothing&  sJ   


	


"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   ra   r   rx   c                   sH    fdd|D }| j |}|j|jj|jjd}||}|jS )Nc                   rc   r+   rd   rK   r  r+   r,   rN   j  ri   zXtest_insertion_method_on_conflict_update.<locals>.insert_on_conflict.<locals>.<listcomp>)r  r   )r   rm   Zon_duplicate_key_updater  r  r   rQ   r  r  ra   r  r,   r  i  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   FrC  r  r  rF   Trg  )rE  Zsqlalchemy.dialects.mysqlrb   r   r   r  ry   rz   r   rn   rQ   r   r  rF  r   r$   r   r  r   r   )rZ   rG  r   ry   r  r  rr   r   r  r  r  rl  r+   ra   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   rx   Zgroup_Zgroup_view_z
    CREATE TABLE zF (
        group_id INTEGER,
        name TEXT
    );
    INSERT INTO z- VALUES
        (1, 'name');
    CREATE VIEW z
    AS
    SELECT * FROM z;
    rE   r   Zgroup_idr   )rE  r   r   r  ry   uuiduuid4hexrz   r   rn   rQ   r$   r   r   r  )
rZ   rG  r   ry   r   r   Zsql_stmtrr   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_viewrE   r   r  )rQ   r\  rz  r   r   r  )r?  create_tableZinsert_intoZ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 connectionrs  P`pandas.io.sql.execute` is deprecated and will be removed in the future version.select * from iris)r   rt  	TypeErrorr   r`  FutureWarningr   rQ   )r2  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  rs  r  )r   r`  r  r   rQ   )r3  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: )ru  )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 driversTrI  r(   r  r  rL  rM  r   rN  rO  rE  r  r"   run_transaction
read_queryr   rZ   rG  r-   r  r  rq   rl  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  TrI  r)   r   r   r  r  r  r  r+   r+   r,   "test_read_sql_iris_named_parameter  s$   



r  c              	   C  s   d| v sd| v rd| vr| tjjdd | }|| } |d t| }t| #}|  |j|d d}W d    n1 s@w   Y  W d    n1 sOw   Y  t	| d S )Nr&   r'   r}   zbroken testr  r*   r  )
r  r   rN  rO  rE  r  r"   r  r  r   )rZ   rG  r-   r  r  rl  r|  r+   r+   r,   ,test_read_sql_iris_no_parameter_with_percent  s   


r  c                 C  s"   | | } td| }t| d S )NzSELECT * FROM iris_view)rE  r   r#   r   r{  r+   r+   r,   test_api_read_sql_view+  s   
r  c                 C  s\   d| v r|j tjjdd || } d}tj|| dd}t|| }t	t
|| d S )Nr}   r  r  z1SELECT * FROM iris_view WHERE "SepalLength" < 0.0r   r  )rL  rM  r   rN  rO  rE  r   r#   r   r  r   )rZ   rG  r  Z
with_batchZwithout_batchr+   r+   r,   *test_api_read_sql_with_chunksize_no_result2  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   Trg  )rE  r   rj  r   r   rF  )rZ   rG  r   rl  r+   r+   r,   test_api_to_sql?  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_frame2Trg  rn  ro  z"Table 'test_frame2' already existsrs  )	rE  r   rj  r   r   rF  r   rt  ru  )rZ   rG  r   rl  rb  r+   r+   r,   test_api_to_sql_failJ  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   Trg  rn  ro  r[  rE  r   rj  r   r   rF  rk  r   rZ   rG  r   rl  Znum_entriesZnum_rowsr+   r+   r,   test_api_to_sql_replaceY  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_frame4Trg  rn  ro  rH   r   rF   r  r  r+   r+   r,   test_api_to_sql_appendk  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 )NZtest_frame5Trg  Fr   zSELECT * FROM test_frame5)	rE  r   rj  r   r   rF  rz  r   r  )rZ   rG  r   rl  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 )NZtest_seriesTrg  r   r   rR  Zseriesr   Fr  zSELECT * FROM test_series)rE  r   rj  r   r   r   r   arangerF  r#   r   r  to_frame)rZ   rG  rl  ss2r+   r+   r,   test_api_to_sql_series  s   
r  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_roundtripTrg  rr   "SELECT * FROM test_frame_roundtripr}   __index_level_0__level_0r   Zinplace)rE  r   rj  r   r   rF  r#   renamer   	set_indexr   r:  r   r   r  rZ   rG  r   r  rl  r  r+   r+   r,   test_api_roundtrip  s   
r  c                 C  s   d| v r|j tjjdd || } td| r6tj| dd}|	d W d    n1 s1w   Y  tj
|d| ddd	 tjd
| d}t|| d S )Nr}   r  r  r  Trg  FrF   )rr   r   r  r  r  )rL  rM  r   rN  rO  rE  r   rj  r   r   rF  r#   r   r  )rZ   rG  r   rl  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 Nrw  r   )rE  r   r"   rQ   r   rW   r  )rZ   rG  
pandas_sqliris_resultsrM   r+   r+   r,   test_api_execute_sql  s   


r  c              	   C  s  | }| | } td| }d|v s d|v s t|jjjtjr J tjd| dgd}t|jjjtj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  rE   rG   r   rH   %Y-%m-%d %H:%M:%Sr   i        i  r  r   z%Y%m%dz
2010-10-10z
2010-12-12)rE  r   r#   r   r   r;   r   r   
datetime64tolistr   r   r   r  r+   r+   r,   test_api_date_parsing  sZ   





r  error)ru   raisecoercezread_sql, text, moder  )r9   fallbackr   r9   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   rA  z failing combination of argumentsr  r   datetime64[ns]rw   )rr   r  r  r   r   r)  int32)r   r   r   zdatetime64[us])rE  r  r   rN  rO  r   r:  rJ   r   r   r  )
rZ   rG  rz  ry   rq  r  r   r  r  r  r+   r+   r,   !test_api_custom_dateparsing_error  s4   
r  c                 C  sP   | | } tjd| dddgd}t|jjjtjsJ t|j	jjtjs&J d S )Nr  r   r   )	index_colr  )
rE  r   r#   r   r   r;   r   r   r  r   rZ   rG  r   r+   r+   r,   test_api_date_and_index=  s   
r  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 )NZtest_timedeltaTrg  z00:00:01z00:00:03foor   r8  z.sqlite ADBC driver doesn't implement timedeltar  r}   F)rY  r   rr   rF   zSELECT * FROM test_timedeltar  r   i@B )monthsdaysmicrosecondsnanosecondsi- r   )rE  r   rj  r   r   r   r   r  rL  rM  r   rN  rO  r   r^  r_  r   r`  rF  r#   r\  Z
DateOffsetr   r   )	rZ   rG  r  rl  r   ra  r  r  r  r+   r+   r,   test_api_timedeltaL  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 )
NrU  y      ?      ?y               @r}   zdatatypes not supportedzComplex datatypes not supportedrs  Ztest_complexr  )rE  r   r   rt  ru  rF  )rZ   rG  r  r   rb  r+   r+   r,   test_api_complex_raises{  s   
"r  zindex_name,index_label,expected))NNr   )Nother_labelr   )
index_nameNr!  )r!  r   r   )r   N0)Nr   r"  c           	      C  s   d| v r|j tjjdd || } td| r6tj| dd}|	d W d    n1 s1w   Y  t
dtdi}||j_d	}tj|d| |d
 t|| }|jd |ks\J d S )Nr}   -index_label argument NotImplemented with ADBCr  test_index_labelTrg  r  rH   SELECT * FROM test_index_label)index_labelr   )rL  rM  r   rN  rO  rE  r   rj  r   r   r   ranger   r   rF  r#   r   )	rZ   rG  r!  r&  r  rl  
temp_framer  r   r+   r+   r,   test_api_to_sql_index_label  s   
r)  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 keyFrI  r}   r#  r  r$  Trg  rH   r  )ZA0A1)B0ZB1r  r%  r   r  rE   Zlevel_1r[  r   r   )rD  r&  rF   ro  r   r   zALength of 'index_label' should match number of levels, which is 2rs  )r  r   rN  rO  rL  rM  rE  r   rj  r   r   r   r'  r   Zfrom_productrF  r#   r   r  r   namesrt  ru  )	rZ   rG  r  rl  Zexpected_row_countr(  r  r   rb  r+   r+   r,   &test_api_to_sql_index_label_multiindex  sz   

$r-  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 )NZtest_multiindex_roundtripTrg  rE   r  line1rF         ?line2r   r   r   r   r   r   r   r  z'SELECT * FROM test_multiindex_roundtripr  Zcheck_index_type)rE  r   rj  r   r   r   from_recordsrF  r#   r   r  )rZ   rG  rl  r   r  r+   r+   r,   test_api_multiindex_roundtrip  s   

r8  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 )NZtest_dtype_argumentTrg  333333?g333333@ffffff@g333333@r   r   r   r  rF   r  z(SELECT "A", "B" FROM test_dtype_argumentz$SELECT A, B FROM test_dtype_argumentrr   r;   )rE  r   rj  r   r   r   rF  r   r#   r   r  )	rZ   rG  r;   r  rl  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 )
NrE   rF   rG   rH   r   r   Ztest_frame_integer_col_namesr[  ro  )rE  r   r   rF  r  r+   r+   r,   test_api_integer_col_names+  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 driversTrI  rB  r  CREATErL  rM  r   rN  rO  rE  r   
get_schemarZ   rG  r   r  r+   r+   r,   test_api_get_schema2  s   
rD  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?  TrI  rB  pypi)rr   r   zCREATE TABLE pypi.rA  rC  r+   r+   r,   test_api_get_schema_with_schema@  s   
rF  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?  TrI  皙?r:  r  皙@r  r?  INTEGERr   )r   rB  r  r<  r@  )rL  rM  r   rN  rO  rE  r   r9   r   r   rB  )rZ   rG  r  Zfloat_framer;   r   r  r+   r+   r,   test_api_get_schema_dtypesO  s"   
rJ  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?  TrI  rG  r:  r  rH  )Col1ZCol2rB  rK  )rr   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"))	rL  rM  r   rN  rO  rE  r   r   rB  )rZ   rG  r   r  r   r  Zconstraint_sentencer+   r+   r,   test_api_get_schema_keysg  s(   
rL  c                 C  s  d| v r|j tjjdd | }|| } td| r8tj| dd}|	d W d    n1 s3w   Y  t
tjddtd	d
}|jd| dd td| }t
 }d}g d}tjd| ddD ]}	t||	gdd}t|	|| kszJ |d7 }qft|| |dkrtjtdd tjd| dd W d    d S 1 sw   Y  d S t
 }
d}g d}tjd| ddD ]}	t|
|	gdd}
t|	|| ksJ |d7 }qt||
 d S )Nr}   r  r  Ztest_chunksizeTrg  rF   )   r   Zabcder   Fr  zselect * from test_chunksizer   )r   r   r   r   rF   r   r  Zignore_indexrE   r?  rW  rs  )rL  rM  r   rN  rO  rE  r   rj  r   r   r   r   randomdefault_rngstandard_normalr  rF  r#   r   rk  r   r  rt  NotImplementedErrorr$   )rZ   rG  r  rl  r   r  r  isizeschunkres3r+   r+   r,   test_api_chunksize_read  sF   

"
rW  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  ru   rv   z0.9.0z:categorical dtype not implemented for ADBC postgres driverTrI  Ztest_categoricalrg  r  )John P. Doez	Jane DoverX  )Z	person_idperson_namerY  categoryFr  zSELECT * FROM test_categorical)r   r   r:   rL  rM  r   rN  rO  rE  r   rj  r   r   r   copyr   rF  r#   r   r  )rZ   rG  r}   rl  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 )NZtest_unicodeTrg  rE   rF   rG   rH      ér  r   Fr  )rE  r   rj  r   r   r   rF  )rZ   rG  rl  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-a7f6Trg  r   rE   rF   r   r;  r9  Fr  r  z'SELECT * FROM "d1187b08-4943-4c8d-a7f6"z'SELECT * FROM `d1187b08-4943-4c8d-a7f6`)rE  r   rj  r   r   r   r   nanrF  r#   r   r  )rZ   rG  r  rl  r   r  r]  r+   r+   r,   test_api_escaped_table_name  s   
rc  c                 C  s   d| v r|j tjjddd || } td| r7tj| dd}|	d W d    n1 s2w   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}   z!pyarrow->pandas throws ValueErrorTrI  
test_tablerg  r  r  rE   rU  r  r   Fr  z)SELECT a, b, a +1 as a, c FROM test_table)rE   r  rF   rE   )rF   r   rG   rE   )rG   r  rH   rE   )rU  r  rU  r   r   )rL  rM  r   rN  rO  rE  r   rj  r   r   r   rF  r\  rz  r   r  )rZ   rG  rl  r   r  r  r+   r+   r,   #test_api_read_sql_duplicate_columns  s"   
rf  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 )Nr?  Not Implementedr  rh  r   r   r   )
r  r   rN  rO  rE  r   rF  r$   r   r  )rZ   rG  r   r  colsr  r+   r+   r,   test_read_table_columns	  s   
ri  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 )Nr?  rg  r  rh  r   r5  r   r   r   r   )r  r   )r  r   rN  rO  rE  r   rF  r$   r   r,  r   r  )rZ   rG  r   r  r  r+   r+   r,   test_read_table_index_col	  s   
rj  c                 C  sr   | dkr| tjjdd || } td| }td| }t	|| t
d| }td| }t	|| d S )Nr@  r  r  rw  r4   )r  r   rN  rO  rE  r   r#   rz  r   r  r$   )rZ   rG  iris_frame1iris_frame2r+   r+   r,   test_read_sql_delegate5	  s   
rm  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   rx   r   z,CREATE TABLE invalid (x INTEGER, y UNKNOWN);z0CREATE TABLE other_table (x INTEGER, y INTEGER);Zother_tablezSELECT * FROM other_table)r9   ry   r   r   rz   r   rn   rQ   r   r`  r   r$   r#   )r0  rZ   ry   r   Z
query_listr  r+   r+   r,   test_not_reflect_all_tablesH	  s.   



"rn  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 )Nr?  r}   zDoes not raise warningr  zThe provided table name 'TABLE1' is not found exactly as such in the database after writing the table, possibly due to case sensitivity issues. Consider using lower case table names.rs  ZTABLE1rW  ZCaseSensitiver  )r  r   rN  rO  rE  r   r`  r_  r   r   Zcheck_case_sensitiverF  )rZ   rG  r   r  r   r+   r+   r,   (test_warning_case_insensitive_table_namea	  s    
"ro  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   )rE  r9   rp  r   r   r   r   SQLTablerz   r   r   r   )rZ   rG  rp  r   r   r   r+   r+   r,   test_sqlalchemy_type_mappingy	  s   
"rx  zinteger, expected)Zint8SMALLINT)ZInt8ry  )Zuint8ry  )ZUInt8ry  )Zint16ry  )ZInt16ry  )Zuint16rI  )ZUInt16rI  )r  rI  )ZInt32rI  )Zuint32BIGINT)ZUInt32rz  )r   rz  )Int64rz  r   rz  rI  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   rE   rU  r   r;   ru  rv  )
rE  r   r   r   rw  r   r   r   rU  r   )rZ   rG  r  r  r   r   r   r  r+   r+   r,   test_sqlalchemy_integer_mapping	  s   
r}  r  Zuint64Z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   rE   rU  r|  z1Unsigned 64 bit integer datatype is not supportedrs  ru  rv  )rE  r   r   r   r   rt  ru  rw  )rZ   rG  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 )Nr9   r,  r4   r[  FrC  rw  )r   r   rE  r   r-  rF  r   rz  r$   r#   r  )
rZ   rG  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 )Nr9   z)postgresql+pg8000://user:pass@host/dbnamer  rs  zselect * from table)r   r   rE  rt  ImportErrorr   rz  )rZ   rG  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   rx   r  z%select * from iris where "Name"=:namez#select * from iris where name=:namer   zIris-versicolorr  r7   )rE  r9   ry   r   rz  set)rZ   rG  r  ry   Z	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  r7   )rE  r9   r  r  r=   wherer   r7   r   rz  r  )rZ   rG  r  r  r4   Z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 )
Nr?  rg  r  ra  rG   rH   r   )r   z%_variationZtest_column_percentageFr  )r  r   rN  rO  rE  r   rF  r   r$   r   r  )rZ   rG  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 )NZtest_frame3_legacyFr  rH   z!SELECT * FROM test_frame3_legacy;)	r   r-  r   r{   r   r   rF  r#   r  )r   r   rZ   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 installedrs  rw  )r   rt  r  r   rz  )rZ   rb  r+   r+   r,   test_con_string_import_error
  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|   rZ   )selfargskwargsr+   r+   r,   __init__
  s   zqtest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnection.__init__c                 S  s   t | j|S r   )getattrrZ   )r  r   r+   r+   r,   __getattr__"
  s   zttest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnection.__getattr__c                 S  s   | j   d S r   )rZ   rW   )r  r+   r+   r,   rW   %
  s   zntest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnection.closeN)r  r  )__name__
__module____qualname__r  r  rW   r+   r+   r+   r,   MockSqliteConnection
  s    
r  r<  zSELECT 1)r=  r   r   r`  r_  r   rz  )r  rZ   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 )Nrw  z9Execution failed on sql 'iris': near "iris": syntax errorrs  r4   )r   r#   rz  r   r  r   rt  DatabaseError)r@  rZ   rk  rl  rb  r+   r+   r,   test_sqlite_read_sql_delegate-
  s   "r  c                 C  s   t | d}d|v sJ d S )NrB  r@  )r   rB  )r   r  r+   r+   r,   test_get_schema28
  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   rq  rr  Trs  ru  rv  
r   r   rE   rp  )r   r   r   r    ZSQLiteTableZ
sql_schemasplitstrip)r?  rZ   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 )Nr.  #sqlite_str has no inspection systemr   r         ?       @      @      @r  r  r  r  onetwoTrg  r(  rH   )r   skiprE  r9   r   r   r   r   rF  rj  r   rZ   rG  r   r(  rl  inspr+   r+   r,   test_create_tableP
  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 )
Nr.  r  r   r   r  r  r  r(  rH   )r   r  rE  r9   r   r   r   r   r  rF  rj  r   clear_cacheAttributeErrorr  r+   r+   r,   test_drop_tablee
  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 )Nr.  r  r  rH   r  r}   r  r  r   Tr  )r   r  rE  r"   r  rF  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  )rE  r"   r  rQ   r   rW   r  )rZ   rG  rl  r  rM   r+   r+   r,   test_execute_sql
  s   




r  c                 C  s$   | | } tjd| d}t| d S )Nr4   r  )rE  r   r$   r   r{  r+   r+   r,   test_sqlalchemy_read_table
  s   
r  c                 C  s8   | | } tjd| ddgd}t|jtddg d S )Nr4   r5   )rr   r   ZSepalLength__1)rE  r   r$   r   Z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 foundrs  Zthis_doesnt_existr  )rE  r   rt  ru  r   r$   )rZ   rG  rb  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 )Nr.  .types tables not created in sqlite_str fixturer&   r%   z#boolean dtype not inferred properlyr  r   )r   r  r  rN  rO  rE  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  rE   r  rZ   rG  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 )Nr.  r  r%   z"sqlite does not read date properlyr  r   )r   r  r  rN  rO  rE  r   r$   r   r   r;   r   r   r  r  r+   r+   r,   test_default_date_load
  s   
r  r  r   c                 C  s6   | | } t| }td| |d}|j}t|| d S )Nselect * from datetzr  )rE  r   r#   r   r   r   )rZ   rG  r  r  r   r  r+   r+   r,   !test_datetime_with_timezone_query
  s
   
r  c                 C  sB   | | } t| }tttd| dddd}|j}t|| d S )Nr  rE   r  TrN  )rE  r   r   r  r#   r   r   r   )rZ   rG  r  r   r  r+   r+   r,   +test_datetime_with_timezone_query_chunksize
  s   
r  c                 C  s2   | | } t| }td| }t||  d S )Nr   )rE  r   r   r$   r   r  r  )rZ   rG  r  r  r+   r+   r,   !test_datetime_with_timezone_table  s   
r  c                 C  s   | }| | } tdtddddi}|jd| dddksJ d	|v 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:00rG   
US/Pacificperiodsr   Ztest_datetime_tzFr  r'   r   zSELECT * FROM test_datetime_tzr%   r   r   )rE  r   r   rF  dtZ
tz_convertZtz_localizer   r$   r   r  r#   rz   locr   r   )rZ   rG  r  r  r  r+   r+   r,   %test_datetime_with_timezone_roundtrip  s    
r  c                 C  sj   | | } tdtdddidgd}|jd| dddksJ td| }ttjgdgd	}t	|| d S )
Nr   i'  rE   r   r  Ztest_datetime_obbFr  r   )
rE  r   r   rF  r   r$   r\  ZNaTr   r  )rZ   rG  r   r  r  r+   r+   r,   test_out_of_bounds_datetime-  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   Z6hr  freqnumsr  Z	foo_tableZ	info_date)r   rr   r&  r5  F)Zcheck_names)
rE  r   Z
_with_freqr   r'  rF  r   r$   r   r  )rZ   rG  datesr  r  r+   r+   r,   "test_naive_datetimeindex_roundtrip8  s   
r  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   r  r  formatr   r  unit)rE  r   r$   r  r   r  r   r   r;   r   r   )rZ   rG  r  r   expected_typer+   r+   r,   test_date_parsingE  s*   

r  c                 C  s   | }| | } ttdddtdd}|jd| ddks J td| }|jdd	d
}t	
|| td| }|jdd	d
}d|v r^t|jd tsNJ t|d |d< t	
|| d S t	
|| d S )Nr  rG   r  r  r9  test_datetimer  r   rE   )ZaxisSELECT * FROM test_datetimer%   r  r   )rE  r   r   r   r  rF  r   r$   ro   r   r  r#   rz   r  r   r   rZ   rG  r  r   r  r+   r+   r,   r  e  s    
r  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 )Nr  rG   r  r  r9  rE   r   r  Fr  r  r%   r  r   r  rv   )rE  r   r   r   r  rb  r  rF  r   r$   r   r  r#   rz   r   r   r  r+   r+   r,   test_datetime_NaT~  s   
r  c                 C  sr   | | } ttdddtdddgdgd}|jd| dddks"J td| }|d }t|d }t|| d S )	N  rE   rF   rU  r   	test_dateFr  )rE  r   r   rF  r$   r   r   r   )rZ   rG  r   r]  r  r  r+   r+   r,   test_datetime_date  s   
"
r  c                 C  s  | }| | } ttdddtdddgdgd}|jd| dd	d
k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   rE      rU  r   	test_timeFr  rF   Z
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>Z
test_time3r%   zSELECT * FROM test_time3c                 S  r  r  r  r  r+   r+   r,   r    r  )
rE  r   r   rF  r$   r   r  r   r#   map)rZ   rG  r?  r  r   r]  r0  refr+   r+   r,   test_datetime_time  s$   
"
r  c                 C  sn   | | } tdtjd}tdtjd}t||d}|jd| dddks&J td| }t	j
||dd	d
 d S )Ni  rR  g        )s1r  Ztest_read_writeFr  rE   T)Zcheck_dtypeZcheck_exact)rE  r   r   r  float32r   rF  r   r$   r   r  )rZ   rG  r  r  r   r\  r+   r+   r,   test_mixed_dtype_insert  s   
r  c                 C  sp   | | } tg ddtjdgd}|jd| dddksJ td| }t|| t	d	| }t|| d S )
Nra  r   r;  r9  test_nanFr  rG   SELECT * FROM test_nan)
rE  r   r   rb  rF  r   r$   r   r  r#   r  r+   r+   r,   test_nan_numeric  s   
r  c                 C  s   | | } tg dtjtjtjgd}|jd| dddks J td| }t|| |d 	d|d< d |d< t
d	| }t|| d S )
Nra  r9  r  Fr  rG   r   r  r  )rE  r   r   rb  rF  r   r$   r   r  r   r#   r  r+   r+   r,   test_nan_fullcolumn  s   
r  c                 C  sz   | | } tg dddtjgd}|jd| dddksJ d |jd	< td| }t	|| t
d
| }t	|| d S )Nra  rU  r  r9  r  Fr  rG   rF   r   r  )rE  r   r   rb  rF  r  r   r$   r   r  r#   r  r+   r+   r,   test_nan_string  s   

r  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 indexTrI  r.  r0  r3  r   r4  Ztest_to_sql_saves_indexrF   >   r?  r.  zASELECT * FROM sqlite_master WHERE type = 'index' AND tbl_name = ''zPRAGMA index_info()r   r   c                 S  r   )Zcolumn_namesr+   )rL   rS  r+   r+   r,   rN   %  r   z*test_to_sql_save_index.<locals>.<listcomp>)rL  rM  r   rN  rO  rE  r   r7  r"   r  rF  r   r#   r   r   r  r9   r   Zget_indexes)rZ   rG  r  r   Ztbl_namerl  ZixsZix_colsZix_nameZ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)r?  r}   r   rx   )rE  r9   ry   r"   r  rQ   )rZ   rG  r  r[   ry   rl  transr+   r+   r,   test_transactions*  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   rx   c                   @  s   e Zd ZdS )z1test_transaction_rollback.<locals>.DummyExceptionN)r  r  r  r+   r+   r+   r,   DummyExceptionI  s    r  z/INSERT INTO test_trans (A,B) VALUES (1, 'blah')r  zSELECT * FROM test_transrE   )rE  r"   r  rz   r    rQ   r9   ry   	Exceptionr   r  rk  )rZ   rG  r  rl  r  r[   ry   r  Z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 )Nr.  z(test does not support sqlite_str fixturer  r   rx   r   test_get_schema_create_tabler  Fr6  )r  r   rN  rO  rE  r9   ry   r   r   r   rB  r   rz   r   rn   rQ   r$   r   r  )
rZ   rG  r   ry   r   r   r  Zblank_test_dfZnewconZreturned_dfr+   r+   r,   r  d  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 )Nr.  r  r   )r   r2   r1   r   r   g?Tg?Nr   
dtype_testr  rF   dtype_test2r   rr   r;   rk   z&The type of B is not a SQLAlchemy typers  r  Zdtype_test3
   single_dtype_test)r   r  rE  r9   r   r2   sqlalchemy.schemar1   r   rF  reflecttablesr   r   rz   rt  ru  r   r  )rZ   rG  r   r2   r1   rh  r   r   metaZsqltyperb  ZsqltypeaZ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 )Nr.  r  r   )r   r   r0   r   r   T  r   rE   r  rR  rG  BoolDateIntr0   notna_dtype_testr  rF   rk   r&   r  r  r  r0   )r   r  rE  r9   r   r   r0   r   r  r1   r   r   r   rF  r   r$   r	  r
  r   rz   r   )rZ   rG  r  r   r   r0   r   r1   rh  r   r   r  r  Z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 )Nr.  r  r   )
BigIntegerr0   r   r   gYB?r  rR  float64r   r  r   )f32f64
f64_as_f32i32r  Ztest_dtypesFr[  r     )	precision)r   rr   r   rD  r;   rE   r     rk   r  r  r  )r   r  rE  r9   r  r0   r   r  r1   r   r   rF  r   r$   r   roundr   r	  r
  r   r   r   rz   )rZ   rG  r  r0   r   r1   Vr   r]  r  r  r+   r+   r,   test_double_precision  sB   

	0 r   c                   sp   | | } ddlm  dd dd fdd fd	d
}tdg dijd| ddks2J ||  d S )Nr   r   c                 S  s   d}t j|| dS )Nz'SELECT test_foo_data FROM test_foo_datar  )r   r#   )r  r  r+   r+   r,   test_select  s   z3test_connectable_issue_example.<locals>.test_selectc                 S  s   |j d| dd d S )Ntest_foo_datar   )r   rr   rD  )rF  )r  r   r+   r+   r,   test_append  s   z3test_connectable_issue_example.<locals>.test_appendc                   s   | } | | d S r   r+   )rZ   Zfoo_data)r#  r!  r+   r,   test_connectable  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   )rz   r   rn   )ZconnectablerZ   )r   r$  r+   r,   main  s   



"z,test_connectable_issue_example.<locals>.mainr"  ra  r  rG   )rE  r   r   r   rF  )rZ   rG  r%  r+   )r   r#  r$  r!  r,   test_connectable_issue_example  s   
	r&  inputr  bar)r  infe0c           	      C  s   t |}| }|| } d|v rRtd}t|jtdk r.d|jv r.tjjdd}|	| d}tj
t|d |jd	| d
d W d    d S 1 sKw   Y  d S |jd	| d
ddks^J td	| }t|| d S )Nr&   r   z1.0.3r)  zGH 36465r  zinf cannot be used with MySQLrs  ZfoobarFr  rE   )r   rE  r   r   r   r:   r   rN  rO  r  rt  ru  rF  r   r$   r   Zassert_equal)	rZ   rG  r'  r   r  r   rN  rb  r]  r+   r+   r,   test_to_sql_with_negative_npinf)  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 )Nr.  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>.TemporaryZ	temp_testprefixes	TEMPORARYTZprimary_keyr  F)ZnullableN)r  r  r  __tablename__Z__table_args__idr.  r+   r.   r   r+  r+   r,   	Temporary_  s
    
r5  )r.  )r   rr   )r   r  rE  r9   r.   r   r+  r  sqlalchemy.ormr,  r-  r   rn   r  Z	__table__rp   addflushr   r#   r.  r   r  )rZ   rG  r  r,  r-  Z	test_datar  ZBaser5  sessionr   r+   r4  r,   test_temporary_tableI  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 )
Nr?  r}   z9SQLiteDatabase/ADBCDatabase does not raise for bad enginer  z*engine must be one of 'auto', 'sqlalchemy'rs  r   Z
bad_enginer   )	r  r   rN  rO  rE  r"   rt  ru  rF  )rZ   rG  r   rb  rl  r+   r+   r,   test_invalid_engineo  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;  rH   N)rE  r"   r  rF  rj  rk  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.enginer9   r   rH   	rE  r\  option_contextr"   r  rF  rj  rk  r   r  r+   r+   r,   test_options_sqlalchemy     



"rC  c              
   C  r?  )Nr@  r=  r   rH   rA  r  r+   r+   r,   test_options_auto  rD  rE  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 )Nr9   r@  r=  )r   r   rz   r!   r   r\  rB  r+   r+   r+   r,   test_options_get_engine  s   
"rF  c                   C  s   d S r   r+   r+   r+   r+   r,   "test_get_engine_auto_error_message  s   rG  funcrz  r#   c                 C  s  | }| | } d}|}	|	j|| ddd td| tt|d| | |d}
W d    n1 s2w   Y  ||||}t|
| d|v rQ|tj	j
d	d
 td|( tt|d| | |dd}||||}|D ]}
t|
| qnW d    d S 1 sw   Y  d S )NrB  Fr[  r   rr   r   rD  mode.string_storageSelect * from dtype_backendr}   z(adbc does not support chunksize argumentr  rG   )rr   rM  r  )rE  rF  r\  rB  r  r   r  r  r   rN  rO  rZ   rG  Zstring_storagerH  rM  dtype_backend_datadtype_backend_expectedr  r   r   r  r  iteratorr+   r+   r,   test_read_sql_dtype_backend  s8   
"rR  r$   c                 C  s  d| v rd| vr| tjjdd | }|| } d}|}	|	j|| ddd td	| tt||| |d
}
W d    n1 sAw   Y  ||||}t	
|
| d|v rXd S td	|% tt||| |dd}||||}|D ]}
t	
|
| qrW d    d S 1 sw   Y  d S )Nr%   r}   zhSQLite actually returns proper boolean values via read_sql_table, but before pytest refactor was skippedr  rB  Fr[  rI  rJ  rL  rG   )rM  r  )r  r   rN  rO  rE  rF  r\  rB  r  r   r  rN  r+   r+   r,   !test_read_sql_dtype_backend_table  s<   	
"rS  )rz  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 )	NrB  Fr[  rI  zPdtype_backend numpy is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.rs  numpyrL  )rE  rF  r   rt  ru  r  r\  )rZ   rG  rH  rO  r   r   rb  r+   r+   r,   )test_read_sql_invalid_dtype_backend_table  s   
"rU  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 )NrE   rG   r{  rR  r  r1        @Float64r1  r  rV  )TFNTFTre  rU  r  NrU  r  r   defgh)r   r   r   rb  r+   r+   r+   r,   rO  +  s   rO  c                  C  s   ddd} | S )Nr  r   c              
     s  | dkrt tjg dtjd}t tjddtjgtjd}n9|dkrAtdddlm	   g d} g d	}ntdt
g d}t
g d	}ttd
tjdgddtg dddtdtjdgddtg dddtddtjgddtg ddd||d|dkrtdddlm	  t fddjD d|v sd|v r|dkrdddS dddS )Npythonre  rR  rU  r  rQ  r   )ArrowExtensionArrayrZ  rE   rG   r{  r  r1  rV  rW  rX  TFbooleanrY  r[  c                   s$   i | ]}| j | d dqS )T)Zfrom_pandas)r]  )rL   r  rb  r   par+   r,   
<dictcomp>b  s    z8dtype_backend_expected.<locals>.func.<locals>.<dictcomp>r&   r%   numpy_nullable)r]  r^  zint64[pyarrow])r   r   r]  Zobject_r\  ZNAr   r   Zpandas.arraysrb  r   r   r   rb  r   r   )ZstoragerM  r  Zstring_arrayZstring_array_nar+   rd  r,   rH  =  sH   


z$dtype_backend_expected.<locals>.funcr  r   r+   )rH  r+   r+   r,   rP  ;  s   
3rP  c                 C  s   d| v r|j tjjdd || } ddd}tddgd	|}| }|j	d
| ddd t
d| |ddD ]}t|| q8d S )Nr}   r  r  r   r  r  rU  r  r   rB  Fr[  rI  zSELECT * FROM testrE   )r;   r  )rL  rM  r   rN  rO  rE  r   r   r[  rF  r#   r   r  )rZ   rG  r   r   r  r  r+   r+   r,   test_chunksize_empty_dtypess  s"   


ri  rM  rg  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 )NrB  r  r   r  Fr[  rI  rK  rU  )r;   rM  rR  )r   r   r   rg  r   r{  )
rE  r   rF  r  r\  r   r  r   r   r  )rZ   rG  rH  rM  r   r   r  r  r+   r+   r,   test_read_sql_dtype  s&   
	rj  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.rE   rF   rG   r3  Zexamplers  r[  ro  )r   rF  r   r`  r  )r/  rZ   rb  r   r+   r+   r,   test_keyword_deprecation  s   "rk  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 )	NrU  rE   rF   r   rR  Ztest_bigintwarningFr  )r   rF  r   r`  r   r$   r/  rZ   r   r+   r+   r,   test_bigint_warning  s   "rm  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 )NrE   rF   rG   rH   r  r  zEmpty table name specifiedrs  rW  r[  FrC  )r   r   rt  ru  rF  rl  r+   r+   r,   test_valueerror_exception  s
   "ro  c           
        s  | }ddl m mm ddlm}m} | }G  fddd|}|  |j	| W d    n1 s8w   Y  ||d}| 0}t
ddgdd	gd
}|jd|ddddks^J |  ||j|j}	t
|	}W d    n1 sxw   Y  t|jddgksJ d S )Nr   r.   r   r2   )r-  sessionmakerc                      s(   e Zd ZdZ ddZ dZdS )z,test_row_object_is_named_tuple.<locals>.Testrh  Tr1  2   N)r  r  r  r2  r3  string_columnr+   rp  r+   r,   Test  s    rt  rk   rE   ZhelloZworld)r3  rs  rh  Fr[  rI  rF   r3  rs  )r9   r.   r   r2   r6  r-  rq  rn   r<   Z
create_allr   rF  rX   r  r3  rs  r  r   )
r/  rZ   r-  rq  Z	BaseModelrt  r,  r9  r   Z
test_queryr+   rp  r,   test_row_object_is_named_tuple  s&   



ru  c                 C  s   | }t d d}tdddgi}|j||ddd td	d
 t||}W d    n1 s0w   Y  d}tdddgi|tdg|dd}t	|| d S )NrQ  rB  rU  xyFr[  )rr   r   rD  zfuture.infer_stringTzstring[pyarrow_numpy]rR  )r;   r   )
r   r   r   rF  r\  rB  r$   r   r   r  )r/  rZ   r   r   r  r;   r  r+   r+   r,   test_read_sql_string_inference  s   
rx  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  r	     r  rR  rB  r[  F)rD  r   select * from testr   r   z2020-12-31 12:00:00.000000)r   r   rF  r\  rz  r   )r/  rZ   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 )Nr<  )Zdetect_types)r=  r   r{   r   ZPARSE_DECLTYPESr>  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 ry  )r   r   rF  r\  rz  r   r   )r  rZ   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 )NrE   rF   r  r   rU  r  r  z$DROP SCHEMA IF EXISTS other CASCADE;zCREATE SCHEMA other;Ztest_schema_publicFr  Ztest_schema_public_explicitpublic)r   rr   r   r   Ztest_schema_otherother)r   z!Table test_schema_other not foundrs  )r   rr   r   r   r[  )r   rr   r   r   rD  r   TrN  )r   r   rn   r   rF  r   r$   r   r  r   rt  ru  r   )
r  rZ   r   rr   r  r  rV  Zres4rb  r]  r+   r+   r,   test_psycopg2_schema_support  sr   


	



	r  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   rx   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;rE   Z2021r   r   rF   r3  Z
created_dtr   Trg  Zperson)r  ry   r   rn   rQ   r\  rz  r   r   r   r  r   r   r   )	r  rZ   ry   r  rr   r  r  r  rl  r+   r+   r,   test_self_join_date_columnsd  s*   

"r  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  Zdrop_test_framerH   )r   r   r   r  rF  rj  r   )r/  rZ   r(  rl  r+   r+   r,   test_create_and_drop_table  s   

"r  c                 C  s^   | }t tdddtdddgdgd}|jd|dddksJ td	|}t||t d S )
Nr  rE   rF   rU  r   r  Fr  zSELECT * FROM test_date)r   r   rF  r#   r   r  r   r   )r?  rZ   r   r]  r+   r+   r,   test_sqlite_datetime_date  s
   "
r  tz_awareFTc                 C  s   |}| st dddt dddg}ntdddd}t| d	d
 }t|dgd}|jd|dddks6J td|}|dd
 }t	|| d S )Nr  r   rE   r  r  rF   r  r  c                 S  s   |   S r   )timetz)r  r+   r+   r,   r    s    z+test_sqlite_datetime_time.<locals>.<lambda>rU  r   r  Fr  zSELECT * FROM test_timec                 S  r  r  r  r  r+   r+   r,   r    r  )
r   r   r   Zto_pydatetimer  r   rF  r#   r   r  )r  r?  rZ   Ztz_timesZ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(r  zTable z	, column z
 not found)rQ   ru  )
rZ   r   columnZrecsZcidr   ctypeZnot_nulldefaultpkr+   r+   r,   get_sqlite_column_type  s   r  c                 C  s  | }ddg}ddg}t ||d}|jd|ddk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  r  rF   r  STRINGr  rI  z!B \(<class 'bool'>\) not a stringrs  r  r  )r   rF  r  r   rt  ru  bool)r?  rZ   rh  r   r   rb  r+   r+   r,   test_sqlite_test_dtype  s   r  c                 C  s   | }t dd gt tdddd gt dd gddt dd gd}t|}d	}|j||d
dk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   rE   r  rR  rG  r  r  r  rF   r  rI  r  rp  r  r0   ZREAL)r   r   r   rF  r  )r?  rZ   rh  r   r   r+   r+   r,   test_sqlite_notna_dtype  s   

r  c                 C  s   | }t ddgddggddgd}d}tjt|d	 |jd
|d W d    n1 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 )NrE   rF   rG   rH   rU  r  r   z$Empty table or column name specifiedrs  rW  r  )
ztest_weird_name]ztest_weird_name[ztest_weird_name`ztest_weird_name"ztest_weird_name'z_b.test_weird_name_01-30z"_b.test_weird_name_01-30"Z99beginswithnumberZ12345r_  Ztest_weird_col_namer\  )r   r   rt  ru  rF  	enumerater   Ztable_exists)r?  rZ   r   rb  ZndxZ
weird_namer\  Zc_tblr+   r+   r,   test_sqlite_illegal_names  s    r  c                 G  s   t djtdjtjdjtdjtdjtdjtd dd tj	djt
dji	}g }|D ]}t|tr3t|r3d }|t| }||| q&| t| S )Nz'{}'z{:.8f}z{:d}c                 S  s   dS )NZNULLr+   )rv  r+   r+   r,   r    s    zformat_query.<locals>.<lambda>z{:.10f}z'{!s}')r   r  r   r   Zstr_bytesrJ   r:  r   r  r  rz   r   r   r$  )r   r  Z_formattersZprocessed_argsarg	formatterr+   r+   r,   format_query  s"   r  c                 C  sL   t |}||  }W d   n1 sw   Y  |du r"dS t|S )z#Replace removed sql.tquery functionN)r   r"   rQ   r   r  )r  rr   r  r]  r+   r+   r,   tquery  s   r  c                 C  s  t tjddttdtdtddddd	}t	j
|d
| dddks&J t	d| }|j|_|}t|| dgt| |d< | }ttt|tjdd }| |d< t	j
|d| dddksfJ t	jd| dd}| }||_d|j_t|| d S )NrF   r  rH   ABCDrR  
2000-01-01r  r   r  r4  rd  Fr  zselect * from test_tablerU  txtZIdxZtest_table2zselect * from test_table2r5  )r   r   rO  rP  rQ  r   r  r  r   r   rF  rz  r   r   r  rk  r[  r  r   r   )r?  r   r  r  Zframe2Znew_idxr+   r+   r,   test_xsqlite_basic"  s(   r  c           	      C  s   t tjddttdtdtddddd	}tj	|j
d
< t|d}|  }|| d}| D ]\}}t|g|R  }t|| d q4|   tjd| d}|j|_tj||dd d S )NrF   r  r  rR  r  r  r   r  r4  r}  rB  z(INSERT INTO test VALUES (%s, %s, %s, %s)r  r|  gMbP?)Zrtol)r   r   rO  rP  rQ  r   r  r  r   rb  r   r   rB  rP   rQ   Ziterrowsr  r  rX   rz  r   r   r  )	r?  r   r  r\   insr  rM   Zfmt_sqlr  r+   r+   r,   test_xsqlite_write_row_by_row=  s"   
r  c                 C  s   t tjddttdtdtddddd	}t	
|d
}|  }|| d}|jd }t	| }||t| W d    n1 sGw   Y  |   t	d| }|jd d |_t||d d  d S )NrF   r  r  rR  r  r  r   r  r4  rB  z$INSERT INTO test VALUES (?, ?, ?, ?)r   r|  rE   )r   r   rO  rP  rQ  r   r  r  r   r   rB  rP   rQ   r   r"   r$  rX   rz  r   r   r  )r?  r   r  r\   r  rM   r  r  r+   r+   r,   test_xsqlite_executeT  s"   

r  c                 C  s   t tjddttdtdtddddd	}t	
|d
}| }|D ]}|d}t|dkr@|d dkr@|d dks@J q%t	j
|d
ddgd}| }d|v sUJ |  }|| d S )NrF   r  r  rR  r  r  r   r  r4  rB   r   r   rE   ZDATETIMEr  zPRIMARY KEY ("A", "B"))r   r   rO  rP  rQ  r   r  r  r   r   rB  
splitlinesr  rk  rP   rQ   )r?  r   r  lineslinetokensr\   r+   r+   r,   test_xsqlite_schemai  s"   
r  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 sqlrs  z(INSERT INTO test VALUES("foo", "bar", 7))rP   rQ   r   r"   r   rt  r  )r?  r  r\   r  r+   r+   r,   test_xsqlite_execute_fail}  s   	


"r  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 )Nr  r<  r  z$Cannot operate on a closed database.rs  r|  r  )r=  r   r{   r   rP   rQ   r   r"   r   rt  r  r  )r  rZ   r\   r  rb  r+   r+   r,   &test_xsqlite_execute_closed_connection  s   	
"r  c                 C  s0   t dtdi}tj|| ddddksJ d S )NFromr   ZtestkeywordsFrr   r   r   )r   r   Zonesr   rF  )r?  r   r+   r+   r,   $test_xsqlite_keyword_as_column_names  s   r  c                 C  sp   t ddgdgd}tj|| ddddksJ | }tdd	 |d
D }|dks*J td
|}t|| d S )NrE   rF   Zc0r   mono_dfFr  c                 s  s    | ]}|d  V  qdS )r   Nr+   )rL   Zmy_c0r+   r+   r,   	<genexpr>  s    z4test_xsqlite_onecolumn_of_integer.<locals>.<genexpr>zselect * from mono_dfrG   )r   r   rF  sumrQ   rz  r   r  )r?  r  Zcon_xZthe_sumr  r+   r+   r,   !test_xsqlite_onecolumn_of_integer  s   r  c                 C  s  t ddgddgd}t g dg dd}d}d	| }d
}tjt|d tj|| |dd W d    n1 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 )NrE   rF   r   r   rn  r  )r   r   EZtable_if_existszSELECT * FROM z*'notvalidvalue' is not valid for if_existsrs  Znotvalidvalue)r   rr   r   rD  rn  z&Table 'table_if_exists' already existsr[  F)r   rr   r   rD  r   r  r  r  rG   )rG   r   rH   r   r   r  r   )r  r  r  r  r  )r   r   rt  ru  r   rF  r   r  )r?  Zdf_if_exists_1Zdf_if_exists_2r   Z
sql_selectrb  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   rZ   r   )r   r   rZ   r   rh  r   (+  
__future__r   r=  r   rS   r   r   r   r   r   r   pathlibr
   r{   typingr   r  rT  r   r   Zpandas._libsr   Zpandas.compatr   r   Zpandas.compat._optionalr   Zpandas.util._test_decoratorsutilZ_test_decoratorstdZpandasr\  r   r   r   r   r   r   r   r   r   r   Zpandas._testingZ_testingr   Zpandas.core.arraysr   r   Zpandas.util.versionr   Z	pandas.ior   Zpandas.io.sqlr   r   r    r!   r"   r#   r$   r9   rN  filterwarningsZ
pytestmarkZfixturer-   r=   r_   r`   rs   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r
  r  r  r  r  r  r  r  r!  r)  r*  r+  r.  r/  r0  r1  r2  r3  r4  r5  r6  r8  r9  r;  r?  r@  rA  paramr   Zmysql_connectableZmysql_connectable_irisZmysql_connectable_typesZpostgresql_connectableZpostgresql_connectable_irisZpostgresql_connectable_typesZsqlite_connectableZsqlite_connectable_irisZsqlite_connectable_typesZsqlalchemy_connectableZsqlalchemy_connectable_irisZsqlalchemy_connectable_typesZadbc_connectableZadbc_connectable_irisZadbc_connectable_typesZall_connectableZall_connectable_irisZall_connectable_typesZparametrizerH  rP  rc  rd  rm  rr  rv  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  rz  r  r  r  r  r)  r-  r8  r:  rJ   r=  r>  rD  rF  rJ  rL  rW  r^  r`  rc  rf  ri  rj  rm  rn  ro  rx  r;   r   r}  r~  r  Zskip_if_installedr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r&  infr*  r:  r<  r>  rC  rE  rF  rG  rR  rS  rU  rO  rP  ri  Z
no_defaultrj  rk  rm  ro  ru  rx  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,   <module>   s   0$

"-




#



















	















!
	





	



$%
9
4
#









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

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