
    [6g6                   Z2   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>        ?                    d          Z@ejA        d             ZBd ZCd=dZDd=dZEd=dZFd ZGd>dZHd?dZId?dZJd@d ZKd! ZLdAd$ZMdBd&ZNejA        d'             ZOejA        d(             ZPejA        d)             ZQejA        d*             ZRejA        d+             ZSd, ZTd- ZUdCd0ZVdDd2ZWejA        d3             ZXejA        d4             ZYejA        d5             ZZejA        d6             Z[ejA        d7             Z\ejA        d8             Z]ejA        d9             Z^ejA        d:             Z_ejA        d;             Z`ejA        d<             ZaejA        d=             ZbejA        d>             ZcejA        d?             ZdejA        d@             ZeejA        dA             ZfejA        dB             ZgejA        dC             ZhejA        dD             ZiejA        dE             ZjejA        dF             ZkejA        dG             ZlejA        dH             ZmejA        dI             ZnejA        dJ             ZoejA        dK             ZpejA        dL             ZqejA        dM             ZrejA        dN             ZsejA        dO             ZtejA        dP             Zu ejv        dQej>        jw        R           ejv        dSej>        jw        R          gZx ejv        dTej>        jw        R           ejv        dUej>        jw        R          gZy ejv        dVej>        jw        R           ejv        dWej>        jw        R          gZz ejv        dXej>        jw        R           ejv        dYej>        jw        R          gZ{ ejv        dZej>        jw        R           ejv        d[ej>        jw        R          gZ| ejv        d\ej>        jw        R           ejv        d]ej>        jw        R          gZ}g d^Z~g d_Zg d`Zexe{z   e~z   Zeye|z   ez   Zeze}z   ez   Zda ejv        dbej>        jw        R          gZ ejv        dcej>        jw        R           ejv        ddej>        jw        R          gZ ejv        deej>        jw        R           ejv        dfej>        jw        R          gZedggz   ez   Zedhgz   ez   Zedigz   ez   Zej>                            d.e          dj             Zej>                            d.e          dk             Zej>                            d.e          dl             Zej>                            d.e          dm             Zej>                            d.e          ej>                            dnddog          dp                         Zej>                            d.e          ej>                            dqdrdsg          dt                         Zej>                            d.e          du             Zej>                            d.e          dv             Zej>                            d.e          dw             Zej>                            d.e          dx             Zej>                            d.e          dy             Zej>                            d.e          dz             Zej>                            d.e          d{             Zej>                            d.e          d|             Zej>                            d.e          d}             Zej>                            d.ex          d~             Zej>                            d.e{          ej>                            dddg          d                         Zej>                            d.e{          d             Zej>                            d.e          d             Zej>                            d.ex          d             Zej>                            d.e{          d             Zd Zd Zd Zd Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          ej>                            dg d          ej>                            de4j        ddfe4j        ddfe4j;        ddfe4j<        ddfg          d                                     Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          ej>                            dg d          d                         Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          ej>                            ddeeeedg          d                         Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zd Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          ej>                            ddddddddddddddde ej        e          j        dk    rdndfg          dτ                         Zej>                            d.e          ej>                            dddg          dӄ                         Zej>                            d.e          dԄ             Z ej        dզ          ej>                            d.e          dք                         Zej>                            d.e          dׄ             Zej>                            d.e          d؄             Zej>                            d.e          dل             Zdڄ Z ej        d          dۄ             Z ej        d          d܄             Zd݄ Zdބ Zd߄ Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e{          ej>                            dddgg          d                         Zej>                            d.e{          d             Zej>                            d.e{          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          d              Zej>                            d.e          d             Zej>                            d.e          d             Zej>                            d.e          ej>                            ddej        gidej         giej         gdgdg          d                         Z ej>                            d.e          d             Zej>                            d.e          d	             Zej>                            d.e          d
             Zej>                            d.e          d             Zej>                            d.e          d             Zd Zd Zej>                            d.e          ej>                            dddg          d                         Zej>                            d.e          ej>                            dddg          d                         Z	ej>                            d.e          ej>                            dg d          d                         Z
ejA        dEd            ZejA        d             Zej>                            d.e          d             Zej>                            d.e          ej>                            dej        dg          ej>                            dddg          d                                     Zd Zd Zd  Zd! Zd" Zd# ZejA        d$             Zd% Zej>        jw        d&             Zej>        jw        d'             Zd( Zd) Zej>                            d*d+d,g          d-             Zd. Zd/ Zd0 Zd1 Z d2 Z!dFd3Z"d4 Z#d5 Z$d6 Z%d7 Z&d8 Z'd9 Z(d: Z)d; Z*d< Z+dS (G      )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-       W/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/pandas/tests/io/test_sql.pysql_stringsr0   E   sU     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559I9IIIFFuExzzH5}e$$|U##}e$$|U##vvvc{{## D Kr.   	iris_filer   c                   d}|                                  }|                    |           |                    d d          5 }t          j        |          }t          |           d}g }d |D             }|                    ||           d d d            n# 1 swxY w Y   |                                 |                                  d S )NzCREATE TABLE iris (
            "SepalLength" REAL,
            "SepalWidth" REAL,
            "PetalLength" REAL,
            "PetalWidth" REAL,
            "Name" TEXT
        )utf-8newlineencodingz&INSERT INTO iris VALUES(?, ?, ?, ?, ?)c           	         g | ][}t          |d                    t          |d                   t          |d                   t          |d                   |d         f\S r               float.0rows     r/   
<listcomp>z0create_and_load_iris_sqlite3.<locals>.<listcomp>   sg     	
 	
 	
  c!fc!fc!fc!fA	
 	
 	
r.   )	cursorexecuteopencsvreadernextexecutemanyclosecommitconnrD   stmtcurcsvfilerZ   recordss          r/   create_and_load_iris_sqlite3re   {   s   D ++--CKK	w	7	7 '7G$$V7	
 	
 	
 	
 	
 	g&&&#' ' ' ' ' ' ' ' ' ' ' ' ' ' '$ IIKKKKKMMMMMs   A
BB Bc                   d}|                                  5 }|                    |           |                    d d          5 }t          j        |          }t          |           d}d |D             }|                    ||           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                                  d S )NzCREATE TABLE iris (
            "SepalLength" DOUBLE PRECISION,
            "SepalWidth" DOUBLE PRECISION,
            "PetalLength" DOUBLE PRECISION,
            "PetalWidth" DOUBLE PRECISION,
            "Name" TEXT
        )rF   rG   z+INSERT INTO iris VALUES($1, $2, $3, $4, $5)c           	         g | ][}t          |d                    t          |d                   t          |d                   t          |d                   |d         f\S rK   rP   rR   s     r/   rU   z3create_and_load_iris_postgresql.<locals>.<listcomp>   sg     	 	 	  #a&MM#a&MM#a&MM#a&MMF	 	 	r.   )rV   rW   rX   rY   rZ   r[   r\   r^   r_   s          r/   create_and_load_iris_postgresqlrh      sM   D 
 +#D^^D7^;; 	+wZ((FLLL@D	 	 "	 	 	G OOD'***!	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	++ + + + + + + + + + + + + + +( 	KKMMMMMs6   -B/ABB/B	B/B	 B//B36B3c                
  	 ddl m} t                      }|                    d d          5 }t	          j        |          }t          |          		fd|D             } ||                              |          }|                                 5 }|	                    |d           |
                    |           |                    |           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )	Nr   insertrF   rG   c                J    g | ]}t          t          |                     S r-   dictzip)rS   rT   headers     r/   rU   z(create_and_load_iris.<locals>.<listcomp>   s+    ;;;S$s63''((;;;r.   T
checkfirstbind)r?   rk   rC   rX   rY   rZ   r[   valuesbegindropcreaterW   )
r`   rD   rk   r8   rc   rZ   paramsra   conrp   s
            @r/   create_and_load_irisr{      s   !!!!!!  D	w	7	7 7G$$f;;;;F;;;vd||""6**ZZ\\ 	SIIcdI+++KKSK!!!KK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s7   A$C8AC C8 C$	$C8'C$	(C88C<?C<c                8   d}t          | t          j                  r+|                                 }|                    |           d S t          dd          }|rlt          | |j                  rW|                                 5 }|                    |           d d d            n# 1 swxY w Y   |                                  d S ddlm}  ||          }| 	                                5 }|                    |           d d d            d S # 1 swxY w Y   d S )Nz+CREATE VIEW iris_view AS SELECT * FROM irisadbc_driver_manager.dbapiignoreerrorsr   text)

isinstancesqlite3
ConnectionrV   rW   r   r^   r?   r   rv   )r`   ra   rb   adbcr   rz   s         r/   create_and_load_iris_viewr      s   8D$*++ "kkmmD)*EhWWW 		"JtT_55 		" "#D!!!" " " " " " " " " " " " " " "KKMMMMM''''''4::D "D!!!" " " " " " " " " " " " " " " " " "s$   B&&B*-B*,DDDdialectstrc                H   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   )r   r   r   r2   r   r4   r   r5   r7   	date_type	bool_typerB   r   s                r/   types_table_metadatar      sA   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  8++I"h..GIxzzHEy$y)$$|W%%))z5!!x!!y)$$)) ),, E Lr.   
types_data
list[dict]c                   d}d}t          | t          j                  rA|                                 }|                    |           |                    ||           d S |                                 5 }|                    |           |                    ||           d d d            n# 1 swxY w Y   |                                  d S )Na  CREATE TABLE types (
                    "TextCol" TEXT,
                    "DateCol" TEXT,
                    "IntDateCol" INTEGER,
                    "IntDateOnlyCol" INTEGER,
                    "FloatCol" REAL,
                    "IntCol" INTEGER,
                    "BoolCol" INTEGER,
                    "IntColWithNull" INTEGER,
                    "BoolColWithNull" INTEGER
                )ze
                INSERT INTO types
                VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)
                )r   r   r   rV   rW   r\   r^   )r`   r   ra   ins_stmtrb   s        r/   create_and_load_types_sqlite3r      s    
DH
 $*++ 	kkmmD*-----[[]] 	2cKKOOHj111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	s   4,B,,B03B0c                    |                                  5 }d}|                    |           d}|                    ||           d d d            n# 1 swxY w Y   |                                  d S )Na  CREATE TABLE types (
                        "TextCol" TEXT,
                        "DateCol" TIMESTAMP,
                        "IntDateCol" INTEGER,
                        "IntDateOnlyCol" INTEGER,
                        "FloatCol" DOUBLE PRECISION,
                        "IntCol" INTEGER,
                        "BoolCol" BOOLEAN,
                        "IntColWithNull" INTEGER,
                        "BoolColWithNull" BOOLEAN
                    )zy
                INSERT INTO types
                VALUES($1, $2::timestamp, $3, $4, $5, $6, $7, $8, $9)
                )rV   rW   r\   r^   )r`   r   rb   ra   s       r/    create_and_load_types_postgresqlr     s    	 *#
 	D
 	j)))'* * * * * * * * * * * * * * ** 	KKMMMMMs   0AAAc                   ddl m} ddlm} t	          |          } ||                              |          }t          | |          r|                                 5 } |                                 5  |	                    | d           |
                    |            |                     |           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S |                                 5  |	                    | d           |
                    |            |                     |           d d d            d S # 1 swxY w Y   d S )Nr   rj   EngineTrq   rs   )r?   rk   sqlalchemy.enginer   r   ru   r   connectrv   rw   rx   rW   )r`   r   r   rk   r   r   ra   s          r/   create_and_load_typesr   5  s   !!!!!!(((((( ))E6%==
++D$ 
\\^^ 	#t # #

