
    Owg6                   4   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c mZ d dlZ d dlm!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* d dl+m,Z- d dl.m/Z/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< erd dl=Z=ej|                  j                  d      Z@ej                  d        ZBd ZCd1dZDd1dZEd1dZFd ZGd2dZHd3dZId3dZJd4dZKd ZLd5dZMd6dZNej                  d        ZOej                  d        ZPej                  d         ZQej                  d!        ZRej                  d"        ZSd# ZTd$ ZU	 	 	 	 d7d&ZV	 	 	 	 d8d'ZWej                  d(        ZXej                  d)        ZYej                  d*        ZZej                  d+        Z[ej                  d,        Z\ej                  d-        Z]ej                  d.        Z^ej                  d/        Z_ej                  d0        Z`ej                  d1        Zaej                  d2        Zbej                  d3        Zcej                  d4        Zdej                  d5        Zeej                  d6        Zfej                  d7        Zgej                  d8        Zhej                  d9        Ziej                  d:        Zjej                  d;        Zkej                  d<        Zlej                  d=        Zmej                  d>        Znej                  d?        Zoej                  d@        Zpej                  dA        Zqej                  dB        Zrej                  dC        Zsej                  dD        Ztej                  dE        Zu ej                  dFej|                  j                  G       ej                  dHej|                  j                  G      gZx ej                  dIej|                  j                  G       ej                  dJej|                  j                  G      gZy ej                  dKej|                  j                  G       ej                  dLej|                  j                  G      gZz ej                  dMej|                  j                  G       ej                  dNej|                  j                  G      gZ{ ej                  dOej|                  j                  G       ej                  dPej|                  j                  G      gZ| ej                  dQej|                  j                  G       ej                  dRej|                  j                  G      gZ}g dSZ~g dTZg dUZexe{z   e~z   Zeye|z   ez   Zeze}z   ez   ZdV ej                  dWej|                  j                  G      gZ ej                  dXej|                  j                  G       ej                  dYej|                  j                  G      gZ ej                  dZej|                  j                  G       ej                  d[ej|                  j                  G      gZed\gz   ez   Zed]gz   ez   Zed^gz   ez   Zej|                  j                  d%e      d_        Zej|                  j                  d%e      d`        Zej|                  j                  d%e      da        Zej|                  j                  d%e      db        Zej|                  j                  d%e      ej|                  j                  dcdddg      de               Zej|                  j                  d%e      ej|                  j                  dfdgdhg      di               Zej|                  j                  d%e      dj        Zej|                  j                  d%e      dk        Zej|                  j                  d%e      dl        Zej|                  j                  d%e      dm        Zej|                  j                  d%e      dn        Zej|                  j                  d%e      do        Zej|                  j                  d%e      dp        Zej|                  j                  d%e      dq        Zej|                  j                  d%e      dr        Zej|                  j                  d%ex      ds        Zej|                  j                  d%e{      ej|                  j                  dtdudvg      dw               Zej|                  j                  d%e{      dx        Zej|                  j                  d%e      dy        Zej|                  j                  d%ex      dz        Zej|                  j                  d%e{      d{        Zd| Zd} Zd~ Zd Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      ej|                  j                  dg d      ej|                  j                  de4jf                  ddfe4jf                  ddfe4jv                  ddfe4jx                  ddfg      d                      Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      ej|                  j                  dg d      d               Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      ej|                  j                  ddeeeedg      d               Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zd Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      ej|                  j                  ddddddddddddddde ej                  e      j                  dk(  rdndfg      dĄ               Zej|                  j                  d%e      ej|                  j                  dddg      dȄ               Zej|                  j                  d%e      dɄ        Z ej                  dʫ      ej|                  j                  d%e      d˄               Zej|                  j                  d%e      d̄        Zej|                  j                  d%e      d̈́        Zej|                  j                  d%e      d΄        Zdτ Z ej                  d      dЄ        Z ej                  d      dф        Zd҄ Zdӄ ZdԄ Zej|                  j                  d%e      dՄ        Zej|                  j                  d%e      dք        Zej|                  j                  d%e      dׄ        Zej|                  j                  d%e      d؄        Zej|                  j                  d%e      dل        Zej|                  j                  d%e      dڄ        Zej|                  j                  d%e      dۄ        Zej|                  j                  d%e      d܄        Zej|                  j                  d%e      d݄        Zej|                  j                  d%e      dބ        Zej|                  j                  d%e{      ej|                  j                  dddgg      d               Zej|                  j                  d%e{      d        Zej|                  j                  d%e{      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      ej|                  j                  ddej                  gidej                   giej                   gdgdg      d               Z ej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      d         Zej|                  j                  d%e      d        Zd Zd Zej|                  j                  d%e      ej|                  j                  dddg      d               Zej|                  j                  d%e      ej|                  j                  dddg      d	               Z	ej|                  j                  d%e      ej|                  j                  dg d
      d               Z
ej                  d9d       Zej                  d        Zej|                  j                  d%e      d        Zej|                  j                  d%e      ej|                  j                  dej                  dg      ej|                  j                  dddg      d                      Zd Zd Zd Zd Zd Zd Zej                  d        Zd Zej|                  j                  d        Zej|                  j                  d        Zd Zd Zej|                  j                  ddd g      d!        Zd" Zd# Zd$ Zd% Z d& Z!d:d'Z"d( Z#d) Z$d* Z%d+ Z&d, Z'd- Z(d. Z)d/ Z*d0 Z+y(;      )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                 &    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-       O/var/www/horilla/myenv/lib/python3.12/site-packages/pandas/tests/io/test_sql.pysql_stringsr0   E   sA     JNS
"
 ??F,
' r.   c                     dd l } ddl m}m}m}m}m}m} t        | j                        t        d      k\  r|n|} |       } |d| |d|       |d|       |d|       |d|       |d	 |d
                  }	|	S )Nr   )ColumnDoubleFloatMetaDataStringTablez2.0.0irisSepalLength
SepalWidthPetalLength
PetalWidthName   )	
sqlalchemyr2   r3   r4   r5   r6   r7   r   __version__)
r?   r2   r3   r4   r5   r6   r7   dtypemetadatar8   s
             r/   iris_table_metadatarC   b   s      j4459IIFuEzH}e$|U#}e$|U#vvc{#D Kr.   c                   d}| j                         }|j                  |       |j                  d d      5 }t        j                  |      }t        |       d}g }|D cg c]<  }t        |d         t        |d         t        |d         t        |d         |d	   f> }}|j                  ||       d d d        |j                          | j                          y c c}w # 1 sw Y   /xY w)
NzCREATE TABLE iris (
            "SepalLength" REAL,
            "SepalWidth" REAL,
            "PetalLength" REAL,
            "PetalWidth" REAL,
            "Name" TEXT
        )utf-8newlineencodingz&INSERT INTO iris VALUES(?, ?, ?, ?, ?)r               )
cursorexecuteopencsvreadernextfloatexecutemanyclosecommit)conn	iris_filestmtcurcsvfilerQ   recordsrows           r/   create_and_load_iris_sqlite3r^   {   s    D ++-CKK	w	7 '7G$V7 	
  c!fc!fc!fc!fA	
 	
 	g&#'$ IIKKKM	
' 's   )C# AC!C#C##C,c                   d}| j                         5 }|j                  |       |j                  d d      5 }t        j                  |      }t        |       d}|D cg c]<  }t        |d         t        |d         t        |d         t        |d         |d	   f> }}|j                  ||       d d d        d d d        | j                          y c c}w # 1 sw Y   'xY w# 1 sw Y   +xY w)
NzCREATE TABLE iris (
            "SepalLength" DOUBLE PRECISION,
            "SepalWidth" DOUBLE PRECISION,
            "PetalLength" DOUBLE PRECISION,
            "PetalWidth" DOUBLE PRECISION,
            "Name" TEXT
        )rE   rF   z+INSERT INTO iris VALUES($1, $2, $3, $4, $5)r   rI   rJ   rK   rL   )	rM   rN   rO   rP   rQ   rR   rS   rT   rV   )rW   rX   rY   rZ   r[   rQ   r]   r\   s           r/   create_and_load_iris_postgresqlr`      s    D 
 +#D^^D7^; 	+wZZ(FL@D "	  #a&M#a&M#a&M#a&MF	G 	 OOD'*!	++( 	KKM		+ 	++ +s5   %C&'CAC C4C&CC#	C&&C/c           
        ddl m} t               }|j                  d d      5 }t	        j
                  |      }t        |      }|D cg c]  }t        t        ||             }} ||      j                  |      }	| j                         5 }
|j                  |
d       |j                  |
       |
j                  |	       d d d        d d d        y c c}w # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   insertrE   rF   T
checkfirstbind)r?   rc   rC   rO   rP   rQ   rR   dictzipvaluesbegindropcreaterN   )rW   rX   rc   r8   r[   rQ   headerr]   paramsrY   cons              r/   create_and_load_irisrq      s    ! D	w	7 7G$f4:;S$s63'(;;d|""6*ZZ\ 	SIIcdI+KKSK!KK	  <	 	 s5   %C'	C%)C'7CC'C'C$	 C''C0c                   d}t        | t        j                        r"| j                         }|j	                  |       y t        dd      }|rQt        | |j                        r;| j                         5 }|j	                  |       d d d        | j                          y ddlm}  ||      }| j                         5 }|j	                  |       d d d        y # 1 sw Y   SxY w# 1 sw Y   y xY w)Nz+CREATE VIEW iris_view AS SELECT * FROM irisadbc_driver_manager.dbapiignoreerrorsr   text)

isinstancesqlite3
ConnectionrM   rN   r   rV   r?   rx   rk   )rW   rY   rZ   adbcrx   rp   s         r/   create_and_load_iris_viewr}      s    8D$**+kkmD)*EhWJtT__5 "#D!"KKM':D "D!" "" "" "s   4C=C$C!$C-c                   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Booleanr2   DateTimer4   Integerr5   r7   r'   typesTextColDateCol
IntDateColIntDateOnlyColFloatColIntColBoolColIntColWithNullBoolColWithNull)	r?   r   r   r2   r   r4   r   r5   r7   )dialectr   r   r2   r   r4   r   r5   r7   	date_type	bool_typerB   r   s                r/   types_table_metadatar      s    	 	 	  8+I"h.GIzHy$y)$|W%)z5!x!y)$) ),E Lr.   c                X   d}d}t        | t        j                        r4| j                         }|j	                  |       |j                  ||       y | j                         5 }|j	                  |       |j                  ||       d d d        | j                          y # 1 sw Y   xY w)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(?, ?, ?, ?, ?, ?, ?, ?, ?)
                )ry   rz   r{   rM   rN   rT   rV   )rW   
types_datarY   ins_stmtrZ   s        r/   create_and_load_types_sqlite3r      s    
DH
 $**+kkmD*-[[] 	2cKKOOHj1	2 			2 	2s   #$B  B)c                    | j                         5 }d}|j                  |       d}|j                  ||       d d d        | j                          y # 1 sw Y   xY w)Na  CREATE TABLE types (
                        "TextCol" TEXT,
                        "DateCol" TIMESTAMP,
                        "IntDateCol" INTEGER,
                        "IntDateOnlyCol" INTEGER,
                        "FloatCol" DOUBLE PRECISION,
                        "IntCol" INTEGER,
                        "BoolCol" BOOLEAN,
                        "IntColWithNull" INTEGER,
                        "BoolColWithNull" BOOLEAN
                    )zy
                INSERT INTO types
                VALUES($1, $2::timestamp, $3, $4, $5, $6, $7, $8, $9)
                )rM   rN   rT   rV   )rW   r   rZ   rY   s       r/    create_and_load_types_postgresqlr     sY    	 *#
 	D
 	j)'** 	KKM+* *s   (AAc                0   ddl m} ddlm} t	        |      } ||      j                  |      }t        | |      ri| j                         5 } | j                         5  |j                  | d       |j                  |        | j                  |       d d d        d d d        y | j                         5  |j                  | d       |j                  |        | j                  |       d d d        y # 1 sw Y   bxY w# 1 sw Y   y xY w# 1 sw Y   y xY w)Nr   rb   EngineTrd   rf   )r?   rc   sqlalchemy.enginer   r   rj   ry   connectrk   rl   rm   rN   )rW   r   r   rc   r   r   rY   s          r/   create_and_load_typesr   5  s    !( )E%=
+D$\\^ 	#t #

4D
1$'T"#	# 	# ZZ\ 	JJtJ-LLdL#LL	 	# #	# 	#	 	s0   D 7C4D 47D4C=	9D  D	Dc           
        ddl m}m}m}m}m} ddlm}  |       } |d| |d |d                  }ddidd	ig}	 ||      j                  |	      }
t        | |      ri| j                         5 } | j                         5  |j                  | d
       |j                  |        | j                  |
       d d d        d d d        nO| j                         5  |j                  | d
       |j                  |        | j                  |
       d d d        t        dd      t        dd      g}t!        |d      S # 1 sw Y   xY w# 1 sw Y   <xY w# 1 sw Y   HxY w)Nr   )r2   r   r5   r7   rc   r   datetzDateColWithTzT)timezonez2000-01-01 00:00:00-08:00z2000-06-01 00:00:00-07:00rd   rf   z2000-01-01 08:00:00UTCtzz2000-06-01 07:00:00name)r?   r2   r   r5   r7   rc   r   r   rj   ry   r   rk   rl   rm   rN   r   r   )rW   r2   r   r5   r7   rc   r   rB   r   datetz_datarY   expected_datas               r/   create_and_load_postgres_datetzr   I  sY     )zH8XvoxQU?V'WXF 8	
 8	
	K &>  -D$\\^ 	#t #DT24(T"#	# 	# ZZ\ 	KKK.MMtM$LL	 	'E2'E2M -o66'# #	# 	#	 	s0   /E
 7D>7E
7E>E	E

EEc                   | j                   j                  d   j                  }| j                  d   }t        |t        j
                        sJ t        j                  |t        g d| j                  d             | j                  dv sJ y )Nr   ffffff@g      @gffffff?皙?Iris-setosa)indexr   ))      )   r   )dtypesiloctype
issubclassnpfloatingtmassert_series_equalr   columnsshape)framepytyper]   s      r/   check_iris_framer   v  st    \\q!&&F
**Q-Cfbkk***V7u}}STU ;;,,,,r.   c                   d| }t        dd      }t        | t        j                        r2| j	                         }|j                  |      j                         d   S |rTt        | |j                        r>| j	                         5 }|j                  |       |j                         d   cd d d        S ddlm} ddl	m
} t        | t              rR	  ||       }|j                         5 } | j                  |      j                         cd d d        |j                          S t        | |      r9| j                         5 } | j                  |      j                         cd d d        S | j                  |      j                         S # 1 sw Y   y xY w# 1 sw Y   nxY w	 |j                          y # j                          w xY w# 1 sw Y   y xY w)Nz SELECT count(*) AS count_1 FROM rs   rt   ru   r   )create_enginer   )r   ry   rz   r{   rM   rN   fetchoner?   r   r   r   strr   exec_driver_sql
scalar_onedispose)rW   
table_namerY   r|   rZ   r   r   engines           r/   
count_rowsr     s   -j\:D%&A(SD$**+kkm{{4 ))+A..	*T4??3[[] 	%cKK<<>!$	% 	% 	-,dC !&t,^^% C//5@@BC C  f% ?4++D1<<>? ? ''-88::%	% 	%C C C   ? ?s<   $FF1 *F		F1 ?GFFF1 1GGc                .     | dddd      }t        |      S )NiodatarP   ziris.csvr
   )datapath	iris_paths     r/   r   r     s    vuj9I	?r.   c                 2    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$@rI   F	r   r   r   r   r   r   r   r   r   2000-01-04 00:00:00i 'Pi\2r-   r-   r.   r/   r   r     sP     ,#&$
	
 ,$&"#
	
 r.   c           
     t    dddddddddd	}t        |       }||j                            j                  |      S )Nr   int64rS   r   )r   keysastype)r   r   dfs      r/   types_data_framer     sN     !!"
F 
:	Bfkkm##F++r.   c                 ,    g d} g d}t        ||       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   s     r/   test_frame1r     s    +GD< T7++r.   c                 ,    g d} g d}t        ||       S )N)r   r   r   ))r   igZ)r   ir   )r   i N  r   )r   i͏r   r   r   r   s     r/   test_frame3r     s    !GD T7++r.   c                   t        | t        j                        r2| j                  d      }|j	                         D cg c]  }|d   	 c}S t        dd      }|rt        | |j                        rtg }| j                         j                         j                         }|D ]?  }|d    |d   D ]0  }|d    |d	   D ]!  }|d
   dk(  s|d   }	|j                  |	       # 2 A |S ddl
m}
  |
|       j                         S c c}w )Nz0SELECT name FROM sqlite_master WHERE type='view'r   rs   rt   ru   catalog_namecatalog_db_schemasdb_schema_namedb_schema_tables
table_typeviewr   inspect)ry   rz   r{   rN   fetchallr   adbc_get_objectsread_all	to_pylistappendr?   r   get_view_names)rW   cr   r|   resultsinfocatalogschematable	view_namer   s              r/   get_all_viewsr     s   $**+LLKL$%JJL1DQ11)*EhWJtT__5G((*335??AD 6'%&:; 6F+,!'(:!; 6 .&8(-l(;I#NN95666 N*4=//11' 2s   Dc                   t        | t        j                        r2| j                  d      }|j	                         D cg c]  }|d   	 c}S t        dd      }|rt        | |j                        rjg }| j                         j                         j                         }|D ]5  }|d   D ]+  }|d   D ]!  }|d   d	k(  s|d
   }|j                  |       # - 7 |S ddl
m}	  |	|       j                         S c c}w )Nz1SELECT name FROM sqlite_master WHERE type='table'r   rs   rt   ru   r   r   r   r   r   r   )ry   rz   r{   rN   r   r   r   r   r   r   r?   r   get_table_names)
rW   r   r   r|   r   r   r   r   r   r   s
             r/   get_all_tablesr    s    $**+LLLM&'jjl3Ua33)*EhWJtT__5G((*335??AD 7%&:; 7F!'(:!; 7 .'9).|)<J#NN:6777 N*4=0022% 4s   C8rW   c                (   t        |t        j                        r8|j                  dt	        j
                  |               |j                          y t        dd      }|rEt        ||j                        r/|j                         5 }|j                  d|  d       d d d        y |j                         5 }t	        j                  |      5 }|j                  |        d d d        d d d        y # 1 sw Y   y xY w# 1 sw Y   xY w# 1 sw Y   y xY w)NzDROP TABLE IF EXISTS rs   rt   ru   zDROP TABLE IF EXISTS "")ry   rz   r{   rN   r   _get_valid_sqlite_namerV   r   rM   rk   r    
drop_table)r   rW   r|   rZ   rp   dbs         r/   r  r  0  s     $**+,S-G-G
-S,TUV **EhWJtT__5 D#4ZLBCD D  .__S) .RMM*-.. .D D. .. .s0   C07DC<D0C9<D	DDc                d   dd l }t        |t        j                        r8|j	                  dt        j                  |               |j                          y t        dd      }|rEt        ||j                        r/|j                         5 }|j	                  d|  d       d d d        y |j                  j                  j                  j                  |       } |j                  d|       }|j                         5 }|j	                  |       d d d        y # 1 sw Y   y xY w# 1 sw Y   y xY w)Nr   zDROP VIEW IF EXISTS rs   rt   ru   zDROP VIEW IF EXISTS "r  )r?   ry   rz   r{   rN   r   r  rV   r   rM   r   r   identifier_preparerquote_identifierrx   rk   )r   rW   r?   r|   rZ   quoted_viewrY   rp   s           r/   	drop_viewr  C  s    $**++C,F,Fy,Q+RST)*EhWJtT__5 B#3I;a@AB B ++--AARRK #:??%9+#GHD "D!" "B B" "s   D?D&D#&D/c               #    K   t        j                  d      } t        j                  d      } | j                  dd|j                  j                  j
                  i| j                  j                        }| t        |      D ]  }t        ||        t        |      D ]  }t        ||        |j                          y w)Nr?   pymysqlz*mysql+pymysql://root@localhost:3306/pandasclient_flag)connect_args	poolclass)pytestimportorskipr   	constantsCLIENTMULTI_STATEMENTSpoolNullPoolr   r  r  r  r   )r?   r  r   r   tbls        r/   mysql_pymysql_enginer  Z  s     $$\2J!!),G%Z%%4#W%6%6%=%=%N%NO//**F
 Lf%  $ f%  3 
NNs   CCc              #  B   K   t        | |       t        |        |  y wNrq   r}   )r  r   s     r/   mysql_pymysql_engine_irisr  k  s      -y923
   c              #  .   K   t        | |d       |  y w)Nr(   r   )r  r   s     r/   mysql_pymysql_engine_typesr"  r  s     .
GD
   c              #  ^   K   | j                         5 }| d d d        y # 1 sw Y   y xY wwr  r   )r  rW   s     r/   mysql_pymysql_connr&  x  s-     		%	%	' 4
     -!	-*-c              #  ^   K   | j                         5 }| d d d        y # 1 sw Y   y xY wwr  r%  )r  rW   s     r/   mysql_pymysql_conn_irisr)  ~  s-     	"	*	*	, 
  r'  c              #  ^   K   | j                         5 }| d d d        y # 1 sw Y   y xY wwr  r%  )r"  rW   s     r/   mysql_pymysql_conn_typesr+    -     	#	+	+	- 
  r'  c               #  H  K   t        j                  d      } t        j                  d        | j                  d| j                  j                        }| t        |      D ]  }t        ||        t        |      D ]  }t        ||        |j                          y w)Nr?   psycopg2z=postgresql+psycopg2://postgres:postgres@localhost:5432/pandasr  
r  r  r   r  r  r   r  r  r  r   )r?   r   r   r  s       r/   postgresql_psycopg2_enginer1    s     $$\2J

#%Z%%G//**F Lf%  $ f%  3 
NNs   B B"c              #  B   K   t        | |       t        |        |  y wr  r  )r1  r   s     r/   postgresql_psycopg2_engine_irisr3    s      3Y?89
$$r  c              #  .   K   t        | |d       |  y w)Npostgresr!  )r1  r   s     r/    postgresql_psycopg2_engine_typesr6    s     4j*M
$$r#  c              #  ^   K   | j                         5 }| d d d        y # 1 sw Y   y xY wwr  r%  )r1  rW   s     r/   postgresql_psycopg2_connr8    r,  r'  c               #  *  K   t        j                  d       ddlm}  d}| j	                  |      5 }| t        |      D ]  }t        ||        t        |      D ]  }t        ||        |j                          d d d        y # 1 sw Y   y xY ww)Nadbc_driver_postgresqlr   dbapiz4postgresql://postgres:postgres@localhost:5432/pandas)
r  r  r:  r<  r   r   r  r  r  rV   )r<  urirW   r   r  s        r/   postgresql_adbc_connr>    s     
01,
@C	s	 t
!$' 	"DdD!	"!$' 	"CsD!	"  s   /BAB>	BBBc              #  *  K   dd l }| }	 |j                  d       	 |j                  d       | y # |j                  $ r |j                          t	        ||       Y Dw xY w# |j                  $ r |j                          t        |       Y bw xY wwNr   r8   	iris_view)adbc_driver_manageradbc_get_table_schemaProgrammingErrorrollbackr`   r}   )r>  r   mgrrW   s       r/   postgresql_adbc_irisrG    s     %D9""6*("";/ J  9'i89
  (!$'(B   B2 A# B+A BA  B#*BBBBc              #     K   dd l }| }	 |j                  d       | y # |j                  $ rK |j                          |D cg c]  }t	        |j                                nc c}w }}t        ||       Y ^w xY ww)Nr   r   )rB  rC  rD  rE  tuplerj   r   )r>  r   rF  rW   entrynew_datas         r/   postgresql_adbc_typesrM    sr     %D9""7+ J  97ABeE%,,.)BBB(x8	9s1   A=  A=#A: A$#A:7A=9A::A=c              #  ^   K   | j                         5 }| d d d        y # 1 sw Y   y xY wwr  r%  )r3  rW   s     r/   postgresql_psycopg2_conn_irisrO    s-     	(	0	0	2 d
  r'  c              #  ^   K   | j                         5 }| d d d        y # 1 sw Y   y xY wwr  r%  )r6  rW   s     r/   postgresql_psycopg2_conn_typesrQ    s-     	)	1	1	3 t
  r'  c               #     K   t        j                  d       t        j                         5 } d|   d d d        y # 1 sw Y   y xY ww)Nr?   
sqlite:///)r  r  r   ensure_cleanr   s    r/   
sqlite_strrU    sA     
%		 "d4&!!" " "s   *A	=	A	AA	c              #    K   t        j                  d      } |j                  | |j                  j                        }| t        |      D ]  }t        ||        t        |      D ]  }t        ||        |j                          y w)Nr?   r/  r0  )rU  r?   r   r   r  s        r/   sqlite_enginerW    s     $$\2J%Z%%jJOO<T<TUF
Lf%  $ f%  3 
NNs   BBc              #  ^   K   | j                         5 }| d d d        y # 1 sw Y   y xY wwr  r%  )rW  rW   s     r/   sqlite_connrY    s-     				  D
  r'  c                    t        j                  d      } |j                  |       }t        ||       t	        |       |j                          | S )Nr?   )r  r  r   rq   r}   r   )rU  r   r?   r   s       r/   sqlite_str_irisr[    sF    $$\2J%Z%%j1F+f%
NNr.   c              #  B   K   t        | |       t        |        |  y wr  r  )rW  r   s     r/   sqlite_engine_irisr]    s     	2m,
r  c              #  ^   K   | j                         5 }| d d d        y # 1 sw Y   y xY wwr  r%  )r]  rW   s     r/   sqlite_conn_irisr_    s-     		#	#	% 
  r'  c                    t        j                  d      } |j                  |       }t        ||d       |j	                          | S )Nr?   r'   )r  r  r   r   r   )rU  r   r?   r   s       r/   sqlite_str_typesra    s@    $$\2J%Z%%j1F&*h7
