
    bMhc4                   2   d dl mZ d dlZd dlmZ d dlZd dlmZmZmZmZ d dl	m
Z
 d dlmZ d dlZd dlmZ d dlZd dlZd dlZd dlmZ d d	lmZ d d
lmZmZ d dlmZ d dlm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l0m1Z1 d dl2m3Z3 d dl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; erd dl<Z<ej=        >                    d          ej=        j?        g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          ddgZ ejv        deej=        jw        R          dfg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=                            de3j        ddfe3j        ddfe3j:        ddfe3j;        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)using_string_dtype)lib)pa_version_under13p0pa_version_under14p1)import_optional_dependency)
	DataFrameIndex
MultiIndexSeries	Timestampconcat
date_rangeisnato_datetimeto_timedelta)Version)sql)SQLAlchemyEngineSQLDatabaseSQLiteDatabase
get_enginepandasSQL_builderread_sql_queryread_sql_tablez=ignore:Passing a BlockManager to DataFrame:DeprecationWarningc                 &    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,       X/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pandas/tests/io/test_sql.pysql_stringsr/   F   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   )	
sqlalchemyr1   r2   r3   r4   r5   r6   r   __version__)
r>   r1   r2   r3   r4   r5   r6   dtypemetadatar7   s
             r.   iris_table_metadatarB   c   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connrC   stmtcurcsvfilerY   recordss          r.   create_and_load_iris_sqlite3rd   |   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
        )rE   rF   z+INSERT INTO iris VALUES($1, $2, $3, $4, $5)c           	         g | ][}t          |d                    t          |d                   t          |d                   t          |d                   |d         f\S rJ   rO   rQ   s     r.   rT   z3create_and_load_iris_postgresql.<locals>.<listcomp>   sg     	 	 	  #a&MM#a&MM#a&MM#a&MMF	 	 	r-   )rU   rV   rW   rX   rY   rZ   r[   r]   r^   s          r.   create_and_load_iris_postgresqlrg      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   insertrE   rF   c                J    g | ]}t          t          |                     S r,   dictzip)rR   rS   headers     r.   rT   z(create_and_load_iris.<locals>.<listcomp>   s+    ;;;S$s63''((;;;r-   T
checkfirstbind)r>   rj   rB   rW   rX   rY   rZ   valuesbegindropcreaterV   )
r_   rC   rj   r7   rb   rY   paramsr`   conro   s
            @r.   create_and_load_irisrz      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
ConnectionrU   rV   r   r]   r>   r   ru   )r_   r`   ra   adbcr   ry   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Booleanr1   DateTimer3   Integerr4   r6   r&   typesTextColDateCol
IntDateColIntDateOnlyColFloatColIntColBoolColIntColWithNullBoolColWithNull)	r>   r   r   r1   r   r3   r   r4   r6   )r   r   r   r1   r   r3   r   r4   r6   	date_type	bool_typerA   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   rU   rV   r[   r]   )r_   r   r`   ins_stmtra   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)
                )rU   rV   r[   r]   )r_   r   ra   r`   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   ri   EngineTrp   rr   )r>   rj   sqlalchemy.enginer   r   rt   r   connectru   rv   rw   rV   )r_   r   r   rj   r   r   r`   s          r.   create_and_load_typesr   6  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   )r1   r   r4   r6   rj   r   datetzDateColWithTzT)timezonez2000-01-01 00:00:00-08:00z2000-06-01 00:00:00-07:00rp   rr   z2000-01-01 08:00:00UTCtzz2000-06-01 07:00:00name)r>   r1   r   r4   r6   rj   r   r   rt   r   r   ru   rv   rw   rV   r   r   )r_   r1   r   r4   r6   rj   r   rA   r   datetz_datar`   expected_datas               r.   create_and_load_postgres_datetzr   J  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   pytyperS   s      r.   check_iris_framer   w  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   rU   rV   fetchoner>   r   r   r   r   r   exec_driver_sql