4D
111$'''T"""# # # # # # # # # # # # # # #	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# ZZ\\ 	 	JJtJ---LLdL###LL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sJ   C3AC6CC	C	C	
CC!C;AEEEc           
     d   ddl m}m}m}m}m} ddlm}  |            } |d| |d |d                              }ddidd	ig}	 ||                              |	          }
t          | |          r| 
                                5 } |                                 5  |                    | d
           |                    |            |                     |
           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   nn|                                 5  |                    | d
           |                    |            |                     |
           d d d            n# 1 swxY w Y   t          dd          t          dd          g}t!          |d          S )Nr   )r2   r   r5   r7   rk   r   datetzDateColWithTzT)timezonez2000-01-01 00:00:00-08:00z2000-06-01 00:00:00-07:00rq   rs   z2000-01-01 08:00:00UTCtzz2000-06-01 07:00:00name)r?   r2   r   r5   r7   rk   r   r   ru   r   r   rv   rw   rx   rW   r   r   )r`   r2   r   r5   r7   rk   r   rB   r   datetz_datara   expected_datas               r/   create_and_load_postgres_datetzr   I  s                 )(((((xzzHU8XvvoxxQU?V?V?V'W'WXXF 8	
 8	
	K 6&>>  --D$ 
\\^^ 	#t # #DT2224(((T"""# # # # # # # # # # # # # # #	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# ZZ\\ 	 	KKK...MMtM$$$LL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	'E222'E222M -o6666sJ   
DAC."D.C2	2D5C2	6DD	D	%AE44E8;E8framer   c                    | j         j        d         j        }| j        d         }t          |t          j                  sJ t          j        |t          g d| j	        d                     | j
        dv sJ d S )Nr   ffffff@g      @gffffff?皙?Iris-setosa)indexr   ))      )   r   )dtypesiloctype
issubclassnpfloatingtmassert_series_equalr   columnsshape)r   pytyperT   s      r/   check_iris_framer   v  s    \q!&F
*Q-Cfbk*****V777u}STUUU   ;,,,,,,,r.   
table_namec                l   d| }t          dd          }t          | t          j                  rA|                                 }|                    |                                          d         S |rrt          | |j                  r]|                                 5 }|                    |           |                                d         cd d d            S # 1 swxY w Y   d S ddlm} ddl	m
} t          | t                    r	  ||           }|                                5 } |                     |                                          cd d d            |                                 S # 1 swxY w Y   	 |                                 d S # |                                 w xY wt          | |          rU|                                 5 } |                     |                                          cd d d            S # 1 swxY w Y   d S |                     |                                          S )Nz SELECT count(*) AS count_1 FROM r}   r~   r   r   )create_enginer   )r   r   r   r   rV   rW   fetchoner?   r   r   r   r   r   exec_driver_sql
scalar_onedispose)r`   r   ra   r   rb   r   r   engines           r/   
count_rowsr     s   :j::D%&A(SSSD$*++ ;kkmm{{4  ))++A..	 ;*T4?33 ;[[]] 	%cKK<<>>!$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	-,,,,,,,,,,,dC   	;!&t,,^^%% C//55@@BBC C C C C C C     C C C C C C C C C          f%% 	; ?4++D11<<>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ''--88:::sT   /CC CF ''E/F /E33F 6E37F F''HH	Hc                <     | dddd          }t          |          S )NiodatarY   ziris.csvr
   )datapath	iris_paths     r/   r   r     s#    vuj9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$@rL   F	r   r   r   r   r   r   r   r   r   2000-01-04 00:00:00i 'Pi\2r-   r-   r.   r/   r   r     sZ     ,#&$
	
 
	
 ,$&"#
	
 
	
 r.   c           
         dddddddddd	}t          |           }||                                                             |          S )Nr   int64rQ   r   )r   keysastype)r   r   dfs      r/   types_data_framer     s[     !!"
 
F 
:		Bfkkmm##F+++r.   c                 4    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     s3    +++G  D< T7++++r.   c                 4    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     s3    !!!G  D T7++++r.   c                R   t          | t          j                  r3|                     d          }d |                                D             S t          dd          }|rt          | |j                  rg }|                                                                                                 }|D ]Q}|d          |d         D ]>}|d          |d	         D ]+}|d
         dk    r|d         }|	                    |           ,?R|S ddl
m}	  |	|                                           S )Nz0SELECT name FROM sqlite_master WHERE type='view'c                    g | ]
}|d          S r   r-   )rS   views     r/   rU   z!get_all_views.<locals>.<listcomp>  s    111DQ111r.   r}   r~   r   catalog_namecatalog_db_schemasdb_schema_namedb_schema_tables
table_typer   r   r   inspect)r   r   r   rW   fetchallr   adbc_get_objectsread_all	to_pylistappendr?   r   get_view_names)
r`   cr   resultsinfocatalogschematable	view_namer   s
             r/   get_all_viewsr    s[   $*++ 2LLKLL11AJJLL1111)*EhWWW 	2JtT_55 	2G((**3355??AAD 6 6''%&:; 6 6F+,,!'(:!; 6 6 .&88(-l(;I#NN955566 N******74==//111r.   c                2   t          | t          j                  r3|                     d          }d |                                D             S t          dd          }|rt          | |j                  rg }|                                                                                                 }|D ]A}|d         D ]6}|d         D ]+}|d         d	k    r|d
         }|	                    |           ,7B|S ddl
m}	  |	|                                           S )Nz1SELECT name FROM sqlite_master WHERE type='table'c                    g | ]
}|d          S r   r-   )rS   r
  s     r/   rU   z"get_all_tables.<locals>.<listcomp>  s    333Ua333r.   r}   r~   r   r   r   r   r
  r   r   r   )r   r   r   rW   r   r   r   r  r  r  r?   r   get_table_names)
r`   r  r   r  r  r  r	  r
  r   r   s
             r/   get_all_tablesr    sD   $*++ 3LLLMM33ajjll3333)*EhWWW 	3JtT_55 	3G((**3355??AAD 7 7%&:; 7 7F!'(:!; 7 7 .'99).|)<J#NN:66677 N******74==00222r.   r`   Lsqlite3.Connection | sqlalchemy.engine.Engine | sqlalchemy.engine.Connectionc                v   t          |t          j                  r@|                    dt	          j        |                       |                                 d S t          dd          }|r]t          ||j                  rH|                                5 }|                    d|  d           d d d            d S # 1 swxY w Y   d S |	                                5 }t	          j
        |          5 }|                    |            d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NzDROP TABLE IF EXISTS r}   r~   r   zDROP TABLE IF EXISTS "")r   r   r   rW   r   _get_valid_sqlite_namer^   r   rV   rv   r    
drop_table)r   r`   r   rb   rz   dbs         r/   r  r  0  s    $*++ .US-G
-S-SUUVVV **EhWWW 	.JtT_55 	. D#BZBBBCCCD D D D D D D D D D D D D D D D D D  ._S)) .RMM*---. . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . .sH   B>>CCD.4D
D.D	D.D	D..D25D2r  c                   dd l }t          |t          j                  r@|                    dt          j        |                       |                                 d S t          dd          }|r]t          ||j                  rH|	                                5 }|                    d|  d           d d d            d S # 1 swxY w Y   d S |j
        j        j                            |           } |j        d|           }|                                5 }|                    |           d d d            d S # 1 swxY w Y   d S )Nr   zDROP VIEW IF EXISTS r}   r~   r   zDROP VIEW IF EXISTS "r  )r?   r   r   r   rW   r   r  r^   r   rV   r   r   identifier_preparerquote_identifierr   rv   )r  r`   r?   r   rb   quoted_viewra   rz   s           r/   	drop_viewr  C  s    $*++ "SC,Fy,Q,QSSTTT)*EhWWW 		"JtT_55 		" B#@I@@@AAAB B B B B B B B B B B B B B B B B B +-ARR K #:?#G+#G#GHHD "D!!!" " " " " " " " " " " " " " " " " "s$   CC	CD==EEc               #  n  K   t          j        d          } t          j        d          } | j        dd|j        j        j        i| j        j                  }|V  t          |          D ]}t          ||           t          |          D ]}t          ||           |                                 d S )Nr?   pymysqlz*mysql+pymysql://root@localhost:3306/pandasclient_flag)connect_args	poolclass)pytestimportorskipr   	constantsCLIENTMULTI_STATEMENTSpoolNullPoolr  r  r  r  r   )r?   r  r   r   tbls        r/   mysql_pymysql_enginer)  Z  s      $\22J!),,G%Z%4#W%6%=%NO/*  F
 LLLf%%    $f%%    3
NNr.   c              #  P   K   t          | |           t          |            | V  d S Nr{   r   )r)  r   s     r/   mysql_pymysql_engine_irisr-  k  s8      -y9992333
r.   c              #  4   K   t          | |d           | V  d S )Nr(   r   )r)  r   s     r/   mysql_pymysql_engine_typesr0  r  s+      .
GDDD
r.   c              #  l   K   |                                  5 }|V  d d d            d S # 1 swxY w Y   d S r+  r   )r)  r`   s     r/   mysql_pymysql_connr3  x  s      		%	%	'	' 4


                    )--c              #  l   K   |                                  5 }|V  d d d            d S # 1 swxY w Y   d S r+  r2  )r-  r`   s     r/   mysql_pymysql_conn_irisr6  ~  s      	"	*	*	,	, 


                 r4  c              #  l   K   |                                  5 }|V  d d d            d S # 1 swxY w Y   d S r+  r2  )r0  r`   s     r/   mysql_pymysql_conn_typesr8          	#	+	+	-	- 


                 r4  c               #  J  K   t          j        d          } t          j        d            | j        d| j        j                  }|V  t          |          D ]}t          ||           t          |          D ]}t          ||           |	                                 d S )Nr?   psycopg2z=postgresql+psycopg2://postgres:postgres@localhost:5432/pandasr   
r!  r"  r   r&  r'  r  r  r  r  r   )r?   r   r   r(  s       r/   postgresql_psycopg2_enginer>    s      $\22J

###%Z%G/*  F LLLf%%    $f%%    3
NNr.   c              #  P   K   t          | |           t          |            | V  d S r+  r,  )r>  r   s     r/   postgresql_psycopg2_engine_irisr@    s8      3Y???8999
$$$$$$r.   c              #  4   K   t          | |d           | V  d S )Npostgresr/  )r>  r   s     r/    postgresql_psycopg2_engine_typesrC    s+      4j*MMM
$$$$$$r.   c              #  l   K   |                                  5 }|V  d d d            d S # 1 swxY w Y   d S r+  r2  )r>  r`   s     r/   postgresql_psycopg2_connrE    r9  r4  c               #  V  K   t          j        d           ddlm}  d}|                     |          5 }|V  t          |          D ]}t          ||           t          |          D ]}t          ||           |	                                 d d d            d S # 1 swxY w Y   d S )Nadbc_driver_postgresqlr   dbapiz4postgresql://postgres:postgres@localhost:5432/pandas)
r!  r"  rG  rI  r   r  r  r  r  r^   )rI  urir`   r   r(  s        r/   postgresql_adbc_connrK    s     
0111,,,,,,
@C	s		 t


!$'' 	" 	"DdD!!!!!$'' 	" 	"CsD!!!!                 s   ABB"%B"c              #  H  K   dd l }| }	 |                    d           n4# |j        $ r' |                                 t	          ||           Y nw xY w	 |                    d           n3# |j        $ r& |                                 t          |           Y nw xY w|V  d S Nr   r8   	iris_view)adbc_driver_manageradbc_get_table_schemaProgrammingErrorrollbackrh   r   )rK  r   mgrr`   s       r/   postgresql_adbc_irisrT    s      %%%%D9""6**** 9 9 9'i888889("";//// ( ( (!$'''''( JJJJJ!     .AAA+ +-BBc              #     K   dd l }| }	 |                    d           n@# |j        $ r3 |                                 d |D             }t	          ||           Y nw xY w|V  d S )Nr   r   c                P    g | ]#}t          |                                          $S r-   tupleru   rS   entrys     r/   rU   z)postgresql_adbc_types.<locals>.<listcomp>  s(    BBBeE%,,..))BBBr.   )rO  rP  rQ  rR  r   )rK  r   rS  r`   new_datas        r/   postgresql_adbc_typesr]    s      %%%%D9""7++++ 9 9 9BBzBBB(x88888	9 JJJJJs     :AAc              #  l   K   |                                  5 }|V  d d d            d S # 1 swxY w Y   d S r+  r2  )r@  r`   s     r/   postgresql_psycopg2_conn_irisr_    s      	(	0	0	2	2 d


                 r4  c              #  l   K   |                                  5 }|V  d d d            d S # 1 swxY w Y   d S r+  r2  )rC  r`   s     r/   postgresql_psycopg2_conn_typesra    s      	)	1	1	3	3 t


                 r4  c               #     K   t          j        d           t          j                    5 } d|  V  d d d            d S # 1 swxY w Y   d S )Nr?   
sqlite:///)r!  r"  r   ensure_cleanr   s    r/   
sqlite_strre    s      
%%%			 "d!4!!!!!" " " " " " " " " " " " " " " " " "s   ?AAc              #  "  K   t          j        d          } |j        | |j        j                  }|V  t          |          D ]}t          ||           t          |          D ]}t          ||           |	                                 d S )Nr?   r<  r=  )re  r?   r   r   r(  s        r/   sqlite_enginerg    s      $\22J%Z%jJO<TUUUF
LLLf%%    $f%%    3
NNr.   c              #  l   K   |                                  5 }|V  d d d            d S # 1 swxY w Y   d S r+  r2  )rg  r`   s     r/   sqlite_connri    s      				 	  D


                 r4  c                    t          j        d          } |j        |           }t          ||           t	          |           |                                 | S )Nr?   )r!  r"  r   r{   r   r   )re  r   r?   r   s       r/   sqlite_str_irisrk    sX    $\22J%Z%j11F+++f%%%
NNr.   c              #  P   K   t          | |           t          |            | V  d S r+  r,  )rg  r   s     r/   sqlite_engine_irisrm    s6      	222m,,,
r.   c              #  l   K   |                                  5 }|V  d d d            d S # 1 swxY w Y   d S r+  r2  )rm  r`   s     r/   sqlite_conn_irisro    s      		#	#	%	% 


                 r4  c                    t          j        d          } |j        |           }t          ||d           |                                 | S )Nr?   r'   )r!  r"  r   r   r   )re  r   r?   r   s       r/   sqlite_str_typesrq    sL    $\22J%Z%j11F&*h777
NNr.   c              #  4   K   t          | |d           | V  d S )Nr'   r/  )rg  r   s     r/   sqlite_engine_typesrs  %  s*      -X>>>
r.   c              #  l   K   |                                  5 }|V  d d d            d S # 1 swxY w Y   d S r+  r2  )rs  r`   s     r/   sqlite_conn_typesru  +  s      		$	$	&	& $


                 r4  c               #    K   t          j        d           ddlm}  t	          j                    5 }d| }|                     |          5 }|V  t          |          D ]}t          ||           t          |          D ]}t          ||           |                                 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nadbc_driver_sqliter   rH  zfile:)r!  r"  rw  rI  r   rd  r   r  r  r  r  r^   )rI  r   rJ  r`   r   r(  s         r/   sqlite_adbc_connrx  1  sr     
,---((((((			 ddnn]]3 	4JJJ%d++ & &$%%%%%d++ & &3%%%%KKMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s6   CAB4(C4B8	8C;B8	<CCCc              #  H  K   dd l }| }	 |                    d           n4# |j        $ r' |                                 t	          ||           Y nw xY w	 |                    d           n3# |j        $ r& |                                 t          |           Y nw xY w|V  d S rM  )rO  rP  rQ  rR  re   r   )rx  r   rS  r`   s       r/   sqlite_adbc_irisrz  A  s      %%%%D6""6**** 6 6 6$T9555556("";//// ( ( (!$'''''( JJJJJrU  c              #    K   dd l }| }	 |                    d           n# |j        $ r |                                 g }|D ]n}t	          |d                   |d<   |d         t	          |d                   |d<   |                    t          |                                                     ot          ||           |	                                 Y nw xY w|V  d S )Nr   r   r   r   )
rO  rP  rQ  rR  intr  rY  ru   r   r^   )rx  r   rS  r`   r\  r[  s         r/   sqlite_adbc_typesr}  S  s     %%%%D""7++++ 
 
 
 	3 	3E"5#344E)&'3+.u5F/G+H+H'(OOE%,,..112222%dH555
 JJJJJs     B5CCc               #     K   t          j        t          j        d                    5 } | 5 }|V  d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )N:memory:)
contextlibr   r   r   closing_connr`   s     r/   sqlite_buildinr  i  s      		GOJ77	8	8 L 	TJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s1   A=AA	AA	AAAc              #  P   K   t          | |           t          |            | V  d S r+  )re   r   )r  r   s     r/   sqlite_buildin_irisr  p  s6       ;;;n---
r.   c              #  J   K   d |D             }t          | |           | V  d S )Nc                P    g | ]#}t          |                                          $S r-   rX  rZ  s     r/   rU   z(sqlite_buildin_types.<locals>.<listcomp>y  s(    @@@E%''@@@r.   )r   )r  r   s     r/   sqlite_buildin_typesr  w  s;      @@Z@@@J!.*===
r.   r)  )marksr3  r-  r6  r0  r8  r>  rE  r@  r_  rC  ra  )rg  ri  re  )rm  ro  rk  )rs  ru  rq  rx  rK  rT  rz  r]  r}  r  r  r  c                b    |                     |           } |                    d| dd           d S )Ntestr  Fr   rz   	if_existsr   )getfixturevalueto_sql)r`   r   requests      r/   test_dataframe_to_sqlr    s:     ""4((DFNNNNNr.   c                    | dk    r9|j                             t          j                            dd                     |                    |           } |j        d d         }|                    d| dd	           d S )
NrK  z7postgres ADBC driver cannot insert index with null typeTreasonstrictr   r  r  Fr  )node
add_markerr!  markxfailr  r   r  )r`   r   r  empty_dfs       r/   test_dataframe_to_sql_emptyr    s    %%%KP   	
 	
 	
 ""4((D#HOOTXUOKKKK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 r3| dk    r|                    dg          }t          r
t          }d}nd }d}n	t          }d}|                    |           } t          j        ||d          5  |                    d| dd           d d d            d S # 1 swxY w Y   d S )NpyarrowrL   zint8[pyarrow]rA     timestamp[ns][pyarrow]zdate32[day][pyarrow]zduration[ns][pyarrow]azstring[pyarrow])r|  r   r   r   stringr   rx  r   r   zis_sparse is deprecated zthe 'timedelta'F)matchcheck_stacklevel
test_arrowreplacer  )r!  r"  r   pdarrayr   r   r   rw   r   DeprecationWarningUserWarningr  r   assert_produces_warningr  )r`   r  r   exp_warningmsgs        r/   "test_dataframe_to_sql_arrow_dtypesr    s    	"""	8QC777$1%%&.F   Hd4A../7MNNN9Q<<.8OPPPhu,=>>>	
 	


 

B ~~%%%+//B 	,K+CCKCC!""4((D		#KsU	S	S	S Q Q
		|%	PPPQ Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Qs   *EEEc           
         t          j        d           t          dt          j        t          ddd          |gd          i          }|                    |           } |                    d| dd	
           d S )Nr  r   r  rL   r  r  r  r  Fr  )r!  r"  r   r  r  r   r  r  )r`   r  nulls_fixturer   s       r/   *test_dataframe_to_sql_arrow_dtypes_missingr    s     	"""	$1%%}5=U  	

 
B ""4((DII<TYeILLLLLr.   methodmultic                   |dk    r=d| v r9|j                             t          j                            dd                     |                    |           } t          | d          5 }|                    |d|           |                    d          sJ 	 d d d            n# 1 swxY w Y   t          | d          t          |          k    sJ d S )	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)r`   r  r   r  	pandasSQLs        r/   test_to_sqlr    s-    Vt^^KB4   	
 	
 	
 ""4((D	4$	7	7	7 19l6BBB""<0000001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 dL))S-=-=======s   *0B''B+.B+zmode, num_row_coef)r  rL   )r  rM   c                ^   |                     |           } t          | d          5 }|                    |dd           |                    |d|           |                    d          sJ 	 d d d            n# 1 swxY w Y   t	          | d          |t          |          z  k    sJ d S )NTr  r  failr  r  r#   r  r  r   r  )r`   modenum_row_coefr   r  r  s         r/   test_to_sql_existr  +  s     ""4((D	4$	7	7	7 19lfEEEldCCC""<0000001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 dL))\C<L<L-LLLLLLLs   AA<<B B c                |   |                     |           } t          | d          5 }|                    |dd           |                    d          sJ d}t	          j        t          |          5  |                    |dd           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NTr  r  r  r  z!Table 'test_frame' already existsr  )r  r#   r  r  r!  raises