NNr.   c              #  .   K   t        | |d       |  y w)Nr'   r!  )rW  r   s     r/   sqlite_engine_typesrc  %  s     -X>
r#  c              #  ^   K   | j                         5 }| d d d        y # 1 sw Y   y xY wwr  r%  )rc  rW   s     r/   sqlite_conn_typesre  +  s-     		$	$	& $
  r'  c               #    K   t        j                  d       ddlm}  t	        j
                         5 }d| }| j                  |      5 }| t        |      D ]  }t        ||        t        |      D ]  }t        ||        |j                          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY ww)Nadbc_driver_sqliter   r;  zfile:)r  r  rg  r<  r   rT  r   r   r  r  r  rV   )r<  r   r=  rW   r   r  s         r/   sqlite_adbc_connrh  1  s     
,-(		 ddVn]]3 	4J%d+ &$%&%d+ &3%&KKM	 	 	 s5   0B?B3	AB'B3	B?'B0	,B33B<8B?c              #  *  K   dd l }| }	 |j                  d       	 |j                  d       | y # |j                  $ r |j                          t	        ||       Y Dw xY w# |j                  $ r |j                          t        |       Y bw xY wwr@  )rB  rC  rD  rE  r^   r}   )rh  r   rF  rW   s       r/   sqlite_adbc_irisrj  A  s     %D6""6*("";/ J  6$T956
  (!$'(rH  c              #  v  K   dd l }| }	 |j                  d       | y # |j                  $ r |j                          g }|D ]Q  }t	        |d         |d<   |d   t	        |d         |d<   |j                  t        |j                                      S t        ||       |j                          Y w xY ww)Nr   r   r   r   )
rB  rC  rD  rE  intr   rJ  rj   r   rV   )rh  r   rF  rW   rL  rK  s         r/   sqlite_adbc_typesrm  S  s     %D""7+ J  
 	3E"5#34E)&'3+.u5F/G+H'(OOE%,,.12		3 	&dH5
s&   B9  B9BB63B95B66B9c               #     K   t        j                  t        j                  d            5 } | 5 }| d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY ww)N:memory:)
contextlibr   rz   r   closing_connrW   s     r/   sqlite_buildinrs  i  sW     			GOOJ7	8 L 	TJ	 	 	 s1   )AAAA	AA		AAAc              #  B   K   t        | |       t        |        |  y wr  )r^   r}   )rs  r   s     r/   sqlite_buildin_irisru  p  s      ;n-
r  c              #     K   |D cg c]  }t        |j                                }}t        | |       |  y c c}w wr  )rJ  rj   r   )rs  r   rK  s      r/   sqlite_buildin_typesrw  w  s:     5?@E%'@J@!.*=
 As   ? :?r  )marksr&  r  r)  r"  r+  r1  r8  r3  rO  r6  rQ  )rW  rY  rU  )r]  r_  r[  )rc  re  ra  rh  r>  rG  rj  rM  rm  rs  ru  rw  c                P    |j                  |       } |j                  d| dd       y )Ntestr   Fr   rp   	if_existsr   )getfixturevalueto_sql)rW   r   requests      r/   test_dataframe_to_sqlr    s+     ""4(DFNr.   c                    | dk(  r:|j                   j                  t        j                  j	                  dd             |j                  |       } |j                  d d }|j                  d| dd	       y )
Nr>  z7postgres ADBC driver cannot insert index with null typeTreasonstrictr   rz  r   Fr{  )node
add_markerr  markxfailr}  r   r~  )rW   r   r  empty_dfs       r/   test_dataframe_to_sql_emptyr    sr    %%KKP  	
 ""4(D#HOOTXUOKr.   c                   t        j                  d       t        t        j                  dgd      t        j                  t        ddd      gd      t        j                  t        ddd      gd      t        j                  t        d      gd      t        j                  d	gd
      d      }d| v r,| dk(  r|j                  dg      }t        r	t        }d}nd }d}nt        }d}|j                  |       } t        j                  ||d      5  |j                  d| dd       d d d        y # 1 sw Y   y xY w)NpyarrowrI   zint8[pyarrow]rA     timestamp[ns][pyarrow]zdate32[day][pyarrow]zduration[ns][pyarrow]azstring[pyarrow])rl  r   r   r   stringr|   rh  r   r   zis_sparse is deprecated zthe 'timedelta'F)matchcheck_stacklevel
test_arrowreplacer{  )r  r  r   pdarrayr   r   r   rl   r   DeprecationWarningUserWarningr}  r   assert_produces_warningr~  )rW   r  r   exp_warningmsgs        r/   "test_dataframe_to_sql_arrow_dtypesr    s&    	"	88QC7$1%&.F HHd4A./7MN9Q<.8OPhhu,=>	


B ~%%+/B,K+CKC!""4(D		#	#KsU	S Q
		|%	PQ Q Qs   D44D=c           
         t        j                  d       t        dt        j                  t        ddd      |gd      i      }|j                  |       } |j                  d| dd	
       y )Nr  r   r  rI   r  r  r  r  Fr{  )r  r  r   r  r  r   r}  r~  )rW   r  nulls_fixturer   s       r/   *test_dataframe_to_sql_arrow_dtypes_missingr    si     	"	$1%}5=U	

B ""4(DII<TYeILr.   methodmultic                t   |dk(  r>d| v r:|j                   j                  t        j                  j	                  dd             |j                  |       } t        | d      5 }|j                  |d|       |j                  d      sJ 	 d d d        t        | d      t        |      k(  sJ y # 1 sw Y   $xY w)	Nr  r|   z)'method' not implemented for ADBC driversTr  need_transaction
test_framer  )r  r  r  r  r  r}  r#   r~  	has_tabler   len)rW   r  r   r  	pandasSQLs        r/   test_to_sqlr    s     Vt^KKB4  	
 ""4(D	4$	7 19l6B""<0001 dL)S-====1 1s   "(B..B7zmode, num_row_coef)r  rI   )r   rJ   c                   |j                  |       } t        | d      5 }|j                  |dd       |j                  |d|       |j                  d      sJ 	 d d d        t	        | d      |t        |      z  k(  sJ y # 1 sw Y   'xY w)NTr  r  failr|  r}  r#   r~  r  r   r  )rW   modenum_row_coefr   r  r  s         r/   test_to_sql_existr  +  s     ""4(D	4$	7 19lfEldC""<0001 dL)\C<L-LLLL	1 1s   <BBc                D   |j                  |       } t        | d      5 }|j                  |dd       |j                  d      sJ d}t	        j
                  t        |      5  |j                  |dd       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NTr  r  r  r  z!Table 'test_frame' already existsr  )r}  r#   r~  r  r  raises
ValueError)rW   r   r  r  r  s        r/   test_to_sql_exist_failr  6  s    ""4(D	4$	7 J9lfE""<0001]]:S1 	J[,&I	JJ J
	J 	JJ Js$   AB$B
9B
B	BBc                   |j                  |       } t        d|       }t        |       t        j                  d|       }t        |       t        j                  d|       }|j
                  dk(  sJ d|j                  v sJ y )NSELECT * FROM irisSELECT * FROM iris where 0=1r   r   r:   )r}  r$   r   r  read_sqlr   r   rW   r  
iris_frames      r/   test_read_iris_queryr  B  sy    ""4(D 4d;JZ 148JZ ;TBJv%%%:-----r.   c                   d| v r:|j                   j                  t        j                  j	                  dd             |j                  |       } t        t        d| d            }t        |       t        t        j                  d| d            }t        |       t        t        j                  d| d            }|j                  d	k(  sJ d
|j                  v sJ y )Nr|   ,'chunksize' not implemented for ADBC driversTr  r     	chunksizer  r  r:   )r  r  r  r  r  r}  r   r$   r   r  r  r   r   r  s      r/   test_read_iris_query_chunksizer  N  s    ~KKE  	
 ""4(D';TQOPJZ $8$!LMJZ $BDTUVWJv%%%:-----r.   c                   d| v r:|j                   j                  t        j                  j	                  dd             |j                  |       } ddlm}m}m	}m
}  |       }t        | t              r ||       n| } |d||      }t         ||      | d	d
d      }	t        |	       t        | t              r|j                          y y )Nr|   r  Tr  r   )r5   r7   r   selectr8   )autoload_withr   r   r   lengthro   )r  r  r  r  r  r}  r?   r5   r7   r   r  ry   r   r$   r   r   )
rW   r  r5   r7   r   r  rB   autoload_conr8   r  s
             r/   .test_read_iris_query_expression_with_parameterr  a  s    ~KKE  	
 ""4(D  zH*4T3*?=&TL>DtdMS#IJ Z $ r.   c                4   d| v r:|j                   j                  t        j                  j	                  dd             |d   j                         D ]  \  }}|| v s n t        d|  d      |j                  |       } t        || d	      }t        |       y )
Nr|   r  Tr  r*   zNo part of z( found in sql_strings['read_parameters']r   r   r  )
r  r  r  r  r  itemsKeyErrorr}  r$   r   )rW   r  r0   r  queryr  s         r/   *test_read_iris_query_string_with_parameterr  }  s    ~KKE  	
 !!2399; U	E:U TF*RSTT""4(Dt4HIJZ r.   c                    |j                  |       } t        d|       }t        |       t        j                  d|       }t        |       y )Nr8   )r}  r%   r   r  r  r  s      r/   test_read_iris_tabler    s@     ""4(D-JZ VT*JZ r.   c                <   d| v r9|j                   j                  t        j                  j	                  d             |j                  |       } t        t        d| d            }t        |       t        t        j                  d| d            }t        |       y )Nr|   +chunksize argument NotImplemented with ADBCr  r8   r  r  )r  r  r  r  r  r}  r   r%   r   r  r  r  s      r/   test_read_iris_table_chunksizer    s}    ~KK%RS	
 ""4(DvtqABJZ FDA>?JZ r.   c                   |j                  |       } g fd}t        | d      5 }|j                  |d|       |j                  d      sJ 	 d d d        dgk(  sJ t	        | d      t        |      k(  sJ y # 1 sw Y   ,xY w)Nc           	         j                  d       |D cg c]  }t        t        ||             }}|j                  | j                  j                         |       y c c}w )NrI   )r   rh   ri   rN   r   rc   )pd_tablerW   r   	data_iterr]   r   checks         r/   samplez$test_to_sql_callable.<locals>.sample  sL    Q09:Ss^$::X^^**,d3 ;s   A Tr  r  r  rI   r  )rW   r   r  r  r  r  s        @r/   test_to_sql_callabler    s    ""4(DE4
 
4$	7 19l6B""<0001 QC<<dL)S-====	1 1s   (A;;Bc                   | }|dk(  r/|j                  t        j                  j                  d             |j	                  |       } t        j                  d|       }t        |j                  j                  j                  t        j                        sJ t        |j                  j                  j                  t        j                        sJ d|v r:t        |j                  j                  j                  t        j                         s<J t        |j                  j                  j                  t        j                        sJ t        |j"                  j                  j                  t        j                        sJ d|v r1t        |j$                  j                  j                  t&              sJ y t        |j$                  j                  j                  t        j                        sJ y )Nrw  ;sqlite_buildin connection does not implement read_sql_tabler  r   r)   )applymarkerr  r  r  r}  r   r%   r   r   rA   r   r   r   r   integerr   bool_r   r   objectrW   r  	conn_namer   s       r/   test_default_type_conversionr    sn   I**KKT  	
 ""4(D			GT	*Bbkk'',,bkk:::biioo**BJJ777 y "****//:::"****//<<< b''--22BKK@@@ y ",,2277@@@",,2277EEEr.   c                   |j                  |       } ddlm} ddlm} t        g dg dd      }|j                  d| d	       d
} ||      }t        | |      rD| j                         5 }|j                         5  |j                  |       d d d        d d d        n*| j                         5  | j                  |       d d d        t        j                  d|       }t        j                  ||       t        j                  d|       }t        j                  ||       y # 1 sw Y   xY w# 1 sw Y   nxY w# 1 sw Y   zxY w)Nr   rw   r   rI   rJ   rK   皙?r   333333?r  br  Fr   rp   r   z}DROP PROCEDURE IF EXISTS get_testdb;

    CREATE PROCEDURE get_testdb ()

    BEGIN
        SELECT * FROM test_frame;
    ENDzCALL get_testdb();)r}  r?   rx   r   r   r   r~  ry   r   rk   rN   r   r$   r   assert_frame_equalr  )	rW   r  rx   r   r   procengine_connres1res2s	            r/   test_read_procedurer    s   ""4(D
  (	9	:BII<TI7D :D$\\^ 	*{""$ *##D)*	* 	* ZZ\ 	LL	 2D9D"d# <<,d3D"d#* *	* 	*	 	s0   *D-;D!D-.D9!D*	&D--D69Eexpected_countrJ   zSuccess!c                    fd}|j                  |       } t        ddgddgddgd      }|j                  d	| d
|      }|	J |k(  sJ t        j                  d	|       }t        j                  ||       y )Nc           	        |j                   }|j                         5 }t               }t        j                  |      }|j                  |       |j                  d       dj                  |D cg c]  }d| d
 c}      }	| j                  r| j                   d| j                   }