scalar_onedispose)r_   r   r`   r   ra   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datarX   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$@rK   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   int64rP   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,   )rR   views     r.   rT   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   rV   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,   )rR   r	  s     r.   rT   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   rV   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   rV   r   _get_valid_sqlite_namer]   r   rU   ru   r   
drop_table)r   r_   r   ra   ry   dbs         r.   r  r  1  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   rV   r   r  r]   r   rU   r   r   identifier_preparerquote_identifierr   ru   )r
  r_   r>   r   ra   quoted_viewr`   ry   s           r.   	drop_viewr  D  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(  [  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rz   r   )r(  r   s     r.   mysql_pymysql_engine_irisr,  l  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_typesr/  s  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_connr2  y  s      		%	%	'	' 4


                    )--c              #  l   K   |                                  5 }|V  d d d            d S # 1 swxY w Y   d S r*  r1  )r,  r_   s     r.   mysql_pymysql_conn_irisr5    s      	"	*	*	,	, 


                 r3  c              #  l   K   |                                  5 }|V  d d d            d S # 1 swxY w Y   d S r*  r1  )r/  r_   s     r.   mysql_pymysql_conn_typesr7          	#	+	+	-	- 


                 r3  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_typesrB    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*  r1  )r=  r_   s     r.   postgresql_psycopg2_connrD    r8  r3  c               #  ~  K   t          j        d           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pyarrow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B22B69B6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   r7   	iris_view)adbc_driver_manageradbc_get_table_schemaProgrammingErrorrollbackrg   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,   tuplert   rR   entrys     r.   rT   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*  r1  )r?  r_   s     r.   postgresql_psycopg2_conn_irisr_    s      	(	0	0	2	2 d


                 r3  c              #  l   K   |                                  5 }|V  d d d            d S # 1 swxY w Y   d S r*  r1  )rB  r_   s     r.   postgresql_psycopg2_conn_typesra    s      	)	1	1	3	3 t


                 r3  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*  r1  )rg  r_   s     r.   sqlite_connri    s      				 	  D


                 r3  c                    t          j        d          } |j        |           }t          ||           t	          |           |                                 | S )Nr>   )r   r!  r   rz   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*  r1  )rm  r_   s     r.   sqlite_conn_irisro    s      		#	#	%	% 


                 r3  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*  r1  )rs  r_   s     r.   sqlite_conn_typesru  -  s      		$	$	&	& $


                 r3  c               #    K   t          j        d           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 )NrF  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  3  s     
	"""
,---((((((			 ddnn]]3 	4JJJ%d++ & &$%%%%%d++ & &3%%%%KKMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s7   C AC<C C	C C	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  rd   r   )rx  r   rS  r_   s       r.   sqlite_adbc_irisrz  D  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  rt   r   r]   )rx  r   rS  r_   r\  r[  s         r.   sqlite_adbc_typesr}  V  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  l  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*  )rd   r   )r  r   s     r.   sqlite_buildin_irisr  s  s6       ;;;n---
r-   c              #  J   K   d |D             }t          | |           | V  d S )Nc                P    g | ]#}t          |                                          $S r,   rX  rZ  s     r.   rT   z(sqlite_buildin_types.<locals>.<listcomp>|  s(    @@@E%''@@@r-   )r   )r  r   s     r.   sqlite_buildin_typesr  z  s;      @@Z@@@J!.*===
r-   r(  )marksr2  r,  r5  r/  r7  r=  rD  r?  r_  rB  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   ry   	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    rFt                      s8|j                            t          j                            d                     |                    |           } |j        d d         }|                    d| dd           d S )	NrK  z=postgres ADBC driver < 1.2 cannot insert index with null typereasonr   r  r  Fr  )	r   node
add_markerr   markxfailr  r   r  )r_   r   r  empty_dfs       r.   test_dataframe_to_sql_emptyr    s    %%%.@.B.B%KV   	
 	
 	
 ""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 )NrF  rK   zint8[pyarrow]r@     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   rv   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 )NrF  r   r  rK   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 driversTr  strict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  rK   )r  rL   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  9  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   r9   )r  r#   r   r  read_sqlr   r   r_   r  
iris_frames      r.   test_read_iris_queryr  E  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  r9   )r  r  r   r  r  r  r   r#   r   r  r  r   r   r  s      r.   test_read_iris_query_chunksizer  Q  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   )r4   r6   r   selectr7   )autoload_withr   r   r   lengthrx   )r  r  r   r  r  r  r>   r4   r6   r   r  r   r   r#   r   r   )
r_   r  r4   r6   r   r  rA   autoload_conr7   r  s
             r.   .test_read_iris_query_expression_with_parameterr  d  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  r/   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 )Nr7   )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 ADBCr  r7   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 )NrK   c                J    g | ]}t          t          |                     S r,   rl   rR   rS   r   s     r.   rT   z8test_to_sql_callable.<locals>.sample.<locals>.<listcomp>  )    :::Ss^^$$:::r-   )r  rV   r	  rj   )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  rK   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   r@   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   rK   rL   rM   皙?r   333333?r  br  Fr   ry   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   ru   rV   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_countrL   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,   )rR   ks     r.   rT   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)
connectionrU   r	   rX   writer	writerowsseekjoinr  r   copy_expert)r	  r_   r   r  
dbapi_connra   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rK   rL   r  r   r  ncol1col2col3r  F)r   ry   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   ri   r   r   c                    fd|D             } | j                                       |                              dg          }|                    |          }|j        S )Nc                J    g | ]}t          t          |                     S r,   rl   r  s     r.   rT   z\test_insertion_method_on_conflict_do_nothing.<locals>.insert_on_conflict.<locals>.<listcomp>3  r  r-   r  )index_elements)r	  rt   on_conflict_do_nothingrV   rowcountr	  r_   r   r  r   r`   r%  rj   s     `    r.   insert_on_conflictzHtest_insertion_method_on_conflict_do_nothing.<locals>.insert_on_conflict2  sj    ::::	:::F5;VD\\##C5#99 	
 d##r-   zx
    CREATE TABLE test_insert_conflict (
        a  integer PRIMARY KEY,
        b  numeric,
        c  text
    );
    rK    @r  abcr   test_insert_conflictr  Fr  rK   g	@r  r   ry   r   r  r  Tr  )r  sqlalchemy.dialects.postgresqlrj   r   r   sqlalchemy.sqlr   r   r   ru   rV   r   listr  r   r$   r   r  r   r  )r_   r  r   r   r.  
create_sqlry   r#  	df_insertinsertedr%  r  rj   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  r/  )rL   g@r  r1  r   test_public_schemar  Fpublic)r   ry   r  r   r  r  )r  r   r  r  r  r   r7  r  r   r$   r   r  )r_   r  	test_datadf_outs       r.   test_to_sql_on_public_schemarC  c  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   ri   r   r   c                    fd|D             } | j                                       |          }|                    |j        j        |j        j                  }|                    |          }|j        S )Nc                J    g | ]}t          t          |                     S r,   rl   r  s     r.   rT   zXtest_insertion_method_on_conflict_update.<locals>.insert_on_conflict.<locals>.<listcomp>  r  r-   )r  r  )r	  rt   on_duplicate_key_updater:  r  r  rV   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)
    );
    r/  r1  r   r2  r  Fr  r3  r4  rL   Tr  )r  sqlalchemy.dialects.mysqlrj   r   r   r6  r   r   r   ru   rV   r   r7  r  r   r$   r   r  r   r  )r_   r  r   r   r.  r8  ry   r   r#  r:  r%  r  rj   s               @r.   (test_insertion_method_on_conflict_updaterI  {  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;
    rK   r   group_idr   )r  r   r   r6  r   uuiduuid4hexr   r   ru   rV   r$   r   r   r  )
r_   r  r   r   r   r
  sql_stmtry   r%  r#  s
             r.   test_read_view_postgresrS    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_viewrK   r   rM  )rV   r  r  r   r   r  )r  create_tableinsert_intocreate_viewr%  r#  s         r.   test_read_view_sqliterX    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   rV   )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 )NrZ  r  r[  )r   r  r]  r   rV   )ro  s    r.   test_execute_deprecatedr`    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.   flavorrb    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  rb  r"   run_transaction
read_queryr   r_   r  r/   r  r  rx   r  r  s           r.   test_read_sql_iris_parameterri    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   rd  Tr  r*   r   r   r  r  re  rh  s           r.   "test_read_sql_iris_named_parameterrl    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  rb  r"   rf  rg  r   )r_   r  r/   r  r  r  r  s          r.   ,test_read_sql_iris_no_parameter_with_percentrn  3  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     rj  c                x    |                     |           } t          j        d|           }t          |           d S )NzSELECT * FROM iris_view)r  r   r#   r   r  s      r.   test_api_read_sql_viewrp  F  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_resultrt  M  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_sqlrv  Z  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_failrz  e  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  t  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{""""""rw  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  rN   r  rL   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{""""""rw  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.....rw  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!**,,+++++rw  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  ry   "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  FrL   )ry   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"   rV   r   r\   r7  )r_   r  
pandas_sqliris_resultsrS   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'   rA  r   parse_datesi  rK   rM   r   rN   %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   r@   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   )ry   r  rA  r   r   r]  int32)r   r   r   zdatetime64[us])r  r  r   r  r  r   r|  rP   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   r@   r   r   r  r   r_   r  r   s      r.   test_api_date_and_indexr  X  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   ry   rL   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  g  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  rN   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  rN   r  )A0A1)B0B1r  r  r   r  rK   level_1r  r   r   )r  r  rL   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  rK   r0  line1rL         ?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<<<<<<rw  r@   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  rL   rA  z(SELECT "A", "B" FROM test_dtype_argumentz$SELECT A, B FROM test_dtype_argumentry   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_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 )
NrK   rL   rM   rN   r   r   test_frame_integer_col_namesr  r  )r  r   r   r  r  s      r.   test_api_integer_col_namesr  F  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   r8  s       r.   test_api_get_schemar  M  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)ry   r  zCREATE TABLE pypi.r  r  s       r.   test_api_get_schema_with_schemar  [  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  r0  皙@r  r  INTEGERr   )r   r  r  r  r  )r  r  r   r  r  r  r   r>   r   r   r  )r_   r  r  float_framer@   r   r8  s          r.   test_api_get_schema_dtypesr  j  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  r0  r  )Col1Col2r  r  )ry   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   r8  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  rL   )   r   abcder   Fr  zselect * from test_chunksizer   )r   r   r   r   rL   r   r  ignore_indexrK   r  r  r  )r  r  r   r  r  r  r   r  r   r  r   r   randomdefault_rngstandard_normalr7  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  rK   rL   rM   rN      é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9rw  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   rK   rL   r   r  r  Fr  rA  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   rF  z16.0)rx  rK  z!pyarrow->pandas throws ValueErrorTr  
test_tabler  r  r   rK   r  r  r  Fr  z)SELECT a, b, a +1 as a, c FROM test_table)rK   r  rL   rK   )rL   r   rM   rK   )rM   r  rN   rK   )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_columnsr/  	  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_columnsr3  0	  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  r1  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_colr5  @	  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  r7   )r  r   r  r  r  r   r#   r  r   r  r$   )r_   r  iris_frame1iris_frame2s       r.   test_read_sql_delegater9  W	  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   ru   rV   r   r  r   r$   r#   )ri  r_   r   r   
query_listr  s         r.   test_not_reflect_all_tablesr=  j	  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_namerB  	  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>   rD  r   r   r   r   SQLTabler   r	  r  r   )r_   r  rD  r   r  r	  s         r.   test_sqlalchemy_type_mappingrL  	  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)Int8rN  )uint8rN  )UInt8rN  )int16rN  )Int16rN  )uint16r  )UInt16r  )r  r  )Int32r  )uint32BIGINT)UInt32rX  )r   rX  )Int64rX  r   rX  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   rK   r  r   r@   rI  rJ  )
r  r   r   r   rK  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   rK   r  r\  z1Unsigned 64 bit integer datatype is not supportedr  rI  rJ  )r  r   r   r   r   r  r  rK  )r_   r  r  r   r  s        r.   (test_sqlalchemy_integer_overload_mappingra  	  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  r7   r  Fr  r  )r   r!  r  r   rd  r  r   r  r$   r#   r  )
r_   r  r   r   db_urir	  ry  r   r  r  s
             r.   test_database_uri_stringrd  	  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/dbnamere  r  zselect * from table)r   r!  r  r  ImportErrorr   r  )r_   r  rc  s      r.   (test_pg8000_sqlalchemy_passthrough_errorrh  	  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   rA  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_objrn  	  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>   rp  r  rB   wherer  r<   r   r  rj  )r_   r  rp  r  r7   name_selectrl  rm  s           r.   test_query_by_select_objrs  
  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  r1  r  r(  rM   rN   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_percentagerw  
  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  rN   z!SELECT * FROM test_frame3_legacy;)	r   rd  r   r   r   r   r  r#   r  )r   r   r_   r%  s       r.   test_sql_open_closerz  (
  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  rg  r   r  )r_   r  s     r.   test_con_string_import_errorr|  6
  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__A
  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__D
  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.closeG
  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  r7   )r   r#   r  r   r  r   r  DatabaseError)r  r_   r7  r8  r  s        r.   test_sqlite_read_sql_delegater  O
  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   r8  s     r.   test_get_schema2r  Z
  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   rE  rF  TrG  rI  rJ  
r   r  rK   rD  )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  rN   )r   skipr  r>   r   r   r   r   r  r  r  r_   r  r   r  r  insps         r.   test_create_tabler  r
  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  rN   )r   r  r  r>   r   r   r   r   rf  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  rN   r  r   r  r  r   Tr  )r   r  r  r"   rf  r  rg  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"   rf  rV   r   r\   r7  )r_   r  r  r  rS   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 )Nr7   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 )Nr7   r8   )ry   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   r@   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  rK   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   r@   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  rK   r  Tr  )r  r   r   r7  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:00rM   
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  0  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'  rK   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  O  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   ry   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  Z  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   r@   r   r   )r_   r  r  r   expected_types        r.   test_date_parsingr  g  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  rM   r  r  r  test_datetimer  r   rK   )axisSELECT * FROM test_datetimer&   r  r   )r  r   r   r   r  r  r   r$   rv   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  rM   r  r  r  rK   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  rK   rL   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   rK      r  r   	test_timeFr  rL   
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  rK   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  rM   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  rM   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  rM   rL   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_indexrL   >   re  r  zASELECT * FROM sqlite_master WHERE type = 'index' AND tbl_name = ''zPRAGMA index_info()r   r   c                    g | ]
}|d          S )column_namesr,   )rR   r  s     r.   rT   z*test_to_sql_save_index.<locals>.<listcomp>G  s    2221^$222r-   )r  r  r   r  r  r  r   r  r"   rf  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"   rf  rV   )r_   r  r  r`   r   r  transs          r.   test_transactionsr+  L  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.  k  s        Dr-   r/  z/INSERT INTO test_trans (A,B) VALUES (1, 'blah')r  zSELECT * FROM test_transrK   )r  r"   rf  r   r    rV   r>   r   	Exceptionr   rg  r  )r_   r  r  r  r*  r`   r   r/  ins_sqlr!  r
  s              r.   test_transaction_rollbackr2  \  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   ru   rV   r$   r   r  )
r_   r  r   r   r   r'  r8  blank_test_dfnewconreturned_dfs
             r.   r4  r4    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   r5   r4   r   r   g?Tg?Nr   
dtype_testr  rL   dtype_test2r   ry   r@   rr   z&The type of B is not a SQLAlchemy typer  r  dtype_test3
   single_dtype_test)r   r  r  r>   r   r5   sqlalchemy.schemar4   r   r  reflecttablesr   r   r   r  r  r   r  )r_   r  r   r5   r4   r2  r   r   metasqltyper  sqltypeasqltypebs                r.   
test_dtyperI    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   r3   r   r9  T  r   rK   r  r  r   BoolDateIntr3   notna_dtype_testr  rL   rr   r'   rM  rN  rO  r3   )r   r  r  r>   r   r   r3   r   rB  r4   r   r   r   r  r   r$   rC  rD  r   r   r   )r_   r  r  r   r   r3   r   r4   r2  r   r'  r  rE  my_typecol_dicts                  r.   test_notna_dtyperS    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   )
BigIntegerr3   r   r9  gYB?r  r  float64r   r  r   )f32f64
f64_as_f32i32r  test_dtypesFr  rY     )	precision)r   ry   r   r  r@   rK   rX     rr   rW  rZ  r  )r   r  r  r>   rU  r3   r   rB  r4   r   r   r  r   r$   r   roundr   rC  rD  r   r   r   r   )r_   r  rU  r3   r   r4   Vr   r!  rE  rR  s              r.   test_double_precisionra    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   ry   r  )r  )r  r   s     r.   test_appendz3test_connectable_issue_example.<locals>.test_append3  s     jHMMMMMr-   c                6     |           } | |           d S r*  r,   )r_   foo_datarg  rd  s     r.   test_connectablez8test_connectable_issue_example.<locals>.test_connectable6  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   ru   )connectabler_   r   rj  s     r.   mainz,test_connectable_issue_example.<locals>.main<  s   k6** 	*$$&& +$ZZ\\ + +$$T***+ + + + + + + + + + + + + + ++ + + + + + + + + + + + + + + + + + [)))))s4   A+AA+A	A+A	A++A/2A/rf  r(  r  rM   )r  r   r   r   r  )r_   r  rm  r   rg  rj  rd  s      @@@@r.   test_connectable_issue_examplern  '  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.3rq  zGH 36465r  zinf cannot be used with MySQLr  foobarFr  rK   )r   r  r   r!  r   r?   r   r  r  r  r  r  r  r   r$   r   assert_equal)	r_   r  ro  r   r  r  r  r  r!  s	            r.   test_to_sql_with_negative_npinfru  K  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   )r1   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__idrz  )r1   r   rw  s   r.   	Temporaryr|    sP        #${m4VG...vggbkkE222r-   r  )rz  )r   ry   )r   r  r  r>   r1   r   rw  r  sqlalchemy.ormrx  ry  r   ru   r  	__table__rw   addflushr   r#   rz  r   r  )r_   r  r  rx  ry  rA  r#  Baser  sessionr   r1   r   rw  s              @@@r.   test_temporary_tabler  k  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  rN   N)r  r"   rf  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   rN   	r  r  option_contextr"   rf  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   rN   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   ry   r   r  mode.string_storageSelect * from dtype_backendr   z(adbc does not support chunksize argumentr  rM   )ry   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 T"T""$U$$d-
 
 
 *).-SS	T T T T T T T T T T T T T T T &(+++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%   
2BBB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  rM   )r  r  )r  r   r  r  r  r  r  r  r  r   r  r  s                r.   !test_read_sql_dtype_backend_tabler    sF    4F$..KM   	
 	
 	
 I""4((DE	BII5d%9IEEE		0.	A	A T T"T""5$mLLL)).-SST T T T T T T T T T T T T T T &(+++		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%   /C  CC;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 )NrK   rM   rZ  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  N  s    BFAg666			111bfc*)<<<y999$$$$$$ !!!		
 		
  r-   c                     dd} | S )Nr  r   c                :   |dk    r;t          j        d          t          j                                                  }nt          j        |           }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          t          g d|          t          g 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 )NrF  rK   rM   rZ  r  r  r  r  r  r  TFbooleanr  r-  r  r  r   )ArrowExtensionArrayc           	     ^    i | ])}|                      |         d                     *S )T)from_pandas)r  )rR   r  r  r   r.  s     r.   
<dictcomp>z8dtype_backend_expected.<locals>.func.<locals>.<dictcomp>z  sK        ,,RXXbg4X-P-PQQ  r-   r'   r&   numpy_nullable)r  r  zint64[pyarrow])r   r!  r  
ArrowDtyper  StringDtyper   r   r   r)  NApandas.arraysr  r   r   )r  r  r  string_dtyper  r   r.  s       @@@r.   r  z$dtype_backend_expected.<locals>.func`  s   I%%$Y//B=55LL>.99LQN':::IIIW555S"&#.i@@@OOO9===T5"%0	BBB///yAAAOOO<@@@,,,L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  ^  s    & & & &P 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 testrK   )r@   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  )r@   r  r  )r   r   r   r  r   rZ  )
r  r   r  r  r  r   rV  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.rK   rL   rM   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  rK   rL   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 )NrK   rL   rM   rN   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   r1   r   r5   )ry  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  rr   rK   helloworld)r  r  r  Fr  r  rL   r  r  )r>   r1   r   r5   r  ry  r  ru   rA   
create_allr   r  r]   r  r  r  r7  r   )rg  r_   ry  r  	BaseModelr  rx  r  r   
test_queryr1   r   r5   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                   | }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   t          j        t          j        
          }t          dddgi|t          dg|                    }t          j
        ||           d S )Nr  r  xyFr  )ry   r   r  zfuture.infer_stringT)na_valuer  )r@   r   )r   r  r  r  r$   r  r   r)  r   r   r  )rg  r_   r	  r   r%  r@   r#  s          r.   test_read_sql_string_inferencer    s   DE	C#s$	%	%BIIeUiI@@@		0$	7	7 - -t,,- - - - - - - - - - - - - - - NBF+++E	sCjse50I0I0I  H &(+++++s   A##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 )NrK   rL   r  r   r  r  r  z$DROP SCHEMA IF EXISTS other CASCADE;zCREATE SCHEMA other;test_schema_publicFr  test_schema_public_explicitr?  )r   ry   r   r  test_schema_otherotherr@  z!Table test_schema_other not foundr  )r   ry   r  r   r  )r   ry   r  r   r  r  Tr  )r   r   ru   r   r  r   r$   r   r  r   r  r  r   )
r=  r_   r   ry   r	  r
  r  res4r  r!  s
             r.   test_psycopg2_schema_supportr  0  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;rK   2021r   r   rL   r  
created_dtr   Tr  person)r6  r   r   ru   rV   r  r  r   r   r   r  r   r   r  )	r=  r_   r   rU  ry   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_framerN   )r   r   r   rf  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  rK   rL   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   rK   r  r  rL   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)rV   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  rL   r=  STRINGr>  r  z!B \(<class 'bool'>\) not a stringr  r  rA  )r   r  r  r   r  r  bool)r  r_   r2  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 )NTrK  r   rK   r  r  r   rL  rP  r  rL   rM  r  rN  rD  rO  r3   REAL)r   r   r   r  r  )r  r_   r2  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 )NrK   rL   rM   rN   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_namesr.    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_bytesrP   r|  r   rV  r   r   r   r  rY  )r   r  _formattersprocessed_argsarg	formatters         r.   format_queryr8    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"   rV   r   r7  )r  ry   r  r!  s       r.   tqueryr:  2  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           	     h   t          t          j                            d                              d          t          t          d                    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 )NrL   r@  rN   ABCD
2000-01-01r@  r   r  r  r,  Fr  zselect * from test_tabler  txtr  Idxtest_table2zselect * from test_table2r  )r   r   r  r  r  r   r7  r   r   r  r  r   r   r  r  r  r  r   r   )r  r   r%  r#  frame2new_idxs         r.   test_xsqlite_basicrD  9  s   
	a  0099d6ll##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          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 )NrL   r<  r=  r>  r@  r   r  r  r  r  z(INSERT INTO test VALUES (%s, %s, %s, %s)r  r  gMbP?)rtol)r   r   r  r  r  r   r7  r   r)  r   r   r  rU   rV   iterrowsr8  r:  r]   r  r   r   r  )	r  r   r8  ra   insr  rS   fmt_sqlr%  s	            r.   test_xsqlite_write_row_by_rowrJ  T  s9   
	a  0099d6ll##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          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 )NrL   r<  r=  r>  r@  r   r  r  r  z$INSERT INTO test VALUES (?, ?, ?, ?)r   r  rK   )r   r   r  r  r  r   r7  r   r   r  rU   rV   r   r"   rY  r]   r  r   r   r  )r  r   r8  ra   rH  rS   r  r%  s           r.   test_xsqlite_executerL  k  su   
	a  0099d6ll##r<<<  E
 v..J



!
!CKK

0C
*Q-C		~	.	. ,*3c

+++, , , , , , , , , , , , , , ,\.??F;rr?FL&%),,,,,s   $C>>DDc           	     v   t          t          j                            d                              d          t          t          d                    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 )NrL   r<  r=  r>  r@  r   r  r  r   r   r   rK   DATETIME)r   zPRIMARY KEY ("A", "B"))r   r   r  r  r  r   r7  r   r   r  
splitlinesr  r  rU   rV   )r  r   r8  lineslinetokensra   s          r.   test_xsqlite_schemarT    s6   
	a  0099d6ll##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))rU   rV   r   r"   r   r  r  )r  r8  ra   r  s       r.   test_xsqlite_execute_failrX    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 )NrV  r  rW  z$Cannot operate on a closed database.r  r  r  )r  r   r   r   rU   rV   r   r"   r   r  rQ  r:  )r8  r_   ra   r  r  s        r.   &test_xsqlite_execute_closed_connectionrZ    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ry   r   r   )r   r   onesr   r  )r  r   s     r.   $test_xsqlite_keyword_as_column_namesr`    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 )NrK   rL   c0r   mono_dfFr^  c              3  &   K   | ]}|d          V  dS )r   Nr,   )rR   my_c0s     r.   	<genexpr>z4test_xsqlite_onecolumn_of_integer.<locals>.<genexpr>  s&      OOu%(OOOOOOr-   zselect * from mono_dfrM   )r   r   r  sumrV   r  r   r  )r  rc  con_xthe_sumr%  s        r.   !test_xsqlite_onecolumn_of_integerrj    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 )NrK   rL   r   r   r  ru  )r   r   Etable_if_existszSELECT * FROM z*'notvalidvalue' is not valid for if_existsr  notvalidvalue)r   ry   r   r  r  z&Table 'table_if_exists' already existsr  F)r   ry   r   r  r   r  r  r  rM   )rM   r   rN   r   r   rl  r  )r  r  ro  rp  rq  )r   r   r  r  r   r  r  r:  )r  df_if_exists_1df_if_exists_2r   
sql_selectr  s         r.   test_xsqlite_if_existsru    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/)rC   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   rX   r   r   r   r   r   r	   pathlibr   r   typingr   rO  r  r   r   pandas._configr   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.util.versionr   	pandas.ior   pandas.io.sqlr   r   r    r!   r"   r#   r$   r>   r  filterwarnings
single_cpu
pytestmarkfixturer/   rB   rd   rg   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r(  r,  r/  r2  r5  r7  r=  r?  rB  rD  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;  rC  rI  rS  rX  r^  r`  rb  ri  rl  rn  rp  rt  rv  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r|  rP   r  r  r  r  r  r	  r  r"  r&  r*  r/  r3  r5  r9  r=  rB  rL  r@   r   r]  ra  rd  skip_if_installedrh  rn  rs  rw  rz  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r'  r+  r2  r4  rI  rS  ra  rn  infru  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$  r.  r8  r:  rD  rJ  rL  rT  rX  rZ  r`  rj  ru  r,   r-   r.   <module>r     sY%   " " " " " "           



                                           - - - - - -              ? > > > > > ) ) ) ) ) ) ) ) )                                  ' ' ' ' ' '                          KG  K	
   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(???  ),<+==@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'4T 11*.>!?@@+4 +4 A@ 21+4\ 11!Q!Q!QRR> > SR 21>     ) ) )X 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-   