ValueError)r`   r   r  r  r  s        r/   test_to_sql_exist_failr  6  sl   ""4((D	4$	7	7	7 J9lfEEE""<000001]:S111 	J 	J[,&III	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	JJ J J J J J J J J J J J J J J J J Js6   AB14BB1B	B1 B	!B11B58B5c                   |                     |           } t          d|           }t          |           t          j        d|           }t          |           t          j        d|           }|j        dk    sJ d|j        v sJ d S )NSELECT * FROM irisSELECT * FROM iris where 0=1r   r   r:   )r  r$   r   r  read_sqlr   r   r`   r  
iris_frames      r/   test_read_iris_queryr  B  s    ""4((D 4d;;JZ   1488JZ   ;TBBJv%%%%:-------r.   c                   d| v r9|j                             t          j                            dd                     |                    |           } 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 d S )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    ~~KE   	
 	
 	
 ""4((D';TQOOOPPJZ   $8$!LLLMMJZ   $BDTUVVVWWJv%%%%:-------r.   c                   d| v r9|j                             t          j                            dd                     |                    |           } ddlm}m}m	}m
}  |            }t          | t                    r ||           n| } |d||          }t           ||          | d	d
d          }	t          |	           t          | t                    r|                                 d S d S )Nr   r  Tr  r   )r5   r7   r   selectr8   )autoload_withr   r   r   lengthry   )r  r  r!  r  r  r  r?   r5   r7   r   r  r   r   r$   r   r   )
r`   r  r5   r7   r   r  rB   autoload_conr8   r  s
             r/   .test_read_iris_query_expression_with_parameterr  a  sK   ~~KE   	
 	
 	
 ""4((D            xzzH*4T3*?*?I==&&&TL5>>>DtdMS#I#I  J Z   $  r.   c                ^   d| v r9|j                             t          j                            dd                     |d                                         D ]\  }}|| v r nt          d|  d          |                    |           } t          || d	          }t          |           d S )
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   )r`   r  r0   r  queryr  s         r/   *test_read_iris_query_string_with_parameterr  }  s    ~~KE   	
 	
 	
 !!2399;; U U	E::E  STSSSTTT""4((Dt4HIIIJZ     r.   c                    |                     |           } t          d|           }t          |           t          j        d|           }t          |           d S )Nr8   )r  r%   r   r  r  r  s      r/   test_read_iris_tabler    sY     ""4((D--JZ   VT**JZ     r.   c                j   d| v r8|j                             t          j                            d                     |                    |           } t          t          d| d                    }t          |           t          t          j
        d| d                    }t          |           d S )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    ~~K%RSS	
 	
 	
 ""4((DvtqAAABBJZ   FDA>>>??JZ     r.   c                J   |                     |           } g fd}t          | d          5 }|                    |d|           |                    d          sJ 	 d d d            n# 1 swxY w Y   dgk    sJ t	          | d          t          |          k    sJ d S )Nc                                         d           fd|D             }|                    | j                                        |           d S )NrL   c                J    g | ]}t          t          |                     S r-   rm   rS   rT   r   s     r/   rU   z8test_to_sql_callable.<locals>.sample.<locals>.<listcomp>  )    :::Ss^^$$:::r.   )r  rW   r
  rk   )pd_tabler`   r   	data_iterr   checks     `  r/   samplez$test_to_sql_callable.<locals>.sample  sT    Q::::	:::X^**,,d33333r.   Tr  r  r  rL   r  )r`   r   r  r  r  r  s        @r/   test_to_sql_callabler    s   ""4((DE4 4 4 4 4
 
4$	7	7	7 19l6BBB""<0000001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 QC<<<<dL))S-=-=======s   0A,,A03A0c                6   | }|dk    r3|                     t          j                            d                     |                    |           } 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 n+t          |j        j	        j
        t          j                  sJ t          |j        j	        j
        t          j                  sJ d|v r(t          |j        j	        j
        t&                    sJ d S t          |j        j	        j
        t          j                  sJ d S )Nr  ;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r`   r  	conn_namer   s       r/   test_default_type_conversionr    sz   I***KT   	
 	
 	
 ""4((D		GT	*	*Bbk',bk:::::bio*BJ77777 y  "**/::::::"**/<<<<< b'-2BK@@@@@ y  ",27@@@@@@@",27EEEEEEEr.   c                   |                     |           } ddlm} ddlm} t          g dg dd          }|                    d| d	           d
} ||          }t          | |          rn|                                 5 }|	                                5  |
                    |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   nA| 	                                5  | 
                    |           d d d            n# 1 swxY w Y   t          j        d|           }t          j        ||           t          j        d|           }t          j        ||           d S )Nr   r   r   rL   rM   rN   皙?r   333333?r  br  Fr   rz   r   z}DROP PROCEDURE IF EXISTS get_testdb;

    CREATE PROCEDURE get_testdb ()

    BEGIN
        SELECT * FROM test_frame;
    ENDzCALL get_testdb();)r  r?   r   r   r   r   r  r   r   rv   rW   r   r$   r   assert_frame_equalr  )	r`   r  r   r   r   procengine_connres1res2s	            r/   test_read_procedurer    s@   ""4((D
  ((((((	99	:	:BII<TI777D 4::D$ \\^^ 	*{""$$ * *##D)))* * * * * * * * * * * * * * *	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* ZZ\\ 	 	LL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 2D99D"d### <,d33D"d#####sH   CB8,C8B<	<C?B<	 CCC/DDDexpected_countrM   zSuccess!c                   fd}|                     |           } t          ddgddgddgd          }|                    d	| d
|          }|J n|k    sJ t          j        d	|           }t          j        ||           d S )Nc                   |j         }|                                5 }t                      }t          j        |          }|                    |           |                    d           d                    d |D                       }| j        r| j         d| j	         }	n| j	        }	d|	 d| d}
|
                    |
|           d d d            n# 1 swxY w Y   S )	Nr   z, c                    g | ]}d | d 	S )r  r-   )rS   ks     r/   rU   zVtest_copy_from_callable_insertion_method.<locals>.psql_insert_copy.<locals>.<listcomp>  s      8 8 8aQ 8 8 8r.   .zCOPY z (z) FROM STDIN WITH CSV)r   file)
connectionrV   r	   rY   writer	writerowsseekjoinr	  r   copy_expert)r
  r`   r   r  
dbapi_connrb   s_bufr  r   r   	sql_queryr  s              r/   psql_insert_copyzBtest_copy_from_callable_insertion_method.<locals>.psql_insert_copy  s)   _
   	7CJJEZ&&FY'''JJqMMMii 8 84 8 8 899G| ( %;;uz;;

"Z
L
LLgLLLIOO	O666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 s   B,CCCrL   rM   r  r   r  ncol1col2col3r  F)r   rz   r   r  r  r   r  r   r%   r   r  )r`   r  r  r  expectedresult_countresults    `     r/   (test_copy_from_callable_insertion_methodr'    s        & ""4((D1a&3*sCjQQRRH??t59I #  L ####~----d33F&(+++++r.   c                   |                     |           } ddlm ddlm} ddlm} fd} |d          }t          | |          rn|                                 5 }|	                                5  |
                    |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   nA| 	                                5  | 
                    |           d d d            n# 1 swxY w Y   t          g dgt          d          	          }|                    d
| dd           t          g dgt          d          	          }|                    d
| dd|          }	t          j        d
|           }
t!          j        |
|           |	dk    sJ t          j        | d          5 }|                    d
           d d d            d S # 1 swxY w Y   d S )Nr   rj   r   r   c                    fd|D             } | j                                       |                              dg          }|                    |          }|j        S )Nc                J    g | ]}t          t          |                     S r-   rm   r  s     r/   rU   z\test_insertion_method_on_conflict_do_nothing.<locals>.insert_on_conflict.<locals>.<listcomp>0  r  r.   r  )index_elements)r
  ru   on_conflict_do_nothingrW   rowcountr
  r`   r   r  r   ra   r&  rk   s     `    r/   insert_on_conflictzHtest_insertion_method_on_conflict_do_nothing.<locals>.insert_on_conflict/  sj    ::::	:::F5;VD\\##C5#99 	
 d##r.   zx
    CREATE TABLE test_insert_conflict (
        a  integer PRIMARY KEY,
        b  numeric,
        c  text
    );
    rL    @r  abcr   test_insert_conflictr  Fr  rL   g	@r  r   rz   r   r  r  Tr  )r  sqlalchemy.dialects.postgresqlrk   r   r   sqlalchemy.sqlr   r   r   rv   rW   r   listr  r   r%   r   r  r    r  )r`   r  r   r   r/  
create_sqlrz   r$  	df_insertinsertedr&  r  rk   s               @r/   ,test_insertion_method_on_conflict_do_nothingr<  &  s/    ""4((D555555((((((######     	 J $ %\\^^ 	(s ( (J'''( ( ( ( ( ( ( ( ( ( ( ( ( ( (	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( ZZ\\ 	% 	%LL$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% ---$u++>>>HOO#     ===/4;;???I#!    H  6==F&(+++q==== 
	5	5	5 534445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5Z   B+2BB+B	B+B	B++B/2B/C--C14C15GGGc                z   d| v sd| v r3|                     t          j                            d                     |                    |           } t          g dg dgt          d                    }|                    d	| d
dd           t          j	        d	| d          }t          j        ||           d S )Nr'   r(   z2test for public schema only specific to postgresqlr  r0  )rM   g@r  r2  r   test_public_schemar  Fpublic)r   rz   r  r   r	  r	  )r  r!  r  r  r  r   r8  r  r   r%   r   r  )r`   r  	test_datadf_outs       r/   test_to_sql_on_public_schemarD  `  s    47d??KK   	
 	
 	
 ""4((D===---8$u++NNNI!      4d8LLLF)V,,,,,r.   c                   |                     |           } ddlm ddlm} ddlm} fd} |d          }t          | |          rn|                                 5 }|	                                5  |
                    |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   nA| 	                                5  | 
                    |           d d d            n# 1 swxY w Y   t          g dgt          d          	          }|                    d
| dd           t          g dgt          d          	          }|                    d
| dd|          }	t          j        d
|           }
t!          j        |
|           |	dk    sJ t          j        | d          5 }|                    d
           d d d            d S # 1 swxY w Y   d S )Nr   rj   r   r   c                    fd|D             } | j                                       |          }|                    |j        j        |j        j                  }|                    |          }|j        S )Nc                J    g | ]}t          t          |                     S r-   rm   r  s     r/   rU   zXtest_insertion_method_on_conflict_update.<locals>.insert_on_conflict.<locals>.<listcomp>  r  r.   )r  r  )r
  ru   on_duplicate_key_updater;  r  r  rW   r-  r.  s     `    r/   r/  zDtest_insertion_method_on_conflict_update.<locals>.insert_on_conflict  su    ::::	:::vek""))$//++dmo+QQd##r.   zv
    CREATE TABLE test_insert_conflict (
        a INT PRIMARY KEY,
        b FLOAT,
        c VARCHAR(10)
    );
    r0  r2  r   r3  r  Fr  r4  r5  rM   Tr  )r  sqlalchemy.dialects.mysqlrk   r   r   r7  r   r   r   rv   rW   r   r8  r  r   r%   r   r  r    r  )r`   r  r   r   r/  r9  rz   r   r$  r;  r&  r  rk   s               @r/   (test_insertion_method_on_conflict_updaterJ  x  s"    ""4((D000000((((((######     	 J $ %\\^^ 	(s ( (J'''( ( ( ( ( ( ( ( ( ( ( ( ( ( (	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( ZZ\\ 	% 	%LL$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 
MMM?DKK	8	8	8BII)txuIUUU---$u++>>>H#!   H  6==F&(+++q==== 
	5	5	5 534445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5r=  c                   |                     |           } ddlm} ddlm} dt          j                    j         }dt          j                    j         } |d| d| d| d	| d
	          }t          | |          rn| 	                                5 }|
                                5  |                    |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   nA| 
                                5  |                     |           d d d            n# 1 swxY w Y   t          ||           }t          dgdd          }	t          j        ||	           d S )Nr   r   r   group_group_view_z
    CREATE TABLE zF (
        group_id INTEGER,
        name TEXT
    );
    INSERT INTO z- VALUES
        (1, 'name');
    CREATE VIEW z
    AS
    SELECT * FROM z;
    rL   r   group_idr   )r  r   r   r7  r   uuiduuid4hexr   r   rv   rW   r%   r   r   r  )
r`   r  r   r   r   r  sql_stmtrz   r&  r$  s
             r/   test_read_view_postgresrT    s\    ""4((D((((((######,$*,,*,,J0djll.00It
	
	 
	
 
	 
	 
	 
	 
	 
	 
	 H $ #\\^^ 	&s & &H%%%& & & & & & & & & & & & & & &	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& ZZ\\ 	# 	#LL"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#It,,Fqc6::;;H&(+++++sH   C")C?C"C	C"C	C""C&)C&D$$D(+D(c                
   d}d}d}|                      |           |                      |           |                      |           t          j        d|           }t          dgdd          }t	          j        ||           d S )Nz<
CREATE TABLE groups (
   group_id INTEGER,
   name TEXT
);
z,
INSERT INTO groups VALUES
    (1, 'name');
z1
CREATE VIEW group_view
AS
SELECT * FROM groups;
zSELECT * FROM group_viewrL   r   rN  )rW   r  r  r   r   r  )r  create_tableinsert_intocreate_viewr&  r$  s         r/   test_read_view_sqliterY    s    LKK
 <(((;''';'''[3^DDFqc6::;;H&(+++++r.   c                    t          j        t          d          5  t          j        t
          d          5  t          j        d|            d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nz+pandas.io.sql.execute requires a connectionr  P`pandas.io.sql.execute` is deprecated and will be removed in the future version.select * from iris)r!  r  	TypeErrorr   r  FutureWarningr   rW   )rm  s    r/   test_execute_typeerrorr_    s,   	y(U	V	V	V B B'5
 
 
 	B 	B
 K,.@AAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	BB B B B B B B B B B B B B B B B B Bs4   A2AA2A	A2!A	"A22A69A6c                    t          j        t          d          5  t          j        d|            d d d            d S # 1 swxY w Y   d S )Nr[  r  r\  )r   r  r^  r   rW   )ro  s    r/   test_execute_deprecatedra    s    		#1
 
 
 < <
 	(*:;;;< < < < < < < < < < < < < < < < < <s   ?AAc                J    d| v rdS d| v rdS d| v rdS t          d|            )Nr)   r'   r(   zunsupported connection: )r  )r  s    r/   flavorrc    sI    y  |	Y		x	I		w
;	;;
<
<<r.   c                   d| v r9|j                             t          j                            dd                     | }|                    |           } |d         t          |                   }d}t          |           5 }|                                5  |	                    ||          }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          |           d S )Nr   )'params' not implemented for ADBC driversTr  r*   r  r  r  r  r!  r  r  r  rc  r#   run_transaction
read_queryr   r`   r  r0   r  r  ry   r  r  s           r/   test_read_sql_iris_parameterrj  	  s   ~~KB   	
 	
 	
 I""4((D)*6)+<+<=E!F	4	 	  DI&&(( 	D 	D"--eF-CCJ	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	DD D D D D D D D D D D D D D D Z     6   CB:.C:B>	>CB>	CCCc                   d| v r9|j                             t          j                            dd                     | }|                    |           } |d         t          |                   }ddd}t          |           5 }|                                5  |	                    ||	          }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          |           d S )
Nr   re  Tr  r+   r   r   r  r  rf  ri  s           r/   "test_read_sql_iris_named_parameterrm    s   ~~KB   	
 	
 	
 I""4((D/0	1B1BCE#s33F	4	 	  DI&&(( 	D 	D"--eF-CCJ	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	DD D D D D D D D D D D D D D D Z     s6   CB=1C=C	CC	CCCc                   d| v sd| v r7d| vr3|                     t          j                            d                     | }|                    |           } |d         t          |                   }t          |           5 }|                                5  |                    |d           }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          |           d S )Nr(   r)   r   zbroken testr  r,   r  )
r  r!  r  r  r  rc  r#   rg  rh  r   )r`   r  r0   r  r  r  r  s          r/   ,test_read_sql_iris_no_parameter_with_percentro  0  s   $<4//F$4F4FFK--]-CCDDDI""4((D9:6);L;LME	4	 	  BI&&(( 	B 	B"--eD-AAJ	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	BB B B B B B B B B B B B B B B Z     rk  c                x    |                     |           } t          j        d|           }t          |           d S )NzSELECT * FROM iris_view)r  r   r$   r   r  s      r/   test_api_read_sql_viewrq  C  s<    ""4((D#$=tDDJZ     r.   c                H   d| v r8|j                             t          j                            d                     |                    |           } d}t          j        || d          }t          j        ||           }t          j	        t          |          |           d S )Nr   r  r  z1SELECT * FROM iris_view WHERE "SepalLength" < 0.0r   r  )r  r  r!  r  r  r  r   r$   r   r  r   )r`   r  r  
with_batchwithout_batchs        r/   *test_api_read_sql_with_chunksize_no_resultru  J  s    ~~K%RSS	
 	
 	
 ""4((D?E#E41===J&ud33M&,,m<<<<<r.   c                :   |                     |           } t          j        d|           rCt          j        | d          5 }|                    d           d d d            n# 1 swxY w Y   t          j        |d|            t          j        d|           sJ d S )Nr   Tr  )r  r   r  r    r  r  )r`   r  r   r  s       r/   test_api_to_sqlrw  W  s    ""4((D
}]D)) 0_TD999 	0Y  ///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 J{M4000=-------   A##A'*A'c                   |                     |           } t          j        d|           rCt          j        | d          5 }|                    d           d d d            n# 1 swxY w Y   t          j        |d| d           t          j        d|           sJ d}t          j        t          |          5  t          j        |d| d           d d d            d S # 1 swxY w Y   d S )Ntest_frame2Tr  r  r  z"Table 'test_frame2' already existsr  )	r  r   r  r    r  r  r!  r  r  )r`   r  r   r  r  s        r/   test_api_to_sql_failr{  b  s   ""4((D
}]D)) 0_TD999 	0Y  ///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 J{M46BBBB=-----
.C	z	-	-	- G G
;tvFFFFG G G G G G G G G G G G G G G G G Gs$   A##A'*A':C  C$'C$c                   |                     |           } t          j        d|           rCt          j        | d          5 }|                    d           d d d            n# 1 swxY w Y   t          j        |d| d           t          j        |d| d           t          j        d|           sJ t          |          }t          | d          }||k    sJ d S )Nr   Tr  r  r  r  r  r   r  r    r  r  r  r   r`   r  r   r  num_entriesnum_rowss         r/   test_api_to_sql_replacer  q  s#   ""4((D
}]D)) 0_TD999 	0Y  ///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 J{M46BBBBJ{M49EEEE=-----k""K$..H{""""""rx  c                   |                     |           } t          j        d|           rCt          j        | d          5 }|                    d           d d d            n# 1 swxY w Y   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 d S )	Ntest_frame4Tr  r  r  rO   r  rM   r}  r~  s         r/   test_api_to_sql_appendr    s@   ""4((D
}]D)) 0_TD999 	0Y  ///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 :k=$&IIIQNNNN :k=$(KKKqPPPP=-----c+&&&K$..H{""""""rx  c                d   |                     |           } t          j        d|           rCt          j        | d          5 }|                    d           d d d            n# 1 swxY w Y   t          j        |d| d           t          j        d|           }t          j        ||           d S )Ntest_frame5Tr  Fr   zSELECT * FROM test_frame5)	r  r   r  r    r  r  r  r   r  )r`   r  r   r  r&  s        r/   test_api_to_sql_type_mappingr    s    ""4((D
}]D)) 0_TD999 	0Y  ///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 J{M4u====\5t<<F+v.....rx  c                   |                     |           } t          j        d|           rCt          j        | d          5 }|                    d           d d d            n# 1 swxY w Y   t          t          j        dd          d          }t          j        |d| d	
           t          j	        d|           }t          j        |                                |           d S )Ntest_seriesTr  r   r   r  seriesr   Fr  zSELECT * FROM test_series)r  r   r  r    r  r   r   aranger  r$   r   r  to_frame)r`   r  r  ss2s        r/   test_api_to_sql_seriesr    s   ""4((D
}]D)) 0_TD999 	0Y  ///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	ry'***:::AJq-U3333		7	>	>B!**,,+++++rx  c                <   | }|                     |           } t          j        d|           rCt          j        | d          5 }|                    d           d d d            n# 1 swxY w Y   t          j        |d|            t          j        d|           }d|v r|                    ddi	          }|j        |_        |	                    dd
           |j        
                    t                     d |j        _        t          j        ||           d S )Ntest_frame_roundtripTr  rz   "SELECT * FROM test_frame_roundtripr   __index_level_0__level_0r   inplace)r  r   r  r    r  r  r$   renamer   	set_indexr   r|  r   r   r  r`   r  r   r  r  r&  s         r/   test_api_roundtripr    s]   I""4((D
}+T22 9_TD999 	9Y  !7888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 J{2==== D$OOOF (;Y'GHH$FL
Y---
LFL&+.....   A%%A),A)c                   d| v r8|j                             t          j                            d                     |                    |           } t          j        d|           rCt          j        | d          5 }|	                    d           d d d            n# 1 swxY w Y   t          j
        |d| dd	           t          j        d