n| j                  }
d|
 d|	 d}|j                  ||       d d d        S c c}w # 1 sw Y   S xY w)	Nr   z, r  .zCOPY z (z) FROM STDIN WITH CSV)r   file)
connectionrM   r	   rP   writer	writerowsseekjoinr   r   copy_expert)r   rW   r   r  
dbapi_connrZ   s_bufr  kr   r   	sql_queryr  s               r/   psql_insert_copyzBtest_copy_from_callable_insertion_method.<locals>.psql_insert_copy  s    __
  	7CJEZZ&FY'JJqMii4 8a1QCq 89G|| %~Quzzl;
"ZZ

|2gY6KLIOO	O6	7  !9	7 s   AC"/C
<AC"C""C,rI   rJ   r  r   r  ncol1col2col3r  F)r   rp   r   r  r}  r   r~  r   r%   r   r  )rW   r  r  r  expectedresult_countresults    `     r/   (test_copy_from_callable_insertion_methodr    s    & ""4(D1a&3*sCjQRH??t59I # L ###~---d3F&(+r.   c                <   |j                  |       } ddlm ddlm} ddlm} fd} |d      }t        | |      rD| j                         5 }|j                         5  |j                  |       d d d        d d d        n*| j                         5  | j                  |       d d d        t        g dgt        d      	      }|j                  d
| dd       t        g dgt        d      	      }|j                  d
| dd|      }	t        j                  d
|       }
t!        j"                  |
|       |	dk(  sJ t        j$                  | d      5 }|j'                  d
       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   rb   r   rw   c           	         |D cg c]  }t        t        ||             }} | j                        j                  |      j	                  dg      }|j                  |      }|j                  S c c}w )Nr  )index_elements)rh   ri   r   rj   on_conflict_do_nothingrN   rowcount	r   rW   r   r  r]   r   rY   r  rc   s	           r/   insert_on_conflictzHtest_insertion_method_on_conflict_do_nothing.<locals>.insert_on_conflict/  sj    09:Ss^$::5;;VD\##C5#9 	
 d# ;s   A3zx
    CREATE TABLE test_insert_conflict (
        a  integer PRIMARY KEY,
        b  numeric,
        c  text
    );
    rI    @r  abcr   test_insert_conflictr   Fr{  rI   g	@r  r   rp   r   r|  r  Tr  )r}  sqlalchemy.dialects.postgresqlrc   r   r   sqlalchemy.sqlrx   ry   r   rk   rN   r   listr~  r   r%   r   r  r    r  )rW   r  r   rx   r  
create_sqlrp   r  	df_insertinsertedr  r  rc   s               @r/   ,test_insertion_method_on_conflict_do_nothingr&  &  s    ""4(D5(# 	J $\\^ 	(s (J'(	( 	( ZZ\ 	%LL$	% -$u+>HOO#   =/4;?I#!   H  6=F&(+q== 
	5 5345 51( (	( 	(	% 	%*5 5<   E:E.1E:FF.E7	3E::FFFc                T   d| v sd| v r/|j                  t        j                  j                  d             |j	                  |       } t        g dg dgt        d            }|j                  d	| d
dd       t        j                  d	| d      }t        j                  ||       y )Nr'   r(   z2test for public schema only specific to postgresqlr  r  )rJ   g@r  r  r   test_public_schemar   Fpublic)r   rp   r|  r   r   r   )r  r  r  r  r}  r   r"  r~  r   r%   r   r  )rW   r  	test_datadf_outs       r/   test_to_sql_on_public_schemar.  `  s    47d?KKK  	
 ""4(D=-8$u+NI!    4d8LF)V,r.   c                <   |j                  |       } ddlm ddlm} ddlm} fd} |d      }t        | |      rD| j                         5 }|j                         5  |j                  |       d d d        d d d        n*| j                         5  | j                  |       d d d        t        g dgt        d      	      }|j                  d
| dd       t        g dgt        d      	      }|j                  d
| dd|      }	t        j                  d
|       }
t!        j"                  |
|       |	dk(  sJ t        j$                  | d      5 }|j'                  d
       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   rb   r   rw   c           	     D   |D cg c]  }t        t        ||             }} | j                        j                  |      }|j	                  |j
                  j                  |j
                  j                        }|j                  |      }|j                  S c c}w )N)r  r   )
rh   ri   r   rj   on_duplicate_key_updater%  r  r   rN   r  r  s	           r/   r  zDtest_insertion_method_on_conflict_update.<locals>.insert_on_conflict  s|    09:Ss^$::ekk"))$/++dmmoo+Qd#	 ;s   Bzv
    CREATE TABLE test_insert_conflict (
        a INT PRIMARY KEY,
        b FLOAT,
        c VARCHAR(10)
    );
    r  r  r   r  r   Fr{  r  r  rJ   Tr  )r}  sqlalchemy.dialects.mysqlrc   r   r   r!  rx   ry   r   rk   rN   r   r"  r~  r   r%   r   r  r    r  )rW   r  r   rx   r  r#  rp   r   r  r%  r  r  rc   s               @r/   (test_insertion_method_on_conflict_updater3  x  s    ""4(D0(# 	J $\\^ 	(s (J'(	( 	( ZZ\ 	%LL$	% 
M?DK	8BII)txuIU-$u+>H#!  H  6=F&(+q== 
	5 5345 5-( (	( 	(	% 	%&5 5r'  c                   |j                  |       } ddlm} ddlm} dt        j                         j                   }dt        j                         j                   } |d| d| d| d	| d
	      }t        | |      rD| j                         5 }|j                         5  |j                  |       d d d        d d d        n*| j                         5  | j                  |       d d d        t        ||       }t        dgdd      }	t        j                  ||	       y # 1 sw Y   nxY w# 1 sw Y   GxY w# 1 sw Y   SxY w)Nr   r   rw   group_group_view_z
    CREATE TABLE zF (
        group_id INTEGER,
        name TEXT
    );
    INSERT INTO z- VALUES
        (1, 'name');
    CREATE VIEW z
    AS
    SELECT * FROM z;
    rI   r   group_idr   )r}  r   r   r!  rx   uuiduuid4hexry   r   rk   rN   r%   r   r   r  )