|           }t          j        ||           d S )Nr   r  r  r  Tr  FrM   )rz   r   r  r  r  )r  r  r!  r  r  r  r   r  r    r  r  r$   r   r  )r`   r  r   r  r&  s        r/   test_api_roundtrip_chunksizer    s=   ~~K%RSS	
 	
 	
 ""4((D
}+T22 9_TD999 	9Y  !7888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 J     D$OOOF&+.....   =BB#&B#c                0   |                     |           } t          j        |           5 }|                    d          }|                                }|                                 d d d            n# 1 swxY w Y   t          |          g dk    sJ d S Nr  r   )r  r   r#   rW   r   r]   r8  )r`   r  
pandas_sqliris_resultsrT   s        r/   test_api_execute_sqlr    s     ""4((D		t	$	$ 
!))*>??##%%               99;;;;;;;;;s   >A44A8;A8c           
        | }|                     |           } 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        	                                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        	                                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        	                                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        	                                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        	                                t          d          t          d          gk    sJ d S )NSELECT * FROM typesr(   rB  r   parse_datesi  rL   rN   r   rO   %Y-%m-%d %H:%M:%Sr   i        i  r  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    sP   I""4((D 
	14	8	8By  J)$;$;bj.3R]CCCCC		14i[	Q	Q	QBbj&+R];;;;;:$1aA&&$1aA&&#    
 
	 34
 
 
B
 bj&+R];;;;;:$1aA&&$1aA&&#    
 
	14l^	T	T	TBbm).>>>>>=!!$B1a(($1aA&&&    
 
	t,1D
 
 
B bm).>>>>>=!!$B1a(($1aA&&&    
 
	%x0
 
 
B
 b'-2BMBBBBB##%%,,*      r.   error)r~   raisecoercezread_sql, text, moder  )r?   fallbackr   r?   c                J   | }|                     |           } |dk    r9|dk    r3|                    t          j                            d                     |                    ddi          } ||| dd|ii          }	d	|v rF|	d
                             t                    |	d
<   |	d                             t                    |	d<   |dk    r>|                    dddd          }t          s|d                             d          |d<   t          j
        |	|           d S )Nr   r  z failing combination of argumentsr  r   datetime64[ns]r   )rz   r  rB  r   r   r]  int32)r   r   r   zdatetime64[us])r  r  r!  r  r  r   r|  rQ   r   r   r  )
r`   r  r  r   r  r  r   r  r$  r&  s
             r/   !test_api_custom_dateparsing_errorr    sb   $ I""4((Dw9(>>>K%GHH	
 	
 	
  &&	3C'DEEHX%(
  F Y"9-44S99y$*+<$=$D$DU$K$K !+++??%")! 
 
 $ 	O"*9"5"<"<=M"N"NHY&(+++++r.   c                   |                     |           } t          j        d| dddg          }t          |j        j        j        t          j                  sJ t          |j	        j        j        t          j                  sJ d S )Nr  r   r   )	index_colr  )
r  r   r$   r   r   rA   r   r   r  r   r`   r  r   s      r/   test_api_date_and_indexr  U  s     ""4((D		-	
 
 
B bhn)2=99999bm).>>>>>>>r.   c           	        | }|                     |           } t          j        d|           rCt          j        | d          5 }|                    d           d d d            n# 1 swxY w Y   t          t          ddgd                                                    }|dk    r8|j        	                    t          j                            d	
                     d|v rt          rt          }n
d }nt          }t!          j        |d          5  |                    d|           }d d d            n# 1 swxY w Y   |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                             d          }t!          j        |d         |           d S )Ntest_timedeltaTr  z00:00:01z00:00:03foor   rx  z.sqlite ADBC driver doesn't implement timedeltar  r   F)r  r   rz   rM   zSELECT * FROM test_timedeltarK  r   i@B )monthsdaysmicrosecondsnanosecondsi- r   )r  r   r  r    r  r   r   r  r  r  r!  r  r  r   r  r  r   r  r  r$   r  
DateOffsetr   r   )	r`   r  r  r  r   r  r%  r&  r$  s	            r/   test_api_timedeltar  d  s    I""4((D
}%t,, 3_TD999 	3Y  !1222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 
fj*5EBBB	C	C	L	L	N	NB&&&KG   	
 	
 	
  	,KKKK!		#K%	H	H	H B Byy&6DyAAB B B B B B B B B B B B B B B1 >EEF*** QQWRSTTTQQWRSTTT 
 
 
 e9##G,,6%=(33333s$   A%%A),A)D77D;>D;c                   | }|                     |           } t          dddgi          }d|v rd}nd}t          j        t          |          5  |                    d| 	          J 	 d d d            d S # 1 swxY w Y   d S )
Nr  y      ?      ?y               @r   zdatatypes not supportedzComplex datatypes not supportedr  test_complexr  )r  r   r!  r  r  r  )r`   r  r  r   r  s        r/   test_api_complex_raisesr    s    I""4((D	C&"&	'	'B'/	z	-	-	- ; ;yyTy22::::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;s   A77A;>A;zindex_name,index_label,expected))NNr   )Nother_labelr  )
index_nameNr  )r  r  r  )r   N0)Nr   r  c                0   d| v r8|j                             t          j                            d                     |                    |           } t          j        d|           rCt          j        | d          5 }|	                    d           d d d            n# 1 swxY w Y   t          dt          d          i          }||j        _        d	}t          j        |d| |
           t          j        ||           }|j        d         |k    sJ d S )Nr   -index_label argument NotImplemented with ADBCr  test_index_labelTr  r   rO   SELECT * FROM test_index_label)index_labelr   )r  r  r!  r  r  r  r   r  r    r  r   ranger   r   r  r$   r   )	r`   r  r  r  r$  r  
temp_framer  r   s	            r/   test_api_to_sql_index_labelr    sX   & ~~K%TUU	
 	
 	
 ""4((D
}'.. 5_TD999 	5Y  !3444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 FE!HH-..J&J,EJz-tMMMMud++E=x''''''r  c                   | }d|v r5|                     t          j                            dd                     n<d|v r8|j                            t          j                            d                     |                    |           } t          j        d|           rCt          j	        | d	
          5 }|
                    d           d d d            n# 1 swxY w Y   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                                         ddgk    sJ ddg|j        _        t          j        |d| d          }||k    sJ t          j        d|           }|j        d d                                         ddgk    sJ t          j        |d| dddg          }||k    sJ t          j        d|           }|j        d d                                         ddgk    sJ d}t          j        t,          |          5  t          j        |d| dd           d d d            d S # 1 swxY w Y   d S )Nr(   z/MySQL can fail using TEXT without length as keyFr  r   r  r  r  Tr  rO   r   )A0A1)B0B1r  r  r   r  rL   level_1r  r   r   )r  r  rM   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  )	r`   r  r  r  expected_row_countr  r&  r   r  s	            r/   &test_api_to_sql_index_label_multiindexr    s   I)KHQV   	
 	
 	
 	

 
9		K%TUU	
 	
 	
 ""4((D
}'.. 5_TD999 	5Y  !3444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	q%|\&BCC  J Z
$6==F'''''?FFE=y((((=y(((( Z#J  F '''''?FFE=!##%%#s3333 "3ZJZ
$6	RRRF'''''?FFE=!##%%#s3333 Z#J  F '''''?FFE=!##%%#s3333
MC	z	-	-	- 
 

	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s$   8CC!C?K&&K*-K*c                   |                     |           } t          j        d|           rCt          j        | d          5 }|                    d           d d d            n# 1 swxY w Y   t          j        ddgg dddg	          }|                    d| 
           t          j        d| ddg          }t          j
        ||d           d S )Ntest_multiindex_roundtripTr  rL   r1  line1rM         ?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  )r`   r  r  r   r&  s        r/   test_api_multiindex_roundtripr    s1   ""4((D
}0$77 >_TD999 	>Y  !<===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 
		-.Cj
 
 
B II.DI99914C:  F "ft<<<<<<rx  rA   r   r   c                   | }|                     |           } t          j        d|           rCt          j        | d          5 }|                    d           d d d            n# 1 swxY w Y   t          ddgddggdd	g
          }|                    d|           dk    sJ |                    |          }d|v rd}nd}t          j        || |          }t          j
        ||           d S )Ntest_dtype_argumentTr  333333?g333333@ffffff@g333333@r   r   r   r  rM   rB  z(SELECT "A", "B" FROM test_dtype_argumentz$SELECT A, B FROM test_dtype_argumentrz   rA   )r  r   r  r    r  r   r  r   r$   r   r  )	r`   r  rA   r  r  r   r$  r  r&  s	            r/   test_api_dtype_argumentr  #  sL    I""4((D
}*D11 8_TD999 	8Y  !6777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 
S#Jc
+c3Z	@	@	@B99/T9::a????yyHY:64u===F&(+++++r  c                    |                     |           } t          ddgddggddg          }t          j        |d| d	           d S )
NrL   rM   rN   rO   r   r   test_frame_integer_col_namesr  r  )r  r   r   r  r  s      r/   test_api_integer_col_namesr  C  sX    ""4((D	QFQF#aV	4	4	4BJr149MMMMMMr.   c                    d| v r9|j                             t          j                            dd                     |                    |           } t          j        |d|           }d|v sJ d S )Nr   -'get_schema' not implemented for ADBC driversTr  r  r  CREATEr  r  r!  r  r  r  r   
get_schemar`   r  r   r9  s       r/   test_api_get_schemar  J  s    ~~KF   	
 	
 	
 ""4((DV>>>Jz!!!!!!r.   c                    d| v r9|j                             t          j                            dd                     |                    |           } t          j        |d| d          }d|v sJ d S )	Nr   r  Tr  r  pypi)rz   r	  zCREATE TABLE pypi.r  r  s       r/   test_api_get_schema_with_schemar  X  s     ~~KF   	
 	
 	
 ""4((DVfMMMJ:------r.   c                H   d| v r9|j                             t          j                            dd                     | }|                    |           } t          ddgddgd	          }|d
k    rd}nddlm} |}t          j
        |d| d|i          }d|v sJ d|v sJ d S )Nr   r  Tr  皙?r  r1  皙@r  r  INTEGERr   )r   r  r  r  r  )r  r  r!  r  r  r  r   r?   r   r   r  )r`   r  r  float_framerA   r   r9  s          r/   test_api_get_schema_dtypesr  g  s    ~~KF   	
 	
 	
 I""4((D3*C:>>??K$$$&&&&&&Vc5\RRRJz!!!!
""""""r.   c                z   d| v r9|j                             t          j                            dd                     | }|                    |           } 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 d S )Nr   r  Tr  r  r  r1  r  )Col1Col2r  r  )rz   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  )r`   r  r   r  r   r9  constraint_sentences          r/   test_api_get_schema_keysr
    s   ~~KF   	
 	
 	
 I""4((DSzC:>>??Ev4fEEEJ)GG*,,,, VS#JOOOJ)II*,,,,,,r.   c                   d| v r8|j                             t          j                            d                     | }|                    |           } t          j        d|           rCt          j        | d          5 }|	                    d           d d d            n# 1 swxY w Y   t          t          j                            d                              d          t          d	          
          }|                    d| d           t          j        d|           }t                      }d}g d}t          j        d| d          D ]5}	t%          ||	gd          }t'          |	          ||         k    sJ |dz  }6t)          j        ||           |dk    rMt          j        t.          d          5  t          j        d| d           d d d            d S # 1 swxY w Y   d S t                      }
d}g d}t          j        d| d          D ]5}	t%          |
|	gd          }
t'          |	          ||         k    sJ |dz  }6t)          j        ||
           d S )Nr   r  r  test_chunksizeTr  rM   )   r   abcder   Fr  zselect * from test_chunksizer   )r   r   r   r   rM   r   r  ignore_indexrL   r  r  r  )r  r  r!  r  r  r  r   r  r    r  r   r   randomdefault_rngstandard_normalr8  r  r$   r   r  r   r  r  NotImplementedErrorr%   )r`   r  r  r  r   r
  r  isizeschunkres3s              r/   test_api_chunksize_readr    s&   ~~K%RSS	
 	
 	
 I""4((D
}%t,, 3_TD999 	3Y  !1222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 

	a  00994==
 
 
B II#UI;;; <dCCD ;;D	AOOE#$BDTUVVV  tUm$7775zzU1X%%%%	Q$%%% $$$].b999 	D 	D/CCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D {{'(8$!LLL 	 	E4-d;;;Du::q))))FAA
dD)))))s$   ?B!!B%(B%>G##G'*G'c                   | dk    rqt          dd          }|^t          |j                  t          d          k     r9|j                            t
          j                            dd                     |                    |           } t          j
        d	|           rCt          j        | d
          5 }|                    d	           d d d            n# 1 swxY w Y   t          g dg dd          }|                                }|d                             d          |d<   |                    d	| d           t          j        d|           }t%          j        ||           d S )NrK  rG  r~   r   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  )r`   r  r   r  r   df2ress          r/   test_api_categoricalr#    s   %%%)*B8TTT(8 9 9GG<L<L L LL##!!W "     ""4((D
}'.. 5_TD999 	5Y  !3444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 
"FFF	
 	

 
B ''))C]+22:>>CJJ&DJ>>>

=t
D
DC#r"""""s   8CC!Cc                B   |                     |           } t          j        d|           rCt          j        | d          5 }|                    d           d d d            n# 1 swxY w Y   t          ddgddggdd	g
          }|                    d| d           d S )Ntest_unicodeTr  rL   rM   rN   rO      ér  r   Fr  )r  r   r  r    r  r   r  )r`   r  r  r   s       r/   test_api_unicode_column_namer'    s     ""4((D
}^T** 1_TD999 	1Y  000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 
QFQF#fc]	;	;	;BII>t5I99999rx  c                   | }|                     |           } t          j        d|           rCt          j        | d          5 }|                    d           d d d            n# 1 swxY w Y   t          g ddt          j        dgd          }|                    d| d	           d
|v rd}nd}t          j	        ||           }t          j        ||           d S )Nzd1187b08-4943-4c8d-a7f6Tr  r   rL   rM   r   r  r  Fr  rB  z'SELECT * FROM "d1187b08-4943-4c8d-a7f6"z'SELECT * FROM `d1187b08-4943-4c8d-a7f6`)r  r   r  r    r  r   r   nanr  r$   r   r  )r`   r  r  r  r   r  r"  s          r/   test_api_escaped_table_namer+    s,    I""4((D
}.55 <_TD999 	<Y  !:;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 
#rvs);<<	=	=BII,$eIDDDY99

UD
)
)C#r"""""r  c                   d| v rvt          j        d          }t          |j                  t          d          k    r| dv s9|j                            t           j                            dd                     |                    |           } t          j
        d|           rCt          j        | d	          5 }|                    d           d d d            n# 1 swxY w Y   t          g d
g ddd          }|                    d| d           t          j        d|           }t          g dg dg dgg d          }t#          j        ||           d S )Nr   r  z16.0)rx  rK  z!pyarrow->pandas throws ValueErrorTr  
test_tabler  r   r  rL   r  r  r  Fr  z)SELECT a, b, a +1 as a, c FROM test_table)rL   r  rM   rL   )rM   r   rN   rL   )rN   r  rO   rL   )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  par  r   r&  r$  s          r/   #test_api_read_sql_duplicate_columnsr0  	  s    ~~ ++BN##wv66DDDL##!!>t "    
 ""4((D
}\4(( /_TD999 	/Y  ...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 
qAA	B	BBII<TI777[DdKKF	8$$$  H &(+++++s   ;CC!$C!c                F   | }|dk    r3|                     t          j                            d                     |                    |           } t          j        |d|            ddg}t          j        d| |          }|j        	                                |k    sJ d S )Nr  Not Implementedr  r  r   r   r   )
r  r!  r  r  r  r   r  r%   r   r  )r`   r  r   r  colsr&  s         r/   test_read_table_columnsr4  -	  s     I$$$FK--5F-GGHHH""4((DJ{L$///:DdDAAAF>  ""d******r.   c                "   | }|dk    r3|                     t          j                            d                     |                    |           } 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
                                        d	d
gk    sJ d S )Nr  r2  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&  s        r/   test_read_table_index_colr6  =	  s5    I$$$FK--5F-GGHHH""4((DJ{L$///dgFFFF<'****dsCjIIIF<#s++++dsCj3*  F <#s++++>  ""sCj000000r.   c                   | dk    r3|                     t          j                            d                     |                    |           } t          j        d|           }t          j        d|           }t          j	        ||           t          j
        d|           }t          j        d|           }t          j	        ||           d S )Nr  r  r  r  r8   )r  r!  r  r  r  r   r$   r  r   r  r%   )r`   r  iris_frame1iris_frame2s       r/   test_read_sql_delegater:  T	  s    $$$KT   	
 	
 	
 ""4((D$%94@@K,3T::K+{333$VT22K,vt,,K+{33333r.   c                   | }ddl m} ddlm}  |d           |d          g}|D ]}t	          ||          rn|                                5 }|                                5  |                    |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                                5  |                    |           d d d            n# 1 swxY w Y   t          j	        d           5  t          j        d|           t          j        d|           d d d            d S # 1 swxY w Y   d S )Nr   r   r   z,CREATE TABLE invalid (x INTEGER, y UNKNOWN);z0CREATE TABLE other_table (x INTEGER, y INTEGER);other_tablezSELECT * FROM other_table)r?   r   r   r   r   r   rv   rW   r   r  r   r%   r$   )ri  r`   r   r   
query_listr  s         r/   test_not_reflect_all_tablesr>  g	  s_   D(((((( 	;<<?@@J
  $ $dF## 	$ (4ZZ\\ ( (LL'''( ( ( ( ( ( ( ( ( ( ( ( ( ( (( ( ( ( ( ( ( ( ( ( ( ( ( ( (  $ $U###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 
	#D	)	) > >=$///6===> > > > > > > > > > > > > > > > > >sZ   B"B8BBBBBB	"B	;CC!	$C!	=+D55D9<D9c                    | }|dk    sd|v r3|                     t          j                            d                     |                    |           } t          j        t          d          5  t          j	        |           5 }|
                    dd           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        d           5  |                    d	| 
           d d d            d S # 1 swxY w Y   d S )Nr  r   zDoes not raise warningr  zThe provided table name 'TABLE1' is not found exactly as such in the database after writing the table, possibly due to case sensitivity issues. Consider using lower case table names.r  TABLE1r  CaseSensitiver  )r  r!  r  r  r  r   r  r  r   r    check_case_sensitiver  )r`   r  r   r  r  s        r/   (test_warning_case_insensitive_table_namerC  	  s   I$$$)(;(;FK--5M-NNOOO""4((D		#J
 
 
 	2 	2 _T"" 	2b##Hb111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 
	#D	)	) ; ;T:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;sH   0B?B(B?(B,	,B?/B,	0B??CCDD
Dc                X   |                     |           } 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            d S # 1 swxY w Y   d S )
Nr   )	TIMESTAMPr   2014-12-12 01:542014-12-11 02:54Tutc	test_typer   )r  r?   rE  r   r   r   r    SQLTabler   r
  r  r   )r`   r  rE  r   r  r
  s         r/   test_sqlalchemy_type_mappingrM  	  s   ""4((D$$$$$$ 
	02DE4PPPQ
 
B 
		 A"["B777%+-/4i@@@@@@A A A A A A A A A A A A A A A A A As   ?BB#&B#zinteger, expected)int8SMALLINT)Int8rO  )uint8rO  )UInt8rO  )int16rO  )Int16rO  )uint16r  )UInt16r  )r  r  )Int32r  )uint32BIGINT)UInt32rY  )r   rY  )Int64rY  r   rY  r  c                6   |                     |           } t          ddgdg|          }t          j        |           5 }t          j        d||          }t          |j        j        j        j	                  }d d d            n# 1 swxY w Y   ||k    sJ d S )Nr   rL   r  r   rA   rJ  rK  )
r  r   r   r    rL  r   r
  r  r  r   )r`   r  r  r$  r   r  r
  r&  s           r/   test_sqlalchemy_integer_mappingr^  	  s    . ""4((D	Aq6C5	8	8	8B			 +"["B777U[]_)**+ + + + + + + + + + + + + + + Xs   ;BB
B
r  uint64UInt64c                H   |                     |           } t          ddgdg|          }t          j        |           5 }t	          j        t          d          5  t          j        d||           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )	Nr   rL   r  r]  z1Unsigned 64 bit integer datatype is not supportedr  rJ  rK  )r  r   r   r    r!  r  r  rL  )r`   r  r  r   r  s        r/   (test_sqlalchemy_integer_overload_mappingrb  	  s-    ""4((D	Aq6C5	8	8	8B			 4"]Q
 
 
 	4 	4 Lb3333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	44 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4s5   BA?3B?B	BB	BBBc                   t          j        d           |                    |           } t          j                    5 }d|z   }d}|                    ||dd           t          j        ||          }t          j        ||          }d}t          j	        ||          }	d d d            n# 1 swxY w Y   t          j
        ||           t          j
        ||           t          j
        ||	           d S )Nr?   rc  r8   r  Fr  r  )r!  r"  r  r   rd  r  r   r  r%   r$   r  )
r`   r  r   r   db_urir
  rz  r   r  r  s
             r/   test_database_uri_stringre  	  s/   
%%%""4((D
 
		 8d$6YeTTTl5&11(77$(778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 +{333+{333+{33333s   A"B++B/2B/pg8000c                    t          j        d           |                    |           } d}t          j        t          d          5  t          j        d|           d d d            d S # 1 swxY w Y   d S )Nr?   z)postgresql+pg8000://user:pass@host/dbnamerf  r  zselect * from table)r!  r"  r  r  ImportErrorr   r  )r`   r  rd  s      r/   (test_pg8000_sqlalchemy_passthrough_errorri  	  s     %%%""4((D 9F	{(	3	3	3 4 4*F3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4s   A**A.1A.c                    | }|                     |           } ddlm} d|v r |d          }n |d          }t          j        || ddi          }t          |d	                   }|dhk    sJ d S )
Nr   r   rB  z%select * from iris where "Name"=:namez#select * from iris where name=:namer   zIris-versicolorr  r=   )r  r?   r   r   r  set)r`   r  r  r   	name_textiris_df	all_namess          r/   test_query_by_text_objro  	  s     I""4((DYD@AA		D>??	l9dF<M3NOOOGGFO$$I*+++++++r.   c                4   |                     |           } ddlm}m} t	                      } ||                              |j        j         |d          k              }t          j	        || ddi          }t          |d                   }|dhk    sJ d S )Nr   )	bindparamr  r   r   r  r=   )r  r?   rq  r  rC   wherer  r=   r   r  rk  )r`   r  rq  r  r8   name_selectrm  rn  s           r/   test_query_by_select_objrt  
  s    ""4((D       
   D&,,$$TV[IIf4E4E%EFFKl;fm5LMMMGGFO$$I''''''r.   c                V   | }|dk    r3|                     t          j                            d                     |                    |           } t          g dg dd          }|                    d| d	           t          j        d|           }t          j
        ||           d S )
Nr  r2  r  r)  rN   rO   r   )r   z%_variationtest_column_percentageFr  )r  r!  r  r  r  r   r  r   r%   r   r  )r`   r  r  r   r"  s        r/   test_column_with_percentagerx  
  s     I$$$FK--5F-GGHHH""4((D	999==	>	>BII+UICCC

5t
<
<C#r"""""r.   c                   t          j                    5 }t          t          j        |                    5 }t          j        | d|d          dk    sJ 	 d d d            n# 1 swxY w Y   t          t          j        |                    5 }t          j        d|          }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        | |           d S )Ntest_frame3_legacyFr  rO   z!SELECT * FROM test_frame3_legacy;)	r   rd  r   r   r   r   r  r$   r  )r   r   r`   r&  s       r/   test_sql_open_closer{  %
  s    
		 SdW_T**++ 	Yt:k+?USSSWXXXXXX	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y W_T**++ 	St'(KTRRF	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S	S S S S S S S S S S S S S S S +v.....sX   "CA"C"A&	&C)A&	*$CB0$C0B4	4C7B4	8CCCc                     d} d}t          j        t          |          5  t          j        d|            d d d            d S # 1 swxY w Y   d S )Nzmysql://root@localhost/pandasz-Using URI string without sqlalchemy installedr  r  )r!  r  rh  r   r  )r`   r  s     r/   test_con_string_import_errorr}  3
  s    *D
9C	{#	.	.	. 1 1)40001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1s   AA
Ac                     G d d          } t          j         | d                    5 }t          j        t                    5  t          j        d|           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nc                  "    e Zd ZddZd Zd ZdS )htest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnectionreturnNonec                2    t          j        |i || _        d S r+  )r   r   r`   )selfargskwargss      r/   __init__zqtest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnection.__init__>
  s    *D;F;;DIIIr.   c                ,    t          | j        |          S r+  )getattrr`   )r  r   s     r/   __getattr__zttest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnection.__getattr__A
  s    49d+++r.   c                8    | j                                          d S r+  )r`   r]   )r  s    r/   r]   zntest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnection.closeD
  s    IOOr.   N)r  r  )__name__
__module____qualname__r  r  r]   r-   r.   r/   MockSqliteConnectionr  =
  sF        	< 	< 	< 	<	, 	, 	,	 	 	 	 	r.   r  r  zSELECT 1)r  r   r   r  r  r   r  )r  r`   s     r/   Jtest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installedr  ;
  s"           
	00<<	=	= +'44 	+ 	+LT***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	++ + + + + + + + + + + + + + + + + +s5   A?A'A?'A+	+A?.A+	/A??BBc                (   | }t          j        d|          }t          j        d|          }t          j        ||           d}t          j        t           j        |          5  t          j        d|           d d d            d S # 1 swxY w Y   d S )Nr  z9Execution failed on sql 'iris': near "iris": syntax errorr  r8   )r   r$   r  r   r  r!  r  DatabaseError)r  r`   r8  r9  r  s        r/   test_sqlite_read_sql_delegater  L
  s    D$%94@@K,3T::K+{333
GC	s(	4	4	4 # #VT"""# # # # # # # # # # # # # # # # # #s   $BBBc                <    t          j        | d          }d|v sJ d S )Nr  r  )r   r  )r   r9  s     r/   test_get_schema2r  W
  s*    V44Jz!!!!!!r.   c                   | }t          dt          ddgd          i          }t          j        |          }t          j        d||          }|                                }|                    d          D ]S}|                                d	                             d
          dk    r |                                d         dk    sJ Td S )Nr   rF  rG  TrH  rJ  rK  