rW   r  r   rx   r   r   sql_stmtrp   r  r  s
             r/   test_read_view_postgresr=    s>    ""4(D(#$**,**+,Jdjjl../0I    , 
	H $\\^ 	&s &H%&	& 	& ZZ\ 	#LL"	#It,Fqc6:;H&(+& &	& 	&	# 	#s0   D-"D!4D-D9!D*	&D--D69Ec                    d}d}d}| j                  |       | j                  |       | j                  |       t        j                  d|       }t        dgdd      }t	        j
                  ||       y )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_viewrI   r   r7  )rN   r  r  r   r   r  )rs  create_tableinsert_intocreate_viewr  r  s         r/   test_read_view_sqliterB    su    LKK
 <(;';'[[3^DFqc6:;H&(+r.   c                    t        j                  t        d      5  t        j                  t
        d      5  t        j                  d|        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz+pandas.io.sql.execute requires a connectionr  P`pandas.io.sql.execute` is deprecated and will be removed in the future version.select * from iris)r  r  	TypeErrorr   r  FutureWarningr   rN   )r]  s    r/   test_execute_typeerrorrH    sq    	y(U	V B''5
 	B
 KK,.@A	BB B	B 	BB Bs"   A,A A, A)	%A,,A5c                    t        j                  t        d      5  t        j                  d|        d d d        y # 1 sw Y   y xY w)NrD  r  rE  )r   r  rG  r   rN   )r_  s    r/   test_execute_deprecatedrJ    s?    		#	#1
 <
 	(*:;< < <s	   <Ac                <    d| v ryd| v ryd| v ryt        d|        )Nr)   r'   r(   zunsupported connection: )r  )r  s    r/   flavorrL    s6    y 	Y		I	
/	{;
<<r.   c                   d| v r:|j                   j                  t        j                  j	                  dd             | }|j                  |       } |d   t        |         }d}t        |       5 }|j                         5  |j                  ||      }d d d        d d d        t               y # 1 sw Y   xY w# 1 sw Y   !xY w)Nr|   )'params' not implemented for ADBC driversTr  r*   r  r  r  r  r  r  r  r}  rL  r#   run_transaction
read_queryr   rW   r  r0   r  r  ro   r  r  s           r/   test_read_sql_iris_parameterrS  	  s    ~KKB  	
 I""4(D)*6)+<=E!F	4	  DI&&( 	D"--eF-CJ	DD Z 	D 	DD Ds$   0B=B1B=1B:	6B==Cc                   d| v r:|j                   j                  t        j                  j	                  dd             | }|j                  |       } |d   t        |         }ddd}t        |       5 }|j                         5  |j                  ||	      }d d d        d d d        t               y # 1 sw Y   xY w# 1 sw Y   !xY w)
Nr|   rN  Tr  r+   r   r   r  r  rO  rR  s           r/   "test_read_sql_iris_named_parameterrU    s    ~KKB  	
 I""4(D/0	1BCE#s3F	4	  DI&&( 	D"--eF-CJ	DD Z 	D 	DD Ds$   3C B4C 4B=	9C  C	c                   d| v sd| v r3d| vr/|j                  t        j                  j                  d             | }|j	                  |       } |d   t        |         }t        |       5 }|j                         5  |j                  |d       }d d d        d d d        t               y # 1 sw Y   xY w# 1 sw Y   !xY w)Nr(   r)   r|   zbroken testr  r,   r  )
r  r  r  r  r}  rL  r#   rP  rQ  r   )rW   r  r0   r  r  r  r  s          r/   ,test_read_sql_iris_no_parameter_with_percentrW  0  s    $<4/F$4FFKK--]-CDI""4(D9:6);LME	4	  BI&&( 	B"--eD-AJ	BB Z 	B 	BB Bs$   +B8<B,B8,B5	1B88Cc                h    |j                  |       } t        j                  d|       }t        |       y )NzSELECT * FROM iris_view)r}  r   r$   r   r  s      r/   test_api_read_sql_viewrY  C  s-    ""4(D##$=tDJZ r.   c                >   d| v r9|j                   j                  t        j                  j	                  d             |j                  |       } d}t        j                  || d      }t        j                  ||       }t        j                  t        |      |       y )Nr|   r  r  z1SELECT * FROM iris_view WHERE "SepalLength" < 0.0r   r  )r  r  r  r  r  r}  r   r$   r   r  r   )rW   r  r  
with_batchwithout_batchs        r/   *test_api_read_sql_with_chunksize_no_resultr]  J  s    ~KK%RS	
 ""4(D?E##E41=J&&ud3M&,m<r.   c                *   |j                  |       } t        j                  d|       r1t        j                  | d      5 }|j	                  d       d d d        t        j
                  |d|        t        j                  d|       sJ y # 1 sw Y   9xY w)Nr   Tr  )r}  r   r  r    r  r~  )rW   r  r   r  s       r/   test_api_to_sqlr_  W  sy    ""4(D
}}]D)__TD9 	0Y  /	0 JJ{M40==---		0 	0s   B		Bc                   |j                  |       } t        j                  d|       r1t        j                  | d      5 }|j	                  d       d d d        t        j
                  |d| d       t        j                  d|       sJ d}t        j                  t        |      5  t        j
                  |d| d       d d d        y # 1 sw Y   zxY w# 1 sw Y   y xY w)Ntest_frame2Tr  r  r  z"Table 'test_frame2' already existsr  )	r}  r   r  r    r  r~  r  r  r  )rW   r  r   r  r  s        r/   test_api_to_sql_failrb  b  s    ""4(D
}}]D)__TD9 	0Y  /	0 JJ{M46B==---
.C	z	- G

;tvFG G	0 	0G Gs   C
'C
CCc                   |j                  |       } t        j                  d|       r1t        j                  | d      5 }|j	                  d       d d d        t        j
                  |d| d       t        j
                  |d| d       t        j                  d|       sJ t        |      }t        | d      }||k(  sJ y # 1 sw Y   rxY w)Nr   Tr  r  r  r  r}  r   r  r    r  r~  r  r   rW   r  r   r  num_entriesnum_rowss         r/   test_api_to_sql_replacerh  q  s    ""4(D
}}]D)__TD9 	0Y  /	0 JJ{M46BJJ{M49E==---k"K$.H{"""	0 	0s   CCc                   |j                  |       } t        j                  d|       r1t        j                  | d      5 }|j	                  d       d d d        t        j
                  |d| d      dk(  sJ t        j
                  |d| d      dk(  sJ t        j                  d|       sJ dt        |      z  }t        | d      }||k(  sJ y # 1 sw Y   xY w)	Ntest_frame4Tr  r  r  rL   r   rJ   rd  re  s         r/   test_api_to_sql_appendrk    s    ""4(D
}}]D)__TD9 	0Y  /	0 ::k=$&IQNNN ::k=$(KqPPP==---c+&&K$.H{"""	0 	0   CCc                V   |j                  |       } t        j                  d|       r1t        j                  | d      5 }|j	                  d       d d d        t        j
                  |d| d       t        j                  d|       }t        j                  ||       y # 1 sw Y   OxY w)Ntest_frame5Tr  Fr   zSELECT * FROM test_frame5)	r}  r   r  r    r  r~  r  r   r  )rW   r  r   r  r  s        r/   test_api_to_sql_type_mappingrp    s    ""4(D
}}]D)__TD9 	0Y  /	0 JJ{M4u=\\5t<F+v.	0 	0s   BB(c                   |j                  |       } t        j                  d|       r1t        j                  | d      5 }|j	                  d       d d d        t        t        j                  dd      d      }t        j                  |d| d	
       t        j                  d|       }t        j                  |j                         |       y # 1 sw Y   xY w)Ntest_seriesTr  r   r   r  seriesr   Fro  zSELECT * FROM test_series)r}  r   r  r    r  r   r   aranger~  r$   r   r  to_frame)rW   r  r  ss2s        r/   test_api_to_sql_seriesrx    s    ""4(D
}}]D)__TD9 	0Y  /	0 	ryy'*:AJJq-U3			7	>B!**,+	0 	0rl  c                2   | }|j                  |       } t        j                  d|       r1t        j                  | d      5 }|j	                  d       d d d        t        j
                  |d|        t        j                  d|       }d|v r|j                  ddi	      }|j                  |_        |j                  dd
       |j                  j                  t               d |j                  _        t        j                  ||       y # 1 sw Y   xY w)Ntest_frame_roundtripTr  rp   "SELECT * FROM test_frame_roundtripr|   __index_level_0__level_0r   inplace)r}  r   r  r    r  r~  r$   renamer   	set_indexr   rl  r   r   r  rW   r  r   r  r  r  s         r/   test_api_roundtripr    s    I""4(D
}}+T2__TD9 	9Y  !78	9 JJ{2= D$OF (;Y'GH$$FL
Y-
LLFLL&+.	9 	9s   DDc                   d| v r9|j                   j                  t        j                  j	                  d             |j                  |       } t        j                  d|       r1t        j                  | d      5 }|j                  d       d d d        t        j                  |d| dd	       t        j                  d
|       }t        j                  ||       y # 1 sw Y   QxY w)Nr|   r  r  rz  Tr  FrJ   )rp   r   r  r|  r{  )r  r  r  r  r  r}  r   r  r    r  r~  r$   r   r  )rW   r  r   r  r  s        r/   test_api_roundtrip_chunksizer    s    ~KK%RS	
 ""4(D
}}+T2__TD9 	9Y  !78	9 JJ  D$OF&+.	9 	9s   <CC'c                    |j                  |       } t        j                  |       5 }|j                  d      }|j	                         }|j                          d d d        t              g dk(  sJ y # 1 sw Y   xY wNr  r   )r}  r   r#   rN   r   rU   r"  )rW   r  
pandas_sqliris_resultsr]   s        r/   test_api_execute_sqlr    sy     ""4(D			t	$ 
!))*>?##% 9;;;;	 s   2A44A=c           
     l   | }|j                  |       } t        j                  d|       }d|v s>d|v s:t        |j                  j
                  j                  t        j                        rJ t        j                  d| dg      }t        |j                  j
                  j                  t        j                        sJ |j                  j                         t        dddd	d	d	      t        ddd
d	d	d	      gk(  sJ t        j                  d| ddi      }t        |j                  j
                  j                  t        j                        sJ |j                  j                         t        dddd	d	d	      t        ddd
d	d	d	      gk(  sJ t        j                  d| dg      }t        |j                  j
                  j                  t        j                        sJ |j                  j                         t        dddd	d	d	      t        dddd	d	d	      gk(  sJ t        j                  d| ddi      }t        |j                  j
                  j                  t        j                        sJ |j                  j                         t        dddd	d	d	      t        dddd	d	d	      gk(  sJ t        j                  d| ddi      }t        |j                  j
                  j                  t        j                        sJ |j                  j                         t        d      t        d      gk(  sJ y )NSELECT * FROM typesr(   r5  r   parse_datesi  rI   rK   r   rL   %Y-%m-%d %H:%M:%Sr   i        i  rv  r   z%Y%m%dz
2010-10-10z
2010-12-12)r}  r   r$   r   r   rA   r   r   
datetime64tolistr   r   r   r  s       r/   test_api_date_parsingr    s    I""4(D 
		14	8By J)$;bjj..33R]]CCC			14i[	QBbjj&&++R]];;;::$1aA&$1aA&#   
 
		 34
B
 bjj&&++R]];;;::$1aA&$1aA&#   
 
		14l^	TBbmm))..>>>==!$B1a($1aA&&   
 
		t,1D
B bmm))..>>>==!$B1a($1aA&&   
 
		%x0
B
 b''--22BMMBBB##%,,*   r.   error)rt   raisecoercezread_sql, text, moder  )r?   fallbackr   r?   c                   | }|j                  |       } |dk(  r4|dk(  r/|j                  t        j                  j	                  d             |j                  ddi      } ||| dd|ii      }	d	|v r6|	d
   j                  t              |	d
<   |	d   j                  t              |	d<   |dk(  r2|j                  dddd      }t        s|d   j                  d      |d<   t        j                  |	|       y )Nr   rw  z failing combination of argumentsr  r   datetime64[ns]rv   )rp   r  r5  r   r   rM  int32)r   r   r   zdatetime64[us])r}  r  r  r  r  r   rl  rS   r   r   r  )
rW   r  r  rx   r  r  r   r  r  r  s
             r/   !test_api_custom_dateparsing_errorr    s   $ I""4(Dw9(>>KK%GH	
  &&	3C'DEH%(
F Y"9-44S9y$*+<$=$D$DU$K !++??%")!
 $"*9"5"<"<=M"NHY&(+r.   c                D   |j                  |       } t        j                  d| dddg      }t        |j                  j
                  j                  t        j                        sJ t        |j                  j
                  j                  t        j                        sJ y )Nr  r   r   )	index_colr  )
r}  r   r$   r   r   rA   r   r   r  r   rW   r  r   s      r/   test_api_date_and_indexr  U  s}     ""4(D			-	
B bhhnn))2==999bmm))..>>>r.   c           	     f   | }|j                  |       } t        j                  d|       r1t        j                  | d      5 }|j	                  d       d d d        t        t        ddgd            j                         }|dk(  r9|j                  j                  t        j                  j                  d	
             d|v rt        rt        }n	d }nt        }t!        j"                  |d      5  |j%                  d|       }d d d        dk(  sJ t        j&                  d|       }|dk(  r>t        t)        j*                  dddd      t)        j*                  dddd      gd      }n|d   j-                  d      }t!        j.                  |d   |       y # 1 sw Y   IxY w# 1 sw Y   xY w)Ntest_timedeltaTr  z00:00:01z00:00:03foor   rh  z.sqlite ADBC driver doesn't implement timedeltar  r|   F)r  r   rp   rJ   zSELECT * FROM test_timedeltar>  r   i@B )monthsdaysmicrosecondsnanosecondsi- r   )r}  r   r  r    r  r   r   ru  r  r  r  r  r  r   r  r  r   r  r~  r$   r  
DateOffsetr   r   )	rW   r  r  r  r   r  r  r  r  s	            r/   test_api_timedeltar  d  s    I""4(D
}}%t,__TD9 	3Y  !12	3 
fj*5EB	C	L	L	NB&&KKG  	
 ,KK!		#	#K%	H Byy&6DyAB1 >EF** QQWRSTQQWRST 
 e9##G,6%=(3M	3 	3(B Bs   F0F'F$'F0c                    | }|j                  |       } t        dddgi      }d|v rd}nd}t        j                  t        |      5  |j                  d| 	      J 	 d d d        y # 1 sw Y   y xY w)
Nr  y      ?      ?y               @r|   zdatatypes not supportedzComplex datatypes not supportedr  test_complexr{  )r}  r   r  r  r  r~  )rW   r  r  r   r  s        r/   test_api_complex_raisesr    sx    I""4(D	C&"&	'B'/	z	- ;yyTy2:::; ; ;s   A''A0zindex_name,index_label,expected))NNr   )Nother_labelr  )
index_nameNr  )r  r  r  )r   N0)Nr   r  c                   d| v r9|j                   j                  t        j                  j	                  d             |j                  |       } t        j                  d|       r1t        j                  | d      5 }|j                  d       d d d        t        dt        d      i      }||j                  _        d	}t        j                  |d| |
       t        j                  ||       }|j                   d   |k(  sJ y # 1 sw Y   vxY w)Nr|   -index_label argument NotImplemented with ADBCr  test_index_labelTr  r  rL   SELECT * FROM test_index_label)index_labelr   )r  r  r  r  r  r}  r   r  r    r  r   ranger   r   r~  r$   r   )	rW   r  r  r  r  r  
temp_framer  r   s	            r/   test_api_to_sql_index_labelr    s    & ~KK%TU	
 ""4(D
}}'.__TD9 	5Y  !34	5 FE!H-.J&J,EJJz-tMud+E==x'''	5 	5s   <DDc                   | }d|v r1|j                  t        j                  j                  dd             n=d|v r9|j                  j                  t        j                  j                  d             |j                  |       } t        j                  d|       r1t        j                  | d	
      5 }|j                  d       d d d        d}t        dt        d      it        j                  ddg            }t        j                  |d|       }||k(  sJ t        j                   d|       }|j"                  d   dk(  sJ |j"                  d   dk(  sJ t        j                  |d| dddg      }||k(  sJ t        j                   d|       }|j"                  d d j%                         ddgk(  sJ ddg|j&                  _        t        j                  |d| d      }||k(  sJ t        j                   d|       }|j"                  d d j%                         ddgk(  sJ t        j                  |d| dddg      }||k(  sJ t        j                   d|       }|j"                  d d j%                         ddgk(  sJ d}t        j*                  t,        |      5  t        j                  |d| dd       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr(   z/MySQL can fail using TEXT without length as keyFr  r|   r  r  r  Tr  rL   r  )A0A1)B0B1ro  r  r   r~  rI   level_1r  r   r   )r|  r  rJ   r  r   r   zALength of 'index_label' should match number of levels, which is 2r  )r  r  r  r  r  r  r}  r   r  r    r  r   r  r   from_productr~  r$   r   r  r   namesr  r  )	rW   r  r  r  expected_row_countr  r  r   r  s	            r/   &test_api_to_sql_index_label_multiindexr    s   I)KKHQV  	

 
9	KK%TU	
 ""4(D
}}'.__TD9 	5Y  !34	5 	q%%|\&BCJ ZZ
$6=F''''?FE==y(((==y((( ZZ#JF ''''?FE==!##%#s333 "3ZJZZ
$6	RF''''?FE==!##%#s333 ZZ#JF ''''?FE==!##%#s333
MC	z	- 


	

 
a	5 	5`
 
s   3K K K
Kc                   |j                  |       } t        j                  d|       r1t        j                  | d      5 }|j	                  d       d d d        t        j                  ddgg dddg	      }|j                  d| 
       t        j                  d| ddg      }t        j                  ||d       y # 1 sw Y   mxY w)Ntest_multiindex_roundtripTr  rI   r  line1rJ         ?line2r   r   r   r   r   r   r   r  z'SELECT * FROM test_multiindex_roundtripr  check_index_type)r}  r   r  r    r  r   from_recordsr~  r$   r   r  )rW   r  r  r   r  s        r/   test_api_multiindex_roundtripr    s    ""4(D
}}0$7__TD9 	>Y  !<=	> 
			-.Cj
B II.DI914C:F "ft<	> 	>s   B==CrA   r   r   c                   | }|j                  |       } t        j                  d|       r1t        j                  | d      5 }|j	                  d       d d d        t        ddgddggdd	g
      }|j                  d|       dk(  sJ |j                  |      }d|v rd}nd}t        j                  || |      }t        j                  ||       y # 1 sw Y   xY w)Ntest_dtype_argumentTr  333333?g333333@ffffff@g333333@r   r   r   r  rJ   r5  z(SELECT "A", "B" FROM test_dtype_argumentz$SELECT A, B FROM test_dtype_argumentrp   rA   )r}  r   r  r    r  r   r~  r   r$   r   r  )	rW   r  rA   r  r  r   r  r  r  s	            r/   test_api_dtype_argumentr  #  s     I""4(D
}}*D1__TD9 	8Y  !67	8 
S#Jc
+c3Z	@B99/T9:a???yyHY:64u=F&(+	8 	8s   CCc                    |j                  |       } t        ddgddggddg      }t        j                  |d| d	       y )
NrI   rJ   rK   rL   r   r   test_frame_integer_col_namesr  r  )r}  r   r   r~  r  s      r/   test_api_integer_col_namesr  C  sB    ""4(D	QFQF#aV	4BJJr149Mr.   c                    d| v r:|j                   j                  t        j                  j	                  dd             |j                  |       } t        j                  |d|       }d|v sJ y )Nr|   -'get_schema' not implemented for ADBC driversTr  rz  r{  CREATEr  r  r  r  r  r}  r   
get_schemarW   r  r   r#  s       r/   test_api_get_schemar  J  sj    ~KKF  	
 ""4(DV>Jz!!!r.   c                    d| v r:|j                   j                  t        j                  j	                  dd             |j                  |       } t        j                  |d| d      }d|v sJ y )	Nr|   r  Tr  rz  pypi)rp   r   zCREATE TABLE pypi.r  r  s       r/   test_api_get_schema_with_schemar  X  sn     ~KKF  	
 ""4(DVfMJ:---r.   c                8   d| v r:|j                   j                  t        j                  j	                  dd             | }|j                  |       } t        ddgddgd	      }|d
k(  rd}nddlm} |}t        j                  |d| d|i      }d|v sJ d|v sJ y )Nr|   r  Tr  皙?r  r  皙@r  rs  INTEGERr   )r   rz  r  r  r  )r  r  r  r  r  r}  r   r?   r   r   r  )rW   r  r  float_framerA   r   r#  s          r/   test_api_get_schema_dtypesr  g  s    ~KKF  	
 I""4(D3*C:>?K$$&Vc5\RJz!!!
"""r.   c                n   d| v r:|j                   j                  t        j                  j	                  dd             | }|j                  |       } t        ddgddgd	      }t        j                  |d
| d      }d|v rd}nd}||v sJ t        j                  |d
| ddg      }d|v rd}nd}||v sJ y )Nr|   r  Tr  r  r  r  r  )Col1Col2rz  r  )rp   r   r(   z'CONSTRAINT test_pk PRIMARY KEY (`Col1`)z'CONSTRAINT test_pk PRIMARY KEY ("Col1")r   r   z)CONSTRAINT test_pk PRIMARY KEY (`A`, `B`)z)CONSTRAINT test_pk PRIMARY KEY ("A", "B"))	r  r  r  r  r  r}  r   r   r  )rW   r  r   r  r   r#  constraint_sentences          r/   test_api_get_schema_keysr    s    ~KKF  	
 I""4(DSzC:>?Ev4fEJ)GG*,,, VS#JOJ)II*,,,r.   c                h   d| v r9|j                   j                  t        j                  j	                  d             | }|j                  |       } t        j                  d|       r1t        j                  | d      5 }|j                  d       d d d        t        t        j                  j                  d      j                  d      t        d	      
      }|j!                  d| d       t        j"                  d|       }t               }d}g d}t        j"                  d| d      D ])  }	t%        ||	gd      }t'        |	      ||   k(  sJ |dz  }+ t)        j*                  ||       |dk(  r=t        j,                  t.        d      5  t        j0                  d| d       d d d        y t               }
d}g d}t        j0                  d| d      D ])  }	t%        |
|	gd      }
t'        |	      ||   k(  sJ |dz  }+ t)        j*                  ||
       y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr|   r  r  test_chunksizeTr  rJ   )   r   abcder   Fr  zselect * from test_chunksizer   )r   r   r   r   rJ   r   r  ignore_indexrI   rs  r  r  )r  r  r  r  r  r}  r   r  r    r  r   r   randomdefault_rngstandard_normalr"  r~  r$   r   r  r   r  r  NotImplementedErrorr%   )rW   r  r  r  r   r  r  isizeschunkres3s              r/   test_api_chunksize_readr    s   ~KK%RS	
 I""4(D
}}%t,__TD9 	3Y  !12	3 

		a 0094=
B II#UI; <dCD ;D	AE##$BDTUV tUm$75zU1X%%%	Q
 $% $$]].b9 	D/C	D 	D {''(8$!L 	E4-d;Du:q)))FA	
 	dD)K	3 	32	D 	Ds   >HH(H%(H1c                   | dk(  rjt        dd      }|[t        |j                        t        d      k  r:|j                  j	                  t
        j                  j                  dd             |j                  |       } t        j                  d	|       r1t        j                  | d
      5 }|j                  d	       d d d        t        g dg dd      }|j                         }|d   j                  d      |d<   |j!                  d	| d       t        j"                  d|       }t%        j&                  ||       y # 1 sw Y   xY w)Nr>  r:  rt   ru   z0.9.0z:categorical dtype not implemented for ADBC postgres driverTr  test_categoricalr  r  )John P. Doez	Jane Dover  )	person_idperson_namer  categoryFr  zSELECT * FROM test_categorical)r   r   r@   r  r  r  r  r  r}  r   r  r    r  r   copyr   r~  r$   r   r  )rW   r  r|   r  r   df2ress          r/   test_api_categoricalr	    s-   %%)*B8T(8(8 9GG<L LLL##!!W "  ""4(D
}}'.__TD9 	5Y  !34	5 
"F	

B '')C]+22:>CJJ&DJ>


=t
DC#r"	5 	5s   .EEc                   |j                  |       } t        j                  d|       r1t        j                  | d      5 }|j	                  d       d d d        t        ddgddggdd	g
      }|j                  d| d       y # 1 sw Y   3xY w)Ntest_unicodeTr  rI   rJ   rK   rL      ér  r   Fr  )r}  r   r  r    r  r   r~  )rW   r  r  r   s       r/   test_api_unicode_column_namer    s     ""4(D
}}^T*__TD9 	1Y  0	1 
QFQF#fc]	;BII>t5I9		1 	1s   BBc                   | }|j                  |       } t        j                  d|       r1t        j                  | d      5 }|j	                  d       d d d        t        g ddt        j                  dgd      }|j                  d| d	       d
|v rd}nd}t        j                  ||       }t        j                  ||       y # 1 sw Y   txY w)Nzd1187b08-4943-4c8d-a7f6Tr  r   rI   rJ   r   r  r  Fr  r5  z'SELECT * FROM "d1187b08-4943-4c8d-a7f6"z'SELECT * FROM `d1187b08-4943-4c8d-a7f6`)r}  r   r  r    r  r   r   nanr~  r$   r   r  )rW   r  r  r  r   r  r  s          r/   test_api_escaped_table_namer    s     I""4(D
}}.5__TD9 	<Y  !:;	< 
#rvvs);<	=BII,$eIDY99


UD
)C#r"	< 	<s   CCc                   d| v rtt        j                  d      }t        |j                        t        d      k\  r| dv s:|j                  j                  t         j                  j                  dd             |j                  |       } t        j                  d|       r1t        j                  | d	      5 }|j                  d       d d d        t        g d
g ddd      }|j                  d| d       t        j                   d|       }t        g dg dg dgg d      }t#        j$                  ||       y # 1 sw Y   uxY w)Nr|   r  z16.0)rh  r>  z!pyarrow->pandas throws ValueErrorTr  
test_tabler  r  r  rI   r  r  r   Fr  z)SELECT a, b, a +1 as a, c FROM test_table)rI   r  rJ   rI   )rJ   r   rK   rI   )rK   r  rL   rI   )r  r  r  r   r   )r  r  r   r@   r  r  r  r  r}  r   r  r    r  r   r~  r  r  r   r  )rW   r  par  r   r  r  s          r/   #test_api_read_sql_duplicate_columnsr  	  s    ~  +BNN#wv6DDLL##!!>t " 
 ""4(D
}}\4(__TD9 	/Y  .	/ 
qA	BBII<TI7[[DdKF	8$H &(+	/ 	/s   7D==Ec                6   | }|dk(  r/|j                  t        j                  j                  d             |j	                  |       } t        j                  |d|        ddg}t        j                  d| |      }|j                  j                         |k(  sJ y )Nrs  Not Implementedr  r  r   r   r   )
r  r  r  r  r}  r   r~  r%   r   r  )rW   r  r   r  colsr  s         r/   test_read_table_columnsr  -	  s     I$$FKK--5F-GH""4(DJJ{L$/:DdDAF>>  "d***r.   c                L   | }|dk(  r/|j                  t        j                  j                  d             |j	                  |       } t        j                  |d|        t        j                  d| d      }|j                  j                  dgk(  sJ t        j                  d| ddg      }|j                  j                  ddgk(  sJ t        j                  d| ddgd	d
g      }|j                  j                  ddgk(  sJ |j                  j                         d	d
gk(  sJ y )Nrs  r  r  r  r   r  r   r   r   r   )r  r   )r  r  r  r  r}  r   r~  r%   r   r  r   r  )rW   r  r   r  r  s        r/   test_read_table_index_colr  =	  s    I$$FKK--5F-GH""4(DJJ{L$/dgFF<<'***dsCjIF<<#s+++dsCj3*F <<#s+++>>  "sCj000r.   c                   | dk(  r/|j                  t        j                  j                  d             |j	                  |       } t        j                  d|       }t        j                  d|       }t        j                  ||       t        j                  d|       }t        j                  d|       }t        j                  ||       y )Nru  r  r  r  r8   )r  r  r  r  r}  r   r$   r  r   r  r%   )rW   r  iris_frame1iris_frame2s       r/   test_read_sql_delegater   T	  s    $$KKT  	
 ""4(D$$%94@K,,3T:K+{3$$VT2K,,vt,K+{3r.   c                6   | }ddl m} ddlm}  |d       |d      g}|D ]|  }t	        ||      rD|j                         5 }|j                         5  |j                  |       d d d        d d d        S|j                         5  |j                  |       d d d        ~ t        j                  d       5  t        j                  d|       t        j                  d|       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   rw   r   z,CREATE TABLE invalid (x INTEGER, y UNKNOWN);z0CREATE TABLE other_table (x INTEGER, y INTEGER);other_tablezSELECT * FROM other_table)r?   rx   r   r   ry   r   rk   rN   r   r  r   r%   r$   )rY  rW   rx   r   