r   r  rL   rE  )r   r   r   r!   SQLiteTable
sql_schemasplitstrip)r  r`   r   r  r
  r	  cols          r/   test_sqlite_type_mappingr  ]
  s    D		02DE4PPPQ
 
B 
	D	!	!BOK2666EF||D!! 1 199;;q>$$..99;;q>[00001 1r.   c                   | dk    rt          j        d           |                    |           } ddlm} t          g dg dd          }t          j        | d	          5 }|                    |d
          dk    sJ 	 d d d            n# 1 swxY w Y    ||           }|	                    d
          sJ t          j        | d	          5 }|
                    d
           d d d            d S # 1 swxY w Y   d S )Nre  #sqlite_str has no inspection systemr   r         ?       @      @      @r  r  r  r  onetwoTr  r  rO   )r!  skipr  r?   r   r   r   r    r  r  r  r`   r  r   r  r  insps         r/   test_create_tabler  o
  s   |9:::""4((D""""""#7#7#7@T@T@TUUVVJ		5	5	5 ?
L99Q>>>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 74==D>>,''''' 
	5	5	5 +\***+ + + + + + + + + + + + + + + + + +s$   "BBBC22C69C6c                   | dk    rt          j        d           |                    |           } ddlm} t          g dg dd          }t          j        |           5 }|                                5  |	                    |d          d	k    sJ 	 d d d            n# 1 swxY w Y    ||           }|
                    d          sJ |                                5  |                    d           d d d            n# 1 swxY w Y   	 |                                 n# t          $ r Y nw xY w|
                    d          rJ 	 d d d            d S # 1 swxY w Y   d S )
Nre  r  r   r   r  r  r  r  rO   )r!  r  r  r?   r   r   r   r    rg  r  r  r  clear_cacheAttributeErrorr  s         r/   test_drop_tabler  
  sj   |9:::""4((D""""""#7#7#7@T@T@TUUVVJ			 0)&&(( 	C 	C##J==BBBBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C wt}}~~l+++++&&(( 	/ 	/  ...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/	 	 	 	D	>>,//////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s~    E5BEB#	#E&B#	'9E D6ED	E	D	
ED#"E#
D0-E/D00EEEc                   | dk    rt          j        d           | }|                    |           } t          |           }|                                5  |                    |d          dk    sJ |                    d          }d d d            n# 1 swxY w Y   d|v r|                    ddi	          }|                    dd
           d |j	        _
        t          j        ||           d S )Nre  r  r  rO   r  r   r  r  r   Tr  )r!  r  r  r#   rg  r  rh  r  r  r   r   r   r  r  s         r/   test_roundtripr  
  sU   |9:::I""4((D!$''I		"	"	$	$ L L-CDDIIII%%&JKKL L L L L L L L L L L L L L L (;Y'GHH
Y--- FL&+.....s   2BBBc                ~   |                     |           } t          |           5 }|                                5  |                    d          }|                                }|                                 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          |          g dk    sJ d S r  )r  r#   rg  rW   r   r]   r8  )r`   r  r  r  rT   s        r/   test_execute_sqlr  
  s9   ""4((D	4	 	  !I&&(( 	! 	!$,,-ABBL''))C   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!! ! ! ! ! ! ! ! ! ! ! ! ! ! !
 99;;;;;;;;;s4   B>B8BB	BB	BB"Bc                z    |                     |           } t          j        d|           }t          |           d S )Nr8   r  )r  r   r%   r   r  s      r/   test_sqlalchemy_read_tabler  
  s>    ""4((D#F555JZ     r.   c                    |                     |           } t          j        d| ddg          }t          j        |j        t          ddg                     d S )Nr8   r9   )rz   r   SepalLength__1)r  r   r%   r   assert_index_equalr   r   r  s      r/   "test_sqlalchemy_read_table_columnsr  
  sd    ""4((D#D=-"@  J *,e]DT4U.V.VWWWWWr.   c                    |                     |           } d}t          j        t          |          5  t	          j        d|            d d d            d S # 1 swxY w Y   d S )Nz!Table this_doesnt_exist not foundr  this_doesnt_existr  )r  r!  r  r  r   r%   )r`   r  r  s      r/   test_read_table_absent_raisesr  
  s    ""4((D
-C	z	-	-	- : :.D9999: : : : : : : : : : : : : : : : : :s   AAAc                   | }|dk    rt          j        d           n;d|v sd|v r3|                    t           j                            d                     |                    |           } 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 d S )Nre  .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  
  s8   IL  DEEEE	I		Y!6!6K%JKK	
 	
 	
 ""4((D		GT	*	*Bbk',bk:::::bio*BJ77777bj&+RX66666 b'-2BK@@@@@b(.3V<<<<<<<r.   c                    |                     |           } t          ddgi          }|                    d| d          dk    sJ t          j        d|           }t          j        ||           d S )Ni64l            )r   test_bigintFr  rL   r#  r`   r  r   r&  s       r/   r  r  
  s|     ""4((D	(	)	)	)B99-T9??1DDDDt44F"f%%%%%r.   c                X   | }|dk    rt          j        d           n7d|v r3|                    t           j                            d                     |                    |           } t          j        d|           }t          |j	        j
        j        t          j                  sJ d S )Nre  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EEE	Y		K%IJJ	
 	
 	
 ""4((D		GT	*	*Bbj&+R];;;;;;;r.   r  r   c                    |                     |           } t          |           }t          d| |          }|j        }t	          j        ||           d S )Nselect * from datetzr  )r  r   r$   r   r   r   )r`   r  r  r$  r   r  s         r/   !test_datetime_with_timezone_queryr  	  s\     ""4((D.t44H 
.+	N	N	NB

C3)))))r.   c           	         |                     |           } t          |           }t          t          t	          d| d                    d          }|j        }t          j        ||           d S )Nr  rL   r  Tr  )r  r   r   r8  r$   r   r   r   )r`   r  r$  r   r  s        r/   +test_datetime_with_timezone_query_chunksizer    sw    ""4((D.t44H	^2DAFFFGG
 
 
B 
C3)))))r.   c                    |                     |           } t          |           }t          j        d|           }t	          j        ||                                           d S )Nr   )r  r   r   r%   r   r  r  )r`   r  r$  r&  s       r/   !test_datetime_with_timezone_tabler  %  sY    ""4((D.t44H$//F&("3"3"5"566666r.   c                l   | }|                     |           } t          dt          ddd          i          }|                    d| d          dk    sJ d	|v r$|d         j                            d
          |d<   n#|d         j                            d           |d<   t          j        d|           }t          j
        ||           t          j        d|           }d|v r:t          |j        d         t                    sJ t          |d                   |d<   t          j
        ||           d S )Nr   2013-01-01 09:00:00rN   
US/Pacificperiodsr   test_datetime_tzFr  r)   r   zSELECT * FROM test_datetime_tzr'   r   r   )r  r   r   r  dt
tz_converttz_localizer   r%   r   r  r$   r   locr   r   )r`   r  r  r$  r&  s        r/   %test_datetime_with_timezone_roundtripr  -  sC   I""4((D
 	j.lKKKL H ?? 2E?JJaOOOOy   (33E:: !(44T:: 2D99F&(+++ @$GGF9&*V,c22222!&+..s&(+++++r.   c                @   |                     |           } t          dt          ddd          idg          }|                    d| d          dk    sJ t	          j        d|           }t          t          j        gdg	          }t          j	        ||           d S )
Nr   i'  rL   r   r  test_datetime_obbFr  r   )
r  r   r   r  r   r%   r  NaTr   r  )r`   r  r   r&  r$  s        r/   test_out_of_bounds_datetimer  L  s     ""4((DfhtQ223A3???D;;/T;GG1LLLL 3T::F"&F8444H&(+++++r.   c                R   |                     |           } t          ddd                              d           }t          dt	          d          i|          }|                    d| d	          dk    sJ t          j        d| d
          }t          j	        ||d           d S )Nz
2018-01-01r   6hr  freqnumsr  	foo_table	info_date)r   rz   r  r  F)check_names)
r  r   
_with_freqr   r  r  r   r%   r   r  )r`   r  datesr$  r&  s        r/   "test_naive_datetimeindex_roundtripr  W  s     ""4((D|QT:::EEdKKE&%((+5999H??;?OOSTTTTTT[IIIF&(>>>>>>r.   c                   | }|                     |           } 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 d S )
Nr   r'   r   r  r  formatr   r  unit)r  r   r%   r  r   r  r   r   rA   r   r   )r`   r  r  r   expected_types        r/   test_date_parsingr  d  s    I""4((D		GT	*	*B&)33FFMbj&+];;;;;		GT	{	C	C	CBbj&+R];;;;;		GT	CV7W	X	X	XBbj&+R];;;;;		+> ?@
 
 
B
 bj&+R];;;;;		GT~	F	F	FBbm).>>>>>		GTc7J	K	K	KBbm).>>>>>		GTvsm7T	U	U	UBbm).>>>>>>>r.   c                   | }|                     |           } t          t          dd          t          j        d          d          }|                    d|           dk    sJ t          j        d|           }|                    dd	
          }t          j
        ||           t          j        d|           }|                    dd	
          }d|v rQt          |j        d         t                    sJ t          |d                   |d<   t          j
        ||           d S t          j
        ||           d S )Nr  rN   r  r  r  test_datetimer  r   rL   )axisSELECT * FROM test_datetimer'   r  r   )r  r   r   r   r  r  r   r%   rw   r   r  r$   r   r  r   r   r`   r  r  r   r&  s        r/   r  r    sB   I""4((D	.:::3PP
 
B 99/t9449999 66F[[q[))F&"%%%  =tDDF[[q[))F9&*V,c22222!&+..s
fb)))))
fb)))))r.   c                T   | }|                     |           } t          t          dd          t          j        d          d          }t          j        |j        d<   |                    d| d	          dk    sJ t          j	        d|           }t          j        ||           t          j        d
|           }d|v rSt          |j        d         t                    sJ t          |d         d          |d<   t          j        ||           d S t          j        ||           d S )Nr  rN   r  r  r  rL   r   r  Fr  r  r'   r  r   r  r   )r  r   r   r   r  r*  r  r  r   r%   r   r  r$   r   r   r   r  s        r/   test_datetime_NaTr    s,   I""4((D	.:::3PP
 
B VBF6N99/t59AAQFFFF 66F&"%%%  =tDDF9&*V,c22222!&+h???s
fb)))))
fb)))))r.   c                T   |                     |           } t          t          ddd          t          ddd          gdg          }|                    d| d          dk    sJ t	          d|           }|d         }t          |d                   }t          j        ||           d S )	N  rL   rM   r  r   	test_dateFr  )r  r   r   r  r%   r   r   r   )r`   r  r   r"  r&  r$  s         r/   test_datetime_dater    s     ""4((D	Dq!$$d4A&6&67#	G	G	GB99+4u9==BBBB
d
+
+CXF2c7##H68,,,,,r.   c                   | }|                     |           } t          t          ddd          t          ddd          gdg          }|                    d| d	          d
k    sJ t	          d|           }t          j        ||           |}t          j        |d|d          d
k    sJ t          j        d|          }|	                    d           }t          j        ||           t          j        |d| d          d
k    sJ d|v r@t          j        d|           }|	                    d           }t          j        ||           t          j        d|           }t          j        ||           d S )N	   r   rL      r  r   	test_timeFr  rM   
test_time2r  zSELECT * FROM test_time2c                ,    |                      d          S Nz%H:%M:%S.%fstrftime_s    r/   <lambda>z$test_datetime_time.<locals>.<lambda>  s    1::m44 r.   
test_time3r'   zSELECT * FROM test_time3c                ,    |                      d          S r  r  r  s    r/   r  z$test_datetime_time.<locals>.<lambda>  s    qzz-88 r.   )
r  r   r   r  r%   r   r  r   r$   map)r`   r  r  r  r   r"  ri  refs           r/   test_datetime_timer    s    I""4((D	DAqMM41b>>2SE	B	B	BB99+4u9==BBBB
d
+
+C#r""" !K:b,5AAAQFFFF

7
E
EC
&&44
5
5C#s###:b,E:::a????9 !;TBBff8899
c3'''

\4
0
0C"c"""""r.   c                V   |                     |           } t          dt          j                  }t          dt          j                  }t          ||d          }|                    d| d          dk    sJ t          j        d|           }t          j
        ||dd	
           d S )Ni  r  g        )s1r  test_read_writeFr  rL   T)check_dtypecheck_exact)r  r   r   r  float32r   r  r   r%   r   r  )r`   r  r  r  r   r!  s         r/   test_mixed_dtype_insertr    s     ""4((D			*	*	*B	2:	&	&	&B	"B''	(	(B 99+U9CCqHHHH

.
5
5C"cu$GGGGGGr.   c                V   |                     |           } t          g ddt          j        dgd          }|                    d| d          dk    sJ t          j        d|           }t          j        ||           t          j	        d	|           }t          j        ||           d S )
Nr)  r   r  r  test_nanFr  rN   SELECT * FROM test_nan)
r  r   r   r*  r  r   r%   r   r  r$   r  s       r/   test_nan_numericr    s     ""4((D	#rvs);<<	=	=B99*$e9<<AAAA 
D11F&"%%%  8$??F&"%%%%%r.   c                   |                     |           } t          g dt          j        t          j        t          j        gd          }|                    d| d          dk    sJ t          j        d|           }t          j        ||           |d         	                    d          |d<   d |d<   t          j
        d	|           }t          j        ||           d S )
Nr)  r  r  Fr  rN   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B	C	CB99*$e9<<AAAA 
D11F&"%%% gnnX&&BsGBsG 8$??F&"%%%%%r.   c                j   |                     |           } t          g dddt          j        gd          }|                    d| d          dk    sJ d |j        d	<   t          j        d|           }t          j	        ||           t          j
        d
|           }t          j	        ||           d S )Nr)  r  r  r  r  Fr  rN   rM   r   r  )r  r   r   r*  r  r  r   r%   r   r  r$   r  s       r/   test_nan_stringr    s     ""4((D	#sBF);<<	=	=B99*$e9<<AAAA BF6N 
D11F&"%%%  8$??F&"%%%%%r.   c                    d| v r9|j                             t          j                            dd                     | }|                    |           } t          j        ddgg ddg	          }d
}t          |           5 }|	                                5  |
                    ||          dk    sJ 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |dv rkt          j        d| d|           }g }|j        D ]G}t          j        d| d|           }	|                    |	j                                                   Hn2ddlm}
  |
|           }|                    |          }d |D             }|dggk    sJ d S )Nr   z)ADBC implementation does not create indexTr  r  r  r  r   r  test_to_sql_saves_indexrM   >   re  r  zASELECT * FROM sqlite_master WHERE type = 'index' AND tbl_name = ''zPRAGMA index_info()r   r   c                    g | ]
}|d          S )column_namesr-   )rS   r  s     r/   rU   z*test_to_sql_save_index.<locals>.<listcomp>D  s    2221^$222r.   )r  r  r!  r  r  r  r   r  r#   rg  r  r   r$   r   r  r  r?   r   get_indexes)r`   r  r  r   tbl_namer  ixsix_colsix_nameix_infor   r  s               r/   test_to_sql_save_indexr(  !  su   ~~KB4   	
 	
 	

 I""4((D			-.PSu
 
 
B )H	4	 	  7I&&(( 	7 	7##B11Q66666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	77 7 7 7 7 7 7 7 7 7 7 7 7 7 7 444 +'+ + +
 

 x 	2 	2G()Hg)H)H)H$OOGNN7<..001111	2 	'&&&&&wt}}x((22c222ugs6   CC5CC	CC		CCCc                @   | }|                     |           } d}|dk    rd|vrddlm}  ||          }t          |           5 }|                                5 }|                    |           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )N'CREATE TABLE test_trans (A INT, B TEXT)r  r   r   r   )r  r?   r   r#   rg  rW   )r`   r  r  ra   r   r  transs          r/   test_transactionsr,  I  s9   I""4((D4D$$$y)@)@######tDzz	4	 	   I&&(( 	 EMM$	  	  	  	  	  	  	  	  	  	  	  	  	  	  	                                    s6   BA;/B;A?	?BA?	BBBc                   | }|                     |           } t          |           5 }|                                5 }d}d|v st          |t                    r|                    |           n&ddlm}  ||          }|                    |           d d d            n# 1 swxY w Y    G d dt                    }d}t          |t                    rddlm}  ||          }	 |                                5 }|                    |            |d          # 1 swxY w Y   n# |$ r Y nw xY w|                                5  |
                    d	          }	d d d            n# 1 swxY w Y   t          |	          dk    sJ |                                5 }|                    |           |
                    d	          }
d d d            n# 1 swxY w Y   t          |
          d
k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr*  r   r   r   c                      e Zd ZdS )1test_transaction_rollback.<locals>.DummyExceptionN)r  r  r  r-   r.   r/   DummyExceptionr/  h  s        Dr.   r0  z/INSERT INTO test_trans (A,B) VALUES (1, 'blah')r  zSELECT * FROM test_transrL   )r  r#   rg  r   r!   rW   r?   r   	Exceptionr    rh  r  )r`   r  r  r  r+  ra   r   r0  ins_sqlr"  r  s              r/   test_transaction_rollbackr3  Y  s   I""4((D	4	 	  #I&&(( 	$E<D""jN&K&K"d####++++++tDzzd###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$	 	 	 	 	Y 	 	 	 Di-- 	$''''''d7mmG	**,, .g&&&$nW---. . . . . . . . .  	 	 	D	 &&(( 	C 	C&&'ABBC	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C3xx1}}}} &&(( 	DEMM'"""''(BCCD	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 4yyA~~~~~G# # # # # # # # # # # # # # # # # #s   HAB H B$	$H'B$	(>H'D(;!DD 	 D(#D 	$D('H(D0-H/D00HE)H)E-	-H0E-	1,H+GHG	HG	HH	Hc                   | dk    r3|                     t          j                            d                     |                    |           } ddlm} ddlm} d}t          j
        |||           }|j        d d         } ||          }t          | |          rn|                                 5 }|                                5  |                    |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   n|                     |           t          j        ||           }	t#          j        |	|d	
           d S )Nre  z(test does not support sqlite_str fixturer  r   r   r   test_get_schema_create_tabler  Fr  )r  r!  r  r  r  r?   r   r   r   r   r  r   r   r   rv   rW   r%   r   r  )
r`   r  r   r   r   r(  r9  blank_test_dfnewconreturned_dfs
             r/   r5  r5    s   
 |K%OPP	
 	
 	
 ""4((D((((((
(CSd;;;J$RaR(Mj!!J$ !\\^^ 	+v + +z***+ + + + + + + + + + + + + + +	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	Z   $S$//K+}uMMMMMMs6   2D C)D )C-	-D 0C-	1D  DDc                   | dk    rt          j        d           |                    |           } ddlm}m} ddlm} ddg}dd	g}t          ||
          }|	                    d|           dk    sJ |	                    d| d|i          dk    sJ  |            }|
                    |            |j        d         j        d         j        }	t          |	|          sJ d}
t          j        t           |
          5  |	                    d| dt"          i           d d d            n# 1 swxY w Y   |	                    d| d |d          i          dk    sJ |
                    |            |j        d         j        d         j        }	t          |	|          sJ |	j        dk    sJ |	                    d| |          dk    sJ |
                    |            |j        d         j        d         j        }|j        d         j        d         j        }t          ||          sJ t          ||          sJ d S )Nre  r  r   )r   r6   r5   r   r   g?Tg?Nr   
dtype_testr  rM   dtype_test2r   rz   rA   rs   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   r   r  r  r   r  )r`   r  r   r6   r5   r3  r   r   metasqltyper  sqltypeasqltypebs                r/   
test_dtyperJ    s   |9:::""4((D        +*****:D%D	4	&	&	&B99,D911Q666699-T#t9EEJJJJ8::DLLdLk-(05:Ggt$$$$$
2C	z	-	-	- < <
		wDc
	;;;< < < < < < < < < < < < < < < 99-T#vvbzz9J9KKqPPPPLLdLk-(05:Ggv&&&&&>R 99-4t9DDIIIILLdL{./7<AH{./7<AHh%%%%%h%%%%%%%s     D,,D03D0c                   | dk    rt          j        d           | }|                    |           } ddlm}m}m}m} ddlm	} t          dd g          t          t          ddd	          d g          t          d	d gd
          t          dd g          d}t          |          }	d}
|	                    |
|           dk    sJ t          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 d S )Nre  r  r   )r   r   r4   r   r:  T  r   rL   r  r  r  BoolDateIntr4   notna_dtype_testr  rM   rs   r(   rN  rO  rP  r4   )r!  r  r  r?   r   r   r4   r   rC  r5   r   r   r   r  r   r%   rD  rE  r   r   r   )r`   r  r  r   r   r4   r   r5   r3  r   r(  r  rF  my_typecol_dicts                  r/   test_notna_dtyperT    s   |9:::I""4((D            +***** d|$$q!,,d344q$ix000d$$	 D 
4B
C99#49((A----3%%A8::DLLdL I--gg7G{3'Hhv&+W55555hv&+X66666huo*G44444hw',e4444444r.   c           
     0   | dk    rt          j        d           |                    |           } 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          }|                    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        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 d S )Nre  r  r   )
BigIntegerr4   r   r:  gYB?r  r  float64r   r  r   )f32f64
f64_as_f32i32r  test_dtypesFr  rZ     )	precision)r   rz   r   r  rA   rL   rY     rs   rX  r[  r  )r!  r  r  r?   rV  r4   r   rC  r5   r   r   r  r   r%   r   roundr   rD  rE  r   r   r   r   )r`   r  rV  r4   r   r5   Vr   r"  rF  rS  s              r/   test_double_precisionrb    sp   |9:::""4((D         
 +*****A	1#Y///1#Y/// !I6661#W---1#W---	
 	

 
B 			!4!4!45 	 	
 	
 	 	 	 	 
]D
1
1C 8BuIN1%r**bhs5zq7I2.N.NNNNN 8::DLLdL{=)1Hx#$$H\,B,G(H(HHHHHhuo*E22222huo*E22222huo*G44444huo*J7777777r.   c                    |                     |           } ddlm d d fdfd}t          dg di                              d| 	          d
k    sJ  ||            d S )Nr   r   c                2    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888r.   c                6    |                     d| d           d S )Ntest_foo_datar  )r   rz   r  )r  )r  r   s     r/   test_appendz3test_connectable_issue_example.<locals>.test_append0  s     jHMMMMMr.   c                6     |           } | |           d S r+  r-   )r`   foo_datarh  re  s     r/   test_connectablez8test_connectable_issue_example.<locals>.test_connectable3  s,     ;t$$D(#####r.   c                
   t          |           rf|                                 5 }|                                5   |           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S  |            d S r+  )r   r   rv   )connectabler`   r   rk  s     r/   mainz,test_connectable_issue_example.<locals>.main9  s   k6** 	*$$&& +$ZZ\\ + +$$T***+ + + + + + + + + + + + + + ++ + + + + + + + + + + + + + + + + + [)))))s4   A+AA+A	A+A	A++A/2A/rg  r)  r  rN   )r  r   r   r   r  )r`   r  rn  r   rh  rk  re  s      @@@@r/   test_connectable_issue_examplero  $  s    ""4((D )(((((9 9 9N N N$ $ $ $ $ $* * * * * * 	?III.//66OQU6VV	 	 	 	 	DJJJJJr.   inputr  bar)r  infe0c                x   t          |          }| }|                    |           } d|v rt          j        d          }t	          |j                  t	          d          k     r>d|j        v r5t          j                            d          }|	                    |           d}t          j
        t          |          5  |                    d	| d
           d d d            d S # 1 swxY w Y   d S |                    d	| d
          dk    sJ t          j        d	|           }t          j        ||           d S )Nr(   r  z1.0.3rr  zGH 36465r  zinf cannot be used with MySQLr  foobarFr  rL   )r   r  r!  r"  r   r@   r   r  r  r  r  r  r  r   r%   r   assert_equal)	r`   r  rp  r   r  r  r  r  r"  s	            r/   test_to_sql_with_negative_npinfrv  H  s    
5		BI""4((D)
 %i007&''''*:*:::w"*?T?T;$$J$77D%%%-]:S111 	< 	<II8UI;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< yyhDy>>!CCCC 400
C     s   ?C%%C),C)c                   | dk    rt          j        d           |                    |           } ddlmmmm} ddlm	}m
} d}t          d|gi          } |            } G fdd	|          } ||           5 }	|	                                5  |	                                } |j                            |            |	                     ||
                     |	                                 t%          j         ||j                  |           }
d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t+          j        |
|           d S )Nre  z&test does not work with str connectionr   )r2   r   Unicoder  )Sessiondeclarative_basezHello, World!spamc                  d    e Zd ZdZddgiZ  d          Z   d          d          Zd	S )
'test_temporary_table.<locals>.Temporary	temp_testprefixes	TEMPORARYTprimary_keyr  F)nullableN)r  r  r  __tablename____table_args__idr{  )r2   r   rx  s   r/   	Temporaryr}  ~  sP        #${m4VG...vggbkkE222r.   r  )r{  )r   rz   )r!  r  r  r?   r2   r   rx  r  sqlalchemy.ormry  rz  r   rv   r  	__table__rx   addflushr   r$   r{  r   r  )r`   r  r  ry  rz  rB  r$  Baser  sessionr   r2   r   rx  s              @@@r/   test_temporary_tabler  h  su   |<===""4((D                  
  I&9+.//HD3 3 3 3 3 3 3 3 3D 3 3 3 
 J']]__ 	J 	J%%''D&&t,,,KK		y111222MMOOO#y~(>(>DIIIB	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	JJ J J J J J J J J J J J J J J "h'''''s7   E BD)E )D-	-E 0D-	1E  EEc                   | dk    sd| v r3|                     t          j                            d                     |                    |           } d}t          |           5 }t          j        t          |          5  |                    |dd	           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )
Nr  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  )r`   r  r   r  r  s        r/   test_invalid_enginer    s}   6T>>KR   	
 	
 	
 ""4((D
6C	4	 	  NI]:S111 	N 	N[-MMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	NN N N N N N N N N N N N N N N N N Ns6   $B= B%B=%B)	)B=,B)	-B==CCc                   |                     |           } t          |           5 }|                                5  |                    |dd          dk    sJ |                    d          sJ 	 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   t          |          }t          | d          }||k    sJ dS )z `to_sql` with the `engine` paramr   autor  rO   N)r  r#   rg  r  r  r  r   r~  s         r/   test_to_sql_with_sql_enginer    sW    ""4((D	4	 	  6I&&(( 	6 	6##Kv#NNRSSSSS&&}555555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	66 6 6 6 6 6 6 6 6 6 6 6 6 6 6
 k""K$..H{""""""s4   B6A=1B=B	BB	BBBc                   |                     |           } t          j        dd          5  t          |           5 }|                                5  |                    |d          dk    sJ |                    d          sJ 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          |          }t          | d          }||k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nio.sql.enginer?   r   rO   	r  r  option_contextr#   rg  r  r  r  r   r~  s         r/   test_options_sqlalchemyr    s    ""4((D		?L	9	9 ' 't$$ 	:	**,, : : '']CCqHHHH **=999999: : : : : : : : : : : : : : :	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:
 +&&dM22;&&&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'X   C(B(4BB(BB(BB(C((B,	,C(/B,	0*C((C,/C,c                   |                     |           } t          j        dd          5  t          |           5 }|                                5  |                    |d          dk    sJ |                    d          sJ 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          |          }t          | d          }||k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr  r  r   rO   r  r~  s         r/   test_options_autor    s    ""4((D		?F	3	3 ' 't$$ 	:	**,, : : '']CCqHHHH **=999999: : : : : : : : : : : : : : :	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:
 +&&dM22;&&&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'r  c                 P   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            n# 1 swxY w Y   t          j        dd          5  t          t          d          t                    sJ t          t          d          t                    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr?   r  r  )r!  r"  r   r"   r   r  r  r-   r.   r/   test_options_get_enginer    s   
%%%j..0@AAAAA		?L	9	9 F F*V,,.>?????*\224DEEEEEEF F F F F F F F F F F F F F F 
	?F	3	3 F F*V,,.>?????*\224DEEEEEEF F F F F F F F F F F F F F F F F Fs&   A	B$$B(+B(A	DD"Dc                     d S r+  r-   r-   r.   r/   "test_get_engine_auto_error_messager    s	     	Dr.   funcr  r$   c                   | }|                     |           } d}|}	|	                    || dd           t          j        d|          5   t	          t          |          d| | |          }
d d d            n# 1 swxY w Y    ||||          }t          j        |
|           d|v r3|                    t          j	        
                    d	
                     t          j        d|          5   t	          t          |          d| | |d          } ||||          }|D ]}
t          j        |
|           	 d d d            d S # 1 swxY w Y   d S )Nr  Fr  r   rz   r   r  mode.string_storageSelect * from dtype_backendr   z(adbc does not support chunksize argumentr  rN   )rz   r  r  )r  r  r  r  r  r   r  r  r!  r  r  r`   r  string_storager  r  dtype_backend_datadtype_backend_expectedr  r
  r   r&  r$  iterators                r/   test_read_sql_dtype_backendr    s)    I""4((DE	BII5d%9IEEE		0.	A	A 
 
"T""$U$$d-
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 &%nmYOOH&(+++K%OPP	
 	
 	
 
	0.	A	A 	4 	4$72t$$$U$$'	
 
 
 *).-SS 	4 	4F!&(3333	4	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s%   
%A;;A?A?4AEEEr%   c                   d| v r7d| vr3|                     t          j                            d                     | }|                    |           } d}|}	|	                    || dd           t          j        d	|          5   t          t          |          || |
          }
d d d            n# 1 swxY w Y    ||||          }t          j
        |
|           d|v rd S t          j        d	|          5   t          t          |          || |d          } ||||          }|D ]}
t          j
        |
|           	 d d d            d S # 1 swxY w Y   d S )Nr'   r   zhSQLite actually returns proper boolean values via read_sql_table, but before pytest refactor was skippedr  r  Fr  r  r  r  rN   )r  r  )r  r!  r  r  r  r  r  r  r  r   r  r  s                r/   !test_read_sql_dtype_backend_tabler  
  sD    4F$..KM   	
 	
 	
 I""4((DE	BII5d%9IEEE		0.	A	A M M"T""5$mLLLM M M M M M M M M M M M M M M%%nmYOOH&(+++		0.	A	A 	4 	4$72t$$'	
 
 
 *).-SS 	4 	4F!&(3333	4	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s%   "B33B7:B7;A
EEE)r  r%   r$   c                   |                     |           } d}|}|                    || dd           d}t          j        t          |          5   t          t          |          || d           d d d            d S # 1 swxY w Y   d S )	Nr  Fr  r  zPdtype_backend numpy is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.r  numpyr  )r  r  r!  r  r  r  r  )r`   r  r  r  r
  r   r  s          r/   )test_read_sql_invalid_dtype_backend_tabler  :  s     ""4((DE	BII5d%9IEEE	!  
z	-	-	- > >D%W====> > > > > > > > > > > > > > > > > >s   "A??BBr  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 )NrL   rN   r[  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    BFAg666			111bfc*)<<<y999$$$$$$ !!!		
 		
  r.   c                     dd} | S )Nr  r   c                   | dk    rjt          t          j        g dt          j                            }t          t          j        ddt          j        gt          j                            }n|dk    r[t          j        d          ddlm	                      g d                    }                     g d	                    }n\t          j        d          t                              g d                    }t                              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    r<t          j        d          ddlm	 t          fdj        D                       d|v sd|v r7|dk    r                    ddd          n                    ddd          S )Npythonr.  r  r  r  r  r   )ArrowExtensionArrayr  rL   rN   r[  r   r  r  r  r  TFbooleanr  r  c           	     ^    i | ])}|                      |         d                     *S )T)from_pandas)r  )rS   r  r  r   r/  s     r/   
<dictcomp>z8dtype_backend_expected.<locals>.func.<locals>.<dictcomp>  sK        ,,RXXbg4X-P-PQQ  r.   r(   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/  s        @@@r/   r  z$dtype_backend_expected.<locals>.func\  s    h&rxrz'R'R'RSSL)"(Cbe3DBJ*W*W*WXXOOi''$Y//B999999..rxx/H/HIIL11"((;K;K;K2L2LMMOO $Y//B+BHH___,E,EFFL.rxx8H8H8H/I/IJJOQN':::IIIW555S"&#.i@@@OOO9===T5"%0	BBB///yAAA!$	 	
 
 I%%$Y//B999999     !z   B i8y#8#8 000YYW7;;<<YY%5<LMMNN	r.   r  r   r-   )r  s    r/   r  r  Z  s    1 1 1 1f Kr.   c                   d| v r8|j                             t          j                            d                     |                    |           } ddd}t          ddg	                              |          }|                                }|	                    d
| dd           t          d| |d          D ]}t          j        ||           d S )Nr   r  r  r   r  r  r  r  r   r  Fr  r  zSELECT * FROM testrL   )rA   r  )r  r  r!  r  r  r  r   r   r   r  r$   r   r  )r`   r  r   r   r$  r&  s         r/   test_chunksize_empty_dtypesr    s     ~~K%RSS	
 	
 	
 ""4((D**F	C:	&	&	&	-	-f	5	5BwwyyHII6t5IIFFF 	   0 0 	fh////0 0r.   r  r  c                   |                     |           } d}t          g ddd          }|                    || 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	        ||           d S )Nr  r   r   r  Fr  r  r  r  )rA   r  r  )r   r   r   r  r   r[  )
r  r   r  r  r  r   rW  r   r   r  )r`   r  r  r  r
  r   r&  r$  s           r/   test_read_sql_dtyper    s   
 ""4((DE	++	,	,BII5d%9IEEEWR   BJ#	  F 			444		%26F%F%FggG  	
 	
 H &(+++++r.   c                   | }d}t          ddddddddg          }|                    d|           t          j        t          |          5  |                    d|d d	           d d d            d S # 1 swxY w Y   d S )
NzxStarting with pandas version 3.0 all arguments of to_sql except for the arguments 'name' and 'con' will be keyword-only.rL   rM   rN   r  exampler  r  r  )r   r  r   r  r^  )rg  r`   r  r   s       r/   test_keyword_deprecationr    s    D	;  
!!!,,AAA.F.FG	H	HBIIi		#M	=	=	= > >
		)T49	===> > > > > > > > > > > > > > > > > >s   A66A:=A:c                    | }t          dddgid          }|                    d|d          dk    sJ t          j        d           5  t	          j        d|           d d d            d S # 1 swxY w Y   d S )	Nr  rL   rM   r   r  test_bigintwarningFr  )r   r  r   r  r   r%   rg  r`   r   s      r/   test_bigint_warningr    s    D	C!Q=	0	0	0B99.D9FF!KKKK		#D	)	) 7 7/6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s   
A--A14A1c                    | }t          ddgddgd          }t          j        t          d          5  |                    d|d	d
           d d d            d S # 1 swxY w Y   d S )NrL   rM   rN   rO   r   r!  zEmpty table name specifiedr  r  r  Fr  )r   r!  r  r  r  r  s      r/   test_valueerror_exceptionr    s    D	QFQF33	4	4B	z)E	F	F	F G G
		rty	FFFG G G G G G G G G G G G G G G G G Gs   AA"Ac                |  
 | }ddl m
mm ddlm}m}  |            } G 
fdd|          }|                                5  |j        	                    |           d d d            n# 1 swxY w Y    ||          } |            5 }t          ddgdd	gd
          }|                    d|dd          dk    sJ |                                 |                    |j        |j                  }	t          |	          }d d d            n# 1 swxY w Y   t!          |j                  ddgk    sJ d S )Nr   r2   r   r6   )rz  sessionmakerc                  V    e Zd ZdZ  d          Z   d                    ZdS ),test_row_object_is_named_tuple.<locals>.Testr  Tr  2   N)r  r  r  r  r  string_columnr  s   r/   Testr    s?        $VG...vvbzz**r.   r  rs   rL   helloworld)r  r  r  Fr  r  rM   r  r  )r?   r2   r   r6   r  rz  r  rv   rB   