query_listr  s         r/   test_not_reflect_all_tablesr$  g	  s   D( 	;<?@J
  $dF# (4ZZ\ (LL'(( (  $U#$ $$ 
	#	#D	) >=$/6=> >( (( ($ $> >s<    C7C+#C7D5-D+C40C77D 	D	Dc                   | }|dk(  sd|v r/|j                  t        j                  j                  d             |j	                  |       } t        j                  t        d      5  t        j                  |       5 }|j                  dd       d d d        d d d        t        j                  d       5  |j                  d	| 
       d d d        y # 1 sw Y   CxY w# 1 sw Y   GxY w# 1 sw Y   y xY w)Nrs  r|   zDoes not raise warningr  zThe provided table name 'TABLE1' is not found exactly as such in the database after writing the table, possibly due to case sensitivity issues. Consider using lower case table names.r  TABLE1r  CaseSensitiver  )r  r  r  r  r}  r   r  r  r   r    check_case_sensitiver~  )rW   r  r   r  r  s        r/   (test_warning_case_insensitive_table_namer)  	  s    I$$)(;FKK--5M-NO""4(D		#	#J
 	2 __T" 	2b##Hb1	2	2 
	#	#D	) ;T:; ;		2 	2	2 	2; ;s0   'C=CC5C*C	CC'*C3c                J   |j                  |       } ddlm} t        dt	        ddgd      i      }t        j                  |       5 }t        j                  d||	      }t        |j                  j                  d   j                  |      sJ 	 d d d        y # 1 sw Y   y xY w)
Nr   )	TIMESTAMPr   2014-12-12 01:542014-12-11 02:54Tutc	test_typer   )r}  r?   r+  r   r   r   r    SQLTablery   r   r   r   )rW   r  r+  r   r  r   s         r/   test_sqlalchemy_type_mappingr3  	  s    ""4(D$ 
	02DE4PQ
B 
	 A"["B7%++--/44i@@@A A As   ABB"zinteger, expected)int8SMALLINT)Int8r5  )uint8r5  )UInt8r5  )int16r5  )Int16r5  )uint16r  )UInt16r  )r  r  )Int32r  )uint32BIGINT)UInt32r?  )r   r?  )Int64r?  r   r?  r  c                @   |j                  |       } t        ddgdg|      }t        j                  |       5 }t        j                  d||      }t        |j                  j                  j                  j                        }d d d        |k(  sJ y # 1 sw Y   xY w)Nr   rI   r  r   rA   r0  r1  )
r}  r   r   r    r2  r   r   r   r  r   )rW   r  r  r  r   r  r   r  s           r/   test_sqlalchemy_integer_mappingrD  	  s    . ""4(D	Aq6C5	8B		 +"["B7U[[]]__))*+ X	+ +s   ABBr  uint64UInt64c                ,   |j                  |       } t        ddgdg|      }t        j                  |       5 }t	        j
                  t        d      5  t        j                  d||       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)	Nr   rI   r  rC  z1Unsigned 64 bit integer datatype is not supportedr  r0  r1  )r}  r   r   r    r  r  r  r2  )rW   r  r  r   r  s        r/   (test_sqlalchemy_integer_overload_mappingrH  	  s     ""4(D	Aq6C5	8B		 4"]]Q
 	4 LLb3	44 4	4 	44 4s#   B
A>-B
>B	B

Bc                   t        j                  d       |j                  |       } t        j                         5 }d|z   }d}|j                  ||dd       t        j                  ||      }t        j                  ||      }d}t        j                  ||      }	d d d        t        j                  |       t        j                  |       t        j                  |	       y # 1 sw Y   LxY w)Nr?   rS  r8   r  Fr{  r  )r  r  r}  r   rT  r~  r   r  r%   r$   r  )
rW   r  r   r   db_urir   ra  r   r  rj  s
             r/   test_database_uri_stringrK  	  s    
%""4(D
 
	 8d$6YeTll5&1((7$((78 +{3+{3+{38 8s   A!C''C0pg8000c                    t        j                  d       |j                  |       } d}t        j                  t        d      5  t        j                  d|       d d d        y # 1 sw Y   y xY w)Nr?   z)postgresql+pg8000://user:pass@host/dbnamerL  r  zselect * from table)r  r  r}  r  ImportErrorr   r  )rW   r  rJ  s      r/   (test_pg8000_sqlalchemy_passthrough_errorrO  	  s[     %""4(D 9F	{(	3 4*F34 4 4s   A$$A-c                    | }|j                  |       } ddlm} d|v r	 |d      }n |d      }t        j                  || ddi      }t        |d	         }|dhk(  sJ y )
Nr   rw   r5  z%select * from iris where "Name"=:namez#select * from iris where name=:namer   zIris-versicolorr  r=   )r}  r?   rx   r   r  set)rW   r  r  rx   	name_textiris_df	all_namess          r/   test_query_by_text_objrU  	  sr     I""4(DY@A	>?	ll9dF<M3NOGGFO$I*++++r.   c                   |j                  |       } ddlm}m} t	               } ||      j                  |j                  j                   |d      k(        }t        j                  || ddi      }t        |d         }|dhk(  sJ y )Nr   )	bindparamr  r   r   r  r=   )r}  r?   rW  r  rC   wherer   r=   r   r  rQ  )rW   r  rW  r  r8   name_selectrS  rT  s           r/   test_query_by_select_objrZ  
  s|    ""4(D
  D,$$TVV[[If4E%EFKll;fm5LMGGFO$I'''r.   c                6   | }|dk(  r/|j                  t        j                  j                  d             |j	                  |       } t        g dg dd      }|j                  d| d	       t        j                  d|       }t        j                  ||       y )
Nrs  r  r  r  rK   rL   r   )r   z%_variationtest_column_percentageFr  )r  r  r  r  r}  r   r~  r   r%   r   r  )rW   r  r  r   r  s        r/   test_column_with_percentager^  
  s     I$$FKK--5F-GH""4(D	9=	>BII+UIC


5t
<C#r"r.   c                   t        j                         5 }t        t        j                  |            5 }t        j                  | d|d      dk(  sJ 	 d d d        t        t        j                  |            5 }t        j                  d|      }d d d        d d d        t        j                  |        y # 1 sw Y   exY w# 1 sw Y   4xY w# 1 sw Y   8xY w)Ntest_frame3_legacyFro  rL   z!SELECT * FROM test_frame3_legacy;)	r   rT  r   rz   r   r   r~  r$   r  )r   r   rW   r  s       r/   test_sql_open_closera  %
  s     
	 SdW__T*+ 	Yt::k+?USWXXXX	Y W__T*+ 	St''(KTRF	S	S +v.	Y 	Y	S 	S	S Ss:   CB8&C:CC8C	=CC		CCc                     d} d}t        j                  t        |      5  t        j                  d|        d d d        y # 1 sw Y   y xY w)Nzmysql://root@localhost/pandasz-Using URI string without sqlalchemy installedr  r  )r  r  rN  r   r  )rW   r  s     r/   test_con_string_import_errorrc  3
  s>    *D
9C	{#	. 1)401 1 1s   A  A	c                      G d d      } t        j                   | d            5 }t        j                  t              5  t        j                  d|       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nc                       e Zd ZddZd Zd Zy)htest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnectionc                8    t        j                  |i || _        y r  )rz   r{   rW   )selfargskwargss      r/   __init__zqtest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnection.__init__>
  s    **D;F;DIr.   c                .    t        | j                  |      S r  )getattrrW   )rh  r   s     r/   __getattr__zttest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnection.__getattr__A
  s    499d++r.   c                8    | j                   j                          y r  )rW   rU   )rh  s    r/   rU   zntest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnection.closeD
  s    IIOOr.   N)returnNone)__name__
__module____qualname__rk  rn  rU   r-   r.   r/   MockSqliteConnectionrf  =
  s    	<	,	r.   ru  ro  zSELECT 1)rp  r   r   r  r  r   r  )ru  rW   s     r/   Jtest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installedrv  ;
  so      
		0<	= +''4 	+LLT*	++ +	+ 	++ +s#   A4 A(A4(A1	-A44A=c                0   | }t        j                  d|      }t        j                  d|      }t        j                  ||       d}t        j                  t         j                  |      5  t        j                  d|       d d d        y # 1 sw Y   y xY w)Nr  z9Execution failed on sql 'iris': near "iris": syntax errorr  r8   )r   r$   r  r   r  r  r  DatabaseError)ru  rW   r  r  r  s        r/   test_sqlite_read_sql_delegatery  L
  sw    D$$%94@K,,3T:K+{3
GC	s((	4 #VT"# # #s   ,BBc                <    t        j                  | d      }d|v sJ y )Nrz  r  )r   r  )r   r#  s     r/   test_get_schema2r{  W
  s     V4Jz!!!r.   c                ^   | }t        dt        ddgd      i      }t        j                  |      }t        j                  d||      }|j                         }|j                  d      D ]@  }|j                         d	   j                  d
      dk(  s)|j                         d   dk(  r@J  y )Nr   r,  r-  Tr.  r0  r1  
r   r  rI   r+  )r   r   r   r!   SQLiteTable
sql_schemasplitstrip)rs  rW   r   r  r   r   cols          r/   test_sqlite_type_mappingr  ]
  s    D		02DE4PQ
B 
		D	!BOOK26EF||D! 199;q>$.99;q>[0001r.   c                   | dk(  rt        j                  d       |j                  |       } ddlm} t        g dg dd      }t        j                  | d	      5 }|j                  |d
      dk(  sJ 	 d d d         ||       }|j                  d
      sJ t        j                  | d	      5 }|j                  d
       d d d        y # 1 sw Y   VxY w# 1 sw Y   y xY w)NrU  #sqlite_str has no inspection systemr   r         ?       @      @      @r  r  r  r  onetwoTr  r  rL   )r  skipr}  r?   r   r   r   r    r~  r  r  rW   r  r   r  r  insps         r/   test_create_tabler  o
  s    |9:""4(D"#7@TUVJ		5 ?
L9Q>>>? 4=D>>,''' 
	5 +\*+ +? ?+ +s   C	.C	CCc                b   | dk(  rt        j                  d       |j                  |       } ddlm} t        g dg dd      }t        j                  |       5 }|j                         5  |j                  |d      d	k(  sJ 	 d d d         ||       }|j                  d      sJ |j                         5  |j                  d       d d d        	 |j                          |j                  d      rJ 	 d d d        y # 1 sw Y   |xY w# 1 sw Y   CxY w# t        $ r Y @w xY w# 1 sw Y   y xY w)
NrU  r  r   r   r  r  r  r  rL   )r  r  r}  r?   r   r   r   r    rP  r~  r  r  clear_cacheAttributeErrorr  s         r/   test_drop_tabler  
  s*   |9:""4(D"#7@TUVJ		 0)&&( 	C##J=BBB	C t}~~l+++&&( 	/  .	/	 >>,////0 0	C 	C	/ 	/  		0 0s`   D%*C>3D%6D
D%D!D%>D	D%
D	D%	D"D%!D""D%%D.c                   | dk(  rt        j                  d       | }|j                  |       } t        |       }|j	                         5  |j                  |d      dk(  sJ |j                  d      }d d d        d|v rj                  ddi	      }j                  dd
       d |j                  _
        t        j                  ||       y # 1 sw Y   \xY w)NrU  r  rz  rL   r|  r|   r}  r~  r   Tr  )r  r  r}  r#   rP  r~  rQ  r  r  r   r   r   r  r  s         r/   test_roundtripr  
  s    |9:I""4(D!$'I		"	"	$ L-CDIII%%&JKL (;Y'GH
Y- FLL&+.L Ls   	)CCc                6   |j                  |       } t        |       5 }|j                         5  |j                  d      }|j	                         }|j                          d d d        d d d        t              g dk(  sJ y # 1 sw Y   $xY w# 1 sw Y   (xY wr  )r}  r#   rP  rN   r   rU   r"  )rW   r  r  r  r]   s        r/   test_execute_sqlr  
  s    ""4(D	4	  !I&&( 	!$,,-ABL'')C 	!!
 9;;;;		! 	!! !s"   B2B BB	BBc                j    |j                  |       } t        j                  d|       }t        |       y )Nr8   r{  )r}  r   r%   r   r  s      r/   test_sqlalchemy_read_tabler  
  s,    ""4(D##F5JZ r.   c                    |j                  |       } t        j                  d| ddg      }t        j                  |j
                  t        ddg             y )Nr8   r9   )rp   r   SepalLength__1)r}  r   r%   r   assert_index_equalr   r   r  s      r/   "test_sqlalchemy_read_table_columnsr  
  sQ    ""4(D##D=-"@J *,,e]DT4U.VWr.   c                    |j                  |       } d}t        j                  t        |      5  t	        j
                  d|        d d d        y # 1 sw Y   y xY w)Nz!Table this_doesnt_exist not foundr  this_doesnt_existr{  )r}  r  r  r  r   r%   )rW   r  r  s      r/   test_read_table_absent_raisesr  
  sK    ""4(D
-C	z	- :.D9: : :s   AAc                *   | }|dk(  rt        j                  d       n7d|v sd|v r/|j                  t         j                  j	                  d             |j                  |       } t        j                  d|       }t        |j                  j                  j                  t        j                        sJ t        |j                  j                  j                  t        j                        sJ t        |j                   j                  j                  t        j"                        sJ t        |j$                  j                  j                  t        j                        sJ t        |j&                  j                  j                  t(              sJ y )NrU  .types tables not created in sqlite_str fixturer(   r'   z#boolean dtype not inferred properlyr  r   )r  r  r  r  r  r}  r   r%   r   r   rA   r   r   r   r   r  r   r  r   r   r  r  s       r/   'test_sqlalchemy_default_type_conversionr  
  s'   IL DE	I	Y!6KK%JK	
 ""4(D			GT	*Bbkk'',,bkk:::biioo**BJJ777bjj&&++RXX666 b''--22BKK@@@b((..33V<<<r.   c                    |j                  |       } t        ddgi      }|j                  d| d      dk(  sJ t        j                  d|       }t        j                  ||       y )Ni64l            )r   test_bigintFr  rI   r  rW   r  r   r  s       r/   r  r  
  sd     ""4(D	(	)B99-T9?1DDDt4F"f%r.   c                f   | }|dk(  rt        j                  d       n3d|v r/|j                  t         j                  j	                  d             |j                  |       } t        j                  d|       }t        |j                  j                  j                  t        j                        sJ y )NrU  r  r'   z"sqlite does not read date properlyr  r   )r  r  r  r  r  r}  r   r%   r   r   rA   r   r   r  r  s       r/   test_default_date_loadr  
  s    IL DE	Y	KK%IJ	
 ""4(D			GT	*Bbjj&&++R]];;;r.   r  r   c                    |j                  |       } t        |       }t        d| |      }|j                  }t	        j
                  ||       y )Nselect * from datetzr  )r}  r   r$   r   r   r   )rW   r  r  r  r   r  s         r/   !test_datetime_with_timezone_queryr  	  sJ     ""4(D.t4H 
.+	NB


C3)r.   c           	         |j                  |       } t        |       }t        t        t	        d| d            d      }|j
                  }t        j                  ||       y )Nr  rI   r  Tr  )r}  r   r   r"  r$   r   r   r   )rW   r  r  r   r  s        r/   +test_datetime_with_timezone_query_chunksizer    sX    ""4(D.t4H	^2DAFG
B 

C3)r.   c                    |j                  |       } t        |       }t        j                  d|       }t	        j
                  ||j                                y )Nr   )r}  r   r   r%   r   r  ru  )rW   r  r  r  s       r/   !test_datetime_with_timezone_tabler  %  sG    ""4(D.t4H$/F&("3"3"56r.   c                4   | }|j                  |       } t        dt        ddd      i      }|j                  d| d      dk(  sJ d	|v r"|d   j                  j                  d
      |d<   n!|d   j                  j                  d       |d<   t        j                  d|       }t        j                  ||       t        j                  d|       }d|v r0t        |j                  d   t              sJ t        |d         |d<   t        j                  ||       y )Nr   2013-01-01 09:00:00rK   
US/Pacificperiodsr   test_datetime_tzFr  r)   r   zSELECT * FROM test_datetime_tzr'   r   r   )r}  r   r   r~  dt
tz_converttz_localizer   r%   r   r  r$   ry   locr   r   )rW   r  r  r  r  s        r/   %test_datetime_with_timezone_roundtripr  -  s   I""4(D
 	j.lKLH ?? 2E?JaOOOy  ((33E: !((44T: 2D9F&(+ @$GF9&**V,c222!&+.s&(+r.   c                    |j                  |       } t        dt        ddd      idg      }|j                  d| d      dk(  sJ t	        j
                  d|       }t        t        j                  gdg	      }t        j                  ||       y )
Nr   i'  rI   r   ro  test_datetime_obbFr  r   )
r}  r   r   r~  r   r%   r  NaTr   r  )rW   r  r   r  r  s        r/   test_out_of_bounds_datetimer  L  s     ""4(DfhtQ23A3?D;;/T;G1LLL 3T:F"&&F84H&(+r.   c                "   |j                  |       } t        ddd      j                  d       }t        dt	        d      i|      }|j                  d| d	      dk(  sJ t        j                  d| d
      }t        j                  ||d       y )Nz
2018-01-01r   6hr  freqnumsro  	foo_table	info_date)r   rp   r  r  F)check_names)
r}  r   
_with_freqr   r  r~  r   r%   r   r  )rW   r  datesr  r  s        r/   "test_naive_datetimeindex_roundtripr  W  s     ""4(D|QT:EEdKE&%(+59H??;?OSTTTTT[IF&(>r.   c                   | }|j                  |       } t        j                  d|       }d|v rt        nt        j
                  }t        |j                  j                  j                  |      sJ t        j                  d| dg      }t        |j                  j                  j                  t        j
                        sJ t        j                  d| ddi      }t        |j                  j                  j                  t        j
                        sJ t        j                  d| dddii      }t        |j                  j                  j                  t        j
                        sJ t        j                  d| dg      }t        |j                  j                  j                  t        j
                        sJ t        j                  d| ddi      }t        |j                  j                  j                  t        j
                        sJ t        j                  d| dd	dii      }t        |j                  j                  j                  t        j
                        sJ y )
Nr   r'   r   r  r  formatr   rv  unit)r}  r   r%   r  r   r  r   r   rA   r   r   )rW   r  r  r   expected_types        r/   test_date_parsingr  d  s    I""4(D			GT	*B&)3FMbjj&&++];;;			GT	{	CBbjj&&++R]];;;			GT	CV7W	XBbjj&&++R]];;;			+> ?@
B
 bjj&&++R]];;;			GT~	FBbmm))..>>>			GTc7J	KBbmm))..>>>			GTvsm7T	UBbmm))..>>>r.   c                D   | }|j                  |       } t        t        dd      t        j                  d      d      }|j                  d|       dk(  sJ t        j                  d|       }|j                  dd	
      }t        j                  ||       t        j                  d|       }|j                  dd	
      }d|v rGt        |j                  d   t              sJ t        |d         |d<   t        j                  ||       y t        j                  ||       y )Nr  rK   r  r  r  test_datetimer  r   rI   )axisSELECT * FROM test_datetimer'   r  r   )r}  r   r   r   rt  r~  r   r%   rl   r   r  r$   ry   r  r   r   rW   r  r  r   r  s        r/   r  r    s   I""4(D	.:3P
B 99/t94999 6F[[q[)F&"%  =tDF[[q[)F9&**V,c222!&+.s
fb)
fb)r.   c                8   | }|j                  |       } t        t        dd      t        j                  d      d      }t        j
                  |j                  d<   |j                  d| d	      dk(  sJ t        j                  d|       }t        j                  ||       t        j                  d
|       }d|v rIt        |j                  d   t              sJ t        |d   d      |d<   t        j                  ||       y t        j                  ||       y )Nr  rK   r  r  r  rI   r   r  Fr  r  r'   r  r   r  ru   )r}  r   r   r   rt  r  r  r~  r   r%   r   r  r$   ry   r   r   r  s        r/   test_datetime_NaTr    s    I""4(D	.:3P
B VVBFF6N99/t59AQFFF 6F&"%  =tDF9&**V,c222!&+h?s
fb)
fb)r.   c                   |j                  |       } t        t        ddd      t        ddd      gdg      }|j                  d| d      dk(  sJ t	        d|       }|d   }t        |d         }t        j                  ||       y )	N  rI   rJ   r  r   	test_dateFr  )r}  r   r   r~  r%   r   r   r   )rW   r  r   r  r  r  s         r/   test_datetime_dater    s     ""4(D	Dq!$d4A&67#	GB99+4u9=BBB
d
+CXF2c7#H68,r.   c                   | }|j                  |       } t        t        ddd      t        ddd      gdg      }|j                  d| d	      d
k(  sJ t	        d|       }t        j                  ||       |}t        j                  |d|d      d
k(  sJ t        j                  d|      }|j                  d       }t        j                  ||       t        j                  |d| d      d
k(  sJ d|v r>t        j                  d|       }|j                  d       }t        j                  ||       t        j                  d|       }t        j                  ||       y )N	   r   rI      r  r   	test_timeFr  rJ   
test_time2ro  zSELECT * FROM test_time2c                $    | j                  d      S Nz%H:%M:%S.%fstrftime_s    r/   <lambda>z$test_datetime_time.<locals>.<lambda>  s    1::m4 r.   
test_time3r'   zSELECT * FROM test_time3c                $    | j                  d      S r  r  r  s    r/   r  z$test_datetime_time.<locals>.<lambda>  s    qzz-8 r.   )
r}  r   r   r~  r%   r   r  r   r$   map)rW   r  rs  r  r   r  rY  refs           r/   test_datetime_timer    sD    I""4(D	DAqM41b>2SE	BB99+4u9=BBB
d
+C#r" !K::b,5AQFFF


7
EC
&&4
5C#s#::b,E:a???9  !;TBff89
c3'


\4
0C"c"r.   c                >   |j                  |       } t        dt        j                        }t        dt        j                        }t        ||d      }|j                  d| d      dk(  sJ t        j                  d|       }t        j                  ||dd	
       y )Ni  r  g        )s1rw  test_read_writeFr  rI   T)check_dtypecheck_exact)r}  r   r   r  float32r   r~  r   r%   r   r  )rW   r  r  rw  r   r  s         r/   test_mixed_dtype_insertr    s     ""4(D			*B	2::	&B	"B'	(B 99+U9CqHHH


.
5C"cu$Gr.   c                J   |j                  |       } t        g ddt        j                  dgd      }|j	                  d| d      dk(  sJ t        j                  d|       }t        j                  ||       t        j                  d	|       }t        j                  ||       y )
Nr  r   r  r  test_nanFr  rK   SELECT * FROM test_nan)
r}  r   r   r  r~  r   r%   r   r  r$   r  s       r/   test_nan_numericr    s     ""4(D	#rvvs);<	=B99*$e9<AAA 
D1F&"%  8$?F&"%r.   c                   |j                  |       } t        g dt        j                  t        j                  t        j                  gd      }|j	                  d| d      dk(  sJ t        j                  d|       }t        j                  ||       |d   j                  d      |d<   d |d<   t        j                  d	|       }t        j                  ||       y )
Nr  r  r  Fr  rK   r   r  r  )r}  r   r   r  r~  r   r%   r   r  r   r$   r  s       r/   test_nan_fullcolumnr    s     ""4(D	"&&"&&"&&)AB	CB99*$e9<AAA 
D1F&"% gnnX&BsGBsG 8$?F&"%r.   c                h   |j                  |       } t        g dddt        j                  gd      }|j	                  d| d      dk(  sJ d |j
                  d	<   t        j                  d|       }t        j                  ||       t        j                  d
|       }t        j                  ||       y )Nr  r  r  r  r  Fr  rK   rJ   r   r  )r}  r   r   r  r~  r  r   r%   r   r  r$   r  s       r/   test_nan_stringr    s     ""4(D	#sBFF);<	=B99*$e9<AAA BFF6N 
D1F&"%  8$?F&"%r.   c                   d| v r:|j                   j                  t        j                  j	                  dd             | }|j                  |       } t        j                  ddgg ddg	      }d
}t        |       5 }|j                         5  |j                  ||      dk(  sJ 	 d d d        d d d        |dv rqt        j                  d| d|       }g }|j                  D ]E  }t        j                  d| d|       }	|j                  |	j                  j                                G n1ddlm}
  |
|       }|j%                  |      }|D cg c]  }|d   	 }}|dggk(  sJ y # 1 sw Y   xY w# 1 sw Y   xY wc c}w )Nr|   z)ADBC implementation does not create indexTr  r  r  r  r   r  test_to_sql_saves_indexrJ   >   rU  rs  zASELECT * FROM sqlite_master WHERE type = 'index' AND tbl_name = ''zPRAGMA index_info()r   r   column_names)r  r  r  r  r  r}  r   r  r#   rP  r~  r   r$   r   r   r  r?   r   get_indexes)rW   r  r  r   tbl_namer  ixsix_colsix_nameix_infor   r  r  s                r/   test_to_sql_save_indexr  !  s   ~KKB4  	

 I""4(D				-.PSu
B )H	4	  7I&&( 	7##B1Q666	77 44  'j+

 xx 	2G((+=gYa)H$OGNN7<<..01	2 	't}x(.121^$22ug+	7 	77 7( 3s*   <E2E&&E2E>&E/	+E22E;c                   | }|j                  |       } d}|dk7  rd|vrddlm}  ||      }t        |       5 }|j	                         5 }|j                  |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)N'CREATE TABLE test_trans (A INT, B TEXT)rs  r|   r   rw   )r}  r?   rx   r#   rP  rN   )rW   r  r  rY   rx   r  transs          r/   test_transactionsr  I  s    I""4(D4D$$y)@#Dz	4	   I&&( 	 EMM$	    	  	    s#   A8	A,A8,A5	1A88Bc                f   | }|j                  |       } t        |       5 }|j                         5 }d}d|v st        |t              r|j                  |       nddlm}  ||      }|j                  |       d d d         G d dt              }d}t        |t              rddlm}  ||      }	 |j                         5 }|j                  |        |d      # 1 sw Y   cxY w# 1 sw Y   nxY wn# |$ r Y nw xY w|j                         5  |j                  d	      }	d d d        n# 1 sw Y   nxY wt        	      dk(  sJ |j                         5 }|j                  |       |j                  d	      }
d d d        n# 1 sw Y   nxY wt        
      d
k(  sJ 	 d d d        y # 1 sw Y   y xY w)Nr  r|   r   rw   c                      e Zd Zy)1test_transaction_rollback.<locals>.DummyExceptionN)rr  rs  rt  r-   r.   r/   DummyExceptionr  h  s    r.   r  z/INSERT INTO test_trans (A,B) VALUES (1, 'blah')r  zSELECT * FROM test_transrI   )r}  r#   rP  ry   r!   rN   r?   rx   	Exceptionr    rQ  r  )rW   r  r  r  r  rY   rx   r  ins_sqlr  r  s              r/   test_transaction_rollbackr  Y  s   I""4(D	4	  #I&&( 	$E<D"jN&Kd#+Dzd#	$	Y 	 Di-'7mG	**, .g&$W---	$ 	$(. . .  		 &&( 	C&&'ABC	C 	C 	C3x1}} &&( 	DEMM'"''(BCD	D 	D 	D 4yA~~G# # #s   F'AC87F'0C3 C&C#	F'&C/	+C32F'3C;8F':C;;F'D) 	F')D2	.'F'#F8	F'F
	F''F0c                V   | dk(  r/|j                  t        j                  j                  d             |j	                  |       } ddlm} ddlm} d}t        j                  |||       }|j                  d d } ||      }t        | |      rD| j                         5 }|j                         5  |j                  |       d d d        d d d        n| j                  |       t        j                   ||       }	t#        j$                  |	|d	
       y # 1 sw Y   RxY w# 1 sw Y   DxY w)NrU  z(test does not support sqlite_str fixturer  r   rw   r   test_get_schema_create_tabler{  Fr  )r  r  r  r  r}  r?   rx   r   r   r   r  r   ry   r   rk   rN   r%   r   r  )
rW   r  r   rx   r   r  r#  blank_test_dfnewconreturned_dfs
             r/   r  r    s   
 |KK%OP	
 ""4(D(
(CSd;J$$Ra(Mj!J$\\^ 	+v +z*+	+ 	+ 	Z $$S$/K+}uM+ +	+ 	+s$   D0DDD	DD(c                P   | dk(  rt        j                  d       |j                  |       } ddlm}m} ddlm} ddg}dd	g}t        ||
      }|j                  d|       dk(  sJ |j                  d| d|i      dk(  sJ  |       }|j                  |        |j                  d   j                  d   j                  }	t        |	|      sJ d}
t        j                  t         |
      5  |j                  d| dt"        i       d d d        |j                  d| d |d      i      dk(  sJ |j                  |        |j                  d   j                  d   j                  }	t        |	|      sJ |	j$                  dk(  sJ |j                  d| |      dk(  sJ |j                  |        |j                  d   j                  d   j                  }|j                  d   j                  d   j                  }t        ||      sJ t        ||      sJ y # 1 sw Y   xY w)NrU  r  r   )r   r6   r5   r   r   g?Tg?Nr   
dtype_testr  rJ   dtype_test2r   rp   rA   rf   z&The type of B is not a SQLAlchemy typer  r  dtype_test3
   single_dtype_test)r  r  r}  r?   r   r6   sqlalchemy.schemar5   r   r~  reflecttablesr   r   ry   r  r  r   r  )rW   r  r   r6   r5   r  r   r   metasqltyper  sqltypeasqltypebs                r/   
test_dtyper/    s   |9:""4(D +:D%D	4	&B99,D91Q66699-T#t9EJJJ:DLLdLkk-(005::Ggt$$$
2C	z	- <
		wDc
	;< 99-T#vbz9J9KqPPPLLdLkk-(005::Ggv&&&>>R 99-4t9DIIILLdL{{./77<AAH{{./77<AAHh%%%h%%%!< <s   ,HH%c                   | dk(  rt        j                  d       | }|j                  |       } 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
      t        dd g      d}t        |      }	d}
|	j                  |
|       dk(  sJ t        j                  |
|       } |       }|j!                  |        d|v r|n|}|j"                  |
   j$                  }t'        |d   j(                  |      sJ t'        |d   j(                  |      sJ t'        |d   j(                  |      sJ t'        |d   j(                  |      sJ y )NrU  r  r   )r   r   r4   r   r  T  r   rI   r  r  r  BoolDateIntr4   notna_dtype_testr  rJ   rf   r(   r3  r4  r5  r4   )r  r  r}  r?   r   r   r4   r   r(  r5   r   r   r   r~  r   r%   r)  r*  r   ry   r   )rW   r  r  r   r   r4   r   r5   r  r   r  r  r+  my_typecol_dicts                  r/   test_notna_dtyper9    s_   |9:I""4(D  + d|$q!,d34q$ix0d$	D 
4B
C99#49(A---3%A:DLLdL I-g7G{{3''Hhv&++W555hv&++X666huo**G444hw',,e444r.   c           
        | dk(  rt        j                  d       |j                  |       } ddlm}m}m} ddlm} d}t        t        |gd      t        |gd	      t        |gd	      t        d
gd      t        d
gd      d      }|j                  d| ddd |d      i      dk(  sJ t        j                  d|       }t        j                  |d   j                   d   d      t        j                  |d   j                   d   d      k(  sJ  |       }	|	j#                  |        |	j$                  d   j&                  }
t)        |
d   j*                        t)        |
d   j*                        k(  sJ t-        |
d   j*                  |      sJ t-        |
d   j*                  |      sJ t-        |
d   j*                  |      sJ t-        |
d   j*                  |      sJ y )NrU  r  r   )
BigIntegerr4   r   r  gYB?r  r  float64r   r  r   )f32f64
f64_as_f32i32r  test_dtypesFr  r?     )	precision)r   rp   r   r|  rA   rI   r>     rf   r=  r@  r  )r  r  r}  r?   r;  r4   r   r(  r5   r   r   r~  r   r%   r   roundr   r)  r*  r   r   r   ry   )rW   r  r;  r4   r   r5   Vr   r  r+  r8  s              r/   test_double_precisionrG    s   |9:""4(D 
 +A	1#Y/1#Y/ !I61#W-1#W-	

B 			!45 	 	
 			 

]D
1C 88BuINN1%r*bhhs5zq7I2.NNNN :DLLdL{{=)11Hx##$H\,B,G,G(HHHHhuo**E222huo**E222huo**G444huo**J777r.   c                    |j                  |       } ddlm d d fdfd}t        dg di      j	                  d| 	      d
k(  sJ  ||        y )Nr   r   c                4    d}t        j                  ||       S )Nz'SELECT test_foo_data FROM test_foo_datar{  )r   r$   )r  r  s     r/   test_selectz3test_connectable_issue_example.<locals>.test_select,  s    9!!%Z88r.   c                ,    |j                  d| d       y )Ntest_foo_datar   )r   rp   r|  )r~  )r  r   s     r/   test_appendz3test_connectable_issue_example.<locals>.test_append0  s    jHMr.   c                (     |       } | |       y r  r-   )rW   foo_datarM  rJ  s     r/   test_connectablez8test_connectable_issue_example.<locals>.test_connectable3  s     t$D(#r.   c                    t        |       r;| j                         5 }|j                         5   |       d d d        d d d        y  |        y # 1 sw Y   xY w# 1 sw Y   y xY wr  )ry   r   rk   )connectablerW   r   rP  s     r/   mainz,test_connectable_issue_example.<locals>.main9  se    k6*$$& +$ZZ\ +$T*++ + [)+ ++ +s!   A	AAA	AA'rL  r  r  rK   )r}  r   r   r   r~  )rW   r  rS  r   rM  rP  rJ  s      @@@@r/   test_connectable_issue_examplerT  $  sh    ""4(D )9N$* 	?I./66OQU6V		 	Jr.   inputr  bar)r  infe0c                J   t        |      }| }|j                  |       } d|v rt        j                  d      }t	        |j
                        t	        d      k  r?d|j                  v r1t        j                  j                  d      }|j                  |       d}t        j                  t        |      5  |j                  d	| d
       d d d        y |j                  d	| d
      dk(  sJ t        j                  d	|       }t        j                   ||       y # 1 sw Y   y xY w)Nr(   r  z1.0.3rW  zGH 36465r  zinf cannot be used with MySQLr  foobarFr  rI   )r   r}  r  r  r   r@   r   r  r  r  r  r  r~  r   r%   r   assert_equal)	rW   r  rU  r   r  r  r  r  r  s	            r/   test_to_sql_with_negative_npinfr[  H  s    