create_allr   r  r^   r  r  r  r8  r   )rg  r`   rz  r  	BaseModelr  ry  r  r   
test_queryr2   r   r6   s             @@@r/   test_row_object_is_named_tupler    sI   D
         
       
 ! ""I+ + + + + + + + +y + + +
 
 , ,%%d+++, , , , , , , , , , , , , , ,l%%%G	 #gq!f7IJJKKII<T)ITT    	]]47D,>??
z""# # # # # # # # # # # # # # # 
o6666666s%   A//A36A3A9DDDc                   | }t          j        d           d}t          dddgi          }|                    ||dd           t	          j        d	d
          5  t          ||          }d d d            n# 1 swxY w Y   d}t          dddgi|t          dg|                    }t          j	        ||           d S )Nr  r  r  xyFr  )rz   r   r  zfuture.infer_stringTzstring[pyarrow_numpy]r  )rA   r   )
r!  r"  r   r  r  r  r%   r   r   r  )rg  r`   r
  r   r&  rA   r$  s          r/   test_read_sql_string_inferencer  
  s   D
	"""E	C#s$	%	%BIIeUiI@@@		0$	7	7 - -t,,- - - - - - - - - - - - - - - $E	sCjse50I0I0I  H &(+++++s   A77A;>A;c           	         | }t          dt          dddd          gid          }|                    d|dd	
           t          j        d|          j        d         }|dk    sJ d S Nti  r     r  r  r  r  F)r  r   select * from testr   r   z2020-12-31 12:00:00.000000)r   r   r  r  r  r   )rg  r`   r   r&  s       r/   test_roundtripping_datetimesr    s|    D	C(4R4456>N	O	O	OBIIfdiuI===[-t449$?F1111111r.   c               #     K   t          j        t          j        dt          j                            5 } | 5 }|V  d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr  )detect_types)r  r   r   r   PARSE_DECLTYPESr  s     r/   sqlite_builtin_detect_typesr  &  s      		
1HIII
 
 	 	TJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s3   A!A	A!	A	A!A	A!!A%(A%c           	         | }t          dt          dddd          gid          }|                    d|dd	
           t          j        d|          j        d         }|t          d          k    sJ d S r  )r   r   r  r  r  r   r   )r  r`   r   r&  s       r/   )test_roundtripping_datetimes_detect_typesr  /  s    &D	C(4R4456>N	O	O	OBIIfdiuI===[-t449$?FY;<<<<<<<<r.   c                   | }t          ddgddgddgd          }|                                5 }|                                5  |                    d           |                    d	           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                    d
|d          dk    sJ |                    d|dd          dk    s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            n# 1 swxY w Y   |                                5 }|                                5  |                    d           |                    d	           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                    d|dd          dk    sJ |                    d|ddd           |                    d|ddd          dk    sJ t          j        d|d          }	t          j        t          ||gd          |	           d S )NrL   rM   r  r   r  r  r  z$DROP SCHEMA IF EXISTS other CASCADE;zCREATE SCHEMA other;test_schema_publicFr  test_schema_public_explicitr@  )r   rz   r   r	  test_schema_otherotherrA  z!Table test_schema_other not foundr  )r   rz   r	  r   r  )r   rz   r	  r   r  r  Tr  )r   r   rv   r   r  r   r%   r   r  r!  r  r  r   )
r>  r`   r   rz   r
  r  r  res4r  r"  s
             r/   test_psycopg2_schema_supportr  8  s   %D 
QFS#Jc
KK	L	LB 
 83YY[[ 	8 	8 FGGG 6777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	88 8 8 8 8 8 8 8 8 8 8 8 8 8 8 99.D9FF!KKKK
		.	 	 	
 	
 	 	 	 	 			*E'	RRVWWWWW 2D99D"d###;TBBD"d###;T(SSSD"d###14HHHD"d###
-C	z	-	-	- G G.XFFFFG G G G G G G G G G G G G G G 
 83YY[[ 	8 	8 FGGG 6777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	88 8 8 8 8 8 8 8 8 8 8 8 8 8 8 			*WE	RRVWWWWWII      			$ 	 	
 	
 	 	 	 	 
0$w
G
G
GC&"b===sCCCCCs}   B+A<0B<B 	 BB 	BBBG''G+.G+I)+II)I	I)I	I))I-0I-c                <   | }ddl m}  |d          }|                                5 }|                                5  |                    |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d}t          j        ||          }t          dt          dd          gd	z  gd
dgd	z            }t          j
        ||           t          j        |d          5 }|                    d           d d d            d S # 1 swxY w Y   d S )Nr   r   z
    CREATE TABLE person
    (
        id serial constraint person_pkey primary key,
        created_dt timestamp with time zone
    );

    INSERT INTO person
        VALUES (1, '2021-01-01T00:00:00Z');
    zHSELECT * FROM "person" AS p1 INNER JOIN "person" AS p2 ON p1.id = p2.id;rL   2021r   r   rM   r  
created_dtr   Tr  person)r7  r   r   rv   rW   r  r  r   r   r   r  r   r    r  )	r>  r`   r   rV  rz   r  r&  r$  r  s	            r/   test_self_join_date_columnsr    s    &D######4		 L 
 &3YY[[ 	& 	&KK%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&& & & & & & & & & & & & & & &
 	S  [D))F
Yv%(((	)A	-.|8Lq8P  H &(+++ 
	5	5	5 'X&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'sF   A6AA6A#	#A6&A#	'A66A:=A:.DDDc                   | }t          g dg dd          }t          j        |          5 }|                                5  |                    |d          dk    sJ 	 d d d            n# 1 swxY w Y   |                    d          sJ |                                5  |                    d           d d d            n# 1 swxY w Y   |                    d          rJ 	 d d d            d S # 1 swxY w Y   d S )Nr  r  r  drop_test_framerO   )r   r   r    rg  r  r  r  )rg  r`   r  r  s       r/   test_create_and_drop_tabler    s   D#7#7#7@T@T@TUUVVJ			 	:)&&(( 	H 	H##J0ABBaGGGGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H ""#455555&&(( 	4 	4  !2333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 &&'8999999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:sY   C4A, C4,A0	0C43A0	4.C4"C8C4C	C4C	C44C8;C8c                $   | }t          t          ddd          t          ddd          gdg          }|                    d|d          dk    sJ t          d	|          }t	          j        ||                    t                               d S )
Nr  rL   rM   r  r   r  Fr  zSELECT * FROM test_date)r   r   r  r$   r   r  r   r   )r  r`   r   r"  s       r/   test_sqlite_datetime_dater    s    D	Dq!$$d4A&6&67#	G	G	GB99+4u9==BBBB
2D
9
9C#ryy~~.....r.   tz_awareFTc                   |}| s#t          ddd          t          ddd          g}nGt          ddd          }t          |                                                              d	           }t          |d
g          }|                    d|d          dk    sJ t          d|          }|                    d           }t          j	        ||           d S )Nr  r   rL   r  r  rM   r  r  c                *    |                                  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                ,    |                      d          S r  r  r  s    r/   r  z+test_sqlite_datetime_time.<locals>.<lambda>  s    

= 9 9 r.   )
r   r   r   to_pydatetimer	  r   r  r$   r   r  )r  r  r`   tz_timestz_dtr   r"  r$  s           r/   test_sqlite_datetime_timer    s    D MAqMM41b>>20!MMM%--//00445K5KLL	8cU	+	+	+B99+4u9==BBBB
2D
9
9Cvv99::H#x(((((r.   c                    |                      d| d          }|D ]\  }}}}}}	||k    r|c S t          d| d| d          )NzPRAGMA table_info(r  zTable z	, column z
 not found)rW   r  )
r`   r
  columnrecscidr   ctypenot_nulldefaultpks
             r/   get_sqlite_column_typer    st    <<5U55566D37  /T5(GR6>>LLL 
@e@@f@@@
A
AAr.   c                R   | }ddg}ddg}t          ||          }|                    d|          dk    s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  |                    d|dt          i           d d d            n# 1 swxY w Y   |                    d|d
          dk    sJ t          |dd          d
k    sJ t          |dd          d
k    sJ d S )Nr   r   r;  r<  r   r=  r  rM   r>  STRINGr?  r  z!B \(<class 'bool'>\) not a stringr  r  rB  )r   r  r  r!  r  r  bool)r  r`   r3  r   r   r  s         r/   test_sqlite_test_dtyper#    s   D:D%D	4	&	&	&B99,D911Q666699-T#x9IIQNNNN "$c::iGGGG!$s;;xGGGG
.C	z	-	-	- = =
		wDd	<<<= = = = = = = = = = = = = = = 99-4x9HHAMMMM!$(;SAAXMMMM!$(;SAAXMMMMMMs   $ CCCc                   | }t          dd g          t          t          ddd          d g          t          dd gd          t          dd g          d}t          |          }d	}|                    ||
          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 d S )NTrL  r   rL   r  r  r  rM  rQ  r  rM   rN  r  rO  rE  rP  r4   REAL)r   r   r   r  r  )r  r`   r3  r   r(  s        r/   test_sqlite_notna_dtyper&    s   Dd|$$q!,,d344q$ix000d$$	 D 
4B
C99#49((A----!$V44	AAAA!$V44CCCC!$U33y@@@@!$W55??????r.   c                   | }t          ddgddggddg          }d}t          j        t          |	          5  |                    d
|           d d d            n# 1 swxY w Y   t          g d          D ]\  }}|                    ||          dk    sJ t          j        ||           t          ddgddggd|g          }d|d}|                    ||          dk    sJ t          j        ||           d S )NrL   rM   rN   rO   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)r  r`   r   r  ndx
weird_namer!  c_tbls           r/   test_sqlite_illegal_namesr0    s   D	QFQF#c3Z	8	8	8B
0C	z	-	-	- % %
		rt	$$$% % % % % % % % % % % % % % % %	
 	
 	
  & &Z yyjdy33q8888T***!Q!Q(3
2CDDD-c---zzu$z//14444%%%%)& &s   AA!$A!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 ][}t          |t                    rt          |          rd }|t          |                   }|                     ||                     \| t          |          z  S )Nz'{}'z{:.8f}z{:d}c                    dS )NNULLr-   )r  s    r/   r  zformat_query.<locals>.<lambda>+  s    f r.   z{:.10f}z'{!s}')r   r  r   r   str_bytesrQ   r|  r   rW  r"  r   r   r  rY  )r   r  _formattersprocessed_argsarg	formatters         r/   format_queryr:  #  s    &-V]
v}xV]T

$$

I$ho
K N . .c5!! 	d3ii 	CS		*	iinn----~&&&&r.   c                    t          j        |          5 }|                    |                                           }ddd           n# 1 swxY w Y   |dnt	          |          S )z#Replace removed sql.tquery functionN)r   r#   rW   r   r8  )r  rz   r  r"  s       r/   tqueryr<  :  s    		s	#	# 3z  ''00223 3 3 3 3 3 3 3 3 3 3 3 3 3 3;44DII-s   (A		AAc           	     v   t          t          j                            d                              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<   |                                }t          t          j        t          |                    t          j                  dz   }|                                |d<   t          j
        |d| d          dk    sJ t          j        d| d          }|                                }||_        d|j        _        t          j        ||           d S )NrM   rA  rO   ABCDr  
2000-01-01rA  r   r  r  r-  Fr  zselect * from test_tabler  txtIdxtest_table2zselect * from test_table2r  )r   r   r  r  r  r   r8  r  r   r   r  r  r   r   r  r  r   r  r   r   )r  r   r&  r$  frame2new_idxs         r/   test_xsqlite_basicrF  A  s   
	a  0099d6ll&111r<<<  E
 :e,N%PPPTVVVVV\4nEEF ;FLH&%(((53u::%E%LZZ\\FBIc&kk**"(;;;b@GLLNNF5M:f=nERRRVXXXXX\5~QVWWWFzz||HHNHN(F+++++r.   c           	        t          t          j                            d                              d          t          t          d          t                    t          ddd          	          }t          j	        |j
        d
<   t          j        |d          }|                                 }|                    |           d}|                                D ]#\  }}t!          |g|R  }t#          ||            $|                                  t          j        d|           }|j        |_        t+          j        ||d           d S )NrM   r>  r?  r  r@  rA  r   r  r  r  r  z(INSERT INTO test VALUES (%s, %s, %s, %s)r  r  gMbP?)rtol)r   r   r  r  r  r   r8  r  r   r*  r   r   r  rV   rW   iterrowsr:  r<  r^   r  r   r   r  )	r  r   r9  rb   insr  rT   fmt_sqlr&  s	            r/   test_xsqlite_write_row_by_rowrL  \  s>   
	a  0099d6ll&111r<<<  E
 vEJtv..J



!
!CKK

4C.."" , ,3s)S)))wN+++++\.NCCCF;FL&%d333333r.   c           	        t          t          j                            d                              d          t          t          d          t                    t          ddd          	          }t          j
        |d
          }|                                 }|                    |           d}|j        d         }t          j        |           5 }|                    |t          |                     d d d            n# 1 swxY w Y   |                                  t          j        d|           }|j        d d         |_        t'          j        ||d d                    d S )NrM   r>  r?  r  r@  rA  r   r  r  r  z$INSERT INTO test VALUES (?, ?, ?, ?)r   r  rL   )r   r   r  r  r  r   r8  r  r   r   r  rV   rW   r   r#   rY  r^   r  r   r   r  )r  r   r9  rb   rJ  rT   r  r&  s           r/   test_xsqlite_executerN  s  sz   
	a  0099d6ll&111r<<<  E
 v..J



!
!CKK

0C
*Q-C		~	.	. ,*3c

+++, , , , , , , , , , , , , , ,\.??F;rr?FL&%),,,,,s   $DD	D	c           	        t          t          j                            d                              d          t          t          d          t                    t          ddd          	          }t          j
        |d
          }|                                }|D ]D}|                    d          }t          |          dk    r|d         dk    r|d         dk    sJ Et          j
        |d
ddg          }|                                }d|v sJ |                                 }|                    |           d S )NrM   r>  r?  r  r@  rA  r   r  r  r   r   r   rL   DATETIME)r   zPRIMARY KEY ("A", "B"))r   r   r  r  r  r   r8  r  r   r   r  
splitlinesr  r  rV   rW   )r  r   r9  lineslinetokensrb   s          r/   test_xsqlite_schemarV    s;   
	a  0099d6ll&111r<<<  E
 v..J!!##E + +Cv;;!q	S 0 0!9
****vS#J???J!!##E#z1111



!
!CKK
r.   c                   d}|                                  }|                    |           t          j        |           5 }|                    d           |                    d           t	          j        t          j        d          5  |                    d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nc
    CREATE TABLE test
    (
    a TEXT,
    b TEXT,
    c REAL,
    PRIMARY KEY (a, b)
    );
    ,INSERT INTO test VALUES("foo", "bar", 1.234)z,INSERT INTO test VALUES("foo", "baz", 2.567)zExecution failed on sqlr  z(INSERT INTO test VALUES("foo", "bar", 7))rV   rW   r   r#   r!  r  r  )r  r9  rb   r  s       r/   test_xsqlite_execute_failrZ    sq   J 


!
!CKK
		~	.	. K*IJJJIJJJ]3,4MNNN 	K 	KIJJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K	K K K K K K K K K K K K K K K K K Ks7    ACB-!C-B1	1C4B1	5CC	C	c                    d} t          j        t          j        d                    5 }|                                }|                    |            t          j        |          5 }|                    d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d}t          j	        t          j
        |          5  t          d|           d d d            d S # 1 swxY w Y   d S )NrX  r  rY  z$Cannot operate on a closed database.r  r  r  )r  r   r   r   rV   rW   r   r#   r!  r  rQ  r<  )r9  r`   rb   r  r  s        r/   &test_xsqlite_execute_closed_connectionr\    s   J 
	GOJ77	8	8 ODkkmmJ"4(( 	OJMNNN	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O	O O O O O O O O O O O O O O O 1C	w/s	;	;	; / /#..../ / / / / / / / / / / / / / / / / /sG   >B 'B	=B 	B	B B	B  B$'B$C,,C03C0c                    t          dt          j        d          i          }t          j        || dd          dk    sJ d S )NFromr   testkeywordsFrz   r   r   )r   r   onesr   r  )r  r   s     r/   $test_xsqlite_keyword_as_column_namesrb    sG    	FBGAJJ'	(	(B:bn>OOOSTTTTTTTr.   c                *   t          ddgdg          }t          j        || dd          dk    sJ | }t          d |                    d	          D                       }|d
k    sJ t          j        d	|          }t          j        ||           d S )NrL   rM   c0r   mono_dfFr`  c              3  &   K   | ]}|d          V  dS )r   Nr-   )rS   my_c0s     r/   	<genexpr>z4test_xsqlite_onecolumn_of_integer.<locals>.<genexpr>  s&      OOu%(OOOOOOr.   zselect * from mono_dfrN   )r   r   r  sumrW   r  r   r  )r  re  con_xthe_sumr&  s        r/   !test_xsqlite_onecolumn_of_integerrl    s     A///G:g>	OOOSTTTTTEOO6M(N(NOOOOOGa<<<<\159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            n# 1 swxY w Y   t          ||            t	          j        || |d           d}t          j        t          |          5  t	          j        || |d           d d d            n# 1 swxY w Y   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          ||            d S )NrL   rM   r   r   r  rv  )r   r   Etable_if_existszSELECT * FROM z*'notvalidvalue' is not valid for if_existsr  notvalidvalue)r   rz   r   r  r  z&Table 'table_if_exists' already existsr  F)r   rz   r   r  r   r  r  r  rN   )rN   r   rO   r   r   rn  r  )r  r  rq  rr  rs  )r   r!  r  r  r   r  r  r<  )r  df_if_exists_1df_if_exists_2r   
sql_selectr  s         r/   test_xsqlite_if_existsrw    s\   Ac
CCDDN			???KKLLN"J.*..J
6C	z	-	-	- 
 

 %		
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 z>*** J.zV    3C	z	-	-	- 
 

 		
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 J    *.111h5IIIII
 	
 	
 	
 	 	 	 	 *.1115S5S5SSSSSz>*** 	
 	
 	
 	
 	 	 	 	 *.111h5IIIII
 	
 	
 	
 	 	 	 	 *.111 6 6 6     z>*****s$   A66A:=A:C++C/2C/)rD   r   )r   r   )r   r   )r   r   r   r   )r   r   )r   r   )r   r   r`   r  )r  r   r`   r  r  r+  (,  
__future__r   r  r   rY   r   r   r   r   r   r	   pathlibr   r   typingr   rP  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   re   rh   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r)  r-  r0  r3  r6  r8  r>  r@  rC  rE  rK  rT  r]  r_  ra  re  rg  ri  rk  rm  ro  rq  rs  ru  rx  rz  r}  r  r  r  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<  rD  rJ  rT  rY  r_  ra  rc  rj  rm  ro  rq  ru  rw  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r|  rQ   r  r  r  r  r  r
  r  r#  r'  r+  r0  r4  r6  r:  r>  rC  rM  rA   r   r^  rb  re  skip_if_installedri  ro  rt  rx  r{  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r(  r,  r3  r5  rJ  rT  rb  ro  infrv  r  r  r  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&  r0  r:  r<  rF  rL  rN  rV  rZ  r\  rb  rl  rw  r-   r.   r/   <module>r     s%   " " " " " "           



                                                        ? > > > > > ) ) ) ) ) ) ) ) )                                         ( ' ' ' ' '                          [''C 

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

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