5	BI""4(D)
 %%i07&&'''*::w"**?T;;$$J$7D%-]]:S1 	<II8UI;	< 	< yyhDy>!CCC  40
C 	< 	<s   5DD"c                x   | dk(  rt        j                  d       |j                  |       } ddlmmmm} ddlm	}m
} d}t        d|gi      } |       } G fdd	|      } ||       5 }	|	j                         5  |	j                         } |j                  j                  |        |	j!                   ||
             |	j#                          t%        j&                   ||j(                        |       }
d d d        d d d        t+        j,                  
|       y # 1 sw Y   (xY w# 1 sw Y   ,xY w)NrU  z&test does not work with str connectionr   )r2   r   Unicoder  )Sessiondeclarative_basezHello, World!spamc                  X    e Zd ZdZddgiZ W  W d      Z W   W d      d      Zy	)
'test_temporary_table.<locals>.Temporary	temp_testprefixes	TEMPORARYTprimary_keyr  F)nullableN)rr  rs  rt  __tablename____table_args__idr`  )r2   r   r]  s   r/   	Temporaryrb  ~  s0    #${m4G.gbkE2r.   rl  )r`  )r   rp   )r  r  r}  r?   r2   r   r]  r  sqlalchemy.ormr^  r_  r   rk   r  	__table__rm   addflushr   r$   r`  r   r  )rW   r  r  r^  r_  r,  r  Baserl  sessionr   r2   r   r]  s              @@@r/   test_temporary_tablers  h  s   |<=""4(D 
  I&9+./HD3 3D 3 
 J']]_ 	J%%'D&&t,KK	y12MMO##y~~(>DIB	JJ "h'	J 	JJ Js%   1D0A;D$=D0$D-	)D00D9c                b   | dk(  sd| v r/|j                  t        j                  j                  d             |j	                  |       } d}t        |       5 }t        j                  t        |      5  |j                  |dd	       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)
Nrs  r|   z9SQLiteDatabase/ADBCDatabase does not raise for bad enginer  z*engine must be one of 'auto', 'sqlalchemy'r  r   
bad_enginer   )	r  r  r  r  r}  r#   r  r  r~  )rW   r  r   r  r  s        r/   test_invalid_enginerw    s    6T>KKR  	
 ""4(D
6C	4	  NI]]:S1 	N[-M	NN N	N 	NN Ns$   B%3BB%B"	B%%B.c                F   |j                  |       } t        |       5 }|j                         5  |j                  |dd      dk(  sJ |j	                  d      sJ 	 ddd       ddd       t        |      }t        | d      }||k(  sJ y# 1 sw Y   0xY w# 1 sw Y   4xY w)z `to_sql` with the `engine` paramr   autorv  rL   N)r}  r#   rP  r~  r  r  r   re  s         r/   test_to_sql_with_sql_enginerz    s     ""4(D	4	  6I&&( 	6##Kv#NRSSSS&&}555	66
 k"K$.H{"""	6 	66 6s"   B-BBB	BB c                   |j                  |       } t        j                  dd      5  t        |       5 }|j	                         5  |j                  |d      dk(  sJ |j                  d      sJ 	 d d d        d d d        t        |      }t        | d      }||k(  sJ 	 d d d        y # 1 sw Y   9xY w# 1 sw Y   =xY w# 1 sw Y   y xY w)Nio.sql.enginer?   r   rL   	r}  r  option_contextr#   rP  r~  r  r  r   re  s         r/   test_options_sqlalchemyr    s     ""4(D			?L	9 't$ 	:	**, : '']CqHHH **=999:	:
 +&dM2;&&&' ': :	: 	:' ':   CB5+B)1B59&C)B2.B55B>	:CC
c                   |j                  |       } t        j                  dd      5  t        |       5 }|j	                         5  |j                  |d      dk(  sJ |j                  d      sJ 	 d d d        d d d        t        |      }t        | d      }||k(  sJ 	 d d d        y # 1 sw Y   9xY w# 1 sw Y   =xY w# 1 sw Y   y xY w)Nr|  ry  r   rL   r}  re  s         r/   test_options_autor    s     ""4(D			?F	3 't$ 	:	**, : '']CqHHH **=999:	:
 +&dM2;&&&' ': :	: 	:' 'r  c                    t        j                  d       t        t        d      t              sJ t        j                  dd      5  t        t        d      t              sJ t        t        d      t              sJ 	 d d d        t        j                  dd      5  t        t        d      t              sJ t        t        d      t              sJ 	 d d d        y # 1 sw Y   `xY w# 1 sw Y   y xY w)Nr?   r|  ry  )r  r  ry   r"   r   r  r~  r-   r.   r/   test_options_get_enginer    s    
%j.0@AAA			?L	9 F*V,.>???*\24DEEEF 
		?F	3 F*V,.>???*\24DEEEF F	F FF Fs   7C7C*C'*C3c                      y r  r-   r-   r.   r/   "test_get_engine_auto_error_messager    s     	r.   funcr  r$   c                p   | }|j                  |       } d}|}	|	j                  || dd       t        j                  d|      5   t	        t        |      d| | |      }
d d d         ||||      }t        j                  
|       d|v r/|j                  t        j                  j                  d	
             t        j                  d|      5   t	        t        |      d| | |d      } ||||      }|D ]  }
t        j                  |
|        	 d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nrz  Fr  r   rp   r   r|  mode.string_storageSelect * from dtype_backendr|   z(adbc does not support chunksize argumentr  rK   )rp   r  r  )r}  r~  r  r~  rm  r   r  r  r  r  r  rW   r  string_storager  r  dtype_backend_datadtype_backend_expectedr  r   r   r  r  iterators                r/   test_read_sql_dtype_backendr    sL    I""4(DE	BII5d%9IE			0.	A 
"T"UG$d-

 &nmYOH&(+KK%OP	
 
		0.	A 	4$72t$UG$'	
 *.-S 	4F!!&(3	4	4 	4
 
	4 	4s   D AD, D),D5r%   c                v   d| v r3d| vr/|j                  t        j                  j                  d             | }|j	                  |       } d}|}	|	j                  || dd       t        j                  d	|      5   t        t        |      || |
      }
d d d         ||||      }t        j                  
|       d|v ry t        j                  d	|      5   t        t        |      || |d      } ||||      }|D ]  }
t        j                  |
|        	 d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr'   r|   zhSQLite actually returns proper boolean values via read_sql_table, but before pytest refactor was skippedr  rz  Fr  r  r  r  rK   )r  r  )r  r  r  r  r}  r~  r  r~  rm  r   r  r  s                r/   !test_read_sql_dtype_backend_tabler  
  sV    4F$.KKM  	
 I""4(DE	BII5d%9IE			0.	A M"T"5$mLM%nmYOH&(+			0.	A 	4$72t$'	
 *.-S 	4F!!&(3	4	4 	4M M	4 	4s   :D#AD/#D,/D8)r  r%   r$   c                    |j                  |       } d}|}|j                  || dd       d}t        j                  t        |      5   t        t        |      || d       d d d        y # 1 sw Y   y xY w)	Nrz  Fr  r  zPdtype_backend numpy is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.r  numpyr  )r}  r~  r  r  r  rm  r  )rW   r  r  r  r   r   r  s          r/   )test_read_sql_invalid_dtype_backend_tabler  :  sv     ""4(DE	BII5d%9IE	!  
z	- >D%W=> > >s   A++A4c                     t        t        dt        j                  dgd      t        g dd      t        dt        j                  dgd      t        g d	d      g d
g dg dg dd      S )NrI   rK   rA  r  r  r        @Float64r  r  r  )TFNTFTr  r  r  Nr  r  r   defgh)r   r   r   r  r-   r.   r/   r  r  J  s]    BFFAg6	1bffc*)<y9$$ !		
 r.   c                     dd} | S )Nc                   | dk(  rpt        t        j                  g dt        j                              }t        t        j                  ddt        j
                  gt        j                              }n|dk(  rNt        j                  d      }ddlm	}  ||j                  g d            } ||j                  g d	            }nMt        j                  d      }t        |j                  g d            }t        |j                  g d	            }t        t        d
t        j                  dgd      t        g dd      t        dt        j                  dgd      t        g dd      t        ddt        j
                  gd      t        g dd      ||d      }|dk(  rYt        j                  d      }ddlm	} t        |j                  D ci c]  }| ||j                  ||   d            ! c}      }d|v sd|v r/|dk(  r|j                  ddd      }|S |j                  ddd      }|S c c}w )Npythonr  r  r  r  r  r   )ArrowExtensionArrayr  rI   rK   rA  r  r  r  r  r  TFbooleanr  r  )from_pandasr(   r'   numpy_nullable)r  r  zint64[pyarrow])r   r   r  object_r  NAr  r  pandas.arraysr  r   r   r   r  r   r   )	storager  r  string_arraystring_array_nar  r  r   r  s	            r/   r  z$dtype_backend_expected.<locals>.func\  s    h&rxxrzz'RSL)"((Cbee3DBJJ*WXOi'$$Y/B9.rxx/HIL1"((;K2LMO $$Y/B+BHH_,EFL.rxx8H/IJOQN':IW5S"&&#.i@O9=T5"%%0	B/yA!$	
 I%$$Y/B9  "zz ,RXXbg4X-PQQB i8y#8 00YYW7;< 	 YY%5<LMN	s   $H<rp  r   r-   )r  s    r/   r  r  Z  s    1f Kr.   c                   d| v r9|j                   j                  t        j                  j	                  d             |j                  |       } ddd}t        ddg	      j                  |      }|j                         }|j                  d
| dd       t        d| |d      D ]  }t        j                  ||        y )Nr|   r  r  r   r  r  r  r  r   rz  Fr  r  zSELECT * FROM testrI   )rA   r  )r  r  r  r  r  r}  r   r   r  r~  r$   r   r  )rW   r  r   r   r  r  s         r/   test_chunksize_empty_dtypesr    s     ~KK%RS	
 ""4(D*F	C:	&	-	-f	5BwwyHII6t5IIF 	 0 	fh/0r.   r  r  c                t   |j                  |       } d}t        g ddd      }|j                  || dd        t        t        |      d| | d	t
        j                  i|
      }t        t        g dt
        j                        t        g d|dk(  sdnd      d      }t        j                  ||       y )Nrz  r  r   r  Fr  r  r  r  )rA   r  r  )r   r   r   r  r   rA  )
r}  r   r~  rm  r  r   r<  r   r   r  )rW   r  r  r  r   r   r  r  s           r/   test_read_sql_dtyper    s    
 ""4(DE	+	,BII5d%9IEWR
 BJJ#	F 	4%26F%FgG	
H &(+r.   c                    | }d}t        ddddddddg      }|j                  d|       t        j                  t        |      5  |j                  d|d d	       d d d        y # 1 sw Y   y xY w)
NzxStarting with pandas version 3.0 all arguments of to_sql except for the arguments 'name' and 'con' will be keyword-only.rI   rJ   rK   r  exampler  r  r  )r   r~  r   r  rG  )rW  rW   r  r   s       r/   test_keyword_deprecationr    sw    D	;  
!!!,AAA.FG	HBIIi		#	#M	= >
		)T49	=> > >s   A&&A/c                    | }t        dddgid      }|j                  d|d      dk(  sJ t        j                  d       5  t	        j
                  d|       d d d        y # 1 sw Y   y xY w)	Nr  rI   rJ   r   r  test_bigintwarningFr  )r   r~  r   r  r   r%   rW  rW   r   s      r/   test_bigint_warningr    sm    D	C!Q=	0B99.D9F!KKK		#	#D	) 7/67 7 7s   A""A+c                    | }t        ddgddgd      }t        j                  t        d      5  |j	                  d|d	d
       d d d        y # 1 sw Y   y xY w)NrI   rJ   rK   rL   r  r  zEmpty table name specifiedr  r  r  Fr{  )r   r  r  r  r~  r  s      r/   test_valueerror_exceptionr    sZ    D	QFQF3	4B	z)E	F G
		rty	FG G Gs   AAc                :  
 | }ddl m
mm ddlm}m}  |       } G 
fdd|      }|j                         5  |j                  j                  |       d d d         ||      } |       5 }t        ddgdd	gd
      }|j                  d|dd      dk(  sJ |j                          |j                  |j                  |j                        }	t        |	      }d d d        t!        j"                        ddgk(  sJ y # 1 sw Y   xY w# 1 sw Y   2xY w)Nr   r2   r   r6   )r_  sessionmakerc                  J    e Zd ZdZ W  W d      Z W   W d            Zy),test_row_object_is_named_tuple.<locals>.Testr  Trf  2   N)rr  rs  rt  ri  rk  string_columnr  s   r/   Testr    s"    $G.vbz*r.   r  rf   rI   helloworld)rk  r  r  Fr  r  rJ   rk  r  )r?   r2   r   r6   rm  r_  r  rk   rB   
create_allr   r~  rV   r  rk  r  r"  r   )rW  rW   r_  r  	BaseModelr  r^  rr  r   
test_queryr2   r   r6   s             @@@r/   test_row_object_is_named_tupler    s   D
 

 !"I+ +y +
 
 ,%%d+,%G	 #gq!f7IJKII<T)IT	
 	]]477D,>,>?
z"# 

o6666, ,# #s   D2A.DDDc                X   | }t        j                  d       d}t        dddgi      }|j                  ||dd       t	        j
                  d	d
      5  t        ||      }d d d        d}t        dddgi|t        dg|            }t        j                  |       y # 1 sw Y   @xY w)Nr  rz  r  xyFr  )rp   r   r|  zfuture.infer_stringTzstring[pyarrow_numpy]r  )rA   r   )
r  r  r   r~  r  r~  r%   r   r   r  )rW  rW   r   r   r  rA   r  s          r/   test_read_sql_string_inferencer  
  s    D
	"E	C#s$	%BIIeUiI@			0$	7 -t,- $E	sCjse50IH &(+- -s   B  B)c           	         | }t        dt        dddd      gid      }|j                  d|dd	
       t        j                  d|      j
                  d   }|dk(  sJ y Nti  r     r  r  rz  r  F)r|  r   select * from testr   r   z2020-12-31 12:00:00.000000)r   r   r~  r  r  r   )rW  rW   r   r  s       r/   test_roundtripping_datetimesr    sf    D	C(4R456>N	OBIIfdiuI=[[-t499$?F1111r.   c               #     K   t        j                  t        j                  dt        j                              5 } | 5 }| d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY ww)Nro  )detect_types)rp  r   rz   r   PARSE_DECLTYPESrq  s     r/   sqlite_builtin_detect_typesr  &  sc     			
1H1HI
 	 	TJ	 	 	 s3   9A,A AA 	A,A	A  A)%A,c           	         | }t        dt        dddd      gid      }|j                  d|dd	
       t        j                  d|      j
                  d   }|t        d      k(  sJ y r  )r   r   r~  r  r  r   r   )r  rW   r   r  s       r/   )test_roundtripping_datetimes_detect_typesr  /  sk    &D	C(4R456>N	OBIIfdiuI=[[-t499$?FY;<<<<r.   c                   | }t        ddgddgddgd      }|j                         5 }|j                         5  |j                  d       |j                  d	       d d d        d d d        |j	                  d
|d      dk(  sJ |j	                  d|dd      dk(  sJ |j	                  d|dd      dk(  sJ t        j                  d
|      }t        j                  ||       t        j                  d|      }t        j                  ||       t        j                  d|d      }t        j                  ||       t        j                  d|d      }t        j                  ||       d}t        j                  t        |      5  t        j                  d|d       d d d        |j                         5 }|j                         5  |j                  d       |j                  d	       d d d        d d d        |j	                  d|dd      dk(  sJ |j	                  d|ddd       |j	                  d|ddd      dk(  sJ t        j                  d|d      }	t        j                  t        ||gd      |	       y # 1 sw Y   ,xY w# 1 sw Y   1xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)NrI   rJ   r  r   r  r	  r
  z$DROP SCHEMA IF EXISTS other CASCADE;zCREATE SCHEMA other;test_schema_publicFr  test_schema_public_explicitr*  )r   rp   r   r   test_schema_otherotherr+  z!Table test_schema_other not foundr  )r   rp   r   r   r  )r   rp   r   r   r|  r   Tr  )r   r   rk   r   r~  r   r%   r   r  r  r  r  r   )
r1  rW   r   rp   r  r  r  res4r  r  s
             r/   test_psycopg2_schema_supportr  8  s   %D 
QFS#Jc
K	LB 
 83YY[ 	8 FG 67	88 99.D9F!KKK
		.	 	 	
 		 			*E'	RVWWW 2D9D"d#;TBD"d#;T(SD"d#14HD"d#
-C	z	- G.XFG 
 83YY[ 	8 FG 67	88 			*WE	RVWWWII    			$ 	 	
 			 

0$w
GC&"b=sC}	8 	88 8<G G	8 	88 8sR   J#JJ
J ;J8#J,/J8J	JJ J),J5	1J88Kc                   | }ddl m}  |d      }|j                         5 }|j                         5  |j	                  |       d d d        d d d        d}t        j                  ||      }t        dt        dd      gd	z  gd
dgd	z        }t        j                  ||       t        j                  |d      5 }|j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   rw   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;rI   2021r   r   rJ   rk  
created_dtr   Tr  person)r!  rx   r   rk   rN   r  r  r   r   r   r  r   r    r  )	r1  rW   rx   r?  rp   r  r  r  r  s	            r/   test_self_join_date_columnsr    s     &D#		L 
 &3YY[ 	&KK%	&&
 	S  [[D)F
Yv%(	)A	-.|8Lq8PH &(+ 
	5 'X&' '	& 	&& &' 's.   C#CC#<C/C 	C##C,/C8c                   | }t        g dg dd      }t        j                  |      5 }|j                         5  |j	                  |d      dk(  sJ 	 d d d        |j                  d      sJ |j                         5  |j                  d       d d d        |j                  d      rJ 	 d d d        y # 1 sw Y   cxY w# 1 sw Y   2xY w# 1 sw Y   y xY w)Nr  r  r  drop_test_framerL   )r   r   r    rP  r~  r  r  )rW  rW   r  r  s       r/   test_create_and_drop_tabler    s    D#7@TUVJ		 	:)&&( 	H##J0ABaGGG	H ""#4555&&( 	4  !23	4 &&'89999	: 	:	H 	H
	4 	4	: 	:s:   CB6+C?CC6B?	;CC	CCc                    | }t        t        ddd      t        ddd      gdg      }|j                  d|d      dk(  sJ t        d	|      }t	        j
                  ||j                  t                     y )
Nr  rI   rJ   r  r   r  Fr  zSELECT * FROM test_date)r   r   r~  r$   r   r  r   r   )rs  rW   r   r  s       r/   test_sqlite_datetime_dater    sn    D	Dq!$d4A&67#	GB99+4u9=BBB
2D
9C#ryy~.r.   tz_awareFTc                f   |}| st        ddd      t        ddd      g}n7t        ddd      }t        |j                               j	                  d	       }t        |d
g      }|j                  d|d      dk(  sJ t        d|      }|j	                  d       }t        j                  ||       y )Nr  r   rI   r  r  rJ   r  r  c                "    | j                         S r  )timetz)r  s    r/   r  z+test_sqlite_datetime_time.<locals>.<lambda>  s    		 r.   r  r   r  Fr  zSELECT * FROM test_timec                $    | j                  d      S r  r  r  s    r/   r  z+test_sqlite_datetime_time.<locals>.<lambda>  s    

= 9 r.   )
r   r   r   to_pydatetimer  r   r~  r$   r   r  )r  rs  rW   tz_timestz_dtr   r  r  s           r/   test_sqlite_datetime_timer    s    DAqM41b>20!M%--/0445KL	8cU	+B99+4u9=BBB
2D
9Cvv9:H#x(r.   c                ~    | j                  d| d      }|D ]  \  }}}}}}	||k(  s|c S  t        d| d| d      )NzPRAGMA table_info(r  zTable z	, column z
 not found)rN   r  )
rW   r   columnrecscidr   ctypenot_nulldefaultpks
             r/   get_sqlite_column_typer    s^    <<,UG156D37 /T5(GR6>L veWIfXZ@
AAr.   c                   | }ddg}ddg}t        ||      }|j                  d|      dk(  sJ |j                  d	|dd
i      dk(  sJ t        |dd      dk(  sJ t        |d	d      d
k(  sJ d}t        j                  t
        |      5  |j                  d|dt        i       d d d        |j                  d|d
      dk(  sJ t        |dd      d
k(  sJ t        |dd      d
k(  sJ y # 1 sw Y   GxY w)Nr   r   r   r!  r   r"  r  rJ   r#  STRINGr$  r  z!B \(<class 'bool'>\) not a stringr  r  r'  )r   r~  r  r  r  r  bool)rs  rW   r  r   r   r  s         r/   test_sqlite_test_dtyper    s    D:D%D	4	&B99,D91Q66699-T#x9IQNNN "$c:iGGG!$s;xGGG
.C	z	- =
		wDd	<= 99-4x9HAMMM!$(;SAXMMM!$(;SAXMMM= =s   C--C6c                b   | }t        dd g      t        t        ddd      d g      t        dd gd      t        dd g      d}t        |      }d	}|j                  ||
      dk(  sJ t	        ||d      dk(  sJ t	        ||d      dk(  sJ t	        ||d      dk(  sJ t	        ||d      dk(  sJ y )NTr1  r   rI   r  r  r  r2  r6  r  rJ   r3  r  r4  r+  r5  r4   REAL)r   r   r   r~  r  )rs  rW   r  r   r  s        r/   test_sqlite_notna_dtyper	    s    Dd|$q!,d34q$ix0d$	D 
4B
C99#49(A---!$V4	AAA!$V4CCC!$U3y@@@!$W5???r.   c                   | }t        ddgddggddg      }d}t        j                  t        |	      5  |j	                  d
|       d d d        t        g d      D ]|  \  }}|j	                  ||      dk(  sJ t        j                  ||       t        ddgddggd|g      }d|d}|j	                  ||      dk(  sJ t        j                  ||       ~ y # 1 sw Y   xY w)NrI   rJ   rK   rL   r  r  r   z$Empty table or column name specifiedr  r  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"99beginswithnumber12345r  test_weird_col_namer  )r   r  r  r  r~  	enumerater   table_exists)rs  rW   r   r  ndx
weird_namer  c_tbls           r/   test_sqlite_illegal_namesr    s    D	QFQF#c3Z	8B
0C	z	- %
		rt	$% %	
 &Z yyjdy3q888T*!Q!Q(3
2CD%c!W-zzu$z/1444%)&% %s   CC'c                   t         dj                  t        dj                  t        j                  dj                  t
        dj                  t        dj                  t        dj                  t        d       d t        j                  dj                  t        dj                  i	}g }|D ]D  }t        |t              rt        |      rd }|t        |         }|j                   ||             F | t        |      z  S )Nz'{}'z{:.8f}z{:d}c                     y)NNULLr-   )r  s    r/   r  zformat_query.<locals>.<lambda>+  s    r.   z{:.10f}z'{!s}')r   r  r   r   str_bytesrS   rl  r   r<  r  ry   r   r   rJ  )r   ri  _formattersprocessed_argsarg	formatters         r/   format_queryr  #  s    &--V]]
v}}xV]]T
$


I$$hoo
K N .c5!d3iCS	*	in-. ~&&&r.   c                    t        j                  |      5 }|j                  |       j                         }ddd       dS t	        |      S # 1 sw Y   xY w)z#Replace removed sql.tquery functionN)r   r#   rN   r   r"  )r  rp   r  r  s       r/   tqueryr  :  sS    			s	# 3z  '0023;4-DI-3 3s    AAc           	     @   t        t        j                  j                  d      j	                  d      t        t        d      t              t        ddd      	      }t        j                  |d
| d      dk(  sJ t        j                  d|       }|j                  |_        |}t        j                  ||       dgt        |      z  |d<   |j!                         }t        t        j"                  t        |            t        j$                        dz   }|j!                         |d<   t        j                  |d| d      dk(  sJ t        j                  d| d      }|j!                         }||_        d|j                  _        t        j                  ||       y )NrJ   r&  rL   ABCDr  
2000-01-01r&  r   r  r  r  Fr  zselect * from test_tabler  txtIdxtest_table2zselect * from test_table2r  )r   r   r  r  r  r   r"  r  r   r   r~  r  r   r   r  r  r  rt  r   r   )rs  r   r  r  frame2new_idxs         r/   test_xsqlite_basicr)  A  sF   
		a 009d6l&1r<E
 ::e,N%PTVVVV\\4nEF ;;FLH&%(53u:%E%LZZ\FBIIc&k*"((;b@GLLNF5M::f=nERVXXXX\\5~QVWFzz|HHNHNN(F+r.   c           	     n   t        t        j                  j                  d      j	                  d      t        t        d      t              t        ddd      	      }t        j                  |j                  d
<   t        j                  |d      }| j                         }|j                  |       d}|j                         D ]  \  }}t!        |g| }t#        ||          | j%                          t        j&                  d|       }|j(                  |_        t+        j,                  ||d       y )NrJ   r!  r"  r  r#  r&  r   r  r  r  rz  z(INSERT INTO test VALUES (%s, %s, %s, %s)r{  r  gMbP?)rtol)r   r   r  r  r  r   r"  r  r   r  r   r   r  rM   rN   iterrowsr  r  rV   r  r   r   r  )	rs  r   r#  rZ   insr  r]   fmt_sqlr  s	            r/   test_xsqlite_write_row_by_rowr/  \  s    
		a 009d6l&1r<E
 vvEJJtv.J



!CKK

4C.." ,3s)S)wN+, \\.NCF;;FL&%d3r.   c           	        t        t        j                  j                  d      j	                  d      t        t        d      t              t        ddd      	      }t        j                  |d
      }| j                         }|j                  |       d}|j                  d   }t        j                  |       5 }|j                  |t        |             d d d        | j!                          t        j"                  d|       }|j$                  d d |_        t'        j(                  ||d d        y # 1 sw Y   ]xY w)NrJ   r!  r"  r  r#  r&  r   r  r  rz  z$INSERT INTO test VALUES (?, ?, ?, ?)r   r  rI   )r   r   r  r  r  r   r"  r  r   r   r  rM   rN   r   r#   rJ  rV   r  r   r   r  )rs  r   r#  rZ   r-  r]   r  r  s           r/   test_xsqlite_executer1  s  s    
		a 009d6l&1r<E
 v.J



!CKK

0C
**Q-C			~	. ,*3c
+,\\.?F;;r?FL&%),, ,s   <D44D=c           	     "   t        t        j                  j                  d      j	                  d      t        t        d      t              t        ddd      	      }t        j                  |d
      }|j                         }|D ]5  }|j                  d      }t        |      dk(  s#|d   dk(  s,|d   dk(  r5J  t        j                  |d
ddg      }|j                         }d|v sJ | j                         }|j                  |       y )NrJ   r!  r"  r  r#  r&  r   r  r  rz   r   r   rI   DATETIME)r   zPRIMARY KEY ("A", "B"))r   r   r  r  r  r   r"  r  r   r   r  
splitlinesr  r  rM   rN   )rs  r   r#  lineslinetokensrZ   s          r/   test_xsqlite_schemar9    s    
		a 009d6l&1r<E
 v.J!!#E +Cv;!q	S 0!9
***+
 vS#J?J!!#E#z111



!CKK
r.   c                x   d}| j                         }|j                  |       t        j                  |       5 }|j                  d       |j                  d       t	        j
                  t        j                  d      5  |j                  d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nc
    CREATE TABLE test
    (
    a TEXT,
    b TEXT,
    c REAL,
    PRIMARY KEY (a, b)
    );
    ,INSERT INTO test VALUES("foo", "bar", 1.234)z,INSERT INTO test VALUES("foo", "baz", 2.567)zExecution failed on sqlr  z(INSERT INTO test VALUES("foo", "bar", 7))rM   rN   r   r#   r  r  rx  )rs  r#  rZ   r  s       r/   test_xsqlite_execute_failr=    s    J 


!CKK
			~	. K*IJIJ]]3,,4MN 	KIJ	K	K K	K 	K	K Ks$   AB0B$B0$B-	)B00B9c                    d} t        j                  t        j                  d            5 }|j	                         }|j                  |        t        j                  |      5 }|j                  d       d d d        d d d        d}t        j                  t        j                  |      5  t        d       d d d        y # 1 sw Y   OxY w# 1 sw Y   SxY w# 1 sw Y   y xY w)Nr;  ro  r<  z$Cannot operate on a closed database.r  r  r{  )rp  r   rz   r   rM   rN   r   r#   r  r  rD  r  )r#  rW   rZ   r  r  s        r/   &test_xsqlite_execute_closed_connectionr?    s    J 
		GOOJ7	8 ODkkmJ""4( 	OJMN	O	O 1C	w//s	; /#./ /		O 	O	O O/ /s/   7C"C4C+CC	CCC#c                    t        dt        j                  d      i      }t        j                  || dd      dk(  sJ y )NFromr   testkeywordsFrp   r   r   )r   r   onesr   r~  )rs  r   s     r/   $test_xsqlite_keyword_as_column_namesrE    s7    	FBGGAJ'	(B::bn>OSTTTTr.   c                   t        ddgdg      }t        j                  || dd      dk(  sJ | }t        d |j	                  d	      D              }|d
k(  sJ t        j
                  d	|      }t        j                  ||       y )NrI   rJ   c0r   mono_dfFrC  c              3  &   K   | ]	  }|d      yw)r   Nr-   ).0my_c0s     r/   	<genexpr>z4test_xsqlite_onecolumn_of_integer.<locals>.<genexpr>  s     Ou%(Os   zselect * from mono_dfrK   )r   r   r~  sumrN   r  r   r  )rs  rH  con_xthe_sumr  s        r/   !test_xsqlite_onecolumn_of_integerrP    s     A/G::g>	OSTTTTEO6M(NOOGa<<\\159F&'*r.   c                   t        ddgddgd      }t        g dg dd      }d}d	| }d
}t        j                  t        |      5  t	        j
                  || |d       d d d        t        ||        t	        j
                  || |d       d}t        j                  t        |      5  t	        j
                  || |d       d d d        t	        j
                  || |dd       t        ||       ddgk(  sJ t	        j
                  || |dd      dk(  sJ t        ||       g dk(  sJ t        ||        t	        j
                  || |dd      dk(  sJ t        ||       ddgk(  sJ t	        j
                  || |dd      dk(  sJ t        ||       g dk(  sJ t        ||        y # 1 sw Y   NxY w# 1 sw Y   xY w)NrI   rJ   r   r   r  r\  )r   r   Etable_if_existszSELECT * FROM z*'notvalidvalue' is not valid for if_existsr  notvalidvalue)r   rp   r   r|  r  z&Table 'table_if_exists' already existsr  F)r   rp   r   r|  r   r{  r  r   rK   )rK   r   rL   r   r   rR  r   )r  r   rU  rV  rW  )r   r  r  r  r   r~  r  r  )rs  df_if_exists_1df_if_exists_2r   
sql_selectr  s         r/   test_xsqlite_if_existsr[    s   Ac
CDN	?KLN"J!*.J
6C	z	- 


 %		

 z>* JJ.zV 3C	z	- 


 		

 JJ *.1h5IIII

 	
 			 *.15SSSSz>* 	

 	
 			 *.1h5IIII

 	
 			 *.1 6    z>*Q
 

 
s   	F/-F</F9<G)rX   r   )r   r   )r   
list[dict])r   r\  r   r   )r   r   )r   r   )r   r   rW   Lsqlite3.Connection | sqlalchemy.engine.Engine | sqlalchemy.engine.Connection)r   r   rW   r]  r  r  (,  
__future__r   rp  r   rP   r   r   r   r   r   r	   pathlibr   rz   typingr   r9  r  r   r  pandas._libsr   pandas.compatr   r   pandas.compat._optionalr   pandas.util._test_decoratorsutil_test_decoratorstdpandasr  r   r   r   r   r   r   r   r   r   r   pandas._testing_testingr   pandas.core.arraysr   r   pandas.util.versionr   	pandas.ior   pandas.io.sqlr   r    r!   r"   r#   r$   r%   r?   r  filterwarnings
pytestmarkfixturer0   rC   r^   r`   rq   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r"  r&  r)  r+  r1  r3  r6  r8  r>  rG  rM  rO  rQ  rU  rW  rY  r[  r]  r_  ra  rc  re  rh  rj  rm  rs  ru  rw  paramr  mysql_connectablemysql_connectable_irismysql_connectable_typespostgresql_connectablepostgresql_connectable_irispostgresql_connectable_typessqlite_connectablesqlite_connectable_irissqlite_connectable_typessqlalchemy_connectablesqlalchemy_connectable_irissqlalchemy_connectable_typesadbc_connectableadbc_connectable_irisadbc_connectable_typesall_connectableall_connectable_irisall_connectable_typesparametrizer  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r&  r.  r3  r=  rB  rH  rJ  rL  rS  rU  rW  rY  r]  r_  rb  rh  rk  rp  rx  r  r  r  r  r  r  r  r  r  r  r  r  rl  rS   r  r  r  r  r  r  r  r	  r  r  r  r  r  r   r$  r)  r3  rA   r   rD  rH  rK  skip_if_installedrO  rU  rZ  r^  ra  rc  rv  ry  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/  r9  rG  rT  infr[  rs  rw  rz  r  r  r  r  r  r  r  r  r  r  
no_defaultr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r)  r/  r1  r9  r=  r?  rE  rP  r[  r-   r.   r/   <module>r     s   "   
           ? ) )     (     [[''C

  82D> "&><2(*7Z-;8  
  6 , ,   ,  ,F , ,2230..
V.&""
V".       
  
  
  
   % % % %
  
    $     
  
 " "    
      
    
  
    "  *       FLL'v{{~~>FLL%V[[^^<  FLL,FKKNNCFLL*&++..A  FLL-V[[^^DFLL+6;;>>B  FLL-V[[^^DFLL+6;;>>B  FLL2&++..IFLL0G  FLL36;;>>JFLL1H  
    +-CCFXX  88;RR 
 ::=UU 
 FLL'v{{~~>  FLL'v{{~~>FLL#6;;>>:  FLL(?FLL$FKKNN;  ),<+==@PP  #8"99<QQ 
 !$:#;;>TT 
 1O 2O 1L 2L 1Q 2QB 1M 2M 1D'?3> 4 2> 1-/NOM P 2M 1J 2J !56. 7. !56. 7.$ !<= >6 !56! 7!& !<=! >! !<=	! >	! !78> 9>" !67F 8F> !23!$ 4!$H !78)Az?;", < 9",J !7865 965r 1- 2-. !2315 415h !78 , 9 ,F,2B<= !56! 7!$ !56! 7!& !56! 7!$ !56! 7! !56	= 7	= 1. 2. 1G 2G 1# 2#" 1# 2#$ 1	/ 2	/ 1	, 2	, 1/ 2/( 1/ 2/* !56< 7< !674 84n !67"?@	,.HI	w/!&	

 
		W|5	%, A 8%,P !67? 8? 1+4 2+4\ 1
; 2
; 1%"(# 2$($ 1F
 2F
R 1= 2=& 1	, 2,, 1N 2N 1
" 2
" 1. 2. 1# 2#. 1- 2-8 1-* 2-*` 1# 2#@ 1: 2: 1# 2#( 1, 2,: 1+ 2+ 11 21, !564 74$>2 1; 2;. !78A 9A !78	("((3-,,7hYG() 9* !78Xx$894 : 94 14 24( h14 2  4 !<=, >, !<=( >( 1# 2#/ l#1 $1 l#+ $+ #"1$ !78+ 9+( !780 902 1/ 2/* !56< 7< !<=! >! !<=X >X !<=: >: !=>= ?=, !78& 9& !=>< ?< !78/@(AB
* C 9
* !78	* 9	* !787 97 !78, 9,< !78, 9, !78	? 9	? !=>? ??> !78* 9*0 !78* 9*. !78	- 9	- !78# 9#4 !78H 9H !78& 9& !78& 9&" !78& 9&$ 1$ 2$N 1  2  1& 2&R !78N 9N: !78&& 9&&R !78!5 9!5H !7808 908f !78  9 F !78bffX"&&	*bffWI,PQ!	 9
!6 !78"( 9"(J 1N 2N 1# 2# !78' 9' 1' 2'
F	 1*.>!?@&4 A 2&4R 1*.>!?@+4 A 2+4\ 1!QR> S 2>   4 4n 10 20* 13>>;K*LM*.>!?@, A N 2,2>7G$7N,&2  = GD GDT  '  'F:/ eT]3) 4)$BN,@&&@'..,64.-*(K*/,U
+ O+r.   